:root{--bgMain:#F7F3EE;--bgPanel:#FFFFFF;--bgCard:#FFFFFF;--accentBlue:#6366f1;--accentBlueHover:#4f46e5;--accentPurple:#a855f7;--accentGreen:#10b981;--accentRed:#ef4444;--accentYellow:#f59e0b;--textPrimary:#1C1917;--textSecondary:#57534E;--textWarm:#2A2520;--textWarmSecondary:#7C6F5A;--textWarmMuted:#A0937B;--borderColor:#E8E0D2;--borderSubtle:#F0EBE3;--shadow-sm:0 1px 2px rgba(17,17,17,.04),0 1px 3px rgba(17,17,17,.06);--shadow-md:0 4px 12px rgba(17,17,17,.06),0 2px 4px rgba(17,17,17,.04);--shadow-lg:0 16px 40px rgba(17,17,17,.1),0 4px 12px rgba(17,17,17,.06);--font-sans:"Inter",system-ui,-apple-system,sans-serif;--font-serif:"Roboto Serif",Georgia,serif;--font-mono:"Roboto Mono",monospace;--indigo-soft:rgba(99,102,241,.09);--indigo-line:rgba(99,102,241,.3)}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;background:var(--bgMain);color:var(--textPrimary);font-family:var(--font-sans);font-size:16px;line-height:1.5}.wrap{max-width:1180px;margin:0 auto;padding:0 20px}.hero{background:linear-gradient(145deg,#4f46e5,#6366f1);color:#fff;padding:22px 0 56px;position:relative;overflow:hidden}.hero:before{content:"";position:absolute;inset:-50%;background:radial-gradient(circle,rgba(255,255,255,.08) 1px,transparent 2px);background-size:30px 30px;pointer-events:none}.hero-row{display:flex;align-items:center;justify-content:space-between;gap:16px;position:relative}.hero h1{font-family:var(--font-serif);font-size:clamp(26px,3.4vw,34px);letter-spacing:-.02em;margin:0;font-weight:700}.pill-row{display:flex;gap:8px;align-items:center}.pill{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;padding:7px 12px;border-radius:9999px;background:#ffffff29}.pill-sim{background:var(--accentYellow);color:#1c1917}.pill .dot{width:9px;height:9px;border-radius:50%;background:#ffffff80}.pill[data-state=streaming] .dot{background:#34d399;box-shadow:0 0 0 4px #34d39940}.pill[data-state=requesting] .dot,.pill[data-state=opening] .dot,.pill[data-state=handshake] .dot{background:#fbbf24}.pill[data-state=error] .dot,.pill[data-state=disconnected] .dot{background:#f87171}main{display:grid;gap:18px;margin-top:-34px;position:relative;z-index:2;padding-bottom:20px}.card{background:var(--bgCard);border:1px solid var(--borderColor);border-top:4px solid var(--accentBlue);border-radius:16px;box-shadow:var(--shadow-md);padding:18px 20px;animation:fadeUp .4s ease-out}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.notice{background:#fbf3e2;border:1px solid #EBD9A8;color:#6b4a0f;border-radius:12px;padding:12px 16px;font-size:15px}.exp-card{padding:14px 20px}.exp-row{display:flex;gap:8px;flex-wrap:wrap}.exp-row button{border-radius:9999px;min-height:44px;padding:0 16px;font-weight:600;font-size:15px;border:1px solid var(--borderColor);background:#fff;color:var(--textPrimary);cursor:pointer;font-family:inherit}.exp-row button[aria-pressed=true]{background:var(--accentBlue);border-color:var(--accentBlue);color:#fff}.exp-row button:disabled{cursor:not-allowed;opacity:.58}.exp-row button:focus-visible{outline:3px solid var(--accentBlue);outline-offset:3px}.exp-hardware{margin:10px 0 0;font-size:14px;color:var(--textWarmSecondary)}.safety-line{margin:5px 0 0;font-size:12px;color:var(--textWarmMuted)}.readout-line{margin:8px 0 0;font-size:13px;color:var(--textSecondary);min-height:18px;font-variant-numeric:tabular-nums}.method-line{margin:6px 0 0;font-size:12px}.connect-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.status-line{font-family:var(--font-sans);font-size:15px;font-weight:600;color:var(--textSecondary);margin:0;min-height:22px;flex:1 1 220px}.error-line{margin:10px 0 0;color:#b91c1c;background:#ef444414;border:1px solid rgba(239,68,68,.25);border-radius:10px;padding:10px 12px;font-size:15px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.chip{font-family:var(--font-mono);font-size:12px;padding:5px 10px;border-radius:9999px;background:var(--indigo-soft);color:#3730a3;border:1px solid var(--indigo-line)}.chip.warn{background:#fbf3e2;color:#7a3a00;border-color:#ebd9a8}.btn{display:inline-flex;align-items:center;gap:8px;border-radius:10px;font-weight:600;font-size:16px;min-height:44px;padding:0 18px;border:1px solid var(--borderColor);background:#fff;color:var(--textPrimary);cursor:pointer;font-family:inherit;transition:transform .15s,box-shadow .15s,background .15s}.btn:hover{box-shadow:var(--shadow-sm)}.btn:focus-visible{outline:3px solid var(--accentBlue);outline-offset:3px}.btn.primary{background:var(--accentBlue);color:#fff;border-color:var(--accentBlue)}.btn.primary:hover{background:var(--accentBlueHover)}.btn.ghost{background:#fff}.btn.small{min-height:44px;font-size:14px;padding:0 14px}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn.rec{border-color:var(--accentRed);color:#b91c1c}.btn.rec .rec-dot{width:12px;height:12px;border-radius:50%;background:var(--accentRed)}.btn.rec.active .rec-dot{animation:pulse .9s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.scope-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}.kicker{font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--accentBlue)}.scope-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.ctl{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:12px;color:var(--textWarmSecondary);text-transform:uppercase;letter-spacing:.08em}.ctl.grow{flex:1 1 220px}.ctl select,.ctl input[type=text]{font-family:var(--font-sans);font-size:16px;text-transform:none;letter-spacing:0;color:var(--textPrimary);border:1px solid var(--borderColor);border-radius:8px;padding:7px 10px;background:#fff;min-height:44px}.ctl.grow input{flex:1}.ctl.check{text-transform:none;letter-spacing:0;font-family:var(--font-sans);font-size:14px}.ctl input[type=checkbox]{width:18px;height:18px;accent-color:var(--accentBlue)}.scope-wrap{position:relative;border:1px solid var(--borderColor);border-radius:12px;overflow:hidden;background:#fff}canvas{display:block;width:100%;height:360px}.replay-card canvas{height:320px}.scope-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--textWarmMuted);font-size:15px;pointer-events:none;background:#fff9}.scope-empty[hidden]{display:none}.rec-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px}.mono{font-family:var(--font-mono)}.readout{font-size:18px;font-variant-numeric:tabular-nums;color:var(--textPrimary)}.muted{color:var(--textWarmMuted);font-size:12px}.saved-state{font-size:14px;font-weight:600;color:var(--textSecondary)}.saved-state.ok{color:#047857}.saved-state.bad{color:#b91c1c}.replay-title-row{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin:4px 0 10px}.replay-name{font-family:var(--font-serif);font-size:20px;margin:0;color:var(--textWarm)}.hover-readout{position:absolute;top:8px;right:10px;background:#1c1917e0;color:#fff;font-size:12px;padding:5px 9px;border-radius:8px;pointer-events:none}.replay-controls{display:flex;align-items:center;gap:12px;margin-top:12px;flex-wrap:wrap}.replay-controls input[type=range]{flex:1 1 240px;accent-color:var(--accentBlue);min-height:44px}.measure{margin-top:12px;padding-top:12px;border-top:1px dashed var(--borderSubtle);overflow-x:auto}.measure-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.measure-readout{flex:1 1 260px;font-size:13px;color:var(--textSecondary);font-variant-numeric:tabular-nums}.intervals{width:100%;border-collapse:collapse;margin-top:10px;font-size:14px}.intervals th{text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--textWarmSecondary);font-weight:700;padding:6px 8px;border-bottom:1px solid var(--borderColor)}.intervals td{padding:6px 8px;border-bottom:1px dashed var(--borderSubtle);font-variant-numeric:tabular-nums}.intervals td.num{font-family:var(--font-mono)}.intervals input{font:inherit;border:1px solid var(--borderColor);border-radius:6px;padding:4px 8px;width:120px}.interval-stats{margin-top:8px;font-size:13px;color:var(--textPrimary)}.replay-actions{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px dashed var(--borderSubtle)}.library{list-style:none;margin:0;padding:0}.library li{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--borderSubtle)}.library li:last-child{border-bottom:0}.library .lib-name{font-weight:600}.library .lib-meta{font-family:var(--font-mono);font-size:12px;color:var(--textWarmSecondary)}.library .lib-actions{display:flex;gap:6px;flex-wrap:wrap}.diag-card summary{cursor:pointer;font-weight:600;font-size:16px;list-style:none;display:flex;align-items:center;gap:8px;min-height:44px}.diag-card summary:before{content:"";width:8px;height:8px;border-right:2px solid var(--textWarmMuted);border-bottom:2px solid var(--textWarmMuted);transform:rotate(-45deg);transition:transform .15s;margin-left:4px}.diag-card[open] summary:before{transform:rotate(45deg)}.diag{display:grid;grid-template-columns:max-content 1fr;gap:4px 18px;margin:14px 0;font-family:var(--font-mono);font-size:13px}.diag dt{color:var(--textWarmSecondary)}.diag dd{margin:0;font-variant-numeric:tabular-nums}.diag-events ol{max-height:180px;overflow:auto;font-size:12px;margin:6px 0 12px;padding-left:20px;color:var(--textSecondary)}.diag-actions{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.made-by{text-align:center;font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;line-height:1.5;color:#7c6f5a;margin:40px auto 24px;padding:0 16px}.made-by a{color:inherit;text-decoration:underline;text-underline-offset:3px}@media print{.diag-actions{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.made-by{display:none}}@media (max-width:720px){canvas{height:260px}.hero{padding-bottom:48px}.library li{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){.card,.btn.rec.active .rec-dot{animation:none}}
