:root{
  --bg1:#faf7f1; --bg2:#efe8db; --ink:#2a2722; --muted:#6f6c63; --hint:#9c988c;
  --line:rgba(40,30,10,.08); --line2:rgba(40,30,10,.16);
  --accent:#5b54e6; --accent-d:#4039c7; --teal:#13937a; --teal-d:#0c6e5b;
  --ga:#2563d6; --loc:#0f7e62; --verb:#3b7d1f; --neg:#cf3a3a; --topic:#7a52c4;
  --ok-bg:#e6f4e4; --ok-ink:#2c6d18; --bad-bg:#fbe9e9; --bad-ink:#a32d2d;
  --info-bg:#e9eefb; --info-ink:#3742a3; --warn-bg:#fbf1da; --warn-ink:#8a5a0c;
  --sand:#f7e9cf; --sand-d:#e6cb9a;
  --r:16px; --r-sm:11px; --pill:999px;
  --sh:0 1px 2px rgba(60,45,20,.05),0 10px 26px -16px rgba(60,45,20,.28);
  --sans:-apple-system,"Segoe UI",Roboto,"Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:linear-gradient(180deg,var(--bg1),var(--bg2));min-height:100vh;color:var(--ink);font-family:var(--sans);line-height:1.6;font-size:16.5px;-webkit-font-smoothing:antialiased}
.wrap{max-width:1200px;margin:0 auto;padding:18px 20px 72px}
.narrow{max-width:1040px;margin:0 auto}
.mascot{display:block;flex:none}

header.top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.brand{display:flex;align-items:center;gap:11px}
.btitle{font-weight:600;font-size:18px;letter-spacing:-.01em}
.bsub{font-size:12.5px;color:var(--muted)}
.chip{display:inline-flex;align-items:center;gap:7px;font:inherit;font-size:13px;font-weight:500;padding:8px 14px;border-radius:var(--pill);border:1px solid var(--line2);background:#fff;color:var(--ink);cursor:pointer;box-shadow:var(--sh);transition:.15s}
.chip:hover{transform:translateY(-1px)}
.chip.ghost{box-shadow:none;background:transparent;border-color:transparent;color:var(--muted);padding:7px 10px}
.chip.ghost:hover{background:rgba(0,0,0,.04);transform:none}

/* journey map */
.hero{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--sh);margin-bottom:18px}
.hero .bubble{margin:0}
.journey{position:relative;margin:8px 0 4px;padding-left:6px}
.journey::before{content:"";position:absolute;left:34px;top:30px;bottom:30px;width:3px;background:linear-gradient(var(--sand-d),var(--line2));border-radius:2px}
.jnode{position:relative;display:flex;align-items:center;gap:14px;padding:9px 0;cursor:pointer;transition:.15s}
.jnode.locked{cursor:not-allowed}
.jcirc{flex:none;width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:600;background:#fff;border:2px solid var(--line2);color:var(--muted);z-index:1;box-shadow:var(--sh);transition:.15s}
.jnode:hover .jcirc{transform:scale(1.05)}
.jnode.done .jcirc{background:linear-gradient(160deg,var(--teal),var(--teal-d));border-color:transparent;color:#fff}
.jnode.current .jcirc{background:linear-gradient(160deg,var(--accent),var(--accent-d));border-color:transparent;color:#fff;animation:pulse 2s infinite}
.jnode.avail .jcirc{border-color:var(--accent);color:var(--accent)}
.jnode.locked .jcirc{background:#ece7dc;color:var(--hint);box-shadow:none}
.jtitle{font-weight:500;font-size:15.5px}
.jnode.locked .jtitle{color:var(--hint)}
.jsub{font-size:12.5px;color:var(--muted)}
.jbadge{font-size:11px;font-weight:500;color:var(--accent);background:var(--info-bg);padding:2px 9px;border-radius:var(--pill);margin-left:auto}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(91,84,230,.5)}70%{box-shadow:0 0 0 13px rgba(91,84,230,0)}100%{box-shadow:0 0 0 0 rgba(91,84,230,0)}}

/* lesson chrome */
.lessontop{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.steptxt{font-size:15.5px;font-weight:600;color:var(--ink);letter-spacing:-.01em;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* lesson step pagination — a single sleek control: [ ‹ ]  • • ▭ • •  [ › ] */
.lp{display:inline-flex;align-items:center;gap:4px;flex:none;margin-left:auto;padding:5px 6px;background:#fff;border:1px solid var(--line);border-radius:var(--pill);box-shadow:var(--sh)}
.lp-arrow{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;flex:none;border-radius:50%;border:none;background:transparent;color:var(--muted);font-size:19px;line-height:1;cursor:pointer;transition:background .15s,color .15s,transform .1s}
.lp-arrow:hover:not(:disabled){background:var(--info-bg);color:var(--accent-d)}
.lp-arrow:active:not(:disabled){transform:scale(.9)}
.lp-arrow:disabled{opacity:.28;cursor:default}
.lp-dots{display:flex;align-items:center;gap:7px;padding:0 5px}
/* future step: faint hollow ring · past step: filled accent (muted) · current step: elongated accent pill */
.lp-dot{width:8px;height:8px;flex:none;border-radius:var(--pill);border:1.5px solid var(--sand-d);background:transparent;padding:0;cursor:pointer;transition:width .26s cubic-bezier(.22,1,.36,1),background .2s,border-color .2s,opacity .2s,transform .12s}
.lp-dot:hover{border-color:var(--accent);transform:scale(1.25)}
.lp-dot.done{background:var(--accent);border-color:var(--accent);opacity:.5}
.lp-dot.on{width:24px;background:var(--accent);border-color:var(--accent);opacity:1;box-shadow:0 0 0 3px rgba(91,84,230,.15)}
.lp-dot.on:hover{transform:none}
.lp-count{display:none;font-size:13px;font-weight:600;color:var(--muted);padding:0 6px;min-width:46px;text-align:center}
@media(max-width:560px){.lp-dots{display:none}.lp-count{display:block}}
@media(prefers-reduced-motion:reduce){.lp-dot{transition:background .2s,border-color .2s}}
.pbar{height:9px;background:#eadfca;border-radius:var(--pill);overflow:hidden;margin-bottom:18px}
.pfill{height:100%;background:linear-gradient(90deg,var(--accent),#8a7ff0);border-radius:var(--pill);transition:width .35s ease}

.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;margin-bottom:14px;box-shadow:var(--sh)}
.card.center{text-align:center}
.card.win{background:linear-gradient(170deg,#fff,#f3f1ff)}
.senseirow{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.bubble{background:var(--sand);border-radius:14px;border-top-left-radius:4px;padding:11px 15px;font-size:14.5px;color:#5c4a26;position:relative}
.beatlabel{font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent);font-weight:600;margin:0 0 12px}
.scene{font-size:60px;text-align:center;margin:4px 0 14px;line-height:1}
.jp{font-size:26px;line-height:1.65;letter-spacing:.01em}
.jp.sm{font-size:21px}
.romaji{color:var(--hint);font-size:13px;margin-top:5px}
.gloss{color:var(--muted);font-size:14px;margin-top:3px}
.r-ga{color:var(--ga);font-weight:600}.r-loc{color:var(--loc);font-weight:600}.r-verb{color:var(--verb);font-weight:600}.r-neg{color:var(--neg);font-weight:600}.r-topic{color:var(--topic);font-weight:600}
h2{font-size:19px;font-weight:600;margin:0 0 10px}
h3{font-size:15px;font-weight:600;margin:16px 0 8px}
p{margin:0 0 10px}

.btn{font:inherit;font-size:15px;font-weight:500;padding:11px 20px;border-radius:var(--pill);border:1px solid var(--line2);background:#fff;color:var(--ink);cursor:pointer;transition:.15s;box-shadow:var(--sh)}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(0) scale(.98)}
.btn.primary{background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff;border-color:transparent}
.btn.ghost{box-shadow:none;background:transparent;border-color:transparent;color:var(--muted)}
.btn.ghost:hover{background:rgba(0,0,0,.04);transform:none}
.btn.sm{padding:7px 12px;font-size:14px}
.btn[disabled]{opacity:.4;cursor:not-allowed;box-shadow:none;transform:none}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:16px}

.opt{display:block;width:100%;text-align:left;font:inherit;font-size:16px;margin:8px 0;padding:13px 16px;border-radius:var(--r-sm);border:1px solid var(--line2);background:#fff;cursor:pointer;transition:.12s}
.opt:hover{border-color:var(--accent);background:#fafaff}
.opt.ok{background:var(--ok-bg);border-color:transparent;color:var(--ok-ink);font-weight:500}
.opt.bad{background:var(--bad-bg);border-color:transparent;color:var(--bad-ink)}
.fb{font-size:14px;margin-top:10px;padding:10px 14px;border-radius:var(--r-sm)}
.fb.ok{background:var(--ok-bg);color:var(--ok-ink)}
.fb.bad{background:var(--bad-bg);color:var(--bad-ink)}
.fb.info{background:var(--info-bg);color:var(--info-ink)}
input.txt,textarea.txt{font:inherit;width:100%;padding:11px 14px;border:1px solid var(--line2);border-radius:var(--r-sm);background:#fff;transition:.12s}
input.txt:focus,textarea.txt:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(91,84,230,.15)}
textarea.txt{min-height:70px;resize:vertical}

.tiles{display:flex;flex-wrap:wrap;gap:9px;margin:10px 0}
.tile{font:inherit;font-size:18px;padding:9px 16px;border:1px solid var(--line2);border-radius:var(--r-sm);background:#fff;cursor:pointer;box-shadow:var(--sh);transition:.12s}
.tile:hover{border-color:var(--accent)}
.tile[disabled]{opacity:.3;box-shadow:none}
.assembled{min-height:34px;font-size:22px;padding:8px 0;border-bottom:2px dashed var(--line2)}

.vocab{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px}
.vchip{border:1px solid var(--line);border-radius:var(--r-sm);padding:16px 10px;text-align:center;background:#fff;box-shadow:var(--sh);transition:.15s}
.vchip:hover{transform:translateY(-2px)}
.vchip .em{font-size:42px;line-height:1.1}
.vchip .w{font-size:21px;margin-top:6px}
.vchip .m{font-size:13px;color:var(--muted)}

.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:11px}
.panel{border:1px solid var(--line);border-radius:var(--r-sm);padding:13px;background:#fff;box-shadow:var(--sh)}
.panel.last{border:2px solid var(--verb)}
.panel .em{font-size:32px}

.rubric{display:grid;grid-template-columns:1fr auto;gap:6px 10px;font-size:14px;margin:6px 0 4px}
.rubric .lab{color:var(--muted)}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%}
.key{font-size:15px;color:var(--ink);margin-top:8px;line-height:2.3;font-weight:500}
.note{font-size:12.5px;color:var(--hint)}
/* produce-grade card — what you wrote → Japanese (🔊), Neko's reaction, correction */
.grade-said{background:var(--bg1);border:1px solid var(--line2);border-radius:12px;padding:12px 14px;margin:14px 0 12px}
.gs-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gs-row+.gs-row{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line2)}
.gs-lab{font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);flex:none;width:82px}
.gs-rom{font-size:15px;color:var(--muted);font-style:italic}
.gs-jp{font-size:21px;color:var(--ink);font-weight:500;line-height:1.5}
.grade-fix{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#fff;border:1px solid var(--line2);border-left:3px solid var(--verb);border-radius:10px;padding:10px 12px;margin:10px 0 0}
.gf-lab{font-size:12px;font-weight:700;color:var(--verb);flex:none}
.grade-fix .jp{font-size:18px}
.grade-followup{display:flex;gap:11px;align-items:flex-start;background:#f4f3ff;border:1px solid #e0ddfa;border-radius:12px;padding:12px 14px;margin:12px 0 0}
.gf-ico{font-size:20px;line-height:1.3;flex:none}
.gf-body{flex:1;min-width:0}
.gf-q{font-size:14.5px;color:var(--ink);line-height:1.55;margin-bottom:9px}
.gf-actions{display:flex;gap:8px;flex-wrap:wrap}
/* Produce-beat mic dictation (Web Speech API) */
.mic-btn{display:inline-flex;align-items:center;gap:6px}
.mic-btn .mic-ico{font-size:15px;line-height:1;display:inline-block}
.mic-btn.rec{background:#e0463c;border-color:#e0463c;color:#fff;animation:mic-pulse 1.3s infinite}
.mic-btn.rec .mic-ico{animation:mic-throb .9s ease-in-out infinite}
@keyframes mic-pulse{0%{box-shadow:0 0 0 0 rgba(224,70,60,.5)}70%{box-shadow:0 0 0 12px rgba(224,70,60,0)}100%{box-shadow:0 0 0 0 rgba(224,70,60,0)}}
@keyframes mic-throb{0%,100%{transform:scale(1)}50%{transform:scale(1.18)}}
.mic-note{font-size:13px;color:var(--muted);margin:8px 2px 2px;min-height:18px}
@media(prefers-reduced-motion:reduce){.mic-btn.rec,.mic-btn.rec .mic-ico{animation:none}}
/* ---- Onboarding tour: spotlight overlay + Neko-sensei card ---- */
.tour-root{position:fixed;inset:0;z-index:9000;pointer-events:none}
.tour-overlay{position:fixed;inset:0;background:rgba(16,12,9,.74);pointer-events:auto;opacity:0;transition:opacity .35s ease;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%}
.tour-root.show .tour-overlay{opacity:1}
.tour-ring{position:fixed;left:0;top:0;width:0;height:0;border:2.5px solid rgba(245,197,66,.95);border-radius:14px;pointer-events:none;opacity:0;box-shadow:0 0 0 3px rgba(91,84,230,.22),0 0 22px rgba(245,197,66,.5);transition:left .42s cubic-bezier(.5,0,.2,1),top .42s cubic-bezier(.5,0,.2,1),width .42s cubic-bezier(.5,0,.2,1),height .42s cubic-bezier(.5,0,.2,1),opacity .3s ease;animation:tour-pulse 1.9s ease-in-out infinite}
.tour-root.show .tour-ring{opacity:1}
@keyframes tour-pulse{0%,100%{box-shadow:0 0 0 3px rgba(91,84,230,.20),0 0 20px rgba(245,197,66,.42)}50%{box-shadow:0 0 0 6px rgba(91,84,230,.30),0 0 34px rgba(245,197,66,.72)}}
.tour-card{position:fixed;left:50%;top:50%;width:330px;max-width:calc(100vw - 32px);background:#fff;border:1px solid var(--line2,#e3ddd0);border-radius:16px;box-shadow:0 18px 50px -12px rgba(20,15,8,.55);padding:20px 18px 16px;pointer-events:auto;opacity:0;transform:translateY(10px);transition:left .42s cubic-bezier(.5,0,.2,1),top .42s cubic-bezier(.5,0,.2,1),opacity .35s ease .05s,transform .35s ease .05s;z-index:9001}
.tour-root.show .tour-card{opacity:1;transform:none}
.tour-neko{position:absolute;top:-30px;left:16px;width:60px;height:60px;filter:drop-shadow(0 5px 9px rgba(0,0,0,.2))}
.tour-neko svg{display:block;width:56px;height:56px}
.tour-skip{position:absolute;top:9px;right:11px;background:none;border:none;color:var(--muted,#6f6c63);font:inherit;font-size:13px;cursor:pointer;padding:4px 7px;border-radius:8px}
.tour-skip:hover{background:rgba(0,0,0,.05);color:var(--ink,#2a2722)}
.tour-bubble{margin-top:28px}
.tour-text{margin:0 0 15px;font-size:14.5px;line-height:1.56;color:var(--ink,#2a2722)}
.tour-foot{display:flex;align-items:center;justify-content:space-between;gap:12px}
.tour-dots{display:flex;gap:6px}
.tdot{width:7px;height:7px;border-radius:50%;background:rgba(0,0,0,.16);transition:width .25s,background .25s}
.tdot.on{background:var(--accent,#5b54e6);width:18px;border-radius:4px}
.tdot.done{background:rgba(91,84,230,.45)}
.tour-next{font-size:14px;padding:8px 16px}
@media(max-width:560px){.tour-card{width:calc(100vw - 28px)}.tour-neko{top:-26px}}
@media(prefers-reduced-motion:reduce){.tour-overlay,.tour-ring,.tour-card{transition:opacity .2s ease}.tour-ring{animation:none}}
.cookie-reward{display:flex;align-items:center;gap:12px;background:linear-gradient(160deg,#fbf1dc,#f6e7c8);border:1px solid #e8d3a8;border-radius:12px;padding:11px 14px;margin:12px 0 0}
.ckie{font-size:30px;line-height:1;position:relative;display:inline-block;flex:none;transform-origin:center;animation:ckiePop .5s ease both}
.ckie-txt{font-size:14px;color:#7a560f;font-weight:500;line-height:1.5}
.ck-crumb{position:absolute;width:4px;height:4px;border-radius:50%;background:#9a6a3a;left:48%;top:62%;opacity:0;animation:ckCrumb 1.8s ease .5s infinite}
.ck-crumb:nth-child(2){left:38%;animation-delay:.9s}
.ck-crumb:nth-child(3){left:60%;animation-delay:1.3s}
@keyframes ckiePop{0%{transform:scale(0) rotate(-28deg);opacity:0}60%{transform:scale(1.22) rotate(8deg)}100%{transform:scale(1) rotate(0);opacity:1}}
@keyframes ckCrumb{0%{opacity:0;transform:translate(0,0)}25%{opacity:1}100%{opacity:0;transform:translate(-3px,15px)}}
@media(prefers-reduced-motion:reduce){.ckie,.ck-crumb{animation:none}.ck-crumb{display:none}}
.stub{font-size:11.5px;color:var(--warn-ink);background:var(--warn-bg);padding:8px 12px;border-radius:var(--r-sm);margin-top:12px}
.bignum{font-size:40px;font-weight:600;margin:6px 0}

/* kana */
.kana-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:6px}
.kcell{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:14px 6px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;cursor:pointer;box-shadow:var(--sh);transition:.12s}
.kcell:hover{border-color:var(--accent);transform:translateY(-2px)}
.kcell.empty{background:transparent;border:none;box-shadow:none;cursor:default}
.kcell.lit{background:linear-gradient(160deg,var(--accent),var(--accent-d));border-color:transparent}
.kcell.lit .kk,.kcell.lit .kr{color:#fff}
.kk{font-size:30px}
.kr{font-size:13px;color:var(--hint);margin-top:3px}
.ktwin{font-size:12px;color:var(--accent-d);margin-top:2px;font-weight:500}
.krecall{display:grid;grid-template-columns:repeat(auto-fit,minmax(108px,1fr));gap:11px}
.kq{display:flex;flex-direction:column;align-items:center;gap:7px;padding:12px 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;box-shadow:var(--sh)}
.kq.ok{background:var(--ok-bg);border-color:transparent}
.kq.bad{background:var(--bad-bg);border-color:transparent}
.kqk{font-size:34px}
.kqi{width:84px;text-align:center;padding:7px}
.kqa{font-size:13px;color:var(--muted)}
.kq.ok .kqa{color:var(--ok-ink)}.kq.bad .kqa{color:var(--bad-ink)}
.fbreact{display:flex;gap:10px;align-items:flex-start;text-align:left}
.fbm{flex:none;margin-top:-1px}
#khook .bubble{min-height:38px}
#khook{position:sticky;top:6px;z-index:6;background:#fff;padding:8px;border-radius:12px;box-shadow:0 6px 16px -10px rgba(40,30,10,.45)}
.prose{max-width:64ch;font-size:16.5px;line-height:1.78}
/* premium centered "textbook" column for text-heavy beats — caps the empty space on wide desktops */
.explaincard{max-width:880px;margin-left:auto;margin-right:auto}
.exwrap{max-width:64ch}
.exrow{margin:8px 0}
.exhead{display:flex;justify-content:space-between;align-items:center;margin:12px 0 2px}
.exhead-l{font-size:12px;color:var(--hint);text-transform:uppercase;letter-spacing:.04em}
.exwrap.rom-hidden .romaji{display:none}
body.romaji-off .romaji,body.romaji-off .vx-rom{display:none}
.hdr-right{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
@media(max-width:560px){
  header.top{gap:8px 10px;margin-bottom:12px}
  .brand{gap:8px}
  .btitle{font-size:16px}
  .bsub{font-size:11px}
  .hdr-right{gap:6px}
  .hdr-right .chip{padding:7px 10px;font-size:12.5px;gap:5px}
  .chip.acct{font-size:0}                 /* hide the account name, keep just the avatar */
  .chip.acct .acct-av{font-size:11px}
  .bmc-mini .bmc-label{display:none}      /* keep the cute cup+cookie, drop the word "Coffee" */
  .bmc-mini{padding:8px 10px}
  .lp-arrow{width:38px;height:38px;font-size:21px}        /* bigger lesson stepper arrows */
}
.chip.xp{cursor:default;color:var(--accent-d)}
.mascot{overflow:visible}
.m-idle{animation:m-bob 3.2s ease-in-out infinite}
.m-happy{animation:m-pop .45s ease both}
.m-cheer{animation:m-pop .5s ease both}
.m-oops{animation:m-shake .42s ease both}
.m-idle.m-happy{animation:m-pop .5s ease both,m-bob 3.2s ease-in-out infinite .5s}
.m-idle.m-cheer{animation:m-pop .5s ease both,m-bob 3.2s ease-in-out infinite .5s}
.m-idle.m-oops{animation:m-shake .42s ease both,m-bob 3.2s ease-in-out infinite .42s}
.m-paw{transform-box:fill-box;transform-origin:bottom center;animation:m-wave 1.7s ease-in-out infinite}
.m-eyes{transform-box:fill-box;transform-origin:center;animation:m-blink 5.5s infinite}
@keyframes m-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes m-wave{0%,100%{transform:rotate(3deg)}50%{transform:rotate(-15deg)}}
@keyframes m-blink{0%,90%,100%{transform:scaleY(1)}95%{transform:scaleY(.12)}}
@keyframes m-pop{0%{transform:scale(.6)}60%{transform:scale(1.12)}100%{transform:scale(1)}}
@keyframes m-shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-3px)}60%{transform:translateX(3px)}}
.confetti{position:relative;height:0}
.confetti span{position:absolute;top:-6px;width:8px;height:8px;border-radius:2px;animation:m-fall 1.1s ease-in forwards}
@keyframes m-fall{0%{transform:translateY(-8px) rotate(0);opacity:1}100%{transform:translateY(80px) rotate(220deg);opacity:0}}
@media (prefers-reduced-motion:reduce){.m-idle,.m-happy,.m-cheer,.m-oops,.m-paw,.m-eyes,.confetti span{animation:none}}
.r-obj{color:#b3602a;font-weight:600}
.spk{font:inherit;font-size:12px;line-height:1;padding:3px 8px;border:0.5px solid var(--line2);border-radius:var(--pill);background:#fff;cursor:pointer;vertical-align:middle;margin-left:3px;box-shadow:none}
.spk:hover{background:#f0efe9;border-color:var(--accent)}
.kq .spk{margin:2px 0 0}
@media(max-width:560px){.spk{padding:7px 11px;font-size:13px;margin-left:4px}}   /* bigger 🔊 tap target on touch (placed after base .spk so it wins the cascade) */

/* desktop dashboard (home) */
.dash{display:grid;grid-template-columns:minmax(0,1fr);gap:22px;margin-top:6px}
@media(min-width:900px){.dash{grid-template-columns:minmax(0,1fr) 300px}}
.dmain{min-width:0}
.side{display:flex;flex-direction:column;gap:14px}
.continue{display:flex;gap:18px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;box-shadow:var(--sh);margin-bottom:22px}
.continue .mascot{flex:none}
.ctxt{flex:1;min-width:0}
.clabel{font-size:12px;color:var(--accent-d);font-weight:600;letter-spacing:.05em;text-transform:uppercase}
.ctitle{font-size:21px;font-weight:600;margin:3px 0 1px;letter-spacing:-.01em}
.csub{font-size:13.5px;color:var(--muted)}
.levelbar{height:10px;background:#eadfca;border-radius:var(--pill);overflow:hidden;margin:13px 0 5px}
.levelbar>div{height:100%;background:linear-gradient(90deg,var(--teal),#3fb58f);border-radius:var(--pill);transition:width .4s ease}
.levelmeta{font-size:12.5px;color:var(--muted)}
.modblock{margin-bottom:22px}
.modlabel{font-size:14px;font-weight:600;margin:0 0 11px;color:var(--ink)}
.cgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(195px,1fr));gap:12px}
.ccard{position:relative;display:flex;gap:12px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:13px 14px;box-shadow:var(--sh);transition:.15s;cursor:pointer;min-height:80px}
.ccard:hover{transform:translateY(-2px)}
.ccard.current{border:2px solid var(--accent)}
.ccard.done{border-color:transparent;background:#f1f8ee}
.ccard.locked{cursor:default;opacity:.5;box-shadow:none;background:var(--bg1)}
.ccard.locked:hover{transform:none}
.cico{flex:none;width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:600;background:var(--sand);color:#7a5a1e}
.ccard.done .cico{background:linear-gradient(160deg,var(--teal),var(--teal-d));color:#fff}
.ccard.current .cico{background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff}
.ccard.locked .cico{background:#e7e2d7;color:var(--hint)}
.cbody{min-width:0}
.cname{font-size:14.5px;font-weight:500;line-height:1.3}
.cpat{font-size:12px;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cstate{font-size:12px;font-weight:500;margin-top:7px}
.cstate.go{color:var(--accent-d)}.cstate.ok{color:var(--teal-d)}.cstate.lk{color:var(--hint)}
.sidecard{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--sh)}
.sidecard h3{margin:0 0 12px}
.statgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stat{background:var(--bg1);border-radius:var(--r-sm);padding:12px}
.stat .n{font-size:24px;font-weight:600;line-height:1.1}
.stat .l{font-size:12px;color:var(--muted);margin-top:2px}

/* kana writer — "how to write" popup (animated stroke order + trace pad) */
.btn.xs{font-size:12px;padding:3px 9px;vertical-align:middle}
.kwbtn{margin-left:6px}
.kw-back{position:fixed;inset:0;background:rgba(30,22,8,.46);display:flex;align-items:center;justify-content:center;z-index:60;padding:18px;animation:kw-fade .15s ease}
@keyframes kw-fade{from{opacity:0}to{opacity:1}}
.kw-modal{position:relative;width:100%;max-width:420px;background:var(--bg1);border:1px solid var(--line2);border-radius:var(--r);box-shadow:0 24px 60px -18px rgba(40,30,10,.55);padding:18px 20px 20px;max-height:94vh;overflow:auto;animation:m-pop .18s ease}
.kw-x{position:absolute;top:8px;right:12px;border:none;background:transparent;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.kw-head{display:flex;align-items:center;gap:12px;margin:2px 0 4px}
.kw-char{font-size:50px;font-weight:600;line-height:1}
.kw-rom{font-size:18px;color:var(--muted);font-weight:500}
.kw-stage{background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);margin:8px auto 10px;width:100%;max-width:280px;aspect-ratio:1/1}
.kw-svg{width:100%;height:100%;display:block}
.kw-svg path{fill:none;stroke-linecap:round;stroke-linejoin:round}
.kw-ghost path{stroke:var(--line2);stroke-width:var(--kw-ghost-stroke,5)}
.kw-anim path{stroke:var(--accent);stroke-width:var(--kw-anim-stroke,6.5)}
.kw-numc{fill:var(--accent);opacity:.92}
.kw-numt{fill:#fff;font-size:9px;font-weight:700;font-family:var(--sans)}
.kw-nodata{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:14px;text-align:center}
.kw-big{font-size:92px;font-weight:600;line-height:1}
.kw-ctrls{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;margin-bottom:8px}
.kw-speed{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:8px}
.kw-speed input{width:92px}
.kw-mnem{display:flex;align-items:flex-start;gap:10px;background:var(--sand);border-radius:var(--r-sm);padding:10px 12px;margin:6px 0 12px}
.kw-mnem .bubble{margin:0;font-size:14px}
.kw-trace{border-top:1px solid var(--line);padding-top:12px}
.kw-tracehd{display:flex;align-items:center;justify-content:space-between;font-weight:500;font-size:14px;margin-bottom:8px;gap:8px;flex-wrap:wrap}
.kw-traceact{display:flex;gap:6px}
#kw-canvas{display:block;margin:0 auto;width:100%;max-width:280px;aspect-ratio:1/1;background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);touch-action:none;cursor:crosshair}

/* kanji modal extras (readings + dual mnemonics + examples) */
.kw-readings{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 12px}
.kw-pill{font-size:13px;padding:4px 11px;border-radius:var(--pill);background:var(--bg2);color:var(--ink)}
.kw-pill b{font-weight:600}
.kw-pill.onp{background:var(--info-bg);color:var(--info-ink)}
.kw-pill.kunp{background:var(--ok-bg);color:var(--ok-ink)}
.kw-pill.spill{background:var(--bg2);color:var(--muted)}
.kw-card{border-radius:var(--r-sm);padding:10px 12px;margin-bottom:10px;font-size:14px;line-height:1.5}
.kw-card.pic{background:#e1f3ee;color:#0c5446}
.kw-card.storyc{background:#efe9fb;color:#3a2b73}
.kw-readhint{font-size:12px;color:var(--muted);margin:-4px 0 12px;line-height:1.55}
.kw-readhint b{color:var(--ink)}
.kw-picto{display:flex;align-items:center;justify-content:center;gap:14px;margin:2px 0 10px}
.kw-pg{font-size:46px;font-weight:600;line-height:1;color:#0c5446;animation:picto-pulse 3s ease-in-out infinite}
.kw-arrow{font-size:22px;color:#0c5446;opacity:.55}
.kw-po{font-size:40px;line-height:1}
@keyframes picto-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.09)}}
@media(prefers-reduced-motion:reduce){.kw-pg{animation:none}}
.kw-cardh{font-size:12px;font-weight:600;margin-bottom:3px;opacity:.85}
.kw-exhd{font-size:12px;color:var(--hint);margin:8px 0 2px}
.kw-ex{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 0;border-top:1px solid var(--line)}
.kw-ex .exw{font-size:17px;font-weight:500}
.kw-ex .exm{font-size:13px;color:var(--muted)}
.kw-sent{padding:9px 0;border-top:1px solid var(--line)}
.kw-sentline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.kw-sentjp{font-size:18px;line-height:1.6}
.kw-sentm{font-size:12.5px;color:var(--muted);margin-top:3px}

/* kanji browser screen */
.kjgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(124px,1fr));gap:10px;margin-top:6px}
.kjcard{display:flex;flex-direction:column;align-items:center;gap:3px;padding:14px 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;box-shadow:var(--sh);cursor:pointer;transition:.12s;font:inherit;color:var(--ink)}
.kjcard:hover{border-color:var(--accent);transform:translateY(-2px)}
.kjchar{font-size:38px;font-weight:600;line-height:1.1}
.kjmean{font-size:12.5px;color:var(--muted);text-align:center;line-height:1.3}
.kjmeta{font-size:11px;color:var(--hint)}

/* ── desktop two-column kanji writer (≥ 760px) ──────────────────────── */
@media(min-width:760px){
  .kw-modal{
    max-width:960px;
    display:grid;
    grid-template-columns:minmax(340px,420px) 1fr;
    grid-template-areas:"head head" "stage body" "ctrls body" "trace body";
    column-gap:34px;
    row-gap:16px;
    align-items:start;
    padding:28px 34px 32px;
  }
  .kw-head{grid-area:head}
  .kw-stage{grid-area:stage;max-width:400px;margin-left:0;margin-right:0}
  .kw-ctrls{grid-area:ctrls}
  .kw-trace{grid-area:trace;border-top:none;padding-top:0}
  .kw-body{grid-area:body;display:flex;flex-direction:column;gap:14px;padding-top:2px}
  .kw-card{font-size:15.5px;line-height:1.65;padding:14px 16px}
  .kw-readings{margin-bottom:4px}
  #kw-canvas{max-width:400px}
}

/* ── situational skit avatars (chat/manga layout) ─────────────────────── */
.panels.chat{display:flex;flex-direction:column;gap:12px;max-width:640px;margin:0 auto}
.panel.side-left,.panel.side-right{display:flex;gap:12px;align-items:flex-start;background:transparent;border:none;box-shadow:none;padding:0}
.panel.side-right{flex-direction:row-reverse}
.avatar{display:flex;flex-direction:column;align-items:center;gap:4px;flex:none;min-width:52px}
.av-icon{width:44px;height:44px;border-radius:50%;background:var(--sand);border:2px solid var(--role-accent,#cfa17e);display:flex;align-items:center;justify-content:center;font-size:20px;line-height:1}
.av-name{font-size:11px;color:var(--muted);text-align:center;max-width:52px;line-height:1.2}
.panel-content{flex:1;min-width:0;border-radius:12px;padding:10px 14px;background:#fff;border:1px solid var(--line);box-shadow:var(--sh)}
.panel.side-left .panel-content{border-top-left-radius:4px;border-left:3px solid var(--role-accent,var(--accent))}
.panel.side-right .panel-content{border-top-right-radius:4px;border-right:3px solid var(--role-accent,var(--accent))}
.role-student{--role-accent:#5b54e6}
.role-teacher{--role-accent:#13937a}
.role-combini{--role-accent:#e8943f}
.role-taxi{--role-accent:#f5c542}
.role-friend{--role-accent:#d4537e}
.role-stranger{--role-accent:#9a8f7d}
.role-staff{--role-accent:#0f7e62}
.role-customer{--role-accent:#3b7d1f}

/* ── "Buy me a coffee" button ─────────────────────────────────────────── */
.bmc{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:13.5px;font-weight:500;padding:9px 15px;border-radius:var(--pill);border:1px solid var(--line2);background:var(--bg1);color:var(--ink);text-decoration:none;cursor:pointer;position:relative;transition:transform .15s,box-shadow .15s;overflow:visible}
.bmc:hover{transform:translateY(-1px);box-shadow:var(--sh);cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Crect x='4' y='10' width='14' height='11' rx='2' fill='%239a6a3a'/%3E%3Cellipse cx='11' cy='10' rx='7' ry='3' fill='%236f4a25'/%3E%3Cpath d='M18 12 Q22 11 21 16 Q19 18 18 15' fill='%239a6a3a'/%3E%3C/svg%3E") 8 8, pointer}
.bmc-mini{padding:8px 14px;font-size:14px;gap:8px;box-shadow:none}
.bmc-cookie{position:relative;display:inline-flex;align-items:center;line-height:1}
.bmc-cookiesvg{display:block}
.ckb{fill:#000}
.bmc:hover .ckb{animation:ckbite .45s steps(3) forwards}
.bmc:hover .b1{animation-delay:.1s}
.bmc:hover .b2{animation-delay:.5s}
.bmc:hover .b3{animation-delay:.9s}
@keyframes ckbite{to{r:7px}}
.crumb{position:absolute;width:2.6px;height:2.6px;border-radius:50%;background:#9a6a3a;opacity:0;bottom:1px;pointer-events:none}
.crumb.c1{left:16%}.crumb.c2{left:46%}.crumb.c3{left:72%}
.bmc:hover .crumb{animation:crumbfall .55s ease-in forwards}
.bmc:hover .c1{animation-delay:.45s}
.bmc:hover .c2{animation-delay:.85s}
.bmc:hover .c3{animation-delay:1.2s}
@keyframes crumbfall{0%{opacity:.9;transform:translateY(0)}100%{opacity:0;transform:translateY(11px)}}
.bmc-cup{position:relative;font-size:18px;display:inline-block;line-height:1}
.steam{position:absolute;bottom:calc(100% - 2px);width:3px;border-radius:var(--pill);background:#c9b89a;opacity:0;pointer-events:none}
.steam.s1{left:18%;height:9px}
.steam.s2{left:46%;height:12px}
.steam.s3{left:74%;height:9px}
.bmc:hover .steam{animation:steam-rise 1.1s ease-in-out infinite}
.bmc:hover .s1{animation-delay:0s}
.bmc:hover .s2{animation-delay:.28s}
.bmc:hover .s3{animation-delay:.54s}
@keyframes steam-rise{0%{opacity:0;transform:translateY(4px) scaleY(.6)}30%{opacity:.75}100%{opacity:0;transform:translateY(-18px) scaleY(1.15)}}
@media(prefers-reduced-motion:reduce){.steam,.ckb,.crumb{animation:none!important;transition:none!important}}

/* ── kanji story intro overlay ───────────────────────────────────────── */
.ki-back{position:fixed;inset:0;background:rgba(30,22,8,.52);display:flex;align-items:center;justify-content:center;z-index:70;padding:18px;animation:kw-fade .15s ease}
.ki-modal{position:relative;width:100%;max-width:620px;background:var(--bg1);border:1px solid var(--line2);border-radius:var(--r);box-shadow:0 24px 60px -18px rgba(40,30,10,.55);padding:40px 50px 32px;max-height:92vh;overflow:auto;text-align:center}
.ki-x{position:absolute;top:10px;right:14px;border:none;background:transparent;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.ki-beat{animation:ki-in .35s ease}
.ki-title{font-size:14px;font-weight:600;color:var(--accent-d);letter-spacing:.03em;margin:0 0 8px;text-transform:uppercase}
.ki-glyph{font-size:80px;font-weight:600;line-height:1.05;margin:0 0 12px}
/* creative intro: the kanji morphs into the real-world picture it depicts, then back */
.ki-glyph-wrap{position:relative;display:inline-flex;align-items:center;justify-content:center;width:130px;height:104px;margin:0 0 14px}
.ki-glyph-wrap .ki-glyph,.ki-glyph-picto{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;line-height:1}
.ki-glyph-picto{font-size:66px}
.ki-morphing{animation:ki-morphA 4.2s ease-in-out infinite}
.ki-glyph-wrap .ki-glyph-picto{animation:ki-morphB 4.2s ease-in-out infinite}
@keyframes ki-morphA{0%,38%{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0)}50%,86%{opacity:0;transform:translate(-50%,-50%) scale(.6) rotate(-10deg)}100%{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@keyframes ki-morphB{0%,38%{opacity:0;transform:translate(-50%,-50%) scale(.6)}50%,86%{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(4deg)}100%{opacity:0;transform:translate(-50%,-50%) scale(.6)}}
@media(prefers-reduced-motion:reduce){.ki-morphing{animation:none}.ki-glyph-picto{display:none}}
.ki-hook{font-size:15px;color:var(--muted);max-width:34ch;margin:0 auto;line-height:1.65}
.ki-progress{display:flex;gap:7px;justify-content:center;margin:20px 0 4px}
.ki-dot{width:8px;height:8px;border-radius:50%;background:var(--line2);transition:.2s}
.ki-dot.on{background:var(--accent);transform:scale(1.2)}
.ki-controls{display:flex;gap:10px;justify-content:center;margin-top:22px}
.ki-again{font-size:12.5px;color:var(--hint);cursor:pointer;background:none;border:none;font:inherit;margin-top:10px;text-decoration:underline;display:block;margin-left:auto;margin-right:auto}
@keyframes ki-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ── homework module (練習 A/B + 読み物 reading + 会話 video) ───────────── */
.hwcard{display:flex;gap:14px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;margin-bottom:12px;box-shadow:var(--sh)}
.hw-em{font-size:40px;line-height:1;flex:none}
.hw-q{flex:1;min-width:0}
.hw-q .opt{margin:7px 0}
.hw-para{margin-top:10px}
.hw-pline{padding:9px 0;border-bottom:1px dashed var(--line2)}
.hw-pline:last-child{border-bottom:none}
.hw-pline .jp{font-size:19px}
.hw-video{background:#221f1b;border-radius:var(--r);padding:16px 16px 20px;margin-bottom:14px;box-shadow:var(--sh)}
.hw-videohd{display:flex;justify-content:space-between;align-items:center;color:#e8e0d4;font-size:13px;font-weight:500;margin-bottom:14px}
.hw-videohd .btn{color:#e8e0d4;border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.06)}
.hw-video .panels.chat{margin:0 auto}

/* ── foundations: particle primer cards ──────────────────────────────── */
.pcards{display:flex;flex-direction:column;gap:12px;margin-top:6px}
.pcard{display:flex;gap:16px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--sh)}
.pmark{font-size:46px;font-weight:700;line-height:1;flex:none;min-width:62px;text-align:center}
.pbody{flex:1;min-width:0}
.prole{font-size:16px;text-transform:capitalize}
.pgloss{color:var(--hint);font-weight:400;font-size:13px;text-transform:none;margin-left:4px}
.pwhat{font-size:14.5px;color:var(--muted);margin:4px 0 10px;line-height:1.55}
.pex{border-top:1px dashed var(--line2);padding-top:10px}

/* ── 会話 skit: two figures act out the conversation in a scene ──────────── */
.skit-stage{position:relative;height:330px;border-radius:var(--r);overflow:hidden;box-shadow:var(--sh);margin-bottom:12px;background:linear-gradient(180deg,#eaeefb 0%,#f6ecda 58%,#efe1c6 100%)}
.skit-bg{position:absolute;inset:0;background-size:cover;background-position:center bottom;opacity:.95}
.skit-floor{position:absolute;left:0;right:0;bottom:0;height:30%;background:linear-gradient(180deg,rgba(120,90,40,0),rgba(120,90,40,.14))}
.skit-fig{position:absolute;bottom:8px;height:64%;z-index:2;transition:opacity .35s,transform .35s}
.skit-fig.left{left:6%}
.skit-fig.right{right:6%}
.skit-fig.dim{opacity:.5}
.skit-fig.talking{transform:scale(1.05)}
.skit-charimg{height:100%;width:auto;display:block;transform-origin:center bottom;filter:drop-shadow(0 8px 10px rgba(40,30,10,.25))}
.skit-fig.talking .skit-charimg{animation:skit-bob .62s ease-in-out infinite}
@keyframes skit-bob{0%,100%{transform:translateY(0) rotate(-1.8deg)}50%{transform:translateY(-5px) rotate(1.8deg)}}
.skit-name{position:absolute;left:0;right:0;bottom:-2px;text-align:center;font-size:12px;font-weight:500;color:#5c4a26;text-shadow:0 1px 2px rgba(255,255,255,.6)}
.skit-bubble{position:absolute;top:16px;max-width:56%;background:#fff;border:1px solid var(--line);border-radius:16px;padding:11px 15px;box-shadow:0 6px 18px -8px rgba(40,30,10,.4);opacity:0;transform:translateY(8px);transition:opacity .25s,transform .25s;z-index:3}
.skit-bubble.show{opacity:1;transform:none}
.skit-bubble.left{left:5%;border-bottom-left-radius:4px}
.skit-bubble.right{right:5%;border-bottom-right-radius:4px}
.skit-bubble .jp{font-size:20px}
.skit-bubble .romaji,.skit-bubble .gloss{margin-top:3px}
.skit-controls{position:absolute;top:10px;right:12px;z-index:4}
.skit-controls .btn{background:rgba(255,255,255,.85)}
.skit-transcript{margin:-2px 0 12px}
.skit-transcript>summary{cursor:pointer;font-size:13px;color:var(--accent-d);font-weight:500;list-style:none}
.skit-transcript>summary::-webkit-details-marker{display:none}
.skit-transcript>summary::before{content:"▸ ";color:var(--hint)}
.skit-transcript[open]>summary::before{content:"▾ "}
.skit-tline{font-size:14px;padding:6px 0;border-top:1px solid var(--line);line-height:1.5}
@media(prefers-reduced-motion:reduce){.skit-fig.talking .skit-charimg{animation:none}}
@media(max-width:560px){.skit-bubble{max-width:70%}.skit-fig{height:52%}}

/* ── verbs-first block (action words: visual + example + say-it) ───────── */
.verbs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(244px,1fr));gap:12px;margin-top:6px}
.verbcard{display:flex;flex-direction:column;gap:6px;background:#fff;border:1px solid var(--line);border-radius:var(--r-sm);padding:14px 15px;box-shadow:var(--sh);transition:transform .15s}
.verbcard:hover{transform:translateY(-2px)}
.verb-em{font-size:42px;line-height:1;align-self:flex-start;transform-origin:bottom center;animation:verb-bob 2.6s ease-in-out infinite}
@keyframes verb-bob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-4px) rotate(3deg)}}
.verb-main{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 8px}
.verb-jp{font-size:22px;font-weight:600}
.verb-rom{font-size:13px;color:var(--hint)}
.verb-mean{font-size:13.5px;color:var(--muted);flex-basis:100%}
.verb-ex{border-top:1px dashed var(--line2);padding-top:8px;margin-top:2px}
.vx-jp{font-size:16px}
.vx-rom{font-size:12px;color:var(--hint);display:block;margin-top:2px}
.vx-gloss{font-size:12.5px;color:var(--muted);display:block}
@media(prefers-reduced-motion:reduce){.verb-em{animation:none}}

/* ── kaiwa (会話): reveal the conversation one bubble at a time, medium speed ── */
.panels.chat.kaiwa .panel{opacity:0;animation:kaiwa-in .55s ease forwards}
.kaiwa-comp{opacity:0;animation:kaiwa-in .55s ease forwards}
@keyframes kaiwa-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.panels.chat.kaiwa .panel,.kaiwa-comp{opacity:1;animation:none}}

/* optional "peek at the kanji" disclosure inside the Vocabulary beat (kanji not taught yet) */
.kanji-peek{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.kanji-peek>summary{cursor:pointer;font-size:13px;color:var(--accent-d);font-weight:500;list-style:none;user-select:none}
.kanji-peek>summary::-webkit-details-marker{display:none}
.kanji-peek>summary::before{content:"▸ ";color:var(--hint)}
.kanji-peek[open]>summary::before{content:"▾ "}
.kanji-peek .vocab{margin-top:10px}

/* ── adjective contrast grid (Explain beat — opposites, side by side) ──── */
.adj-contrast{margin:20px 0 8px}
.ctr-h{font-size:16.5px;font-weight:700;color:var(--ink);margin:0 0 14px;display:flex;align-items:center;gap:9px}
.ctr-h::before{content:"⇄";display:inline-flex;align-items:center;justify-content:center;width:27px;height:27px;border-radius:8px;background:var(--info-bg);color:var(--accent-d);font-size:16px;flex:none}
.ctr-grid{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:720px){.ctr-grid{grid-template-columns:1fr 1fr;gap:18px}}
.ctr-pair{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden;transition:transform .15s,box-shadow .15s}
.ctr-pair:hover{transform:translateY(-2px);box-shadow:0 2px 6px rgba(60,45,20,.06),0 24px 48px -26px rgba(60,45,20,.4)}
.ctr-cell{align-self:stretch;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:2px;padding:20px 12px 17px}
.ctr-l{background:linear-gradient(180deg,#fffaf1,#f8edd9)}
.ctr-r{background:linear-gradient(180deg,#f4fbf8,#e4f1ec)}
.ctr-emoji{font-size:48px;line-height:1;margin-bottom:6px;filter:drop-shadow(0 5px 9px rgba(60,45,20,.18))}
.ctr-jp{font-size:23px;font-weight:700;color:var(--ink);display:inline-flex;align-items:center;gap:6px}
.ctr-rom{font-size:12.5px;color:var(--hint)}
.ctr-en{font-size:14.5px;color:var(--muted);font-weight:500}
.ctr-vs{margin:0 9px;flex:none;width:33px;height:33px;display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:800;text-transform:uppercase;letter-spacing:.02em;color:var(--accent-d);background:#fff;border:1px solid var(--line2);border-radius:var(--pill);box-shadow:var(--sh)}
.ctr-note{font-size:13.5px;color:var(--muted);margin:14px 0 0;text-align:center;font-style:italic}
.ctr-pair .spk{transform:scale(.85)}
@media(prefers-reduced-motion:reduce){.ctr-pair{transition:none}.ctr-pair:hover{transform:none}}

/* ── adjective conjugation table (Explain beat) — the changing suffix is colour-coded ───── */
.conj{margin:20px 0 6px}
.conj-h{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:12px}
.conj-word{font-size:24px;font-weight:700;color:var(--ink)}
.conj-mean{font-size:14px;color:var(--muted)}
.conj-title{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-d);margin-left:auto}
.conj-grid{display:grid;grid-template-columns:auto 1fr 1fr;gap:1px;background:var(--line2);border:1px solid var(--line2);border-radius:14px;overflow:hidden;box-shadow:var(--sh)}
.conj-grid>div{background:#fff;padding:13px 15px}
.cj-corner{background:var(--bg2)!important}
.cj-colh{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--verb);background:#f3faef!important;display:flex;align-items:center}
.cj-colh-neg{color:var(--neg);background:#fdf2f2!important}
.cj-rowlabel{font-size:13px;font-weight:700;color:var(--ink);background:var(--bg2)!important;display:flex;align-items:center}
.cj-cell{display:flex;flex-direction:column;gap:3px}
.cj-form{font-size:20px;font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap;line-height:1.3}
.cj-stem{color:var(--ink)}
.cj-suf{font-weight:800;padding:1px 6px;border-radius:6px}
.cj-aff{color:var(--verb-d,#2c6d18);background:#e9f5e2}
.cj-neg{color:var(--neg);background:#fbe6e6}
.cj-rom{font-size:12px;color:var(--hint)}
.conj-note{font-size:13px;color:var(--muted);margin:12px 0 0;line-height:1.6}
@media(max-width:640px){.conj{overflow-x:auto}.conj-grid{min-width:460px}.cj-form{font-size:18px}}

/* ── paywall overlay (tier-locked chapter) ───────────────────────────── */
.pw-back{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(34,31,27,.55);backdrop-filter:blur(3px);animation:pw-fade .2s ease}
@keyframes pw-fade{from{opacity:0}to{opacity:1}}
.pw-modal{position:relative;width:100%;max-width:440px;background:#fff;border-radius:22px;box-shadow:0 30px 70px -20px rgba(34,31,27,.6);padding:34px 30px 26px;text-align:center;animation:pw-pop .26s cubic-bezier(.22,1,.36,1)}
@keyframes pw-pop{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}
.pw-x{position:absolute;top:14px;right:14px;width:30px;height:30px;border-radius:50%;border:none;background:var(--bg2);color:var(--muted);font-size:14px;cursor:pointer;transition:.15s}
.pw-x:hover{background:var(--sand);color:var(--ink)}
.pw-lock{width:64px;height:64px;margin:0 auto 14px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:30px;background:linear-gradient(160deg,#efeafe,#e0d9fb);box-shadow:0 8px 20px -10px rgba(91,84,230,.55)}
.pw-kicker{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-d)}
.pw-title{font-size:22px;font-weight:700;line-height:1.25;margin:8px 0 10px;color:var(--ink)}
.pw-sub{font-size:14.5px;color:var(--muted);line-height:1.6;margin:0 auto 22px;max-width:34ch}
.pw-cta{width:100%;font:inherit;font-size:16px;font-weight:600;padding:14px;border-radius:var(--pill);border:none;background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff;cursor:pointer;box-shadow:0 12px 26px -10px rgba(91,84,230,.7);transition:.15s}
.pw-cta:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 16px 32px -10px rgba(91,84,230,.8)}
.pw-cta:disabled{opacity:.7;cursor:default}
.pw-later{margin-top:10px;background:none;border:none;font:inherit;font-size:14px;color:var(--muted);cursor:pointer;padding:6px}
.pw-later:hover{color:var(--ink)}
.pw-note{font-size:12.5px;color:var(--hint);margin:10px 0 0}
.ccard.paywall{cursor:pointer;opacity:.78}
.ccard.paywall:hover{opacity:1;transform:translateY(-2px);border-color:var(--accent)}
@media(prefers-reduced-motion:reduce){.pw-back,.pw-modal{animation:none}.ccard.paywall:hover{transform:none}}

/* tier badge (header) — owner sees a gold 👑 Admin pill; paid users a Pro pill */
.tierbadge{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;padding:5px 11px;border-radius:var(--pill);letter-spacing:.01em;white-space:nowrap;line-height:1}
.tierbadge.admin{background:linear-gradient(160deg,#fbe6ab,#f1c768);color:#7a560f;box-shadow:0 1px 2px rgba(120,90,20,.25),inset 0 0 0 1px rgba(255,255,255,.4)}
.tierbadge.pro{background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff}
.tierbadge.free{background:var(--bg2);color:var(--muted)}
/* account chip with a round monogram avatar */
.chip.acct{padding-left:5px}
.acct-av{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;flex:none;border-radius:50%;background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff;font-size:11px;font-weight:700;line-height:1}

/* profile page */
.profile-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:28px;max-width:560px;margin:0 auto}
.profile-head{display:flex;align-items:center;gap:16px;padding-bottom:20px;border-bottom:1px solid var(--line)}
.profile-id{min-width:0}
.profile-name{font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.01em;margin-bottom:8px;text-transform:capitalize;word-break:break-word}
.profile-rows{margin:6px 0 24px}
.prow{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 2px;border-bottom:1px solid var(--line)}
.prow:last-child{border-bottom:none}
.pk{font-size:12.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;flex:none}
.pv{font-size:16px;font-weight:600;color:var(--ink);text-align:right;word-break:break-word}
.btn-logout{display:block;width:100%;font:inherit;font-size:16px;font-weight:700;padding:14px;border-radius:var(--pill);border:none;background:linear-gradient(160deg,#e35145,#c5352a);color:#fff;cursor:pointer;box-shadow:0 12px 26px -12px rgba(197,53,42,.7);transition:transform .15s,box-shadow .15s}
.btn-logout:hover{transform:translateY(-1px);box-shadow:0 16px 32px -12px rgba(197,53,42,.85)}
.btn-logout:active{transform:translateY(0)}
@media(prefers-reduced-motion:reduce){.btn-logout:hover{transform:none}}

/* daily streak chip */
.chip.streak{cursor:default;font-weight:700;color:#b4541a;background:linear-gradient(160deg,#fbe7c9,#f6d199);border-color:transparent}
/* vocab illustrations — premium art tile (emoji or SVG sit in the same framed tile) */
.vart{--art-accent:var(--accent);--art-warm:#e8943f;--art-cream:#f6e7cf;--art-ink:#3a342b;display:block}
.vchip .em{display:flex;align-items:center;justify-content:center;width:64px;height:64px;margin:0 auto 8px;border-radius:16px;background:radial-gradient(circle at 50% 35%,#fff,var(--bg2));box-shadow:inset 0 0 0 1px var(--line),var(--sh);font-size:30px}
/* can-do achievement card (chapter-complete payoff) */
.cando{margin:16px auto;max-width:440px;text-align:left;background:linear-gradient(160deg,#eafaf3,#dff3ea);border:1px solid #b7e3cf;border-radius:14px;padding:14px 16px;box-shadow:var(--sh)}
.cando-h{font-size:12px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--teal-d);margin-bottom:5px}
.cando-txt{font-size:15.5px;font-weight:600;color:var(--ink);line-height:1.5}
/* AI Practice sidecard highlight */
.sidecard.accent{border:1px solid rgba(91,84,230,.32);background:linear-gradient(160deg,#fff,#f3f1fe)}

/* ---- JLPT N5 mock test ---- */
.mock-secs{text-align:left;max-width:36ch;margin:12px auto;line-height:1.95;font-size:15px}
.mock-bar{position:sticky;top:8px;z-index:6;display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line2);border-radius:14px;padding:10px 16px;margin:0 0 18px;box-shadow:0 4px 14px rgba(40,30,10,.07)}
.mock-timer{font-weight:800;font-variant-numeric:tabular-nums;font-size:18px;color:var(--ink)}
.mock-timer.low{color:var(--neg)}
.mock-prog{color:var(--muted);font-size:13.5px}
.mock-bar .btn{margin-left:auto}
.mock-sechead{font-weight:800;font-size:16.5px;color:var(--accent-d);margin:26px 0 12px;padding-bottom:7px;border-bottom:2px solid var(--line2)}
.mock-mondai{font-size:14px;font-weight:600;color:#5c4a26;background:var(--sand);border-radius:8px;padding:8px 12px;margin:2px 0 12px;line-height:1.5}
.mock-q u,.mock-miss u{font-weight:700;text-underline-offset:3px}
.mock-passage{background:#fff;border:1px solid var(--line2);border-radius:12px;padding:16px 18px;line-height:2.05;margin:0 0 12px;font-size:18px}
.mock-q{background:#fff;border:1px solid var(--line2);border-radius:12px;padding:14px 16px;margin:0 0 12px}
.mock-qhead{margin-bottom:11px;font-size:16px;line-height:1.5}
.mock-num{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;font-size:12.5px;font-weight:700;margin-right:9px}
.mock-prompt{font-size:16.5px}
.mock-opts{display:flex;flex-direction:column;gap:8px}
.mock-opt{display:flex;align-items:center;gap:11px;padding:10px 13px;border:1px solid var(--line2);border-radius:10px;cursor:pointer;font-size:17px;transition:background .12s,border-color .12s}
.mock-opt:hover{background:var(--sand)}
.mock-opt input{accent-color:var(--accent);width:17px;height:17px;flex:none}
.mock-score{font-size:46px;font-weight:800;color:var(--ink);line-height:1.1;margin:6px 0 2px}
.mock-groupbars{display:flex;flex-direction:column;gap:14px;max-width:540px;margin:18px auto 4px}
.mock-gb{text-align:left}
.mock-gb .lab{display:flex;justify-content:space-between;gap:10px;font-size:13.5px;margin-bottom:6px;color:var(--muted)}
.mock-track{height:12px;border-radius:7px;background:var(--line2);overflow:hidden}
.mock-fill{height:100%;border-radius:7px;background:var(--verb);transition:width .5s ease}
.mock-fill.warn{background:var(--neg)}
.mock-miss{text-align:left;background:#fff;border:1px solid var(--line2);border-left:4px solid var(--neg);border-radius:10px;padding:12px 14px;margin:0 0 10px}
.mock-miss .q{font-size:15px;margin-bottom:6px;line-height:1.6}
.mock-miss .a{font-size:15px;font-weight:600;color:var(--verb)}
.mock-miss .ex{font-size:13px;color:var(--muted);margin-top:5px}
/* exam simulator — "cockpit" layout (warm brand; per-section sequential timers + mobile drawer) */
.mockx{position:relative;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);display:flex;justify-content:center;padding:16px clamp(16px,3vw,40px) 44px;box-sizing:border-box}
.mx-app{display:flex;width:100%;max-width:1440px;min-height:76vh;background:#fff;border:1px solid var(--line2);border-radius:18px;box-shadow:0 14px 34px rgba(40,30,10,.09);overflow:hidden}
.mx-work{flex:1;min-width:0;display:flex;flex-direction:column;padding:34px clamp(28px,3.5vw,56px) 30px}
.mx-top{display:flex;align-items:center;gap:10px;margin-bottom:18px}
.mx-top-q{margin-left:auto;font-size:13px;font-weight:600;color:var(--muted)}
.mx-top-sec,.mx-palette-toggle{display:none}
.mx-plabel{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}
.mx-instr{font-size:19px;color:#4a443c;line-height:1.7;margin-bottom:30px;max-width:780px}
.mx-passage{background:var(--bg1);border:1px solid var(--line2);border-radius:12px;padding:16px 20px;line-height:2.1;margin:0 0 26px;font-size:18px;max-width:780px}
.mx-pic{display:flex;justify-content:center;align-items:center;margin:0 0 28px;padding:24px 18px;background:var(--bg1);border:1px solid var(--line2);border-radius:16px;max-width:780px}
.mx-pic-emoji{font-size:62px;line-height:1.3;letter-spacing:8px;text-align:center;word-break:break-word}
.mx-pic svg,.mx-pic img{max-width:100%;height:auto}
.mx-qarea{display:flex;align-items:flex-start;gap:18px;margin-bottom:36px}
.mx-qnum{flex:none;font-size:15px;font-weight:700;color:var(--muted);border:1px solid var(--line2);border-radius:7px;padding:7px 14px;margin-top:6px}
.mx-qtext{font-size:25px;font-weight:400;line-height:1.7;color:var(--ink)}
.mx-qtext u{font-weight:700;text-decoration:none;border-bottom:3px solid var(--accent);padding-bottom:2px}
.mock-play{font:inherit;font-size:14px;font-weight:600;padding:6px 13px;border-radius:9px;border:1px solid var(--accent);background:#fff;color:var(--accent-d);cursor:pointer;margin-right:8px;vertical-align:middle}
.mock-play:hover{background:var(--info-bg)}
.mx-opts{display:flex;flex-direction:column;gap:14px;max-width:760px}
.mx-opt{display:flex;align-items:center;gap:14px;width:100%;text-align:left;font:inherit;font-size:18px;padding:16px 22px;border:1px solid var(--line2);border-radius:12px;background:#fff;color:var(--ink);cursor:pointer;transition:all .18s ease}
.mx-opt:hover{border-color:var(--accent);background:#faf9ff}
.mx-opt.sel{border-color:var(--accent);background:#f1f0fe;color:var(--accent-d);font-weight:600}
.mx-opt-n{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;border:1.5px solid var(--line2);font-size:13px;font-weight:700;color:var(--muted)}
.mx-opt.sel .mx-opt-n{background:var(--accent);border-color:var(--accent);color:#fff}
.mx-nav{display:flex;justify-content:space-between;align-items:center;gap:14px;border-top:1px solid var(--line2);padding-top:26px;margin-top:auto}
.mx-pill{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:15px;font-weight:700;padding:12px 26px;border-radius:9999px;border:1px solid var(--line2);background:#fff;color:var(--ink);cursor:pointer;transition:.15s}
.mx-pill:hover:not(:disabled){border-color:var(--accent);color:var(--accent-d)}
.mx-pill:disabled{opacity:.45;cursor:default}
.mx-pill.primary{margin-left:auto;background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff;border:none;padding:12px 30px}
/* right rail — all sections stacked, current expanded, others locked/upcoming */
.mx-side{width:344px;flex:none;display:flex;flex-direction:column;background:linear-gradient(180deg,#faf6ee,#f5efe2);border-left:1px solid var(--line2);padding:22px 20px;overflow-y:auto}
.mx-side-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.mx-side-title{font-size:11.5px;font-weight:800;letter-spacing:.11em;text-transform:uppercase;color:var(--muted)}
.mx-side-x{display:none}
.mx-side-scroll{display:flex;flex-direction:column;gap:12px}
.mx-sec{border:1px solid var(--line2);border-radius:14px;background:#fff;overflow:hidden;transition:.18s}
.mx-sec-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 15px}
.mx-sec-name{font-size:13px;font-weight:800;color:var(--ink);line-height:1.35}
.mx-sec-meta{display:flex;align-items:center;gap:10px;flex:none}
.mx-sec-count{font-size:11.5px;font-weight:700;color:var(--muted)}
.mx-sec-timer{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:15px;font-weight:700;color:var(--ink)}
.mx-sec-timer.low{color:var(--neg)}
.mx-sec-timer.done{color:var(--verb)}
.mx-sec-timer.up{color:var(--muted);font-weight:600}
.mx-sec--active{border-color:var(--accent);box-shadow:0 4px 16px rgba(91,84,230,.12)}
.mx-sec--active .mx-sec-head{background:linear-gradient(180deg,#f4f3ff,#fff)}
.mx-sec--active .mx-sec-timer{font-size:21px;letter-spacing:-.02em}
.mx-sec--locked{opacity:.6}
.mx-sec--locked .mx-sec-name,.mx-sec--upcoming .mx-sec-name{color:var(--muted)}
.mx-sec--upcoming{opacity:.74;border-style:dashed;background:transparent}
.mx-sec-body{padding:2px 15px 16px}
.mx-pgroup{margin-top:14px}
.mx-pgroup-t{font-size:13px;font-weight:800;color:var(--ink);margin-bottom:9px;letter-spacing:.01em}
.mx-ngrid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.mx-gbtn{aspect-ratio:1/1;border-radius:7px;font:inherit;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid var(--line2);color:var(--accent);cursor:pointer;transition:.15s}
.mx-gbtn:hover{border-color:var(--accent);background:#faf9ff}
.mx-gbtn.answered{background:#f1f0fe;border-color:#f1f0fe;color:var(--accent)}
.mx-gbtn.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700;box-shadow:0 2px 8px rgba(91,84,230,.3)}
.mx-finalize{margin-top:16px;width:100%;font:inherit;font-size:14.5px;font-weight:700;padding:13px;border-radius:11px;border:none;background:linear-gradient(160deg,var(--accent),var(--accent-d));color:#fff;cursor:pointer}
.mx-finalize:hover{filter:brightness(1.05)}
.mx-backdrop{display:none}
/* between-section break screen */
.mx-break{max-width:560px;margin:24px auto;background:#fff;border:1px solid var(--line2);border-radius:20px;box-shadow:0 14px 34px rgba(40,30,10,.09);padding:38px 34px;text-align:center}
.mx-break h2{margin:6px 0 4px}
.mx-break-card{display:flex;flex-direction:column;gap:4px;align-items:center;background:var(--bg1);border:1px solid var(--line2);border-radius:14px;padding:16px;margin:20px 0 8px}
.mx-break-lab{font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}
.mx-break-sec{font-size:17px;color:var(--ink)}
.mx-break-meta{font-size:13px;color:var(--muted)}
/* finalize-section confirm */
.mx-confirm-back{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(40,30,15,.5);animation:mxfade .15s ease}
@keyframes mxfade{from{opacity:0}to{opacity:1}}
.mx-confirm{background:#fff;border-radius:18px;max-width:420px;width:100%;padding:26px 26px 22px;box-shadow:0 18px 50px rgba(0,0,0,.3);text-align:center}
.mx-confirm h3{margin:0 0 10px;font-size:19px}
.mx-confirm p{font-size:14.5px;color:var(--muted);line-height:1.6;margin:0 0 20px}
.mx-confirm-row{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
@media(max-width:880px){
  .mockx{padding:0}
  .mx-app{flex-direction:column;min-height:auto;border-radius:0;border-left:none;border-right:none;overflow:visible}
  .mx-work{padding:14px 16px calc(92px + env(safe-area-inset-bottom,0px))}
  .mx-top{position:sticky;top:0;z-index:30;background:#fff;margin:-14px -16px 14px;padding:9px 14px;border-bottom:1px solid var(--line2)}
  .mx-top-q{display:none}
  .mx-top-sec{display:flex;align-items:center;gap:9px;margin-right:auto;min-width:0}
  .mx-top-seclabel{font-size:13px;font-weight:800;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:36vw}
  .mx-mob-timer{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:18px;font-weight:800;color:var(--ink)}
  .mx-mob-timer.low{color:var(--neg)}
  .mx-palette-toggle{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:13px;font-weight:700;padding:8px 12px;border-radius:9px;border:1px solid var(--line2);background:#fff;color:var(--accent-d);cursor:pointer;white-space:nowrap}
  .mx-instr{font-size:16px;line-height:1.65;margin-bottom:18px}
  .mx-passage{font-size:16.5px;padding:14px 16px;margin-bottom:18px}
  .mx-pic{padding:18px 12px;margin-bottom:20px}
  .mx-pic-emoji{font-size:46px;letter-spacing:5px}
  .mx-qarea{gap:12px;margin-bottom:22px}
  .mx-qnum{padding:5px 11px;font-size:13px}
  .mx-qtext{font-size:21px}
  .mx-opt{font-size:17px;padding:15px 16px}
  .mx-nav{position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--line2);padding:11px 16px calc(11px + env(safe-area-inset-bottom,0px));margin:0;box-shadow:0 -6px 20px rgba(40,30,10,.09)}
  .mx-pill{flex:1;justify-content:center;padding:13px 18px}
  .mx-pill.primary{margin-left:0}
  .mx-side{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;max-height:84vh;border-left:none;border-top:1px solid var(--line2);border-radius:18px 18px 0 0;padding:14px 16px calc(22px + env(safe-area-inset-bottom,0px));transform:translateY(106%);transition:transform .28s ease;z-index:60;box-shadow:0 -12px 34px rgba(40,30,10,.22)}
  .mockx.palette-open .mx-side{transform:translateY(0)}
  .mx-side-x{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:1px solid var(--line2);background:#fff;font-size:14px;cursor:pointer;color:var(--muted)}
  .mx-backdrop{display:block;position:fixed;inset:0;background:rgba(40,30,15,.42);opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s ease;z-index:55}
  .mockx.palette-open .mx-backdrop{opacity:1;visibility:visible}
}
@media(prefers-reduced-motion:reduce){.mx-side{transition:none}.mx-confirm-back{animation:none}}
