/* =============================================================
   LUDIUM — companion pages (the static page under each video)
   and the Latin review pages.

   Every page links this file; a page's own <style> holds only
   what is specific to that page (extra viz rules) and comes after
   it, so it can override anything here. Colours are the tokens
   below — the same palette as the app (app/globals.css): `:root`
   is light, `html.night` is dark. The page's head script sets
   `night` from localStorage['ludium:night'] exactly as the app does.

   Text is Inter, titles Bricolage Grotesque (both served from
   ./fonts/). Text INSIDE a plot (<svg> labels, ticks) keeps the
   faces the visualisations were measured with.
   ============================================================= */
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/inter-greek-var.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/inter-latin-ext-var.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url(fonts/inter-latin-var.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Bricolage Grotesque";font-style:normal;font-weight:200 800;font-display:swap;src:url(fonts/bricolage-grotesque-latin-var.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  color-scheme:light;
  --paper:   oklch(1 0 0);
  --paper-2: oklch(0.975 0.003 260);
  --paper-3: oklch(0.94 0.006 260);
  --ink:     oklch(0.19 0.012 260);
  --ink-2:   oklch(0.34 0.014 260);
  --ink-3:   oklch(0.47 0.014 260);
  --rule:    oklch(0.905 0.006 260);
  --rule-2:  oklch(0.83 0.008 260);
  --accent:  oklch(0.50 0.22 262);
  --accent-fill: oklch(0.52 0.22 262);
  --on-accent: oklch(1 0 0);
  --ok:      oklch(0.50 0.13 155);
  --err:     oklch(0.54 0.20 25);
  --viz-line: oklch(0.52 0.21 262);
  --viz-run:  oklch(0.53 0.14 155);
  --viz-rise: oklch(0.56 0.20 25);
  --accent-soft: color-mix(in oklab, var(--accent) 8%, transparent);
  --accent-line: color-mix(in oklab, var(--accent) 32%, transparent);
  --ok-soft:  color-mix(in oklab, var(--ok) 10%, transparent);
  --err-soft: color-mix(in oklab, var(--err) 8%, transparent);
  --sans: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --display: "Bricolage Grotesque", var(--sans);
  --mono: ui-monospace, "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
}
html.night{
  color-scheme:dark;
  --paper:   oklch(0.205 0.010 260);
  --paper-2: oklch(0.245 0.012 260);
  --paper-3: oklch(0.30 0.014 260);
  --ink:     oklch(0.965 0.003 260);
  --ink-2:   oklch(0.85 0.008 260);
  --ink-3:   oklch(0.73 0.012 260);
  --rule:    oklch(0.31 0.012 260);
  --rule-2:  oklch(0.40 0.014 260);
  --accent:  oklch(0.78 0.13 255);
  --accent-fill: oklch(0.76 0.14 255);
  --on-accent: oklch(0.16 0.03 260);
  --ok:      oklch(0.80 0.15 155);
  --err:     oklch(0.74 0.15 22);
  --viz-line: oklch(0.76 0.14 255);
  --viz-run:  oklch(0.80 0.15 155);
  --viz-rise: oklch(0.74 0.15 22);
  --accent-soft: color-mix(in oklab, var(--accent) 13%, transparent);
  --accent-line: color-mix(in oklab, var(--accent) 42%, transparent);
  --ok-soft:  color-mix(in oklab, var(--ok) 12%, transparent);
  --err-soft: color-mix(in oklab, var(--err) 11%, transparent);
}

*{box-sizing:border-box}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-feature-settings:"cv11","ss03","calt";
  line-height:1.65;font-size:16px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
