:root{--bg: #f4f5f7;--card: #ffffff;--text: #1c1e21;--muted: #5f646b;--border: #dfe2e6;--accent: #1f5fa8;--ok: #1a7f37;--bad: #b42318;--warn-bg: #fff4e0;--warn: #8a5a00;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg);line-height:1.45}*{box-sizing:border-box}body{margin:0}.app{max-width:1100px;margin:0 auto;padding:16px 16px 48px}.app-header h1{margin:8px 0 4px;font-size:1.7rem}.app-header p,.hint{color:var(--muted);margin:0 0 14px;max-width:75em}.app-footer{color:var(--muted);font-size:.85rem;margin-top:16px}.card{background:var(--card);border:1px solid var(--border);border-radius:8px;padding:14px 16px 16px;margin-bottom:16px}.card h2{margin:0 0 10px;font-size:1.15rem}.card.status{color:var(--muted)}.plot{display:block;width:100%;background:#fff}.line-plot{height:170px}.waveform-plot{height:130px;margin-top:6px}.image-plot{height:240px}.response-plots .image-plot{height:170px}.plot-wrap{position:relative}.waveform-plot{cursor:crosshair}.select-overlay{position:absolute;background:#1f5fa82e;border-left:1px solid var(--accent);border-right:1px solid var(--accent);pointer-events:none}.scrollbar{overflow-x:auto;overflow-y:hidden;height:18px;margin:0 12px 4px 48px}.scrollbar>div{height:1px}.phase-legend{display:inline-block;width:90px;height:9px;vertical-align:middle;margin:0 4px 0 8px;border-radius:2px;background:linear-gradient(90deg,#d14747,#d1d147,#47d147,#47d1d1,#4747d1,#d147d1,#d14747)}.global-controls input[type=checkbox]{accent-color:var(--accent)}.spectrograms{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:8px}.response-plots{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:8px 16px;margin-top:8px}.plot-label{font-size:.8rem;color:var(--muted);margin:10px 0 2px}.button-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.divider{width:1px;height:22px;background:var(--border);margin:0 4px}button{font:inherit;font-size:.9rem;padding:6px 12px;border-radius:6px;border:1px solid var(--border);background:#fff;color:var(--text);cursor:pointer}button:hover:not(:disabled){background:#f0f2f5}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){background:#184c87}button.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);font-weight:600}.playing-indicator{color:var(--muted);font-size:.9rem;min-width:8em}.view-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;margin:10px 0 2px}.spacer{flex:1}button.small{font-size:.8rem;padding:4px 10px}.global-controls,.zoom-controls{display:flex;flex-wrap:wrap;gap:10px 24px;align-items:center;margin:6px 0}.global-controls label,.zoom-controls label,.scrub{display:flex;align-items:center;gap:8px;font-size:.9rem}.global-controls label>span:first-child,.zoom-controls label>span:first-child,.scrub>span:first-child{white-space:nowrap}.zoom-controls .grow{flex:1;min-width:260px}.scrub{margin:10px 0 4px}.scrub input[type=range]{flex:1;max-width:480px}.wide-range{width:220px}.info{color:var(--muted);font-size:.85rem;white-space:nowrap}select{font:inherit;font-size:.9rem;padding:4px 6px;border-radius:6px;border:1px solid var(--border);background:#fff}input[type=range]{min-width:80px;accent-color:var(--accent)}.slider-value{font:inherit;font-size:.85rem;width:5.5em;padding:2px 4px;border:1px solid var(--border);border-radius:4px}.slider-unit{color:var(--muted);font-size:.85rem;white-space:nowrap}.source-info{margin-top:10px;font-size:.9rem;color:var(--muted)}.error{color:var(--bad);margin-top:8px;font-size:.9rem}.warning{background:var(--warn-bg);color:var(--warn);border-radius:6px;padding:8px 10px;margin:8px 0;font-size:.9rem}.steps{margin:0 0 16px;padding-left:1.4em;color:var(--text)}.steps li{margin:2px 0}.quick-start{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:4px 0}.quick-label{font-weight:600;font-size:.9rem;margin-right:4px}.expect{color:var(--muted);font-size:.9rem;margin:0 0 12px;min-height:1.4em}.details{margin-top:12px;border-top:1px solid var(--border);padding-top:8px}.details summary{cursor:pointer;color:var(--accent);font-size:.9rem;-webkit-user-select:none;user-select:none}.details .hint{margin-top:8px}.button-group{display:inline-flex;gap:6px;white-space:nowrap}
