:root{--paper:#f1e8d6;--paper-deep:#e7dac0;--ink:#221f1b;--ink-soft:#5b5347;--seal:#aa3b2e;--seal-deep:#86281e;--jade:#3f6b58;--jade-soft:#e2eee5;--gold:#b8893b;--line:#221f1b24;--card:#fbf6ea}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;background-image:radial-gradient(circle at 12% 8%,#aa3b2e0f,#0000 40%),radial-gradient(circle at 90% 85%,#3f6b5812,#0000 45%);min-height:100vh;font-family:Space Grotesk,sans-serif}.wrap{max-width:1080px;margin:0 auto;padding:28px 22px 80px}header{border-bottom:2px solid var(--ink);flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:26px;padding-bottom:18px;display:flex}.brand{align-items:center;gap:16px;display:flex}.seal{background:var(--seal);width:56px;height:56px;color:var(--paper);box-shadow:0 3px 0 var(--seal-deep);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-family:Noto Serif SC,serif;font-size:26px;font-weight:900;display:flex;transform:rotate(-2deg)}.brand h1{letter-spacing:.2px;margin:0;font-family:Noto Serif SC,serif;font-size:clamp(24px,3.4vw,34px);font-weight:900}.brand p{color:var(--ink-soft);margin:2px 0 0;font-family:JetBrains Mono,monospace;font-size:13.5px}.stat-strip{text-align:right;flex-wrap:wrap;gap:22px;display:flex}.stat{min-width:78px}.stat .num{color:var(--seal);font-family:Noto Serif SC,serif;font-size:26px;font-weight:900;line-height:1}.stat .lbl{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);font-size:11px}.intro{grid-template-columns:1.3fr 1fr;gap:28px;margin-bottom:34px;display:grid}@media (max-width:760px){.intro{grid-template-columns:1fr}}.intro h2{margin:0 0 12px;font-family:Noto Serif SC,serif;font-size:clamp(22px,3vw,30px);font-weight:600;line-height:1.25}.intro p{color:var(--ink-soft);margin:0 0 10px;font-size:15px;line-height:1.6}.method{background:var(--card);border:1px solid var(--line);box-shadow:3px 3px 0 var(--line);border-radius:10px;padding:18px 20px;font-size:13.5px;line-height:1.65}.method b{color:var(--seal)}.legend-row{flex-wrap:wrap;gap:14px;margin-top:14px;display:flex}.legend{color:var(--ink-soft);align-items:center;gap:6px;font-family:JetBrains Mono,monospace;font-size:11.5px;display:flex}.dot{border-radius:50%;width:8px;height:8px;display:inline-block}.rail{scrollbar-width:thin;gap:8px;margin-bottom:18px;padding-bottom:10px;display:flex;overflow-x:auto}.chip{border:1px solid var(--ink);color:var(--ink);cursor:pointer;white-space:nowrap;background:0 0;border-radius:999px;flex-shrink:0;padding:8px 14px;font-family:JetBrains Mono,monospace;font-size:12px;transition:all .15s}.chip:hover{background:#221f1b0f}.chip.active{background:var(--ink);color:var(--paper)}.chip .ct{opacity:.55;margin-left:6px}.stage{grid-template-columns:1fr 230px;align-items:start;gap:24px;display:grid}@media (max-width:820px){.stage{grid-template-columns:1fr}}.deck-area{position:relative}.progress-track{background:var(--line);border-radius:4px;height:4px;margin-bottom:18px;overflow:hidden}.progress-fill{background:var(--seal);width:0%;height:100%;transition:width .25s}.card{background:var(--card);border:1px solid var(--ink);cursor:pointer;min-height:330px;box-shadow:6px 6px 0 var(--ink);-webkit-user-select:none;user-select:none;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;padding:30px 20px;transition:transform .12s;display:flex;position:relative}.card:active{box-shadow:4px 4px 0 var(--ink);transform:translateY(2px)}.card .cat-tag{color:var(--ink-soft);letter-spacing:.06em;text-transform:uppercase;font-family:JetBrains Mono,monospace;font-size:11px;position:absolute;top:16px;left:18px}.card .idx-tag{color:var(--ink-soft);font-family:JetBrains Mono,monospace;font-size:11px;position:absolute;top:16px;right:18px}.hanzi{color:var(--ink);margin-bottom:14px;font-family:Noto Serif SC,serif;font-size:clamp(48px,9vw,84px);font-weight:900;line-height:1}.pinyin{color:var(--seal);letter-spacing:.01em;margin-bottom:18px;font-family:Space Grotesk,sans-serif;font-size:clamp(24px,3.6vw,32px);font-weight:600}.english{color:var(--jade);text-align:center;min-height:36px;font-size:clamp(22px,3.2vw,30px);font-weight:600}.step-rail{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);align-items:center;gap:8px;margin-bottom:20px;font-family:JetBrains Mono,monospace;font-size:10.5px;display:flex}.step-pt{border:1px solid var(--line);border-radius:999px;padding:4px 10px;transition:all .15s}.step-pt.active{border-color:var(--ink);color:var(--ink);background:var(--paper)}.step-pt.done{border-color:var(--jade);color:var(--jade);background:var(--jade-soft)}.step-arrow{opacity:.4}.flip-hint{color:var(--ink-soft);letter-spacing:.04em;margin-top:18px;font-family:JetBrains Mono,monospace;font-size:11px}.english.hidden{visibility:hidden}.controls{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}.btn{border:1px solid var(--ink);background:var(--paper);color:var(--ink);cursor:pointer;box-shadow:3px 3px 0 var(--ink);border-radius:8px;padding:10px 16px;font-family:JetBrains Mono,monospace;font-size:12.5px;transition:all .1s}.btn:hover{box-shadow:4px 4px 0 var(--ink);transform:translate(-1px,-1px)}.btn:active{box-shadow:1px 1px 0 var(--ink);transform:translate(0)}.btn.primary{background:var(--seal);color:var(--paper);border-color:var(--seal-deep)}.btn.ghost{opacity:.7}.btn.know{border-color:var(--jade);color:var(--jade)}.btn.again{border-color:var(--gold);color:var(--gold)}.panel{background:var(--paper-deep);border:1px solid var(--line);border-radius:14px;padding:18px}.panel h3{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin:0 0 12px;font-family:JetBrains Mono,monospace;font-size:11px}.speed-opt{flex-direction:column;gap:6px;margin-bottom:18px;display:flex}.speed-opt label{cursor:pointer;border:1px solid #0000;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex}.speed-opt label.active{border-color:var(--ink);background:var(--card)}.mini-stats{flex-direction:column;gap:10px;font-family:JetBrains Mono,monospace;font-size:12px;display:flex}.mini-stats .row{color:var(--ink-soft);justify-content:space-between;display:flex}.mini-stats .row b{color:var(--ink)}.reset-link{color:var(--ink-soft);cursor:pointer;background:0 0;border:none;margin-top:16px;padding:0;font-family:JetBrains Mono,monospace;font-size:11px;text-decoration:underline}footer{border-top:1px solid var(--line);color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:50px;padding-top:18px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex}::-webkit-scrollbar{height:6px}::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}@media (prefers-reduced-motion:reduce){.card,.btn{transition:none}}:root{--bad:#b0412f;--bad-soft:#f6e1dc;--gold-soft:#f4e8cf;--tabbar-h:64px}html{-webkit-tap-highlight-color:transparent}a{color:var(--seal)}button{font:inherit}.brand{color:inherit;text-decoration:none}.muted{color:var(--ink-soft);font-size:13.5px;line-height:1.6}.card.hidden,.empty.hidden{display:none}.section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin:28px 0 12px;font-family:JetBrains Mono,monospace;font-size:11px;font-weight:500}.btn{justify-content:center;align-items:center;gap:6px;min-height:42px;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:3px 3px 0 var(--ink);transform:none}.btn.wide{width:100%;min-height:50px;font-size:14px}.btn.danger{border-color:var(--bad);color:var(--bad)}.icon-btn{border:1px solid var(--line);background:var(--card);color:var(--ink-soft);cursor:pointer;vertical-align:middle;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;display:inline-flex}.icon-btn:hover{color:var(--seal);border-color:var(--seal)}.cta-row{flex-wrap:wrap;gap:10px;margin-top:16px;display:flex}.cta-row.center{justify-content:center}.method a{color:var(--gold);font-weight:600}.tabs{gap:6px;margin-bottom:24px;display:flex}.tabs a{color:var(--ink);border:1px solid var(--ink);border-radius:999px;align-items:center;gap:8px;padding:9px 16px;font-family:JetBrains Mono,monospace;font-size:12.5px;text-decoration:none;display:flex}.tabs a.active{background:var(--ink);color:var(--paper)}.tab-ico{font-family:Noto Serif SC,serif;font-size:14px;font-weight:900}.path{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;margin:0;padding:0;list-style:none;display:grid}.lesson-card{background:var(--card);border:1px solid var(--line);color:inherit;border-radius:12px;align-items:center;gap:14px;padding:14px 16px;text-decoration:none;transition:all .12s;display:flex}.lesson-card:hover{border-color:var(--ink);box-shadow:3px 3px 0 var(--ink)}.lesson-card.next{border-color:var(--seal);box-shadow:4px 4px 0 var(--seal)}.lesson-num{background:var(--paper-deep);width:38px;height:38px;color:var(--ink);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-family:Noto Serif SC,serif;font-weight:900;display:flex}.lesson-card.next .lesson-num{background:var(--seal);color:var(--paper)}.lesson-card.done .lesson-num{background:var(--jade);color:var(--paper)}.lesson-main{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.lesson-title{font-size:15px;font-weight:600}.lesson-pattern{color:var(--ink-soft);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;overflow:hidden}.lesson-pattern b{color:var(--ink);font-family:Noto Serif SC,serif}.lesson-meta{text-align:right;color:var(--ink-soft);flex-direction:column;gap:2px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex}.lesson-meta b{color:var(--jade)}.lesson-card.next .lesson-meta b{color:var(--seal)}.back-link{color:var(--ink-soft);font-family:JetBrains Mono,monospace;font-size:12px;text-decoration:none}.lesson-head{margin:10px 0 18px}.lesson-kicker{text-transform:uppercase;letter-spacing:.08em;color:var(--seal);font-family:JetBrains Mono,monospace;font-size:11px}.lesson-head h2{margin:4px 0 0;font-family:Noto Serif SC,serif;font-size:clamp(24px,4vw,34px)}.pattern-card{background:var(--card);border:1px solid var(--ink);box-shadow:5px 5px 0 var(--ink);text-align:center;border-radius:14px;padding:22px}.pattern-zh{font-family:Noto Serif SC,serif;font-size:clamp(26px,5vw,40px);font-weight:900}.pattern-py{color:var(--seal);margin-top:6px;font-size:18px;font-weight:600}.pattern-en{color:var(--jade);margin-top:4px;font-weight:600}.pattern-note{color:var(--ink-soft);max-width:560px;margin:14px auto 0;font-size:14px;line-height:1.6}.examples{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.examples li{background:var(--card);border:1px solid var(--line);border-radius:10px;align-items:center;gap:12px;padding:10px 14px;display:flex}.ex-zh{font-family:Noto Serif SC,serif;font-size:22px;font-weight:600;line-height:1.9}.ex-zh ruby{margin-right:4px}.ex-zh rt{color:var(--seal);font-family:Space Grotesk,sans-serif;font-size:11.5px;font-weight:600}.ex-en{color:var(--jade);font-size:13.5px}.word-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;display:grid}.word-chip{text-align:left;border:1px solid var(--line);background:var(--card);cursor:pointer;color:var(--ink);border-radius:10px;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;display:flex}.word-chip:hover{border-color:var(--ink)}.word-chip b{font-family:Noto Serif SC,serif;font-size:20px}.word-chip span{color:var(--seal);font-size:13px;font-weight:600}.word-chip small{color:var(--ink-soft);font-size:12px}.sticky-cta{z-index:5;margin-top:24px;position:sticky;bottom:12px}.drill-top{align-items:center;gap:12px;margin-bottom:18px;display:flex}.drill-top .progress-track{flex:1;height:8px;margin:0}.drill-count{color:var(--ink-soft);text-align:right;min-width:44px;font-family:JetBrains Mono,monospace;font-size:12px}.ex{background:var(--card);border:1px solid var(--ink);box-shadow:6px 6px 0 var(--ink);border-radius:16px;max-width:720px;margin:0 auto;padding:22px 20px}.ex-kind{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin-bottom:18px;font-family:JetBrains Mono,monospace;font-size:11px}.prompt-zh{text-align:center;font-family:Noto Serif SC,serif;font-size:clamp(30px,7vw,48px);font-weight:900;line-height:1.25}.prompt-py{color:var(--seal);text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin:8px 0 20px;font-size:clamp(18px,3.4vw,24px);font-weight:600;display:flex}.prompt-en{color:var(--jade);text-align:center;margin:4px 0 20px;font-size:clamp(20px,4vw,26px);font-weight:600}.prompt-en.small{margin:8px 0 18px;font-size:16px}.options{gap:10px;display:grid}.option{text-align:left;border:1px solid var(--ink);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:10px;align-items:center;gap:12px;min-height:52px;padding:12px 14px;font-size:15.5px;transition:all .1s;display:flex}.option:hover:not(:disabled){background:var(--paper-deep)}.option:disabled{cursor:default;opacity:.6}.option.right{border-color:var(--jade);background:var(--jade-soft);opacity:1}.option.wrong{border-color:var(--bad);background:var(--bad-soft);opacity:1}.opt-key{border:1px solid var(--line);color:var(--ink-soft);border-radius:4px;padding:2px 6px;font-family:JetBrains Mono,monospace;font-size:11px}.opt-zh{flex-direction:column;gap:2px;display:flex}.opt-zh b{font-family:Noto Serif SC,serif;font-size:20px}.opt-zh small{color:var(--seal);font-size:13px;font-weight:600}.slots{border-bottom:2px solid var(--ink);flex-wrap:wrap;align-items:flex-end;gap:8px;min-height:76px;margin-bottom:18px;padding:8px 0 12px;display:flex;position:relative}.slots-hint{color:var(--ink-soft);pointer-events:none;font-family:JetBrains Mono,monospace;font-size:11.5px;position:absolute;bottom:14px;left:0}.slots.has-tiles .slots-hint{display:none}.bank{flex-wrap:wrap;justify-content:center;gap:8px;min-height:60px;display:flex}.tile{border:1px solid var(--ink);background:var(--paper);box-shadow:2px 2px 0 var(--ink);cursor:pointer;color:var(--ink);border-radius:9px;flex-direction:column;justify-content:center;align-items:center;gap:1px;min-width:48px;min-height:52px;padding:7px 12px;display:flex}.tile:active{box-shadow:1px 1px 0 var(--ink);transform:translate(1px,1px)}.tile-py{color:var(--seal);font-size:15px;font-weight:600}.tile-hz{font-family:Noto Serif SC,serif;font-size:17px;font-weight:600}.slots .tile{background:var(--card)}.ex.answered .tile{cursor:default}.ex.is-ok .slots .tile{border-color:var(--jade);box-shadow:2px 2px 0 var(--jade)}.ex.is-bad .slots .tile{border-color:var(--bad);box-shadow:2px 2px 0 var(--bad)}.listen-row{justify-content:center;gap:10px;margin:6px 0 18px;display:flex}.big-say{min-height:56px;padding:0 26px;font-size:15px}.type-label{color:var(--ink-soft);margin-bottom:6px;font-size:12.5px;display:block}.py-input{border:1px solid var(--ink);background:var(--paper);width:100%;color:var(--ink);border-radius:10px;padding:12px 14px;font-family:Space Grotesk,sans-serif;font-size:18px}.py-input:focus{outline:2px solid var(--seal);outline-offset:1px}.py-preview{color:var(--seal);min-height:28px;margin:8px 2px;font-size:18px;font-weight:600}.tone-keys{flex-wrap:wrap;gap:8px;display:flex}.tone-key{border:1px solid var(--line);background:var(--paper);cursor:pointer;min-width:48px;min-height:44px;color:var(--ink);border-radius:8px;justify-content:center;align-items:center;gap:3px;font-family:JetBrains Mono,monospace;font-size:15px;display:flex}.tone-key small{color:var(--seal);font-size:16px}.ex-foot{margin-top:20px}.feedback{border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.feedback.correct{background:var(--jade-soft);border:1px solid var(--jade)}.feedback.wrong{background:var(--bad-soft);border:1px solid var(--bad)}.feedback.tones{background:var(--gold-soft);border:1px solid var(--gold)}.fb-title{font-size:16px;font-weight:700}.feedback.correct .fb-title{color:var(--jade)}.feedback.wrong .fb-title{color:var(--bad)}.feedback.tones .fb-title{color:#8a6420}.fb-note{color:var(--ink-soft);font-size:13.5px}.fb-zh{flex-wrap:wrap;align-items:center;gap:10px;font-family:Noto Serif SC,serif;font-size:22px;font-weight:600;display:flex}.fb-py{color:var(--seal);font-weight:600}.fb-en{color:var(--jade);font-size:14px}.results{text-align:center;max-width:560px;margin:0 auto;padding:30px 10px}.results h2{margin:14px 0 6px;font-family:Noto Serif SC,serif}.seal.big{width:auto;min-width:80px;height:80px;margin:0 auto;padding:0 14px;font-size:30px}.score{color:var(--seal);font-family:Noto Serif SC,serif;font-size:56px;font-weight:900}.missed{text-align:left;font-size:14px;line-height:1.7}.missed b{font-family:Noto Serif SC,serif}.practice-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px;display:grid}.practice-card{text-align:left;border:1px solid var(--ink);background:var(--card);box-shadow:4px 4px 0 var(--ink);cursor:pointer;color:var(--ink);border-radius:14px;flex-direction:column;align-items:flex-start;gap:4px;padding:18px;display:flex}.practice-card.primary{border-color:var(--seal);box-shadow:4px 4px 0 var(--seal)}.practice-card:disabled{opacity:.5;cursor:default}.pc-num{color:var(--seal);font-family:Noto Serif SC,serif;font-size:34px;font-weight:900;line-height:1}.pc-title{font-size:16px;font-weight:600}.pc-sub{color:var(--ink-soft);font-size:12.5px}.empty{text-align:center;background:var(--card);border:1px dashed var(--ink-soft);border-radius:14px;padding:40px 10px}.card-say{position:absolute;bottom:14px;right:14px}.box-meter{align-items:center;gap:4px;height:14px;margin-top:14px;display:flex}.box-meter i{background:var(--line);border-radius:3px;width:18px;height:5px}.box-meter i.on{background:var(--jade)}.box-meter .new{text-transform:uppercase;letter-spacing:.08em;color:var(--seal);font-family:JetBrains Mono,monospace;font-size:10px}.card.needs-review{border-color:var(--gold);box-shadow:6px 6px 0 var(--gold)}.chip.due-chip{border-color:var(--gold);color:#8a6420}.chip.due-chip.active{background:var(--gold);color:var(--paper)}.check{cursor:pointer;align-items:center;gap:8px;margin:-6px 0 18px;padding:6px 8px;font-size:12.5px;display:flex}.tiles{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}@media (max-width:700px){.tiles{grid-template-columns:repeat(2,1fr)}}.tile-stat{background:var(--card);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:2px;padding:14px 16px;display:flex}.tile-stat b{color:var(--ink);font-family:Noto Serif SC,serif;font-size:30px;font-weight:900;line-height:1.1}.tile-stat span{color:var(--ink);font-size:13px}.tile-stat small{color:var(--ink-soft);font-family:JetBrains Mono,monospace;font-size:11px}.card-section{margin-top:8px}.chart{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 16px 10px}.chart-plot{height:150px;padding-left:30px;position:relative}.chart-grid{pointer-events:none;flex-direction:column;justify-content:space-between;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.chart-grid span{color:var(--ink-soft);border-top:1px solid var(--line);height:0;padding-top:0;font-family:JetBrains Mono,monospace;font-size:10px;line-height:0}.chart-grid span:before{content:""}.bars{align-items:flex-end;gap:2px;height:100%;display:flex;position:relative}.bar-col{cursor:default;outline:none;flex:1;align-items:flex-end;height:100%;display:flex;position:relative}.bar{background:var(--seal);opacity:.75;border-radius:4px 4px 0 0;width:100%;max-width:28px;min-height:0;margin:0 auto}.bar.today{opacity:1}.bar-col:hover .bar,.bar-col:focus .bar{opacity:1;background:var(--seal-deep)}.bar-col:hover:after,.bar-col:focus:after{content:attr(data-tip);background:var(--ink);color:var(--paper);white-space:nowrap;z-index:3;pointer-events:none;border-radius:6px;padding:6px 8px;font-size:11.5px;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.bar-col:first-child:hover:after,.bar-col:first-child:focus:after{left:0;transform:none}.bar-col:last-child:hover:after,.bar-col:last-child:focus:after{left:auto;right:0;transform:none}.chart-x{color:var(--ink-soft);justify-content:space-between;margin-top:6px;padding-left:30px;font-family:JetBrains Mono,monospace;font-size:10.5px;display:flex}.stack{background:var(--paper-deep);border-radius:4px;gap:2px;height:14px;display:flex;overflow:hidden}.stack.compact{min-width:80px;height:8px}.seg.mastered{background:var(--jade)}.seg.learning{background:#8fb3a1}.seg.seen{background:#d2c3a3}.stack-legend{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:14px;margin:10px 0 14px;font-size:12.5px;display:flex}.sw{vertical-align:-1px;border-radius:2px;width:10px;height:10px;margin-right:5px;display:inline-block}.sw.mastered{background:var(--jade)}.sw.learning{background:#8fb3a1}.sw.seen{background:#d2c3a3}.sw.unseen{background:var(--paper-deep);border:1px solid var(--line)}.cat-table{border-collapse:collapse;width:100%;font-size:13px}.cat-table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);padding:6px 4px;font-family:JetBrains Mono,monospace;font-size:10.5px;font-weight:500}.cat-table td{border-top:1px solid var(--line);padding:7px 4px}.cat-table td:nth-child(2){white-space:nowrap;font-family:JetBrains Mono,monospace;font-size:12px}.cat-table td:last-child,.bar-th{width:45%}.lesson-scores{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:6px;margin:0;padding:0;list-style:none;display:grid}.lesson-scores a{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:8px;justify-content:space-between;padding:8px 12px;font-size:13.5px;text-decoration:none;display:flex}.lesson-scores b{color:var(--jade);font-family:JetBrains Mono,monospace}.code-row{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.code-row .py-input{flex:1;min-width:200px;font-size:15px}.sync-code{background:var(--card);border:1px dashed var(--ink-soft);word-break:break-all;-webkit-user-select:all;user-select:all;border-radius:8px;padding:10px 12px;font-family:JetBrains Mono,monospace;font-size:14px}.sync-status{margin:0 0 6px;font-size:13.5px;font-weight:600}.sync-status:before{content:"●";margin-right:6px}.sync-status.synced{color:var(--jade)}.sync-status.syncing,.sync-status.idle{color:var(--ink-soft)}.sync-status.offline,.sync-status.unavailable{color:#8a6420}.sync-status.error{color:var(--bad)}.install-bar{background:var(--ink);color:var(--paper);z-index:50;border-radius:12px;align-items:center;gap:10px;margin:-8px 0 20px;padding:12px 12px 12px 16px;font-size:13.5px;line-height:1.45;display:flex}.install-bar[hidden]{display:none}.install-bar span{flex:1}.install-bar .icon-btn{color:var(--paper);background:0 0;border-color:#ffffff4d}@media (max-width:760px){.wrap{padding:calc(14px + env(safe-area-inset-top)) 16px calc(var(--tabbar-h) + 30px + env(safe-area-inset-bottom))}header{align-items:center;gap:12px;margin-bottom:18px;padding-bottom:12px}.seal{width:42px;height:42px;font-size:20px}.brand{gap:12px}.brand p{display:none}.stat-strip{gap:14px}.stat{min-width:0}.stat .num{font-size:20px}.stat .lbl{font-size:9.5px}.tabs{z-index:40;background:var(--paper);border-top:2px solid var(--ink);padding:6px 8px calc(6px + env(safe-area-inset-bottom));justify-content:space-around;gap:4px;margin:0;position:fixed;bottom:0;left:0;right:0}.tabs a{border:none;border-radius:10px;flex-direction:column;flex:1;justify-content:center;gap:2px;min-height:52px;padding:6px 4px;font-size:10.5px}.tab-ico{font-size:18px}.sticky-cta{bottom:calc(var(--tabbar-h) + 12px + env(safe-area-inset-bottom))}.ex-foot,[data-continue]{scroll-margin-bottom:calc(var(--tabbar-h) + 28px + env(safe-area-inset-bottom))}.ex{box-shadow:4px 4px 0 var(--ink);padding:18px 14px}.card{min-height:290px;padding-top:46px}.step-rail{gap:4px;font-size:9.5px}.step-pt{white-space:nowrap;padding:3px 7px}.controls .btn{flex:auto}.path{grid-template-columns:1fr}footer{margin-top:30px}}@media (max-width:380px){.stat-strip .stat:nth-child(3){display:none}}@media (display-mode:standalone){footer{display:none}}
