:root{--green: #378200;--green-d: #2a6300;--blue: #0870a8;--blue-d: #065680;--red: #d92b2b;--red-d: #b51f1f;--purple: #9b4fd6;--purple-d: #7636a8;--gold: #ffc800;--gold-t: #8a6800;--orange: #b05f00;--ink: #3c3c3c;--muted: #636363;--line: #e5e5e5;--bg: #fff;--soft: #f7f7f7;font-family:ui-rounded,SF Pro Rounded,Nunito,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);background:var(--bg)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%}body{overscroll-behavior-y:none}#app{max-width:560px;margin:0 auto;min-height:100dvh;position:relative}h1{font-size:1.6rem;margin:.4em 0;font-weight:800}h2{font-weight:800}h3{margin:1.4em 0 .5em;font-size:1.05rem}h2.h3{margin:1.4em 0 .5em;font-size:1.05rem;font-weight:700}a{color:var(--blue)}.muted{color:var(--muted)}.small{font-size:.85rem}.btn{display:block;width:100%;border:0;border-radius:16px;padding:14px 18px;font:inherit;font-weight:800;font-size:1rem;letter-spacing:.04em;text-transform:uppercase;cursor:pointer;text-align:center;text-decoration:none;margin:10px 0;color:#fff;transition:transform .05s}.btn:active:not(:disabled){transform:translateY(3px);box-shadow:none!important}.btn.big{padding:16px;font-size:1.05rem}.btn.green{background:var(--green);box-shadow:0 4px 0 var(--green-d)}.btn.blue{background:var(--blue);box-shadow:0 4px 0 var(--blue-d)}.btn.red{background:var(--red);box-shadow:0 4px 0 var(--red-d)}.btn.purple{background:var(--purple);box-shadow:0 4px 0 var(--purple-d)}.btn.github{background:#24292f;color:#fff;box-shadow:0 4px #000;margin-top:12px}.card.notice{border-color:var(--blue);background:#ddf4ff;color:var(--ink);margin:0 0 12px;text-align:left;line-height:1.4}.card.error{border-color:#c62828;background:#fdecea;color:#7a1414;margin:0 0 12px;text-align:left;line-height:1.4}.card.error .close-alert{width:auto;min-height:44px;margin-top:10px;padding:8px 16px;font-size:.9rem;border-color:#c62828;box-shadow:0 3px #c62828}.btn.ghost{background:#fff;color:var(--blue);border:2px solid var(--line);box-shadow:0 3px 0 var(--line)}.btn:disabled{background:var(--line);color:#afafaf;box-shadow:0 4px #ccc;cursor:default}.splash{min-height:100dvh;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:24px;text-align:center}.splash .hero{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center}.splash h1{font-size:2rem;color:var(--green);margin-top:16px}.tag{font-size:1.15rem;color:var(--muted);max-width:22em}.track-pill{margin-top:8px;background:var(--soft);border:2px solid var(--line);border-radius:999px;padding:8px 16px;font-size:.9rem}.cta{width:100%}.link{display:inline-block;margin:4px 8px;padding:12px 8px;min-height:44px;font-weight:700}.logo.pulse{animation:pulse 1.2s infinite ease-in-out}@keyframes pulse{50%{transform:scale(1.08)}}.stats{position:sticky;top:0;z-index:5;background:#fff;display:flex;align-items:center;gap:14px;padding:10px 16px;border-bottom:2px solid var(--line)}.brand{display:flex;align-items:center;gap:6px;font-weight:800;color:var(--green);margin-right:auto;text-decoration:none;min-width:0}.brand img{flex:none}.brand .bname{display:flex;flex-direction:column;min-width:0;line-height:1.15}.brand .bline{display:flex;align-items:center;gap:4px;min-width:0}.brand .btitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.brand .caret{flex:none;font-size:.7rem;color:var(--blue);background:#ddf4ff;border-radius:6px;padding:1px 5px}.brand .bsum{font-size:.7rem;font-weight:600;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat{display:flex;align-items:center;gap:4px;font-size:1.05rem}.stat b{font-weight:800}.flame.off{filter:grayscale(1);opacity:.5}.goal .ring{--p: 0;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--gold) calc(var(--p) * 360deg),var(--line) 0)}.goal .ring span{width:26px;height:26px;border-radius:50%;background:#fff;display:grid;place-items:center;font-size:.65rem;font-weight:800}.scroll{padding:12px 16px 100px}.center{text-align:center}.big-emoji{font-size:4rem;margin-top:24px}.review-card{width:100%;display:flex;align-items:center;gap:12px;text-align:left;font:inherit;color:var(--ink);border:2px solid var(--purple);background:#faf0ff;border-radius:16px;padding:12px 14px;margin:6px 0 4px;cursor:pointer;box-shadow:0 4px 0 var(--purple-d)}.review-card>span:first-child{font-size:1.8rem}.review-card small{display:block;color:var(--muted)}.review-card .go{margin-left:auto;font-size:1.8rem;color:var(--purple-d)}.unit{margin:18px 0 8px}.unit-head{background:var(--c);color:#fff;border-radius:16px;padding:14px 16px;display:flex;align-items:center;gap:12px;box-shadow:0 4px #0000002e}.unit-head small{font-weight:800;letter-spacing:.08em}.unit-head h2{margin:2px 0 0;font-size:1.1rem;line-height:1.25}.unit-head .mast{margin-left:auto;font-weight:800;background:#0003;border-radius:999px;padding:4px 10px}.path{display:flex;flex-direction:column;align-items:center;gap:14px;padding:22px 0 6px}.node-wrap{position:relative;display:flex;flex-direction:column;align-items:center}.node{width:76px;height:70px;border-radius:50%;border:0;font-size:1.9rem;cursor:pointer;color:#fff;background:var(--c);box-shadow:0 7px #00000038;transition:transform .06s}.node:active:not(:disabled){transform:translateY(5px);box-shadow:0 2px #00000038}.node.done{background:var(--gold);box-shadow:0 7px #e0a800}.node.locked{background:var(--line);box-shadow:0 7px #cfcfcf;font-size:1.4rem;cursor:default}.node.current{outline:6px solid color-mix(in srgb,var(--c) 30%,transparent);outline-offset:4px}.bubble{position:absolute;top:-34px;background:#fff;border:2px solid var(--line);color:var(--green);font-weight:800;padding:4px 12px;border-radius:12px;animation:bob 1.4s infinite ease-in-out;z-index:2;font-size:.85rem}@keyframes bob{50%{transform:translateY(-5px)}}.tabs{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:560px;display:flex;background:#fff;border-top:2px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:6}.tabs a{flex:1;display:flex;flex-direction:column;align-items:center;padding:8px 0 10px;font-size:.72rem;font-weight:800;color:var(--muted);text-decoration:none;position:relative;text-transform:uppercase;letter-spacing:.04em}.tabs a .i{font-size:1.5rem}.tabs a.on{color:var(--blue)}.tabs a.on .i{filter:drop-shadow(0 0 0 var(--blue))}.badge{position:absolute;top:4px;right:calc(50% - 26px);background:var(--red);color:#fff;font-style:normal;border-radius:999px;font-size:.7rem;padding:1px 6px}.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px;margin:12px 0 18px}.tile{border:2px solid var(--line);border-radius:16px;padding:12px;text-align:center}.tile b{display:block;font-size:1.5rem;font-weight:800}.tile small{color:var(--muted);font-weight:700}.tile.gold{border-color:var(--gold)}.tile.gold small{color:var(--gold-t)}.tile.green{border-color:var(--green)}.tile.green small{color:var(--green-d)}.tile.orange{border-color:var(--orange)}.tile.orange small{color:var(--orange)}.prow{margin:14px 0}.ptitle{display:flex;gap:8px;align-items:center}.ptitle .muted{margin-left:auto;font-size:.85rem}.bar{height:14px;background:var(--line);border-radius:999px;overflow:hidden;margin:6px 0}.bar>div{height:100%;border-radius:999px;background:var(--green);transition:width .35s ease}.bar.big{height:16px;flex:1}.bar.big>div{background:var(--green);box-shadow:inset 0 -4px #00000014}.me{display:flex;gap:14px;align-items:center;margin:10px 0}.me h1{margin:0;font-size:1.4rem}.avatar{width:64px;height:64px;border-radius:50%;object-fit:cover;border:3px solid var(--line)}.avatar.init{display:grid;place-items:center;background:var(--blue);color:#fff;font-weight:800;font-size:1.8rem;border:0}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{border:2px solid var(--line);background:#fff;border-radius:12px;padding:10px 14px;font:inherit;font-weight:800;cursor:pointer;box-shadow:0 3px 0 var(--line)}.chip.on{border-color:var(--blue);color:var(--blue);background:#ddf4ff;box-shadow:0 3px 0 var(--blue)}.card{border:2px solid var(--line);border-radius:16px;padding:14px}.card.ok{border-color:var(--green);background:#d7ffb8;color:var(--ink)}.lesson{min-height:100dvh;display:flex;flex-direction:column}.ltop{display:flex;align-items:center;gap:12px;padding:14px 16px}.x{border:0;background:none;font-size:1.4rem;color:var(--muted);cursor:pointer;padding:4px 8px}.qwrap{padding:8px 16px 260px;flex:1}.qmeta{font-weight:800;font-size:.9rem;text-transform:uppercase;letter-spacing:.04em}.q{font-size:1.25rem;line-height:1.4;margin:10px 0 18px}.opts{display:flex;flex-direction:column;gap:10px}.opt{display:flex;gap:12px;align-items:center;text-align:left;font:inherit;font-size:1rem;line-height:1.35;color:var(--ink);background:#fff;border:2px solid var(--line);border-radius:14px;padding:14px;cursor:pointer;box-shadow:0 4px 0 var(--line);min-height:56px}.opt .k{flex:none;width:28px;height:28px;border:2px solid var(--line);border-radius:8px;display:grid;place-items:center;font-size:.8rem;font-weight:800;color:var(--muted)}.opt.sel{border-color:var(--blue);background:#ddf4ff;box-shadow:0 4px 0 var(--blue)}.opt.sel .k{border-color:var(--blue);color:var(--blue)}.opt.right{border-color:var(--green);background:#d7ffb8;box-shadow:0 4px 0 var(--green)}.opt.wrong{border-color:var(--red);background:#ffdfe0;box-shadow:0 4px 0 var(--red)}.opt.right .k{border-color:var(--green);color:var(--green-d)}.opt.wrong .k{border-color:var(--red);color:var(--red-d)}.opt:disabled{cursor:default}.sheet{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:560px;padding:14px 16px calc(14px + env(safe-area-inset-bottom));background:#fff;border-top:2px solid var(--line);max-height:62dvh;overflow-y:auto}.sheet.good{background:#d7ffb8;border-color:#b8f28b;color:#2f6b00;animation:up .2s ease-out}.sheet.bad{background:#ffdfe0;border-color:#ffc1c1;color:var(--red-d);animation:up .2s ease-out}.sheet h3{margin:4px 0 6px;font-size:1.3rem}.sheet .expl,.sheet .ans{color:var(--ink);margin:6px 0;line-height:1.45}.sheet .ref{color:var(--muted);font-size:.8rem;margin:4px 0 8px}@keyframes up{0%{transform:translate(-50%,40px)}to{transform:translate(-50%)}}.celebrate{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;text-align:center;overflow:hidden;position:relative}.celebrate h1{color:var(--gold-t);font-size:2rem;text-shadow:0 2px 0 #ffe27a}.celebrate .tiles{width:100%}.trophy{font-size:5.5rem;animation:pop .6s cubic-bezier(.2,1.6,.4,1)}@keyframes pop{0%{transform:scale(0) rotate(-30deg)}}.goal-hit{font-weight:800;color:var(--orange)}.confetti{position:absolute;inset:0;pointer-events:none}.confetti i{position:absolute;top:-20px;width:10px;height:16px;border-radius:3px;animation:fall 2.4s ease-in forwards}@keyframes fall{to{transform:translateY(105dvh) rotate(720deg);opacity:.8}}.prose{line-height:1.55}.prose h2{margin:1.4em 0 .5em;font-size:1.05rem;font-weight:700}.prose ul{padding-left:1.2em}.back{font-weight:800;text-decoration:none;display:inline-block;margin:0 0 0 -8px;padding:12px 8px;min-height:44px}.foot{margin:28px 0 8px;text-align:center;font-size:.75rem;color:var(--muted);line-height:1.5}.foot a{color:var(--muted);display:inline-block;padding:13px 6px;margin:-13px 0;min-height:44px}.emu{color:var(--orange);font-weight:800}.spinner{width:48px;height:48px;border:6px solid var(--line);border-top-color:var(--green);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}#toast{position:fixed;left:50%;bottom:90px;transform:translate(-50%) translateY(20px);background:var(--ink);color:#fff;padding:10px 16px;border-radius:12px;font-weight:700;opacity:0;transition:all .25s;pointer-events:none;z-index:20;max-width:90vw;text-align:center}#toast.show{opacity:1;transform:translate(-50%) translateY(0)}.track-list{display:flex;flex-direction:column;gap:12px;margin:14px 0}.track-card{display:flex;align-items:center;gap:12px;text-align:left;font:inherit;color:var(--ink);background:#fff;cursor:pointer;border:2px solid var(--line);border-radius:16px;padding:14px;box-shadow:0 4px 0 var(--line)}.track-card.on{border-color:var(--blue);background:#ddf4ff;box-shadow:0 4px 0 var(--blue)}.track-card .ticon{font-size:2rem}.track-card .tbody{display:flex;flex-direction:column;gap:2px}.track-card .tbody b{font-size:1.1rem}.track-card .tbody small{color:var(--muted)}.track-card.soon{cursor:default;opacity:.7;background:#f7f7f7;box-shadow:none}.track-card .tsoon{margin-left:auto;flex-shrink:0;background:#e5e5e5;color:var(--muted);border-radius:999px;padding:3px 10px;font-size:.75rem;font-weight:800;white-space:nowrap}.track-card .tnow{margin-left:auto;background:var(--blue);color:#fff;border-radius:999px;padding:3px 10px;font-size:.75rem;font-weight:800}.cap-card{text-decoration:none;border-color:var(--gold);background:#fff8db;box-shadow:0 4px #e0a800;margin-top:18px}.caps{list-style:none;padding:0;margin:12px 0;display:flex;flex-direction:column;gap:12px}.cap{display:flex;gap:12px;border:2px solid var(--line);border-radius:16px;padding:12px}.cap.done{border-color:var(--green);background:#f1ffe6}.cap h3{margin:2px 0 4px;font-size:1rem}.cap p{margin:4px 0}.tick{flex:none;width:34px;height:34px;border-radius:10px;border:2px solid var(--line);background:#fff;font:inherit;font-weight:800;color:#fff;cursor:pointer;box-shadow:0 3px 0 var(--line)}.cap.done .tick{background:var(--green);border-color:var(--green-d);box-shadow:0 3px 0 var(--green-d)}.sheet .ref a{color:var(--blue-d);font-weight:700}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.report-btn{display:block;margin:14px auto 0;background:none;border:0;font:inherit;font-size:.85rem;font-weight:700;color:var(--muted);text-decoration:underline;cursor:pointer;padding:8px}.sheet .report-btn{margin-top:8px}.modal{position:fixed;inset:0;z-index:50;background:#00000073;display:flex;align-items:flex-end;justify-content:center}.modal-card{width:100%;max-width:560px;background:#fff;color:var(--ink);border-radius:20px 20px 0 0;padding:18px 16px calc(16px + env(safe-area-inset-bottom));max-height:90dvh;overflow-y:auto;animation:rise .2s ease-out}@keyframes rise{0%{transform:translateY(40px)}}.modal-card h3{margin:0 0 4px}.modal-card .small{font-size:.85rem}.modal-card .right{text-align:right;margin:2px 0 10px}.reasons{border:0;padding:0;margin:10px 0;display:flex;flex-direction:column;gap:6px}.reasons .rr{display:flex;gap:10px;align-items:center;border:2px solid var(--line);border-radius:12px;padding:10px 12px;cursor:pointer}.reasons .rr:has(input:checked){border-color:var(--blue);background:#ddf4ff}.modal-card textarea{width:100%;box-sizing:border-box;font:inherit;border:2px solid var(--line);border-radius:12px;padding:10px;margin-top:4px;resize:vertical}.modal-card .row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.install-card{position:relative;border:2px solid var(--blue);background:#ddf4ff;border-radius:16px;padding:12px 14px;margin:6px 0 4px}.install-card h3{margin:0 28px 4px 0;font-size:1rem}.install-card p{margin:0 0 10px}.install-card .btn{padding:10px 14px}.install-steps{margin:0;padding-left:1.3em;font-size:.9rem}.install-steps li{margin:2px 0}.install-x{position:absolute;top:6px;right:6px;width:32px;height:32px;border:0;background:transparent;font:inherit;font-size:1rem;color:var(--muted);cursor:pointer;border-radius:8px}.btn.gold{background:var(--gold);color:#6b5200;box-shadow:0 4px #e0a800}.btn small,.btn .sub{font-size:.75rem;letter-spacing:0;text-transform:none;font-weight:700}.daily{border:2px solid var(--purple);background:#faf0ff;border-radius:18px;padding:14px;margin:10px 0 6px;box-shadow:0 4px 0 var(--purple-d)}.daily-top{display:flex;gap:12px;align-items:flex-start}.daily h2{margin:0 0 4px;font-size:1.2rem}.daily p{margin:0;line-height:1.4}.daily .pi{font-size:2rem}.done-today{color:var(--green-d);font-weight:800;margin:10px 0 0!important}.due-card{border:2px solid var(--line);border-radius:16px;padding:12px 14px;margin:14px 0 4px}.due-card p{margin:0 0 4px;line-height:1.4}.pcards{display:flex;flex-direction:column;gap:12px}.pcard{width:100%;display:flex;align-items:center;gap:12px;text-align:left;font:inherit;color:var(--ink);text-decoration:none;background:#fff;border:2px solid var(--line);border-radius:16px;padding:12px 14px;cursor:pointer;box-shadow:0 4px 0 var(--line)}.pcard:disabled{cursor:default;opacity:.6;box-shadow:none}.pcard .pi{font-size:1.7rem;flex:none;width:34px;text-align:center}.pcard .pbody{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.pcard .pbody small{color:var(--muted);line-height:1.35}.pcard .pxp{flex:none;font-weight:800;color:var(--gold-t);font-size:.85rem;white-space:nowrap}.pcard .go{margin-left:auto;font-size:1.6rem;color:var(--muted)}.count{font-style:normal;background:var(--red);color:#fff;border-radius:999px;font-size:.75rem;padding:1px 8px;vertical-align:2px}.mistakes{list-style:none;padding:0;margin:10px 0;display:flex;flex-direction:column;gap:12px;text-align:left}.mistake{border:2px solid var(--line);border-radius:16px;padding:12px 14px}.mistake p{margin:6px 0;line-height:1.45;overflow-wrap:anywhere}.mistake .mq{font-weight:700;font-size:1.02rem}.mistake .yours span{color:var(--red-d);font-weight:800}.mistake .rightans span{color:var(--green-d);font-weight:800}.mistake .ref{color:var(--muted);font-size:.8rem}.mistake .ref a{color:var(--blue-d);font-weight:700}.mistake .streakline{color:var(--orange);font-weight:700;font-size:.85rem}.unit-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0 0}.unit-actions .btn{margin:0;padding:10px 8px;font-size:.9rem}.medal{font-size:1.1rem;margin-right:4px}.prow .medal{margin:0}.qactions{display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px}.qactions .report-btn{margin:0}.bm-btn{background:none;border:2px solid var(--line);border-radius:999px;font:inherit;font-size:.85rem;font-weight:800;color:var(--muted);padding:6px 12px;cursor:pointer}.bm-btn.on{border-color:var(--gold);color:var(--gold-t);background:#fff8db}.sheet .qactions{margin-top:4px}.sheet h3.saved{color:var(--blue-d)}.celebrate.mastery-result{justify-content:flex-start;padding-top:40px}.celebrate .mistakes{width:100%}.dlist{gap:8px}.dlist .pcard{padding-top:10px;padding-bottom:10px}.dlist .pcard .pi{font-size:1.4rem}.leave-btns{display:flex;flex-direction:column;gap:10px;margin-top:14px}.btn.ghost.danger{color:var(--red-d)}
