:root{
  --bg:#0c0e13; --panel:#141821; --panel2:#1b202b; --line:#252b38;
  --ink:#e6eaf2; --dim:#8d97ab; --accent:#4f8cff; --warn:#ffb84d;
  --r:8px;
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;
  display:flex;flex-direction:column;overflow:hidden;
}

/* ---------------- header ---------------- */
header{
  display:flex;align-items:center;gap:24px;
  padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--line);flex:0 0 auto;
}
.brand{display:flex;align-items:baseline;gap:10px;min-width:0}
.mark{font-weight:700;letter-spacing:.14em;font-size:15px}
.sub{color:var(--dim);font-size:12.5px;white-space:nowrap}
.hdr-freq{display:flex;align-items:center;gap:10px;flex:1;max-width:520px}
.hdr-freq label{color:var(--dim);font-size:12px}
.hdr-freq input[type=range]{flex:1}
.hdr-freq output{font-family:var(--mono);font-size:13px;min-width:64px;text-align:right}
.hdr-act{display:flex;gap:8px;margin-left:auto}

.btn{
  background:var(--panel2);color:var(--ink);border:1px solid var(--line);
  border-radius:6px;padding:6px 11px;font-size:12.5px;cursor:pointer;
}
.btn:hover{border-color:var(--accent);color:#fff}
.btn.sm{padding:5px 9px;font-size:11.5px}

/* ---------------- layout ---------------- */
main{flex:1;display:flex;min-height:0}
aside{
  width:290px;flex:0 0 290px;background:var(--panel);border-right:1px solid var(--line);
  overflow-y:auto;padding-bottom:24px;
}
.stage{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}

/* ---------------- sidebar sections ---------------- */
.sec{border-bottom:1px solid var(--line)}
.sec>h3{
  margin:0;padding:11px 14px;font-size:11px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--dim);cursor:pointer;user-select:none;
  display:flex;align-items:center;
}
.sec>h3::after{content:"−";margin-left:auto;font-size:14px;color:var(--dim)}
.sec.closed>h3::after{content:"+"}
.sec.closed>.body{display:none}
.body{padding:2px 14px 14px}

.row{display:flex;align-items:center;gap:8px;margin:9px 0;font-size:12.5px}
.row>span{color:var(--dim);flex:0 0 96px}
.row.off{opacity:.35;pointer-events:none}
.row input[type=range]{flex:1;min-width:0}
.row output{font-family:var(--mono);font-size:11.5px;color:var(--ink);flex:0 0 58px;text-align:right}
.row.chk>span{flex:1}
.row.chk input{margin-left:auto}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.grid2 .row>span{flex:0 0 auto}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 8px}
.grid3 .row>span{flex:0 0 auto;font-size:11.5px}

select,input[type=number],input[type=text]{
  background:var(--panel2);color:var(--ink);border:1px solid var(--line);
  border-radius:5px;padding:5px 7px;font:inherit;font-size:12.5px;min-width:0;flex:1;
}
select:focus,input:focus{outline:1px solid var(--accent);border-color:var(--accent)}
input[type=checkbox]{accent-color:var(--accent);width:15px;height:15px}
input[type=range]{accent-color:var(--accent);height:18px}

.presets{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 12px}

.info{font-size:12px;font-family:var(--mono)}
.ir{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-bottom:1px dotted #202634}
.ir span{color:var(--dim)}
.ir b{font-weight:500}
.wn{margin-top:9px;font-size:11.5px;color:var(--warn);line-height:1.4}

.note{color:var(--dim);font-size:11.5px;line-height:1.5;margin:10px 0 0}
.note code{font-family:var(--mono);color:var(--ink)}

/* ---------------- tabs / panes ---------------- */
.tabs{display:flex;gap:2px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--line);flex:0 0 auto}
.tab{
  background:none;border:none;border-bottom:2px solid transparent;color:var(--dim);
  padding:10px 14px;font:inherit;font-size:12.5px;cursor:pointer;
}
.tab:hover{color:var(--ink)}
.tab.on{color:var(--ink);border-bottom-color:var(--accent)}

.pane{display:none;flex:1;min-height:0;overflow:auto}
.pane.on{display:flex;flex-direction:column}

