:root{
  --font-sans:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font-mono:ui-monospace,SFMono-Regular,'SF Mono',Menlo,Consolas,'Liberation Mono',monospace;

  --stone-50:#FAF6EE; --stone-100:#F3ECDF; --stone-200:#E7DBC6; --stone-300:#D5C4A6;
  --stone-400:#B7A283; --stone-500:#8E7A5E; --stone-600:#6A5A43; --stone-700:#4B4031;
  --stone-800:#2E2820; --stone-900:#1A160F;
  --clay-400:#C56347; --clay-500:#A94B2E; --clay-600:#8C3A22;
  --moss-300:#9CAA6A; --moss-500:#5F6E33;
  --compute-200:#7FCFC4; --compute-400:#149589; --compute-500:#0B7268; --compute-glow:#36E0C8;
  --amber-400:#D99A2B; --amber-500:#B97E1C;

  --bg:var(--stone-50); --panel:#ffffff; --ink:var(--stone-900); --muted:var(--stone-600); --line:var(--stone-300);
  --branch:var(--stone-700); --accent:var(--compute-500); --dup:var(--clay-500); --spec:var(--stone-700);
  --loss:var(--stone-400); --sel:var(--compute-500); --hl:var(--amber-400);
  --shadow-sm:0 1px 3px rgba(46,40,32,.08),0 1px 2px rgba(46,40,32,.05);
  --shadow-md:0 8px 22px rgba(46,40,32,.16);
}
:root[data-theme="dark"]{
  --bg:var(--stone-900); --panel:var(--stone-800); --ink:var(--stone-50); --muted:var(--stone-400); --line:var(--stone-700);
  --branch:var(--stone-300); --accent:var(--compute-glow); --dup:var(--clay-400); --spec:var(--stone-300);
  --loss:var(--stone-500); --sel:var(--compute-glow); --hl:var(--amber-400);
  --shadow-sm:0 1px 3px rgba(0,0,0,.35); --shadow-md:0 10px 26px rgba(0,0,0,.42);
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font:13px/1.45 var(--font-sans);
     color:var(--ink);background:var(--bg);display:flex;flex-direction:column;-webkit-font-smoothing:antialiased}
header{display:flex;align-items:center;gap:14px;padding:9px 14px;border-bottom:1px solid var(--line);
  background:var(--panel);border-top:3px solid var(--clay-500)}
header .brand{font-weight:700;text-transform:uppercase;letter-spacing:.03em;font-size:13px;
  color:var(--clay-500);white-space:nowrap}
:root[data-theme="dark"] header .brand{color:var(--clay-400)}
header .title{font-weight:600;font-size:12.5px;font-family:var(--font-mono);color:var(--ink);
  max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
header .title:not(:empty){padding-left:12px;border-left:1px solid var(--line)}
header .meta{color:var(--muted);font-size:12px;font-family:var(--font-mono)}
header .meta b{color:var(--ink);font-weight:600}
.spacer{flex:1}
#nav{display:none;align-items:center;gap:5px}
#nav button{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:5px;
            width:26px;height:24px;cursor:pointer;font-size:11px;line-height:1}
#nav button:hover{border-color:var(--accent);color:var(--accent)}
#nav select{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:5px;
            padding:3px 6px;font:inherit;font-family:var(--font-mono);font-size:12px;max-width:220px}
#nav input[type=search]{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:5px;
            padding:3px 7px;font:inherit;width:130px}
#nav input[type=search].hit{border-color:var(--accent)}
#nav input[type=search].miss{border-color:var(--dup)}
main{flex:1;display:flex;min-height:0}
#foot{flex:none;display:flex;align-items:center;gap:10px;padding:6px 14px;border-top:1px solid var(--line);
  background:var(--panel);font-size:12px;color:var(--muted)}
#foot strong{color:var(--ink);font-weight:600}
#foot .sep{margin:0 7px;opacity:.5}
#foot a{color:var(--accent);text-decoration:none}
#foot a:hover{text-decoration:underline}
#foot .foot-r{margin-left:auto;display:flex;align-items:center;gap:12px}
#foot .like{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:6px;
  padding:3px 9px;background:var(--bg);color:var(--ink)}
