:root{--bg-deep: #0d0a07;--bg-mid: #1a1410;--bg-warm: #221913;--ink: #f4e4c1;--ink-dim: #c4a878;--ink-faded: #7a6850;--ochre: #c8723a;--ochre-bright: #e89456;--ochre-deep: #8a4a20;--emerald: #6b9c5a;--emerald-bright: #8fc775;--crimson: #b04848;--gold: #d4a455;--line: rgba(244, 228, 193, .08);--line-strong: rgba(244, 228, 193, .18)}*{box-sizing:border-box;margin:0;padding:0}html,body{width:100%;height:100%;overflow:hidden;background:var(--bg-deep);font-family:Manrope,sans-serif;color:var(--ink);user-select:none;-webkit-user-select:none}body{position:relative;background:radial-gradient(ellipse at 20% 30%,rgba(200,114,58,.08) 0%,transparent 50%),radial-gradient(ellipse at 80% 70%,rgba(107,156,90,.05) 0%,transparent 50%),radial-gradient(ellipse at 50% 50%,var(--bg-warm) 0%,var(--bg-deep) 70%)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:radial-gradient(circle at 1px 1px,rgba(244,228,193,.04) 1px,transparent 0);background-size:32px 32px;z-index:1}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0,transparent 3px,rgba(0,0,0,.015) 3px,rgba(0,0,0,.015) 4px);z-index:999;mix-blend-mode:multiply}#scene{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;cursor:grab;z-index:2}#scene.dragging{cursor:grabbing}#scene.over-module{cursor:pointer}#hud{position:fixed;top:0;left:0;right:0;padding:24px 32px;display:flex;justify-content:space-between;align-items:flex-start;pointer-events:none;z-index:10}.hud-left,.hud-right{pointer-events:auto}.logo{display:flex;align-items:baseline;gap:10px;font-family:Cinzel,serif;font-weight:700;letter-spacing:.15em;font-size:14px}.logo-mark{color:var(--ochre);font-size:18px;animation:pulse 4s ease-in-out infinite}.logo-text em{font-style:normal;color:var(--ink-dim);font-weight:500;margin-left:2px}@keyframes pulse{0%,to{opacity:.6}50%{opacity:1}}.zoom-indicator{margin-top:14px;display:flex;flex-direction:column;gap:6px}#zoomLabel{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faded);font-weight:600}.zoom-bar{width:140px;height:2px;background:var(--line);position:relative;overflow:hidden}#zoomBarFill{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,var(--ochre-deep),var(--ochre-bright));transform-origin:left;transform:scaleX(.1);transition:transform .2s cubic-bezier(.16,1,.3,1)}.hud-right{text-align:right}.stats{display:flex;flex-direction:column;align-items:flex-end}.stat{font-family:Cinzel,serif;font-size:32px;font-weight:700;color:var(--ink);line-height:1;letter-spacing:.02em}.stat em{font-style:normal;color:var(--ink-faded);font-size:18px;font-weight:500}.stat-label{margin-top:4px;font-size:9px;letter-spacing:.25em;text-transform:uppercase;color:var(--ink-faded);font-weight:600}#controls{position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column;gap:8px;z-index:10}#controls button{width:44px;height:44px;border:1px solid var(--line-strong);background:#1a1410d9;color:var(--ink-dim);font-size:18px;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:all .2s ease;font-family:Manrope,sans-serif}#controls button:hover{border-color:var(--ochre);color:var(--ochre-bright);transform:translateY(-1px)}#controls button:active{transform:translateY(0)}#hint{position:fixed;bottom:24px;left:50%;transform:translate(-50%);font-size:11px;color:var(--ink-faded);letter-spacing:.05em;z-index:10;pointer-events:none;font-weight:500}#hint kbd{display:inline-block;padding:2px 7px;margin:0 2px;border:1px solid var(--line-strong);border-radius:3px;background:#1a141099;font-family:Manrope,sans-serif;font-size:10px;color:var(--ink-dim);font-weight:600}.vignette{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:5;background:radial-gradient(ellipse at center,transparent 30%,rgba(13,10,7,.5) 90%,rgba(13,10,7,.9) 100%)}.stats-btn{background:transparent;border:none;padding:0;cursor:pointer;color:inherit;font:inherit;text-align:right;transition:opacity .15s ease}.stats-btn:hover{opacity:.75}.stats-btn:active{transform:translateY(1px)}.panel{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(560px,92vw);max-height:85vh;background:linear-gradient(180deg,#1a1410,#15110d);border:1px solid var(--line-strong);box-shadow:0 0 0 1px #c8723a26,0 30px 80px #0009,inset 0 1px #f4e4c10d;z-index:100;display:flex;flex-direction:column;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);animation:panelIn .25s cubic-bezier(.16,1,.3,1)}@keyframes panelIn{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.panel.hidden{display:none}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:18px 24px;border-bottom:1px solid var(--line)}.panel-header h2{font-family:Cinzel,serif;font-weight:700;font-size:14px;letter-spacing:.2em;color:var(--ink);text-transform:uppercase}.panel-close{width:28px;height:28px;background:transparent;border:1px solid var(--line);color:var(--ink-dim);font-size:18px;cursor:pointer;line-height:1;transition:all .15s ease}.panel-close:hover{border-color:var(--ochre);color:var(--ochre-bright)}.panel-body{padding:20px 24px;overflow-y:auto;flex:1}.panel-body .total-bar{margin-bottom:22px;padding-bottom:22px;border-bottom:1px solid var(--line)}.panel-body .total-bar .num{font-family:Cinzel,serif;font-size:36px;font-weight:700;color:var(--ink);line-height:1}.panel-body .total-bar .num em{color:var(--ink-faded);font-style:normal;font-size:22px;margin-left:4px}.panel-body .total-bar .lbl{font-size:10px;letter-spacing:.2em;color:var(--ink-faded);text-transform:uppercase;margin-top:6px;font-weight:600}.panel-body .total-bar .pct{margin-top:10px;height:3px;background:var(--line);position:relative;overflow:hidden}.panel-body .total-bar .pct-fill{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,var(--ochre-deep),var(--ochre-bright));transform-origin:left}.module-row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:14px;padding:10px 0;border-bottom:1px dashed var(--line)}.module-row:last-child{border-bottom:none}.module-row .mod-icon{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:1px solid var(--line-strong);overflow:hidden;background:#0d0a0799;flex-shrink:0}.module-row .mod-icon img{width:75%;height:75%;object-fit:contain}.module-row .mod-name{font-family:Manrope,sans-serif;font-weight:600;font-size:13px;color:var(--ink)}.module-row .mod-progress{width:100%;height:4px;background:var(--line);position:relative;margin-top:4px;overflow:hidden}.module-row .mod-progress-fill{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left}.module-row .mod-stats{font-family:Cinzel,serif;font-size:13px;font-weight:700;color:var(--ink-dim);white-space:nowrap}.module-row .mod-stats em{font-style:normal;color:var(--ink-faded);font-weight:500;margin:0 2px}.module-row .mod-pct{font-size:10px;letter-spacing:.15em;color:var(--ink-faded);text-align:right;margin-top:2px}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:99;animation:fadeIn .2s ease}.backdrop.hidden{display:none}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.comment-popover{position:fixed;width:280px;background:linear-gradient(180deg,#1a1410,#15110d);border:1px solid var(--line-strong);box-shadow:0 0 0 1px #c8723a33,0 20px 50px #000000b3;z-index:110;padding:12px 14px;animation:popIn .15s cubic-bezier(.16,1,.3,1)}@keyframes popIn{0%{opacity:0;transform:translateY(-4px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.comment-popover.hidden{display:none}.comment-popover-title{font-family:Cinzel,serif;font-size:11px;font-weight:700;letter-spacing:.1em;color:var(--ochre-bright);margin-bottom:8px;text-transform:uppercase}.comment-popover textarea{width:100%;min-height:70px;background:#0d0a0799;border:1px solid var(--line);color:var(--ink);font-family:Manrope,sans-serif;font-size:13px;padding:8px 10px;resize:vertical;outline:none;transition:border-color .15s}.comment-popover textarea:focus{border-color:var(--ochre)}.comment-popover-actions{display:flex;justify-content:space-between;gap:8px;margin-top:10px}.comment-popover-actions button{background:transparent;border:1px solid var(--line-strong);color:var(--ink-dim);font-family:Manrope,sans-serif;font-size:11px;font-weight:600;letter-spacing:.05em;padding:6px 12px;cursor:pointer;text-transform:uppercase;transition:all .15s ease}.comment-btn-save:hover{border-color:var(--ochre);color:var(--ochre-bright)}.comment-btn-delete:hover{border-color:var(--crimson);color:var(--crimson)}.data-section{margin-top:22px;padding-top:22px;border-top:1px solid var(--line)}.data-section h3{font-family:Cinzel,serif;font-size:11px;font-weight:700;letter-spacing:.2em;color:var(--ink-dim);text-transform:uppercase;margin-bottom:14px}.data-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.data-btn{background:#0d0a0780;border:1px solid var(--line-strong);color:var(--ink-dim);font-family:Manrope,sans-serif;font-size:12px;font-weight:600;letter-spacing:.05em;padding:10px 14px;cursor:pointer;transition:all .15s ease;text-align:left;text-transform:uppercase}.data-btn:hover{border-color:var(--ochre);color:var(--ochre-bright);transform:translateY(-1px)}.data-btn.full{grid-column:1 / -1}.data-info{margin-top:12px;font-size:11px;color:var(--ink-faded);line-height:1.5}.data-info .warn{color:var(--crimson);font-weight:600}.data-info .good{color:var(--emerald-bright);font-weight:600}.backups-list{margin-top:12px;display:flex;flex-direction:column;gap:6px}.backup-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;padding:8px 10px;background:#0d0a0766;border:1px solid var(--line)}.backup-row .info{font-size:11px}.backup-row .info .date{color:var(--ink);font-weight:600}.backup-row .info .meta{color:var(--ink-faded);font-size:10px;margin-top:2px;letter-spacing:.05em}.backup-row button{background:transparent;border:1px solid var(--line-strong);color:var(--ink-dim);font-family:Manrope,sans-serif;font-size:10px;font-weight:600;letter-spacing:.05em;padding:5px 10px;cursor:pointer;text-transform:uppercase;transition:all .15s}.backup-row button:hover{border-color:var(--ochre);color:var(--ochre-bright)}.toast{position:fixed;bottom:80px;left:50%;transform:translate(-50%);padding:12px 20px;background:linear-gradient(180deg,#1a1410,#15110d);border:1px solid var(--line-strong);color:var(--ink);font-family:Manrope,sans-serif;font-size:13px;font-weight:500;z-index:200;animation:toastIn .25s cubic-bezier(.16,1,.3,1);box-shadow:0 10px 30px #0009;max-width:80vw}.toast.success{border-color:#8fc77566}.toast.error{border-color:#b0484880;color:#f4c4c4}@keyframes toastIn{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.toast.fadeout{animation:toastOut .3s forwards}@keyframes toastOut{to{opacity:0;transform:translate(-50%,10px)}}.help-section{margin-bottom:22px}.help-section:last-child{margin-bottom:0}.help-section h3{font-family:Cinzel,serif;font-size:12px;font-weight:700;letter-spacing:.15em;color:var(--ochre-bright);text-transform:uppercase;margin-bottom:10px}.help-section.important h3{color:var(--crimson)}.help-section p{font-size:13px;line-height:1.6;color:var(--ink-dim);margin-bottom:8px}.help-list{list-style:none;padding:0}.help-list li{font-size:13px;line-height:1.7;color:var(--ink-dim);padding-left:16px;position:relative}.help-list li:before{content:"·";position:absolute;left:4px;color:var(--ochre);font-weight:700}.help-list li b{color:var(--ink);font-weight:600}.help-section.important{background:#b048480f;border:1px solid rgba(176,72,72,.2);padding:14px 16px}.welcome-banner{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;display:flex;align-items:center;justify-content:center;background:#0d0a07bf;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:fadeIn .4s ease}.welcome-banner.hidden{display:none}.welcome-content{max-width:460px;width:90vw;text-align:center;padding:40px 36px;background:linear-gradient(180deg,#1a1410,#15110d);border:1px solid var(--line-strong);box-shadow:0 0 0 1px #c8723a33,0 40px 100px #000000b3;animation:panelIn .4s cubic-bezier(.16,1,.3,1)}.welcome-mark{font-size:36px;color:var(--ochre);margin-bottom:14px;animation:pulse 4s ease-in-out infinite}.welcome-content h2{font-family:Cinzel,serif;font-size:22px;font-weight:700;letter-spacing:.08em;color:var(--ink);margin-bottom:18px}.welcome-content p{font-size:14px;line-height:1.6;color:var(--ink-dim);margin-bottom:14px}.welcome-content .welcome-warn{font-size:12.5px;color:var(--ink-faded);background:#c8723a12;border:1px solid rgba(200,114,58,.18);padding:12px 14px;margin-top:4px}.welcome-content .welcome-warn b{color:var(--ochre-bright)}.welcome-content button{margin-top:24px;padding:12px 32px;background:linear-gradient(180deg,var(--ochre) 0%,var(--ochre-deep) 100%);border:none;color:#1a1410;font-family:Cinzel,serif;font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;transition:all .15s ease}.welcome-content button:hover{transform:translateY(-2px);box-shadow:0 8px 24px #c8723a4d}.viewer-banner{position:fixed;top:0;left:0;right:0;z-index:90;background:linear-gradient(180deg,#9b6bc42e,#9b6bc41a);border-bottom:1px solid rgba(155,107,196,.45);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);animation:viewerBannerIn .4s cubic-bezier(.16,1,.3,1)}.viewer-banner.hidden{display:none}@keyframes viewerBannerIn{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.viewer-banner-content{display:flex;align-items:center;justify-content:center;gap:18px;padding:10px 20px;max-width:1200px;margin:0 auto}.viewer-banner-text{display:flex;align-items:center;gap:10px;color:var(--ink);font-family:Manrope,sans-serif;font-size:13px;font-weight:500;letter-spacing:.02em}.viewer-banner-text b{color:#d4b8ec;font-weight:700}.viewer-banner-text em{font-style:normal;color:var(--ink-faded);font-size:11px;letter-spacing:.15em;text-transform:uppercase}.viewer-eye{font-size:18px;filter:drop-shadow(0 0 6px rgba(155,107,196,.5))}#viewerExitBtn{background:#0d0a0780;border:1px solid rgba(155,107,196,.5);color:var(--ink);font-family:Manrope,sans-serif;font-size:11px;font-weight:600;letter-spacing:.05em;padding:7px 14px;cursor:pointer;text-transform:uppercase;transition:all .15s ease}#viewerExitBtn:hover{background:#9b6bc433;border-color:#d4b8eccc}body.viewer-mode #hud{top:44px}body.viewer-mode #resetAll,body.viewer-mode #shareBtn{display:none}.share-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(540px,92vw);background:linear-gradient(180deg,#1a1410,#15110d);border:1px solid var(--line-strong);box-shadow:0 0 0 1px #c8723a26,0 30px 80px #0009;z-index:200;padding:24px;animation:panelIn .25s cubic-bezier(.16,1,.3,1)}.share-modal.hidden{display:none}.share-modal h3{font-family:Cinzel,serif;font-size:13px;font-weight:700;letter-spacing:.15em;color:var(--ochre-bright);text-transform:uppercase;margin-bottom:16px}.share-modal label{display:block;font-size:12px;color:var(--ink-dim);margin-bottom:6px;font-weight:600}.share-modal input[type=text],.share-modal textarea{width:100%;background:#0d0a0799;border:1px solid var(--line);color:var(--ink);font-family:Manrope,sans-serif;font-size:13px;padding:9px 12px;outline:none;transition:border-color .15s;margin-bottom:14px}.share-modal input[type=text]:focus,.share-modal textarea:focus{border-color:var(--ochre)}.share-modal textarea{resize:none;word-break:break-all;font-family:ui-monospace,Cascadia Code,Menlo,monospace;font-size:11px;line-height:1.5}.share-modal .share-info{font-size:11px;color:var(--ink-faded);line-height:1.5;margin-bottom:14px}.share-modal-actions{display:flex;justify-content:space-between;gap:10px}.share-modal-actions button{background:#0d0a0780;border:1px solid var(--line-strong);color:var(--ink-dim);font-family:Manrope,sans-serif;font-size:12px;font-weight:600;letter-spacing:.05em;padding:9px 16px;cursor:pointer;text-transform:uppercase;transition:all .15s ease}.share-modal-actions button.primary,.share-modal-actions button:hover{border-color:var(--ochre);color:var(--ochre-bright)}
