:root {
  --bg:#eef1f6; --panel:#ffffff; --panel2:#f6f8fb; --ink:#0f1b2d; --mut:#6b7787;
  --acc:#10b981; --acc-d:#0e9f74; --acc2:#2563eb; --line:#e4e9f0;
  --shadow:0 1px 3px rgba(16,30,54,.06), 0 6px 24px rgba(16,30,54,.05);
}
* { box-sizing:border-box; }
body { font-family:"Inter",-apple-system,Segoe UI,Roboto,Arial,sans-serif;
  margin:0; background:var(--bg); color:var(--ink); font-size:13px;
  -webkit-font-smoothing:antialiased; }
header { display:flex; align-items:center; gap:24px; padding:0 22px; height:60px;
  background:var(--panel); border-bottom:1px solid var(--line); position:sticky;
  top:0; z-index:10; }
.brand { display:flex; flex-direction:column; line-height:1.1;
  text-decoration:none; color:inherit; cursor:pointer; }
.brand:hover .logo { color:var(--acc-d); }
.logo { font-weight:800; letter-spacing:.14em; font-size:17px; color:var(--ink); }
.logo::before { content:"⬡ "; color:var(--acc); }
.tag { font-size:10.5px; color:var(--mut); letter-spacing:.04em; }
nav { display:flex; gap:4px; background:var(--panel2); padding:4px; border-radius:10px; }
nav a { padding:7px 18px; border-radius:7px; text-decoration:none; color:var(--mut);
  font-weight:600; font-size:13px; transition:.15s; }
