.ct{flex-direction:column;gap:18px;min-width:0;display:flex}.ct-text{overflow-wrap:anywhere;margin:0;font-size:1.35rem;line-height:2.1}.ct-text strong{font-weight:750}.ct-note{color:var(--muted);margin:0 0 8px;font-size:.95rem}.ct-scroll{-webkit-overflow-scrolling:touch;width:100%;padding:2px;overflow-x:auto}.gap-wrap{vertical-align:baseline;white-space:nowrap;align-items:baseline;gap:6px;display:inline-flex}.gap-number{border:3px solid var(--line-strong);background:var(--surface);font-variant-numeric:tabular-nums;vertical-align:middle;min-width:3ch;min-height:48px;color:var(--ink);-webkit-user-select:none;user-select:none;touch-action:manipulation;border-radius:12px;justify-content:flex-end;align-items:center;gap:6px;margin:2px 0;padding:2px 10px;font-size:1.35rem;font-weight:700;line-height:1.1;display:inline-flex}.gap-number.is-editable{cursor:pointer;border-style:dashed}.gap-number.is-active{border:3px solid var(--accent);box-shadow:0 0 0 4px var(--accent-soft);background:var(--surface)}.gap-number.is-error{border:3px solid var(--bad);background:var(--bad-soft)}.gap-number.is-remark{border:3px solid var(--hint);background:var(--hint-soft)}.gap-number.is-active.is-error{box-shadow:0 0 0 4px var(--bad-soft)}.gap-number.is-ok,.gap-number.is-solution{border:3px solid var(--good);background:var(--good-soft)}.gap-number:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.gap-number.is-active:focus-visible{outline:none}.ct-pv td .gap-wrap{width:100%;display:flex}.gap-number.compact{justify-content:center;width:100%;min-width:0;min-height:52px;margin:0;padding:2px 4px;font-size:1.5rem}.gap-value{align-items:center;display:inline-flex}.gap-own{color:var(--bad);font-size:.75em;font-weight:600;text-decoration-thickness:2px}.gap-number.is-solution{flex-wrap:wrap;justify-content:center;gap:0 6px}.gap-number.compact.is-solution{flex-direction:column;line-height:1}.gap-number.compact.is-solution .gap-own{font-size:.6em}.gap-unit{color:var(--ink);font-size:1.2rem}.caret{background:var(--accent);border-radius:2px;width:3px;height:1.05em;margin-left:2px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.caret{animation:none}}.gap-select{vertical-align:middle;align-items:center;margin:2px 0;display:inline-flex}.gap-select.segments{white-space:normal;border:3px dashed var(--line-strong);background:var(--surface);border-radius:14px;flex-wrap:wrap;gap:4px;max-width:100%;padding:3px}.gap-seg{background:var(--surface-2);min-width:48px;min-height:44px;color:var(--ink);border:2px solid #0000;border-radius:10px;padding:0 10px;font-size:1.3rem;font-weight:700}.gap-seg.selected{background:var(--accent);color:var(--on-accent)}.gap-select.menu select{border:3px dashed var(--line-strong);background-color:var(--surface);min-height:48px;color:var(--ink);border-radius:12px;padding:4px 34px 4px 12px;font-size:1.15rem;font-weight:650}.gap-select.is-error.segments,.gap-select.is-error.menu select{border:3px solid var(--bad);background:var(--bad-soft)}.gap-select.is-static{border:3px solid var(--line-strong);background:var(--surface);border-radius:12px;gap:6px;min-height:44px;padding:2px 12px;font-size:1.3rem;font-weight:700}.gap-select.is-static.is-ok,.gap-select.is-static.is-solution{border-color:var(--good);background:var(--good-soft)}.ct-table{border-collapse:separate;border-spacing:0;background:var(--surface);border:1.5px solid var(--line);font-variant-numeric:tabular-nums;border-radius:12px;min-width:min(100%,320px);margin:0 auto;font-size:1.15rem;overflow:hidden}.ct-table th,.ct-table td{text-align:left;border-bottom:1.5px solid var(--line);vertical-align:middle;padding:8px 14px}.ct-table th+th,.ct-table td+td,.ct-table th+td{border-left:1.5px solid var(--line)}.ct-table tr:last-child td,.ct-table tr:last-child th{border-bottom:0}.ct-table thead th{color:var(--muted);background:color-mix(in srgb, var(--accent) 10%, var(--surface));font-size:.95rem;font-weight:700}.ct-table tbody th{font-weight:650}.ct-table .gap-number{min-height:46px;font-size:1.2rem}.ct-pv{border-collapse:collapse;table-layout:fixed;background:var(--surface);font-variant-numeric:tabular-nums;margin:0 auto}.ct-pv th,.ct-pv td{text-align:center;border:1.5px solid var(--line);width:54px;min-width:44px;position:relative}.ct-pv th{padding:8px 4px;font-size:.9rem;font-weight:700}.ct-pv td{height:60px;padding:3px;font-size:1.6rem;font-weight:700}.ct-pv .pv-g0{background:color-mix(in srgb, var(--accent) 9%, var(--surface))}.ct-pv .pv-g1{background:var(--surface)}.ct-pv .pv-edge,.ct-pv.units .pv-edge{border-left:3px solid var(--ink)}.ct-pv td.pv-comma:after{content:",";z-index:2;pointer-events:none;color:var(--bad);text-shadow:0 0 2px var(--surface), 0 0 4px var(--surface);font-size:2.3rem;font-weight:900;line-height:1;position:absolute;top:8px;right:-8px}.ct-pv th.pv-comma,.ct-pv td.pv-comma{border-right:3px solid var(--bad)}@media (width<=420px){.ct-pv th,.ct-pv td{width:36px;min-width:32px}.ct-pv th{padding:6px 1px;font-size:.72rem}.ct-pv .gap-number.compact{font-size:1.25rem}}.ct-tally{border-collapse:separate;border-spacing:0;background:var(--surface);border:1.5px solid var(--line);border-radius:12px;min-width:min(100%,320px);margin:0 auto;overflow:hidden}.ct-tally caption{padding:0 0 8px;font-weight:700}.ct-tally th,.ct-tally td{border-bottom:1.5px solid var(--line);text-align:left;vertical-align:middle;padding:6px 14px}.ct-tally td{border-left:1.5px solid var(--line);min-width:180px}.ct-tally thead th{color:var(--muted);background:color-mix(in srgb, var(--accent) 10%, var(--surface));font-size:.9rem}.ct-tally tr:last-child th,.ct-tally tr:last-child td{border-bottom:0}.tally-marks{stroke:var(--ink);stroke-width:2.6px;stroke-linecap:round;display:block}.tally-marks.solution{stroke:var(--good)}.tally-marks.own{stroke:var(--bad);opacity:.6}.tally-marks.preview{stroke:var(--muted)}.tally-edit{align-items:center;gap:10px;display:flex}.tally-marks-wrap{border:2px dashed var(--line-strong);background:var(--surface);min-width:150px;min-height:48px;color:inherit;text-align:left;cursor:pointer;border-radius:10px;flex-direction:column;flex:1;justify-content:center;align-items:flex-start;gap:2px;padding:2px 6px;display:flex}div.tally-marks-wrap{cursor:default;border-style:solid}.tally-row.is-error .stepper-btn{border-color:var(--bad)}.tally-empty{color:var(--muted);font-size:.85rem}.tally-row.is-error .tally-marks-wrap{border:2px solid var(--bad);background:var(--bad-soft)}.tally-row.is-ok .tally-marks-wrap,.tally-row.is-solution .tally-marks-wrap{border:2px solid var(--good);background:var(--good-soft);cursor:default}.stepper{gap:6px;display:inline-flex}.stepper-btn{border:2px solid var(--line-strong);background:var(--surface);width:48px;height:48px;color:var(--ink);border-bottom-width:4px;border-radius:12px;place-items:center;display:inline-grid}.stepper-btn:active:not(:disabled){background:var(--accent-soft);border-bottom-width:2px;transform:translateY(2px)}.stepper-btn:disabled{opacity:.4}.ct-svg{font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;width:100%;max-width:680px;height:auto;margin:0 auto;font-family:inherit;display:block;overflow:visible}.ct-svg text{fill:var(--ink);font-size:17px}.ct-svg .svg-title{font-weight:700}.ct-svg .svg-muted{fill:var(--muted);font-size:15px}.ct-svg .svg-tick{font-size:16px}.ct-svg .svg-label.small{font-size:15px}.svg-axis{stroke:var(--ink);stroke-width:2px}.svg-grid{stroke:var(--line-strong);stroke-width:1.2px}.ct-bars{flex-direction:column;gap:12px;width:100%;max-width:680px;margin:0 auto;display:flex}.ct-bars .ct-svg.is-editable.vertical{touch-action:none}.ct-bars .ct-svg.is-editable.horizontal{touch-action:pan-y}.bar{fill:var(--chart)}.bar.gap{fill:var(--accent)}.bar.gap.is-error{fill:var(--bad)}.bar.gap.is-ok{fill:var(--good)}.bar.gap.is-own-wrong{fill:var(--bad);opacity:.45}.bar-solution{fill:color-mix(in srgb, var(--good) 16%, transparent);stroke:var(--good);stroke-width:3px}.bar-slot{fill:color-mix(in srgb, var(--accent) 5%, transparent);stroke:var(--line-strong);stroke-dasharray:5 5}.bar-slot.is-dragging{fill:color-mix(in srgb, var(--accent) 12%, transparent);stroke:var(--accent)}.bar-hit{fill:#0000;cursor:ns-resize;outline:none}.ct-svg.horizontal .bar-hit{cursor:ew-resize}.bar-hit:focus-visible{stroke:var(--focus);stroke-width:3px}.bar-handle rect{fill:var(--surface);stroke:var(--ink);stroke-width:2.5px}.bar-handle line{stroke:var(--ink);stroke-width:2px}.bar-handle.is-dragging rect{stroke:var(--accent);fill:var(--accent-soft)}.ct-numberline,.ct-map{width:100%;max-width:680px;margin:0 auto}.nl-stage{width:100%;position:relative}.nl-gap{position:absolute;transform:translate(-50%)}.nl-gap .gap-number{min-height:44px;font-size:1.15rem}.nl-line{stroke:var(--ink);stroke-width:2.4px}.nl-arrow{fill:var(--ink)}.nl-tick{stroke:var(--ink);stroke-width:1.6px}.nl-tick.medium{stroke-width:2px}.nl-tick.label{stroke-width:2.6px}.ct-svg .nl-label{font-weight:600}.nl-dashed{stroke:var(--accent);stroke-width:2px;stroke-dasharray:6 5}.nl-mark-stem{stroke:var(--accent);stroke-width:2.4px}.nl-mark-head,.nl-mark-dot{fill:var(--accent)}.ct-svg .nl-mark-text{fill:#fff;font-size:16px;font-weight:800}.nl-touch{touch-action:none;border-radius:12px}.nl-touch.is-editable{cursor:pointer}.nl-touch:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.nl-hit{fill:#0000}.nl-pin path{fill:var(--accent);stroke:var(--surface);stroke-width:2px;filter:drop-shadow(0 2px 2px #0000002e)}.nl-pin-hole{fill:var(--surface)}.nl-pin.is-ok path{fill:var(--good)}.nl-pin.is-error path,.nl-pin.is-own-wrong path{fill:var(--bad)}.nl-pin.is-own-wrong{opacity:.55}.map-bg{fill:#eef5e9;stroke:var(--line);stroke-width:1.5px}.map-river{fill:none;stroke:#bcd9ec;stroke-width:14px;stroke-linecap:round}.map-forest circle{fill:#cfe4c3}.map-road{fill:none;stroke:#fff;stroke-width:8px;opacity:.9}.ct-svg .map-north{fill:#5d6b6f;font-size:14px;font-weight:800}.map-north-arrow{fill:#5d6b6f}.map-route{stroke:#c2462a;stroke-width:3.5px;stroke-dasharray:10 6;stroke-linecap:round}.map-place{fill:#fff;stroke:#1d2b2f;stroke-width:3px}.ct-svg .map-name{fill:#1d2b2f;paint-order:stroke;stroke:#eef5e9;stroke-width:5px;stroke-linejoin:round;font-weight:700}.map-pill{fill:#fff;stroke:#c2462a;stroke-width:2px}.ct-svg .map-length{fill:#c2462a;font-weight:800}.map-scale{fill:#fff;stroke:#1d2b2f;stroke-width:1.5px}.ct-svg .map-scale-text{fill:#1d2b2f;font-size:15px;font-weight:700}.ct-choice{grid-template-columns:1fr;gap:12px;display:grid}@media (width>=600px){.ct-choice{grid-template-columns:1fr 1fr}}.ct-choice.long{grid-template-columns:1fr}.choice-button{background:var(--surface);border:3px solid var(--line);text-align:left;min-height:68px;color:var(--ink);font-variant-numeric:tabular-nums;border-radius:16px;align-items:center;gap:12px;padding:10px 16px;font-size:1.25rem;font-weight:650;display:flex}.ct-choice.long .choice-button{font-size:1.1rem;font-weight:600}.choice-button:active:not(:disabled){transform:scale(.98)}.choice-button:disabled{cursor:default}.choice-key{background:var(--surface-2);width:34px;height:34px;color:var(--muted);border-radius:50%;flex:none;place-items:center;font-size:.85rem;font-weight:700;display:grid}.choice-key.square{border:2px solid var(--line-strong);background:var(--surface);border-radius:8px}.choice-text{overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto;flex:1;min-width:0;line-height:1.3}.choice-button.selected{border-color:var(--accent);background:var(--accent-soft)}.choice-button.selected .choice-key{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.ct-choice.is-error .choice-button.selected,.choice-button.wrong{border-color:var(--bad);background:var(--bad-soft)}.choice-button.correct{border-color:var(--good);background:var(--good-soft)}.choice-button.correct .choice-key{background:var(--good);color:#fff}.choice-check{color:var(--good);flex:none}.ct-sort,.ct-match{flex-direction:column;gap:12px;display:flex}.ct-sort-target{border:2px dashed var(--line-strong);background:var(--surface);border-radius:16px;flex-wrap:wrap;gap:10px 14px;margin:0;padding:12px;list-style:none;display:flex}.ct-sort-target.is-ok{border:2px solid var(--good);background:var(--good-soft)}.ct-sort-target.is-error{border:2px solid var(--bad);background:var(--bad-soft)}.ct-sort-slot{align-items:center;gap:6px;display:flex}.ct-sort-number{color:var(--muted);text-align:right;min-width:1.4em;font-weight:700}.ct-sort-empty{background:var(--surface-2);border:2px dashed var(--line);border-radius:12px;width:100px;height:56px;display:block}.ct-card{border:2px solid var(--line-strong);background:var(--surface);min-width:96px;min-height:56px;color:var(--ink);font-variant-numeric:tabular-nums;overflow-wrap:anywhere;border-bottom-width:4px;border-radius:12px;padding:0 16px;font-size:1.2rem;font-weight:650}.ct-card:active:not(:disabled){transform:scale(.96)}.ct-card.placed{border-color:var(--accent);background:var(--accent-soft)}.ct-card:disabled{cursor:default}.ct-card.ghost{visibility:hidden}.ct-card.used{opacity:.45;border-style:dashed}.ct-card-pool{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.ct-match-rows{flex-direction:column;gap:8px;display:flex}.ct-match-row{border:3px solid var(--line);background:var(--surface);text-align:left;min-height:60px;color:var(--ink);border-radius:14px;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;padding:8px 14px;font-size:1.15rem;display:grid}.ct-match-row.selected{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.ct-match-row.marked{border-color:var(--bad)}.ct-match-row.is-ok,.ct-match-row.is-error{border-color:var(--good);background:var(--good-soft)}.ct-match-row:disabled{cursor:default}.ct-match-left{overflow-wrap:anywhere;font-weight:650}.ct-match-arrow{color:var(--muted)}.ct-match-right{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:8px;font-weight:700;display:flex}.ct-match-empty{text-align:center;min-width:60px;color:var(--muted);border-bottom:2px dashed var(--line-strong);display:inline-block}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f6f7f5;--surface:#fff;--surface-2:#eef1ef;--ink:#1d2b2f;--muted:#5d6b6f;--line:#dde3e0;--line-strong:#c3ccc8;--brand:#3da88b;--accent:#2b8c72;--accent-strong:#1f6f5a;--accent-soft:#e2f3ed;--on-accent:#fff;--good:#1f8a5b;--good-soft:#e3f5eb;--bad:#c2462a;--bad-soft:#fcebe6;--hint:#8a5a00;--hint-soft:#fff6dc;--hint-line:#efd48a;--star:#f0b400;--chart:#6a8fb5;--focus:#1f6f5a;--radius:18px;--shadow:0 1px 2px #1428230f, 0 4px 16px #1428230d;--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#111816;--surface:#1a2320;--surface-2:#222d29;--ink:#e7eeeb;--muted:#a0b1ab;--line:#2f3b37;--line-strong:#4a5853;--brand:#3da88b;--accent:#45c09c;--accent-strong:#75d8b9;--accent-soft:#173a30;--on-accent:#0b1f19;--good:#52cc8f;--good-soft:#143424;--bad:#f08c6e;--bad-soft:#3b2018;--hint:#f2cb63;--hint-soft:#30280f;--hint-line:#6b5518;--star:#f5c400;--chart:#7fa3cc;--focus:#75d8b9;--shadow:none}}html{color:var(--ink);background:var(--bg);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;touch-action:manipulation;font-family:-apple-system,BlinkMacSystemFont,system-ui,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:18px;line-height:1.45}html[data-role=teacher]{font-size:16px}*,:before,:after{box-sizing:border-box}body{background:var(--bg);min-width:320px;min-height:100dvh;color:var(--ink);margin:0;overflow-x:hidden}h1,h2,h3{letter-spacing:-.01em;text-wrap:balance;margin:0;line-height:1.2}h1{font-size:1.9rem}h2{font-size:1.3rem}h3{font-size:1.2rem}p{text-wrap:pretty;margin:0}a{color:var(--accent-strong)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button,a.button,.number-pad,.choice-button,.ct-card,.chapter-tile,.gap-number,.pick-tile,.pick-block,.segmented button,.cell{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:manipulation}:focus{outline:none}:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.muted{color:var(--muted)}.small-print{font-size:.85rem}.inline-icon{vertical-align:-4px;margin-right:2px}.button{text-align:center;border:2px solid #0000;border-radius:14px;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:0 20px;font-size:1rem;font-weight:650;line-height:1.15;text-decoration:none;transition:transform 80ms,background-color .15s,box-shadow .15s;display:inline-flex}.button:active:not(:disabled){transform:scale(.97)}.button:disabled{opacity:.55;cursor:default}.button.big{border-radius:16px;min-height:60px;padding:0 28px;font-size:1.15rem}.button.small{min-height:44px;padding:0 12px;font-size:.92rem}.button.primary{background:var(--accent);color:var(--on-accent)}.button.primary:active:not(:disabled){background:var(--accent-strong)}.button.secondary{background:var(--surface);border-color:var(--line-strong);color:var(--ink)}.button.secondary:active:not(:disabled){background:var(--surface-2)}.button.ghost{color:var(--ink);background:0 0}.button.ghost:active:not(:disabled){background:var(--surface-2)}.button.danger{background:var(--bad);color:#fff}@media (hover:hover){.button.primary:hover:not(:disabled){background:var(--accent-strong)}.button.secondary:hover:not(:disabled),.button.ghost:hover:not(:disabled){background:var(--surface-2)}}.link-button{min-height:44px;color:var(--accent-strong);text-underline-offset:3px;background:0 0;border:none;align-items:center;padding:0 6px;font-weight:600;text-decoration:underline;display:inline-flex}.link-button.muted{color:var(--muted);font-weight:500}.link-button.small{font-size:.9rem}.link-button:disabled{opacity:.6}.icon-button{width:48px;height:48px;color:var(--muted);background:0 0;border:none;border-radius:12px;flex:none;place-items:center;display:inline-grid}.icon-button:active{background:var(--surface-2)}@media (hover:hover){.icon-button:hover{background:var(--surface-2);color:var(--ink)}}.logo{letter-spacing:-.03em;color:var(--ink);align-items:center;gap:10px;font-size:1.2rem;font-weight:800;display:inline-flex}.logo-mark{background:var(--brand);color:#fff;border-radius:12px 12px 12px 4px;place-items:center;width:38px;height:38px;padding-bottom:3px;font-size:1.5rem;line-height:1;display:grid}.logo-large{gap:14px;font-size:2.1rem}.logo-large .logo-mark{border-radius:18px 18px 18px 6px;width:64px;height:64px;font-size:2.6rem}.loading{color:var(--muted);justify-content:center;align-items:center;gap:12px;padding:24px;display:flex}.spinner{border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.center-screen{place-items:center;min-height:100dvh;display:grid}.notice{border-radius:14px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.notice p{flex:240px}.notice-error{background:var(--bad-soft);color:var(--ink);border:2px solid color-mix(in srgb, var(--bad) 40%, transparent)}.notice-info{background:var(--hint-soft);border:2px solid var(--hint-line)}.notice-ok{background:var(--good-soft);border:2px solid color-mix(in srgb, var(--good) 35%, transparent)}.calm-note{color:var(--muted);padding:8px 0;font-size:1.05rem}.topbar{max-width:1100px;padding:calc(12px + var(--safe-top)) max(16px, var(--safe-right)) 12px max(16px, var(--safe-left));flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;margin:0 auto;display:flex}.topbar-home{border-radius:12px;align-items:center;min-height:44px;text-decoration:none;display:inline-flex}.topbar-right{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:4px 8px;display:flex}.logout{align-items:center;gap:6px;display:inline-flex}.logout-name{color:var(--muted);font-size:.9rem}.page{max-width:1100px;padding:8px max(16px, var(--safe-right)) calc(48px + var(--safe-bottom)) max(16px, var(--safe-left));flex-direction:column;gap:24px;margin:0 auto;display:flex}.page.narrow{max-width:680px}.section{flex-direction:column;gap:14px;display:flex}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.back-link{min-height:48px;color:var(--accent-strong);align-self:flex-start;align-items:center;gap:6px;padding:0 8px 0 0;font-weight:600;text-decoration:none;display:inline-flex}.hello{margin-top:8px;font-size:2.3rem}.login{min-height:100dvh;padding:calc(24px + var(--safe-top)) max(20px, var(--safe-right)) calc(24px + var(--safe-bottom)) max(20px, var(--safe-left));place-items:center;display:grid}.login-card{text-align:center;flex-direction:column;align-items:center;gap:18px;width:min(460px,100%);display:flex}.login-school{color:var(--muted);margin-top:-4px;font-size:1.1rem;font-weight:600}.login-lead{color:var(--muted);margin-bottom:18px;font-size:1.2rem}.login-button{width:100%;min-height:68px;font-size:1.25rem}.login-note{color:var(--muted)}.login-demo{color:var(--muted);margin-top:12px;font-size:.95rem}.login-demo .link-button{font-size:.95rem}.login .notice{text-align:left;width:100%}.dev-link{color:var(--muted);margin-top:24px;font-size:.8rem}.breadcrumb{color:var(--muted);flex-wrap:wrap;align-items:center;gap:0 4px;font-size:.92rem;display:flex}.crumb{align-items:center;gap:4px;display:inline-flex}.crumb a{min-height:44px;color:var(--accent-strong);align-items:center;padding:0 4px;font-weight:600;text-decoration:none;display:inline-flex}.crumb a:hover{text-decoration:underline}.crumb-sep{color:var(--line-strong)}.badge{background:var(--hint-soft);color:var(--hint);border:1px solid var(--hint-line);vertical-align:2px;border-radius:999px;margin-left:8px;padding:1px 8px;font-size:.75rem;font-weight:700;display:inline-block}.assignment-list{flex-direction:column;gap:14px;display:flex}.assignment-card{border-radius:var(--radius);background:var(--surface);border:2px solid color-mix(in srgb, var(--accent) 45%, var(--line));box-shadow:var(--shadow);flex-wrap:wrap;align-items:center;gap:16px 20px;padding:18px 20px;display:flex}.assignment-info{flex-direction:column;flex:240px;gap:4px;min-width:0;display:flex}.assignment-info h3{overflow-wrap:anywhere;font-size:1.3rem}.assignment-place{color:var(--muted);font-size:.85rem;font-weight:600}.assignment-meta{color:var(--muted)}.assignment-note{color:var(--muted);font-style:italic}@media (width<=599px){.assignment-card .button{width:100%}}.done-list{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.done-list li{color:var(--muted);align-items:center;gap:10px;min-height:44px;display:flex}.done-check{color:var(--good);flex:none;font-weight:800}.done-title{flex:1;min-width:0}.block-stand{color:var(--muted);flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:.88rem;display:inline-flex}.block-stand.untouched{color:var(--muted);font-style:italic}.block-stand.large{gap:6px 14px;font-size:1rem}.stand-dots{gap:4px;display:inline-flex}.stand-dot{border:2px solid var(--accent);border-radius:50%;width:12px;height:12px}.stand-dot.on{background:var(--accent)}.block-stand.large .stand-dot{width:16px;height:16px}.stand-level{color:var(--ink);font-weight:650}.stand-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 18px}.chapter-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;display:grid}@media (width<=600px){.chapter-grid{grid-template-columns:1fr}}.chapter-tile{border-radius:var(--radius);background:var(--surface);border:2px solid var(--line);min-height:88px;box-shadow:var(--shadow);color:var(--ink);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px 16px;text-decoration:none;transition:transform 80ms,border-color .15s;display:grid}a.chapter-tile:active{border-color:var(--accent);transform:scale(.98)}@media (hover:hover){a.chapter-tile:hover{border-color:var(--accent)}}.chapter-tile.muted-tile{opacity:.55;box-shadow:none;background:var(--surface-2)}.chapter-number{background:var(--accent-soft);width:56px;height:56px;color:var(--accent-strong);border-radius:14px;flex:none;place-items:center;font-size:1.7rem;font-weight:800;display:grid}.chapter-number.large{border-radius:18px;width:72px;height:72px;font-size:2.2rem}.chapter-text{flex-direction:column;gap:2px;min-width:0;display:flex}.chapter-title{overflow-wrap:anywhere;font-size:1.15rem;font-weight:700}.chapter-sub{color:var(--muted);font-size:.9rem}.chapter-chevron{color:var(--muted)}.chapter-head{align-items:center;gap:16px;display:flex}.chapter-head h1{font-size:1.9rem}.section-list{flex-direction:column;gap:10px;display:flex}.section-item{border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);overflow:hidden}.section-item>summary{cursor:pointer;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;min-height:60px;padding:10px 16px;list-style:none;display:grid}.section-item>summary::-webkit-details-marker{display:none}.section-item>summary:after{content:"›";color:var(--muted);grid-column:4;font-size:1.5rem;transition:transform .15s}.section-item[open]>summary:after{transform:rotate(90deg)}.section-item[open]>summary{border-bottom:1px solid var(--line)}.section-number{color:var(--accent-strong);min-width:2.2em;font-weight:800}.section-title{overflow-wrap:anywhere;font-size:1.08rem;font-weight:700}.section-count{color:var(--muted);white-space:nowrap;font-size:.88rem}.block-list{flex-direction:column;gap:4px;margin:0;padding:6px;list-style:none;display:flex}.block-row{border-radius:12px;align-items:center;gap:10px;display:flex}.block-row-main{min-width:0;min-height:56px;color:var(--ink);border-radius:12px;flex-direction:column;flex:1;gap:4px;padding:8px 10px;text-decoration:none;display:flex}a.block-row-main:active{background:var(--surface-2)}@media (hover:hover){a.block-row-main:hover{background:var(--surface-2)}}.block-row-title{overflow-wrap:anywhere;font-weight:600}.block-row.disabled{opacity:.6}.block-row-go{flex:none;margin-right:6px}.block-title{margin-top:4px;font-size:1.9rem}.block-description{color:var(--muted);font-size:1.1rem}.topic-start{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.practice-button{min-width:min(320px,100%);min-height:68px;font-size:1.35rem}@media (width<=599px){.practice-button{width:100%}}.start-levels{color:var(--muted);flex-wrap:wrap;align-items:center;gap:0 6px;font-size:.95rem;display:flex}.level-info{color:var(--muted);flex-direction:column;gap:4px;margin:0;padding-left:1.2em;display:flex}.level-info strong{color:var(--ink);text-transform:capitalize}.player{z-index:10;background:var(--bg);height:100dvh;padding:var(--safe-top) var(--safe-right) 0 var(--safe-left);flex-direction:column;display:flex;position:fixed;inset:0}.player-top{border-bottom:1px solid var(--line);background:var(--surface);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:12px;padding:6px 16px;display:grid}.quit-button{color:var(--muted);justify-self:start;padding:0 12px 0 6px}.player-title{color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;justify-self:end;max-width:100%;font-size:.9rem;overflow:hidden}.player-progress{flex-direction:column;align-items:center;gap:4px;display:flex}.progress-dots{flex-wrap:wrap;justify-content:center;gap:6px;max-width:320px;display:flex}.dot{background:var(--line);border-radius:50%;width:12px;height:12px;transition:background-color .2s,transform .2s}.dot.done{background:var(--accent)}.dot.current{background:var(--surface);box-shadow:inset 0 0 0 3px var(--accent);transform:scale(1.3)}.progress-text{color:var(--muted);font-size:.85rem}.player-body{flex-direction:column;flex:1;min-height:0;display:flex}.player-main{overscroll-behavior:contain;flex-direction:column;flex:1;gap:16px;width:100%;max-width:820px;min-height:0;margin:0 auto;padding:18px 16px 24px;display:flex;overflow-y:auto}.player-dock{padding:10px 16px calc(12px + var(--safe-bottom));border-top:1px solid var(--line);background:var(--surface);flex-direction:column;flex:none;align-items:center;gap:10px;display:flex}.player-dock .check-button{width:100%;max-width:480px}.check-button{min-height:60px;font-size:1.25rem}@media (width>=900px) and (orientation:landscape),(width>=640px) and (height<=620px) and (orientation:landscape){.player-main{padding:24px 28px}.player:not(.with-pad) .player-dock{flex-direction:row;justify-content:center}.player.with-pad .player-body{flex-direction:row}.player.with-pad .player-dock{border-top:0;border-left:1px solid var(--line);width:380px;padding:20px 24px calc(20px + var(--safe-bottom));justify-content:flex-end}}.task-intro{padding:4px 0}.step-box{border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);flex-direction:column;gap:14px;padding:16px 18px;display:flex}.step-box.current{border:2px solid color-mix(in srgb, var(--accent) 40%, var(--line));box-shadow:var(--shadow)}.step-box.past{opacity:.92}.step-head{flex-wrap:wrap;align-items:center;gap:4px 12px;display:flex}.step-number{width:100%;color:var(--accent-strong);text-transform:uppercase;letter-spacing:.04em;font-size:.85rem;font-weight:700}.step-instruction{overflow-wrap:anywhere;flex:260px;font-size:1.4rem;font-weight:700;line-height:1.3}.step-box.past .step-instruction{font-size:1.15rem}.hint-button{color:var(--hint);padding:0 12px 0 8px}.adjust-note{color:var(--muted);background:var(--surface-2);border-radius:999px;align-self:flex-start;padding:4px 12px;font-size:.9rem}.adjust-note.harder{color:var(--accent-strong);background:var(--accent-soft)}.feedback{overflow-wrap:anywhere;border-radius:14px;flex-direction:column;gap:4px;min-width:0;padding:12px 16px;display:flex}.feedback strong{font-size:1.1rem}.feedback.tone-info{background:var(--surface-2)}.feedback.tone-hint{background:var(--hint-soft);border:2px solid var(--hint-line)}.feedback.tone-remark{background:var(--hint-soft);border:2px solid var(--hint)}.feedback.tone-error{background:var(--hint-soft);border:2px solid var(--hint-line)}.feedback.tone-good{background:var(--good-soft);border:2px solid var(--good)}.feedback.tone-good strong{color:var(--good)}.feedback.tone-solution{background:var(--surface-2);border:2px solid var(--line-strong)}.level-up{color:var(--accent-strong);font-weight:650}@media (width<=599px){.player-top{grid-template-columns:auto 1fr;padding:4px 10px}.player-title{display:none}.player-progress{align-items:flex-end}.dot{width:10px;height:10px}.player-main{gap:12px;padding:12px 10px 18px}.step-box{padding:12px}.step-instruction,.ct-text{font-size:1.2rem}.player-dock{padding:8px 10px calc(10px + var(--safe-bottom));gap:8px}}.number-pad{grid-template-columns:repeat(4,1fr);gap:8px;width:100%;max-width:480px;display:grid}.pad-key{border:2px solid var(--line);background:var(--surface);min-height:56px;color:var(--ink);font-variant-numeric:tabular-nums;border-bottom-width:4px;border-radius:14px;place-items:center;font-size:1.7rem;font-weight:600;transition:transform 60ms,background-color 60ms,border-bottom-width 60ms;display:grid}.pad-key:active:not(:disabled){background:var(--accent-soft);border-bottom-width:2px;border-color:var(--accent);transform:translateY(2px)scale(.96)}.pad-key:disabled{opacity:.4}.pad-key-back,.pad-key-nav{background:var(--surface-2);color:var(--muted)}.pad-key-nav{color:var(--accent-strong)}.pad-key-zero{grid-column:span 2}.pad-spacer{display:block}@media (height>=900px){.pad-key{min-height:66px}}@media (width<=599px) and (height<=899px){.number-pad{gap:6px}.pad-key{min-height:50px;font-size:1.5rem}.player-dock .check-button{min-height:54px}}@media (width>=900px) and (orientation:landscape){.pad-key{min-height:64px}}@media (height<=620px) and (orientation:landscape){.pad-key{min-height:48px;font-size:1.4rem}.player.with-pad .player-dock{width:320px;padding:10px 16px calc(10px + var(--safe-bottom))}}.practice-end{min-height:100dvh;padding:calc(24px + var(--safe-top)) max(20px, var(--safe-right)) calc(24px + var(--safe-bottom)) max(20px, var(--safe-left));place-items:center;display:grid}.end-card{text-align:center;flex-direction:column;align-items:center;gap:14px;width:min(520px,100%);display:flex}.end-emoji{font-size:3.5rem;line-height:1}.end-card h1{font-size:2.2rem}.end-number{color:var(--accent-strong);font-size:1.4em}.end-score{align-items:center;gap:10px;font-weight:700;display:flex}.score-bar{background:var(--surface-2);border-radius:6px;width:160px;height:12px;display:inline-block;overflow:hidden}.score-bar>span{background:var(--accent);border-radius:6px;height:100%;display:block}.end-line{color:var(--muted);font-size:1.15rem}.change-list{text-align:left;flex-direction:column;gap:6px;width:100%;margin:0;padding:0;list-style:none;display:flex}.change-list li{background:var(--surface-2);color:var(--muted);border-radius:12px;padding:8px 14px}.change-list li.up{background:var(--accent-soft);color:var(--ink)}.change-list li.star{background:var(--hint-soft);color:var(--ink);font-weight:650}.save-note{color:var(--muted);font-size:.95rem}.save-note.ok{color:var(--good)}.save-error{text-align:left;width:100%}.end-actions{flex-wrap:wrap;gap:12px;width:100%;margin-top:12px;display:flex}.end-actions .button{flex:180px}.dialog{background:var(--surface);width:min(560px,100vw - 32px);max-height:calc(100dvh - 32px);color:var(--ink);border:none;border-radius:22px;padding:0;box-shadow:0 20px 60px #00000040}.dialog-wide{width:min(780px,100vw - 32px)}.dialog::backdrop{background:#0a141273}.dialog-inner{flex-direction:column;max-height:calc(100dvh - 32px);display:flex}.dialog-head{justify-content:space-between;align-items:center;gap:12px;padding:16px 12px 8px 24px;display:flex}.dialog-body{padding:0 24px 8px;overflow-y:auto}.dialog-text{color:var(--muted);font-size:1.05rem}.dialog-actions{flex-wrap:wrap;justify-content:flex-end;gap:12px;padding:16px 24px 20px;display:flex}.form .dialog-actions{background:var(--surface);padding:8px 0 16px;position:sticky;bottom:0}@media (width<=480px){.dialog-actions .button{flex:auto}}.form{flex-direction:column;gap:4px;display:flex}.form>p{color:var(--muted);margin-bottom:12px}.field{border:none;flex-direction:column;gap:6px;min-width:0;margin:0 0 16px;padding:0;display:flex}.field>span,.field>legend{margin-bottom:4px;padding:0;font-weight:650}.field input:not([type=file]),.field select,.field textarea{border:2px solid var(--line-strong);background:var(--surface);min-height:48px;color:var(--ink);border-radius:12px;padding:10px 12px;font-size:16px}.field input[type=file]{min-height:44px;font-size:16px}.field textarea{resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px}.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{outline:3px solid var(--focus);outline-offset:1px}.pick-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;display:grid}.pick-tile{border:2px solid var(--line);background:var(--surface);text-align:left;border-radius:14px;align-items:center;gap:10px;min-height:56px;padding:8px 12px;font-weight:600;display:flex}.pick-tile.selected{border-color:var(--accent);background:var(--accent-soft)}.segmented{gap:8px;display:flex}.segmented button{border:2px solid var(--line);background:var(--surface);border-radius:12px;flex:1;min-height:52px;font-weight:650}.segmented button.selected{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.class-picker select{border:2px solid var(--line-strong);background-color:var(--surface);min-height:44px;color:var(--ink);border-radius:12px;padding:6px 36px 6px 12px;font-size:16px;font-weight:650}.class-head{flex-wrap:wrap;align-items:baseline;gap:4px 16px;margin-top:8px;display:flex}.assign-rows{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.assign-row{background:var(--surface);border:1px solid var(--line);border-radius:14px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px 14px;padding:10px 8px 10px 16px;display:grid}.assign-row-main{flex-direction:column;gap:2px;min-width:0;display:flex}.assign-row-done{color:var(--muted);white-space:nowrap;flex-direction:column;align-items:flex-end;gap:4px;font-size:.9rem;display:flex}.meter{background:var(--surface-2);border-radius:4px;width:110px;height:8px;display:block;overflow:hidden}.meter>span{background:var(--accent);border-radius:4px;height:100%;display:block}@media (width<=640px){.assign-row{grid-template-columns:minmax(0,1fr) auto}.assign-row-done{grid-area:2/1;align-items:flex-start}.assign-row .icon-button{grid-area:1/2}}.table-scroll{-webkit-overflow-scrolling:touch;border:1px solid var(--line);background:var(--surface);border-radius:14px;overflow-x:auto}.progress-table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:.95rem}.progress-table th,.progress-table td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;vertical-align:middle;padding:8px 12px}.progress-table thead th{color:var(--muted);background:var(--surface);font-size:.85rem;font-weight:650}.sticky-col{z-index:1;background:var(--surface);box-shadow:1px 0 0 var(--line);font-weight:650;position:sticky;left:0}.progress-table tbody th.sticky-col{min-width:150px}.progress-table tr.never th,.progress-table tr.never td{color:var(--muted);background:var(--surface-2)}.never-label{font-size:.78rem;font-weight:500;display:block}.chapter-tabs{flex-wrap:wrap}.chapter-tabs button{flex:none;min-width:64px;padding:0 12px}.matrix th.group-head{text-align:center;border-left:2px solid var(--line-strong);color:var(--accent-strong);font-weight:800}.matrix th.code-head{text-align:center;cursor:help;min-width:48px;padding:6px 4px;font-size:.8rem}.matrix td.matrix-cell{text-align:center;padding:3px}.matrix .done-col{text-align:center;color:var(--muted);font-size:.85rem}.cell{color:#1d2b2f;border:2px solid #0000;border-radius:10px;place-items:center;width:44px;height:44px;font-size:.95rem;font-weight:800;display:inline-grid}button.cell{cursor:pointer}button.cell:active{transform:scale(.94)}.cell.c-none{background:var(--surface-2);border-color:var(--line);color:var(--muted)}.cell.c-low{background:#f3b8a8;border-color:#d9826b}.cell.c-mid{background:#f6dd8a;border-color:#dcb94a}.cell.c-high{background:#9fd9b4;border-color:#5fb683}.cell.inline{vertical-align:-3px;border-radius:5px;width:18px;height:18px}.matrix-legend{flex-direction:column;gap:6px;font-size:.88rem;display:flex}.legend-colors{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.legend-colors .cell{border-radius:5px;width:18px;height:18px}.legend-codes summary{cursor:pointer;min-height:44px;color:var(--accent-strong);align-items:center;font-weight:600;display:flex}.legend-codes ul{color:var(--muted);flex-direction:column;gap:2px;margin:0;padding-left:1.2em;display:flex}.legend-codes strong{color:var(--ink);margin-right:6px}.detail-title{margin:2px 0 12px;font-size:1.2rem}.detail-list{grid-template-columns:auto 1fr;gap:8px 16px;margin:0;display:grid}.detail-list dt{color:var(--muted)}.detail-list dd{margin:0;font-weight:600}.pick-sections{flex-direction:column;gap:6px;max-height:44vh;padding-right:4px;display:flex;overflow-y:auto}.pick-section{border:1px solid var(--line);background:var(--surface);border-radius:12px}.pick-section>summary{cursor:pointer;flex-wrap:wrap;align-items:center;gap:4px 10px;min-height:48px;padding:6px 12px;font-weight:650;display:flex}.pick-blocks{flex-direction:column;gap:4px;padding:4px 8px 8px;display:flex}.pick-block{border:2px solid var(--line);background:var(--surface);min-height:48px;color:var(--ink);text-align:left;border-radius:12px;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 12px;font-weight:600;display:flex}.pick-block.selected{border-color:var(--accent);background:var(--accent-soft)}.pick-block:disabled{opacity:.5;cursor:default;font-weight:500}.picked-block{background:var(--accent-soft);border-radius:12px;margin-bottom:12px;padding:8px 12px}@media (width<=599px){.logout-name{display:none}.topbar{row-gap:4px}}.segmented button:disabled{opacity:.4;cursor:default}