#foot .like:hover{border-color:var(--accent);text-decoration:none}
#foot .like .like-ico{color:var(--amber-400)}
#foot .like .like-count{font-family:var(--font-mono);color:var(--muted)}
#side{width:236px;flex:none;border-right:1px solid var(--line);background:var(--panel);
      overflow:auto;padding:12px}
#sideResize{flex:none;width:6px;margin-left:-1px;cursor:col-resize;background:transparent;
  position:relative;z-index:3;touch-action:none}
#sideResize::before{content:"";position:absolute;inset:0;left:2px;width:2px;background:transparent;transition:background 120ms}
#sideResize:hover::before,#sideResize.drag::before{background:var(--accent)}
#side h4{margin:16px 0 7px;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);
  font-family:var(--font-mono);font-weight:500}
#side h4:first-child{margin-top:0}
.sect{border-top:1px solid var(--line);margin-top:14px}
.sect>summary{list-style:none;cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px;
  margin:12px 0 7px;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);
  font-family:var(--font-mono);font-weight:500}
.sect>summary::-webkit-details-marker{display:none}
.sect>summary::before{content:"▸";font-size:9px;color:var(--muted);transition:transform 120ms}
.sect[open]>summary::before{transform:rotate(90deg)}
.sect>summary:hover{color:var(--ink)}
.sect>summary:hover::before{color:var(--ink)}
.sect>summary:focus-visible{outline:none;color:var(--accent)}
.sect>*:last-child{margin-bottom:4px}
.row{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12.5px}
.row label{flex:1;user-select:none}
.seg{display:flex;border:1px solid var(--line);border-radius:6px;overflow:hidden}
.seg button{flex:1;border:0;background:transparent;color:var(--ink);padding:5px 6px;cursor:pointer;font:inherit;font-size:12px}
.seg button.on{background:var(--accent);color:#fff}
:root[data-theme="dark"] .seg button.on{color:var(--stone-900)}
input[type=range]{width:100%;accent-color:var(--accent)}
input[type=search]{width:100%;padding:5px 7px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink)}
#side textarea{width:100%;padding:6px 7px;border:1px solid var(--line);border-radius:6px;background:var(--bg);
  color:var(--ink);font:inherit;font-family:var(--font-mono);font-size:11.5px;resize:vertical;min-height:56px;
  line-height:1.5}
#side textarea.drop{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent)}
.renamecols{display:flex;gap:6px}
.renamecols textarea{flex:1;min-width:0}
input[type=search]:focus-visible,select:focus-visible,button:focus-visible{outline:none;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--compute-400) 35%, transparent);border-color:var(--compute-400)}
button.act{width:100%;padding:6px 9px;border:1px solid var(--line);border-radius:6px;background:var(--bg);
  color:var(--ink);cursor:pointer;margin:4px 0;font:inherit;font-size:12.5px;transition:border-color 140ms,transform 80ms}