::selection{background:color-mix(in oklab, var(--accent) 28%, transparent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.wrap{max-width:840px;margin:0 auto;padding:34px 28px 72px}
.kicker{
  font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 12px;
}
.kicker .tick{display:none}
h1{font-family:var(--display);font-weight:650;font-size:30px;letter-spacing:-.03em;line-height:1.12;margin:0 0 10px;text-wrap:balance}
h1 em{font-style:normal;font-weight:inherit;color:var(--accent)}
.sub{color:var(--ink-3);margin:0 0 34px;font-size:16px;line-height:1.55}
h2{
  font-family:var(--display);font-weight:650;font-size:22px;letter-spacing:-.02em;line-height:1.2;margin:44px 0 8px;
  padding-top:24px;border-top:1px solid var(--rule);text-wrap:balance;
}
h2 .num{
  font-family:var(--sans);font-size:12.5px;font-weight:700;letter-spacing:0;font-variant-numeric:tabular-nums;
  color:var(--accent);background:var(--accent-soft);border-radius:6px;padding:3px 7px;margin-right:10px;vertical-align:3px;
}
h3{font-weight:650;font-size:17px;letter-spacing:-.01em;margin:26px 0 8px}
.lead{color:var(--ink-2);font-size:15.5px;margin:0 0 14px}
p{margin:10px 0}
ul,ol{margin:8px 0;padding-left:22px}
li{margin:4px 0}
strong,b{font-weight:650}
a{color:var(--accent);text-underline-offset:3px}
.katex{font-size:1.06em}
.katex-display{margin:.15em 0;padding:.35em 0;overflow-x:auto;overflow-y:hidden}
code{font-family:var(--mono);font-size:13.5px;background:var(--paper-2);border:1px solid var(--rule);border-radius:5px;padding:1px 5px;overflow-wrap:break-word}
pre{font-family:var(--mono);background:var(--paper-2);border:1px solid var(--rule);border-radius:10px;padding:12px 14px;overflow-x:auto;font-size:13.5px}
pre code{background:transparent;border:0;padding:0}

/* Tables (markdown tables, e.g. Key Formulas) */
table{width:100%;border-collapse:collapse;margin:14px 0;font-size:15px}
th{
  font-weight:600;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);
  text-align:left;padding:8px 10px;border-bottom:1px solid var(--rule-2);
}
td{padding:10px 10px;border-bottom:1px solid var(--rule)}
tr:last-child>td{border-bottom:0}
blockquote,.note{
  margin:16px 0;padding:12px 16px;border-radius:10px;border:1px solid var(--accent-line);
  background:var(--accent-soft);color:var(--ink);font-size:15.5px;
}
blockquote p{margin:0}
.note p{margin:6px 0}

/* Visualisation panels */
.viz{margin:18px 0;padding:18px;background:var(--paper-2);border:1px solid var(--rule);border-radius:14px}
.viz-slot{border:1px dashed var(--rule-2);background:transparent}
.viz-slot-note{margin:4px 0;font-size:13px;color:var(--ink-3)}
.controls{display:flex;flex-wrap:wrap;gap:12px 26px;margin-bottom:12px}
.ctl{display:flex;align-items:center;gap:8px;flex-wrap:wrap;max-width:100%;font-size:13px;font-weight:500;color:var(--ink-2)}
.ctl input[type=range]{width:130px;accent-color:var(--accent-fill);margin:0}
.ctl input[type=checkbox],.ctl input[type=radio]{accent-color:var(--accent-fill)}
.ctl .val{min-width:30px;text-align:right;color:var(--ink);font-family:var(--mono);font-size:12.5px;font-weight:400}
.ctl select{
  font-family:inherit;font-size:13px;background:var(--paper);color:var(--ink);max-width:100%;
  border:1px solid var(--rule-2);border-radius:8px;padding:5px 8px;
}
.viz button.vbtn{
  font-family:var(--sans);font-size:13px;font-weight:600;color:var(--ink);background:var(--paper);
  border:1px solid var(--rule-2);border-radius:8px;padding:6px 12px;cursor:pointer;
  transition:background .12s,border-color .12s,transform .12s;
}
.viz button.vbtn:hover{border-color:var(--ink-3);background:var(--paper-3)}
.viz button.vbtn:active{transform:scale(.97)}
.readout{font-family:var(--mono);font-size:12.5px;margin:6px 0 12px;color:var(--ink)}
.readout .dir{color:var(--ink-3)}
.readout.ok{color:var(--ok)}
svg.plot{width:100%;height:auto;display:block;background:var(--paper);border:1px solid var(--rule);border-radius:10px}
.grid line{stroke:var(--rule);stroke-width:1}
.axis{stroke:var(--ink-3);stroke-width:1.2}
.ticks text{fill:var(--ink-3);font:10.5px ui-monospace,Menlo,Consolas,monospace}
.viz-line{stroke:var(--viz-line);stroke-width:2.5;fill:none}
.viz-run{stroke:var(--viz-run);stroke-width:3}
.viz-rise{stroke:var(--viz-rise);stroke-width:3}
.viz-run-h{fill:var(--viz-run)}
.viz-rise-h{fill:var(--viz-rise)}
.viz-pt{fill:var(--viz-line)}
.viz-target{fill:var(--viz-rise)}
.viz-anchor{fill:var(--viz-run)}
.dashed{stroke-dasharray:6 5;stroke-width:2;opacity:.8}
.viz-lbl{fill:var(--ink-2);font:600 12.5px Georgia,serif}
.viz-lbl-run{fill:var(--viz-run);font:600 12px Georgia,serif}
.viz-lbl-rise{fill:var(--viz-rise);font:600 12px Georgia,serif}
.viz-lbl-ok{fill:var(--ok);font:600 12px Georgia,serif}
.viz-grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;align-items:start}
.viz-grid2>*{min-width:0}
.viz svg[viewBox]:not(.katex *){max-width:100%;height:auto}

