/* aporia.gr — one stylesheet for the whole site
 *
 * Three ideas hold it together:
 *   SQUIRCLES  every interactive surface is a superellipse, not a rounded rectangle.
 *              corner-shape does it properly where it exists; a generous radius is the
 *              fallback, so the shape language survives in older browsers.
 *   GLASS      panels are translucent over a soft page wash, blurred and saturated.
 *              Without the wash there is nothing to blur, so the wash is not decoration.
 *   LEVEL      --accent is set by data-level on <html>, one colour per class, warm at
 *              Δημοτικό and deep at Λύκειο. Every value below clears 4.5:1 for white
 *              text on it and for itself as text on the page. Measured, not picked.
 */

:root{
  --paper:#eceff3; --surface:#fff; --surface-2:#f4f7f9; --sunk:#dde5ec;
  --ink:#0f1c29; --ink-2:#4a5c6e; --ink-3:#738799;
  --rule:#ced7e0; --rule-soft:#e3e9ef;
  --blue:#014488; --on-blue:#fff; --blue-soft:#e7eef6;
  --green:#2c6b4f; --green-soft:#e6f2ec;
  --red:#bd3228; --red-soft:#fbeceb;
  --shadow:0 1px 2px rgba(15,28,41,.05),0 12px 34px -18px rgba(15,28,41,.24);
  --f-display:"Literata",Georgia,serif;
  --f-body:"Commissioner","Helvetica Neue",Arial,sans-serif;
  --f-mono:"JetBrains Mono",ui-monospace,Menlo,monospace;

  /* squircle radii */
  --r-xs:8px; --r-sm:12px; --r-md:16px; --r-lg:22px; --r-xl:30px; --r-pill:999px;

  /* glass */
  --glass:color-mix(in srgb,var(--surface) 62%,transparent);
  --glass-2:color-mix(in srgb,var(--surface-2) 64%,transparent);
  --glass-sunk:color-mix(in srgb,var(--sunk) 46%,transparent);
  --hair:color-mix(in srgb,var(--ink) 10%,transparent);
  --hair-2:color-mix(in srgb,var(--ink) 16%,transparent);
  --blur:saturate(185%) blur(20px);

  /* the bluish hover */
  --tint:color-mix(in srgb,var(--blue) 15%,transparent);
  --tint-2:color-mix(in srgb,var(--blue) 26%,transparent);
  --ring:color-mix(in srgb,var(--blue) 42%,transparent);
  --glow:0 10px 28px -12px color-mix(in srgb,var(--blue) 60%,transparent);

  --accent:var(--blue);
  --ease:cubic-bezier(.32,.72,0,1);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --paper:#0a121a; --surface:#111c26; --surface-2:#16222e; --sunk:#0d1720;
  --ink:#dde6ef; --ink-2:#9db0c3; --ink-3:#6d8299;
  --rule:#25374a; --rule-soft:#1c2b38;
  --blue:#5a9ee0; --on-blue:#08131f; --blue-soft:#13202d;
  --green:#5dbd90; --green-soft:#12211b;
  --red:#ff7063; --red-soft:#2a1a1a;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 14px 36px -20px rgba(0,0,0,.9);
  --glass:color-mix(in srgb,var(--surface) 58%,transparent);
  --glass-2:color-mix(in srgb,var(--surface-2) 62%,transparent);
  --glass-sunk:color-mix(in srgb,#000 24%,transparent);
  --hair:color-mix(in srgb,#fff 12%,transparent);
  --hair-2:color-mix(in srgb,#fff 20%,transparent);
}}
:root[data-theme="dark"]{
  --paper:#0a121a; --surface:#111c26; --surface-2:#16222e; --sunk:#0d1720;
  --ink:#dde6ef; --ink-2:#9db0c3; --ink-3:#6d8299;
  --rule:#25374a; --rule-soft:#1c2b38;
  --blue:#5a9ee0; --on-blue:#08131f; --blue-soft:#13202d;
  --green:#5dbd90; --green-soft:#12211b;
  --red:#ff7063; --red-soft:#2a1a1a;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 14px 36px -20px rgba(0,0,0,.9);
  --glass:color-mix(in srgb,var(--surface) 58%,transparent);
  --glass-2:color-mix(in srgb,var(--surface-2) 62%,transparent);
  --glass-sunk:color-mix(in srgb,#000 24%,transparent);
  --hair:color-mix(in srgb,#fff 12%,transparent);
  --hair-2:color-mix(in srgb,#fff 20%,transparent);
}

/* ---------- the age scale ----------
   One hue step per class, terracotta to violet. The attribute selector is deliberately
   unqualified so it works both on <html> (tints a whole page) and on a single card
   (a tier hub showing every class in its own colour). */
[data-level="K01"]{--accent:#a35826}   /* Α΄ Δημοτικού   */
[data-level="K02"]{--accent:#8f6321}   /* Β΄ Δημοτικού   */
[data-level="K03"]{--accent:#7e6b1e}   /* Γ΄ Δημοτικού   */
[data-level="K04"]{--accent:#62741b}   /* Δ΄ Δημοτικού   */
[data-level="K05"]{--accent:#1d7c30}   /* Ε΄ Δημοτικού   */
[data-level="K06"]{--accent:#1d7a5f}   /* ΣΤ΄ Δημοτικού  */
[data-level="K07"]{--accent:#1e787e}   /* Α΄ Γυμνασίου   */
[data-level="K08"]{--accent:#247499}   /* Β΄ Γυμνασίου   */
[data-level="K09"]{--accent:#2863ab}   /* Γ΄ Γυμνασίου   */
[data-level="K10"]{--accent:#2847ab}   /* Α΄ Λυκείου     */
[data-level="K11"]{--accent:#3828ab}   /* Β΄ Λυκείου     */
[data-level="K12"]{--accent:#6e28ab}   /* Γ΄ Λυκείου     */
@media (prefers-color-scheme:dark){
  [data-level="K01"]{--accent:#cd8251} [data-level="K02"]{--accent:#cd9b51}
  [data-level="K03"]{--accent:#cdb451} [data-level="K04"]{--accent:#b4cd51}
  [data-level="K05"]{--accent:#51cd6a} [data-level="K06"]{--accent:#51cdaa}
  [data-level="K07"]{--accent:#51c4cd} [data-level="K08"]{--accent:#51a5cd}
  [data-level="K09"]{--accent:#598ecf} [data-level="K10"]{--accent:#7188d6}
  [data-level="K11"]{--accent:#8b81da} [data-level="K12"]{--accent:#a975d7}
}
:root{--accent-soft:color-mix(in srgb,var(--accent) 13%,transparent);
      --accent-ring:color-mix(in srgb,var(--accent) 40%,transparent)}

/* ---------- squircles ----------
   corner-shape is the real superellipse. Where it is missing the radius alone still
   reads as the same family, so nothing looks broken. */
@supports (corner-shape:squircle){
  .pill,.gtab,button.act,.yn button,.card,.card-l,.btn,.unitcode,.numin,.practice,
  .source,.faq details,.sheet,.ulist,.gtabs,.inputfr input,.rung,.rung .dot,.mark svg,
  .qgrid .q .ans,.sheethead,.verdict,.answer-row .unit{corner-shape:squircle}
}

*{box-sizing:border-box}
html,body{margin:0}
body{
  color:var(--ink);font-family:var(--f-body);font-size:16px;line-height:1.62;
  -webkit-font-smoothing:antialiased;
  padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);
  /* The wash gives the glass something to blur, but it is deliberately CONFINED to a
     band at the top rather than spread over the page. An all-over gradient is texture
     competing with the text for attention; a band is a landmark that answers "which
     level am I in" and then gets out of the way. Below it the page is flat and quiet.
     The paper is off-white on purpose: pure white glares. */
  background:
    linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 16%,transparent) 0,
      color-mix(in srgb,var(--accent) 6%,transparent) 170px,
      transparent 330px),
    var(--paper);
  background-repeat:no-repeat;
  background-attachment:fixed;
  text-underline-offset:.18em;
}
img{max-width:100%}
p{margin:0 0 16px}
strong{font-weight:650}
a{color:var(--blue);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--blue) 28%,transparent)}
a:hover{border-bottom-color:var(--blue)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-xs)}
.wrap{max-width:880px;margin:0 auto;padding-inline:20px;padding-block:0 72px}
.prose{max-width:68ch}

/* ---------- site header ---------- */
.top{position:sticky;top:0;z-index:20;border-bottom:1px solid var(--hair);
  background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur)}
.top .in{max-width:880px;margin:0 auto;padding:10px 20px;display:flex;align-items:center;gap:11px}
.brand{display:flex;align-items:center;gap:10px;border:0;color:var(--ink)}
.mark{display:block;line-height:0}
.mark svg{width:26px;height:26px;display:block;border-radius:var(--r-xs)}
.brand b{font-family:var(--f-display);font-weight:800;font-size:19px;letter-spacing:-.02em}
.brand b i{color:var(--blue);font-style:normal}
.top .tag{margin-left:auto;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.09em;
  color:var(--ink-3);white-space:nowrap}
@media (max-width:520px){.top .tag{display:none}}

/* ---------- breadcrumb ---------- */
.crumb{font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-3);
  padding-block:18px 0;display:flex;flex-wrap:wrap;gap:6px}
.crumb a{border:0;color:var(--ink-3);transition:color .18s var(--ease)}
.crumb a:hover{color:var(--accent)}
.crumb span[aria-hidden]{opacity:.5}

/* ---------- headings ---------- */
h1{font-family:var(--f-display);font-weight:800;font-size:clamp(27px,5vw,42px);
  line-height:1.12;letter-spacing:-.02em;margin:14px 0 12px;text-wrap:balance}
h1 .qm{color:var(--blue)}
h2{font-family:var(--f-display);font-weight:700;font-size:clamp(20px,3vw,26px);
  line-height:1.2;letter-spacing:-.015em;margin:0 0 12px;text-wrap:balance}
h3{font-family:var(--f-body);font-weight:650;font-size:15.5px;margin:26px 0 8px}
.lede{font-family:var(--f-display);font-size:clamp(16px,2.2vw,18.5px);line-height:1.5;
  color:var(--ink-2);margin:0;max-width:52ch}
section{padding-block:34px 0}

.unitcode{display:inline-block;font-family:var(--f-mono);font-size:12px;font-weight:700;
  color:#fff;background:var(--accent);padding:4px 11px;border-radius:var(--r-xs);letter-spacing:.04em}
.meta{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 0}
.pill{font-family:var(--f-mono);font-size:11px;font-weight:600;letter-spacing:.06em;
  padding:5px 12px;border-radius:var(--r-sm);border:1px solid var(--hair);
  background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  color:var(--ink-2);transition:background .18s var(--ease),border-color .18s var(--ease),color .18s var(--ease)}
.pill:hover{background:var(--tint);border-color:var(--ring);color:var(--ink)}
.pill.lvl{color:var(--accent);border-color:var(--accent-ring);background:var(--accent-soft);font-weight:700}
.pill.lvl:hover{background:color-mix(in srgb,var(--accent) 20%,transparent)}

/* ---------- the source strip ---------- */
.source{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:center;justify-content:space-between;
  background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--hair);border-radius:var(--r-lg);padding:16px 19px;margin:24px 0 0;
  box-shadow:var(--shadow)}
.source p{margin:0;font-size:14px;color:var(--ink-2);max-width:46ch}
.source b{color:var(--ink);font-weight:650}
.source a.btn{border:0;background:var(--blue);color:var(--on-blue);font-weight:600;font-size:14px;
  padding:10px 18px;border-radius:var(--r-sm);white-space:nowrap;
  transition:box-shadow .22s var(--ease),transform .18s var(--ease),filter .18s var(--ease)}
.source a.btn:hover{box-shadow:var(--glow);transform:translateY(-1px);filter:saturate(1.15)}

/* ---------- cards / lists ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin:20px 0}
.card-l{background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--hair);border-radius:var(--r-lg);padding:17px 19px;display:block;color:var(--ink);
  transition:background .2s var(--ease),border-color .2s var(--ease),box-shadow .26s var(--ease),transform .2s var(--ease)}
.card-l:hover{background:var(--tint);border-color:var(--ring);box-shadow:var(--glow);transform:translateY(-2px)}
.card-l .k{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.09em;color:var(--accent);
  display:block;margin-bottom:6px;font-weight:700}
.card-l .t{font-weight:650;font-size:15.5px;display:block;line-height:1.3}
.card-l .s{font-size:13px;color:var(--ink-3);display:block;margin-top:5px}
.card-l.lv{border-left:3px solid var(--accent)}

.ulist{display:grid;gap:1px;margin:18px 0;border:1px solid var(--hair);border-radius:var(--r-lg);
  overflow:hidden;background:var(--hair);box-shadow:var(--shadow)}
.ulist a{display:grid;grid-template-columns:62px 1fr auto;gap:14px;align-items:baseline;
  background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  padding:14px 18px;border:0;color:var(--ink);transition:background .18s var(--ease),padding-left .18s var(--ease)}
.ulist a:hover{background:var(--tint);padding-left:22px}
.ulist a .c{font-family:var(--f-mono);font-size:12px;font-weight:700;color:var(--accent)}
.ulist a .t{font-size:15px;line-height:1.35}
.ulist a .go{font-family:var(--f-mono);font-size:10.5px;color:var(--ink-3);white-space:nowrap}
.ulist a.soon{opacity:.55;pointer-events:none}
.ulist a.soon .c{color:var(--ink-3)}
@media (max-width:520px){.ulist a{grid-template-columns:52px 1fr}.ulist a .go{display:none}}

/* ---------- the age ladder ---------- */
.ladder{display:grid;gap:8px;margin-top:20px}
.rung{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;
  padding:12px 16px;border-radius:var(--r-md);color:var(--ink);
  background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--hair);
  transition:background .2s var(--ease),border-color .2s var(--ease),transform .2s var(--ease)}
.rung:hover{background:var(--accent-soft);border-color:var(--accent-ring);transform:translateX(3px)}
.rung .dot{width:15px;height:15px;border-radius:5px;background:var(--accent);display:block}
.rung .n{font-weight:650;font-size:15px}
.rung .a{font-family:var(--f-mono);font-size:11px;color:var(--ink-3);letter-spacing:.05em}

/* ---------- fractions ---------- */
.fr{display:inline-flex;flex-direction:column;align-items:center;font-family:var(--f-mono);
  font-weight:600;line-height:1.12;vertical-align:middle}
.fr .n{display:block}
.fr .d{display:block;border-top:2px solid currentColor;padding-top:1px;margin-top:1px;min-width:1.5em}
.fr.lg{font-size:25px}.fr.md{font-size:19px}
.fr.ans{color:var(--green)}

/* ---------- practice ---------- */
.practice{background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--hair);border-radius:var(--r-xl);box-shadow:var(--shadow);
  overflow:hidden;margin-top:18px}
/* the tab row is a segmented control: one track, the selected pill lifted out of it */
.gtabs{display:flex;gap:4px;padding:6px;margin:12px 12px 0;border-radius:var(--r-lg);
  background:var(--glass-sunk);border:1px solid var(--hair);overflow-x:auto;
  scrollbar-width:none}
.gtabs::-webkit-scrollbar{display:none}
.gtab{flex:none;font-family:var(--f-body);font-size:13.5px;font-weight:600;padding:9px 16px;
  border:1px solid transparent;border-radius:var(--r-md);background:none;
  color:var(--ink-2);cursor:pointer;white-space:nowrap;
  transition:background .2s var(--ease),color .2s var(--ease),box-shadow .22s var(--ease)}
.gtab:hover{background:var(--tint);color:var(--ink)}
.gtab[aria-selected="true"]{background:var(--surface);color:var(--ink);
  box-shadow:0 1px 2px rgba(15,28,41,.10),0 4px 12px -6px rgba(15,28,41,.24)}
.gbody{padding:24px 22px 22px}
.gbody[hidden]{display:none!important}
.gintro{font-size:14px;color:var(--ink-2);margin:0 0 16px;max-width:56ch}
.qtext{font-size:17px;margin:0 0 16px;text-align:center;line-height:1.55}
.qtext .eq{color:var(--ink-3);margin:0 12px;font-family:var(--f-mono)}
.qtext b{font-weight:700}
/* the missing coefficient reads as a slot to fill, not as punctuation */
.blank-c{display:inline-block;min-width:1.5em;text-align:center;font-weight:800;
  background:var(--accent);color:#fff;border-radius:6px;padding:0 4px;margin-right:1px}
@supports (corner-shape:squircle){.blank-c{corner-shape:squircle}}
.eqn{display:block;font-family:var(--f-mono);font-size:15px;font-weight:600;
  color:var(--accent);background:var(--accent-soft);border-radius:var(--r-sm);
  padding:9px 14px;margin:0 auto 14px;width:fit-content;max-width:100%;letter-spacing:.01em}
.stage-q{padding:6px 0 2px}
.answer-row{display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap}
.answer-row .unit{font-family:var(--f-mono);font-size:14px;font-weight:600;color:var(--ink-2);
  background:var(--glass-2);border:1px solid var(--hair);border-radius:var(--r-xs);padding:6px 10px}
.numin{width:150px;text-align:center;font-family:var(--f-mono);font-size:19px;font-weight:600;
  padding:10px;border:1.5px solid var(--hair-2);border-radius:var(--r-sm);
  background:var(--glass-2);color:var(--ink);transition:border-color .18s var(--ease),box-shadow .22s var(--ease)}
.numin:focus{outline:0;border-color:var(--ring);box-shadow:0 0 0 4px var(--tint)}
.inputfr{display:flex;flex-direction:column;align-items:center;gap:3px}
.inputfr input{width:74px;text-align:center;font-family:var(--f-mono);font-size:20px;font-weight:600;
  padding:6px 4px;border:1.5px solid var(--hair-2);border-radius:var(--r-xs);
  background:var(--glass-2);color:var(--ink)}
.inputfr input:focus{outline:0;border-color:var(--ring);box-shadow:0 0 0 4px var(--tint)}
.inputfr .rule{width:74px;height:2px;background:var(--ink)}
.inputfr.ok input{border-color:var(--green);background:var(--green-soft)}
.inputfr.no input{border-color:var(--red);background:var(--red-soft)}
.verdict{text-align:center;font-size:15px;margin:16px 0 0;min-height:1.6em;font-weight:600}
.verdict.ok{color:var(--green)}
.verdict.no{color:var(--red)}
.verdict small{display:block;font-weight:400;font-size:13.5px;color:var(--ink-2);margin-top:4px;
  max-width:60ch;margin-inline:auto;line-height:1.5}
.gbar{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between;
  margin-top:18px;padding-top:16px;border-top:1px solid var(--hair)}
.score{font-family:var(--f-mono);font-size:13px;font-weight:600;color:var(--ink-2);
  font-variant-numeric:tabular-nums}
.score b{color:var(--green)}
.score i{font-style:normal;color:var(--red)}
.btnrow{display:flex;gap:10px;flex-wrap:wrap}
button.act{font-family:var(--f-body);font-size:14px;font-weight:600;padding:10px 18px;
  border-radius:var(--r-sm);border:1px solid var(--hair);cursor:pointer;color:var(--ink);
  background:var(--glass-2);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  transition:background .2s var(--ease),border-color .2s var(--ease),box-shadow .24s var(--ease),transform .18s var(--ease)}
button.act:hover{background:var(--tint);border-color:var(--ring);transform:translateY(-1px)}
button.act:active{transform:translateY(0)}
button.act.primary{background:var(--blue);border-color:var(--blue);color:var(--on-blue)}
button.act.primary:hover{box-shadow:var(--glow);filter:saturate(1.15)}
.yn{display:flex;gap:10px;justify-content:center;margin-top:8px;flex-wrap:wrap}
.yn button{font-family:var(--f-body);font-size:16px;font-weight:650;padding:12px 26px;
  border-radius:var(--r-md);border:1.5px solid var(--hair-2);cursor:pointer;color:var(--ink);
  background:var(--glass-2);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  transition:background .2s var(--ease),border-color .2s var(--ease),box-shadow .24s var(--ease),transform .18s var(--ease)}
.yn button:hover{background:var(--tint);border-color:var(--ring);box-shadow:var(--glow);transform:translateY(-2px)}
.yn button:active{transform:translateY(0)}
.yn.wrap button{font-size:15px;padding:11px 20px}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
@media (max-width:560px){.grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:400px){.grid{grid-template-columns:repeat(2,1fr)}}
.card{aspect-ratio:1;display:flex;align-items:center;justify-content:center;
  background:var(--glass-2);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1.5px solid var(--hair-2);border-radius:var(--r-md);cursor:pointer;color:var(--ink);
  font-family:var(--f-mono);
  transition:background .18s var(--ease),border-color .18s var(--ease),box-shadow .22s var(--ease),transform .18s var(--ease)}
.card:hover:not(.done){border-color:var(--ring);background:var(--tint);transform:translateY(-2px);box-shadow:var(--glow)}
.card.sel{border-color:var(--blue);background:var(--tint-2);box-shadow:var(--glow)}
.card.done{border-color:var(--green);background:var(--green-soft);color:var(--green);cursor:default;transform:none;box-shadow:none}
.card.wrong{border-color:var(--red);background:var(--red-soft);animation:shake .3s}
@keyframes shake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}

/* ---------- worksheet ---------- */
.sheet{background:var(--glass-2);border:1px solid var(--hair);border-radius:var(--r-lg);padding:22px}
.sheethead{display:flex;flex-wrap:wrap;gap:8px 16px;justify-content:space-between;align-items:baseline;
  border-bottom:2px solid var(--accent);padding-bottom:10px;margin-bottom:16px}
.sheethead h4{margin:0;font-family:var(--f-display);font-size:16px;font-weight:700}
.sheethead span{font-family:var(--f-mono);font-size:11px;color:var(--ink-3);letter-spacing:.06em}
.qgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 16px}
@media (max-width:620px){.qgrid{grid-template-columns:1fr}}
.qgrid .q{display:flex;gap:8px;align-items:baseline;font-size:14px;line-height:1.5}
.qgrid .q em{font-style:normal;color:var(--ink-3);font-size:12px;min-width:1.6em;font-family:var(--f-mono)}
.qgrid .q .qq{flex:1}
.qgrid .q .qq .eqn{display:inline-block;font-size:12.5px;padding:2px 8px;margin:0 6px 0 0}
.qgrid .q .blank{border-bottom:1.5px solid var(--ink-3);min-width:2.8em;display:inline-block;height:1.1em}
.qgrid .q .ans{color:var(--green);font-weight:700}

/* ---------- faq ---------- */
.faq{display:grid;gap:10px;margin-top:8px}
.faq details{background:var(--glass);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid var(--hair);border-radius:var(--r-lg);
  transition:background .2s var(--ease),border-color .2s var(--ease)}
.faq details:hover{background:var(--tint);border-color:var(--ring)}
.faq details[open]{background:var(--glass)}
.faq summary{cursor:pointer;padding:15px 19px;font-weight:650;font-size:15px;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";float:right;color:var(--accent);font-weight:700;font-size:18px;line-height:1.1}
.faq details[open] summary::after{content:"−"}
.faq .a{padding:0 19px 17px;font-size:14.5px;color:var(--ink-2);margin:0}

/* ---------- footer ---------- */
footer{margin-top:44px;padding-top:20px;border-top:1px solid var(--hair);font-size:13px;
  color:var(--ink-3);display:grid;gap:8px}
footer .mono{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.05em}
footer a{color:var(--ink-3)}

/* ---------- the specular edge ----------
   A translucent panel only reads as glass once it has a lit top edge. One token, one
   rule, applied to every pane; it flips to a dimmer white in dark mode. */
:root{--spec:inset 0 1px 0 color-mix(in srgb,#fff 70%,transparent)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --spec:inset 0 1px 0 color-mix(in srgb,#fff 12%,transparent)}}
:root[data-theme="dark"]{--spec:inset 0 1px 0 color-mix(in srgb,#fff 12%,transparent)}
.practice,.source,.card-l,.faq details,.rung,.pill,button.act,.yn button,.card,.gtabs,
.sheet,.ulist{box-shadow:var(--spec)}
.practice,.source{box-shadow:var(--spec),var(--shadow)}
.ulist{box-shadow:var(--spec),var(--shadow)}
.card-l:hover{box-shadow:var(--spec),var(--glow)}
.yn button:hover,.card:hover:not(.done){box-shadow:var(--spec),var(--glow)}
button.act.primary:hover{box-shadow:var(--glow)}
.gtab[aria-selected="true"]{box-shadow:var(--spec),0 1px 2px rgba(15,28,41,.10),0 4px 12px -6px rgba(15,28,41,.24)}
/* the hovered list row lights a blue edge instead of only shifting: a clearer target
   than a 15% wash on white, without turning the row into a button */
.ulist a:hover{box-shadow:inset 3px 0 0 var(--blue)}

/* =====================================================================
   ATTENTION SUPPORT  (ΔΕΠΥ / ADHD, and anyone reading while tired)
   =====================================================================
   These are WCAG COGA attention patterns, not a medical claim. Four of them are
   ALWAYS ON for everyone, because they are simply the better design:

     · a drill is a bounded SET with a visible bar and a real end (engine.js)
     · one live action at a time: "Επόμενη" stays inert until the question is answered
     · nothing moves that the reader did not start. No autoplay, no carousel, ever
     · colour is a landmark (the level accent), never the only carrier of meaning

   The three switches below are opt-in, saved per browser, and applied to <html>. */

/* --- the progress strip: how much is left, always visible ------------- */
.prog{display:flex;align-items:center;gap:12px;margin:0 0 18px}
.prog-track{flex:1;height:7px;border-radius:var(--r-pill);background:var(--glass-sunk);
  border:1px solid var(--hair);overflow:hidden}
.prog-fill{display:block;height:100%;width:0;background:var(--accent);border-radius:var(--r-pill);
  transition:width .3s var(--ease)}
.prog-n{font-family:var(--f-mono);font-size:12px;font-weight:700;color:var(--ink-3);
  font-variant-numeric:tabular-nums;min-width:4.4em;text-align:right}

/* --- the end of a set is a real event, not "the next one loaded" ------ */
.finish{text-align:center;padding:26px 16px 10px;display:grid;gap:6px;justify-items:center}
.finish .fw{font-family:var(--f-display);font-size:24px;font-weight:800;margin:0;color:var(--ink)}
.finish .fs{font-size:17px;margin:0;color:var(--ink-2)}
.finish .fs b{color:var(--accent);font-size:22px;font-weight:800}
.finish .fh{font-size:14px;color:var(--ink-3);margin:2px 0 14px;max-width:34ch}

/* the inert state of "Επόμενη": present, clearly not the thing to press yet */
button.act.waiting{opacity:.4;cursor:default;box-shadow:none;transform:none}
button.act.waiting:hover{background:var(--glass-2);border-color:var(--hair);transform:none}
button.act.primary.waiting{background:var(--ink-3);border-color:var(--ink-3)}

/* --- the header controls --------------------------------------------- */
.prefs{margin-left:auto;display:flex;align-items:center;gap:6px;position:relative}
.top .tag{margin-left:auto}
.top .tag + .prefs{margin-left:14px}
.prefbtn{display:inline-flex;align-items:center;gap:6px;font-family:var(--f-body);
  font-size:12.5px;font-weight:650;padding:7px 12px;border-radius:var(--r-sm);
  border:1px solid var(--hair);background:var(--glass-2);color:var(--ink-2);cursor:pointer;
  transition:background .18s var(--ease),border-color .18s var(--ease),color .18s var(--ease)}
@supports (corner-shape:squircle){.prefbtn,.prefpop,.prefrow,.sw{corner-shape:squircle}}
.prefbtn:hover{background:var(--tint);border-color:var(--ring);color:var(--ink)}
.prefbtn[aria-pressed="true"]{background:var(--blue);border-color:var(--blue);color:var(--on-blue)}
.prefbtn.aa{font-family:var(--f-display);font-weight:800;padding:7px 10px}
.prefpop{position:absolute;top:calc(100% + 10px);right:0;z-index:60;width:min(320px,88vw);
  padding:14px;border-radius:var(--r-lg);border:1px solid var(--hair);
  background:var(--surface);box-shadow:var(--spec),0 18px 48px -18px rgba(15,28,41,.45);
  display:grid;gap:6px}
.prefpop[hidden]{display:none}
.prefpop .ph{margin:0 0 4px;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.09em;
  color:var(--ink-3)}
.prefrow{display:flex;align-items:center;gap:12px;text-align:left;width:100%;
  padding:10px 11px;border-radius:var(--r-sm);border:1px solid transparent;
  background:none;color:var(--ink);cursor:pointer;font-family:inherit}
.prefrow:hover{background:var(--tint);border-color:var(--hair)}
.prefrow .pl{flex:1;display:grid;gap:1px}
.prefrow .pl b{font-size:14px;font-weight:650}
.prefrow .pl i{font-style:normal;font-size:12px;color:var(--ink-3);line-height:1.42}
.sw{flex:none;width:38px;height:22px;border-radius:var(--r-pill);background:var(--sunk);
  border:1px solid var(--hair-2);position:relative;transition:background .18s var(--ease)}
.sw::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;
  border-radius:var(--r-pill);background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,.28);
  transition:transform .2s var(--ease)}
.prefrow[aria-pressed="true"] .sw{background:var(--blue);border-color:var(--blue)}
.prefrow[aria-pressed="true"] .sw::after{transform:translateX(16px)}
.pmore{display:block;margin-top:4px;padding:8px 11px;font-size:12.5px;border:0;color:var(--blue)}
@media (max-width:560px){.prefbtn.quick span{display:none}.prefbtn.quick{padding:7px 9px}}

/* --- ΕΣΤΙΑΣΗ: one thing on the screen -------------------------------- */
[data-focus="on"] body{background:var(--paper)}
/* :has() guards the whole mode. On a page with no exercise (a hub, this very page)
   there is nothing to focus ON, so focus mode must not blank it. */
[data-focus="on"] .wrap:has(.work) > *:not(.work){display:none}
[data-focus="on"] .wrap:has(.work){padding-block:0 28px}
[data-focus="on"] .work{padding-block:18px 0}
[data-focus="on"] .work > h2{display:none}
[data-focus="on"] .top .tag{display:none}
[data-focus="on"] .practice{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none;
  border-color:var(--rule-soft);box-shadow:none;max-width:660px;margin-inline:auto}
[data-focus="on"] .gtabs,[data-focus="on"] .gtab,[data-focus="on"] button.act,
[data-focus="on"] .yn button,[data-focus="on"] .numin,[data-focus="on"] .card{
  backdrop-filter:none;-webkit-backdrop-filter:none}
[data-focus="on"] .qtext{font-size:20px}
[data-focus="on"] .gintro{color:var(--ink-3)}
[data-focus="on"] *{box-shadow:none!important}
[data-focus="on"] .gtab[aria-selected="true"]{background:var(--surface-2);border-color:var(--rule)}
[data-focus="on"] .prog-fill{background:var(--blue)}

/* --- ΗΡΕΜΙΑ: no glass, no glow, no motion ---------------------------- */
[data-calm="on"]{
  --glass:var(--surface);--glass-2:var(--surface-2);--glass-sunk:var(--sunk);
  --blur:none;--spec:none;--glow:none;--shadow:none;
  --tint:var(--blue-soft);--tint-2:var(--blue-soft);--hair:var(--rule-soft);--hair-2:var(--rule);
}
[data-calm="on"] body{background:var(--paper)}
[data-calm="on"] *{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  transition:none!important;animation:none!important;box-shadow:none!important}
[data-calm="on"] .card-l:hover,[data-calm="on"] .yn button:hover,[data-calm="on"] .card:hover,
[data-calm="on"] .rung:hover,[data-calm="on"] button.act:hover,
[data-calm="on"] .source a.btn:hover{transform:none;filter:none}
[data-calm="on"] .practice,[data-calm="on"] .card-l,[data-calm="on"] .source,
[data-calm="on"] .faq details,[data-calm="on"] .rung,[data-calm="on"] .ulist{border-color:var(--rule)}

/* --- ΜΕΓΑΛΑ ΓΡΑΜΜΑΤΑ ------------------------------------------------- */
[data-text="lg"] body{font-size:18.5px;line-height:1.8;letter-spacing:.006em;word-spacing:.04em}
[data-text="lg"] .qtext{font-size:21px;line-height:1.6}
[data-text="lg"] .gintro,[data-text="lg"] .verdict small{font-size:15.5px;line-height:1.65}
[data-text="lg"] .lede{line-height:1.62}
[data-text="lg"] .ulist a .t,[data-text="lg"] .card-l .t{font-size:17px}
[data-text="lg"] .faq summary{font-size:16.5px}
[data-text="lg"] .faq .a{font-size:16px;line-height:1.72}
[data-text="lg"] .prose p,[data-text="lg"] p{max-width:62ch}
[data-text="lg"] .yn button{font-size:17px;padding:13px 24px}

/* --- the accessibility page ----------------------------------------- */
.doing{display:grid;gap:10px;margin:18px 0 0}
.doing li{list-style:none;display:grid;grid-template-columns:auto 1fr;gap:13px;align-items:start;
  padding:14px 17px;border-radius:var(--r-lg);border:1px solid var(--hair);background:var(--glass);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);box-shadow:var(--spec)}
@supports (corner-shape:squircle){.doing li{corner-shape:squircle}}
.doing li::before{content:"";width:9px;height:9px;margin-top:9px;border-radius:3px;
  background:var(--accent);display:block}
@supports (corner-shape:squircle){.doing li::before{corner-shape:squircle}}
.doing b{display:block;font-size:15px;font-weight:650;margin-bottom:2px}
.doing span{font-size:14px;color:var(--ink-2);line-height:1.55}
.note{border-left:3px solid var(--ink-3);padding:2px 0 2px 16px;margin:22px 0 0;
  font-size:14px;color:var(--ink-2);max-width:60ch}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important}
  .card-l:hover,.yn button:hover,.card:hover,.rung:hover,button.act:hover,
  .source a.btn:hover{transform:none}
}

/* ---------- print: the worksheet only ---------- */
@media print{
  .top,.crumb,.source,.faq,footer,.gtabs,.gbar,.meta,.lede,h1,.prose,.ladder,
  .prog,.prefs,.finish{display:none!important}
  .gbody[hidden]{display:block!important}
  .practice{border:0;box-shadow:none;background:none;backdrop-filter:none}
  .sheet{border:0;padding:0;background:none}
  .eqn{background:none;color:#000;padding:0}
  body{background:#fff;color:#000}
  *{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
}