button.act:hover{border-color:var(--accent)}
button.act:active{transform:translateY(1px)}
button.act:disabled{opacity:.45;cursor:default;border-color:var(--line)}
button.act:disabled:hover{border-color:var(--line)}
button.act.warn{color:var(--dup);border-color:var(--dup)}
button.act.warn:hover{background:var(--dup);color:#fff}
#wrap{flex:1;position:relative;overflow:hidden}
svg{width:100%;height:100%;display:block;cursor:grab;background:var(--bg)}
svg.grab{cursor:grabbing}
svg.reroot{cursor:crosshair}
.branch{stroke:var(--branch);stroke-width:var(--bw,1.5);fill:none}
.branch.hit{stroke:transparent;stroke-width:9;cursor:pointer}
.branch.sel{stroke:var(--sel);stroke-width:2.5}
.lossbranch{stroke:var(--loss);stroke-width:1.4;stroke-dasharray:3 3;fill:none}
.leaflabel{fill:var(--ink);cursor:default;font-family:var(--font-mono)}
.leaflabel.dim{fill:var(--muted)}
.leaflabel.hl{fill:var(--clay-600)}
:root[data-theme="dark"] .leaflabel.hl{fill:var(--amber-400)}
.intlabel{fill:var(--muted);font-size:10px;font-family:var(--font-mono)}
.support{fill:var(--muted);font-size:10px;font-family:var(--font-mono)}
.nodeglyph{cursor:pointer}
.hlbox{fill:var(--hl);opacity:.35}
.collapsed{fill:var(--branch);opacity:.85;cursor:pointer}
.tip{position:absolute;pointer-events:none;background:var(--panel);border:1px solid var(--line);
     border-radius:8px;padding:7px 9px;font-size:12px;box-shadow:var(--shadow-md);max-width:280px;display:none;z-index:5}
.tip b{color:var(--ink)} .tip .ev{font-weight:700;font-family:var(--font-mono)}
.legend{position:absolute;left:12px;bottom:12px;background:var(--panel);border:1px solid var(--line);
        border-radius:8px;padding:9px 11px;font-size:12px;box-shadow:var(--shadow-sm)}
.legend div{display:flex;align-items:center;gap:8px;margin:4px 0}
.sw{width:13px;height:13px;flex:none;display:inline-block}
.hint{color:var(--muted);font-size:11px;margin-top:7px;line-height:1.45}
.palette{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 2px}
.palette .sw{width:20px;height:20px;border-radius:5px;cursor:pointer;border:2px solid transparent;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.12)}
.palette .sw.on{border-color:var(--ink)}
.palette .sw.clear{display:flex;align-items:center;justify-content:center;background:var(--bg);
  color:var(--muted);font-size:13px;box-shadow:inset 0 0 0 1px var(--line)}
svg.coloring{cursor:crosshair}
svg.collapsing{cursor:cell}
kbd{border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;padding:0 4px;font-size:11px;
  background:var(--bg);font-family:var(--font-mono)}

/* ---- standalone-app additions (upload shell) ---- */
#uploadBtn{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:6px;
  padding:5px 11px;cursor:pointer;font:inherit;font-size:12.5px}
#uploadBtn:hover{border-color:var(--accent);color:var(--accent)}
#drop{position:absolute;inset:0;display:none;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--accent) 12%,var(--bg));border:3px dashed var(--accent);
  z-index:10;font-size:15px;color:var(--accent);font-weight:600;pointer-events:none}
#drop.on{display:flex}
#empty{position:absolute;inset:0;overflow-y:auto;color:var(--muted);text-align:center;background:var(--bg)}
#empty .hero{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:14px;padding:24px;box-sizing:border-box}
#empty h1{margin:0;color:var(--ink);font-size:24px;letter-spacing:.01em}
#empty .lead{max-width:640px;line-height:1.5}
#empty .exts{font-family:var(--font-mono);font-size:12px}
#empty button{border:1px solid var(--accent);color:var(--accent);background:transparent;border-radius:7px;
  padding:8px 16px;cursor:pointer;font:inherit;font-size:13px}
#empty button:hover{background:var(--accent);color:#fff}
#empty .scroll-hint{font-size:12px;opacity:.55;margin-top:6px}
#empty .about{max-width:760px;margin:0 auto;padding:4px 30px 64px;text-align:left;line-height:1.62;
  border-top:1px solid var(--line)}
#empty .about h2{color:var(--ink);font-size:19px;margin:30px 0 8px}
#empty .about h3{color:var(--ink);font-size:14.5px;margin:20px 0 4px}
#empty .about p{margin:0 0 10px;font-size:13.5px}
#empty .about a{color:var(--accent);text-decoration:none}
#empty .about a:hover{text-decoration:underline}
#empty .about-foot{margin-top:26px;font-size:12.5px;opacity:.85}
.err{position:absolute;left:50%;top:16px;transform:translateX(-50%);background:var(--dup);color:#fff;
  padding:8px 14px;border-radius:7px;font-size:12.5px;box-shadow:var(--shadow-md);display:none;max-width:80%;z-index:20}