/* Accordions (hints / solutions) */
details.acc{margin:12px 0;border:1px solid var(--rule);border-radius:10px;background:var(--paper-2);overflow:hidden}
details.acc summary{
  cursor:pointer;padding:11px 14px;user-select:none;list-style:none;
  font-size:13.5px;font-weight:600;color:var(--ink-2);transition:background .12s,color .12s;
}
details.acc summary:hover{background:var(--paper-3);color:var(--ink)}
details.acc summary::-webkit-details-marker{display:none}
details.acc summary::before{content:'+';display:inline-block;width:14px;margin-right:6px;color:var(--accent);font-weight:700}
details.acc[open] summary::before{content:'−'}
details.acc[open] summary{border-bottom:1px solid var(--rule)}
details.acc .acc-body{padding:6px 16px 14px;font-size:15.5px;color:var(--ink)}
details.acc .acc-body p{margin:8px 0}

/* Quiz */
.q{margin:0 0 20px;padding:20px 22px;background:var(--paper-2);border:1px solid var(--rule);border-radius:14px}
.q .qn{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);margin:0 0 8px}
.q .stem{margin:0 0 12px;font-size:16.5px;color:var(--ink)}
.q .stem em{font-style:italic}
.grp-label{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);margin:14px 0 6px}
.opts{display:flex;flex-direction:column;gap:8px}
.opt{
  display:flex;gap:12px;align-items:baseline;width:100%;text-align:left;
  font:inherit;font-size:15.5px;color:var(--ink);cursor:pointer;
  padding:10px 14px;background:var(--paper);border:1px solid var(--rule-2);border-radius:10px;
  transition:border-color .12s ease,background .12s ease,transform .12s ease;
}
.opt:hover:not([disabled]){border-color:var(--accent);background:var(--accent-soft)}
.opt:active:not([disabled]){transform:scale(.995)}
.opt .key{font-size:12.5px;font-weight:700;text-transform:uppercase;color:var(--ink-3);min-width:14px}
.opt.correct{border-color:var(--ok);background:var(--ok-soft);color:var(--ink)}
.opt.correct .key{color:var(--ok)}
.opt.wrong{border-color:var(--err);background:var(--err-soft);color:var(--ink)}
.opt.wrong .key{color:var(--err)}
.opt[disabled]{cursor:default}
.opt[disabled]:not(.correct):not(.wrong){opacity:.7}
.fb{
  display:none;margin:14px 0 0;padding:12px 14px;font-size:15px;color:var(--ink);
  border:1px solid color-mix(in oklab, var(--err) 30%, transparent);border-radius:10px;background:var(--err-soft);
}
.fb.show{display:block}
.fb b{color:var(--err);font-weight:650}
.fb.good{border-color:color-mix(in oklab, var(--ok) 35%, transparent);background:var(--ok-soft)}
.fb.good b{color:var(--ok)}
/* Latin review pages: the explanation after a right answer, the nudge after a wrong one */
.why{
  display:none;margin:14px 0 0;padding:12px 14px;font-size:15px;color:var(--ink);
  border:1px solid color-mix(in oklab, var(--ok) 35%, transparent);border-radius:10px;background:var(--ok-soft);
}
.why.show{display:block}
.why b{color:var(--ok);font-weight:650}
.retry{display:none;margin:10px 0 0;font-size:14px;font-weight:500;color:var(--err)}
.retry.show{display:block}
.score{
  margin-top:32px;padding-top:18px;border-top:1px solid var(--rule);
  font-size:13px;font-weight:600;color:var(--ink-3);font-variant-numeric:tabular-nums;
}
.score b{color:var(--ok);font-weight:700}

