/* Hi75C Pro remapper — black stage, the keyboard in its own colorway is the hero.
   Type: IBM Plex Sans Arabic (Arabic) + IBM Plex Sans (Latin), IBM Plex Mono for raw data only. */

@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-latin-400-normal.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+0000-024F,U+2000-206F,U+2190-21FF,U+20AC}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-latin-500-normal.woff2) format("woff2");font-weight:500;font-display:swap;unicode-range:U+0000-024F,U+2000-206F,U+2190-21FF,U+20AC}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-latin-600-normal.woff2) format("woff2");font-weight:600;font-display:swap;unicode-range:U+0000-024F,U+2000-206F,U+2190-21FF,U+20AC}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-latin-700-normal.woff2) format("woff2");font-weight:700;font-display:swap;unicode-range:U+0000-024F,U+2000-206F,U+2190-21FF,U+20AC}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-arabic-arabic-400-normal.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+0600-06FF,U+0750-077F,U+FB50-FDFF,U+FE70-FEFF}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-arabic-arabic-500-normal.woff2) format("woff2");font-weight:500;font-display:swap;unicode-range:U+0600-06FF,U+0750-077F,U+FB50-FDFF,U+FE70-FEFF}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-arabic-arabic-600-normal.woff2) format("woff2");font-weight:600;font-display:swap;unicode-range:U+0600-06FF,U+0750-077F,U+FB50-FDFF,U+FE70-FEFF}
@font-face{font-family:"Plex";src:url(fonts/ibm-plex-sans-arabic-arabic-700-normal.woff2) format("woff2");font-weight:700;font-display:swap;unicode-range:U+0600-06FF,U+0750-077F,U+FB50-FDFF,U+FE70-FEFF}
@font-face{font-family:"Plex Mono";src:url(fonts/ibm-plex-mono-latin-400-normal.woff2) format("woff2");font-weight:400;font-display:swap}

:root{
  --void:#000;          /* page */
  --graphite:#0f1012;   /* panels */
  --well:#17181b;       /* inputs, wells */
  --seam:#26282d;       /* hairlines */
  --text:#ecebe8; --muted:#8d8f96;
  --cream:#e9e1d3;      /* keycap */
  --latte:#b9a284;      /* accent keycaps (Esc, Enter, Space, arrows) */
  --ink:#2a231b;        /* legends */
  --brass:#d9a441;      /* changed keys + primary actions */
  --ok:#5bd68a; --bad:#ef6b62;
  --gap:5px;
  /* key unit: 50px, shrinking so the whole board (16.25u + 16 gaps + case padding) fits narrow screens */
  --u:clamp(18px, calc((100vw - var(--side) - var(--lcol) - 124px - 16 * var(--gap)) / 16.25), 50px);
  --r-case:20px; --r-key:7px; --r-ctl:8px;
  --on:#000;            /* text on --text backgrounds */
  --code:#c9cbd1; --edge:#4a4d55;
  --side:200px;         /* sidebar width */
  --lcol:176px;         /* layer column beside the keyboard + its gap */
}
:root[data-theme=light]{
  --void:#f3f1ec; --graphite:#fff; --well:#ecE9e3; --seam:#dcd7cd;
  --text:#1c1d20; --muted:#666a72; --brass:#a8741a; --on:#fff; --code:#2e3136; --edge:#b4aea2;
}
*{box-sizing:border-box}
html{background:var(--void)}
body{margin:0;background:var(--void);color:var(--text);font:15px/1.6 "Plex",system-ui,sans-serif;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--text);outline-offset:2px}
[hidden]{display:none!important}
a{color:var(--brass)}

/* ---------- header ---------- */
.top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:18px clamp(16px,4vw,40px);border-bottom:1px solid var(--seam)}
.brand{display:flex;align-items:baseline;gap:12px}
.brand-model{font-size:22px;font-weight:700;letter-spacing:-.01em}
.brand-sub{font-size:15px;color:var(--muted)}
.status{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--bad)}
.dot.on{background:var(--ok);box-shadow:0 0 8px var(--ok)}
.spacer{flex:1}

