:root{--ink:#1e293b;--muted:#64748b;--bg:#f0fdf4;--card:#fff;--brand:#16a34a;--brand-d:#15803d;--accent:#f59e0b;--line:#e2e8f0;--good:#16a34a;--bad:#dc2626;--meter:#16a34a;--r:18px;--font:ui-rounded, "SF Pro Rounded", "Nunito", "Segoe UI", system-ui, -apple-system, sans-serif;font-size:17px}html.big-text{font-size:21px}html.high-contrast{--ink:#000;--muted:#222;--bg:#fff;--line:#000;--brand:#0a5c27;--brand-d:#063d1a}html.high-contrast .card,html.high-contrast .skill-card,html.high-contrast .grade-card{border:2px solid #000}*{box-sizing:border-box}body{font-family:var(--font);color:var(--ink);background:var(--bg);margin:0;line-height:1.5}a{color:var(--brand-d)}.skip{position:absolute;left:-999px}.skip:focus{z-index:99;background:#fff;padding:8px;top:8px;left:8px}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.topbar{border-bottom:1px solid var(--line);z-index:10;background:#fff;flex-wrap:wrap;align-items:center;gap:16px;padding:10px 20px;display:flex;position:sticky;top:0}.brand{color:var(--brand-d);align-items:center;gap:8px;font-size:1.3rem;font-weight:900;text-decoration:none;display:flex}.nav{flex-wrap:wrap;flex:1;gap:4px;display:flex}.nav a{color:var(--ink);border-radius:999px;padding:8px 14px;font-weight:700;text-decoration:none}.nav a:hover,.nav a.on{background:#dcfce7}.settings{position:relative}.settings summary{cursor:pointer;background:#f1f5f9;border-radius:999px;padding:8px 12px;font-weight:700;list-style:none}.settings-menu{border:1px solid var(--line);background:#fff;border-radius:12px;gap:8px;min-width:230px;padding:12px;display:grid;position:absolute;top:110%;right:0;box-shadow:0 10px 30px #0002}#app{outline:none;max-width:1180px;margin:0 auto;padding:24px 20px 60px}.foot{text-align:center;color:var(--muted);padding:20px;font-size:.85rem}h1{margin:.2em 0 .4em;font-size:2rem;line-height:1.2}h2{font-size:1.3rem}.lead{color:var(--muted);font-size:1.1rem}.muted{color:var(--muted)}.card{background:var(--card);border-radius:var(--r);margin-bottom:18px;padding:20px;box-shadow:0 2px #0000000d,0 6px 24px #0000000a}.btn{border:2px solid var(--line);color:var(--ink);font:inherit;cursor:pointer;background:#fff;border-radius:999px;align-items:center;gap:6px;min-height:44px;padding:10px 16px;font-weight:800;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--brand)}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-d)}.btn.big{padding:14px 26px;font-size:1.15rem}.btn.ghost{background:0 0;border-color:#0000}.btn[hidden]{display:none}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.wrap{flex-wrap:wrap}.chip{color:var(--muted);background:#f1f5f9;border-radius:999px;padding:3px 10px;font-size:.8rem;font-weight:700}.chip.level{color:#92400e;background:#fef3c7}.hero{text-align:center;padding:30px 10px 10px}.hero h1{max-width:800px;margin:0 auto .3em;font-size:2.6rem}.hero .hl{color:var(--brand);background:linear-gradient(#0000 60%,#fde68a 60%)}.hero p{max-width:720px;color:var(--muted);margin:0 auto 20px;font-size:1.15rem}.hero-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.grade-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;display:grid}.grade-card{border-radius:var(--r);color:var(--ink);border-bottom:5px solid var(--c);background:#fff;align-items:center;gap:14px;padding:16px;text-decoration:none;transition:transform .15s;display:flex}.grade-card:hover{transform:translateY(-3px)}.grade-card small{color:var(--muted);display:block}.grade-badge{background:var(--c);color:#fff;border-radius:16px;flex:none;place-items:center;width:56px;height:56px;font-size:1.7rem;font-weight:900;display:grid}.features{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin-top:30px;display:grid}.features div{border-radius:var(--r);background:#fff;padding:16px}.features span{font-size:1.8rem;display:block}.features p{color:var(--muted);margin:.3em 0 0;font-size:.95rem}.grade-tabs{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.grade-tabs a{width:46px;height:46px;color:var(--ink);border:3px solid var(--c);background:#fff;border-radius:14px;place-items:center;font-weight:900;text-decoration:none;display:grid}.grade-tabs a.on{background:var(--c);color:#fff}.grade-tabs.small a{width:38px;height:38px}.grade-head{border-left:8px solid var(--c);margin-bottom:10px;padding-left:16px}.grade-head input{border:2px solid var(--line);width:100%;max-width:420px;font:inherit;border-radius:999px;padding:12px 16px}.domain h2{margin:28px 0 10px}.skill-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;display:grid}.skill-card{border:1px solid var(--line);background:#fff;border-radius:14px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.skill-main{color:var(--ink);flex-direction:column;gap:4px;text-decoration:none;display:flex}.skill-title{font-weight:800}.skill-meta{color:var(--muted);font-size:.8rem}.skill-actions{flex-wrap:wrap;gap:6px;display:flex}.pill{color:var(--ink);background:#f1f5f9;border-radius:999px;padding:4px 10px;font-size:.8rem;font-weight:700;text-decoration:none}.pill:hover{background:#dcfce7}.mini-meter{background:#e2e8f0;border-radius:99px;width:100%;max-width:140px;height:8px;display:block;overflow:hidden}.mini-meter span{background:#94a3b8;height:100%;display:block}.mini-meter.practicing span{background:#f59e0b}.mini-meter.proficient span{background:#3b82f6}.mini-meter.mastered span{background:#16a34a}td .mini-meter{vertical-align:middle;width:70px;display:inline-block}.crumbs{color:var(--muted);margin-bottom:10px;font-weight:700}.crumbs a{text-decoration:none}.practice{grid-template-columns:1fr 240px;align-items:start;gap:18px;display:grid}@media (width<=820px){.practice{grid-template-columns:1fr}.side{flex-wrap:wrap;order:-1;justify-content:space-around;gap:14px;display:flex!important}.side .ring svg{width:70px;height:70px}.side-links,.who{text-align:center;width:100%}}.q-card{min-height:420px;padding:26px;position:relative}.q-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px;display:flex}.q-head h1{color:var(--muted);margin:0;font-size:1.2rem}.q-prompt{margin-bottom:14px;font-size:1.45rem;font-weight:700}.q-prompt .big,.big{letter-spacing:.02em;margin-top:6px;font-size:1.6rem;display:inline-block}.q-visual{margin:10px 0 18px;overflow-x:auto}.q-visual svg.wide{width:100%;max-width:600px;height:auto}.frac{text-align:center;vertical-align:middle;flex-direction:column;margin:0 2px;line-height:1.1;display:inline-flex}.frac span:first-child{border-bottom:2px solid;padding:0 3px}.objects{grid-template-columns:repeat(var(--per-row), auto);gap:6px;font-size:2.1rem;line-height:1;display:inline-grid}.obj.crossed{opacity:.45;position:relative}.obj.crossed:after{content:"✕";color:var(--bad);opacity:1;place-items:center;font-weight:900;display:grid;position:absolute;inset:0}.groups{flex-wrap:wrap;gap:30px;display:flex}.group{border:2px dashed var(--line);border-radius:14px;padding:10px}.group-label{margin-bottom:4px;font-weight:900}.op{margin:0 14px;font-size:2.4rem;font-weight:900}.row.baseten{align-items:flex-end;gap:6px}.coins{gap:4px}.pv{border-collapse:collapse;font-size:1.2rem}.pv th,.pv td{border:2px solid var(--ink);text-align:center;min-width:44px;padding:6px 12px}.pv th{background:#f1f5f9;font-size:.8rem}.pgraph{border-collapse:collapse}.pgraph caption{margin-bottom:6px;font-weight:800}.pgraph th{text-align:right;padding:6px 10px}.pgraph td{letter-spacing:4px;border-left:3px solid var(--ink);padding-left:8px;font-size:1.5rem}.graph figcaption{font-weight:800}.answer-row{align-items:center;gap:8px;display:flex}.affix{color:var(--muted);font-size:1.3rem;font-weight:800}.answer-input{font:inherit;border:3px solid var(--line);border-radius:14px;width:220px;max-width:100%;padding:10px 16px;font-size:1.6rem;font-weight:800}.answer-input:focus{border-color:var(--brand);outline:none}.choices{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;display:grid}.choices.short{grid-template-columns:repeat(auto-fit,minmax(90px,140px))}.choice{font:inherit;border:3px solid var(--line);cursor:pointer;text-align:left;min-height:56px;color:var(--ink);background:#fff;border-radius:14px;align-items:center;gap:10px;padding:14px 16px;font-size:1.25rem;font-weight:700;display:flex}.choices.short .choice{justify-content:center;font-size:1.7rem}.choice .key:empty{display:none}.choice .key{background:#f1f5f9;border-radius:8px;padding:0 8px;font-size:.9rem}.choice:hover{border-color:var(--brand)}.choice.sel{border-color:var(--brand);background:#f0fdf4}.choice.right{border-color:var(--good);background:#dcfce7}.choice.wrong{border-color:var(--bad);background:#fee2e2}.q-tools{flex-wrap:wrap;gap:10px;margin-top:20px;display:flex}.hint{background:#fef9c3;border-radius:12px;margin-top:14px;padding:12px 16px;font-weight:700}.hint:empty{display:none}.fb{border-radius:14px;margin-top:16px;padding:14px 18px;font-weight:700}.fb.good{color:#14532d;background:#dcfce7;font-size:1.3rem}.fb.info{background:#e0f2fe}.fb.bad{background:#fff7ed;border:2px solid #fdba74;font-weight:500}.fb.bad h3{margin:0 0 6px}.correct-ans{color:var(--good);font-size:1.2em}.steps{padding-left:1.4em}.steps li{margin:6px 0}.side{text-align:center;flex-direction:column;align-items:center;gap:14px;display:flex;position:sticky;top:80px}.stat .label{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:.8rem;font-weight:800;display:block}.stat b{font-size:1.8rem}.ring.practicing{--meter:#f59e0b}.ring.proficient{--meter:#3b82f6}.ring.mastered{--meter:#16a34a}.ring.new{--meter:#94a3b8}.status{font-size:.9rem;font-weight:800}.side-links{flex-direction:column;gap:6px;font-weight:700;display:flex}.who{color:var(--muted)}.keypad{grid-template-columns:repeat(6,56px);gap:8px;margin-top:14px;display:grid}.keypad button{font:inherit;border:2px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;height:56px;font-size:1.4rem;font-weight:800}@media (width<=420px){.keypad{grid-template-columns:repeat(5,1fr)}}dialog{border-radius:var(--r);border:none;width:94vw;max-width:680px;padding:24px}dialog::backdrop{background:#0f172a99}.burst{pointer-events:none;position:absolute;top:40%;left:50%}.burst i{background:hsl(var(--h) 90% 55%);width:10px;height:10px;transform:rotate(var(--a)) translate(0);border-radius:50%;animation:.9s ease-out forwards pop;position:absolute}@keyframes pop{to{transform:rotate(var(--a)) translate(140px);opacity:0}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.teach{color:#fff;border-radius:var(--r);background:#0f3d24;flex-direction:column;min-height:80vh;padding:20px;display:flex}.teach:fullscreen{border-radius:0;padding:40px;overflow:auto}.teach-head{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.teach-head h1{flex:1;margin:0;font-size:1.5rem}.teach-head small{opacity:.7;font-size:.9rem;font-weight:500;display:block}.teach-head .btn.ghost{color:#fff}.teach-head select{font:inherit;border-radius:8px;padding:6px}.teach-board{color:var(--ink);background:#fff;border-radius:16px;flex:1;margin:16px 0;padding:30px;font-size:1.4rem}.teach-board .q-prompt{font-size:2.4rem}.teach-board .big{font-size:2.6rem}.teach-n{color:var(--muted);font-size:1rem;font-weight:800}.teach-board .objects{font-size:3.2rem}.teach-board .q-visual svg{transform-origin:0 0}.teach-board .q-visual svg:not(.wide){width:auto;min-width:min(100%,320px);height:auto}.teach-choices .choice{cursor:default;font-size:1.8rem}.teach-ans{color:var(--good);margin-top:16px;font-size:2.2rem}.big-steps{font-size:1.6rem}.teach-bar{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.teach-bar .btn{font-size:1.1rem}.teach-grade{background:#fff;border-radius:14px;margin-bottom:10px;padding:4px 16px}.teach-grade summary{cursor:pointer;border-left:6px solid var(--c);padding:10px 0 10px 10px;font-size:1.2rem;font-weight:900}.link-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:6px 16px;padding-bottom:14px;display:grid}.link-grid a{padding:4px 0;font-weight:600}.ws-controls{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.ws-controls select{font:inherit;border-radius:8px;padding:6px}.sheet{background:#fff;border-radius:6px;margin-bottom:24px;padding:36px;box-shadow:0 4px 20px #0001}.sheet-head{border-bottom:3px solid var(--ink);justify-content:space-between;gap:20px;margin-bottom:20px;display:flex}.sheet-head h1{margin:0;font-size:1.5rem}.sheet-head p{color:var(--muted);margin:2px 0 10px}.name-line{font-weight:700;line-height:2}.ws-list{grid-template-columns:1fr 1fr;gap:20px 30px;padding-left:1.2em;display:grid}.ws-item{break-inside:avoid}.ws-item .q-prompt{font-size:1.1rem}.ws-item .big{font-size:1.2rem}.ws-item .q-visual{transform-origin:0 0;margin-bottom:-6%;transform:scale(.8)}.ws-item .objects{font-size:1.6rem}.ws-choices{flex-wrap:wrap;gap:6px 18px;display:flex}.ws-blank{margin-top:8px;font-weight:700}.key-list{columns:2}.key-list li{break-inside:avoid;margin-bottom:8px}.key-steps{color:var(--muted);font-size:.85rem}@media (width<=700px){.ws-list{grid-template-columns:1fr}.key-list{columns:1}}@media print{.no-print,.topbar,.foot{display:none!important}body{background:#fff}#app{max-width:none;padding:0}.sheet{box-shadow:none;padding:0}.sheet.key{break-before:page}}.profiles{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.profile{border:2px solid var(--line);border-radius:999px;align-items:center;padding:2px 4px 2px 12px;display:inline-flex}.profile.on{border-color:var(--brand);background:#f0fdf4}.link{font:inherit;cursor:pointer;color:var(--ink);background:0 0;border:none;padding:6px 4px;font-weight:800}.x{cursor:pointer;color:var(--muted);background:0 0;border:none;padding:4px 8px;font-size:1.2rem}#addp input{font:inherit;border:2px solid var(--line);border-radius:999px;min-width:240px;padding:10px 14px}.kpis{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.kpis div{background:#f8fafc;border-radius:14px;min-width:120px;padding:12px 18px}.kpis b{font-size:1.6rem;display:block}.kpis span{color:var(--muted);font-size:.85rem}.table-wrap{overflow-x:auto}table.data{border-collapse:collapse;width:100%}table.data th,table.data td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:8px 10px;font-size:.92rem}table.heat{border-collapse:collapse}table.heat th,table.heat td{border:1px solid var(--line);text-align:center;min-width:34px;height:34px;padding:4px;font-size:.8rem}table.heat thead th{vertical-align:bottom;height:150px}table.heat thead th span{writing-mode:vertical-rl;white-space:nowrap;max-height:140px;font-weight:600;display:inline-block;overflow:hidden;transform:rotate(180deg)}td.practicing,.legend .practicing{background:#fde68a}td.proficient,.legend .proficient{background:#bfdbfe}td.mastered,.legend .mastered{background:#86efac}td.new,.legend .new{background:#f8fafc}.legend{flex-wrap:wrap;gap:8px;font-size:.85rem;display:flex}.legend span{border:1px solid var(--line);border-radius:8px;padding:4px 10px}.misses li{margin-bottom:6px}.prose{max-width:780px}kbd{border:1px solid var(--line);background:#f1f5f9;border-bottom-width:3px;border-radius:6px;padding:0 6px;font-family:inherit}@media (width<=820px){.topbar{gap:8px;padding:8px 12px}.nav{flex-wrap:nowrap;flex:none;order:3;width:100%;overflow-x:auto}.nav a{white-space:nowrap;padding:6px 10px}.settings{margin-left:auto}.side{flex-direction:row;gap:10px;padding:12px;position:static}.side .stat b{font-size:1.3rem}.side-links{flex-direction:row;justify-content:center;gap:14px}.hero h1{font-size:1.9rem}.q-card{min-height:0;padding:18px}.q-prompt{font-size:1.25rem}.teach-board{padding:16px}.teach-board .q-prompt{font-size:1.6rem}}
