:root{
  --bg:#0f1419; --panel:#171e26; --ink:#e6edf3; --muted:#8b98a5;
  --accent:#4c9aff; --pos:#f5a623; --neg:#4c9aff; --line:#243240; --good:#3fb950;
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);line-height:1.5}
header,main,footer{max-width:1100px;margin:0 auto;padding:0 20px}
header{padding-top:28px}
h1{font-size:1.5rem;margin:0 0 4px}
h2{font-size:1.05rem;margin:24px 0 8px}
.muted{color:var(--muted)}
.sub{color:var(--muted);margin:0 0 12px;max-width:760px}
.banner{background:#3a2d12;border:1px solid #6b531c;color:#f0d28a;padding:8px 12px;border-radius:8px;font-size:.9rem}
.controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;margin:8px 0 16px}
.control label{display:block;font-weight:600;font-size:.85rem;margin-bottom:6px}
.control small{display:block;color:var(--muted);font-size:.72rem;margin-top:6px}
.seg{display:flex;flex-wrap:wrap;gap:6px}
.seg button{background:#0d141b;border:1px solid var(--line);color:var(--ink);border-radius:8px;
  padding:6px 10px;cursor:pointer;font-size:.82rem;transition:.12s}
.seg button:hover{border-color:var(--accent)}
.seg button[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#04101f;font-weight:600}
/* Scopes whose cross-section is too small for the supply/demand model to be
   meaningful (Japan/Germany): greyed out but still selectable, with a tooltip. */
.seg button.caution{position:relative;opacity:.45;border-style:dashed}
.seg button.caution:hover{opacity:.7}
.seg button.caution[aria-pressed="true"]{opacity:.95;border-style:solid}
.seg button.caution .tip{
  position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);
  width:236px;background:#0b1119;border:1px solid var(--line);color:var(--ink);
  border-radius:8px;padding:9px 11px;font-size:.74rem;line-height:1.4;font-weight:400;
  text-align:left;white-space:normal;opacity:0;visibility:hidden;transition:opacity .12s;
  z-index:30;box-shadow:0 6px 22px rgba(0,0,0,.45);pointer-events:none}
.seg button.caution .tip::after{content:"";position:absolute;top:100%;left:50%;
  transform:translateX(-50%);border:6px solid transparent;border-top-color:var(--line)}
.seg button.caution:hover .tip{opacity:1;visibility:visible}
.toggles{display:flex;flex-direction:column;gap:6px;justify-content:center}
.chk{font-weight:500;font-size:.85rem;display:flex;align-items:center;gap:8px;cursor:pointer}
.chk input:disabled{cursor:not-allowed}
.chk:has(input:disabled){cursor:not-allowed}
.range input{width:100%}
.readout{display:flex;flex-wrap:wrap;gap:18px;margin:4px 0 12px}
.readout .stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 14px;min-width:120px}
.readout .stat b{display:block;font-size:1.35rem}
.readout .stat span{color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}
.chart{height:460px;background:var(--panel);border:1px solid var(--line);border-radius:12px}
.actions{display:flex;align-items:center;gap:14px;margin:12px 0}
button#download{background:#0d141b;border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:8px 14px;cursor:pointer}
button#download:hover{border-color:var(--accent)}
.explain{margin:18px 0 40px;max-width:760px}
.explain p{color:#cdd9e5}
footer{color:var(--muted);font-size:.8rem;padding:18px 20px 40px;border-top:1px solid var(--line);margin-top:20px}
a{color:var(--accent)}

.asof{color:var(--good);font-size:.82rem;margin:0 0 8px;font-weight:600}
.status{min-height:1.2em;margin:0 0 6px;font-size:.8rem;color:var(--muted)}
.status.warn{color:#f0d28a}
.subctl{margin-top:8px}
.subctl .mini{font-weight:500;font-size:.76rem;color:var(--muted);margin-bottom:2px}
.subctl input[type=range]{width:100%}
.control.cats details{margin-top:2px}
.control.cats summary{cursor:pointer;font-size:.82rem;color:var(--accent)}
.control.cats input[type=search]{width:100%;margin:8px 0 6px;background:#0d141b;
  border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:6px 10px;font-size:.8rem}
.catlist{max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;
  background:#0d141b;padding:6px}
.catrow{display:flex;align-items:center;gap:8px;font-size:.78rem;padding:2px 4px;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.catrow:hover{background:#16202b}
.catrow.hidden{display:none}
.catrow input{flex:none}
.catrow span{overflow:hidden;text-overflow:ellipsis}
.catbtns{display:flex;gap:8px;margin-top:6px}
.catbtns button{background:#0d141b;border:1px solid var(--line);color:var(--ink);
  border-radius:8px;padding:4px 10px;cursor:pointer;font-size:.76rem}
.catbtns button:hover{border-color:var(--accent)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0}
@media (max-width:760px){.grid2{grid-template-columns:1fr}}
.grid2 h2{margin:0 0 6px}
.chart.small{height:300px}