/* Latin review pages: vocabulary list and grammar rules */
.vocab{display:grid;grid-template-columns:1fr 1fr;gap:0 36px;margin-top:14px}
.vocab .row{display:flex;justify-content:space-between;gap:14px;align-items:baseline;padding:8px 2px;border-bottom:1px solid var(--rule)}
.vocab .la{font-weight:600;font-size:16px;white-space:nowrap}
.vocab .en{color:var(--ink-2);font-size:14.5px;text-align:right}
.rule-item{margin:0 0 12px;padding:14px 18px;border:1px solid var(--rule);border-radius:12px;background:var(--paper-2)}
.rule-item b{display:block;font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--accent);margin-bottom:6px}
.rule-item p{margin:0;color:var(--ink);font-size:15.5px}
.rule-item p + p{margin-top:8px}
.rule-item .ex{margin-top:6px;color:var(--ink-2);font-size:15px;font-style:italic}
.ctable,.paradigm{width:100%;border-collapse:collapse;margin:16px 0 4px;font-size:15.5px}
.ctable th,.ctable td,.paradigm th,.paradigm td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--rule)}
.ctable td .vw{color:var(--accent);font-style:normal;font-weight:650}
.ctable td em,.paradigm td.la{font-style:italic}
.paradigm td.case{font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--accent)}
.paradigm caption{text-align:left;color:var(--ink-3);font-size:14px;margin-bottom:8px}
.tcap{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);margin:26px 0 0}

/* Japanese pages */
html[lang="ja"] body{
  font-family:"Inter","Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,sans-serif;line-height:1.8;
}
html[lang="ja"] h1,html[lang="ja"] h2{font-family:"Bricolage Grotesque","Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,sans-serif;letter-spacing:-.01em}
html[lang="ja"] .sub,html[lang="ja"] .lead,html[lang="ja"] em,html[lang="ja"] i{font-style:normal}
html[lang="ja"] em,html[lang="ja"] i{font-weight:650}

/* Phone widths: nothing may push the page sideways */
.tscroll{overflow-x:auto;margin:14px 0;position:relative}
.tscroll>table{margin:0}
@media (max-width:720px){.viz-grid2{grid-template-columns:minmax(0,1fr)}}
@media (max-width:600px){
  .wrap{padding:24px 16px 56px}
  .viz{padding:14px}
  h1{font-size:26px}
  .q{padding:16px}
}
@media (max-width:560px){.vocab{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms !important}}
