[hidden]{display:none!important}

:root{
  --paper:#f4f7fc; --sheet:#ffffff; --ink:#1d2b4f; --soft:#5b6785; --line:#d5dcea;
  --blue:#2459d6; --blue-wash:#e6edfd; --hi:#ffe766; --hi-ink:#4a3d00;
  --red:#d6363b; --red-wash:#fdeaea; --green:#1f8a5b; --green-wash:#e2f5ec; --purple:#7b45d1; --purple-wash:#f1eafd; --orange:#e08a00;
  --display:"Fredoka","Trebuchet MS",system-ui,sans-serif; --body:"Atkinson Hyperlegible","Segoe UI",system-ui,sans-serif;
  box-sizing:border-box; padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px); color-scheme:light;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --paper:#111827; --sheet:#1a2338; --ink:#e8edfa; --soft:#a3aecb; --line:#2c3655; --blue:#7ea2ff; --blue-wash:#22305a; --hi:#f5d94a; --hi-ink:#2a2300;
  --red:#ff7b7f; --red-wash:#3a1f27; --green:#5fd39c; --green-wash:#163a2c; --purple:#b892ff; --purple-wash:#2b2148; color-scheme:dark}}
:root[data-theme="dark"]{--paper:#111827; --sheet:#1a2338; --ink:#e8edfa; --soft:#a3aecb; --line:#2c3655; --blue:#7ea2ff; --blue-wash:#22305a; --hi:#f5d94a; --hi-ink:#2a2300;
  --red:#ff7b7f; --red-wash:#3a1f27; --green:#5fd39c; --green-wash:#163a2c; --purple:#b892ff; --purple-wash:#2b2148; color-scheme:dark}
*,*::before,*::after{box-sizing:border-box}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
html,body{margin:0;min-height:100%}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:19px;line-height:1.45;-webkit-tap-highlight-color:transparent}
button{font:inherit;color:inherit;cursor:pointer;border:none;background:none;touch-action:manipulation}
label.bigbtn{cursor:pointer;touch-action:manipulation}
button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
img,svg{max-width:100%}
h1,h2,h3{font-family:var(--display);margin:0;line-height:1.15;text-wrap:balance}
h1{font-size:2rem} h2{font-size:1.45rem;margin-top:8px} h3{font-size:1.15rem}
.app{max-width:860px;margin:0 auto;padding:0 16px 80px}
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0;background:var(--paper);border-bottom:2px solid var(--line);margin-bottom:18px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--display);font-size:1.35rem}
.logo{font-size:1.8rem}
.topright{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.topbtn{font-family:var(--display);font-weight:600;font-size:1.15rem;min-height:56px;padding:8px 18px;border-radius:16px;background:var(--sheet);border:2px solid var(--line);display:flex;align-items:center;gap:8px}
.topbtn.home{background:var(--ink);color:var(--sheet);border-color:var(--ink);font-size:1.25rem}
.av{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:#fff;font-weight:700}
.pill{font-family:var(--display);font-weight:600;padding:6px 12px;border-radius:999px;background:var(--sheet);border:2px solid var(--line);white-space:nowrap;font-variant-numeric:tabular-nums}
.pill.xp{background:var(--hi);color:var(--hi-ink);border-color:var(--hi)} .pill.lvl{background:var(--ink);color:var(--sheet);border-color:var(--ink)} .pill.big{font-size:1.4rem;padding:8px 18px}
.hello{font-size:2.1rem;margin:4px 0 16px}
.muted{color:var(--soft)} .legend{color:var(--soft);font-size:.85rem} .lead{font-size:1.1rem;margin:0 0 6px}
.kidpick{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px}
.kidbtn{background:var(--sheet);border:3px solid var(--line);border-radius:28px;padding:30px 16px;display:flex;flex-direction:column;align-items:center;gap:10px;min-height:260px;justify-content:center;box-shadow:0 6px 0 var(--line)}
.kidbtn:active{transform:translateY(4px);box-shadow:0 2px 0 var(--line)}
.kidbtn b{font-family:var(--display);font-size:2rem} .kidbtn span:last-child{color:var(--soft)}
.bigav{width:96px;height:96px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:#fff;font-family:var(--display);font-size:3rem;font-weight:700}
.kidbtn:nth-child(2) .bigav{background:var(--purple)}
.tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-top:18px}
@media (min-width:700px){.tiles{grid-template-columns:repeat(4,1fr)}}
.tile{position:relative;background:var(--c);color:#fff;border-radius:24px;min-height:170px;padding:18px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;box-shadow:0 6px 0 rgba(0,0,0,.22)}
.tile,.bigbtn,.kidbtn,.choice,.kp button,.btn,.daytab,.story,.nu,.skrow{user-select:none;-webkit-user-select:none}
.signin{display:flex;flex-direction:column;gap:4px;background:#fff3c4;color:#3b2a00;border:3px solid #f2a900;border-radius:18px;padding:14px 16px;margin-bottom:14px}
.signin b{font-family:var(--display)}
.tile:active{transform:translateY(4px);box-shadow:0 2px 0 rgba(0,0,0,.22)}
.ti{font-size:3rem;line-height:1} .tt{font-family:var(--display);font-weight:700;font-size:1.4rem;line-height:1.1} .ts{font-size:.85rem;opacity:.9}
.tb{position:absolute;top:10px;right:10px;font-family:var(--display);font-size:.8rem;background:var(--hi);color:var(--hi-ink);padding:2px 10px;border-radius:999px}
.sechead{display:flex;align-items:center;gap:14px;background:var(--c);color:#fff;border-radius:22px;padding:14px 20px;margin-bottom:16px}
.secicon{font-size:2.4rem} .sechead h1{font-size:1.9rem}
.pane{display:flex;flex-direction:column;gap:16px}
.bigrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.bigrid.two{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.bigbtn{background:var(--c);color:#fff;border-radius:22px;min-height:130px;padding:18px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;box-shadow:0 6px 0 rgba(0,0,0,.22)}
.bigbtn:active{transform:translateY(4px);box-shadow:0 2px 0 rgba(0,0,0,.22)}
.bigbtn b{font-family:var(--display);font-size:1.4rem} .bigbtn small{font-size:.9rem;opacity:.92} .bi{font-size:2.4rem;line-height:1}
.bigbtn.off{opacity:.55}
.btn{font-family:var(--display);font-weight:600;font-size:1.2rem;min-height:60px;padding:10px 22px;border-radius:16px;background:var(--blue);color:#fff}
.btn.ghost{background:var(--sheet);color:var(--blue);border:3px solid var(--blue)}
.btn.big{width:100%;min-height:72px;font-size:1.45rem;background:var(--ink)}
.btn.go{background:var(--green)}
.btn:active{transform:translateY(2px)}
.linkbtn{color:var(--soft);font-size:.85rem;text-decoration:underline;padding:6px;align-self:flex-start}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.chipbtn{min-height:48px;padding:8px 16px;border-radius:999px;background:var(--sheet);border:2px solid var(--green);color:var(--green);font-weight:700}
.chipbtn.lang{border-color:var(--purple);color:var(--purple)} .chipbtn.bad{border-color:var(--red);color:var(--red)}
/* level card */
.lvlcard{background:var(--sheet);border:3px solid var(--line);border-radius:24px;padding:16px;display:flex;flex-direction:column;gap:12px}
.lvltop{display:flex;gap:16px;align-items:center}
.medal{flex:none;width:92px;height:92px;border-radius:50%;background:linear-gradient(145deg,#ffd84d,#f2a900);color:#3b2a00;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:0 4px 0 #b47c00,inset 0 0 0 5px rgba(255,255,255,.45)}
.medal span{font-size:1.5rem;line-height:1} .medal b{font-family:var(--display);font-size:2.2rem;line-height:1}
.lvlinfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.lvlname{font-family:var(--display);font-weight:700;font-size:1.5rem}
.lvlsub{color:var(--soft);font-size:.95rem}
.bigbar{position:relative;height:34px;border-radius:999px;background:var(--blue-wash);overflow:hidden}
.bigbar i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,#2fbf71,#1f8a5b);border-radius:999px}
.bigbar span{position:relative;display:block;text-align:center;line-height:34px;font-family:var(--display);font-weight:600;font-size:1rem;color:var(--ink)}
.bigbar.thin{height:10px} .bigbar.thin i{background:var(--blue)}
.nextups{display:flex;flex-direction:column;gap:8px}
.nu-h{font-family:var(--display);font-weight:600;color:var(--soft)}
.nu,.skrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;min-height:64px;padding:10px 14px;border-radius:16px;background:var(--paper);border:2px solid var(--line)}
.nu-t,.skn{flex:1;display:flex;flex-direction:column;min-width:0} .nu-t small,.skn small{color:var(--soft);font-size:.82rem}
.nu-go{font-family:var(--display);font-weight:600;color:var(--blue);white-space:nowrap}
.stars{color:#f2a900;font-size:1.15rem;letter-spacing:1px;white-space:nowrap}
.skrow.need{border-color:var(--red)}
.skillrows{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.levelup{background:linear-gradient(90deg,#ffd84d,#ff9f43);color:#3b2a00;font-family:var(--display);font-size:1.4rem;padding:16px 20px;border-radius:20px;text-align:center;margin-bottom:6px}
.road{display:flex;align-items:center;overflow-x:auto;padding:10px 4px 6px;gap:0}
.node{flex:none;width:58px;height:58px;border-radius:50%;border:3px solid var(--line);background:var(--sheet);display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--display);font-size:1.1rem;line-height:1}
.node span{font-size:.9rem;min-height:.9rem} .node.past{background:var(--green);border-color:var(--green);color:#fff} .node.now{background:#ffd84d;border-color:#f2a900;color:#3b2a00;width:70px;height:70px;font-size:1.4rem}
.node.rk{border-style:dashed;border-color:var(--purple)}
.road .link{flex:none;width:18px;height:4px;background:var(--line)}
.ranks{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
@media (max-width:560px){.ranks{grid-template-columns:repeat(2,1fr)}}
.rank{border:2px solid var(--line);border-radius:14px;padding:8px;text-align:center;display:flex;flex-direction:column;opacity:.55}
.rank span{font-size:1.6rem} .rank small{color:var(--soft);font-size:.75rem} .rank.got{opacity:1} .rank.cur{border-color:#f2a900;background:#fff7d6;color:#3b2a00}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.stat{background:var(--sheet);border:2px solid var(--line);border-radius:16px;padding:10px 14px;display:flex;flex-direction:column}
.stat b{font-family:var(--display);font-size:1.9rem;line-height:1.1;font-variant-numeric:tabular-nums}
.stat span{font-size:.78rem;color:var(--soft);text-transform:uppercase;letter-spacing:.04em}
.track{position:relative;height:18px;border-radius:99px;background:var(--blue-wash);margin:6px 0 26px}
.track i{display:block;height:100%;border-radius:99px;background:var(--blue)}
.track .tick{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--line)} .track .tick span{position:absolute;top:26px;transform:translateX(-50%);font-size:.75rem;color:var(--soft);white-space:nowrap}
.unit{background:var(--sheet);border:2px solid var(--line);border-radius:16px;padding:12px 14px;margin-bottom:10px}
.unit summary{display:flex;justify-content:space-between;gap:10px;cursor:pointer;font-weight:700;list-style:none;min-height:40px;align-items:center}
.unit summary::-webkit-details-marker{display:none}
.bar{height:10px;border-radius:99px;background:var(--blue-wash);margin-top:6px} .bar i{display:block;height:100%;border-radius:99px;background:var(--blue)}
.bar.lang{background:var(--purple-wash)} .bar.lang i{background:var(--purple)} .bar.warm i{background:var(--orange)}
.compare{overflow-x:auto} .compare table{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums}
.compare th,.compare td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.compare th{font-size:.75rem;text-transform:uppercase;color:var(--soft);font-weight:400}
/* problems */
.runhead{display:flex;justify-content:space-between;align-items:center;gap:10px;font-family:var(--display);font-weight:600;color:var(--soft);margin-bottom:8px;flex-wrap:wrap}
.runhead .tag{background:var(--blue-wash);color:var(--blue);padding:4px 12px;border-radius:999px;font-size:.9rem}
.qcard{background:var(--sheet);border:3px solid var(--line);border-radius:22px;padding:22px;margin:12px 0}
.q{font-size:1.9rem;font-family:var(--display);font-weight:500;line-height:1.3} .q.lang{font-family:var(--body);font-size:1.35rem}
.ansline{display:flex;gap:10px;margin-bottom:10px}
.ansin{flex:1;min-width:0;font:inherit;font-family:var(--display);font-size:2rem;padding:8px 16px;border-radius:16px;border:3px solid var(--blue);background:var(--sheet);color:var(--ink);font-variant-numeric:tabular-nums;min-height:72px}
.ansline .btn{min-height:72px;font-size:1.4rem;padding:0 26px}
.kp{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;max-width:460px}
.kp button{font-family:var(--display);font-size:2rem;min-height:72px;border-radius:16px;background:var(--sheet);border:3px solid var(--line);box-shadow:0 4px 0 var(--line)}
.kp button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}
.kp .sym{font-size:1.3rem;background:var(--blue-wash)} .kp .del{font-size:1.3rem;background:var(--red-wash)} .kp .ok{background:var(--green);color:#fff;border-color:var(--green)}
.kp.blitz{max-width:420px;margin:0 auto}
.kp.pin{max-width:320px;margin:0 auto}
.choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.choices.long{grid-template-columns:1fr}
.choice{min-height:72px;padding:14px 18px;border-radius:18px;border:3px solid var(--line);background:var(--sheet);font-size:1.25rem;text-align:left;box-shadow:0 4px 0 var(--line)}
.choices.bigc .choice{text-align:center;font-family:var(--display);font-size:2.4rem}
.choice:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}
.choice.wrong-c{opacity:.4;border-color:var(--red)} .choice.right-c{border-color:var(--green);background:var(--green-wash)}
.msgs{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.note{border-radius:16px;padding:14px 16px;display:flex;flex-direction:column;gap:6px}
.note.hint{background:var(--hi);color:var(--hi-ink)} .note.bad{background:var(--red-wash);border-left:6px solid var(--red)}
.note.good{background:var(--green-wash);border-left:6px solid var(--green)} .note.steps{background:var(--blue-wash)}
.note b.lbl{font-family:var(--display);font-size:1.1rem}
.note ol{margin:0;padding-left:1.3em}
.wrote{text-decoration:line-through;text-decoration-color:var(--red);text-decoration-thickness:3px}
.right{background:var(--hi);color:var(--hi-ink);padding:0 6px;border-radius:4px}
#tools{margin-top:14px}
.big-num{font-family:var(--display);font-size:3.2rem;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}
.typed{color:var(--blue)}
.expr{font-family:var(--display);font-size:2.4rem;display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center}
.expr .op{min-width:64px;min-height:64px;border:3px dashed var(--blue);border-radius:14px;color:var(--blue);font-size:2.2rem}
.pv{overflow-x:auto;margin-top:10px} .pv table{border-collapse:collapse;font-variant-numeric:tabular-nums}
.pv td,.pv th{border:1px solid var(--line);padding:4px 8px;text-align:center;min-width:2.2em} .pv th{font-size:.65rem;color:var(--soft);font-weight:400}
.done{display:flex;flex-direction:column;gap:12px;align-items:center;text-align:center}
.doneicon{font-size:4rem}
.empty{text-align:center;padding:30px 16px;color:var(--soft)}
/* homework */
.daytabs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.daytab{min-height:76px;border-radius:18px;border:3px solid var(--line);background:var(--sheet);display:flex;flex-direction:column;align-items:center;justify-content:center}
.daytab b{font-family:var(--display);font-size:1.25rem} .daytab small{color:var(--soft)}
.daytab[aria-pressed="true"]{border-color:var(--blue);background:var(--blue);color:#fff} .daytab[aria-pressed="true"] small{color:#e6edfd}
.hwcard{background:var(--sheet);border:3px solid var(--line);border-radius:22px;padding:18px;display:flex;flex-direction:column;gap:14px}
.hwtop{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;flex-wrap:wrap} .hwtop p{margin:4px 0 0}
.st{font-family:var(--display);font-weight:600;font-size:.9rem;padding:6px 12px;border-radius:999px;background:var(--paper);border:2px solid var(--line);white-space:nowrap}
.st.graded{background:var(--green-wash);border-color:var(--green);color:var(--green)} .st.waiting{background:var(--hi);border-color:var(--hi);color:var(--hi-ink)} .st.tablet{background:var(--blue-wash);border-color:var(--blue);color:var(--blue)}
.msgline{min-height:1.4em;margin:0;font-weight:700}
.peek ol{display:flex;flex-direction:column;gap:6px} .peek summary,.older summary{cursor:pointer;min-height:48px;display:flex;align-items:center;font-weight:700}
.older{background:var(--sheet);border:2px solid var(--line);border-radius:16px;padding:6px 14px}
.oldlist{display:flex;flex-direction:column;gap:8px;margin:8px 0}
.oldrow{display:flex;justify-content:space-between;align-items:center;gap:10px;min-height:56px;padding:8px 14px;border-radius:14px;background:var(--paper);border:2px solid var(--line);text-align:left;flex-wrap:wrap}
.fbcard{background:var(--sheet);border:3px solid var(--line);border-radius:20px;padding:12px 16px}
.fbcard summary{display:flex;justify-content:space-between;align-items:center;gap:10px;cursor:pointer;min-height:56px;list-style:none}
.fbcard summary span:first-child{display:flex;flex-direction:column} .fbcard summary small{color:var(--soft)}
.fb-item{border-top:2px dashed var(--line);padding-top:12px;margin-top:12px;display:flex;flex-direction:column;gap:8px}
.settings{display:flex;flex-direction:column;gap:10px}
.setrow{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--sheet);border:2px solid var(--line);border-radius:16px;padding:12px}
.form-row{display:flex;gap:10px;flex-wrap:wrap;align-items:end}
.form-row label,.setrow label{display:flex;flex-direction:column;gap:4px;font-size:.85rem;color:var(--soft)}
input:not(.ansin),select{font:inherit;font-size:1.1rem;padding:10px 12px;min-height:52px;border-radius:12px;border:2px solid var(--line);background:var(--sheet);color:var(--ink);max-width:100%}
.gate{text-align:center;display:flex;flex-direction:column;gap:12px;align-items:center}
.pindots{font-size:2.6rem;letter-spacing:12px}
/* reading */
.readsum{display:flex;gap:18px;align-items:center;background:var(--sheet);border:3px solid var(--line);border-radius:22px;padding:16px;flex-wrap:wrap}
.bignum{font-family:var(--display);font-size:4rem;font-weight:700;line-height:1;display:flex;flex-direction:column;align-items:center;color:var(--purple)}
.bignum small{font-size:.9rem;color:var(--soft);font-weight:500}
.rs-r{flex:1;min-width:220px} .rs-r p{margin:8px 0 0}
.goalbar{position:relative;height:22px;border-radius:99px;background:var(--purple-wash)}
.goalbar i{display:block;height:100%;border-radius:99px;background:var(--purple)}
.gmark{position:absolute;top:24px;transform:translateX(-50%);font-size:.75rem;color:var(--soft);white-space:nowrap}
.storypick{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.story{min-height:76px;border-radius:16px;border:3px solid var(--line);background:var(--sheet);padding:10px 14px;text-align:left;display:flex;flex-direction:column;justify-content:center}
.story small{color:var(--soft)} .story.sel{border-color:var(--purple);background:var(--purple-wash)}
.readbar{position:sticky;top:0;z-index:6;background:var(--sheet);border:3px solid var(--purple);border-radius:20px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;margin-bottom:14px;box-shadow:0 6px 16px rgba(0,0,0,.08)}
.readbar.timeup{border-color:var(--red);background:var(--red-wash);animation:flash .5s 3}
@keyframes flash{50%{background:var(--hi)}}
.rb-top{display:flex;justify-content:space-between;align-items:center;gap:10px;font-family:var(--display);font-size:1.15rem}
.clock{font-family:var(--display);font-size:2.6rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--purple)}
.timebar{height:12px;border-radius:99px;background:var(--purple-wash);overflow:hidden} .timebar i{display:block;height:100%;width:0;background:var(--purple)}
.rb-msg{font-size:1.05rem}
.rb-btns{display:flex;gap:10px;flex-wrap:wrap} .rb-btns .btn.big{flex:1;background:var(--green)}
.passage{font-size:1.6rem;line-height:2.1;display:flex;flex-direction:column;gap:14px;background:var(--sheet);border-radius:20px;padding:18px 20px;border:2px solid var(--line)}
.passage p{margin:0}
.w{border-radius:6px;padding:2px 2px;cursor:pointer}
.w.last{outline:4px solid var(--green);background:var(--green-wash)} .w.after{opacity:.35}
.timeup ~ .passage .w{background:var(--blue-wash);margin:1px}
.w.err{background:var(--red-wash);color:var(--red);text-decoration:line-through wavy var(--red)}
.chart{overflow-x:auto;background:var(--sheet);border:2px solid var(--line);border-radius:16px;padding:8px}
.chart svg{display:block;width:100%;min-width:520px;height:auto} .chart text{fill:var(--soft);font-family:var(--body);font-size:12px}
.tb.star{top:-14px;right:-6px;font-size:1.1rem;padding:6px 14px;background:#fff;color:#b45309;border:3px solid #f2a900;box-shadow:0 2px 8px rgba(0,0,0,.25);animation:wiggle 1.6s 3}
.tile.glow{outline:6px solid #ffd84d;outline-offset:3px}
@keyframes glow{50%{outline-color:#ff9f43}}
@keyframes wiggle{0%,80%,100%{transform:rotate(0)}85%{transform:rotate(-8deg)}90%{transform:rotate(8deg)}95%{transform:rotate(-4deg)}}
.fbalert{width:100%;display:flex;align-items:center;gap:14px;text-align:left;background:linear-gradient(90deg,#ffd84d,#ffb547);color:#3b2a00;border-radius:22px;padding:16px 18px;margin-bottom:14px;box-shadow:0 6px 0 #c98a00;border:3px solid #f2a900}
.fbalert b{font-family:var(--display);font-size:1.35rem;display:block} .fbalert small{font-size:.95rem}
.fbstar{font-size:2.8rem;animation:wiggle 1.6s 3} .fbgo{margin-left:auto;font-family:var(--display);font-weight:700;font-size:1.2rem;background:#3b2a00;color:#ffd84d;padding:10px 16px;border-radius:14px;white-space:nowrap}
.pill.newfb{background:#ffd84d;color:#3b2a00;border-color:#f2a900;cursor:pointer;animation:wiggle 1.6s 3}
.kidbtn{position:relative} .kidnew{position:absolute;top:12px;right:12px;font-family:var(--display);font-weight:700;background:#ffd84d;color:#3b2a00;border:3px solid #f2a900;padding:4px 12px;border-radius:999px}
.alertbar{background:#ffd84d;color:#3b2a00;font-family:var(--display);font-weight:700;font-size:1.2rem;text-align:center;padding:12px;border-radius:16px}
.fbcard.isnew{border-color:#f2a900;box-shadow:0 0 0 4px #ffe9a8}
.newtag{font-style:normal;font-family:var(--display);font-weight:700;color:#b45309;font-size:.95rem}
.fbn{display:inline-grid;place-items:center;min-width:2.2em;height:2.2em;border-radius:50%;background:var(--blue);color:#fff;font-size:.9rem;margin-right:6px}
.vs{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.vs>div{border-radius:16px;padding:10px 14px;display:flex;flex-direction:column;position:relative}
.vs small{font-size:.8rem;text-transform:uppercase;letter-spacing:.04em} .vs b{font-family:var(--display);font-size:1.6rem;word-break:break-word}
.vs span{position:absolute;top:8px;right:12px;font-size:1.4rem;font-weight:700}
.vs-you{background:var(--red-wash);border:2px solid var(--red)} .vs-you b{text-decoration:line-through;text-decoration-color:var(--red)} .vs-you span{color:var(--red)}
.vs-right{background:var(--green-wash);border:2px solid var(--green)} .vs-right span{color:var(--green)}
.fbsteps{display:flex;flex-direction:column;gap:8px} .fbsteps li{padding:4px 2px}
.fbsteps li.slip{background:#fff3c4;color:#3b2a00;border-radius:12px;padding:8px 10px;border:3px dashed #f2a900}
.kiddid{margin-top:6px;font-weight:700;color:#b42318}
.toast{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:50;width:min(92vw,620px);display:flex;flex-direction:column;gap:4px;padding:16px 48px 16px 18px;border-radius:18px;font-size:1.05rem;box-shadow:0 10px 30px rgba(0,0,0,.25);background:var(--sheet);border:3px solid var(--line)}
.toast b{font-family:var(--display);font-size:1.2rem} .toast.good{background:var(--green-wash);border-color:var(--green)} .toast.bad{background:var(--red-wash);border-color:var(--red)} .toast.hint{background:#fff3c4;border-color:#f2a900;color:#3b2a00}
.toastx{position:absolute;top:8px;right:8px;width:40px;height:40px;border-radius:50%;font-size:1.1rem}
@keyframes pop{0%{transform:scale(.92)}60%{transform:scale(1.05)}100%{transform:scale(1)}}
.pop{animation:pop .35s ease-out}
@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
/* ---- v1 public app additions ---- */
.authcard{max-width:560px;margin:10px auto;background:var(--sheet);border:3px solid var(--line);border-radius:26px;padding:22px;display:flex;flex-direction:column;gap:14px}
.authcard label,.fl{display:flex;flex-direction:column;gap:4px;font-size:.9rem;color:var(--soft)}
.authcard input:not([type=checkbox]){width:100%}
.btn.apple{background:#000;color:#fff;margin-top:-4px} .aicon{display:inline-block;width:22px;height:22px;margin-right:8px;vertical-align:-3px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16.4 12.6c0-2.6 2.1-3.8 2.2-3.9-1.2-1.8-3.1-2-3.7-2-1.6-.2-3.1.9-3.9.9-.8 0-2-.9-3.3-.9-1.7 0-3.3 1-4.2 2.6-1.8 3.1-.5 7.7 1.3 10.2.9 1.2 1.9 2.6 3.2 2.6 1.3-.1 1.8-.8 3.3-.8 1.6 0 2 .8 3.4.8 1.4 0 2.3-1.3 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.8-1.1-2.8-4.1zM13.9 5c.7-.9 1.2-2 1.1-3.2-1 0-2.3.7-3 1.6-.7.8-1.2 2-1.1 3.1 1.1.1 2.3-.6 3-1.5z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16.4 12.6c0-2.6 2.1-3.8 2.2-3.9-1.2-1.8-3.1-2-3.7-2-1.6-.2-3.1.9-3.9.9-.8 0-2-.9-3.3-.9-1.7 0-3.3 1-4.2 2.6-1.8 3.1-.5 7.7 1.3 10.2.9 1.2 1.9 2.6 3.2 2.6 1.3-.1 1.8-.8 3.3-.8 1.6 0 2 .8 3.4.8 1.4 0 2.3-1.3 3.1-2.5 1-1.4 1.4-2.8 1.4-2.9 0 0-2.8-1.1-2.8-4.1zM13.9 5c.7-.9 1.2-2 1.1-3.2-1 0-2.3.7-3 1.6-.7.8-1.2 2-1.1 3.1 1.1.1 2.3-.6 3-1.5z'/%3E%3C/svg%3E") center/contain no-repeat}
.gicon{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:#fff;color:#4285f4;font-weight:700;margin-right:8px}
.or{display:flex;align-items:center;gap:10px;color:var(--soft);font-size:.85rem} .or::before,.or::after{content:"";flex:1;height:2px;background:var(--line)}
.kidrows{display:flex;flex-direction:column;gap:10px} .kidrow{display:grid;grid-template-columns:1fr 90px auto;gap:10px;align-items:end;background:var(--paper);border:2px solid var(--line);border-radius:16px;padding:10px}
.consent{display:flex !important;flex-direction:row !important;gap:10px;align-items:flex-start;font-size:.95rem !important;color:var(--ink) !important;line-height:1.4}
.consent input{width:28px;height:28px;flex:none;margin-top:2px}
.signin.off{background:var(--blue-wash);border-color:var(--blue);color:var(--ink)}
textarea{font:inherit;font-size:1.05rem;padding:10px 12px;border-radius:12px;border:2px solid var(--line);background:var(--sheet);color:var(--ink);width:100%;resize:vertical}
.chat{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto;padding:4px}
.bubble{max-width:85%;padding:10px 14px;border-radius:16px;background:var(--blue-wash);align-self:flex-start} .bubble.me{background:var(--green-wash);align-self:flex-end}
.bubble.typing{opacity:.6}
.ansin.small{font-family:var(--body);font-size:1.1rem;min-height:56px}
.faq p{margin:4px 0 10px}
.top .topbtn#tHelp,.top .topbtn#tHelp0{padding:8px 14px}
@media (max-width:520px){.kidrow{grid-template-columns:1fr 80px}.kidrow .linkbtn{grid-column:1/-1}}

.plancard{background:var(--sheet);border:3px solid var(--line);border-radius:20px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.plancard .ph{font-family:var(--display);font-size:1.25rem}
.plancard.trial{border-color:var(--blue)} .plancard.paid{border-color:var(--green)} .plancard.expired,.plancard.pastdue{border-color:#f2a900;background:#fff7d6;color:#3b2a00}

/* in-app page panel (terms, privacy) */
.inapp{position:fixed;inset:0;z-index:100;background:var(--paper);display:flex;flex-direction:column}
.inapp-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top,0px));border-bottom:2px solid var(--line);background:var(--sheet)}
.inapp-bar .btn{min-height:48px}
.inapp iframe{flex:1;border:0;width:100%;background:#fff}
.saybtn{float:right;margin:0 0 6px 10px;font-size:1.4rem;line-height:1;padding:8px 10px;border-radius:12px;border:2px solid var(--line);background:var(--paper);cursor:pointer}
/* geography */
:root{--land:#dde4f0;--land-line:#ffffff;--lv1:#ffb8ba;--lv2:#ffe08a;--lv3:#7fd8a8;--hl:#ffb000;--sea:#eef4fb}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--land:#2d3859;--land-line:#111827;--lv1:#8e3d48;--lv2:#8c7622;--lv3:#24845a;--hl:#f5b100;--sea:#152039}}
:root[data-theme="dark"]{--land:#2d3859;--land-line:#111827;--lv1:#8e3d48;--lv2:#8c7622;--lv3:#24845a;--hl:#f5b100;--sea:#152039}
.geomap{background:var(--sea);border:2px solid var(--line);border-radius:18px;padding:6px;overflow:hidden}
.geomap svg{display:block;width:100%;height:auto;touch-action:manipulation}
.geo-st,.geo-c{fill:var(--land);stroke:var(--land-line);stroke-width:1;cursor:pointer;transition:fill .15s}
.geo-c{stroke-width:calc(.5px * var(--k,1))}
.geo-c.maponly{fill-opacity:.55;cursor:default}
.geo-st:hover,.geo-c:hover{filter:brightness(.93)}
.geo-box rect{fill:var(--land);stroke:var(--soft);stroke-width:1.2;cursor:pointer}
.geo-box text{font:700 13px var(--body);fill:var(--ink);pointer-events:none}
.geo-lead{stroke:var(--soft);stroke-width:1;stroke-dasharray:2 2}
.lv1.geo-st,.lv1.geo-c,.lv1 rect{fill:var(--lv1)} .lv2.geo-st,.lv2.geo-c,.lv2 rect{fill:var(--lv2)} .lv3.geo-st,.lv3.geo-c,.lv3 rect{fill:var(--lv3)}
.hl.geo-st,.hl.geo-c,.hl rect{fill:var(--hl)!important}
.ok.geo-st,.ok rect{fill:#2fbf71!important} .bad.geo-st,.bad rect{fill:#e5484d!important}
.sel.geo-st,.sel rect{fill:var(--blue)!important}
.pulse{animation:geopulse .8s ease-in-out infinite alternate}
@keyframes geopulse{to{fill-opacity:.35}}
.geo-ring{fill:none;stroke:var(--hl);stroke-width:calc(3px * var(--k,1));animation:georing 1.2s ease-out infinite}
.geo-dot{fill:var(--hl);stroke:var(--ink);stroke-width:calc(1px * var(--k,1))}
@keyframes georing{from{stroke-opacity:1}to{stroke-opacity:.15}}
.geogrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px}
.geogrid .geomap{padding:2px;border-radius:12px}
.geokey{display:flex;flex-wrap:wrap;gap:14px;font-size:.85rem;color:var(--soft)}
.geokey i{display:inline-block;width:14px;height:14px;border-radius:4px;margin-right:6px;vertical-align:-2px;background:var(--land);border:1px solid var(--line)}
.geokey i.lv1{background:var(--lv1)} .geokey i.lv2{background:var(--lv2)} .geokey i.lv3{background:var(--lv3)}
.geotag{display:inline-block;font-size:.8rem;font-weight:700;padding:2px 10px;border-radius:999px;background:var(--land);color:var(--ink);white-space:nowrap}
.geotag.lv1{background:var(--lv1)} .geotag.lv2{background:var(--lv2)} .geotag.lv3{background:var(--lv3)}
.geoinfo{gap:6px} .geoname{font-family:var(--display);font-size:1.6rem}
.geofilter{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.geofilter .chipbtn{border-color:var(--cc,var(--blue));color:var(--cc,var(--blue))}
.geofilter .chipbtn.on{background:var(--cc,var(--blue));color:#fff}
.contbtns{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media (max-width:520px){.contbtns{grid-template-columns:repeat(2,1fr)}}
.contbtn{min-height:64px;border-radius:16px;background:var(--cc);color:#fff;font-family:var(--display);font-weight:600;font-size:1.2rem;padding:8px 12px;box-shadow:0 4px 0 rgba(0,0,0,.22)}
.contbtn:active{transform:translateY(3px);box-shadow:0 1px 0 rgba(0,0,0,.22)}
.contbtn.right-c{outline:5px solid #2fbf71;outline-offset:2px} .contbtn.wrong-c{opacity:.45}
.contbtn:disabled{cursor:default}
.matchgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.mcol{display:flex;flex-direction:column;gap:10px;min-width:0}
.mitem{min-height:64px;border-radius:16px;border:3px solid var(--line);background:var(--sheet);font-family:var(--display);font-weight:600;font-size:1.2rem;padding:8px 12px;text-align:left;box-shadow:0 4px 0 var(--line)}
.mitem.sel{border-color:var(--hl);background:#fff3c4;color:#3b2a00}
.mitem.done{border-color:var(--cc);background:var(--cc);color:#fff;box-shadow:none}
.mitem small{display:block;font-family:var(--body);font-size:.8rem;opacity:.9}
.tiles .tile:last-child:nth-child(odd){grid-column:span 2}
@media (min-width:700px){.tiles{grid-template-columns:repeat(3,1fr)}.tiles .tile:last-child:nth-child(odd){grid-column:auto}}
/* overlays never block a tap on the state or country under them; no text selection or callout on long-press */
.geo-lead,.geo-ring,.geo-dot,.geo-box text,.geomap title{pointer-events:none}
.geomap,.geomap svg,.contbtn,.mitem,.geofilter .chipbtn,.geotag{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.contbtn,.mitem,.geofilter .chipbtn{touch-action:manipulation;cursor:pointer}
/* map puzzle */
.geopz-top{display:flex;gap:16px;align-items:center}
.geopz-tray{flex:none;width:130px;height:110px;display:grid;place-items:center;background:var(--blue-wash,#e8efff);border:2px dashed var(--blue,#2459d6);border-radius:14px}
.geo-piece{width:110px;height:90px;display:grid;place-items:center;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:10px}
.geo-piece svg{width:100%;height:100%;overflow:visible}
.geo-piece path{fill:#3d8bfd;stroke:#1d2b4f;stroke-width:1.2;vector-effect:non-scaling-stroke}
.geo-piece.armed{outline:4px solid var(--hl,#ffd84d);animation:geopulse2 .8s ease-in-out infinite alternate}
.geo-piece.dragging{position:fixed;z-index:50;pointer-events:none;cursor:grabbing;opacity:.85;filter:drop-shadow(0 6px 10px rgba(0,0,0,.35))}
@keyframes geopulse2{to{transform:scale(1.06)}}
@media (max-width:560px){.geopz-top{flex-direction:column;align-items:stretch}.geopz-tray{width:100%}}
/* typing */
.tysum{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:14px}
.tysum .btn{margin-top:10px}
.tynext{font-family:var(--display);font-size:1.5rem;margin:4px 0 8px}
.tylist{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:10px}
.tyles{display:flex;align-items:center;gap:12px;text-align:left;border:3px solid var(--line);background:var(--sheet);border-radius:16px;padding:10px 14px;min-height:64px;color:var(--ink);cursor:pointer;touch-action:manipulation}
.tyles.cur{border-color:#2459d6;box-shadow:0 0 0 3px rgba(36,89,214,.18)}
.tyles.locked{opacity:.55;cursor:default}
.tyn{flex:none;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#2459d6;color:#fff;font-weight:800}
.tyles.locked .tyn{background:var(--soft)}
.tyt{display:flex;flex-direction:column;min-width:0} .tyt b{font-family:var(--display);font-size:1.1rem} .tyt small{color:var(--soft);font-size:.85rem}
.tyt small,.tyles{letter-spacing:0} .tydim{opacity:.25}
.tyt small{color:var(--soft)} .tyles .tyt small{color:var(--soft)}
.tyles .tyt small :not(.tydim){color:inherit}
.tybox{position:relative;background:var(--sheet);border:3px solid var(--line);border-radius:18px;padding:18px 20px;margin:12px 0;cursor:text;max-height:40vh;overflow:auto}
.tybox.focused{border-color:#2459d6}
.tytext{font:600 1.7rem/1.7 ui-monospace,"SF Mono",Menlo,Consolas,monospace;user-select:none;-webkit-user-select:none}
.tyw{display:inline-block;white-space:nowrap}
.tytext span[data-i]{border-radius:4px;padding:0 1px;color:var(--soft)}
.tytext span[data-i].ok{color:#1f8a5b}
.tytext span[data-i].cur{background:#ffe08a;color:#3b2a00;box-shadow:inset 0 -4px 0 #e08a00}
.tytext span[data-i].bad{background:#e5484d;color:#fff;box-shadow:none}
.tystart{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--sheet) 78%,transparent);font-family:var(--display);font-size:1.3rem;color:#2459d6;border-radius:15px}
.tybox.focused .tystart{display:none}
.tybox.shake{animation:tyshake .2s}
@keyframes tyshake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.tyin{position:fixed;left:-200px;top:40%;width:40px;height:30px;opacity:0;font-size:16px}
.tyhint{min-height:1.6em;text-align:center;font-size:1.05rem;margin:4px 0 8px}
.tykb{display:flex;flex-direction:column;gap:6px;align-items:center;margin:6px auto 12px;max-width:760px;user-select:none;-webkit-user-select:none}
.tyrow{display:flex;gap:6px;justify-content:center;width:100%}
.tyrow.r2{padding-left:3%} .tyrow.r3{padding-left:0}
.tyk{flex:1 1 0;max-width:62px;min-width:0;height:54px;border-radius:10px;border:2px solid var(--line);border-bottom:5px solid var(--fc,var(--line));background:var(--sheet);color:var(--ink);font:700 1.15rem var(--body);touch-action:manipulation;cursor:pointer;padding:0}
.tyk.shift{max-width:80px;flex:1.4 1 0;border-bottom-color:var(--soft)}
.tyk.shift.on{background:#dbe6ff}
.tyk.space{max-width:380px;flex:none;width:60%;border-bottom-color:var(--soft)}
.tyk.next{background:var(--fc,#ffe08a);color:#fff;border-color:var(--fc,#e08a00);transform:translateY(-2px)}
.tyk.space.next,.tyk.shift.next{background:#ffe08a;color:#3b2a00;border-color:#e08a00}
.tyk{pointer-events:none;cursor:default}   /* finger guide only, not tappable */
.tykbd{display:inline-block;min-width:2em;text-align:center;padding:2px 8px;border-radius:8px;border:2px solid var(--line);border-bottom:4px solid var(--fc,var(--line));background:var(--sheet);font:700 1rem var(--body);color:var(--ink)}
.tyctl{justify-content:center}
@media (max-width:520px){.tytext{font-size:1.3rem}.tyk{height:46px;font-size:1rem}.tykb{gap:4px}.tyrow{gap:4px}}
/* school worksheets */
.wslist{display:flex;flex-direction:column;gap:12px;margin-top:12px}
.wscard{gap:10px} .wshead{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px;align-items:baseline} .wshead b{font-family:var(--display);font-size:1.2rem}
.wsthumbs{display:flex;gap:10px;overflow-x:auto} .wsthumbs img{height:180px;max-width:100%;object-fit:contain;border-radius:12px;border:2px solid var(--line);background:#fff}
.wsprev{display:flex;flex-direction:column;gap:8px;padding-left:22px} .wsprev li span{white-space:pre-wrap}
/* class dashboard */
.dash table td{vertical-align:top;white-space:normal;min-width:70px} .dash table td:first-child{min-width:120px}
.dash tr.dwarn td{background:var(--red-wash)}
.dsort{font-size:.75rem;text-transform:uppercase;color:var(--soft);padding:0;text-decoration:none} .dsort.on{color:var(--ink);font-weight:700}
.dflag{display:flex;align-items:center;gap:8px;font-size:.95rem} .dflag input{width:22px;height:22px;min-height:0}
.setrow input[type=checkbox]{width:24px;height:24px;min-height:0}
.kidpick:has(.kidbtn:nth-child(7)){grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.kidpick:has(.kidbtn:nth-child(7)) .kidbtn{min-height:120px;padding:12px 8px;gap:4px;border-radius:20px}
.kidpick:has(.kidbtn:nth-child(7)) .bigav{width:52px;height:52px;font-size:1.6rem}
.kidpick:has(.kidbtn:nth-child(7)) .kidbtn b{font-size:1.2rem}
.kidpick:has(.kidbtn:nth-child(7)) .kidbtn span:last-child{font-size:.75rem}
/* warm-up option */
.wuopt{display:flex;align-items:center;gap:8px;font-size:.95rem;color:var(--ink)!important;flex-direction:row!important} .wuopt input{width:24px;height:24px;min-height:0}
/* spelling & grammar */
.spq{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}
.spq .spsay{max-width:420px}
.spsent{font-size:1.3rem;color:var(--soft);margin:4px 0 0}
.sppat{font-family:ui-monospace,Menlo,Consolas,monospace;letter-spacing:.15em;font-size:1.3rem}
.spbig{font-size:1.5rem;font-weight:700}
.spmine{display:flex;flex-direction:column;gap:10px;padding:8px 0}
.spmine textarea{font:inherit;font-size:1.05rem;padding:10px 12px;border-radius:12px;border:2px solid var(--line);background:var(--sheet);color:var(--ink);width:100%}
.grsent{line-height:2.1}
.grw{font:inherit;padding:2px 8px;border-radius:10px;border:2px dashed var(--line);background:var(--sheet);color:var(--ink);margin:2px 0;touch-action:manipulation;cursor:pointer}
.grw.ok{background:var(--green-wash);border:2px solid var(--green)} .grw.no{background:var(--red-wash);border-color:var(--red);text-decoration:line-through}
.grw.dim{opacity:.35} .grw.show{background:#fff3c4;border:3px solid #f2a900}
.grw:disabled{cursor:default}

/* letter pad: in-app keyboard for spelling (no tablet autocorrect) */
.lpad{display:flex;flex-direction:column;gap:12px;margin-top:6px}
.lpline{display:flex;gap:10px;align-items:stretch}
.lpshow{flex:1;min-height:58px;display:flex;align-items:center;padding:8px 16px;border:3px solid var(--blue,#2459d6);border-radius:14px;background:var(--paper,#fff);font-size:1.7rem;font-weight:700;letter-spacing:.06em;color:var(--ink,#1d2b4f);overflow:hidden;white-space:pre}
.lpcaret{display:inline-block;width:3px;height:1.3em;background:var(--blue,#2459d6);margin-left:2px;animation:lpblink 1s steps(1) infinite}
.lpph{color:var(--soft,#8a94ad);font-weight:500;font-size:1.1rem;letter-spacing:0;margin-left:6px}
@keyframes lpblink{50%{opacity:0}}
.lpkeys{display:flex;flex-direction:column;gap:7px;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.lprow{display:flex;gap:6px;justify-content:center}
.lprow button{flex:1;max-width:64px;min-height:56px;border-radius:10px;border:2px solid var(--line,#d8dfec);border-bottom-width:4px;background:var(--paper,#fff);color:var(--ink,#1d2b4f);font:inherit;font-size:1.35rem;font-weight:700;cursor:pointer;padding:0}
.lprow button:active{transform:translateY(2px);border-bottom-width:2px;background:var(--blue-wash,#e8efff)}
.lprow .lpdel{max-width:96px;flex:1.5;background:#fde8e8}
.lprow .lpspace{max-width:320px;flex:5;font-size:1rem}
.lprow .lpsym{max-width:64px}
.lpshake{animation:lpshake .35s}
@keyframes lpshake{25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}
.spyou{display:block;margin-bottom:4px}
.spwhy{display:block;margin-top:8px;padding-top:8px;border-top:1px dashed currentColor;font-weight:600}
@media (max-width:520px){.lprow{gap:4px}.lprow button{min-height:48px;font-size:1.1rem;border-radius:8px}}
