
:root{
  --bg:#F3F5FA; --surface:#FFFFFF; --surface2:#EAEEF7; --ink:#131B31; --muted:#58637E; --line:#D6DCEA;
  --accent:#1F46C4; --accent-ink:#FFFFFF; --accent-soft:#E1E8FC;
  --masc:#1F46C4; --masc-soft:#E1E8FC; --fem:#9A5B00; --fem-soft:#FBEBD0;
  --good:#1B7349; --good-soft:#DDF2E6; --warn:#955400; --bad:#B01F33; --bad-soft:#FBE1E4; --mark:#FBE3A0;
  --shadow:0 1px 2px rgba(19,27,49,.06),0 8px 24px rgba(19,27,49,.06);
  --display:"Bricolage Grotesque", "Avenir Next", "Segoe UI", system-ui, sans-serif;
  --body:"Atkinson Hyperlegible", "Segoe UI", system-ui, -apple-system, sans-serif;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#0D1220; --surface:#151C2F; --surface2:#1C253D; --ink:#E6EAF4; --muted:#98A3BE; --line:#28334F;
    --accent:#8AA3FF; --accent-ink:#0D1220; --accent-soft:#1E2A50;
    --masc:#8AA3FF; --masc-soft:#1E2A50; --fem:#F1B955; --fem-soft:#392A10;
    --good:#5CCB92; --good-soft:#14332A; --warn:#F1B955; --bad:#FF7F8E; --bad-soft:#3A1A22; --mark:#5B4812;
    --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0D1220; --surface:#151C2F; --surface2:#1C253D; --ink:#E6EAF4; --muted:#98A3BE; --line:#28334F;
  --accent:#8AA3FF; --accent-ink:#0D1220; --accent-soft:#1E2A50;
  --masc:#8AA3FF; --masc-soft:#1E2A50; --fem:#F1B955; --fem-soft:#392A10;
  --good:#5CCB92; --good-soft:#14332A; --warn:#F1B955; --bad:#FF7F8E; --bad-soft:#3A1A22; --mark:#5B4812;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);
}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.5;padding-inline:16px;padding-block:0 48px}
.wrap{max-width:1080px;margin:0 auto}
h1,h2,h3{font-family:var(--display);font-weight:700;text-wrap:balance;margin:0;letter-spacing:-.01em}
h2{font-size:1.55rem;line-height:1.15}
h3{font-size:1.1rem}
p{margin:0}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.muted{color:var(--muted)}
.small{font-size:.86rem}
.eyebrow{font-size:.74rem;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:700}
.tabular{font-variant-numeric:tabular-nums}

/* header */
header.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);border-bottom:1px solid var(--line);margin-inline:-16px;padding-inline:16px}
.top-in{max-width:1080px;margin:0 auto;display:flex;align-items:center;gap:16px;padding-block:12px 0;flex-wrap:wrap}
.brand{display:flex;align-items:baseline;gap:10px;flex:1 1 auto;min-width:0}
.brand h1{font-size:1.3rem}
.brand .tag{font-size:.8rem;color:var(--muted)}
.brand .tag b{color:var(--ink);font-weight:700}
.iconbtn{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:6px 10px;display:inline-flex;align-items:center;gap:6px;font-size:.85rem}
nav.tabs{max-width:1080px;margin:0 auto;display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding-top:8px}
nav.tabs::-webkit-scrollbar{display:none}
nav.tabs button{border:0;background:none;padding:8px 12px 10px;border-bottom:3px solid transparent;white-space:nowrap;color:var(--muted);font-weight:700;display:flex;gap:6px;align-items:center}
nav.tabs button[aria-current="page"]{color:var(--ink);border-bottom-color:var(--accent)}
.count{font-size:.72rem;background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:1px 7px;font-variant-numeric:tabular-nums}
.banner{max-width:1080px;margin:12px auto 0;background:var(--surface2);border-radius:8px;padding:8px 12px;font-size:.85rem;color:var(--muted)}

main{max-width:1080px;margin:0 auto;padding-top:24px;display:flex;flex-direction:column;gap:24px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:14px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.between{justify-content:space-between}
.stack{display:flex;flex-direction:column;gap:10px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}

/* buttons */
.btn{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 14px;font-weight:700;display:inline-flex;align-items:center;gap:8px;line-height:1.2}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.ghost{border-color:transparent;background:none;color:var(--accent)}
.btn.danger{color:var(--bad);border-color:var(--bad)}
.btn.sm{padding:5px 10px;font-size:.85rem}
.btn:disabled{opacity:.5;cursor:not-allowed}
.seg{display:inline-flex;background:var(--surface2);border-radius:9px;padding:3px;gap:2px;flex-wrap:wrap}
.seg button{border:0;background:none;border-radius:7px;padding:6px 12px;font-weight:700;color:var(--muted);font-size:.9rem}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.12)}

