@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2)format("woff2"),url(/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2)format("woff2"),url(/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2)format("woff2"),url(/assets/nunito-latin-ext-600-normal-BKUpuB78.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-latin-600-normal-Br8yIETf.woff2)format("woff2"),url(/assets/nunito-latin-600-normal-Cd0eNu1l.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-cyrillic-ext-700-normal-BuR0mlCG.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-700-normal-DfoqN4Gs.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-cyrillic-700-normal-DP36NgGt.woff2)format("woff2"),url(/assets/nunito-cyrillic-700-normal-DfHRUDv-.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-vietnamese-700-normal-Ch8EUCfz.woff2)format("woff2"),url(/assets/nunito-vietnamese-700-normal-C9SQsXvj.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-latin-ext-700-normal-BWeMsAzO.woff2)format("woff2"),url(/assets/nunito-latin-ext-700-normal-D4woHhbd.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-latin-700-normal-Dort48En.woff2)format("woff2"),url(/assets/nunito-latin-700-normal-OcDqTBcA.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-cyrillic-ext-800-normal-B-cvGohL.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-800-normal-pjRatrRO.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-cyrillic-800-normal-D3igD7Kl.woff2)format("woff2"),url(/assets/nunito-cyrillic-800-normal-DymMgApb.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-vietnamese-800-normal-D_CZYdm9.woff2)format("woff2"),url(/assets/nunito-vietnamese-800-normal-Dz0hZPb5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-latin-ext-800-normal-CtU8tJOV.woff2)format("woff2"),url(/assets/nunito-latin-ext-800-normal-CDcxIxx8.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-latin-800-normal-Dz8SOQK_.woff2)format("woff2"),url(/assets/nunito-latin-800-normal-D-J0wlBY.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-cyrillic-ext-900-normal-BLeVovcl.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-900-normal-DKFql_-q.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-cyrillic-900-normal-CWPcV0_V.woff2)format("woff2"),url(/assets/nunito-cyrillic-900-normal-Dr1fjxoU.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-vietnamese-900-normal-D6LWQAy_.woff2)format("woff2"),url(/assets/nunito-vietnamese-900-normal-WV2-fBew.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-latin-ext-900-normal-Dllsvgjo.woff2)format("woff2"),url(/assets/nunito-latin-ext-900-normal-CTBZd6bf.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-latin-900-normal-BVB1fGs6.woff2)format("woff2"),url(/assets/nunito-latin-900-normal-CVn49sIn.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-vietnamese-400-normal-DoLa7jNB.woff2)format("woff2"),url(/assets/lexend-vietnamese-400-normal-mPlHoWg5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-latin-ext-400-normal-D38JI5AK.woff2)format("woff2"),url(/assets/lexend-latin-ext-400-normal-D9P7pMo-.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-latin-400-normal-CwRJVcUA.woff2)format("woff2"),url(/assets/lexend-latin-400-normal-CHypAkT3.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-vietnamese-600-normal-Cr1ePs6O.woff2)format("woff2"),url(/assets/lexend-vietnamese-600-normal-BxEVPgxw.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-latin-ext-600-normal-hDcqLAH9.woff2)format("woff2"),url(/assets/lexend-latin-ext-600-normal-BXtyp5LP.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-latin-600-normal-DdvlkEkX.woff2)format("woff2"),url(/assets/lexend-latin-600-normal-DSBzZxpA.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--font:"Nunito", ui-rounded, system-ui, -apple-system, "Segoe UI", sans-serif;--radius:24px;--shadow:0 10px 30px #0f172a14;--good:#16a34a;--good-bg:#dcfce7;--warn:#ea580c;--warn-bg:#ffedd5;--viz-bar:#2a78d6;--viz-track:#cde2fb;--viz-grid:#e1e0d9;--viz-axis:#c3c2b7;--viz-muted:#898781;--hm-0:#eef2f7;--hm-1:#86b6ef;--hm-2:#2a78d6;--hm-3:#0d366b;--hm-ink-1:#0b0b0b;--hm-ink-2:#fff;--hm-ink-3:#fff}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font);-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;overscroll-behavior-y:none;margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;background:0 0;border:0}button:disabled{cursor:default;opacity:.45}:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.app{background:var(--bg);min-height:100dvh;color:var(--text);font-family:var(--font);background-attachment:fixed;position:relative;overflow-x:clip}.app.font-dys{--font:"Lexend", system-ui, sans-serif;letter-spacing:.02em;word-spacing:.08em}.app.dark{--shadow:0 10px 30px #00000059;--good-bg:#22c55e33;--warn-bg:#ea580c38;--viz-bar:#3987e5;--viz-track:#184f95;--viz-grid:#ffffff1f;--viz-axis:#ffffff47;--viz-muted:#a5b4fc;--hm-0:#ffffff12;--hm-1:#1c5cab;--hm-2:#3987e5;--hm-3:#9ec5f4;--hm-ink-1:#fff;--hm-ink-2:#fff;--hm-ink-3:#0b0b0b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.page{z-index:1;max-width:780px;padding:max(14px, env(safe-area-inset-top)) 16px max(40px, env(safe-area-inset-bottom));flex-direction:column;gap:16px;margin:0 auto;display:flex;position:relative}.page-title{text-align:center;margin:24px 0 8px;font-size:clamp(1.8rem,6vw,2.6rem);font-weight:900}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid var(--border);padding:18px}.card h2{margin:0 0 12px;font-size:1.25rem;font-weight:900}.muted{color:var(--text-soft)}.small{font-size:.85rem}.center{text-align:center}.tip{color:var(--text-soft);background:var(--surface-2);border-radius:14px;padding:10px 12px;font-size:.9rem;line-height:1.45}.grow{flex:1}.btn{background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:0 4px 0 var(--border);text-align:center;border-radius:999px;justify-content:center;align-items:center;gap:.45em;padding:.75em 1.3em;font-size:1.05rem;font-weight:800;transition:transform 80ms,box-shadow 80ms;display:inline-flex}.btn:active:not(:disabled){box-shadow:0 1px 0 var(--border);transform:translateY(3px)}.btn-primary{background:var(--primary);color:#fff;box-shadow:0 5px 0 var(--primary-2);border-color:#0000}.btn-primary:active:not(:disabled){box-shadow:0 2px 0 var(--primary-2)}.btn-soft{background:color-mix(in srgb, var(--primary) 13%, var(--surface));color:var(--primary-2);box-shadow:none;border-color:#0000}.dark .btn-soft{color:var(--text)}.btn-good{background:var(--good);color:#fff;border-color:#0000;box-shadow:0 5px #166534}.btn-warn{background:var(--warn-bg);color:var(--warn);box-shadow:none;border-color:#0000}.btn-xl{width:100%;padding:.85em 1.6em;font-size:1.3rem}.center-btn{align-self:center}.icon-btn{background:var(--surface);border:1px solid var(--border);width:48px;height:48px;box-shadow:var(--shadow);border-radius:50%;flex:none;place-items:center;font-size:1.35rem;display:grid}.icon-btn.sm{width:38px;height:38px;font-size:1.05rem}.icon-btn.active{background:var(--primary);color:#fff}.chip{background:var(--surface);border:1px solid var(--border);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:6px 12px;font-weight:800;display:inline-flex}.topbar{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.topbar h1{flex:1;min-width:0;margin:0;font-size:clamp(1.2rem,4.5vw,1.6rem);font-weight:900}.topbar-right{gap:8px;display:flex}.segmented{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;flex-wrap:wrap;gap:4px;padding:4px;display:flex}.segmented button{white-space:nowrap;border-radius:999px;flex:1;padding:.55em 1em;font-weight:800}.segmented button.on{background:var(--primary);color:#fff;box-shadow:0 3px 0 var(--primary-2)}.toggle-row{text-align:left;border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;width:100%;padding:12px 2px;font-weight:700;display:flex}.toggle{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;flex:none;width:56px;height:32px;transition:background .2s;position:relative}.toggle i{background:#fff;border-radius:50%;width:24px;height:24px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 2px 4px #0003}.toggle.on{background:var(--primary)}.toggle.on i{transform:translate(24px)}.field{flex-direction:column;gap:8px;margin:12px 0;font-weight:700;display:flex}.field input[type=range]{accent-color:var(--primary);width:100%}.text-input,.select{border:2px solid var(--border);background:var(--surface-2);border-radius:16px;width:100%;padding:14px 16px;font-size:1.15rem;font-weight:700}.text-input:focus,.select:focus{border-color:var(--primary);outline:none}.stars{gap:2px;line-height:1;display:inline-flex}.star{color:color-mix(in srgb, var(--text-soft) 35%, transparent)}.star.on{color:#f59e0b;text-shadow:0 2px #b45309;animation:.35s ease-out pop}.stars-sm{font-size:.95rem}.stars-md{font-size:1.5rem}.stars-lg{gap:10px;font-size:clamp(3rem,14vw,4.6rem)}.modal-backdrop{z-index:50;background:#0f172a80;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{width:min(440px,100%);animation:.25s ease-out pop}.modal h2{margin-top:0}.modal-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.toast{left:50%;bottom:max(20px, env(safe-area-inset-bottom));z-index:60;color:#fff;box-shadow:var(--shadow);text-align:center;background:#111827;border-radius:999px;max-width:calc(100vw - 32px);padding:12px 20px;font-weight:800;animation:.25s ease-out rise;position:fixed;transform:translate(-50%)}.deco{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.deco span{opacity:.16;animation:9s ease-in-out infinite alternate float;position:absolute}.confetti{pointer-events:none;z-index:40;position:fixed;inset:0;overflow:hidden}.confetti i{border-radius:2px;animation:linear forwards fall;position:absolute;top:-24px}.onboarding{background:var(--bg);max-width:none;min-height:100dvh;color:var(--text);justify-content:center}.onb-card{flex-direction:column;gap:16px;width:min(640px,100%);margin:0 auto;display:flex}.onb-progress{gap:6px;display:flex}.onb-progress i{background:var(--surface-2);border-radius:99px;flex:1;height:8px}.onb-progress i.on{background:var(--primary)}.onb-title{align-items:center;gap:10px;display:flex}.onb-title h1{flex:1;margin:0;font-size:clamp(1.5rem,5.5vw,2.2rem);font-weight:900}.brand{align-items:center;gap:14px;display:flex}.brand-logo{font-size:3.2rem}.brand b{font-size:1.6rem;font-weight:900;display:block}.big-choices{grid-template-columns:1fr 1fr;gap:12px;display:grid}.big-choice,.grade-choice{background:var(--surface-2);border:3px solid #0000;border-radius:22px;flex-direction:column;align-items:center;gap:6px;padding:20px 12px;font-size:1.25rem;font-weight:900;display:flex}.big-choice.on,.grade-choice.on,.avatar-choice.on,.theme-card.on{border-color:var(--primary);background:color-mix(in srgb, var(--primary) 12%, var(--surface))}.bc-emoji{font-size:2.6rem}.sub{margin:0;font-size:1.1rem}.avatar-grid{grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:8px;display:grid}.avatar-grid.small{grid-template-columns:repeat(auto-fill,minmax(50px,1fr))}.avatar-choice{aspect-ratio:1;background:var(--surface-2);border:3px solid #0000;border-radius:18px;font-size:2rem}.grade-list{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;display:grid}.grade-choice b{font-size:1.7rem}.grade-choice small{color:var(--text-soft);font-size:.95rem;font-weight:700}.theme-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;display:grid}.theme-card{background:var(--bg);color:var(--text);border:3px solid var(--border);border-radius:20px;flex-direction:column;align-items:center;gap:4px;min-height:118px;padding:14px 10px;display:flex}.theme-card.on{background:var(--bg);box-shadow:0 0 0 3px var(--primary)}.theme-mascot{font-size:2.4rem}.theme-deco{opacity:.8;font-size:.9rem}.onb-nav{gap:10px;display:flex}.profile-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:14px;display:grid}.profile-card{background:var(--bg);color:var(--text);flex-direction:column;align-items:center;gap:6px;padding:22px 12px;transition:transform .1s;display:flex}.profile-card:active{transform:scale(.97)}.profile-card.add{background:var(--surface);border:3px dashed var(--border)}.pc-avatar{font-size:3.6rem}.profile-card b{font-size:1.3rem;font-weight:900}.home-head{top:max(8px, env(safe-area-inset-top));z-index:5;align-items:center;gap:12px;padding:12px 14px;display:flex;position:sticky}.avatar-btn{background:color-mix(in srgb, var(--primary) 15%, var(--surface));border-radius:50%;flex:none;width:58px;height:58px;font-size:2.4rem}.head-info{flex:1;min-width:0}.hello{white-space:nowrap;text-overflow:ellipsis;font-size:1.2rem;font-weight:900;overflow:hidden}.rank-line{color:var(--text-soft);flex-direction:column;gap:4px;font-size:.85rem;font-weight:700;display:flex}.rank-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.xpbar{background:var(--surface-2);border-radius:99px;max-width:220px;height:8px;overflow:hidden}.xpbar.big{max-width:none;height:14px;margin:8px 0}.xpbar i{background:linear-gradient(90deg, var(--accent), var(--primary));border-radius:99px;height:100%;display:block}.head-stats{align-items:center;gap:8px;display:flex}.chip.streak{filter:grayscale();opacity:.6}.chip.streak.on{filter:none;opacity:1}.goal-ring{background:conic-gradient(var(--primary) calc(var(--pct) * 360deg), var(--surface-2) 0);border-radius:50%;place-items:center;width:44px;height:44px;display:grid}.goal-ring span{background:var(--surface);border-radius:50%;place-items:center;width:34px;height:34px;font-size:1rem;display:grid}.quick{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.quick-card{text-align:center;background:var(--surface);border:1px solid var(--border);box-shadow:0 5px 0 var(--border), var(--shadow);border-radius:22px;flex-direction:column;align-items:center;gap:2px;padding:14px 6px;transition:transform 80ms;display:flex}.quick-card:active{transform:translateY(3px)}.quick-card b{font-size:1rem;font-weight:900;line-height:1.15}.quick-card small{color:var(--text-soft);font-size:.75rem;font-weight:700}.qc-emoji{font-size:2rem}.qc-daily{background:var(--primary);color:#fff;box-shadow:0 5px 0 var(--primary-2), var(--shadow)}.qc-daily small{color:#ffffffd9}@media (width>=561px){.quick{grid-template-columns:repeat(5,1fr)}}@media (width<=560px){.quick{grid-template-columns:1fr 1fr}.quick-card:last-child:nth-child(odd){grid-column:span 2}}.grade-tabs{scrollbar-width:none;gap:6px;padding:4px 2px;display:flex;overflow-x:auto}.tab{background:var(--surface);border:1px solid var(--border);border-radius:999px;flex:none;padding:8px 18px;font-weight:900}.tab.on{background:var(--text);color:var(--surface)}.map{flex-direction:column;gap:18px;padding-bottom:20px;display:flex}.world{flex-direction:column;gap:8px;display:flex}.world-banner{background:color-mix(in srgb, var(--accent) 22%, var(--surface));border:1px solid var(--border);border-radius:20px;align-items:center;gap:10px;padding:12px 16px;display:flex}.world-banner h2{flex:1;margin:0;font-size:1.15rem;font-weight:900}.wb-emoji{font-size:1.8rem}.wb-stars{color:#b45309;font-weight:900}.dark .wb-stars{color:#fcd34d}.path{--zig:1;flex-direction:column;gap:6px;padding:10px 0;display:flex;position:relative}.path:before{content:"";border-left:8px dotted color-mix(in srgb, var(--primary) 30%, transparent);position:absolute;top:30px;bottom:30px;left:50%;transform:translate(-50%)}@media (width<=480px){.path{--zig:.5}}.node-row{transform:translateX(calc(var(--x) * var(--zig)));flex-direction:column;align-items:center;gap:4px;display:flex;position:relative}.z0,.z4{--x:0px}.z1,.z3{--x:80px}.z2{--x:120px}.z5,.z7{--x:-80px}.z6{--x:-120px}.node{background:radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--primary) 70%, #fff), var(--primary));color:#fff;width:78px;height:78px;box-shadow:0 7px 0 var(--primary-2), 0 12px 20px #00000026;border-radius:50%;font-size:1.7rem;font-weight:900;transition:transform .1s;position:relative}.node:active{box-shadow:0 3px 0 var(--primary-2);transform:translateY(4px)}.node.done{outline-offset:3px;outline:4px solid #fbbf24}.node.boss{background:radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--accent) 60%, #fff), var(--accent));width:96px;height:96px;box-shadow:0 7px 0 color-mix(in srgb, var(--accent) 60%, #000), 0 12px 20px #00000026;font-size:2.6rem}.node.locked{background:color-mix(in srgb, var(--text-soft) 35%, var(--surface));box-shadow:0 7px 0 color-mix(in srgb, var(--text-soft) 55%, var(--surface));font-size:1.5rem}.node.here{animation:1.6s ease-in-out infinite pulse}.node-avatar{font-size:2.1rem;animation:1.4s ease-in-out infinite bob;position:absolute;top:-18px;right:-34px}.node-label{text-align:center;background:color-mix(in srgb, var(--surface) 85%, transparent);border-radius:12px;flex-direction:column;align-items:center;max-width:190px;padding:4px 10px;font-size:.88rem;font-weight:800;line-height:1.2;display:flex}.map-end{text-align:center;font-size:2.4rem}.lesson-card{flex-direction:column;gap:14px;display:flex}.lesson-card h1{margin:0;font-size:clamp(1.6rem,6vw,2.3rem);font-weight:900}.lesson-kicker{color:var(--primary);text-transform:uppercase;letter-spacing:.06em;font-size:.8rem;font-weight:800}.dark .lesson-kicker{color:var(--accent)}.lesson-block h3{margin:0 0 4px}.lesson-text{margin:0 0 10px;font-size:1.2rem;font-weight:600;line-height:1.55}.lesson-meta{color:var(--text-soft);flex-wrap:wrap;justify-content:space-between;gap:8px;font-weight:700;display:flex}.lesson-actions{align-items:center;gap:10px;display:flex}.lesson-actions .btn-xl{flex:1}.session{z-index:1;height:100dvh;padding:max(10px, env(safe-area-inset-top)) 12px max(12px, env(safe-area-inset-bottom));flex-direction:column;gap:10px;display:flex;position:relative}.session-top{align-items:center;gap:8px;width:100%;max-width:1400px;margin:0 auto;display:flex}.progress{background:color-mix(in srgb, var(--surface) 80%, transparent);border:1px solid var(--border);border-radius:99px;flex:1;height:16px;overflow:hidden}.progress i{background:linear-gradient(90deg, var(--accent), var(--primary));border-radius:99px;height:100%;transition:width .4s;display:block}.progress.timed i{background:linear-gradient(90deg,#22c55e,#f59e0b,#ef4444);transition:width .25s linear}.chip.points{color:#b45309;animation:.35s ease-out pop}.dark .chip.points{color:#fcd34d}.session-main{flex:1;grid-template:"q"minmax(0,1fr)"a"/minmax(0,1fr);gap:12px;width:100%;max-width:620px;min-height:0;margin:0 auto;display:grid}.session.with-board .session-main{grid-template-rows:auto minmax(170px,1fr) auto;grid-template-areas:"q""b""a"}.question-pane{flex-direction:column;grid-area:q;justify-content:center;gap:10px;min-height:0;padding:2px;display:flex;overflow-y:auto}.session.with-board .question-pane{justify-content:flex-start;max-height:38dvh}.board-pane{grid-area:b;min-height:0}.answer-pane{grid-area:a}@media (width>=900px){.session.with-board .session-main{grid-template:"q b"minmax(0,1fr)"a b"/minmax(360px,500px) minmax(0,1fr);max-width:1400px}.session.with-board .question-pane{justify-content:center;max-height:none}}.bubble-row{align-items:flex-end;gap:10px;display:flex}.mascot{flex:none;font-size:2.8rem;line-height:1;animation:2.4s ease-in-out infinite bob}.mascot.correct{animation:.5s ease-out jump}.mascot.retry,.mascot.reveal{animation:.5s ease-in-out tilt}.bubble{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:20px 20px 20px 6px;padding:10px 14px;font-size:1.1rem;font-weight:800;line-height:1.35;position:relative}.question-card{border-width:3px;flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:120px;padding:22px 56px 22px 18px;transition:background .2s,border-color .2s;display:flex;position:relative}.question-card.correct{border-color:var(--good);background:color-mix(in srgb, var(--good) 10%, var(--surface))}.question-card .speak{position:absolute;top:50%;right:10px;transform:translateY(-50%)}.expr{white-space:pre-wrap;font-variant-numeric:lining-nums;text-align:center;flex-wrap:wrap;justify-content:center;align-items:center;gap:0 .1em;font-size:clamp(2.3rem,9.5vw,4.2rem);font-weight:900;line-height:1.15;display:flex}.expr-long{font-size:clamp(1.8rem,7vw,3.2rem)}.expr-sm{font-size:clamp(1.6rem,6vw,2.6rem)}.frac{vertical-align:middle;flex-direction:column;align-items:center;margin:0 .12em;font-size:.62em;line-height:1.05;display:inline-flex}.frac span:first-child{border-bottom:.09em solid;padding:0 .12em}.slot{border:.07em dashed var(--primary);background:color-mix(in srgb, var(--primary) 8%, var(--surface));min-width:1.5em;color:var(--text);border-radius:.3em;justify-content:center;align-items:center;padding:0 .18em;display:inline-flex}.slot.correct{border-style:solid;border-color:var(--good);background:var(--good-bg);color:var(--good);animation:.35s ease-out pop}.slot.retry{border-style:solid;border-color:var(--warn);background:var(--warn-bg);animation:.4s ease-in-out shake}.slot.reveal{border-style:solid;border-color:var(--good);background:var(--good-bg);color:var(--good);animation:.4s ease-in-out shake}.caret{color:var(--primary);opacity:.6;animation:1.2s steps(2,end) infinite blink}.gain{color:#b45309;pointer-events:none;font-size:1.5rem;font-weight:900;animation:.9s ease-out forwards floatUp;position:absolute;top:-6px;left:50%;transform:translate(-50%)}.dark .gain{color:#fcd34d}.q-prompt{color:var(--text-soft);text-align:center;margin:0;font-size:1.1rem;font-weight:800}.q-prompt.story{color:var(--text);text-align:left;align-self:stretch;font-size:clamp(1.05rem,3.6vw,1.25rem);line-height:1.45}.hint-btn{align-self:center}.hint-card{border:3px solid color-mix(in srgb, var(--accent) 50%, transparent);animation:.3s ease-out rise}.hint-card p{margin:6px 0 10px;font-size:1.1rem;font-weight:700;line-height:1.45}.hint-head{justify-content:space-between;align-items:center;font-weight:900;display:flex}.keypad{grid-template-columns:repeat(3,1fr);gap:9px;display:grid}.key{background:var(--surface);border:1px solid var(--border);height:clamp(50px,8.2dvh,76px);box-shadow:0 5px 0 var(--border);border-radius:18px;font-size:clamp(1.6rem,4dvh,2.2rem);font-weight:900;transition:transform 60ms}.key:active:not(:disabled){box-shadow:0 2px 0 var(--border);transform:translateY(3px)}.key-soft{background:var(--surface-2)}.key-go{background:var(--primary);color:#fff;box-shadow:0 5px 0 var(--primary-2);font-size:1.4rem}.key-go:active:not(:disabled){box-shadow:0 2px 0 var(--primary-2)}.span2{grid-column:span 2}.span3{grid-column:span 3}.key.listening{color:#fff;background:#ef4444;animation:1s infinite pulse}.keypad.compact{gap:6px}.keypad.compact .key{border-radius:14px;height:clamp(40px,5.6dvh,58px);font-size:1.5rem}.choices{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.choices.n2{grid-template-columns:1fr 1fr}.choice{background:var(--surface);border:3px solid var(--border);min-height:92px;box-shadow:0 6px 0 var(--border);border-radius:22px;padding:8px;font-size:clamp(1.6rem,6vw,2.6rem);font-weight:900}.choice.correct{background:var(--good-bg);border-color:var(--good)}.choice.retry{background:var(--warn-bg);border-color:var(--warn);animation:.4s shake}.wb{background:var(--surface);border-radius:var(--radius);border:4px solid color-mix(in srgb, var(--primary) 35%, #cbd5e1);height:100%;min-height:0;box-shadow:var(--shadow);flex-direction:column;display:flex;overflow:hidden}.wb-tools{background:var(--surface-2);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:6px;padding:8px;display:flex}.swatch{border:3px solid #fff;border-radius:50%;width:36px;height:36px;box-shadow:0 0 0 1px #00000026}.swatch.on{box-shadow:0 0 0 3px var(--primary);transform:scale(1.08)}.tool{background:var(--surface);border:1px solid var(--border);border-radius:12px;place-items:center;width:40px;height:40px;font-size:1.2rem;font-weight:900;display:grid}.tool.on{background:color-mix(in srgb, var(--primary) 20%, var(--surface));border-color:var(--primary)}.tool-line{background:currentColor;border-radius:3px;width:20px;height:3px;display:block}.tool-line.thick{height:8px}.wb-clear{background:var(--primary);color:#fff;box-shadow:0 4px 0 var(--primary-2);border-radius:999px;margin-left:auto;padding:.55em 1.1em;font-size:1.05rem;font-weight:900}.wb-read{background:color-mix(in srgb, var(--accent) 18%, var(--surface));color:var(--text);border:2px solid var(--accent);border-radius:999px;margin-left:auto;padding:.55em 1em;font-size:1rem;font-weight:900}.wb-read+.wb-clear{margin-left:0}.dict-read{margin:6px 0 0;font-weight:800}.wb-clear:active{box-shadow:0 1px 0 var(--primary-2);transform:translateY(3px)}.wb-compact .swatch{width:30px;height:30px}.wb-compact .tool{width:34px;height:34px;font-size:1rem}.wb-surface{cursor:crosshair;background-color:#fff;flex:1;min-height:0;position:relative}.wb-surface.grid{background-image:linear-gradient(#e2e8f0 1px,#0000 1px),linear-gradient(90deg,#e2e8f0 1px,#0000 1px);background-size:32px 32px}.wb-surface.erasing{cursor:cell}.wb-surface canvas{touch-action:none;width:100%;height:100%;position:absolute;inset:0}.wb-wipe{pointer-events:none;background:linear-gradient(100deg,#0000 0%,#fffffffa 45%,#bae6fdcc 55%,#0000 70%) 0 0/250% 100%;animation:.55s ease-out forwards wipe;position:absolute;inset:0}.board-page{max-width:1400px;height:100dvh;padding-bottom:max(12px, env(safe-area-inset-bottom));gap:10px}.board-full{flex:1;min-height:240px}.dictation{flex-direction:column;gap:10px;padding:12px 14px;display:flex}.dict-head{align-items:center;gap:10px;font-weight:700;display:flex}.dict-body{flex-direction:column;justify-content:center;align-items:center;min-height:64px;display:flex}.dict-hidden{font-size:2.2rem}.dict-prompt{margin:0 0 6px;font-weight:700}.dict-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.vis{align-self:center;max-width:100%}.dice{background:var(--surface);border:3px solid var(--border);width:170px;height:170px;box-shadow:var(--shadow);border-radius:28px;grid-template-columns:repeat(3,1fr);gap:10px;padding:18px;display:grid}.dice .pip{background:var(--primary);border-radius:50%}.tenframes{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.tenframe{border:3px solid var(--text);background:var(--surface);border-radius:10px;grid-template-columns:repeat(5,1fr);width:min(270px,80vw);display:grid;overflow:hidden}.tenframe .cell{aspect-ratio:1;border-right:2px solid color-mix(in srgb, var(--text) 40%, transparent);border-bottom:2px solid color-mix(in srgb, var(--text) 40%, transparent);place-items:center;display:grid}.tenframe .cell:nth-child(5n){border-right:0}.tenframe .cell:nth-child(n+6){border-bottom:0}.tenframe .cell i{border-radius:50%;width:70%;height:70%}.tenframe .cell.ca i{background:radial-gradient(circle at 35% 30%,#fca5a5,#dc2626)}.tenframe .cell.cb i{background:radial-gradient(circle at 35% 30%,#93c5fd,#2563eb)}.numberline{width:min(640px,100%);height:auto;overflow:visible}.nl-axis{stroke:var(--text);stroke-width:3px;stroke-linecap:round}.nl-tick{stroke:var(--text-soft);stroke-width:2px}.nl-tick.key{stroke:var(--text);stroke-width:3px}.nl-label{fill:var(--text-soft);text-anchor:middle;font-size:17px;font-weight:700}.nl-label.key{fill:var(--text);font-size:21px;font-weight:900}.nl-arc{fill:none;stroke:var(--primary);stroke-width:3.5px;stroke-linecap:round}.nl-arrowhead{fill:var(--primary)}.nl-jump{fill:var(--text);text-anchor:middle;font-size:20px;font-weight:900}.nl-start{fill:var(--accent);stroke:var(--surface);stroke-width:2px}.bond{width:220px}.bond-l{stroke:var(--text-soft);stroke-width:4px}.bond-c{fill:var(--surface);stroke:var(--primary);stroke-width:4px}.bond-c.unknown{stroke:var(--accent);stroke-dasharray:8 6}.bond-t{fill:var(--text);text-anchor:middle;font-size:24px;font-weight:900}.array{background:var(--surface);border:1px solid var(--border);border-radius:16px;gap:5px;width:100%;padding:10px;display:grid}.array span{aspect-ratio:1;background:var(--primary);border-radius:50%}.array span.alt{background:var(--accent)}.base10{flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:6px;display:flex}.b-h{background-color:#fbbf24;background-image:linear-gradient(#00000040 1px,#0000 1px),linear-gradient(90deg,#00000040 1px,#0000 1px);background-size:9px 9px;border:2px solid #b45309;border-radius:4px;width:90px;height:90px}.b-t{background-color:#60a5fa;background-image:linear-gradient(#0000004d 1px,#0000 1px);background-size:100% 9px;border:2px solid #1d4ed8;border-radius:3px;width:13px;height:90px}.b-ones{grid-template-columns:repeat(2,13px);gap:3px;display:grid}.b-u{background:#f472b6;border:2px solid #be185d;border-radius:3px;width:13px;height:13px}.fracbars{flex-direction:column;gap:6px;width:min(320px,90%);display:flex}.fracbar{background:var(--text);border-radius:8px;gap:2px;height:38px;padding:2px;display:grid}.fracbar span{background:var(--surface);border-radius:4px}.fracbar span.on{background:var(--accent)}.fracgrid{background:var(--text);border-radius:6px;grid-template-columns:repeat(10,1fr);gap:2px;width:180px;padding:2px;display:grid}.fracgrid span{aspect-ratio:1;background:var(--surface)}.fracgrid span.on{background:var(--accent)}.barmodel{flex-direction:column;gap:6px;width:min(460px,100%);display:flex}.bm-row{align-items:center;gap:8px;display:flex}.bm-label{text-align:right;text-overflow:ellipsis;flex:0 0 64px;font-size:.9rem;font-weight:800;overflow:hidden}.bm-row>.bm-track,.bm-row>.bm-total{flex:none}.bm-group .bm-row:last-child{display:flex}.bm-track{gap:2px;min-width:40px;height:46px;display:flex}.barmodel:not(.labelled) .bm-row>.bm-track,.barmodel:not(.labelled) .bm-row>.bm-total{max-width:100%}.barmodel.labelled .bm-track,.barmodel.labelled .bm-total{max-width:calc(100% - 72px)}.bm-part{background:color-mix(in srgb, var(--primary) 28%, var(--surface));border:2px solid var(--primary);border-radius:8px;flex-basis:0;place-items:center;min-width:36px;font-size:1.1rem;font-weight:900;display:grid}.bm-part.alt{background:color-mix(in srgb, var(--accent) 28%, var(--surface));border-color:var(--accent)}.bm-part.unknown{background:var(--surface);border-style:dashed}.bm-total{border:3px solid var(--text-soft);border-bottom:0;border-radius:10px 10px 0 0;height:30px;margin-top:16px;position:relative}.bm-total span{background:var(--surface);padding:0 8px;font-weight:900;position:absolute;top:-16px;left:50%;transform:translate(-50%)}.bm-total span.unknown{color:var(--primary)}.results{justify-content:center;min-height:100dvh}.results-card{text-align:center;flex-direction:column;align-items:center;gap:14px;animation:.35s ease-out rise;display:flex}.results-title{margin:0;font-size:clamp(1.8rem,7vw,2.8rem);font-weight:900}.stat-tiles{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;width:100%;display:grid}.stat{background:var(--surface-2);border:1px solid var(--border);border-radius:18px;flex-direction:column;gap:2px;padding:12px;display:flex}.stat b{font-size:1.6rem;font-weight:900}.stat small{color:var(--text-soft);font-weight:700}.parents-page .stat{text-align:left}.reward{background:color-mix(in srgb, #fbbf24 22%, var(--surface));text-align:left;border-radius:18px;align-items:center;gap:12px;width:100%;padding:12px 14px;font-weight:800;animation:.4s ease-out pop;display:flex}.reward-emoji{font-size:2.2rem}.mistakes{text-align:left;width:100%}.mistakes h3{margin:0 0 6px}.mistakes ul{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.mistakes li{background:var(--surface-2);border-radius:12px;padding:6px 12px;font-size:1.1rem;font-weight:800}.results-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.table-chips{flex-wrap:wrap;gap:8px;margin-bottom:14px;display:flex}.table-chip{background:var(--surface-2);border:3px solid #0000;border-radius:16px;min-width:70px;padding:12px 14px;font-size:1.25rem;font-weight:900}.table-chip.on{background:var(--primary);color:#fff;box-shadow:0 4px 0 var(--primary-2)}.tables-actions{grid-template-columns:1fr 1fr;gap:12px;margin-top:14px;display:grid}.big-action{background:var(--surface-2);border:1px solid var(--border);box-shadow:0 5px 0 var(--border);border-radius:22px;flex-direction:column;align-items:center;gap:2px;padding:18px 10px;display:flex}.big-action span{font-size:2.2rem}.big-action b{font-size:1.2rem;font-weight:900}.big-action small{color:var(--text-soft);font-weight:700}.big-action.primary{background:var(--primary);color:#fff;box-shadow:0 5px 0 var(--primary-2)}.big-action.primary small{color:#ffffffd9}.rank-card{align-items:center;gap:16px;display:flex}.rank-card>div{flex:1}.rank-card h2{margin:0}.rank-big{font-size:4rem}.badge-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.badge{text-align:center;background:var(--surface-2);opacity:.6;border-radius:18px;flex-direction:column;align-items:center;gap:2px;padding:14px 8px;display:flex}.badge.on{opacity:1;background:color-mix(in srgb, #fbbf24 20%, var(--surface))}.badge-emoji{font-size:2.4rem}.badge small{color:var(--text-soft);font-size:.78rem}.sticker-grid{grid-template-columns:repeat(auto-fill,minmax(54px,1fr));gap:8px;display:grid}.sticker{aspect-ratio:1;background:var(--surface-2);color:var(--text-soft);border:2px dashed var(--border);border-radius:16px;place-items:center;font-size:1.9rem;font-weight:900;display:grid}.sticker.on{background:color-mix(in srgb, var(--accent) 16%, var(--surface));border:2px solid #0000;transform:rotate(-4deg)}.sticker.on:nth-child(2n){transform:rotate(3deg)}.settings-page .card,.parents-page .card{flex-direction:column;gap:6px;display:flex}.settings-page .btn-soft{align-self:flex-start}.gate{align-items:stretch;width:100%;max-width:420px;margin:0 auto}.gate h2{text-align:center}.gate-answer{text-align:center;background:var(--surface-2);border-radius:16px;margin-bottom:10px;padding:6px;font-size:2.4rem;font-weight:900}.child-switch .segmented{justify-content:flex-start}.activity{grid-template-columns:repeat(14,minmax(0,1fr));align-items:end;padding-top:26px;display:grid;position:relative}.act-grid{border-top:1px solid var(--viz-grid);position:absolute;top:26px;left:0;right:0}.act-grid span{color:var(--viz-muted);font-size:.75rem;font-weight:700;position:absolute;top:-20px;left:0}.act-col{outline-offset:-2px;flex-direction:column;align-items:center;display:flex}.act-bar-wrap{border-bottom:1px solid var(--viz-axis);justify-content:center;align-items:flex-end;width:100%;height:130px;display:flex;position:relative}.act-bar{background:var(--viz-bar);border-radius:4px 4px 0 0;width:min(24px,64%);min-height:0}.act-col:hover .act-bar,.act-col:focus-visible .act-bar{filter:brightness(1.12)}.act-value{color:var(--text-soft);font-size:.75rem;font-weight:800;position:absolute}.act-tip{z-index:3;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);white-space:nowrap;pointer-events:none;opacity:0;border-radius:10px;flex-direction:column;gap:2px;padding:8px 10px;font-size:.8rem;transition:opacity .12s;display:flex;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.act-col:first-child .act-tip,.act-col:nth-child(2) .act-tip,.act-col:nth-child(3) .act-tip{left:0;transform:none}.act-col:nth-last-child(-n+3) .act-tip{left:auto;right:0;transform:none}.act-col:hover .act-tip,.act-col:focus-visible .act-tip{opacity:1}.act-day{color:var(--viz-muted);margin-top:6px;font-size:.75rem;font-weight:700}.viz-table summary{cursor:pointer;color:var(--text-soft);margin-top:8px;font-weight:700}.viz-table table{border-collapse:collapse;width:100%;margin-top:8px;font-size:.9rem}.viz-table td,.viz-table th{text-align:left;border-bottom:1px solid var(--viz-grid);padding:4px 6px}.viz-table td:last-child,.viz-table th:last-child{text-align:right;font-variant-numeric:tabular-nums}.skill-list{flex-direction:column;display:flex}.skill-row{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1.6fr) minmax(60px,1fr) 48px auto;align-items:center;gap:10px;padding:10px 0;display:grid}.skill-name{flex-direction:column;min-width:0;display:flex}.skill-acc{text-align:right;font-variant-numeric:tabular-nums;font-weight:800}.meter{background:var(--viz-track);border-radius:99px;height:10px;overflow:hidden}.meter i{background:var(--viz-bar);border-radius:99px;height:100%;display:block}.status{background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:4px 10px;font-size:.85rem;font-weight:800}@media (width<=560px){.skill-row{grid-template-columns:minmax(0,1fr) 48px}.skill-row .meter{grid-area:2/1/auto/-1}.skill-row .status{grid-column:1/-1;justify-self:start}}.fact-chips{flex-wrap:wrap;gap:8px;display:flex}.method ol{flex-direction:column;gap:8px;margin:0;padding-left:1.3em;line-height:1.5;display:flex}.manage-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.heatmap-wrap{overflow-x:auto}.heatmap{grid-template-columns:repeat(10,minmax(30px,1fr));gap:2px;min-width:320px;max-width:520px;display:grid}.hm-row{display:contents}.hm-head{color:var(--text-soft);aspect-ratio:1;place-items:center;font-weight:900;display:grid}.hm-cell{aspect-ratio:1;font-variant-numeric:tabular-nums;border-radius:4px;place-items:center;font-size:.78rem;font-weight:800;display:grid}.hm-cell.l0,.hm-swatch.l0{background:var(--hm-0);color:var(--text-soft)}.hm-cell.l1,.hm-swatch.l1{background:var(--hm-1);color:var(--hm-ink-1)}.hm-cell.l2,.hm-swatch.l2{background:var(--hm-2);color:var(--hm-ink-2)}.hm-cell.l3,.hm-swatch.l3{background:var(--hm-3);color:var(--hm-ink-3)}.hm-legend{flex-wrap:wrap;gap:14px;margin-top:10px;font-size:.85rem;font-weight:700;display:flex}.hm-legend span{align-items:center;gap:6px;display:inline-flex}.hm-swatch{border:1px solid var(--border);border-radius:4px;width:16px;height:16px;display:inline-block}.legal-links{text-align:center;color:var(--text-soft);padding-top:6px;font-size:.85rem;font-weight:700}.legal-links a{color:inherit}.placement-card,.duel-turn,.duel-end{text-align:center;flex-direction:column;align-items:center;gap:14px;display:flex}.placement-card h1{margin:0;font-size:clamp(1.5rem,5.5vw,2.1rem);font-weight:900}.placement-card p{margin:0;font-size:1.12rem;font-weight:600;line-height:1.5}.placement-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.placement-world{color:var(--text-soft);font-weight:800}.question-card.placement-q{padding:18px}.duel-score{grid-template-columns:1fr 1fr;gap:10px;display:grid}.duel-player{background:var(--surface);border:3px solid var(--border);min-width:0;box-shadow:var(--shadow);border-radius:20px;align-items:center;gap:8px;padding:10px 14px;display:flex}.duel-player b{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.duel-player.active.p1{border-color:var(--primary)}.duel-player.active.p2{border-color:var(--accent)}.duel-avatar{font-size:1.8rem}.duel-pts{font-size:1.5rem;font-weight:900}.duel-big{font-size:4rem;line-height:1}.duel-turn h2,.duel-end h2{margin:0;font-size:clamp(1.4rem,5vw,2rem)}.duel-question{border-width:3px;flex-direction:column;align-items:center;gap:10px;display:flex}.duel-question.correct{border-color:var(--good)}.duel-question.retry{border-color:var(--warn)}.duel-feedback{margin:0;font-size:1.3rem;font-weight:900}.sync-code{letter-spacing:.08em;text-align:center;background:var(--surface-2);border:2px dashed var(--border);-webkit-user-select:all;user-select:all;border-radius:16px;padding:12px;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:clamp(1.25rem,5vw,1.8rem);font-weight:800}.sync-input{letter-spacing:.06em;text-transform:uppercase;font-family:ui-monospace,Cascadia Mono,Consolas,monospace}.sync-actions{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.guest-banner{text-align:left;background:linear-gradient(120deg, color-mix(in srgb, var(--primary) 16%, var(--surface)), color-mix(in srgb, var(--accent) 16%, var(--surface)));border:2px solid color-mix(in srgb, var(--primary) 40%, transparent);width:100%;box-shadow:var(--shadow);border-radius:20px;align-items:center;gap:12px;padding:12px 16px;display:flex}.guest-emoji{font-size:2rem}.guest-text{flex-direction:column;flex:1;gap:2px;display:flex}.guest-text small{color:var(--text-soft);font-weight:700}.guest-cta{color:var(--primary-2);white-space:nowrap;font-weight:900}.dark .guest-cta{color:var(--text)}@media (width<=560px){.guest-cta{display:none}}.quick-card{position:relative}.qc-lock,.node-key{font-size:1rem;position:absolute;top:6px;right:8px}.node-key{filter:drop-shadow(0 2px 2px #0003);font-size:1.4rem;top:-6px;right:-6px}.members-chip{padding:4px 10px;font-size:.75rem}.account-card{flex-direction:column;gap:12px;width:100%;max-width:560px;margin:0 auto;display:flex}.account-card h1{margin:0;font-size:clamp(1.6rem,6vw,2.2rem);font-weight:900}.free-badge{background:color-mix(in srgb, var(--good) 16%, var(--surface));color:var(--good);border-radius:999px;align-self:flex-start;padding:6px 14px;font-weight:900}.gate-reason{background:var(--surface-2);border-radius:14px;margin:0;padding:10px 14px;font-weight:800}.premium-box{border:1px solid var(--border);background:color-mix(in srgb, var(--primary,#d946ef) 9%, var(--surface));border-radius:18px;flex-direction:column;gap:8px;margin:12px 0;padding:14px 16px;display:flex}.premium-box p{margin:0}.premium-box .btn{align-self:flex-start}.premium-box .sync-actions{margin-top:2px}.unlock-list{flex-direction:column;gap:6px;margin:0;padding:0;font-weight:700;list-style:none;display:flex}.unlock-list li:before{content:"✅ "}.account-form{flex-direction:column;gap:10px;display:flex}.code-input{text-align:center;letter-spacing:.4em;font-variant-numeric:tabular-nums;font-size:2rem}.account-links{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.link-btn{color:var(--primary-2);align-self:center;padding:6px 0;font-weight:800;text-decoration:underline}.dark .link-btn{color:var(--text)}.form-error{background:var(--warn-bg);color:var(--warn);border-radius:14px;margin:0;padding:10px 14px;font-weight:800}.account-email{word-break:break-all;margin:0;font-size:1.15rem;font-weight:900}.consent a{color:inherit}.join-top{align-items:center;gap:12px;display:flex}.join-help{color:var(--text-soft);margin:-6px 0 0;font-size:1.1rem;font-weight:700}.join-class{color:var(--text-soft);margin:0;font-weight:800}.class-code-input{text-align:center;letter-spacing:.3em;text-indent:.3em;text-transform:uppercase;width:100%;padding-block:.4em;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:clamp(1.9rem,9vw,2.6rem);font-weight:800}.class-code-input::placeholder{opacity:.3}.class-code-btn{align-self:center}.pupil-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;display:grid}.pupil-choice{background:var(--surface-2);border:2px solid var(--border);min-height:116px;box-shadow:0 4px 0 var(--border);border-radius:22px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:12px 8px;font-size:1.15rem;transition:transform 80ms;display:flex}.pupil-choice:active{box-shadow:0 1px 0 var(--border);transform:translateY(3px)}.pupil-choice b{overflow-wrap:anywhere;max-width:100%;font-weight:900;line-height:1.15}.pupil-avatar{font-size:2.8rem;line-height:1}.join-who{flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 10px;font-size:1.25rem;display:flex}.join-who .pupil-avatar{font-size:2.2rem}.secret-slots{justify-content:center;gap:12px;display:flex}.secret-slots.shake{animation:.45s shake}.secret-slot{aspect-ratio:1;width:clamp(76px,22vw,96px);color:var(--text-soft);background:var(--surface-2);border:3px dashed var(--border);border-radius:22px;place-items:center;font-size:1.4rem;font-weight:900;display:grid}.secret-slot.next{border-color:var(--primary)}.secret-slot.filled{border-style:solid;border-color:var(--primary);background:color-mix(in srgb, var(--primary) 12%, var(--surface));font-size:clamp(2.5rem,11vw,3.2rem);animation:.25s ease-out pop}.secret-grid{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.secret-pic{aspect-ratio:1;background:var(--surface);border:2px solid var(--border);min-height:64px;box-shadow:0 4px 0 var(--border);border-radius:20px;font-size:clamp(2.2rem,10vw,3rem);transition:transform 80ms}.secret-pic:active:not(:disabled){box-shadow:0 1px 0 var(--border);transform:translateY(3px)}.secret-pic:disabled{opacity:.25}.join-status,.join-welcome{text-align:center;flex-direction:column;align-items:center;gap:12px;display:flex}.join-status{padding:10px 0}.join-status p,.join-welcome p{margin:0;font-size:1.15rem;font-weight:700;line-height:1.45}.join-welcome .onb-title{align-self:stretch}.join-welcome h1{text-wrap:balance}.join-big{font-size:4.2rem;line-height:1}.join-big.bob{animation:1.2s ease-in-out infinite bob}.join-avatar{font-size:5.5rem;line-height:1;animation:.5s ease-out pop}.class-strip{justify-content:center;display:flex}.class-chip{text-overflow:ellipsis;max-width:100%;font-size:.85rem;overflow:hidden}.homework{flex-direction:column;gap:10px;padding:14px;display:flex}.hw-head{align-items:center;gap:10px;display:flex}.hw-head h2{flex:1;margin:0}.homework .class-chip{align-self:flex-start;margin-top:-4px}.hw-list{flex-direction:column;gap:8px;display:flex}.hw-item{text-align:left;background:color-mix(in srgb, var(--primary) 9%, var(--surface));border:2px solid color-mix(in srgb, var(--primary) 35%, transparent);width:100%;min-height:64px;box-shadow:0 4px 0 color-mix(in srgb, var(--primary) 25%, transparent);border-radius:18px;align-items:center;gap:12px;padding:10px 14px;transition:transform 80ms;display:flex}.hw-item:active{transform:translateY(3px)}.hw-item.late{background:color-mix(in srgb, var(--warn) 7%, var(--surface));border-color:color-mix(in srgb, var(--warn) 40%, transparent);box-shadow:0 4px 0 color-mix(in srgb, var(--warn) 22%, transparent)}.hw-item.late .hw-due{color:var(--warn)}.hw-item.done{background:var(--good-bg);box-shadow:none;border-color:#0000}.hw-emoji{flex:none;font-size:1.9rem}.hw-text{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.hw-text b{font-size:1.05rem;font-weight:900;line-height:1.2}.hw-text small{color:var(--text-soft);font-weight:700}.hw-go{background:var(--primary);color:#fff;border-radius:50%;flex:none;place-items:center;width:40px;height:40px;font-size:.95rem;display:grid}.hw-more,.hw-all-done{text-align:center;margin:0}.hw-all-done{font-weight:900}.class-banner{background:linear-gradient(120deg, var(--warn-bg), color-mix(in srgb, var(--accent) 12%, var(--surface)));border-color:color-mix(in srgb, var(--warn) 40%, transparent);flex-wrap:wrap}.class-banner .guest-cta{background:var(--primary);color:#fff;border-radius:999px;margin-left:auto;padding:8px 16px;display:inline-flex}.node-hw{filter:drop-shadow(0 2px 2px #0003);font-size:1.3rem;position:absolute;top:-6px;left:-6px}.pc-class{background:var(--surface);border:1px solid var(--border);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:100%;padding:3px 10px;font-size:.8rem;font-weight:800;overflow:hidden}.class-section .class-name{margin:0 0 6px;font-size:1.1rem}@keyframes pop{0%{opacity:0;transform:scale(.6)}70%{opacity:1;transform:scale(1.12)}to{transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-8px)}40%,80%{transform:translate(8px)}}@keyframes blink{to{opacity:.1}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.07)}}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes jump{40%{transform:translateY(-18px)rotate(-8deg)}}@keyframes tilt{25%{transform:rotate(-12deg)}75%{transform:rotate(12deg)}}@keyframes floatUp{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-48px)}}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes float{0%{transform:translateY(0)rotate(-6deg)}to{transform:translateY(-30px)rotate(8deg)}}@keyframes fall{to{transform:translateY(110vh)rotate(720deg)}}@keyframes wipe{0%{opacity:1;background-position:120% 0}to{opacity:0;background-position:-40% 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.deco{display:none}}