nav a:hover { color:var(--ink); }
nav a.active { background:var(--acc); color:#fff; box-shadow:0 2px 8px rgba(16,185,129,.35); }
.contact { margin-left:auto; color:var(--mut); font-size:11.5px; }
main { padding:18px 22px; max-width:1480px; margin:0 auto; }
.view { display:none; }
.view.active { display:grid; gap:16px; }
.view.geom, .view.study, .view.optimize, .view.rom { grid-template-columns:340px 1fr; }
.panel { background:var(--panel); border:1px solid var(--line); border-radius:14px;
  padding:16px; box-shadow:var(--shadow); }
h2 { font-size:12px; text-transform:uppercase; letter-spacing:.07em; color:var(--mut);
  margin:0 0 12px; }
label { display:block; color:var(--mut); margin-bottom:9px; font-size:12px; font-weight:500; }
input, select { width:100%; margin-top:4px; padding:8px 9px; background:#fff;
  border:1px solid var(--line); border-radius:8px; color:var(--ink); font-size:13px;
  transition:.12s; }
input:focus, select:focus { outline:none; border-color:var(--acc);
  box-shadow:0 0 0 3px rgba(16,185,129,.13); }
button { padding:9px 16px; background:var(--acc); color:#fff; border:0;
  border-radius:9px; font-weight:700; font-size:13px; cursor:pointer; transition:.15s;
  box-shadow:0 2px 8px rgba(16,185,129,.28); }
button:hover { background:var(--acc-d); }
button:disabled { opacity:.5; cursor:default; box-shadow:none; }
.anim-controls button { background:var(--panel2); color:var(--ink);
  border:1px solid var(--line); box-shadow:none; font-weight:600; }
.anim-controls button:hover { background:#eef2f7; }
button.ghost, .ghost.filebtn { background:var(--panel2); color:var(--ink);
  border:1px solid var(--line); box-shadow:none; font-weight:600; }
button.ghost:hover, .ghost.filebtn:hover { background:#eef2f7; }
.filebtn { display:inline-flex; align-items:center; padding:9px 16px;
  border-radius:9px; font-size:13px; cursor:pointer; margin:0; color:var(--ink); }
button.ghost:disabled { opacity:.5; cursor:default; }
.status,.state { color:var(--mut); font-size:12px; }
/* geometry params */
.params .preset-row { margin-bottom:12px; }
.grp { margin-bottom:4px; border-top:1px solid var(--line); padding-top:10px; }
.grp h4 { margin:0 0 9px; font-size:10.5px; text-transform:uppercase;
  letter-spacing:.07em; color:var(--acc-d); font-weight:700; }
.grp .row { display:grid; grid-template-columns:1fr 104px; align-items:center;
  gap:8px; margin-bottom:7px; }
.grp .row span { color:var(--mut); font-size:12px; }
.grp .row input, .grp .row select { margin:0; padding:6px 7px; }
.actions { display:flex; align-items:center; gap:14px; margin-top:14px; }
.chk { display:flex; align-items:center; gap:6px; margin:0; color:var(--mut); }
.chk input { width:auto; margin:0; }
.canvasarea { display:flex; flex-direction:column; }
.viewgrid { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.viewgrid figure { margin:0; background:var(--panel2); border:1px solid var(--line);
  border-radius:12px; padding:10px; }
.viewgrid figcaption { font-size:10px; letter-spacing:.07em; color:var(--mut);
  margin-bottom:8px; font-weight:700; }
.pz { overflow:hidden; border-radius:8px; cursor:grab; background:#fff;
  border:1px solid var(--line); min-height:120px; }
.pz.grab { cursor:grabbing; }
.pz img, .pz svg { display:block; width:100%; height:auto; border:0; border-radius:0;
  transform-origin:0 0; will-change:transform; user-select:none; }
.pz canvas.geocanvas { display:block; width:100%; user-select:none; }
.pzc { display:inline-flex; gap:3px; margin-left:6px; vertical-align:middle; }
.pzc button { padding:0; width:20px; height:18px; line-height:16px; font-size:13px;
  background:var(--panel2); color:var(--ink); border:1px solid var(--line);
  border-radius:5px; box-shadow:none; font-weight:700; }
.pzc button:hover { background:#eef2f7; }
.hint-row { font-size:10.5px; color:var(--mut); margin-top:7px; font-style:italic; }
.legend { display:flex; flex-wrap:wrap; gap:16px; margin-top:14px; color:var(--mut);
  font-size:11.5px; }
.legend span { display:flex; align-items:center; gap:6px; }
.legend i { width:13px; height:13px; border-radius:4px; display:inline-block; }
.legend i.mk { width:auto; height:auto; background:none; border-radius:0;
  font-size:14px; line-height:1; color:#0b1320; }
.plot-head { font-size:10.5px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--mut); margin:4px 0 8px; font-weight:700; }
.plot-head .hint { color:var(--acc-d); text-transform:none; letter-spacing:0;
  font-weight:500; }
img { max-width:100%; background:#fff; border-radius:8px; }
.kv { width:100%; border-collapse:collapse; margin-top:14px; }
.kv td { padding:6px 8px; border-bottom:1px solid var(--line); }
.kv td:first-child { color:var(--mut); }
.kv td:last-child { text-align:right; font-variant-numeric:tabular-nums; font-weight:600; }
/* calculation */
.controlbar { display:flex; flex-wrap:wrap; align-items:flex-end; gap:14px; position:relative; }
.controlbar label { margin:0; }
.controlbar select, .controlbar input { width:auto; min-width:96px; }
.active-geo { color:var(--mut); align-self:center; }
.active-geo b { color:var(--ink); }
.active-geo .lock { margin-left:4px; opacity:.6; font-size:11px; cursor:help; }
.inline-params { display:inline-flex; gap:12px; flex-wrap:wrap; }
.inline-params label { display:flex; flex-direction:column; }
.inline-params input { width:84px; }
.bar { position:absolute; bottom:-1px; left:0; height:3px; width:100%; }
.bar > div { height:100%; width:0; background:var(--acc); transition:width .1s;
  border-radius:2px; }
.anim-controls { display:flex; align-items:center; gap:12px; }
.anim-controls label { margin:0; display:flex; align-items:center; gap:6px; }
.anim-controls select { width:auto; }
.calc-body { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.left img { width:100%; }
.log { background:#0f1b2d; color:#8be0c4; border:1px solid var(--line);
  border-radius:10px; height:92px; overflow:auto; margin:0 0 12px; padding:9px;
  font-size:11px; white-space:pre-wrap; font-family:ui-monospace,Menlo,monospace; }
.wplot { margin-bottom:10px; }
canvas { width:100%; height:auto; background:#fff; border:1px solid var(--line);
  border-radius:10px; }
.wplot canvas { height:168px; display:block; }
/* about */
.view.about { grid-template-columns:1fr; }
.about-panel { max-width:880px; margin:0 auto; padding:34px 40px 40px; }
.about-head { display:flex; align-items:center; gap:18px; margin-bottom:22px; }
.about-avatar { position:relative; width:72px; height:72px; border-radius:16px;
  flex:0 0 auto; overflow:hidden;
  background:linear-gradient(135deg,var(--acc),var(--acc2)); color:#fff;
  display:flex; align-items:center; justify-content:center; font-weight:800;
  font-size:24px; letter-spacing:.04em; box-shadow:0 6px 18px rgba(16,185,129,.3); }
.about-avatar img { position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; }
.about-name { margin:0; font-size:26px; font-weight:800; letter-spacing:-.01em; }
.about-role { margin:4px 0 0; color:var(--mut); font-size:14px; }
.about-lead { font-size:15px; line-height:1.65; color:var(--ink); margin:0 0 18px; }
.about-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:0 0 26px; }
.about-stats > div { background:var(--panel2); border:1px solid var(--line);
  border-radius:12px; padding:14px 15px; font-size:12.5px; font-weight:600; color:var(--ink); }
.about-stats .num { display:block; font-size:28px; font-weight:800; color:var(--acc-d); line-height:1.05; }
.about-stats small { display:block; margin-top:6px; font-size:11px; font-weight:400; color:var(--mut); }
@media (max-width:680px){ .about-stats { grid-template-columns:repeat(2,1fr); } }
.about-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-bottom:26px; }
.about-card { background:var(--panel2); border:1px solid var(--line); border-radius:12px;
  padding:14px 16px; }
.about-card h4 { margin:0 0 7px; font-size:13px; color:var(--acc-d); font-weight:700; }
.about-card p { margin:0; font-size:12.5px; line-height:1.55; color:var(--mut); }
.about-h3 { font-size:14px; margin:24px 0 8px; color:var(--ink); }
.about-panel p { font-size:14px; line-height:1.65; color:var(--ink); }
.about-note { color:var(--mut); font-style:italic; border-left:3px solid var(--acc);
  padding-left:14px; margin:22px 0 26px; }
.about-linkedin { display:inline-flex; align-items:center; gap:6px; text-decoration:none;
  background:#0a66c2; color:#fff; font-weight:700; font-size:14px; padding:11px 20px;
  border-radius:10px; box-shadow:0 4px 14px rgba(10,102,194,.32); transition:.15s; }
.about-linkedin:hover { background:#08539e; }
@media (max-width:680px){ .about-grid{ grid-template-columns:1fr; } }

/* ---------- study: segmented toggle ---------- */
.seg { display:flex; gap:4px; background:var(--panel2); padding:4px; border-radius:9px; }
.seg button { flex:1; background:transparent; color:var(--mut); box-shadow:none;
  font-size:12px; font-weight:600; padding:7px 8px; }
.seg button.active { background:var(--acc); color:#fff; box-shadow:0 2px 8px rgba(16,185,129,.3); }
.st-adv { margin-top:4px; }
.st-adv summary { cursor:pointer; color:var(--mut); font-size:11px; padding:2px 0; }
.st-pt { border:1px solid var(--line); border-radius:9px; padding:8px; margin-bottom:7px; background:var(--panel2); }
.st-pt .pt-head { display:flex; gap:6px; align-items:center; margin-bottom:6px; }
.st-pt .pt-head input { font-weight:600; }

/* ---------- API-key gate modal ---------- */
.gate-overlay { display:none; position:fixed; inset:0; z-index:100; padding:20px;
  background:rgba(15,27,45,.5); align-items:center; justify-content:center; }
.gate-box { background:#fff; border-radius:16px; padding:24px 26px; max-width:450px;
  width:100%; box-shadow:0 24px 70px rgba(16,30,54,.35); }
.gate-box h3 { margin:0 0 10px; font-size:18px; }
.gate-box p { font-size:13px; line-height:1.6; color:var(--mut); margin:0 0 14px; }
.gate-box input { margin-bottom:6px; }
.gate-err { color:#e11d48; font-size:12px; min-height:16px; margin-bottom:10px; }
.gate-actions { display:flex; align-items:center; gap:10px; }
.gate-link { display:inline-flex; align-items:center; text-decoration:none; background:#0a66c2;
  color:#fff; font-weight:700; font-size:12px; padding:8px 13px; border-radius:8px; }
.gate-link:hover { background:#08539e; }

/* ---------- responsive / mobile ---------- */
@media (max-width:1000px){
  .view.geom, .view.study, .view.optimize, .view.rom { grid-template-columns:1fr; }
}
@media (max-width:860px){
  .calc-body { grid-template-columns:1fr; }    /* flux above waveforms */
  main { padding:14px 13px; }
  header { gap:12px; padding:0 14px; }
  .contact { display:none; }
  nav a { padding:7px 13px; font-size:12.5px; }
  .controlbar { gap:11px; }
  .controlbar select, .controlbar input { min-width:0; }
}
@media (max-width:560px){
  .viewgrid { grid-template-columns:1fr; }      /* one geometry pane per row */
  header { height:auto; flex-wrap:wrap; padding:10px 12px; gap:9px; }
  nav { width:100%; justify-content:space-between; overflow-x:auto; scrollbar-width:none; box-sizing:border-box; }
  nav::-webkit-scrollbar { display:none; }
  nav a { flex:1 0 auto; text-align:center; padding:8px 8px; }
  .anim-controls { flex-wrap:wrap; gap:8px; }
  .inline-params input { width:72px; }
  .grp .row { grid-template-columns:1fr 92px; }
  .about-panel { padding:22px 17px 28px; }
  .about-name { font-size:22px; }
  .about-head { gap:13px; }
}

/* ============ THERMAL tab ============ */
#view-thermal.view.active{display:flex}
.th-grp{font:700 11px/1 'Space Mono',monospace,sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#7a8190;margin:14px 0 6px;border-bottom:1px solid #e3e6ec;padding-bottom:4px}
.th-grp:first-child{margin-top:0}
.th-row{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;color:#3a4150;margin:5px 0}
.th-row input,.th-row select{width:108px;padding:4px 6px;border:1px solid #cfd4dd;border-radius:3px;font-size:12.5px}
.th-chk{display:flex;gap:7px;align-items:center;font-size:12.5px;color:#3a4150;margin:6px 0}
.th-main{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.th-fig{margin:0}
.th-fig figcaption,.th-trfig figcaption{font:600 10px/1 'Space Mono',monospace,sans-serif;letter-spacing:.1em;color:#8892a4;margin-bottom:6px}
.th-fig canvas{background:#fff;border:1px solid #e3e6ec;border-radius:6px}
.th-side{flex:1;min-width:240px}
.th-verdict{padding:10px 12px;border-radius:5px;font:700 13px/1.4 sans-serif;margin-bottom:12px;border-left:4px solid}
.th-verdict.ok{background:rgba(0,180,130,.08);border-color:#0aa06f;color:#0a7a55}
.th-verdict.bad{background:rgba(232,72,59,.08);border-color:#e8483b;color:#b5301f}
.th-verdict span{display:block;font:400 11.5px/1.5 sans-serif;color:#5a606e;margin-top:5px}
.th-sw{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:7px;vertical-align:-1px;border:1px solid rgba(0,0,0,.15)}
.th-trfig{margin:18px 0 0}
.th-trfig canvas{background:#fff;border:1px solid #e3e6ec;border-radius:6px;max-width:100%}

/* ===== Multiphysics tab ===== */
.mp-chain { margin: 4px 0 10px; }
.mp-chain-row { display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:13px; }
.mp-node { background:#1b2433; border:1px solid #2f3e54; border-radius:6px; padding:4px 10px; color:#cfe0f5; }
.mp-arrow { color:#5f7da3; font-weight:700; }
.mp-chain-notes { color:#8aa0bd; font-size:11.5px; margin-top:6px; line-height:1.5; }
.mp-sumstrip { background:#141c28; border:1px solid #243246; border-radius:8px; padding:8px 12px;
  font-size:13px; color:#dce8f7; display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.mp-sumstrip b { color:#fff; }
.mp-elm { margin-left:auto; color:#7f96b4; font-size:11.5px; }
.mp-cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:10px; margin:10px 0; }
.mp-card { background:#121a26; border:1px solid #233246; border-radius:8px; padding:8px 10px; }
.mp-card-h { font-size:12.5px; font-weight:700; color:#bcd2ee; margin-bottom:4px;
  display:flex; justify-content:space-between; align-items:center; }
.mp-ok { color:#4fcf8a; font-size:11px; }
.mp-bad { color:#ff7a7a; font-size:11px; }
.mp-flagbox { background:#221821; border:1px solid #4a2b34; border-radius:8px; padding:8px 12px; margin-top:6px; }
.mp-flagbox b { color:#ffb4b4; font-size:12.5px; }
.mp-flagbox ul { margin:4px 0 0 16px; color:#e0b8c0; font-size:12px; line-height:1.5; }

/* ============ GEARBOX tab ============ */
.view.gear{grid-template-columns:360px minmax(0,1fr)}
@media (max-width:1100px){.view.gear{grid-template-columns:minmax(0,1fr)}}
.gr-tabs{display:inline-flex;gap:4px;flex-wrap:wrap}
.gr-tabs button{padding:5px 11px;font-size:12px;border-radius:6px;background:var(--panel2);color:var(--ink);border:1px solid var(--line)}
.gr-tabs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.gr-trio{display:inline-flex;gap:4px}
.gr-trio input{width:48px!important}
.gr-trio.two input{width:52px!important}
.gr-note{font-size:10.5px;color:var(--mut);margin:2px 0 6px;line-height:1.4}
.gr-cases{width:100%;border-collapse:collapse;font-size:11.5px}
.gr-cases th{font:600 9.5px/1.2 'Space Mono',monospace;color:#8892a4;text-align:left;padding:2px}
.gr-cases td{padding:2px}
.gr-cases input{width:100%;padding:3px 4px;border:1px solid #cfd4dd;border-radius:3px;font-size:11.5px;box-sizing:border-box}
.gr-cases td:first-child input{width:86px}
.gr-cases .gr-x{padding:1px 6px;font-size:12px;background:transparent;color:var(--mut);border:none}
.gr-cases .ghost{padding:3px 8px;font-size:11px}
.gr-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-bottom:8px}
.gr-kpi{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:7px 9px}
.gr-kpi .k{font:600 9.5px/1.3 'Space Mono',monospace;color:#8892a4;letter-spacing:.04em}
.gr-kpi .v{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}
.gr-kpi .v.bad{color:#e8483b}
.gr-w{font-size:11.5px;color:#7a5a00;background:rgba(197,138,0,.08);border-left:3px solid #c58a00;padding:4px 8px;margin:3px 0;border-radius:3px}
.gr-w.bad{color:#b5301f;background:rgba(232,72,59,.08);border-color:#e8483b}
.gr-row{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start;margin-top:8px}
.gr-row canvas{background:#fff;border:1px solid #e3e6ec;border-radius:6px;max-width:100%}
.gr-side{flex:1;min-width:320px}
.gr-cap{font:600 10px/1.3 'Space Mono',monospace;letter-spacing:.1em;color:#8892a4;margin-bottom:6px;display:block}
.gr-ctl{display:flex;gap:8px;align-items:center;margin-top:6px;font-size:12px;flex-wrap:wrap}
.gr-ctl button{padding:4px 10px}
.gr-tbl{width:100%;border-collapse:collapse;font-size:12px}
.gr-tbl th{font:600 9.5px/1.3 'Space Mono',monospace;color:#8892a4;text-align:left;padding:4px 6px;border-bottom:2px solid var(--line)}
.gr-tbl td{padding:5px 6px;border-bottom:1px solid var(--line)}
.gr-tbl td.num{text-align:right;font-variant-numeric:tabular-nums}
.gr-tbl td.bad{color:#e8483b;font-weight:700}.gr-tbl td.ok{color:#0a7a55;font-weight:700}
.gr-tbl td.small{font-size:10.5px;color:var(--mut)}
.gr-tbl tr[data-m]{cursor:pointer}.gr-tbl tr.on{background:#eef7f3}
.gr-sheet td:first-child{color:var(--mut)}
.gr-charts{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
.gr-charts h5{font-size:11px;margin:0 0 2px;color:var(--ink);font-weight:600}
.gr-charts svg,#gr-sn svg,#gr-aids svg{width:100%;height:auto;display:block}
#gr-aids svg{max-width:560px}
#gr-sn svg{max-width:640px}
.gr-ax{fill:#8892a4;font:10px 'Space Mono',monospace}
.gr-lbl{fill:var(--ink);font:600 10.5px Inter,sans-serif}
.gr-grid{stroke:#eef1f5}.gr-base{stroke:#cfd4dd}
.gr-aid{border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:5px;padding:8px 10px;margin-top:10px;font-size:12px;line-height:1.5}
.gr-aid button{padding:3px 10px;font-size:11.5px;margin-left:6px}
.gr-details{margin-top:12px}
.gr-details summary{cursor:pointer;font:600 10.5px/1.3 'Space Mono',monospace;letter-spacing:.08em;color:#5a606e;text-transform:uppercase}
.gr-scroll{overflow-x:auto;margin-top:6px}

/* ---- Benchmarks tab ---- */
.view.bench{grid-template-columns:minmax(0,1fr)}
.bm-wrap{max-width:1180px;width:100%;margin:0 auto;box-sizing:border-box}
.bm-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;flex-wrap:wrap}
.bm-head h1{font-size:22px;margin:0 0 6px}
.bm-head p{max-width:78ch;color:var(--mut);font-size:13px;margin:0;line-height:1.5}
.bm-actions{display:flex;flex-direction:column;gap:6px;align-items:flex-end;max-width:360px}
.bm-chips{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0 6px}
.bm-chip{display:flex;flex-direction:column;padding:8px 12px;border:1px solid var(--line);border-left:4px solid #94a3b8;border-radius:8px;background:var(--panel2);text-decoration:none;color:var(--ink);min-width:150px}
.bm-chip.ok{border-left-color:#0aa06f}.bm-chip.bad{border-left-color:#e8483b}
.bm-chip b{font-size:12.5px}.bm-chip span{font-size:11.5px;color:var(--mut)}
.bm-dom h2{font:700 11px/1 'Space Mono',monospace;letter-spacing:.12em;text-transform:uppercase;color:#7a8190;margin:26px 0 10px;border-bottom:1px solid var(--line);padding-bottom:6px}
.bm-card{border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin:0 0 14px;background:var(--panel)}
.bm-card header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.bm-card h3{font-size:15px;margin:0 0 6px}
.bm-card .bm-run{white-space:nowrap}
.bm-tags{display:flex;gap:6px;flex-wrap:wrap}
.bm-kind{font:600 10px/1 'Space Mono',monospace;letter-spacing:.06em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:var(--panel2);color:#5a6475;border:1px solid var(--line)}
.bm-badge{font:700 10px/1 'Space Mono',monospace;letter-spacing:.08em;padding:4px 7px;border-radius:4px}
.bm-badge.ok{background:rgba(10,160,111,.12);color:#0a7a55}.bm-badge.bad{background:rgba(232,72,59,.12);color:#b5301f}.bm-badge.plan{background:rgba(100,116,139,.12);color:#475569}
.bm-what{font-size:13px;margin:8px 0 6px;max-width:90ch}
.bm-dl{display:grid;grid-template-columns:110px 1fr;gap:4px 12px;font-size:12px;margin:6px 0 10px}
.bm-dl dt{color:var(--mut);font-weight:600}.bm-dl dd{margin:0;min-width:0}.bm-dl ul{margin:0;padding-left:16px}
.bm-scroll{overflow-x:auto}
.bm-rows{width:100%;border-collapse:collapse;font-size:12px}
.bm-rows th{font:600 9.5px/1.2 'Space Mono',monospace;color:#8892a4;text-align:left;padding:5px 6px;border-bottom:1px solid var(--line);white-space:nowrap}
.bm-rows td{padding:5px 6px;border-bottom:1px solid #f0f2f6;vertical-align:top}
.bm-rows td.n{font-variant-numeric:tabular-nums;white-space:nowrap}
.bm-rows td i{color:var(--mut);font-style:normal;font-size:11px}
.bm-rows td small{display:block;color:var(--mut);font-size:10.5px}
.bm-rows tr.bad td{background:rgba(232,72,59,.05)}
.bm-ok{color:#0aa06f;font-weight:700}.bm-x{color:#e8483b;font-weight:700}.bm-i{color:var(--mut)}
.bm-plots{display:flex;gap:14px;flex-wrap:wrap;margin:12px 0 4px}
.bm-chart{width:520px;max-width:100%;height:auto;background:#fff;border:1px solid var(--line);border-radius:6px}
.bm-ct{font:600 11px sans-serif;fill:#0f1b2d}.bm-tk{font:10px sans-serif;fill:#6b7787}.bm-ax{font:10.5px sans-serif;fill:#6b7787}.bm-grid{stroke:#eef1f6}
.bm-notes{font-size:11.5px;color:#5a6475;margin:8px 0 0;padding-left:18px;line-height:1.5}
.bm-meta{font-size:11px;color:var(--mut);margin-top:8px}
.bm-err{font-size:10.5px;background:#fff5f4;padding:6px;border-radius:4px;white-space:pre-wrap}
@media (max-width:700px){.bm-dl{grid-template-columns:1fr}.bm-actions{align-items:flex-start}}
.gr-type{margin-bottom:10px}
.gr-cases select{width:100%;min-width:52px;padding:3px 1px;border:1px solid #cfd4dd;border-radius:3px;font-size:11px;box-sizing:border-box}

/* benchmarks: run a case in its own tab (bench.js) */
.bm-btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.bm-open{white-space:nowrap}
.bm-studio{font-size:12px;margin:2px 0 10px;padding:7px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.bm-studio.mut{color:var(--mut);background:transparent;border-style:dashed}
.bm-tabres{font-weight:600}.bm-tabres.ok{color:#0a7a55}.bm-tabres.bad{color:#b5301f}
.bmv{margin:0 0 14px;padding:12px 16px 10px;background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--acc2);border-radius:12px;box-shadow:var(--shadow)}
.bmv header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}
.bmv-t{display:flex;flex-direction:column;gap:3px;min-width:0}
.bmv-k{font:700 10px/1.3 'Space Mono',monospace;letter-spacing:.1em;color:var(--acc2)}
.bmv-t b{font-size:14.5px;text-wrap:balance}
.bmv-act{display:flex;gap:6px;flex-wrap:wrap}
.bmv-act button{padding:6px 11px;font-size:12px}
.bmv-act .bmv-ic{min-width:32px;padding:6px 8px}
.bmv-state{margin:10px 0 6px;font-weight:700;font-size:13px;display:flex;align-items:center;gap:8px}
.bmv-state.ok{color:#0a7a55}.bmv-state.bad{color:#b5301f}.bmv-state.run{color:var(--ink)}
.bmv-spin{width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--acc2);border-radius:50%;animation:bmvspin .8s linear infinite;flex:none}
@keyframes bmvspin{to{transform:rotate(360deg)}}
.bmv-body{max-height:min(52vh,560px);overflow-y:auto;padding-right:4px}
.bmv-run{margin-top:8px}
.bmv-rl{display:flex;justify-content:space-between;gap:10px;align-items:baseline;font-size:12px;color:#334155;margin-bottom:4px;flex-wrap:wrap}
.bmv-link{background:none;border:0;padding:0;color:var(--acc2);font-size:12px;font-weight:600;box-shadow:none;cursor:pointer;text-decoration:underline}
.bmv-link:hover{background:none;color:#1d4ed8}
.bmv-wait{font-size:12px;color:var(--mut);margin:2px 0 6px}
.bmv-chg{font-size:12px;color:#8a5a00;background:#fff8e6;border:1px solid #f3dfae;border-radius:6px;padding:6px 9px;margin:6px 0}
.bmv-note,.bmv-src{font-size:11.5px;color:#5a6475;margin:8px 0 0;line-height:1.5;max-width:110ch}
@media (max-width:700px){.bmv-act{width:100%}.bm-btns{justify-content:flex-start}}

/* calculation: air-gap field over angle and time */
#w-gap{width:100%;height:250px;display:block;border:0}
.gap-scroll{overflow-x:auto;margin-top:6px}
.gapw td,.gapw th{white-space:nowrap}

/* drive train tab (drivetrain.js) */
.view.drive{grid-template-columns:360px minmax(0,1fr)}
@media (max-width:1100px){.view.drive{grid-template-columns:minmax(0,1fr)}}
.dt-anim{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap}
.dt-fluxbox{flex:1 1 260px;min-width:0;max-width:560px;position:relative}
.dt-fluxbox canvas{width:100%;display:block;border:1px solid var(--line);border-radius:6px}
#dt-gear{flex:1 1 260px;min-width:0;max-width:560px;height:auto;align-self:flex-start;border:1px solid var(--line);border-radius:6px;background:#fbfcfd}
.dt-row2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:12px}
@media (max-width:900px){.dt-row2{grid-template-columns:minmax(0,1fr)}}
.dt-gear table{margin-top:6px}
.dt-link{display:inline-block;margin-top:8px;font-size:12px;color:var(--acc2)}
#dt-aside .bar{margin-top:8px}

/* gearbox: 3D view (gear3d.js) */
.g3d{margin-bottom:14px}
.g3d-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.g3d-ctl{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12px}
.g3d-ctl button{padding:4px 10px;font-size:12px}
.g3d-ctl label{margin:0;display:inline-flex;gap:4px;align-items:center}
#g3d-cv{display:block;width:100%;border:1px solid var(--line);border-radius:8px;background:#f6f8fb;cursor:grab}

/* spur pair: 3D FE tooth-root option */
.rd-fe{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}
.rd-fe-ctl{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:6px 0;font-size:12px}
.rd-fe-ctl label{margin:0;display:inline-flex;gap:4px;align-items:center}
.rd-fe-ctl select{width:auto}
.rd-fe-plots{display:flex;flex-wrap:wrap;gap:12px}
.rd-fe-plots figure{flex:1 1 280px;min-width:0;margin:0}
.rd-fe-plots .bm-chart{width:100%}
#rdp-fe-map{width:100%;max-width:340px;height:auto}

/* Thermal tab — cooling-aware machine network */
.th-sub{margin:2px 0 6px 10px;padding-left:8px;border-left:2px solid var(--line)}
.th-sub[hidden]{display:none}
.th-adv{margin:8px 0 4px;font-size:12.5px;color:#3a4150}
.th-adv summary{cursor:pointer;font:600 11px/1.6 'Space Mono',monospace,sans-serif;letter-spacing:.06em;color:#7a8190}
.tn{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}
.tn-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap}
.tn-title{margin:0;font-size:15px;color:var(--ink)}
.tn-sub{font-size:12px;color:var(--mut);margin-top:3px;max-width:80ch}
.tn-ctl{margin:0}
.tn-row{display:flex;gap:18px;flex-wrap:wrap;align-items:flex-start;margin-top:10px}
.tn-fig{margin:0;flex:2 1 520px;min-width:0}
.tn-fig figcaption{font:600 10px/1 'Space Mono',monospace,sans-serif;letter-spacing:.1em;color:#8892a4;margin-bottom:6px}
.tn-svgwrap{background:#fff;border:1px solid #e3e6ec;border-radius:6px;overflow-x:auto}
#tn-axial{display:block;width:100%;height:auto;min-width:460px}
.tn-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:11px;color:var(--mut);margin-top:6px;align-items:center}
.tn-legend i{display:inline-block;width:18px;height:0;border-top:2px solid;vertical-align:middle;margin-right:5px}
.tn-legend .cb{display:inline-block;width:120px;height:9px;border-radius:2px;vertical-align:middle;margin:0 5px}
.tn-side{flex:1 1 250px;min-width:0}
.tn-h{font:700 10.5px/1 'Space Mono',monospace,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:#7a8190;margin:4px 0 8px}
.tn-path{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;font-size:12px;margin-bottom:7px}
.tn-path b{font-variant-numeric:tabular-nums;font-weight:600}
.tn-bar{grid-column:1/3;height:6px;border-radius:3px;background:var(--panel2);overflow:hidden}
.tn-bar span{display:block;height:100%;border-radius:3px}
.tn-kv{margin-top:4px}
.tn-kv td{padding:4px 6px;font-size:12px}
.tn-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0 8px}
.tn-tabs button{padding:5px 11px;font-size:12px;border-radius:6px;background:var(--panel2);color:var(--ink);border:1px solid var(--line);cursor:pointer}
.tn-tabs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.tn-table{overflow-x:auto}
.tn-table table{border-collapse:collapse;width:100%;font-size:12px;min-width:560px}
.tn-table th{text-align:left;font-weight:600;color:var(--mut);padding:5px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.tn-table td{padding:5px 8px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums}
.tn-table td.n{text-align:right}
.tn-table .note{color:var(--mut);font-size:11.5px;margin:6px 0 0}
.tn-node{cursor:default}
.tn-axis{fill:#8892a4;font:10px 'Space Mono',monospace,sans-serif}
.tn-lbl{fill:#26303f;font:600 9.5px Inter,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:2.5px}

/* Thermal tab — expanded network (schematic) */
.tn-ctl{display:flex;align-items:center;gap:12px}
.tn-expand{padding:5px 12px;font-size:12px;border-radius:6px;background:var(--ink);color:#fff;border:1px solid var(--ink);cursor:pointer}
.tnx{position:fixed;inset:0;z-index:1000;background:rgba(15,27,45,.55);display:flex;flex-direction:column;padding:14px}
.tnx[hidden]{display:none}
.tnx-bar{background:var(--panel);border-radius:10px 10px 0 0;padding:10px 14px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.tnx-title{display:flex;flex-direction:column;gap:2px;min-width:0}
.tnx-title b{font-size:14px;color:var(--ink)}
.tnx-title span{font-size:11.5px;color:var(--mut)}
.tnx-ctl{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:#3a4150}
.tnx-ctl label{display:flex;align-items:center;gap:4px}
.tnx-ctl select,.tnx-ctl input[type=search]{padding:4px 6px;border:1px solid #cfd4dd;border-radius:4px;font-size:12px}
.tnx-ctl input[type=search]{width:170px}
.tnx-ctl button{padding:4px 10px;font-size:12px;border-radius:5px;background:var(--panel2);color:var(--ink);border:1px solid var(--line);cursor:pointer}
.tnx-ctl .tnx-x{background:var(--ink);color:#fff;border-color:var(--ink)}
.tnx-main{flex:1;display:flex;min-height:0;background:#fff;border-radius:0 0 10px 10px;overflow:hidden}
#tnx-svg{flex:1;min-width:0;height:100%;cursor:grab;touch-action:none;user-select:none}
#tnx-svg:active{cursor:grabbing}
.tnx-side{width:330px;max-width:40%;border-left:1px solid var(--line);padding:12px 14px;overflow:auto;font-size:12px;color:#3a4150}
.tnx-h{font-weight:700;font-size:13.5px;color:var(--ink);margin-bottom:2px}
.tnx-h2{font:700 10.5px/1 'Space Mono',monospace,sans-serif;letter-spacing:.1em;text-transform:uppercase;color:#7a8190;margin:14px 0 6px}
.tnx-mut{color:var(--mut);font-size:11.5px;margin:4px 0}
.tnx-kv{width:100%;border-collapse:collapse;margin-top:8px}
.tnx-kv td{padding:4px 2px;border-bottom:1px solid var(--line)}
.tnx-kv td:last-child{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.tnx-paths{width:100%;border-collapse:collapse;font-size:11.5px}
.tnx-paths th{text-align:left;color:var(--mut);font-weight:600;padding:3px 2px;border-bottom:1px solid var(--line)}
.tnx-paths td{padding:4px 2px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums}
.tnx-paths tr[data-go]{cursor:pointer}
.tnx-paths tr[data-go]:hover td{background:var(--panel2)}
.tnx-legend{margin:0;padding-left:0;list-style:none;display:grid;gap:6px;font-size:11.5px}
.tnx-legend i{display:inline-block;width:16px;height:8px;border-radius:2px;margin:0 4px 0 2px;vertical-align:middle}
.tnx-src{color:#c2410c;font-weight:700}
#tnx-svg text{font-family:Inter,Arial,sans-serif}
#tnx-svg .tnx-nl{font-size:11px;font-weight:600;fill:#0f1b2d;paint-order:stroke;stroke:#fff;stroke-width:3px}
#tnx-svg .tnx-nt{font-size:10.5px;fill:#334155;paint-order:stroke;stroke:#fff;stroke-width:3px}
#tnx-svg .tnx-nc{font-size:9.5px;fill:#64748b;paint-order:stroke;stroke:#fff;stroke-width:3px}
#tnx-svg .tnx-np{font-size:9.5px;fill:#c2410c;font-weight:600;paint-order:stroke;stroke:#fff;stroke-width:3px}
#tnx-svg .tnx-rl{font-size:9px;fill:#334155;paint-order:stroke;stroke:#fff;stroke-width:2.5px}
#tnx-svg .tnx-bl{font-size:8.5px;font-weight:700;fill:#0f1b2d}
#tnx-svg .tnx-bt{font-size:9.5px;fill:#fff}
#tnx-svg .tnx-band{font-size:12px;font-weight:700;fill:#8892a4;letter-spacing:.06em}
#tnx-svg .tnx-n{cursor:pointer}
#tnx .tnx-ctl label{white-space:nowrap}
#tnx .tnx-ctl input[type=checkbox]{width:auto;margin:0}
#tnx .tnx-ctl select{width:auto;flex:0 0 auto}
#tnx .tnx-ctl input[type=search]{flex:0 0 170px}
