| :root { |
| --bg: #0a0b0d; |
| --text: #f4f5f7; |
| --muted: #8b8f98; |
| --dim: #5a5e66; |
| --accent: #38bdf8; |
| --hairline: #1e2127; |
| --ui: 'Inter', system-ui, -apple-system, sans-serif; |
| --mono: 'IBM Plex Mono', ui-monospace, monospace; |
| } |
|
|
| * { margin:0; padding:0; box-sizing:border-box; } |
|
|
| body { |
| background: var(--bg); |
| color: var(--text); |
| font-family: var(--ui); |
| font-weight: 400; |
| line-height: 1.6; |
| -webkit-font-smoothing: antialiased; |
| } |
|
|
| .wrap { max-width: 1200px; margin: 0 auto; padding: 1.5rem 2rem 2rem; } |
|
|
| |
| .head { display:flex; justify-content:space-between; align-items:baseline; |
| gap:1.5rem; flex-wrap:wrap; } |
| .head h1 { font-size:1.5rem; font-weight:600; letter-spacing:-0.02em; } |
| .head h1 .muted { color:var(--muted); font-weight:400; } |
| .head-links { display:flex; gap:1.25rem; flex-shrink:0; } |
| .head-links a { color:var(--muted); text-decoration:none; font-size:.95rem; |
| display:inline-flex; align-items:center; gap:.35rem; |
| border-bottom:1px solid transparent; transition:.15s; } |
| .head-links a:hover { color:var(--text); border-bottom-color:var(--dim); } |
| .head-links svg { width:14px; height:14px; } |
| .caption { margin-top:.5rem; font-family:var(--mono); font-size:.95rem; |
| color:var(--muted); letter-spacing:.02em; } |
|
|
| |
| .viz-wrap { position:relative; } |
| #plot { width:100%; height:clamp(280px, 37vw, 440px); margin:0 0 .1rem; } |
|
|
| |
| #spectra-panel { |
| position:absolute; left:50%; top:0; |
| width:50%; height:100%; |
| background:var(--bg); z-index:5; |
| padding:.75rem .5rem .75rem 1.5rem; |
| display:flex; flex-direction:column; |
| } |
| #spectra-panel.hidden { display:none; } |
| #spectra-chart { flex:1; min-height:0; display:block; } |
| .spectra-msg { |
| flex:1; display:flex; align-items:center; justify-content:center; |
| font-family:var(--mono); font-size:.75rem; color:var(--muted); |
| } |
|
|
| |
| .globe-labels { position:relative; width:100%; height:1.3rem; margin-top:1.1rem; } |
| .globe-label { position:absolute; transform:translateX(-50%); |
| font-family:var(--mono); font-size:.95rem; color:#aab0bb; |
| letter-spacing:.08em; white-space:nowrap; } |
| .globe-label:first-child { left:24.25%; } |
| .globe-label:last-child { left:75.75%; } |
| .drag-hint { font-family:var(--mono); font-size:.7rem; color:var(--dim); |
| text-align:center; margin:.12rem 0 0; letter-spacing:.04em; } |
|
|
| |
| .status { position:relative; height:30px; border-radius:6px; overflow:hidden; |
| background:rgba(56,189,248,0.06); |
| border:1px solid rgba(56,189,248,0.18); |
| display:flex; align-items:center; padding:0 .9rem; |
| font-family:var(--mono); font-size:.72rem; color:var(--muted); |
| transition:opacity .3s; } |
| .status::before { content:''; position:absolute; inset:0; |
| width:var(--p,0%); background:rgba(56,189,248,0.16); |
| transition:width .25s ease; } |
| .status span { position:relative; z-index:1; } |
| .status.hidden { opacity:0; pointer-events:none; height:0; border:0; margin:0; } |
|
|
| |
| .controls { display:flex; flex-direction:column; gap:.7rem; margin-top:.6rem; } |
| .row { display:flex; align-items:baseline; gap:.5rem 1.5rem; flex-wrap:wrap; } |
| .row > .label { font-family:var(--mono); font-size:.85rem; color:var(--muted); |
| text-transform:uppercase; letter-spacing:.08em; |
| min-width:9.5rem; flex-shrink:0; } |
|
|
| |
| .tokens { display:flex; flex-wrap:wrap; align-items:baseline; flex:1; } |
| .token { font-size:.95rem; color:var(--muted); cursor:pointer; |
| transition:color .15s; white-space:nowrap; } |
| .token:hover { color:var(--text); } |
| .token.active { color:var(--text); text-decoration:underline; |
| text-decoration-color:var(--accent); |
| text-underline-offset:4px; text-decoration-thickness:1.5px; } |
| .sep { color:var(--dim); pointer-events:none; padding:0 .5rem; } |
|
|
| |
| .slider-row input[type=range] { -webkit-appearance:none; appearance:none; |
| flex:1; max-width:220px; height:16px; background:transparent; cursor:pointer; } |
| input[type=range]::-webkit-slider-runnable-track { height:1px; background:var(--dim); } |
| input[type=range]::-moz-range-track { height:1px; background:var(--dim); } |
| input[type=range]::-webkit-slider-thumb { -webkit-appearance:none; appearance:none; |
| width:12px; height:12px; margin-top:-6px; border-radius:50%; |
| background:var(--accent); } |
| input[type=range]::-moz-range-thumb { width:12px; height:12px; border:0; |
| border-radius:50%; background:var(--accent); } |
| .val { font-family:var(--mono); font-size:.9rem; color:var(--text); |
| min-width:2ch; } |
|
|
| |
| .timeline-controls { display:flex; align-items:center; gap:.75rem; flex:1; } |
| .timeline-controls #timeline { flex:1; } |
| .play { font-family:var(--mono); font-size:.78rem; color:var(--accent); |
| background:none; border:0; cursor:pointer; padding:0; |
| letter-spacing:.04em; } |
| .play:hover { color:var(--text); } |
| .lead { font-family:var(--mono); font-size:.9rem; color:var(--muted); |
| min-width:9ch; } |
|
|
| @media (max-width:720px) { |
| .wrap { padding:1.5rem 1.1rem 3rem; } |
| .row > .label { min-width:100%; } |
| #plot { height:78vw; } |
| } |
|
|