:root{--c-bg:#0f172a;--c-bg-2:#1e293b;--c-surface:#1e293b;--c-surface-2:#273449;--c-line:#334155;--c-text:#e2e8f0;--c-text-2:#94a3b8;--c-text-3:#64748b;--c-accent:#38bdf8;--c-ok:#4ade80;--c-warn:#fbbf24;--c-err:#f87171;--c-enter:#22c55e;--c-exit:#f97316;--r:12px;--r-sm:8px;--font:-apple-system, BlinkMacSystemFont, "Hiragino Sans", "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}html,body{background:var(--c-bg);color:var(--c-text);font-family:var(--font);-webkit-text-size-adjust:100%;margin:0;padding:0;line-height:1.5}button{font:inherit}code,.mono{font-family:var(--mono)}h1,h2,h3{margin:0;font-weight:700}a{color:var(--c-accent)}.btn{border:1px solid var(--c-line);border-radius:var(--r-sm);background:var(--c-surface-2);min-height:44px;color:var(--c-text);cursor:pointer;justify-content:center;align-items:center;gap:6px;padding:8px 16px;display:inline-flex}.btn:disabled{opacity:.45;cursor:default}.btn--primary{background:var(--c-accent);border-color:var(--c-accent);color:#082f49;font-weight:700}.btn--danger{border-color:var(--c-err);color:var(--c-err)}.btn--small{min-height:32px;padding:4px 10px;font-size:13px}.btn--block{width:100%}.input{border:1px solid var(--c-line);border-radius:var(--r-sm);background:var(--c-bg);width:100%;min-height:44px;color:var(--c-text);font:inherit;padding:8px 12px}.input--mono{font-family:var(--mono);letter-spacing:.02em}select.input{appearance:auto}label.field{color:var(--c-text-2);font-size:13px;display:block}label.field>.input{margin-top:4px}.badge{background:var(--c-surface-2);color:var(--c-text-2);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:12px;line-height:18px;display:inline-block}.badge--ok{color:var(--c-ok);background:#4ade802e}.badge--warn{color:var(--c-warn);background:#fbbf242e}.badge--err{color:var(--c-err);background:#f871712e}.badge--accent{color:var(--c-accent);background:#38bdf82e}.card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r);padding:14px}.card__title{color:var(--c-text-2);justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;display:flex}.muted{color:var(--c-text-2)}.small{font-size:12px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.stack{gap:8px;display:grid}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}table.tbl{border-collapse:collapse;width:100%;font-size:13px}.tbl th,.tbl td{border-bottom:1px solid var(--c-line);text-align:left;vertical-align:top;padding:6px 8px}.tbl th{color:var(--c-text-2);white-space:nowrap;font-weight:600}.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}.tbl tr.dim td{color:var(--c-text-3)}[hidden]{display:none!important}.page{max-width:760px;padding:16px 16px calc(32px + env(safe-area-inset-bottom));gap:12px;margin:0 auto;display:grid}.page--wide{max-width:none}.page__head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.page__head h1{font-size:18px}.page__head nav{gap:12px}.grow{flex:240px}.err{color:var(--c-err)}.card ul{margin:6px 0 0;padding-left:1.2em}.warn-box{border-color:#fbbf2480}.warn-box strong{color:var(--c-warn)}.check{align-items:center;gap:4px;font-size:13px;display:inline-flex}.input--narrow{width:110px}.input--tiny{width:76px;min-height:36px;padding:4px 8px}.btn--on{border-color:var(--c-accent);color:var(--c-accent);background:#38bdf833}.tbl-wrap{overflow-x:auto}.big-freq{color:var(--c-accent);font-size:22px}.log{white-space:pre-wrap;word-break:break-all;max-height:240px;color:var(--c-text-2);margin:0;overflow:auto}.master{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-top:12px;display:flex}.master__toggle{min-width:220px;font-weight:700}.master__toggle--on{background:var(--c-err);border-color:var(--c-err);color:#450a0a}.tones td{vertical-align:middle}.tones select.input{min-width:84px}.tones .lvl{white-space:nowrap}.tones .lvl input{vertical-align:middle;width:140px}.tones .onoff{white-space:nowrap}.test-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;display:grid}.test-grid p{margin:0}.play-grid{grid-template-columns:1fr 1fr;align-items:center;gap:8px;margin-bottom:8px;display:grid}.dir{text-align:center;color:var(--c-accent);font-size:22px;font-weight:700}canvas.spec{border-radius:var(--r-sm);width:100%;height:180px;display:block}canvas.wf{border-radius:var(--r-sm);background:#000;width:100%;height:140px;margin-top:4px;display:block}.zone{border-radius:var(--r-sm);background:var(--c-surface-2);text-align:center;margin:8px 0;padding:8px 12px;font-weight:700}.zone--on{color:var(--c-enter);background:#22c55e33}.beacons tr.present td:first-child{color:var(--c-enter);font-weight:700}.meter{background:var(--c-bg);border-radius:4px;width:100%;min-width:80px;height:8px;overflow:hidden}.meter__bar{background:var(--c-text-3);width:0;height:100%;transition:width .1s linear}.meter__bar--on{background:var(--c-enter)}.bands{margin-top:8px}fieldset.tri{border:1px solid var(--c-line);border-radius:var(--r-sm);flex-wrap:wrap;gap:14px;margin:0;padding:6px 10px;display:flex}fieldset.tri legend{color:var(--c-text-2);padding:0 4px}fieldset.tri label{align-items:center;gap:4px;display:inline-flex}textarea.input{resize:vertical}details summary{cursor:pointer;color:var(--c-text-2);margin:6px 0}.results td{font-size:12px}pre.json{white-space:pre-wrap;max-width:480px;max-height:360px;overflow:auto}.results td.mono{white-space:nowrap}.page>*,.stack>*{min-width:0}[data-ref=env]{overflow-wrap:anywhere}.play-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