/* ---------- buttons ---------- */
button{background:var(--well);border:1px solid var(--seam);border-radius:var(--r-ctl);padding:8px 14px;cursor:pointer;transition:border-color .15s}
button:hover:not(:disabled){border-color:var(--edge)}
button:disabled{opacity:.38;cursor:not-allowed}
button.ghost,button.quiet{background:transparent}
button.quiet{color:var(--muted)}
button.quiet:hover:not(:disabled){color:var(--text)}
button.danger:hover:not(:disabled){color:var(--bad);border-color:var(--bad)}
button.on{border-color:var(--brass);color:var(--brass)}
button.primary{background:var(--text);color:var(--on);border-color:var(--text);font-weight:600}
button.write{background:var(--brass);color:#1c1303;border-color:var(--brass);font-weight:600}
#btnWrite{display:inline-flex;align-items:center;gap:8px}
.pending{width:8px;height:8px;border-radius:50%;background:#1c1303;box-shadow:0 0 0 2px #1c130333}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:12px}
.row.end{justify-content:flex-end}

/* ---------- shell: sidebar + content ---------- */
.shell{display:grid;grid-template-columns:var(--side) minmax(0,1fr);align-items:start}
.side{position:sticky;top:0;display:flex;flex-direction:column;gap:4px;padding:20px 12px;min-height:calc(100vh - 70px);border-inline-end:1px solid var(--seam)}
.nav{display:flex;align-items:center;gap:10px;background:transparent;border:1px solid transparent;color:var(--muted);text-align:start;padding:10px 12px;font-size:14px}
.nav:hover:not(:disabled){color:var(--text);border-color:transparent;background:var(--well)}
.nav.active,.nav.active:hover:not(:disabled){background:var(--text);color:var(--on);font-weight:600}
.nav-spacer{flex:1}
.ico{width:20px;height:20px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.icon-btn{display:inline-grid;place-items:center;padding:8px}
.work .pane.off{display:none}
/* sections with the keyboard only: the layer column keeps its space, so the keyboard stays exactly where it is */
.stage.kbonly .lgroups{visibility:hidden}
.stage.kbonly>.note,.stage.kbonly>.hint,.stage.kbonly>.toolbar,.stage.kbonly>.fine{display:none}
.stage.kbonly{border-bottom:none;padding-bottom:0}

/* ---------- stage (hero) ---------- */
main{max-width:1440px;width:100%;margin:0 auto;padding:clamp(16px,3vw,32px) clamp(16px,4vw,40px)}
.stage{display:flex;flex-direction:column;align-items:center;gap:10px;padding-bottom:28px;border-bottom:1px solid var(--seam)}
/* first steps: same height whatever it shows, so nothing below moves */
.steps{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 18px;min-height:2.2em;align-items:center;margin-bottom:4px}
.step{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.step b{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;border:1px solid var(--seam);font-size:11px;font-weight:600;color:var(--text)}
.step.done{color:var(--ok)}
.step.done b{background:var(--ok);border-color:var(--ok);color:#06210f}
.steps-warn{margin:0;max-width:80ch;text-align:center;font-size:13px;color:var(--brass)}
button.link{background:none;border:none;padding:0;color:var(--brass);text-decoration:underline;font:inherit;cursor:pointer}
.note,.hint{margin:0;max-width:96ch;text-align:center;color:var(--muted);font-size:13px}
.note{min-height:1.6em}
.hint{min-height:1.6em;margin-bottom:6px}
.seg{display:inline-flex;background:var(--well);border:1px solid var(--seam);border-radius:999px;padding:3px;gap:2px}
.seg .tab{border:none;background:transparent;border-radius:999px;padding:6px 16px;font-size:14px;color:var(--muted)}
.seg .tab.active{background:var(--text);color:var(--on);font-weight:600}
.seg.small .tab{padding:4px 12px;font-size:13px}
.kbrow{display:flex;gap:16px;align-items:flex-start;justify-content:center;max-width:100%}
.lgroups{flex:0 0 160px;display:flex;flex-direction:column;gap:14px;padding-top:6px}
.lg{display:flex;flex-direction:column;align-items:stretch;gap:4px}
.lg .seg{display:flex}
.lg .seg .tab{flex:1;padding:6px 8px;white-space:nowrap}
.lg-cap{font-size:12px;color:var(--muted)}
.lg.shared{padding-top:14px;border-top:1px dashed var(--seam)}

/* the keyboard: anodized case + cream PBT caps */
.kbwrap{min-width:0;max-width:100%;overflow-x:auto;padding:4px 2px 12px}
.kb{direction:ltr;width:max-content;padding:16px;border-radius:var(--r-case);
  background:linear-gradient(180deg,#1d1e21,#141517);
  box-shadow:inset 0 1px 0 #2e3034,inset 0 -2px 0 #0a0a0b,0 30px 60px -30px #000}
.kr{display:flex;align-items:stretch;gap:var(--gap);margin-bottom:var(--gap)}
.kr.gap{margin-bottom:calc(var(--gap) * 2.8)}
.kr:last-child{margin-bottom:0}
.kgap{flex-shrink:0}
.k{border:none;padding:0;font:inherit;height:var(--u);flex-shrink:0;position:relative;user-select:none;
  display:flex;align-items:center;justify-content:center;border-radius:var(--r-key);
  background:linear-gradient(180deg,#f3ece0 0%,var(--cream) 70%,#d8cebd 100%);
  box-shadow:inset 0 -4px 0 #cbbfa9,0 1px 0 #00000080;color:var(--ink);transition:transform .06s}
.k:hover{filter:brightness(1.04)}
.k.acc{background:linear-gradient(180deg,#c9b498 0%,var(--latte) 70%,#a38b6c 100%);box-shadow:inset 0 -4px 0 #957d5f,0 1px 0 #00000080}
.k .lbl{font-size:11.5px;font-weight:600;line-height:1.1;text-align:center;padding:0 3px 3px;overflow:hidden}
.k .orig{position:absolute;top:4px;left:6px;font-size:9px;font-weight:500;color:#7c6f5e}
.k.changed{box-shadow:inset 0 -4px 0 var(--brass),0 0 0 2px var(--brass)}
.k.changed .lbl{color:#7a4f00}
.k.special .lbl{color:#5b4a8a}
.k.empty .lbl{color:#b3a894}
.k.sel{outline:3px solid var(--text);outline-offset:2px}
.k.pressed{transform:translateY(2px);filter:brightness(.85)}
/* lighting preview: dark caps lit by the effect (colours set per key by preview.js) */
.kb.lp .k,.kb.lp .k.acc,.kb.lp .k.knob{background:#26272b;box-shadow:inset 0 -3px 0 #0006;color:#f2f2f2;transition:none;filter:none}
.kb.lp .k .lbl{color:inherit}
.kb.lp .k .orig{display:none}
.kb.lp .k.sel{outline:none}
.k.knob{border-radius:50%;background:radial-gradient(circle at 35% 30%,#4c4f57,#1b1c1f 70%);box-shadow:0 0 0 3px #26282c,inset 0 1px 0 #6668;color:#cfd2d8}
.k.knob .orig{color:#9a9da5}

.toolbar{display:flex;gap:8px 24px;flex-wrap:wrap;justify-content:center}
.toolbar .group{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.fine{margin:6px 0 0;color:var(--muted);font-size:13px;max-width:72ch}
.stage .fine{text-align:center;margin:0}

/* ---------- workspace: one wide panel with tabs ---------- */
.panel{background:var(--graphite);border:1px solid var(--seam);border-radius:14px;padding:18px 20px}
.work{margin-top:28px;position:relative}
.seg.tabs{display:flex;width:max-content;max-width:100%;overflow-x:auto;margin-bottom:18px}
.seg.tabs .tab{white-space:nowrap}
.panes{display:grid;position:relative}
.pane{grid-area:1/1;min-width:0}
.pane:not(.active){visibility:hidden}
.pane h3{margin:0 0 8px;font-size:14px;font-weight:600;color:var(--muted)}
.cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:start}
.fx-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:12px;align-items:stretch;margin-bottom:12px}
.fx-head .sel-info,.fx-head input{margin:0}
.sel-info{background:var(--well);border-radius:var(--r-ctl);padding:8px 12px;font-size:14px;line-height:1.5;min-height:calc(3em + 16px);box-sizing:border-box}
.sel-info b{color:var(--brass);font-weight:600}
input[type=search],select,textarea{width:100%;background:var(--well);border:1px solid var(--seam);border-radius:var(--r-ctl);padding:8px 10px}
input[type=search]{margin-bottom:12px}
.cats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.cat{background:transparent;font-size:13px;padding:3px 10px;border-radius:999px;color:var(--muted)}
.cat.active{color:var(--on);background:var(--text);border-color:var(--text)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));grid-auto-rows:max-content;align-content:start;gap:6px;height:280px;overflow:auto;direction:ltr;padding:2px}
.opt{color:var(--text);font-size:12px;font-weight:500;padding:9px 4px;text-align:center;border-radius:6px}
.opt:hover{border-color:var(--brass);color:var(--brass)}

.combo{direction:ltr;grid-column:1/-1}
.combo-mods{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.combo .opt.on{background:var(--text);color:var(--on);border-color:var(--text)}
.combo .row{margin-top:10px}.combo select{flex:0 1 260px;width:auto}
.combo-pre{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:6px}
.combo-pre .opt{text-align:left;padding:8px 10px}

.form{display:grid;grid-template-columns:auto 1fr;gap:12px 16px;align-items:center}
.form label,.form span{font-size:14px;color:var(--muted)}
input[type=range]{width:100%;accent-color:var(--brass);direction:ltr}
input[type=range]:disabled{opacity:.4}
.chk{display:flex;gap:8px;align-items:center;cursor:pointer}
.chk input{width:18px;height:18px;margin:0;accent-color:var(--brass)}
.rng{display:flex;gap:12px;align-items:center}
.rng output{min-width:7ch;font-size:14px;font-variant-numeric:tabular-nums}
.warn-soft[hidden]{display:block;visibility:hidden}
input[type=color]{width:42px;height:34px;padding:0;border:1px solid var(--seam);border-radius:var(--r-ctl);background:var(--well)}
.sw{display:flex;gap:6px;flex-wrap:wrap;direction:ltr}
.swatch{width:26px;height:26px;padding:0;border-radius:50%;border:none;box-shadow:0 0 0 1px #0008 inset}
.swatch.on{outline:2px solid var(--text);outline-offset:2px}

/* key tester */
.k.tested{box-shadow:inset 0 -4px 0 #3f9e63,0 0 0 2px var(--ok)}
.tester-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.tester-head .fine{flex:1;min-width:240px;margin:0}
.count{font-weight:600;color:var(--ok);white-space:nowrap}
.keylog{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px;min-height:34px;direction:ltr}
.kl{font:12px/1 "Plex Mono",ui-monospace,monospace;background:var(--well);border:1px solid var(--seam);border-radius:6px;padding:7px 9px;color:#c9cbd1}
.kl:first-child{border-color:var(--ok);color:var(--ok)}
.kl-empty{color:var(--muted);font-size:13px}

/* typing */
.typing-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.typing-head select{width:auto}
.tstats{margin-inline-start:auto;font-weight:600;color:var(--brass);font-variant-numeric:tabular-nums}
.ttext{background:var(--well);border:1px solid var(--seam);border-radius:12px;padding:18px 20px;font-size:22px;line-height:1.9;cursor:text;min-height:4em;white-space:pre-wrap;color:var(--muted)}
.ttext:focus,.ttext:focus-within{outline:none}
.ttext span.ok{color:var(--text)}
.ttext span.bad{color:var(--bad);text-decoration:underline}
.ttext span.bad.space{background:#ef6b6233;text-decoration:none}
.ttext span.caret{box-shadow:inset 2px 0 0 var(--brass)}
.ttext[dir=rtl] span.caret{box-shadow:inset -2px 0 0 var(--brass)}
.tinput{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.work:has(.tinput:focus) .ttext{border-color:var(--brass)}

/* Mac patch tab: scrolls inside the panel so it doesn't set the panel's height */
.pane[data-p=patch]{padding-inline-end:6px}
.patch-head{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;margin-bottom:14px}
.warn{flex:1;min-width:280px;margin:0;font-size:13px;color:var(--brass);background:#d9a44114;border:1px solid #d9a44155;border-radius:var(--r-ctl);padding:10px 12px}
.ok-text{margin:8px 0 0;font-size:13px;color:var(--ok)}
.psteps{list-style:none;counter-reset:ps;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(520px,1fr));gap:14px}
.psteps li{counter-increment:ps;background:var(--well);border:1px solid var(--seam);border-radius:12px;padding:14px 16px;min-width:0}
.psteps h4{margin:0 0 4px;font-size:14px;font-weight:600}
.psteps h4::before{content:counter(ps);display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--text);color:var(--on);font-size:11px;margin-inline-end:8px}
.psteps .fine{margin:4px 0 8px}
.cmd{display:flex;align-items:stretch;gap:6px;margin:6px 0}
.cmd pre{flex:1;margin:0;max-height:none;white-space:pre-wrap;overflow-wrap:anywhere}
.cmd .copy{flex:none;font-size:12px;padding:4px 10px}
a.btn{display:inline-flex;align-items:center;background:var(--graphite);border:1px solid var(--seam);border-radius:var(--r-ctl);padding:8px 14px;color:var(--text);text-decoration:none;font-size:14px}
a.btn:hover{border-color:#4a4d55}
a.btn.write{background:var(--brass);color:#1c1303;border-color:var(--brass);font-weight:600}
.drop{display:grid;place-items:center;min-height:72px;border:1.5px dashed #3a3d44;border-radius:10px;color:var(--muted);font-size:13px;cursor:pointer;text-align:center;padding:10px}
.drop:hover,.drop.over{border-color:var(--brass);color:var(--brass)}
.presult .row{margin-top:8px}

pre{direction:ltr;text-align:left;unicode-bidi:plaintext;margin:12px 0 0;background:var(--well);border:1px solid var(--seam);border-radius:var(--r-ctl);padding:10px 12px;font:12px/1.6 "Plex Mono",ui-monospace,monospace;max-height:280px;overflow:auto;white-space:pre-wrap;word-break:break-word;color:var(--code)}

.foot{max-width:1440px;margin:0 auto;padding:8px clamp(16px,4vw,40px) 40px;color:#5d6068;font-size:12px}

.modal{position:fixed;inset:0;background:#000c;display:none;align-items:center;justify-content:center;z-index:9;padding:16px}
.modal.show{display:flex}
.modal .box{background:var(--graphite);border:1px solid var(--seam);border-radius:14px;padding:20px;width:min(560px,100%)}
.modal h2{margin:0 0 8px;font-size:17px}
.modal .fine{margin-bottom:12px}
textarea{height:200px;font:12px/1.5 "Plex Mono",ui-monospace,monospace;direction:ltr}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--text);color:var(--on);font-weight:500;padding:10px 18px;border-radius:999px;opacity:0;transition:opacity .2s;pointer-events:none;z-index:10;max-width:calc(100vw - 32px);text-align:center}
.toast.show{opacity:1}

@media (max-width:1024px){
  :root{--lcol:0px}
  .kbrow{flex-direction:column;align-items:center}
  .lgroups{flex:none;flex-direction:row;flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:10px 18px;padding-top:0}
  .lg{align-items:center}
  .lg.shared{padding-top:0;border-top:none;padding-inline-start:18px;border-inline-start:1px dashed var(--seam)}
}
@media (max-width:900px){
  :root{--side:0px}
  .shell{grid-template-columns:1fr}
  .side{position:static;flex-direction:row;min-height:0;overflow-x:auto;padding:8px 12px;border-inline-end:none;border-bottom:1px solid var(--seam)}
  .nav{white-space:nowrap;padding:8px 12px}
  .nav-spacer{display:none}
}
@media (max-width:760px){
  :root{--gap:3px}
  .kb{padding:10px}
  .k{--r-key:5px}
  .k .lbl{font-size:8.5px;padding:0 1px 2px}
  .k .orig{display:none}
  .cols,.fx-head{grid-template-columns:1fr}
  .psteps{grid-template-columns:1fr}
  .note,.hint{min-height:3.2em}            /* texts wrap differently per tab: keep the keyboard still */
  .note{min-height:4.8em}
  .steps{min-height:5.4em;gap:4px 12px}
  .step{font-size:12px}
  .seg.tabs{flex-wrap:wrap;width:auto;border-radius:16px}
  .ttext{font-size:19px;padding:14px 16px}
  .tstats{margin-inline-start:0;width:100%}
  .combo-mods{grid-template-columns:repeat(2,1fr)}
  .top{gap:8px}.brand-sub{display:none}
  .top .spacer{display:none}
  #btnConnect,#btnWrite{flex:1;justify-content:center}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
