:root{--bg:#06101a;--panel:#0b1824;--panel2:#0e1e2c;--line:#203445;--text:#eef7fb;--muted:#89a1b3;--cyan:#4de1cf;--blue:#4a9eff;--orange:#ffac4b;--purple:#af79ff;--green:#65df8d;--red:#ff6874}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 15% -10%,#12324a 0,transparent 34%),var(--bg);color:var(--text);font:15px Assistant,Arial,sans-serif;min-height:100vh}button,select,label{font:inherit}button{cursor:pointer}header{height:72px;padding:0 max(24px,4vw);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:#07131dcc;backdrop-filter:blur(14px);position:sticky;top:0;z-index:20}.brand,.header-actions,.upload-buttons,.transport,.selectors,.panel-head,.jump-head,.charts-head{display:flex;align-items:center}.brand{gap:12px}.mark{display:grid;place-items:center;width:38px;height:38px;border:1px solid var(--cyan);color:var(--cyan);font:bold 13px Space Mono;transform:rotate(-4deg)}.brand b{display:block;font:700 16px Space Mono}.brand small{display:block;color:var(--muted);font-size:11px;letter-spacing:.08em}.header-actions{gap:10px}.header-actions #privacy{font-size:12px;color:var(--green)}button,.secondary,.ghost{border:1px solid var(--line);background:#102231;color:var(--text);padding:8px 13px;border-radius:8px}.ghost{background:transparent}.primary{display:inline-flex;background:var(--cyan);color:#04201d;padding:10px 18px;border-radius:8px;font-weight:700;cursor:pointer}.upload input{display:none}main{max-width:1480px;margin:auto;padding:30px max(20px,3vw) 60px}.card,.panel{border:1px solid var(--line);background:linear-gradient(145deg,#0d1c29,#081520);border-radius:12px}.upload{min-height:460px;display:flex;align-items:center;justify-content:center;gap:30px;text-align:center;border-style:dashed;margin-top:3vh;transition:.2s}.upload.drag{border-color:var(--cyan);background:#0b2a2b}.upload-icon{width:90px;height:90px;border:1px solid var(--cyan);color:var(--cyan);font-size:55px;display:grid;place-items:center;border-radius:50%}.upload h1{font-size:38px;margin:0 0 8px}.upload p{color:var(--muted);font-size:17px}.upload-buttons{gap:10px;justify-content:center;flex-wrap:wrap}.upload .hint{font-size:12px}.loading{height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}.spinner{width:40px;height:40px;border:2px solid var(--line);border-top-color:var(--cyan);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.hidden{display:none!important}.jump-head,.charts-head,.panel-head{justify-content:space-between}.jump-head{margin:12px 0 24px}.jump-head h1{font:700 clamp(26px,4vw,44px) Space Mono;margin:4px 0}.jump-head p{color:var(--muted);margin:0}.eyebrow{color:var(--cyan);font:700 10px Space Mono;letter-spacing:.13em}.phase-legend{display:flex;gap:7px;flex-wrap:wrap}.phase-pill{padding:5px 9px;border:1px solid var(--line);border-radius:20px;color:var(--muted);font-size:12px}.phase-pill i{width:7px;height:7px;border-radius:50%;display:inline-block;margin-inline-end:5px}.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:10px}.stat{padding:14px;border-top:2px solid var(--cyan)}.stat small{color:var(--muted);display:block}.stat b{font:700 22px Space Mono;display:block;margin-top:5px}.workspace{display:grid;grid-template-columns:1.55fr 1fr;gap:10px}.panel{overflow:hidden}.panel-head{padding:13px 16px;border-bottom:1px solid var(--line)}.panel-head h2,.charts-head h2{margin:2px 0 0;font-size:18px}.view-buttons{display:flex;gap:5px}.view-buttons button{padding:5px 9px;font-size:12px}.view-buttons .active{border-color:var(--cyan);color:var(--cyan)}#scene,#map{height:480px;position:relative}#threeCanvas{width:100%;height:100%;display:block;background:linear-gradient(#09243a,#07131e 55%,#101b1b)}#sceneReadout{position:absolute;top:12px;inset-inline-start:12px;background:#07131ed9;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font:11px Space Mono;line-height:1.8}.scene-help{position:absolute;bottom:10px;inset-inline-end:12px;color:#7890a1;font-size:11px}.timeline-panel{margin-top:10px;padding:16px}.transport{gap:12px;direction:ltr}.transport input{flex:1;accent-color:var(--cyan)}.transport span{font:12px Space Mono}.play{border-radius:50%;width:39px;height:39px;padding:0;background:var(--cyan);color:#04201d}.transport select{background:#102231;color:white;border:1px solid var(--line);padding:6px;border-radius:6px}#phaseBar{height:7px;border-radius:5px;margin:10px 52px 0;overflow:hidden;display:flex}.phase-seg{height:100%}.charts-head{margin:30px 0 12px}.selectors{gap:8px}.selectors label{color:var(--muted);font-size:11px;display:flex;align-items:center;gap:5px}.selectors select{background:#102231;color:white;border:1px solid var(--line);padding:6px;border-radius:6px}.charts{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.chart-card{padding:14px}.chart-top{display:flex;justify-content:space-between}.chart-top b{font-size:14px}.chart-top span{color:var(--cyan);font:700 16px Space Mono}.chart-card canvas{width:100%;height:165px;display:block;margin-top:5px}.data-panel{margin-top:10px}.schema-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:15px}.schema-file{background:#07131e;border:1px solid var(--line);padding:12px;border-radius:8px}.schema-file b{font:700 13px Space Mono}.chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:10px}.chip{font:10px Space Mono;color:var(--muted);border:1px solid var(--line);padding:4px 6px;border-radius:4px}footer{display:flex;justify-content:space-between;color:#60798b;font-size:11px;margin-top:22px}#toast{position:fixed;bottom:22px;left:50%;transform:translate(-50%,120px);background:#132737;border:1px solid var(--red);padding:12px 18px;border-radius:8px;z-index:50;transition:.25s}#toast.show{transform:translate(-50%,0)}@media(max-width:900px){.workspace,.charts{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}#scene,#map{height:380px}.jump-head{align-items:flex-start;flex-direction:column;gap:12px}.selectors{flex-wrap:wrap}.upload{flex-direction:column;padding:40px 18px}.header-actions #privacy{display:none}}@media(max-width:520px){header{padding:0 12px}.brand small,.ghost{display:none}main{padding:18px 10px}.upload h1{font-size:27px}.stats{grid-template-columns:1fr 1fr}.stat b{font-size:17px}.view-buttons{display:none}.transport{gap:6px}.schema-grid{grid-template-columns:1fr}.selectors label span{display:none}#scene,#map{height:330px}}