/* ---------------- coverage map ---------------- */
.mapwrap{position:relative;flex:1;min-height:0;margin:12px;display:flex}
#map{flex:1;width:100%;height:100%;border-radius:var(--r);background:#000;display:block}
.legend{
  position:absolute;top:10px;right:10px;background:rgba(10,12,17,.78);
  border:1px solid var(--line);border-radius:6px;padding:7px 8px;
  font-family:var(--mono);font-size:10.5px;backdrop-filter:blur(6px);
}
.lg{display:flex;align-items:center;gap:6px;height:15px}
.lg i{width:18px;height:11px;border-radius:2px;display:block}
.lg span{color:var(--dim)}
.lgu{margin-top:3px;text-align:center;color:var(--dim)}
.probe{
  position:absolute;left:10px;bottom:10px;font-family:var(--mono);font-size:11.5px;
  background:rgba(10,12,17,.78);border:1px solid var(--line);border-radius:6px;
  padding:5px 9px;color:var(--ink);pointer-events:none;min-height:0;
}

/* ---------------- polar / response ---------------- */
.panehead{display:flex;align-items:center;gap:12px;padding:10px 16px;flex-wrap:wrap;flex:0 0 auto}
.panehead>span{color:var(--dim);font-size:11.5px;text-transform:uppercase;letter-spacing:.08em}
.chips{display:flex;gap:5px;flex-wrap:wrap}
.chip{position:relative;display:inline-flex}
.chip input{position:absolute;opacity:0;pointer-events:none}
.chip span{
  border:1px solid var(--line);background:var(--panel2);border-radius:20px;
  padding:3px 10px;font-family:var(--mono);font-size:11.5px;color:var(--dim);cursor:pointer;
}
.chip input:checked + span{background:#1d2740;border-color:var(--accent);color:#fff}
.key{display:flex;gap:12px;margin-left:auto;flex-wrap:wrap}
.key .k{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:11px;color:var(--dim)}
.key i{width:14px;height:3px;border-radius:2px;display:block}

.cvwrap{flex:1;min-height:0;margin:0 16px 16px;display:flex}
.cvwrap canvas{flex:1;width:100%;height:100%;display:block}
.cvwrap.wide canvas{background:#0e1117;border:1px solid var(--line);border-radius:var(--r)}

/* ---------------- table ---------------- */
.tblwrap{padding:14px 16px 0;overflow:auto}
table{border-collapse:collapse;font-family:var(--mono);font-size:12px}
th{
  color:var(--dim);font-weight:500;text-align:left;padding:6px 8px;
  border-bottom:1px solid var(--line);font-size:11px;
}
td{padding:2px 4px;border-bottom:1px solid #1a1f2a}
td.n{color:var(--dim);padding-left:8px;width:28px}
td input[type=number]{width:82px;padding:4px 6px;font-family:var(--mono);font-size:12px}
#paneTbl .note{padding:0 16px 16px}

/* ---------------- docs ---------------- */
.doc{max-width:760px;padding:20px 24px 40px;line-height:1.65}
.doc h2{font-size:14px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);margin:26px 0 8px}
.doc h2:first-child{margin-top:0}
.doc p{margin:0 0 12px;color:#c8d0e0}
.doc pre{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
  padding:12px 14px;font-family:var(--mono);font-size:12px;overflow-x:auto;color:var(--ink);
}
.doc code{font-family:var(--mono);font-size:12.5px;color:var(--ink)}
.doc dl{margin:0 0 12px}
.doc dt{font-weight:600;margin-top:10px}
.doc dd{margin:2px 0 0;color:#c8d0e0}
.credit{margin-top:28px;padding-top:14px;border-top:1px solid var(--line);color:var(--dim)!important;font-size:12.5px}

/* ---------------- narrow ---------------- */
@media (max-width:900px){
  main{flex-direction:column}
  aside{width:100%;flex:0 0 auto;max-height:42vh;border-right:none;border-bottom:1px solid var(--line)}
  .stage{min-height:58vh}
  header{flex-wrap:wrap;gap:12px}
  .hdr-freq{max-width:none;order:3;width:100%}
}
