:root{--ink: #333333;--ink-muted: #666666;--ink-faint: #cccccc;--paper: #ffffff;--paper-warm: #fafafa;--border: #333333;--border-light: #cccccc;--hover-bg: #e8e8e8;--nav-selected-bg: rgba(51, 51, 51, .06);--active-bg: #bdbdbd;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--sidebar-width: 280px;--header-height: 48px;--touch-min: 44px;--radius: 4px;--z-drawer: 200;--z-overlay: 300;--success-bg: #edf7f0;--success-border: #2d6a4f;--success-ink: #1b4332;--continue-bg: #f3faf6;--continue-border: #52b788;--continue-ink: #1b4332;--warning-bg: #fff8ed;--warning-border: #c87900;--warning-ink: #8a4b00;--error-bg: #fef2f2;--error-border: #b91c1c;--error-ink: #991b1b;--info-bg: #f4f6f8;--info-border: #64748b;--hint-bg: #fffbeb;--hint-border: #d97706;color:var(--ink);background:var(--paper);font-family:Iowan Old Style,Palatino Linotype,Palatino,Georgia,serif;line-height:1.5;font-weight:400;-webkit-tap-highlight-color:transparent}.ui-control,.ui-control button,.ui-control input,.ui-control select,.ui-control textarea,.ui-control a{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;min-height:100vh;touch-action:manipulation}button,input,textarea,a{font:inherit;touch-action:manipulation}code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.92em}.skip-link{position:absolute;left:var(--space-md);top:-100%;z-index:1000;padding:var(--space-sm) var(--space-md);background:var(--ink);color:var(--paper);text-decoration:none;border-radius:var(--radius)}.skip-link:focus{top:var(--space-sm)}.app-shell{min-height:100vh;height:100vh;display:flex;flex-direction:column;overflow:hidden;position:relative}.app-header{display:flex;justify-content:space-between;align-items:flex-end;gap:var(--space-md);padding:1.25rem 1.5rem 1rem;border-bottom:1px solid var(--border-light);background:var(--paper);flex-shrink:0}.app-header.compact{align-items:center;padding:.45rem var(--space-md) .4rem;min-height:var(--header-height);flex-wrap:nowrap}.header-start{display:flex;align-items:center;gap:var(--space-sm);min-width:0;flex:1 1 auto}.header-breadcrumb{min-width:0;flex:1 1 auto}.breadcrumb-list{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem .35rem;list-style:none;margin:0;padding:0;font-size:clamp(.78rem,2.2vw,.92rem);line-height:1.35}.breadcrumb-item{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.breadcrumb-separator{color:var(--ink-muted);flex-shrink:0}.breadcrumb-link{color:var(--ink-muted);text-decoration:none}.breadcrumb-link:hover{color:var(--ink);text-decoration:underline}.breadcrumb-text,.breadcrumb-current{min-width:0}.breadcrumb-current{color:var(--ink);font-weight:600}.breadcrumb-label{min-width:0}.breadcrumb-label-medium,.breadcrumb-label-short{display:none}.header-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-sm)}.header-link{color:var(--ink-muted);text-decoration:none;font-size:.88rem;padding:.35rem .5rem}.header-link:hover{color:var(--ink);text-decoration:underline}.nav-drawer-toggle{flex-shrink:0;display:inline-flex;align-items:center;gap:.45rem}.nav-menu-icon{display:inline-flex;flex-direction:column;justify-content:center;gap:3px;width:1rem;height:.85rem}.nav-menu-icon span{display:block;height:2px;border-radius:1px;background:currentColor}.nav-toggle-label{font-size:.85rem}.debug-toggle{display:inline-flex;align-items:center;gap:var(--space-sm);min-height:var(--touch-min);padding:.5rem .85rem;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper-warm);font-size:.9rem;cursor:pointer;-webkit-user-select:none;user-select:none}.debug-toggle input{width:1.1rem;height:1.1rem;accent-color:var(--ink)}.app-body{display:grid;grid-template-columns:minmax(0,1fr);flex:1;min-height:0;overflow:hidden;position:relative}.nav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;top:var(--header-height);z-index:calc(var(--z-drawer) - 1);border:0;background:#0003;cursor:pointer}.sidebar{border-right:1px solid var(--border-light);background:var(--paper-warm);padding:var(--space-md) .75rem 0;min-height:0;display:flex;flex-direction:column;overflow:hidden;position:absolute;top:0;left:0;bottom:0;width:var(--sidebar-width);z-index:var(--z-drawer);box-shadow:4px 0 18px #0000001a;transform:translate(0);transition:transform .2s ease,visibility .2s ease}.app-body.sidebar-collapsed .sidebar:not(.sidebar-drawer){transform:translate(-100%);visibility:hidden;pointer-events:none;box-shadow:none}.sidebar-body{flex:1 1 auto;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch;padding-bottom:var(--space-md);--nav-indent-chapter: .65rem;--nav-chapter-text-inset: calc(var(--nav-indent-chapter) + 1.7rem);--nav-indent-section: var(--nav-chapter-text-inset)}.sidebar-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin-bottom:.75rem;flex-shrink:0}.sidebar-collapse-button{min-width:2rem;padding-inline:.45rem;font-size:1.1rem;line-height:1}.sidebar-settings{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--border-light)}.sidebar-settings-items{display:grid;gap:var(--space-sm);padding:0 .5rem var(--space-sm)}.sidebar-footer-button{width:100%;min-height:var(--touch-min);padding:.55rem .75rem;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper);text-align:left;cursor:pointer;color:inherit}.sidebar-footer-link{display:block;padding:.55rem .75rem;min-height:var(--touch-min);border-radius:var(--radius);color:var(--ink-muted);text-decoration:none;font-size:.92rem}.sidebar-footer-link:hover{color:var(--ink);background:var(--hover-bg)}.sidebar h2{margin:0 0 0 .5rem;font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);font-weight:600}.main-panel,.problem-panel,.home-panel{padding:var(--space-md) 1.1rem var(--space-lg);overflow-y:auto;-webkit-overflow-scrolling:touch;min-height:0}.app-body.has-nav-gutter .main-panel{padding-left:var(--sidebar-width);padding-right:var(--sidebar-width)}.nav-tree{display:flex;flex-direction:column;gap:var(--space-xs)}.nav-toggle{width:100%;display:flex;align-items:center;gap:.45rem;border:0;background:transparent;text-align:left;padding:.65rem .55rem;min-height:var(--touch-min);border-radius:var(--radius);cursor:pointer;color:inherit}.nav-toggle:hover{background:var(--hover-bg)}.nav-toggle.active{background:var(--nav-selected-bg);color:var(--ink)}.nav-toggle.active:hover{background:var(--nav-selected-bg)}.nav-toggle.chapter{font-size:.96rem}.nav-chevron-button{width:auto;flex-shrink:0;padding:.65rem .35rem}.nav-chapter-header{display:flex;align-items:center;gap:.15rem;padding-left:var(--nav-indent-chapter)}.chapter-link{flex:1;min-width:0;padding:.55rem .35rem;color:inherit;text-decoration:none;border-radius:var(--radius);font-size:.96rem}.chapter-link:hover{background:var(--ink-faint);text-decoration:underline}.chapter-link.active,.chapter-link.active:hover{background:var(--nav-selected-bg);color:var(--ink);text-decoration:none}.nav-chevron{flex-shrink:0;width:.85rem}.nav-toggle .nav-label{flex:1;min-width:0}.chapter-progress{margin-left:auto;font-size:.78rem;color:var(--ink-muted);flex-shrink:0;padding:0 .35rem}.nav-chapter-exercises{padding-left:var(--nav-chapter-text-inset);margin:.15rem 0 .35rem}.nav-exercises-label{margin:.35rem 0 .15rem;padding:0 .35rem;font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);font-family:system-ui,sans-serif}.nav-section{margin-left:0;margin-bottom:.15rem;border-radius:var(--radius)}.nav-section.active{background:transparent}.section-heading{display:flex;align-items:center;gap:var(--space-sm);font-size:.92rem;color:var(--ink-muted);margin:.15rem 0}.nav-section ul{list-style:none;margin:0;padding:0}.nav-intro{margin-left:1rem;margin-bottom:.35rem}.nav-entry{display:block;padding:.65rem .55rem;min-height:var(--touch-min);border-radius:var(--radius);color:inherit;text-decoration:none;font-size:.95rem}.nav-entry:hover{background:var(--hover-bg)}.nav-entry.active{background:var(--nav-selected-bg);color:var(--ink)}.nav-entry.active:hover{background:var(--nav-selected-bg)}.nav-intro-chapter{margin-left:1.75rem}.intro-link{display:block;padding:.55rem .65rem;min-height:var(--touch-min);border-radius:var(--radius);color:inherit;text-decoration:none;font-size:.92rem}.intro-link.active{background:var(--nav-selected-bg);color:var(--ink);font-weight:600}.diagram-link{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm);padding:.65rem;min-height:var(--touch-min);border-radius:var(--radius);color:inherit;text-decoration:none}.diagram-link.active{background:var(--nav-selected-bg);color:var(--ink);font-weight:600}.tag{font-size:.72rem;opacity:.75}.eyebrow,.muted{color:var(--ink-muted)}.eyebrow{margin:0;text-transform:uppercase;letter-spacing:.08em;font-size:.78rem}.action-row{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);width:100%}button.primary,button.secondary{border-radius:var(--radius);padding:.7rem 1.15rem;min-height:var(--touch-min);min-width:var(--touch-min);border:1px solid var(--border);cursor:pointer;font-size:.95rem}button.primary{background:var(--ink);color:var(--paper)}button.primary:disabled{opacity:.4;cursor:not-allowed}button.secondary{background:var(--paper);color:var(--ink);border-color:var(--border-light)}button.secondary.active,.icon-button.active{background:var(--hint-bg);border-color:var(--hint-border);color:var(--warning-ink)}.icon-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem}button.secondary:disabled{opacity:.4;cursor:not-allowed}@media(hover:hover)and (pointer:fine){button.primary:hover:not(:disabled){background:#1a1a1a}button.secondary:hover:not(:disabled){background:var(--paper-warm);border-color:var(--ink-muted)}.nav-toggle:hover,.diagram-link:not(.active):hover,.intro-link:not(.active):hover{background:var(--hover-bg)}.exercise-chip:hover:not(.active){border-color:var(--ink-muted);background:var(--paper-warm)}}.hint-box,.info-box,.answer-lines,.source-image,.missing-fen{border-radius:var(--radius);padding:var(--space-md) 1.1rem;background:var(--paper);border:1px solid var(--border-light)}.hint-box{border-left:4px solid var(--hint-border)}.board-hint{width:100%;margin:0;background:var(--hint-bg);border-color:var(--hint-border)}.board-hint p{margin:0}.board-stage{display:flex;flex-direction:column;align-items:center;gap:.4rem;width:100%;max-width:min(100%,720px);margin:0 auto;padding:0 0 var(--space-sm)}.board-stage.has-exercise-rail{max-width:min(100%,920px)}.board-panel{width:100%;display:flex;flex-direction:column;gap:.4rem}.board-with-rail{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);width:100%;margin:0 auto}.board-measure-slot{width:min(100%,720px);max-width:100%}.board-main{display:flex;flex-direction:column;gap:.4rem;max-width:100%;margin:0 auto}.board-with-rail .exercise-strip-stage{box-sizing:border-box;max-width:100%}.board-header-nav{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:var(--space-sm);width:100%}.board-header-nav-triple{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}.board-header-nav-slot{display:flex;min-width:0}.board-header-nav-prev{justify-content:flex-start}.board-header-nav-next{justify-content:flex-end}.board-header-nav-center{display:flex;justify-content:center;align-items:center;min-width:0;text-align:center}.board-frame-step{margin:0;text-align:center;font-size:.875rem;white-space:nowrap}.board-nav-button{display:inline-flex;align-items:center;justify-content:center;min-height:2.25rem;padding:.35rem .85rem;font-size:.875rem;max-width:100%;text-decoration:none;border-radius:var(--radius);border:1px solid var(--border-light);cursor:pointer}a.board-nav-button.secondary{background:var(--paper);color:var(--ink)}a.board-nav-button.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}.board-nav-spacer{display:block;width:5.5rem;height:1px}.board-toolbar{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);width:100%;margin-top:.15rem}.board-toolbar .secondary{flex:1 1 auto;min-width:min(100%,9.5rem);max-width:14rem}.move-scrubber{display:flex;align-items:center;justify-content:center;gap:.65rem;width:100%;margin-top:.4rem;padding:.3rem .55rem;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper-warm)}.move-scrubber-btn{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper);color:var(--ink);font-size:1.35rem;line-height:1;cursor:pointer}.move-scrubber-btn:hover:not(:disabled){background:var(--hover-bg)}.move-scrubber-btn:disabled{opacity:.35;cursor:default}.move-scrubber-track{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.4rem;min-width:3rem;max-width:min(100%,12rem)}.move-scrubber-dot{width:.45rem;height:.45rem;border-radius:50%;background:var(--border-light);transition:background-color .12s ease,transform .12s ease}.move-scrubber-dot.is-passed{background:var(--ink-muted)}.move-scrubber-dot.is-current{background:var(--ink);transform:scale(1.35)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.board-wrap{width:100%;max-width:100%;display:flex;justify-content:center;overflow:hidden}.board-canvas{width:100%;max-width:100%;display:flex;justify-content:center}.board-surface{margin:0 auto;max-width:100%}.board-main .board-header-nav,.board-main .board-toolbar{width:100%}.board-feedback{width:100%;display:grid;gap:.4rem;margin-top:.15rem}.feedback-banner{display:flex;gap:.65rem;align-items:flex-start;width:100%;padding:.85rem var(--space-md);border-radius:6px;border:1px solid transparent}.feedback-icon{display:inline-flex;align-items:center;justify-content:center;width:1.65rem;height:1.65rem;border-radius:999px;font-weight:700;flex-shrink:0}.feedback-copy strong{display:block}.feedback-copy p{margin:.35rem 0 0;font-size:.95rem}.feedback-checking{background:var(--info-bg);border-color:var(--info-border);color:var(--ink)}.feedback-checking .feedback-icon{background:var(--paper);border:1px solid var(--border-light)}.feedback-partial{background:var(--continue-bg);border:1px dashed var(--continue-border);color:var(--continue-ink)}.feedback-partial .feedback-icon{background:transparent;border:1.5px solid var(--continue-border);color:var(--continue-border);font-size:1rem}.feedback-correct{background:var(--success-bg);border:2px solid var(--success-border);color:var(--success-ink)}.feedback-correct .feedback-icon{background:var(--success-border);color:var(--paper)}.feedback-incorrect{background:var(--error-bg);border-color:var(--error-border);color:var(--error-ink)}.feedback-incorrect .feedback-icon{background:var(--error-border);color:var(--paper)}.feedback-error{background:var(--error-bg);border-color:var(--error-border);color:var(--error-ink)}.feedback-error .feedback-icon{background:var(--error-border);color:var(--paper)}.problem-supplement{max-width:560px;margin:0 auto;display:grid;gap:var(--space-md);padding-bottom:var(--space-lg)}.problem-header{text-align:center}.problem-header .eyebrow{font-size:.72rem;margin:0}.problem-header h2{margin:.1rem 0;font-weight:700;font-size:clamp(1.05rem,3vw,1.35rem)}.problem-header .muted{margin:0;font-size:.82rem}.line-move-label{margin:0;font-size:.88rem;text-align:center}.side-marker{display:inline-flex;align-items:center;gap:.45rem;font-size:.8rem;color:var(--ink-muted);justify-content:center;margin:0}.side-marker-square{width:1rem;height:1rem;border:1px solid var(--border);flex-shrink:0}.side-marker-square.side-w{background:var(--paper)}.side-marker-square.side-b{background:var(--ink)}.board-interactive{cursor:default;-webkit-user-select:none;user-select:none;touch-action:none}.board-disabled{opacity:.85;pointer-events:none}.error-text{border-left:4px solid var(--ink);color:var(--ink);padding:var(--space-md);background:var(--error-bg);border-radius:var(--radius)}.source-image img{width:100%;border-radius:2px;border:1px solid var(--border-light)}.debug-panel{border-style:dashed}.loading-state,.error-state{display:grid;place-items:center;min-height:40vh;text-align:center;padding:2rem var(--space-md)}.loading-board{display:grid;gap:var(--space-md);justify-items:center}.loading-board-grid{display:grid;grid-template-columns:repeat(8,1fr);width:min(280px,80vw);aspect-ratio:1;border:1px solid var(--border-light);overflow:hidden}.loading-board-grid span{animation:pulse-square 1.4s ease-in-out infinite}.loading-board-grid span.light{background:var(--paper)}.loading-board-grid span.dark{background:var(--ink-faint);animation-delay:.2s}@keyframes pulse-square{0%,to{opacity:.55}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.loading-board-grid span{animation:none;opacity:.75}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.problem-nav,.ocr-badge,.teacher-panel,.dual-board,.promotion-dialog,.settings-dialog{border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper)}.continue-banner,.problem-nav{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:.85rem var(--space-md)}.continue-banner{margin-bottom:var(--space-md);padding:.65rem 0;border-bottom:1px solid var(--border-light);background:transparent}.continue-banner.compact{padding:.5rem 0}.continue-banner p{margin:.2rem 0 0}.problem-nav{padding:.55rem .75rem}.nav-link-button{display:inline-flex;align-items:center;justify-content:center;min-height:var(--touch-min);padding:.65rem var(--space-md);text-decoration:none;border-radius:var(--radius);border:1px solid var(--border-light)}.nav-link-button.primary,a.primary.nav-link-button{background:var(--ink);color:var(--paper);border-color:var(--ink)}.nav-link-button.secondary,a.secondary.nav-link-button{background:var(--paper);color:var(--ink)}.nav-next-highlight{box-shadow:0 0 0 2px var(--success-border)}.nav-spacer{min-width:5rem}.ocr-badge{padding:.75rem var(--space-md);margin:.75rem 0 0;border-left:4px solid var(--ink-muted);display:grid;gap:var(--space-xs)}.exercise-strip{display:flex;flex-wrap:wrap;gap:.35rem;margin:.35rem 0 .65rem}.exercise-strip-stage{flex-wrap:wrap;margin:0;padding:.1rem 0 .25rem;justify-content:flex-start;align-content:flex-start}.exercise-strip-stage .exercise-chip{flex:0 0 auto;min-width:2.5rem;min-height:2.5rem;font-size:.82rem}@media(min-width:900px){.board-with-rail.has-rail{flex-direction:row;align-items:flex-start;justify-content:center;gap:.65rem}.board-with-rail.has-rail .board-measure-slot{width:min(720px,calc(100% - 8.9rem));flex:0 1 auto}.board-with-rail.has-rail .exercise-strip-stage{flex:0 0 auto;width:8.25rem!important;max-width:8.25rem;padding-top:0}}.exercise-chip{display:inline-flex;align-items:center;justify-content:center;min-width:var(--touch-min);min-height:var(--touch-min);padding:0 .55rem;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper);color:inherit;text-decoration:none;font-size:.85rem;font-variant-numeric:tabular-nums}.exercise-chip.completed:not(.active){background:var(--success-bg);border-color:var(--success-border);color:var(--success-ink)}.exercise-chip.active{background:var(--nav-selected-bg);color:var(--ink);border-color:var(--ink-muted);font-weight:600}.section-link{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm);padding:.45rem .35rem;min-height:var(--touch-min);border-radius:var(--radius);color:inherit;text-decoration:none}.section-link-label{min-width:0}.section-progress-count{flex-shrink:0;font-size:.78rem;color:var(--ink-muted);font-family:system-ui,sans-serif}.section-link:hover{background:var(--hover-bg);text-decoration:none}.section-link.active{background:var(--nav-selected-bg);color:var(--ink);text-decoration:none}.section-link.active:hover{background:var(--nav-selected-bg);text-decoration:none}.section-link.active .section-progress-count{color:var(--ink-muted)}.tag.done{color:var(--success-border);font-weight:700;opacity:1}.progress-bar{position:relative;height:1.1rem;background:var(--paper-warm);border:1px solid var(--border-light);border-radius:var(--radius);overflow:hidden}.progress-bar-compact{height:.35rem;margin:.25rem 0 .5rem var(--nav-indent-section);border:none;background:var(--ink-faint)}.progress-bar-fill{height:100%;background:var(--success-border);transition:width .25s ease}.progress-bar-label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:.72rem;color:var(--ink);font-family:system-ui,sans-serif}.progress-bar-compact .progress-bar-label{display:none}.home-panel{max-width:48rem;margin:0 auto;padding-bottom:var(--space-lg)}.home-progress-summary{margin:0 0 var(--space-md);font-size:.92rem}.back-link{display:inline-block;margin-bottom:var(--space-sm);color:var(--ink-muted);text-decoration:none;font-size:.9rem}.back-link:hover{color:var(--ink);text-decoration:underline}.chapter-section-list{display:grid;gap:0;margin-top:var(--space-sm);border-top:1px solid var(--border-light)}.chapter-section-row{display:grid;grid-template-columns:1fr auto;gap:var(--space-sm) var(--space-md);align-items:center;padding:.85rem 0;border-bottom:1px solid var(--border-light);color:inherit;text-decoration:none}.chapter-section-row:hover{background:var(--paper-warm)}.chapter-section-row .section-heading h3{margin:0;font-size:1.05rem;font-weight:600}.chapter-section-meta{margin:.2rem 0 0;font-size:.85rem}.chapter-section-progress{display:flex;flex-direction:column;align-items:flex-end;gap:.35rem;min-width:5.5rem}.chapter-section-progress .progress-bar-compact{margin:0;width:5rem}.chapter-section-progress-count{font-size:.82rem;color:var(--ink-muted);font-family:system-ui,sans-serif}.section-landing{max-width:40rem}.section-landing-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-sm)}.section-landing-header h2{margin:0}.section-progress-bar{margin:var(--space-sm) 0 var(--space-md)}.section-start-button{display:inline-flex;margin:0}.section-landing-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:var(--space-md);margin:var(--space-lg) 0 var(--space-md)}.section-landing-cta{display:flex;align-items:center;justify-content:center;margin:0;min-height:4.5rem;padding:1.1rem 1.35rem;font-size:1.15rem;font-weight:600;text-align:center;text-decoration:none}.section-intro{margin:var(--space-md) 0;padding:var(--space-md);background:var(--paper-warm);border:1px solid var(--border-light);border-radius:var(--radius)}.section-intro h3{margin:0 0 var(--space-sm);font-size:1rem}.section-intro p{margin:0 0 var(--space-sm)}.section-intro p:last-child{margin-bottom:0}.section-diagram-list-block{margin-top:var(--space-lg);padding-top:var(--space-md);border-top:1px solid var(--border-light)}.section-diagram-list-heading{margin:0 0 var(--space-sm);font-size:.95rem;font-weight:600;color:var(--ink-muted)}.section-diagram-list{list-style:none;padding:0;margin:0;display:grid;gap:.35rem}.section-diagram-list a{color:inherit;text-decoration:none}.section-diagram-list a:hover{text-decoration:underline}.assignment-result{margin-top:var(--space-md);padding:var(--space-md);border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper-warm)}.teacher-panel{max-width:40rem}.teacher-form{display:grid;gap:.75rem;max-width:36rem;margin-top:var(--space-md)}.teacher-form label{display:grid;gap:.35rem}.teacher-form select{min-height:var(--touch-min);padding:var(--space-sm)}.assignment-code{display:block;padding:.75rem;background:var(--paper-warm);word-break:break-all}.debug-panel-stack,.diagram-sequence,.dual-board,.guided-practice{display:grid;gap:var(--space-md);width:100%;justify-items:center}.guided-practice{background:transparent}.diagram-sequence-label{margin:0;font-size:.92rem}.diagram-sequence-controls{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center}.intro-view .section-intro{max-width:42rem}.intro-sequence{display:grid;gap:var(--space-md);max-width:42rem;width:100%}.intro-sequence-position{margin:0}.intro-sequence-id{font-family:var(--font-mono, ui-monospace, monospace);font-size:.85em}.intro-sequence-subtopic,.intro-sequence-prose,.intro-sequence-move{margin:0}.intro-sequence-board{width:100%;display:flex;justify-content:center}.chapter-summary{max-width:42rem;margin:0 0 var(--space-md)}.chapter-learn-link{margin-bottom:var(--space-md)}.chapter-learn-note{max-width:42rem}.topic-brief-panel{max-width:42rem;margin-bottom:var(--space-md);border:1px solid var(--border-light);border-radius:var(--radius);padding:var(--space-sm) var(--space-md)}.topic-brief-panel>summary{cursor:pointer;font-weight:600}.topic-brief{display:grid;gap:var(--space-md);max-width:min(100%,720px);margin:0 auto}.topic-brief-example-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);margin:0}.topic-brief-example-label{font-size:.85rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-muted)}.topic-brief-example-dots{display:flex;gap:.4rem;align-items:center}.topic-brief-example-dot{width:.45rem;height:.45rem;border-radius:999px;background:var(--border-light)}.topic-brief-example-dot.is-done{background:color-mix(in srgb,var(--ink-muted) 55%,transparent)}.topic-brief-example-dot.is-active{width:1.1rem;background:var(--ink)}.topic-brief-example-heading{font-size:.95rem;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-muted)!important;font-weight:600}.topic-brief-stage{width:100%}.topic-brief-summary{margin:0;max-width:42rem}.section-introduction-lead{margin-top:0}.topic-brief-text{display:grid;gap:var(--space-xs);max-width:42rem;width:100%}.topic-brief-line{margin:0;color:var(--ink-muted)}.topic-brief-line.is-active{color:inherit;font-weight:600}.topic-brief-controls{justify-content:center}.topic-brief-position{margin:0;align-self:center}.home-part-list{display:grid;gap:var(--space-lg);margin-top:var(--space-md)}.home-part-title{margin:0 0 var(--space-sm);font-size:1rem;color:var(--ink-muted);font-weight:600}.home-chapter-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border-light)}.home-chapter-item+.home-chapter-item{border-top:1px solid var(--border-light)}.home-chapter-item:last-child{border-bottom:1px solid var(--border-light)}.home-chapter-row{display:grid;grid-template-columns:auto 1fr auto;gap:var(--space-sm);align-items:center;padding:.7rem 0;background:transparent}.home-chapter-toggle{border:none;background:transparent;padding:.2rem;cursor:pointer;color:inherit;line-height:1;width:1.25rem;flex-shrink:0}.home-chapter-toggle-spacer{display:inline-block;width:1.25rem;flex-shrink:0}.home-chapter-main{min-width:0;min-height:2.75rem;display:flex;flex-direction:column;justify-content:center}.home-chapter-link{display:block;color:inherit;text-decoration:none;font-weight:600}.home-chapter-link:hover{text-decoration:underline}.home-chapter-meta{margin:.15rem 0 0;font-size:.85rem;min-height:1.1rem}.home-chapter-item-expandable .home-chapter-meta{color:var(--ink-muted)}.home-chapter-progress-wrap{display:flex;align-items:center;gap:.5rem;min-width:6.5rem;justify-content:flex-end}.home-chapter-progress-count{font-size:.85rem;color:var(--ink-muted);white-space:nowrap}.home-chapter-progress{width:4.5rem;flex-shrink:0}.home-chapter-item-expandable .home-section-list{margin:0;padding:.15rem 0 .55rem;background:transparent;border-top:none}.home-section-list{list-style:none;padding:.15rem 0 .55rem calc(1.25rem + var(--space-sm));border-left:none;margin:0}.home-section-list li+li{margin-top:.05rem}.home-section-list a{display:block;padding:.28rem .65rem .28rem 0;color:var(--ink-muted);text-decoration:none;font-size:.92rem}.home-section-list a:hover{color:var(--ink);text-decoration:underline}.chapter-sections-heading{margin:var(--space-lg) 0 var(--space-xs);font-size:.92rem;color:var(--ink-muted);font-weight:600;text-transform:uppercase;letter-spacing:.06em}.continue-banner-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap}.resume-chapter-list{list-style:none;padding:0;margin:var(--space-md) 0 0;display:grid;gap:0;border-top:1px solid var(--border-light)}.resume-chapter-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-md);padding:.85rem 0;border-bottom:1px solid var(--border-light)}.resume-chapter-item h3{margin:.2rem 0}.guided-line-list{list-style:none;padding:0;margin:0}.guided-line{padding:.45rem 0;border-bottom:1px solid var(--border-light);display:flex;gap:var(--space-sm);align-items:baseline}.guided-line-pending{color:var(--ink-muted)}.guided-line-current{background:var(--hint-bg);padding-left:var(--space-sm);margin-left:calc(-1 * var(--space-sm));border-radius:var(--radius)}.guided-line-marker{flex-shrink:0;width:1rem;font-family:system-ui,sans-serif}.active-line{font-weight:700}.guided-practice .answer-lines{width:100%}.debug-dl{display:grid;gap:var(--space-sm);margin:0 0 .75rem}.debug-dl div{display:grid;gap:.15rem}.debug-dl dt{font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.debug-dl dd{margin:0;word-break:break-all}.dual-board-tabs{display:flex;flex-wrap:wrap;gap:.35rem;justify-content:center;width:100%}.dual-board-controls{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center}.promotion-overlay,.settings-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:grid;place-items:center;z-index:var(--z-overlay);border:0;padding:var(--space-md)}.promotion-dialog,.settings-dialog{padding:var(--space-md);border:1px solid var(--border);display:grid;gap:.75rem;min-width:min(90vw,320px);max-width:24rem;width:100%}.settings-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.settings-dialog-header h2{margin:0;font-size:1.1rem}.settings-options{display:grid;gap:var(--space-md)}.settings-option{display:flex;gap:var(--space-sm);align-items:flex-start;cursor:pointer}.settings-option input{margin-top:.2rem;width:1.1rem;height:1.1rem;accent-color:var(--ink);flex-shrink:0}.settings-option strong{display:block;font-size:.95rem}.settings-option .muted{display:block;font-size:.82rem;margin-top:.15rem}.promotion-options{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.promotion-button{min-height:48px;border:1px solid var(--border-light);border-radius:var(--radius);background:var(--paper-warm);cursor:pointer}.ocr-reference{border-style:dashed}@media(max-width:960px){.app-shell{height:100dvh}.breadcrumb-label-full{display:none}.breadcrumb-label-medium{display:inline}.breadcrumb-list{flex-wrap:nowrap;overflow:hidden}.sidebar-teacher-link,.nav-toggle-label{display:none}.app-body.mobile-nav{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr)}.sidebar-drawer{position:fixed;top:var(--header-height);left:0;bottom:0;width:min(100vw,320px);z-index:var(--z-drawer);transform:translate(-100%);transition:transform .2s ease;box-shadow:4px 0 16px #0000001f}.sidebar-drawer.open{transform:translate(0)}.sidebar-drawer.closed{visibility:hidden;pointer-events:none}.main-panel,.problem-panel,.home-panel{padding:var(--space-md);overflow-x:hidden}.board-stage,.problem-supplement{max-width:none}.board-toolbar .secondary{min-height:48px;max-width:none;flex:1 1 calc(50% - .25rem)}.move-scrubber-btn{width:2.75rem;height:2.75rem;font-size:1.5rem}.board-nav-button{min-height:44px;padding:.45rem .65rem;font-size:.8125rem}.board-header-nav-triple{grid-template-columns:1fr 1fr;grid-template-areas:"prev next" "center center";gap:.35rem var(--space-sm)}.board-header-nav-triple .board-header-nav-prev{grid-area:prev}.board-header-nav-triple .board-header-nav-next{grid-area:next}.board-header-nav-triple .board-header-nav-center{grid-area:center}.board-header-nav-triple .board-frame-step{grid-column:1 / -1}.board-stage.has-exercise-rail{max-width:none}.dual-board-tab{flex:1 1 calc(50% - .25rem);min-height:48px}.header-actions{width:100%;justify-content:flex-start}.app-header.compact{flex-wrap:wrap;align-items:flex-start}.header-start{flex:1 1 100%}}@media(max-width:640px){.breadcrumb-label-medium{display:none}.breadcrumb-label-short{display:inline}}@media(max-width:400px){.breadcrumb-item:not(:last-child){display:none}.breadcrumb-item:last-child .breadcrumb-separator{display:none}}@media(pointer:coarse){.nav-toggle,.diagram-link,.exercise-chip,button.primary,button.secondary,.board-toolbar .secondary{min-height:48px}.board-interactive{touch-action:none}}.login-shell{min-height:100vh;display:grid;place-items:center;padding:var(--space-lg)}.login-panel{width:min(24rem,100%);display:flex;flex-direction:column;gap:var(--space-md)}.login-panel h1{margin:0;font-size:1.75rem}.login-form{display:flex;flex-direction:column;gap:var(--space-md)}.login-form label{display:flex;flex-direction:column;gap:.35rem;font-size:.9rem}.login-form input{border:1px solid var(--border);border-radius:var(--radius);padding:.7rem .85rem;font:inherit;background:var(--paper);color:var(--ink);min-height:var(--touch-min)}.login-error{margin:0;color:var(--warning-ink, #8a3b12);font-size:.9rem}.sidebar-logout-button{width:100%;text-align:left}.admin-panel{padding:var(--space-md) var(--space-lg) var(--space-xl);max-width:52rem}.admin-panel h1{margin:0 0 var(--space-sm)}.admin-student-list{list-style:none;margin:var(--space-md) 0 0;padding:0;display:flex;flex-direction:column;gap:.35rem}.admin-student-link{display:flex;flex-direction:column;gap:.15rem;padding:.75rem .85rem;border-radius:var(--radius);text-decoration:none;color:inherit;border:1px solid var(--border-light)}.admin-student-name{font-weight:600}.admin-chapter-list{list-style:none;margin:0 0 var(--space-lg);padding:0;display:flex;flex-direction:column;gap:.4rem}.admin-chapter-list li{display:flex;justify-content:space-between;gap:var(--space-sm);padding:.35rem 0;border-bottom:1px solid var(--border-light)}.admin-completions-table{width:100%;border-collapse:collapse;font-size:.92rem}.admin-completions-table th,.admin-completions-table td{text-align:left;padding:.55rem .4rem;border-bottom:1px solid var(--border-light);vertical-align:top}.admin-completions-table th{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-muted)}
