
/* TEFly styles. Base system from Le Petit Train: each CEFR level is a coloured railway line, each week is a station. */
:root{
  --bg:#eef8f2; --surface:#ffffff; --sunk:#dff0e6; --ink:#13261d; --muted:#4b6357; --line:#c9e2d3;
  --accent:#0f7d52; --on-accent:#ffffff; --brand2:#ff5a36; --sky:#2f7cf0;
  --l1:#f0a800; --l2:#1a9e62; --l3:#2f7cf0; --l4:#c23b9c; --l5:#ff5a36;
  --good:#138a57; --good-bg:#dff5ea; --bad:#cf3b2c; --bad-bg:#fde6e2; --hi:#ffe477; --hi-ink:#1b2340;
  --f-display:"Baloo 2", "Arial Rounded MT Bold", "Trebuchet MS", system-ui, sans-serif;
  --f-body:"Atkinson Hyperlegible", "Segoe UI", system-ui, sans-serif;
  --r:18px;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#0b1913; --surface:#13281f; --sunk:#0f2119; --ink:#eaf7f0; --muted:#a3c2b2; --line:#24423a;
  --accent:#3ccf8e; --on-accent:#0b1913; --brand2:#ff7a5c; --sky:#79a9ff;
  --l1:#ffc233; --l2:#3ccf8e; --l3:#79a9ff; --l4:#e46cc3; --l5:#ff7a5c;
  --good:#5ee0a4; --good-bg:#123a2c; --bad:#ff8a7a; --bad-bg:#3d1c22; --hi:#ffd84a; --hi-ink:#1b2340; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#0b1913; --surface:#13281f; --sunk:#0f2119; --ink:#eaf7f0; --muted:#a3c2b2; --line:#24423a;
  --accent:#3ccf8e; --on-accent:#0b1913; --brand2:#ff7a5c; --sky:#79a9ff;
  --l1:#ffc233; --l2:#3ccf8e; --l3:#79a9ff; --l4:#e46cc3; --l5:#ff7a5c;
  --good:#5ee0a4; --good-bg:#123a2c; --bad:#ff8a7a; --bad-bg:#3d1c22; --hi:#ffd84a; --hi-ink:#1b2340; color-scheme:dark}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0}
.vclose{position:absolute;top:8px;right:8px;width:32px;height:32px;border-radius:50%;border:2px solid var(--line);background:var(--sunk);cursor:pointer;font-weight:800;line-height:1}
body{background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:17px;line-height:1.55;padding-inline:16px;padding-block:0 60px}
h1,h2,h3{font-family:var(--f-display);line-height:1.1;text-wrap:balance;margin:0}
h1{font-size:clamp(2rem,5vw,3.2rem);font-weight:800}
h2{font-size:clamp(1.5rem,3.4vw,2.1rem);font-weight:800}
h3{font-size:1.2rem;font-weight:700}
p{margin:0}
a{color:var(--sky)}
button{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--sky);outline-offset:2px;border-radius:8px}
.wrap{max-width:1080px;margin:0 auto}

/* header */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);margin-inline:-16px;padding:10px 16px;border-bottom:2px solid var(--line)}
.top-in{max-width:1080px;margin:0 auto;display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:8px;font-family:var(--f-display);font-weight:800;font-size:1.25rem;background:none;border:0;cursor:pointer;padding:0}
.brand .loco{font-size:1.6rem}
.nav{display:flex;gap:6px;overflow-x:auto;flex:1;min-width:0;scrollbar-width:none}
.nav button{border:2px solid transparent;background:none;padding:6px 12px;border-radius:999px;cursor:pointer;white-space:nowrap;font-weight:700;color:var(--muted)}
.nav button.on{background:var(--surface);border-color:var(--line);color:var(--ink)}
.vbtn{border:2px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 12px;cursor:pointer;font-weight:700}
.vpanel{position:absolute;right:16px;top:100%;margin-top:6px;background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:14px;width:min(340px,calc(100vw - 32px));display:grid;gap:10px;box-shadow:0 12px 30px rgb(0 0 0 / .15)}
.vpanel label{font-weight:700;font-size:.9rem}
.vpanel select,.vpanel input{width:100%}
.note{font-size:.88rem;color:var(--muted)}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:8px;border:0;background:var(--accent);color:var(--on-accent);font-weight:800;font-family:var(--f-display);font-size:1.05rem;padding:10px 18px;border-radius:999px;cursor:pointer;text-decoration:none;box-shadow:0 4px 0 rgb(0 0 0 / .18)}
.btn:active{transform:translateY(2px);box-shadow:0 2px 0 rgb(0 0 0 / .18)}
.btn.ghost{background:var(--surface);color:var(--ink);border:2px solid var(--line);box-shadow:none}
.btn.sm{font-size:.9rem;padding:6px 14px}
.btn[disabled]{opacity:.45;cursor:default}

