: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);
  --accent:var(--compute-500); --sel:var(--compute-500); --hl:var(--amber-400); --warn:var(--clay-500);
  --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);
  --accent:var(--compute-glow); --sel:var(--compute-glow); --hl:var(--amber-400); --warn:var(--clay-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:280px;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}
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:260px;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>*: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],input[type=text],input[type=number],select{width:100%;padding:5px 7px;border:1px solid var(--line);
  border-radius:6px;background:var(--bg);color:var(--ink);font:inherit}
input[type=search]:focus-visible,input[type=number]: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.warn{color:var(--warn);border-color:var(--warn)}
button.act.warn:hover{background:var(--warn);color:#fff}
.hint{color:var(--muted);font-size:11px;margin-top:7px;line-height:1.45}
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)}

#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)}
button.act#themeBtn{width:auto}
#wrap{flex:1;position:relative;overflow:auto;background:var(--bg)}
#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}
#columnMapping{position:absolute;inset:0;overflow:auto;background:var(--bg);z-index:12;padding:24px}
#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(--warn);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}

/* ---- explorer-specific ---- */
#explorer{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;overflow:auto;padding:14px;gap:14px}
.mode-switch{flex:none;max-width:320px}
.mode-panel{display:flex;flex-direction:column;gap:14px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:12px 14px;box-shadow:var(--shadow-sm)}
.card h3{margin:0 0 8px;font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);
  font-family:var(--font-mono);font-weight:500}
.card h4{margin:0 0 8px;font-size:12.5px;color:var(--ink);font-weight:600}
.query-picker{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.query-picker select{max-width:320px}
.query-picker .meta{color:var(--muted);font-family:var(--font-mono);font-size:12px}
table.hit-table{width:100%;border-collapse:collapse;font-size:12.5px}
table.hit-table th,table.hit-table td{padding:5px 8px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
table.hit-table th{cursor:pointer;user-select:none;color:var(--muted);font-family:var(--font-mono);font-size:11px;
  text-transform:uppercase;letter-spacing:.04em;position:sticky;top:0;background:var(--panel)}
table.hit-table th:hover{color:var(--ink)}
table.hit-table th.sorted::after{content:" ▾"}
table.hit-table th.sorted.asc::after{content:" ▴"}
table.hit-table tbody tr:hover{background:color-mix(in srgb,var(--accent) 8%,transparent)}
table.hit-table tbody tr.flash{animation:hit-row-flash 1.5s ease-out}
@keyframes hit-row-flash{
  0%{background:color-mix(in srgb,var(--accent) 35%,transparent)}
  100%{background:transparent}
}
table.hit-table td.num{font-family:var(--font-mono);text-align:right}
table.hit-table td[title]{cursor:help;border-bottom:1px dotted var(--muted)}
table.hit-table td a{color:var(--accent);text-decoration:none}
table.hit-table td a:hover{text-decoration:underline}
.table-wrap{overflow:auto;max-height:420px}
.best-hit-card dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:12.5px}
.best-hit-card dt{color:var(--muted)}
.best-hit-card dd{margin:0;font-family:var(--font-mono)}
.best-hit-card .tied-best{padding:8px 0;border-top:1px solid var(--line)}
.best-hit-card .tied-best:first-child{padding-top:0;border-top:none}
.best-hit-card .tied-best>b{display:block;margin-bottom:4px;font-size:12.5px}
.hit-span-wrap{max-height:320px;overflow-y:auto;overflow-x:hidden}
.hit-span-svg{width:100%;display:block}
.hit-span-svg .qbar{fill:var(--line)}
.hit-span-svg .hsp{fill:var(--accent);opacity:.75}
.hit-span-svg .hsp:hover{opacity:1}
.hit-span-svg .hsp.clickable{cursor:pointer}
.hit-span-svg g.clickable{cursor:pointer}
.hit-span-svg .axis{stroke:var(--muted);stroke-width:1}
.hit-span-svg text{fill:var(--muted);font-size:10px;font-family:var(--font-mono)}
.hit-span-svg .hsp-label{fill:#fff;font-size:9px;pointer-events:none}
:root[data-theme="dark"] .hit-span-svg .hsp-label{fill:var(--stone-900)}
.empty-note{color:var(--muted);font-style:italic;padding:12px}

.chart-controls{display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.chart-controls select{width:auto}
.chart-svg{width:100%;height:auto;display:block}
.chart-svg .axis{stroke:var(--muted);stroke-width:1}
.chart-svg text{fill:var(--muted);font-size:10px;font-family:var(--font-mono)}
.hist-bar{fill:var(--accent);opacity:.8}
.scatter-pt{fill:var(--accent);opacity:.7}
.chart-legend{margin-top:6px;font-size:11px;color:var(--muted)}
.chart-legend .sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:middle}
.taxonomy-svg .tax-bar,.category-bars .tax-bar{fill:var(--accent)}
.taxonomy-svg .tax-label,.category-bars .tax-label{font-size:10px;fill:var(--ink);font-family:var(--font-mono)}
.taxonomy-svg .tax-count,.category-bars .tax-count{font-size:10px;fill:var(--muted);font-family:var(--font-mono)}
.flag-badge{padding:1px 7px;border-radius:10px;font-size:10.5px;font-family:var(--font-mono);white-space:nowrap}
.flag-badge.flag-hit{background:color-mix(in srgb, var(--moss-500) 25%, transparent);color:var(--moss-500)}
.flag-badge.flag-weak{background:color-mix(in srgb, var(--amber-500) 25%, transparent);color:var(--amber-500)}
.flag-badge.flag-none{background:color-mix(in srgb, var(--warn) 25%, transparent);color:var(--warn)}
#perQueryMount table.hit-table tbody tr{cursor:pointer}
table.hit-table tbody tr.row-clickable{cursor:pointer}

.column-mapping{max-width:960px;margin:0 auto}
.column-mapping h2{margin:0 0 6px;font-size:19px;color:var(--ink)}
.column-mapping .hint{margin-bottom:14px}
.column-mapping-table th{position:sticky;top:0;background:var(--panel);padding:4px}
.column-mapping-table th select{width:100%;font-size:11.5px;padding:4px 5px}
.column-mapping-table td{font-family:var(--font-mono);font-size:12px;max-width:160px;overflow:hidden;text-overflow:ellipsis}
.column-mapping-actions{display:flex;gap:10px;margin-top:16px}
.column-mapping-actions button{width:auto;padding:7px 16px}

/* ---- responsive (narrow viewports: stack sidebar above main content) ---- */
@media (max-width: 760px){
  main{flex-direction:column;overflow:auto}
  #side{width:100% !important;max-height:60vh;border-right:none;border-bottom:1px solid var(--line)}
  #sideResize{display:none}
  #wrap{overflow:visible;min-height:60vh}
  header{flex-wrap:wrap;row-gap:6px}
  header .title{max-width:100%}
}