/* inputs */
label.f{display:flex;flex-direction:column;gap:4px;font-size:.85rem;font-weight:700;color:var(--muted);min-width:0}
input[type=text],input[type=search],input[type=number],select,textarea{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 10px;font-size:1rem;width:100%;min-width:0}
textarea{resize:vertical;min-height:90px}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.accents{display:flex;gap:4px;flex-wrap:wrap}
.accents button{border:1px solid var(--line);background:var(--surface2);border-radius:6px;min-width:34px;padding:4px 8px;font-size:1rem}

/* word chips */
.chip{display:inline-flex;align-items:baseline;gap:5px;border-radius:999px;padding:4px 12px;background:var(--surface2);font-weight:700;font-size:.95rem;border:1px solid transparent}
.chip .art{font-weight:400;font-size:.85em}
.chip.g-m{background:var(--masc-soft);color:var(--masc)}
.chip.g-f{background:var(--fem-soft);color:var(--fem)}
.chip .x{border:0;background:none;padding:0 0 0 4px;color:inherit;opacity:.6;font-size:1rem;line-height:1}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.gtag{display:inline-block;font-size:.75rem;border:1px solid var(--line);border-radius:5px;padding:0 6px;color:var(--muted);white-space:nowrap}
.status{font-size:.74rem;font-weight:700;border-radius:5px;padding:1px 7px;white-space:nowrap}
.st-New{background:var(--accent-soft);color:var(--accent)}
.st-Learning{background:var(--surface2);color:var(--muted)}
.st-Due{background:var(--fem-soft);color:var(--fem)}
.st-Mastered,.st-Known{background:var(--good-soft);color:var(--good)}

/* today */
.today-head{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;justify-content:space-between}
.today-head .date{font-family:var(--display);font-size:2rem;font-weight:700;line-height:1.05;text-transform:lowercase}
.strip{display:flex;gap:28px;flex-wrap:wrap}
.strip div{display:flex;flex-direction:column}
.strip b{font-family:var(--display);font-size:1.5rem;font-variant-numeric:tabular-nums;line-height:1.1}
.strip span{font-size:.8rem;color:var(--muted)}
.grow{display:grid;grid-template-columns:1fr auto;gap:8px 12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.grow:first-child{border-top:0}
.plist{max-height:420px;overflow-y:auto;border:1px solid var(--line);border-radius:8px}
.pitem{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:8px 12px;border-top:1px solid var(--line)}
.pitem:first-child{border-top:0}

/* words */
.wlayout{display:grid;grid-template-columns:250px 1fr;gap:20px;align-items:start}
@media (max-width:760px){.wlayout{grid-template-columns:1fr}}
.glist{display:flex;flex-direction:column;gap:2px}
.glist button.g{border:0;background:none;text-align:left;padding:8px 10px;border-radius:8px;display:grid;grid-template-columns:1fr auto;gap:2px 8px}
.glist button.g[aria-current="true"]{background:var(--accent-soft)}
.glist .bar{grid-column:1/-1;height:4px;border-radius:2px;background:var(--surface2);overflow:hidden}
.glist .bar i{display:block;height:100%;background:var(--good)}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
table{border-collapse:collapse;width:100%;min-width:640px}
th,td{padding:9px 12px;text-align:left;border-top:1px solid var(--line);vertical-align:middle}
thead th{border-top:0;font-size:.74rem;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);background:var(--surface2)}
td .es{font-weight:700;font-size:1.02rem}
td .art{font-weight:400;color:var(--muted)}
.acts{display:flex;gap:4px;justify-content:flex-end;flex-wrap:nowrap}
.acts button{border:1px solid transparent;background:none;border-radius:6px;padding:3px 7px;font-size:.82rem;color:var(--muted);white-space:nowrap}
.acts button:hover{border-color:var(--line);color:var(--ink)}
.star[aria-pressed="true"]{color:var(--fem)!important}