/* french speakable text */
.fr{display:inline;font-weight:700}
.say{display:inline-grid;place-items:center;width:1.7em;height:1.7em;border-radius:50%;background:var(--sky);color:#fff;font-size:.7em;vertical-align:.15em;margin-right:.35em;cursor:pointer;user-select:none}
.w{cursor:pointer;border-radius:6px;padding:0 1px;transition:background .15s}
.w:hover{background:var(--sunk)}
.w.on{background:var(--hi);color:var(--hi-ink)}
.hint{display:none;font-size:.88rem;color:var(--muted);font-weight:400;font-style:italic}
.hints-on .hint{display:block}

/* home */
.hero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:24px;align-items:center;padding-block:28px 20px}
.hero p.lead{font-size:1.15rem;color:var(--muted);margin-top:10px;max-width:56ch}
.hero-cta{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.coco-card{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:18px;display:grid;gap:10px}
.coco-row{display:flex;gap:12px;align-items:flex-start}
.coco{font-size:2.6rem;line-height:1;flex:none}
.bubble{background:var(--sunk);border-radius:16px;padding:10px 14px;min-width:0}
.progress{height:14px;background:var(--sunk);border-radius:99px;overflow:hidden}
.progress i{display:block;height:100%;background:var(--l2);border-radius:99px}
.map{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-top:10px}
.line-card{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:14px 14px 10px}
.line-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.line-badge{background:var(--lc);color:#fff;font-family:var(--f-display);font-weight:800;border-radius:10px;padding:2px 10px;font-size:1rem}
.line-name{font-weight:700;font-size:.95rem}
.stations{list-style:none;margin:0;padding:0;position:relative}
.stations::before{content:"";position:absolute;left:13px;top:14px;bottom:14px;width:6px;border-radius:6px;background:var(--lc)}
.st{position:relative;display:flex;gap:10px;align-items:center;width:100%;text-align:left;background:none;border:0;padding:6px 4px;cursor:pointer;border-radius:12px}
.st:hover{background:var(--sunk)}
.st .dot{flex:none;width:26px;height:26px;border-radius:50%;background:var(--surface);border:5px solid var(--lc);position:relative;z-index:1;display:grid;place-items:center;font-size:.7rem;font-weight:800;color:#fff}
.st.done .dot{background:var(--lc)}
.st .st-emo{font-size:1.3rem}
.st .st-txt{min-width:0;display:grid;line-height:1.2}
.st .st-wk{font-size:.75rem;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-weight:700}
.st .st-t{font-weight:700;font-size:.95rem}
.routine{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-top:10px}
.day{background:var(--surface);border:2px solid var(--line);border-radius:14px;padding:10px 12px}
.day b{font-family:var(--f-display);font-size:1.05rem;display:block}
.day span{font-size:.9rem;color:var(--muted)}
.sec{margin-top:34px;display:grid;gap:10px}
.sec > p{color:var(--muted)}

/* lesson */
.les-head{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding-block:18px 10px}
.les-head .grow{flex:1;min-width:0}
.eyebrow{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;font-weight:800;color:var(--lc)}
.dots{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.dots button{width:12px;height:12px;border-radius:50%;border:0;background:var(--line);cursor:pointer;padding:0}
.dots button.on{background:var(--lc);transform:scale(1.3)}
.stage{background:var(--surface);border:3px solid var(--lc);border-radius:24px;padding:clamp(18px,4vw,34px);min-height:420px;display:grid;align-content:start;gap:16px}
.kind{justify-self:start;background:var(--lc);color:#fff;font-weight:800;font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;padding:3px 12px;border-radius:99px}
.prose{display:grid;gap:10px;max-width:68ch}
.ctrls{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-top:14px;flex-wrap:wrap}
.ctrls .mid{color:var(--muted);font-weight:700;font-variant-numeric:tabular-nums}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.pics{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
.pic{background:var(--sunk);border:2px solid var(--line);border-radius:18px;padding:14px 10px;text-align:center;cursor:pointer;display:grid;gap:4px;justify-items:center;transition:transform .15s}
.pic:hover{transform:translateY(-3px);border-color:var(--lc)}
.pic.pop{animation:pop .4s}
@keyframes pop{50%{transform:scale(1.08)}}
.emo{font-size:3rem;line-height:1.1}
.pic .pic-fr{font-weight:700;font-size:1.05rem}
.sayl{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.sayl li{display:flex;gap:14px;align-items:center;background:var(--sunk);border-radius:16px;padding:10px 14px}
.sayl li .emo{font-size:2.2rem;flex:none}
.sayl li > div{min-width:0;display:grid;gap:2px;font-size:1.1rem}
.tbl{overflow-x:auto;border-radius:14px;border:2px solid var(--line)}
table{border-collapse:collapse;width:100%;font-size:1rem}
th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
th{background:var(--sunk);font-family:var(--f-display);font-size:1rem}
tr:last-child td{border-bottom:0}
.tutor{display:grid;gap:12px}
.tline{display:flex;gap:12px;align-items:flex-start;animation:rise .3s ease}
@keyframes rise{from{transform:translateY(8px);opacity:.3}}
.tline .coco{font-size:2.2rem}
.tline .bubble{font-size:1.05rem}
.rulebox{background:var(--sunk);border-left:0;border-radius:18px;padding:16px 18px;display:grid;gap:10px;border:2px dashed var(--lc)}

/* homework */
.hw-grid{display:grid;gap:22px}
.panel{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:clamp(16px,3vw,26px);display:grid;gap:14px}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
textarea{width:100%;min-height:140px;border:2px solid var(--line);border-radius:14px;padding:12px;background:var(--bg);color:var(--ink);font:inherit;resize:vertical}
.check{display:flex;gap:10px;align-items:flex-start}
.check input{width:20px;height:20px;margin-top:3px;flex:none}

/* flashcards */
.fc-wrap{display:grid;gap:12px;justify-items:center}
.fc{width:min(420px,100%);perspective:1200px;cursor:pointer}
.fc-in{display:grid;transition:transform .5s;transform-style:preserve-3d}
.fc.flipped .fc-in{transform:rotateY(180deg)}
.fc-face{grid-area:1/1;backface-visibility:hidden;-webkit-backface-visibility:hidden;background:var(--surface);border:3px solid var(--lc,var(--sky));border-radius:24px;min-height:260px;display:grid;place-items:center;align-content:center;gap:10px;padding:20px;text-align:center}
.fc-back{transform:rotateY(180deg)}
.fc-face .emo{font-size:5.5rem}
.fc-face .big{font-size:1.6rem}
.fc-meta{color:var(--muted);font-weight:700;font-size:.9rem;font-variant-numeric:tabular-nums}
.fc-btns{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.seg{display:inline-flex;background:var(--sunk);border-radius:99px;padding:4px;gap:4px}
.seg button{border:0;background:none;padding:6px 14px;border-radius:99px;cursor:pointer;font-weight:700;color:var(--muted)}
.seg button.on{background:var(--surface);color:var(--ink)}

/* quiz */
.qz{display:grid;gap:14px}
.qz-top{display:flex;gap:12px;align-items:center;font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums}
.qz-bar{flex:1;height:10px;background:var(--sunk);border-radius:99px;overflow:hidden}
.qz-bar i{display:block;height:100%;background:var(--l2)}
.qz-q{font-size:1.2rem;font-weight:700}
.qz-big{font-size:5rem;text-align:center;line-height:1.1}
.qz-opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}
.qz-opts.emos{grid-template-columns:repeat(4,minmax(0,1fr))}
.opt{background:var(--sunk);border:2px solid var(--line);border-radius:14px;padding:12px 14px;cursor:pointer;font-weight:700;text-align:left}
.qz-opts.emos .opt{font-size:2.8rem;text-align:center;padding:10px 4px}
.opt:hover{border-color:var(--sky)}
.opt.right{background:var(--good-bg);border-color:var(--good)}
.opt.wrong{background:var(--bad-bg);border-color:var(--bad)}
.opt.locked{cursor:default}
.qz-fb{background:var(--sunk);border-radius:14px;padding:12px 14px;display:grid;gap:10px}
.qz-end{text-align:center;display:grid;gap:10px;justify-items:center}
.qz-score{font-family:var(--f-display);font-size:3rem;font-weight:800}
.listen{justify-self:center;font-size:1.4rem}

/* sounds */
.snd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.snd{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:16px;display:grid;gap:10px;align-content:start}
.snd-sym{font-family:var(--f-display);font-weight:800;font-size:2.2rem;line-height:1;color:var(--accent)}
.snd-row{display:flex;gap:8px;flex-wrap:wrap}
.chip{background:var(--sunk);border-radius:12px;padding:6px 10px;cursor:pointer;display:inline-flex;gap:6px;align-items:center;font-weight:700;border:2px solid transparent}
.chip:hover{border-color:var(--sky)}
.chip .e{font-size:1.4rem}
.lbl{font-size:.75rem;letter-spacing:.07em;text-transform:uppercase;font-weight:800;color:var(--muted)}

/* dictionary */
.search{display:flex;gap:10px;flex-wrap:wrap}
.search input,.search select{flex:1;min-width:180px;border:2px solid var(--line);border-radius:14px;padding:10px 14px;background:var(--surface);color:var(--ink);font:inherit}
.dict{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.dict .pic{background:var(--surface)}
.dict .native{font-size:.8rem}
.terms{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.term{background:var(--surface);border:2px solid var(--line);border-radius:14px;padding:12px 14px;display:grid;gap:4px}

/* resources */
.res-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.res{background:var(--surface);border:2px solid var(--line);border-radius:16px;padding:14px 16px;display:grid;gap:4px;text-decoration:none;color:var(--ink)}
.res:hover{border-color:var(--sky)}
.res b{font-family:var(--f-display);font-size:1.1rem}
.res span{font-size:.92rem;color:var(--muted)}
.res em{font-style:normal;font-size:.8rem;color:var(--sky);font-weight:700}

/* exam */
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tabs button{border:2px solid var(--line);background:var(--surface);border-radius:99px;padding:6px 14px;font-weight:700;cursor:pointer}
.tabs button.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.doc{background:var(--bg);border:2px solid var(--line);border-radius:14px;padding:16px;display:grid;gap:8px;font-size:1rem}
.doc h4{margin:0;font-family:var(--f-display);font-size:1.1rem}
.eq{display:grid;gap:8px;padding-block:6px}
.eq .qq{font-weight:700}
.ropt{display:flex;gap:10px;align-items:flex-start;padding:8px 12px;border-radius:12px;border:2px solid var(--line);cursor:pointer;background:var(--surface)}
.ropt input{margin-top:4px}
.ropt.right{border-color:var(--good);background:var(--good-bg)}
.ropt.wrong{border-color:var(--bad);background:var(--bad-bg)}
.timer{display:inline-flex;gap:8px;align-items:center;background:var(--sunk);border-radius:99px;padding:6px 8px 6px 16px}
.t-disp{font-family:var(--f-display);font-weight:800;font-size:1.3rem;font-variant-numeric:tabular-nums;min-width:4ch}
.timer.low .t-disp{color:var(--bad)}
.fmt{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}
.fmt div{background:var(--surface);border:2px solid var(--line);border-radius:16px;padding:14px}
.fmt b{font-family:var(--f-display);font-size:1.1rem;display:block}
.result{font-family:var(--f-display);font-size:1.4rem;font-weight:800}
.wc{font-weight:700;font-variant-numeric:tabular-nums}
.wc.ok{color:var(--good)}

/* whiteboard */
.board{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:14px;display:grid;gap:10px;margin-top:16px}
.board-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.board-bar .grow{flex:1;min-width:0}
.sw{width:30px;height:30px;border-radius:50%;border:3px solid var(--surface);outline:2px solid var(--line);background:var(--c);cursor:pointer;padding:0}
.sw.on{outline:3px solid var(--ink)}
.tb{border:2px solid var(--line);background:var(--sunk);border-radius:12px;padding:5px 10px;font-weight:700;cursor:pointer}
.tb.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.board canvas{width:100%;max-width:100%;aspect-ratio:16/10;display:block;touch-action:none;border-radius:14px;border:2px dashed var(--line);
  background-color:var(--bg);background-image:linear-gradient(to bottom,transparent 38px,var(--line) 38px,var(--line) 40px);background-size:100% 40px;cursor:crosshair}
.board textarea{min-height:80px}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 18px;border-radius:99px;font-weight:700;z-index:50;max-width:calc(100vw - 32px)}
.banner{background:var(--hi);color:var(--hi-ink);border-radius:14px;padding:10px 14px;margin-top:12px;font-size:.95rem}

@media (max-width:760px){
  .hero{grid-template-columns:1fr}
  .qz-opts.emos{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pics{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}
  .emo{font-size:2.5rem}
}
@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}

/* ================= TEFly additions ================= */
:root{--gold:#f0a800;--flame:#ff7a1a;--xp:#7c4dff}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--xp:#b39dff}}
:root[data-theme="dark"]{--xp:#b39dff}
.stats{display:flex;gap:6px;align-items:center}
.chip-s{display:inline-flex;align-items:center;gap:5px;background:var(--surface);border:2px solid var(--line);border-radius:999px;padding:4px 10px;font-weight:800;font-family:var(--f-display);font-variant-numeric:tabular-nums;cursor:pointer;white-space:nowrap}
.chip-s .ic{font-size:1.1rem;line-height:1}
.chip-s.flame{color:var(--flame)}
.chip-s.flame.off{color:var(--muted);filter:grayscale(1)}
.chip-s.bump{animation:bump .6s}
@keyframes bump{30%{transform:scale(1.25)}}
.ring{--p:0;width:28px;height:28px;border-radius:50%;background:conic-gradient(var(--l2) calc(var(--p)*1%),var(--sunk) 0);display:grid;place-items:center;flex:none}
.ring::after{content:"";width:18px;height:18px;border-radius:50%;background:var(--surface)}
.ring-wrap{position:relative;display:grid;place-items:center}
.ring-wrap b{position:absolute;font-size:.62rem}
.acct{border:2px solid var(--line);background:var(--surface);border-radius:50%;width:36px;height:36px;font-weight:800;cursor:pointer;font-family:var(--f-display);flex:none}
.trialbar{margin-top:10px;border-radius:14px;padding:9px 14px;display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;background:var(--sunk);border:2px solid var(--line);font-weight:700}
.trialbar.warn{background:var(--hi);color:var(--hi-ink);border-color:transparent}
.lock{font-size:.85rem}
.st.locked{opacity:.6}
.st.locked .dot{border-style:dashed}
.str{height:5px;border-radius:9px;background:var(--sunk);overflow:hidden;width:70px;margin-top:3px}
.str i{display:block;height:100%;background:var(--lc)}
.review{font-size:.68rem;font-weight:800;color:var(--bad);text-transform:uppercase;letter-spacing:.05em}

/* modal */
.modal-bg{position:fixed;inset:0;background:rgb(10 14 35 / .55);z-index:60;display:grid;place-items:center;padding:16px;animation:fade .2s}
@keyframes fade{from{opacity:0}}
.modal{background:var(--surface);border-radius:24px;padding:clamp(18px,4vw,30px);width:min(480px,100%);max-height:calc(100vh - 32px);overflow:auto;display:grid;gap:14px;position:relative;border:2px solid var(--line);animation:rise .3s ease}
.modal.center{text-align:center;justify-items:center}
.modal .x{position:absolute;top:10px;right:10px;width:34px;height:34px;border-radius:50%;border:2px solid var(--line);background:var(--sunk);cursor:pointer;font-weight:800}
.big-emo{font-size:4.5rem;line-height:1}
.price{font-family:var(--f-display);font-size:2.6rem;font-weight:800;line-height:1}
.price small{font-size:1rem;color:var(--muted);font-weight:700}
.ticks{list-style:none;padding:0;margin:0;display:grid;gap:6px;text-align:left}
.ticks li::before{content:"✓ ";color:var(--good);font-weight:800}
.field{display:grid;gap:4px}
.field input,.field select{border:2px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--bg);color:var(--ink);font:inherit;width:100%}
.err{color:var(--bad);font-weight:700;font-size:.92rem}
.ok-msg{color:var(--good);font-weight:700;font-size:.92rem}
.linkbtn{background:none;border:0;color:var(--sky);cursor:pointer;font:inherit;text-decoration:underline;padding:0}

/* auth screen */
.auth{min-height:calc(100vh - 80px);display:grid;place-items:center;padding-block:30px}
.auth .panel{width:min(440px,100%)}

/* reward effects */
.xpfloat{position:fixed;z-index:70;pointer-events:none;font-family:var(--f-display);font-weight:800;font-size:1.5rem;color:var(--xp);text-shadow:0 2px 0 var(--surface);animation:floatup 1.1s ease-out forwards}
@keyframes floatup{to{transform:translateY(-70px);opacity:0}}
.combo{justify-self:center;font-family:var(--f-display);font-weight:800;color:var(--flame);font-size:1.1rem;animation:bump .5s}
#confetti{position:fixed;inset:0;pointer-events:none;z-index:80}
.badge-toast{position:fixed;top:calc(70px + env(safe-area-inset-top,0px));left:50%;transform:translateX(-50%);z-index:75;background:var(--surface);border:3px solid var(--gold);border-radius:18px;padding:10px 16px;display:flex;gap:10px;align-items:center;box-shadow:0 12px 30px rgb(0 0 0 / .2);animation:rise .35s ease;max-width:calc(100vw - 32px)}
.badge-toast .e{font-size:2rem}
.shake{animation:shake .35s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

/* league */
.league-head{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.league-icon{font-size:3.4rem;line-height:1}
.league-path{display:flex;gap:8px;flex-wrap:wrap}
.league-path span{font-size:1.6rem;opacity:.35}
.league-path span.on{opacity:1;transform:scale(1.2)}
.lb{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.lb li{display:grid;grid-template-columns:2.4em 1fr auto;gap:10px;align-items:center;background:var(--sunk);border-radius:14px;padding:8px 14px;font-weight:700}
.lb li.me{outline:3px solid var(--sky);background:var(--surface)}
.lb li .rk{font-family:var(--f-display);font-size:1.1rem;color:var(--muted)}
.lb .zone{font-size:.75rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;padding:2px 4px}
.lb .zone.up{color:var(--good)}
.lb .zone.down{color:var(--bad)}
.lb li.up{border-left:5px solid var(--good)}
.lb li.down{border-left:5px solid var(--bad)}

/* profile */
.badges{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.bdg{background:var(--sunk);border-radius:16px;padding:12px 8px;text-align:center;display:grid;gap:2px;justify-items:center}
.bdg .e{font-size:2.2rem}
.bdg.off{opacity:.4;filter:grayscale(1)}
.bdg b{font-family:var(--f-display);font-size:.95rem}
.bdg span{font-size:.75rem;color:var(--muted)}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}
.kpi{background:var(--sunk);border-radius:14px;padding:12px}
.kpi b{display:block;font-family:var(--f-display);font-size:1.6rem}
.kpi span{font-size:.85rem;color:var(--muted)}
.lvlbar{height:14px;background:var(--sunk);border-radius:99px;overflow:hidden}
.lvlbar i{display:block;height:100%;background:var(--xp);border-radius:99px;transition:width .6s}
.goal-opts{display:flex;gap:8px;flex-wrap:wrap}

/* exam extras */
.paper-pick{display:flex;gap:8px;flex-wrap:wrap}
.paper-pick button{border:2px solid var(--line);background:var(--surface);border-radius:12px;padding:8px 12px;font-weight:700;cursor:pointer;text-align:left}
.paper-pick button.on{border-color:var(--ink);background:var(--ink);color:var(--bg)}
.trick-list{display:grid;gap:10px}
.trick{background:var(--sunk);border-radius:14px;padding:12px 14px;display:grid;gap:4px}
.trick b{font-family:var(--f-display);font-size:1.05rem}
.phrase-row{display:flex;gap:8px;flex-wrap:wrap}

/* ============ landing page ============ */
.land-nav{display:flex;align-items:center;gap:12px;justify-content:space-between;padding-block:14px;max-width:1080px;margin:0 auto}
.land-nav .links{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.land-hero{max-width:1080px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:30px;align-items:center;padding-block:30px 40px}
.land-hero h1{font-size:clamp(2.3rem,6vw,4rem)}
.land-hero h1 em{font-style:normal;color:var(--accent)}
.land-hero .lead{font-size:1.2rem;color:var(--muted);margin-top:14px;max-width:52ch}
.trust{display:flex;gap:16px;flex-wrap:wrap;margin-top:16px;font-weight:700;color:var(--muted);font-size:.95rem}
.phone{background:var(--surface);border:3px solid var(--line);border-radius:30px;padding:18px;display:grid;gap:12px;box-shadow:0 20px 50px rgb(20 30 80 / .15)}
.phone .row{display:flex;justify-content:space-between;align-items:center;font-weight:800;font-family:var(--f-display)}
.feat{max-width:1080px;width:100%;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;padding-block:20px}
.feat div{background:var(--surface);border:2px solid var(--line);border-radius:var(--r);padding:18px;display:grid;gap:6px}
.feat .e{font-size:2.2rem}
.feat b{font-family:var(--f-display);font-size:1.2rem}
.land-sec{max-width:1080px;margin:0 auto;padding-block:30px;display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.price-card{background:var(--surface);border:3px solid var(--accent);border-radius:26px;padding:clamp(20px,4vw,34px);display:grid;gap:14px;max-width:460px;justify-self:center;width:100%;text-align:center}
.faq details{background:var(--surface);border:2px solid var(--line);border-radius:14px;padding:12px 16px}
.faq summary{font-weight:800;cursor:pointer}
.faq p{margin-top:8px;color:var(--muted)}
.foot{max-width:1080px;margin:40px auto 0;padding-top:20px;border-top:2px solid var(--line);display:flex;gap:16px;flex-wrap:wrap;justify-content:space-between;color:var(--muted);font-size:.9rem}
.foot a{color:var(--muted)}
.legal{max-width:760px;margin:0 auto;padding-block:30px;display:grid;gap:12px}
.legal h2{margin-top:12px;font-size:1.4rem}
@media (max-width:760px){
  .land-hero{grid-template-columns:1fr}
  .stats .hide-sm{display:none}
  .top-in{gap:8px}
  .top .nav{order:9;flex-basis:100%;margin-inline:-4px}
  .top .stats{margin-left:auto}
  .brand span:not(.loco){display:none}
}

/* ================= hints & help card ================= */
.hint{margin-top:2px}
.hint.tip{font-style:normal;color:var(--l4)}
.ask{display:none;border:0;background:var(--hi);color:var(--hi-ink);width:1.5em;height:1.5em;border-radius:50%;font-weight:800;font-size:.75em;cursor:pointer;margin-left:.3em;vertical-align:.15em;line-height:1;padding:0;font-family:var(--f-display)}
.hints-on .ask{display:inline-grid;place-items:center}
.modal .ask{display:none!important}
.pic,.num,.letter{position:relative}
.pic .ask,.num .ask,.letter .ask{position:absolute;top:6px;right:6px;margin:0;font-size:.85rem}
.chip .ask{position:static;font-size:.75rem}
.askbtn{border:2px solid var(--line);background:var(--surface);color:var(--sky);border-radius:99px;padding:3px 10px;font-weight:700;font-size:.85rem;cursor:pointer;white-space:nowrap}
.askbtn:hover{border-color:var(--sky)}
.qq .askbtn{padding:1px 8px;margin-left:4px;vertical-align:middle}
.hints-on #hintbtn,#hintbtn.on{background:var(--hi);color:var(--hi-ink);border-color:transparent}
.modal.help{width:min(520px,100%)}
.modal.wide{width:min(640px,100%)}
.hc-fr{font-size:1.35rem;line-height:1.5}
.hc-en{background:var(--sunk);border-radius:14px;padding:10px 14px;font-weight:700}
.hc-out{background:var(--sunk);border-radius:14px;padding:12px 14px;display:grid;gap:6px;border-left:5px solid var(--sky)}
.hc-txt{white-space:pre-line;line-height:1.55}
.langs{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.langs .tb{font-size:1rem;padding:8px 12px}
.chip-t{display:grid;line-height:1.2}

/* ================= ABC & 123 ================= */
.abc{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:14px}
.letter{background:var(--surface);border:2px solid var(--line);border-radius:18px;padding:12px;display:grid;gap:6px;cursor:pointer;transition:transform .15s}
.letter:hover{transform:translateY(-3px);border-color:var(--l1)}
.letter.pop{animation:pop .4s}
.letter .L{font-family:var(--f-display);font-weight:800;font-size:2.6rem;line-height:1;color:var(--accent)}
.letter .L small{font-size:1.3rem;color:var(--muted);margin-left:6px}
.letter .like{font-size:.85rem;color:var(--muted)}
.letter .like b{color:var(--ink)}
.letter .lw{display:flex;gap:8px;align-items:center}
.letter .lw .e{font-size:1.8rem}
.letter .lw > span:last-child{display:grid;line-height:1.2}
.nums{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px}
.num{background:var(--surface);border:2px solid var(--line);border-radius:16px;padding:12px;display:grid;gap:4px;cursor:pointer}
.num:hover{border-color:var(--l1)}
.num .d{font-family:var(--f-display);font-weight:800;font-size:1.7rem;line-height:1.1;color:var(--sky)}

/* ================= every device ================= */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{-webkit-tap-highlight-color:transparent;overflow-wrap:anywhere}
button,[role=button],a,.opt,.pic,.chip,.letter,.num,.st{touch-action:manipulation}
input,select,textarea{font-size:16px}  /* stops iPhone zooming into fields */
.modal{max-height:calc(100dvh - 32px);-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.auth{min-height:calc(100dvh - 80px)}
.nav{-webkit-overflow-scrolling:touch}
.top{padding-top:calc(10px + env(safe-area-inset-top,0px));top:0;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
body{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
@media (hover:none){.pic:hover,.letter:hover,.st:hover{transform:none}}
@media (min-width:761px) and (max-width:1100px){.map{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}}
@media (max-width:420px){.abc{grid-template-columns:repeat(2,minmax(0,1fr))}.nums{grid-template-columns:repeat(2,minmax(0,1fr))}.letter .L{font-size:2.1rem}.tbl table{font-size:.92rem}}

/* ================= Coco logo ================= */
.brand .logo{width:38px;height:38px;flex:none;display:block}
.brand .wordmark{font-family:var(--f-display);font-weight:800;font-size:1.3rem;letter-spacing:.01em}
.brand .wordmark i{font-style:normal;color:var(--accent)}
.top{background:color-mix(in srgb,var(--bg) 88%,var(--accent))}
.btn.ghost{border-color:color-mix(in srgb,var(--line) 70%,var(--accent))}
.nav button.on{border-color:var(--accent);color:var(--accent)}
.hero h1,.land-hero h1{color:var(--ink)}
.coco-card,.price-card{border-color:var(--accent)}
.price-card .price{color:var(--accent)}
@media (max-width:440px){
  .top-in{gap:5px}
  .stats{gap:4px}
  .chip-s{padding:3px 7px;font-size:.95rem}
  .top .vbtn{padding:5px 8px}
  .acct{width:32px;height:32px}
  .brand .logo{width:34px;height:34px}
}
.board-bar .grow{min-width:150px}
@media (max-width:380px){.top .ring-wrap{display:none}.chip-s .ic{font-size:1rem}}
.num .pic-fr{font-weight:700;font-size:1.1rem}
.line-badge{white-space:nowrap}
.nav{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);padding-right:24px}
#basics-drills .paper-pick button,.panel .paper-pick button{padding:6px 12px}
