:root{--bg: #0c1118;--bg-elev: #121a24;--card: #141d29;--line: #243040;--text: #e7eef6;--text-dim: #8da0b5;--accent: #37d6a0;--accent-press: #2bbf8c;--danger: #e8543f;--warn: #f2c14e;--info: #5aa9e6;--zone-quiet: #37d6a0;--zone-moderate: #6cc6e8;--zone-loud: #f2c14e;--zone-harmful: #e8543f;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, sans-serif;--fs-base: 16px;--fs-huge: clamp(3rem, 18vw, 5.5rem);--fs-big: 1.5rem;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--radius: 14px;--radius-sm: 9px;--shadow: 0 6px 24px rgba(0, 0, 0, .35)}:root[data-theme=light]{--bg: #f3f6fa;--bg-elev: #ffffff;--card: #ffffff;--line: #d7e0ea;--text: #14202e;--text-dim: #5a6b7c;--accent: #1b9e74;--accent-press: #157a5a;--danger: #c83a26;--warn: #b9871a;--info: #2f7dc0;--zone-moderate: #2f8fbf;--shadow: 0 6px 20px rgba(20, 40, 60, .12)}:root[data-bigtext=true]{--fs-base: 20px;--fs-big: 1.9rem}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font);font-size:var(--fs-base);background:var(--bg);color:var(--text);line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100vh;padding-bottom:env(safe-area-inset-bottom)}.app-header{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-3) var(--sp-4);padding-top:calc(var(--sp-3) + env(safe-area-inset-top));background:var(--bg-elev);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:var(--sp-2);font-weight:700;letter-spacing:.2px}.brand-mark{width:18px;height:18px;border-radius:4px;background:linear-gradient(135deg,var(--zone-quiet),var(--warn) 60%,var(--danger))}.header-actions{display:flex;gap:var(--sp-2)}.icon-btn{background:var(--card);color:var(--text);border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 10px;font-size:.95rem;cursor:pointer}.icon-btn[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.tabbar{display:flex;gap:2px;overflow-x:auto;background:var(--bg-elev);border-bottom:1px solid var(--line);padding:0 var(--sp-2);scrollbar-width:none}.tabbar::-webkit-scrollbar{display:none}.tab{background:none;border:none;color:var(--text-dim);padding:var(--sp-3) var(--sp-3);font-size:.92rem;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.tab.is-active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.view-root{max-width:720px;margin:0 auto;padding:var(--sp-4);outline:none}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-4);margin-bottom:var(--sp-4);box-shadow:var(--shadow)}.card-title{font-size:1.05rem;margin:0 0 var(--sp-3)}.notice{border-radius:var(--radius-sm);padding:var(--sp-3);font-size:.9rem;margin-bottom:var(--sp-3);border:1px solid}.notice-info{border-color:var(--info);background:color-mix(in srgb,var(--info) 12%,transparent)}.notice-warn{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 14%,transparent)}.notice-danger{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 14%,transparent)}.meter-main{display:flex;flex-direction:column;align-items:center;text-align:center}.gauge{width:min(72vw,280px);height:auto}.gauge-track{fill:none;stroke:var(--line);stroke-width:12;stroke-linecap:round}.gauge-zone{fill:none;stroke-width:12;stroke-linecap:butt;opacity:.85}.gauge-needle{stroke:var(--text);stroke-width:3;stroke-linecap:round;transition:all .08s linear}.gauge-needle.is-idle{stroke:var(--text-dim)}.gauge-hub{fill:var(--text)}.level-readout{margin-top:-34%;margin-bottom:var(--sp-3)}.level-number{font-size:var(--fs-huge);font-weight:800;line-height:1;font-variant-numeric:tabular-nums}.level-unit{color:var(--text-dim);font-size:1rem;font-weight:600}.badge-row{display:flex;gap:var(--sp-2);flex-wrap:wrap;justify-content:center;margin:var(--sp-2) 0;min-height:26px}.badge{font-size:.78rem;padding:3px 9px;border-radius:999px;border:1px solid var(--line);color:var(--text-dim)}.badge.warn{border-color:var(--warn);color:var(--warn)}.badge.danger{border-color:var(--danger);color:var(--danger)}.controls-row{display:flex;gap:var(--sp-3);flex-wrap:wrap;justify-content:center;margin:var(--sp-3) 0}.btn{background:var(--card);color:var(--text);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-3) var(--sp-4);font-size:1rem;cursor:pointer;font-weight:600}.btn:hover{border-color:var(--accent)}.btn-primary{background:var(--accent);color:#04140d;border-color:var(--accent)}.btn-primary:hover{background:var(--accent-press)}.btn-danger{border-color:var(--danger);color:var(--danger)}.btn-lg{padding:var(--sp-4) var(--sp-6);font-size:1.1rem}.btn:disabled{opacity:.5;cursor:not-allowed}.segmented{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}.seg-btn{background:var(--card);color:var(--text-dim);border:none;padding:var(--sp-2) var(--sp-3);cursor:pointer;font-size:.9rem;border-right:1px solid var(--line)}.seg-btn:last-child{border-right:none}.seg-btn.is-active{background:var(--accent);color:#04140d;font-weight:700}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:var(--sp-3)}.stat{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-3);text-align:center}.stat-label{display:block;font-size:.72rem;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.stat-value{font-size:1.3rem;font-weight:700;font-variant-numeric:tabular-nums}.slider-row{display:block;margin:var(--sp-3) 0}.slider-label{display:flex;justify-content:space-between;font-size:.9rem;margin-bottom:var(--sp-1)}.slider{width:100%}.slider-value{font-variant-numeric:tabular-nums;color:var(--accent);font-weight:600}.timeline,.spectrum{width:100%;height:180px;display:block;background:var(--bg-elev);border-radius:var(--radius-sm)}.toast-region{position:fixed;bottom:calc(var(--sp-4) + env(safe-area-inset-bottom));left:0;right:0;display:flex;justify-content:center;pointer-events:none;z-index:100}.toast{background:var(--bg-elev);border:1px solid var(--line);border-left:4px solid var(--info);border-radius:var(--radius-sm);padding:var(--sp-3) var(--sp-4);box-shadow:var(--shadow);max-width:90%;transition:opacity .3s,transform .3s}.toast-warn{border-left-color:var(--warn)}.toast-danger{border-left-color:var(--danger)}.toast-success{border-left-color:var(--accent)}.toast-out{opacity:0;transform:translateY(8px)}.caption-box{background:#000;color:#fff;border-radius:var(--radius);padding:var(--sp-5);min-height:180px;font-size:var(--caption-size, 2rem);line-height:1.4;font-weight:600}.caption-interim{opacity:.6}.alert-flash{position:fixed;inset:0;background:var(--danger);opacity:0;pointer-events:none;z-index:90;transition:opacity .12s}.alert-flash.is-on{opacity:.55;animation:flashPulse .5s steps(2,jump-none) infinite}@keyframes flashPulse{50%{opacity:.2}}.freq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:var(--sp-2)}.freq-cell{border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-3) var(--sp-2);text-align:center;background:var(--bg-elev)}.freq-cell.heard{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 16%,transparent)}.freq-cell.missed{border-color:var(--text-dim);opacity:.6}.freq-cell.testing{border-color:var(--warn);box-shadow:0 0 0 2px var(--warn)}.list{list-style:none;margin:0;padding:0}.list-item{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--radius-sm);margin-bottom:var(--sp-2);background:var(--bg-elev)}.muted{color:var(--text-dim)}.row{display:flex;gap:var(--sp-3);flex-wrap:wrap;align-items:center}.row-between{justify-content:space-between}.field-label{display:block;font-size:.9rem;margin-bottom:var(--sp-1)}.text-input,.select{width:100%;background:var(--bg-elev);border:1px solid var(--line);color:var(--text);border-radius:var(--radius-sm);padding:var(--sp-3);font-size:1rem}.dose-bar{height:14px;background:var(--bg-elev);border:1px solid var(--line);border-radius:999px;overflow:hidden;margin:var(--sp-1) 0}.dose-fill{height:100%;background:var(--accent);transition:width .3s}.dose-fill.over{background:var(--danger)}.safety-banner{border-radius:var(--radius);padding:var(--sp-4);margin-bottom:var(--sp-4);border:1px solid var(--line);background:var(--bg-elev)}.safety-banner-sm{margin:var(--sp-3) 0;padding:var(--sp-3);width:100%;text-align:center}.safety-title{font-weight:800;font-size:1.1rem}.safety-sub{color:var(--text-dim);font-size:.9rem}.safety-banner[data-level=safe]{border-color:var(--zone-quiet);background:color-mix(in srgb,var(--zone-quiet) 14%,transparent)}.safety-banner[data-level=safe] .safety-title{color:var(--zone-quiet)}.safety-banner[data-level=moderate]{border-color:var(--zone-moderate);background:color-mix(in srgb,var(--zone-moderate) 14%,transparent)}.safety-banner[data-level=moderate] .safety-title{color:var(--zone-moderate)}.safety-banner[data-level=loud]{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 16%,transparent)}.safety-banner[data-level=loud] .safety-title{color:var(--warn)}.safety-banner[data-level=harmful]{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 16%,transparent)}.safety-banner[data-level=harmful] .safety-title{color:var(--danger)}.dose-big{font-size:2.4rem;font-weight:800;font-variant-numeric:tabular-nums;line-height:1}.dose-bar-lg{height:20px;margin:var(--sp-3) 0}.expander{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);margin-bottom:var(--sp-4);box-shadow:var(--shadow)}.expander-summary{cursor:pointer;padding:var(--sp-4);font-weight:600;list-style:none}.expander-summary::-webkit-details-marker{display:none}.expander-summary:after{content:"▸";float:right;color:var(--text-dim)}.expander[open] .expander-summary:after{content:"▾"}.expander-body{padding:0 var(--sp-4) var(--sp-4)}.sub{font-size:.95rem;margin:0 0 var(--sp-2)}.rule{border:none;border-top:1px solid var(--line);margin:var(--sp-3) 0}.cal-progress{margin:var(--sp-3) 0;padding:var(--sp-3);border-radius:var(--radius-sm);background:var(--bg-elev);border:1px dashed var(--accent);color:var(--accent);font-weight:600}:focus-visible{outline:3px solid var(--info);outline-offset:2px}@media (prefers-reduced-motion: reduce){.gauge-needle,.dose-fill,.toast{transition:none}.alert-flash.is-on{animation:none;opacity:.5}}