/* flashcard */
.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:32px 24px;min-height:300px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center;max-width:640px;width:100%;margin:0 auto}
.card .big{font-family:var(--display);font-size:clamp(2rem,7vw,3.1rem);line-height:1.05;font-weight:700;overflow-wrap:anywhere}
.card .big .art{font-weight:500;color:var(--muted)}
.card .mean{font-size:1.35rem}
.card .meta{color:var(--muted);font-size:.9rem}
.card .ex{border-top:1px solid var(--line);padding-top:12px;width:100%;display:flex;flex-direction:column;gap:2px}
.kind{font-size:.74rem;letter-spacing:.09em;text-transform:uppercase;font-weight:700;color:var(--accent)}
.play{border:0;background:var(--accent);color:var(--accent-ink);width:64px;height:64px;border-radius:50%;display:inline-grid;place-items:center}
.play.sm{width:34px;height:34px}
.play svg{width:45%;height:45%}
.play.slow{background:var(--surface2);color:var(--ink)}
.rate{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:640px;width:100%;margin:0 auto}
.rate button{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:10px 4px;display:flex;flex-direction:column;align-items:center;gap:2px;font-weight:700}
.rate button small{font-weight:400;color:var(--muted);font-size:.78rem}
.rate .r0{color:var(--bad)} .rate .r3{color:var(--good)}
.progress{height:6px;background:var(--surface2);border-radius:3px;overflow:hidden;max-width:640px;width:100%;margin:0 auto}
.progress i{display:block;height:100%;background:var(--accent)}
.result{border-radius:8px;padding:8px 12px;font-weight:700;width:100%}
.result.ok{background:var(--good-soft);color:var(--good)}
.result.note{background:var(--fem-soft);color:var(--fem)}
.result.no{background:var(--bad-soft);color:var(--bad)}
.answerbox{display:flex;gap:8px;width:100%;max-width:420px}
.conjt{display:grid;grid-template-columns:auto 1fr;gap:2px 14px;text-align:left;font-size:.92rem}

/* sentences */
.sent{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;padding:14px 0;border-top:1px solid var(--line);align-items:start}
.sent:first-child{border-top:0}
.sent .es{font-size:1.12rem;line-height:1.45}
.sent .en{color:var(--muted)}
mark{background:var(--mark);color:inherit;border-radius:3px;padding:0 2px}
.scene{font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);font-weight:700}
.dlg{display:flex;flex-direction:column;gap:8px}
.line{display:grid;grid-template-columns:28px 1fr;gap:10px;align-items:start}
.who{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:.8rem;background:var(--masc-soft);color:var(--masc)}
.who.B{background:var(--fem-soft);color:var(--fem)}
.feedback{background:var(--surface2);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}
.feedback ul{margin:0;padding-left:18px}

/* upload */
.drop{border:2px dashed var(--line);border-radius:12px;padding:28px 16px;text-align:center;display:flex;flex-direction:column;gap:8px;align-items:center;background:var(--surface)}
.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.dup{font-size:.75rem;color:var(--fem);font-weight:700}
table.review input,table.review select{padding:5px 7px;font-size:.92rem}

/* modal & toast */
.modal{position:fixed;inset:0;background:rgba(10,14,26,.5);display:grid;place-items:center;padding:16px;z-index:50;overflow-y:auto}
.modal .panel{max-width:720px;width:100%;max-height:calc(100% - 32px);overflow-y:auto}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(20px + env(safe-area-inset-bottom,0px));background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-weight:700;z-index:60;max-width:calc(100% - 32px);box-shadow:var(--shadow)}
.empty{padding:28px 16px;text-align:center;color:var(--muted);display:flex;flex-direction:column;gap:10px;align-items:center}
.spin{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:sp .8s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation:none}}
kbd{font-family:inherit;font-size:.75rem;border:1px solid var(--line);border-radius:4px;padding:0 4px;color:var(--muted)}

/* standalone site additions */
html{-webkit-text-size-adjust:100%}
body{margin:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:calc(48px + env(safe-area-inset-bottom,0px))}
[hidden]{display:none!important}
img{max-width:100%}
a.btn{text-decoration:none;color:inherit}
code{font-size:.85em;background:var(--surface2);border-radius:4px;padding:1px 5px}
.auth{max-width:440px;margin:0 auto;padding-top:6vh;display:flex;flex-direction:column;gap:22px}
.auth-hero{display:flex;flex-direction:column;gap:8px}
.auth-title{font-size:clamp(2rem,8vw,2.8rem);line-height:1.02}
.auth-title::after{content:"";display:block;width:56px;height:6px;border-radius:3px;margin-top:12px;background:linear-gradient(90deg,var(--masc) 0 50%,var(--fem) 50% 100%)}
.btn.mic{gap:6px}
.btn.mic.on{background:var(--bad);border-color:var(--bad);color:#fff}
@media (prefers-reduced-motion:no-preference){.btn.mic.on{animation:pulse 1.2s ease-in-out infinite}}
@keyframes pulse{50%{box-shadow:0 0 0 6px color-mix(in srgb,var(--bad) 25%,transparent)}}
@media (max-width:520px){
  .top-in{flex-wrap:nowrap}
  .brand h1{font-size:1.15rem;white-space:nowrap}
  .brand .tag{display:none}
  .strip{gap:18px}
  .grow{grid-template-columns:1fr}
  .today-head .date{font-size:1.7rem}
}
