:root{color-scheme:light;--paper:#f3ecdd;--paper-page:#fbf7ee;--paper-sunk:#efe7d6;--ink:#211c16;--ink-soft:#6c6151;--ink-faint:#978b76;--rule:#ddd0b8;--rule-strong:#c9b896;--accent:#8a2b2b;--accent-deep:#5f1d1d;--accent-wash:#f4e6df;--gold:#9c7a2d;--gold-wash:#f6edd4;--state-idle:#8a7f6b;--state-emerging-ink:#355a74;--state-emerging-bg:#e7eef2;--state-emerging-line:#a9c0d0;--state-proficient-ink:#3a6347;--state-proficient-bg:#e6efe5;--state-proficient-line:#a3c0a4;--state-weak-ink:#8a5a16;--state-weak-bg:#f7ecd2;--state-weak-line:#d8b878;--serif-display:"Spectral","Noto Serif SC","Songti SC","SimSun",Georgia,serif;--serif-body:"Source Serif 4","Noto Serif SC","Songti SC","SimSun",Georgia,serif;--mono:"IBM Plex Mono",ui-monospace,"Cascadia Code",Consolas,monospace;--measure:70ch;--radius:3px;--shadow-page:0 1px 0 rgba(95,29,29,0.04),0 18px 40px -28px rgba(33,28,22,0.45)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;color:var(--ink);background-color:var(--paper);background-image:radial-gradient(120% 60% at 50% -10%,rgba(255,252,244,.7),rgba(255,252,244,0) 60%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");font-family:var(--serif-body);font-size:17px;line-height:1.75;font-feature-settings:"kern","liga","onum","pnum";text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}::selection{background:var(--accent-wash);color:var(--accent-deep)}.page-frame{min-height:100vh;display:flex;flex-direction:column}.masthead{position:-webkit-sticky;position:sticky;top:0;z-index:20;justify-content:space-between;gap:24px;padding:14px clamp(18px,4vw,40px);background:color-mix(in srgb,var(--paper) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule)}.masthead,.masthead-brand{display:flex;align-items:baseline}.masthead-brand{gap:14px;min-width:0}.masthead-title{margin:0;font-family:var(--serif-display);font-weight:600;font-size:22px;letter-spacing:.02em;color:var(--ink)}.masthead-title .mark{color:var(--accent)}.masthead-sub{margin:0;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);white-space:nowrap}.masthead-meta{font-family:var(--serif-display);font-style:italic;font-size:14px;color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.site-footer{margin-top:auto;padding:18px clamp(18px,4vw,40px) 26px;border-top:1px solid var(--rule);color:var(--ink-faint);font-size:12.5px;letter-spacing:.04em;display:flex;gap:10px;align-items:center}.site-footer .sep{color:var(--rule-strong)}.eyebrow{margin:0 0 14px;font-family:var(--serif-display);font-size:12px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--accent)}.eyebrow:before{content:"";display:inline-block;width:18px;height:1px;margin-right:10px;vertical-align:middle;background:var(--accent);opacity:.7}h1,h2,h3{font-family:var(--serif-display);font-weight:600;letter-spacing:.01em;color:var(--ink)}h1{font-size:clamp(30px,4vw,40px);line-height:1.18}h1,h2{margin:0 0 14px}h2{font-size:28px;line-height:1.25}h3{margin:0 0 10px;font-size:18px;letter-spacing:.04em}p{line-height:1.78}a{color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px}.katex-display{max-width:100%;overflow-x:auto;overflow-y:hidden;padding:6px 0}.katex{font-size:1.05em}.workbench-shell{display:grid;grid-template-columns:264px minmax(0,1fr) 348px;grid-gap:clamp(16px,2.4vw,34px);gap:clamp(16px,2.4vw,34px);align-items:start;width:100%;max-width:1440px;margin:0 auto;padding:clamp(20px,3vw,38px) clamp(18px,4vw,40px) 40px}.main-column{display:grid;grid-gap:22px;gap:22px;min-width:0;animation:rise .6s cubic-bezier(.22,.61,.36,1) .05s both}.course-sidebar{position:-webkit-sticky;position:sticky;top:78px;max-height:calc(100vh - 98px);overflow:auto;padding:4px 4px 4px 0;animation:rise .6s cubic-bezier(.22,.61,.36,1) both}.sidebar-heading{display:grid;grid-gap:3px;gap:3px;padding:0 6px 14px;margin-bottom:8px;border-bottom:1px solid var(--rule)}.sidebar-heading span{font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faint)}.sidebar-heading strong{font-family:var(--serif-display);font-size:19px;font-weight:600}.chapter-list{display:grid;grid-gap:1px;gap:1px}.chapter-item{position:relative;display:block;padding:11px 12px 11px 14px;border-radius:var(--radius);border-left:2px solid transparent;transition:background .18s ease,border-color .18s ease;text-decoration:none;color:inherit;cursor:pointer}.volume-label{padding:10px 12px 4px 14px;font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-faint);font-weight:600}.chapter-item:hover{background:color-mix(in srgb,var(--paper-page) 70%,transparent)}.chapter-item.is-active{background:var(--paper-page);border-left-color:var(--accent);box-shadow:0 1px 0 rgba(33,28,22,.03)}.chapter-title{display:flex;gap:11px;align-items:baseline}.chapter-title>span:first-child{font-family:var(--serif-display);font-size:13px;color:var(--accent);font-feature-settings:"onum";font-variant-numeric:oldstyle-nums;min-width:20px}.chapter-title strong{font-family:var(--serif-display);font-weight:500;font-size:15.5px;color:var(--ink)}.chapter-item small{display:block;margin:3px 0 0 31px;font-size:12px;font-style:italic;color:var(--ink-faint)}.mastery-summary,.progress-pill{display:inline-flex;width:-moz-fit-content;width:fit-content;align-items:center;gap:6px;padding:2px 10px;border:1px solid var(--rule-strong);border-radius:999px;font-family:var(--serif-display);font-size:11.5px;font-weight:600;letter-spacing:.06em;background:var(--paper-sunk);color:var(--ink-soft)}.progress-pill{margin:8px 0 0 31px}.mastery-summary:before,.progress-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}.mastery-summary.not_started,.progress-pill.not_started{color:var(--state-idle)}.mastery-summary.emerging,.progress-pill.emerging{color:var(--state-emerging-ink);background:var(--state-emerging-bg);border-color:var(--state-emerging-line)}.mastery-summary.proficient,.progress-pill.proficient{color:var(--state-proficient-ink);background:var(--state-proficient-bg);border-color:var(--state-proficient-line)}.mastery-summary.weak,.progress-pill.weak{color:var(--state-weak-ink);background:var(--state-weak-bg);border-color:var(--state-weak-line)}.exercise-panel,.learning-panel,.tutor-panel{background:var(--paper-page);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow-page)}.learning-panel{padding:clamp(26px,3.4vw,44px)}.learning-panel h2,.learning-panel>p:first-of-type+h2{margin-top:0}.learning-panel>p{max-width:var(--measure);color:#2b251d}.learning-panel>h2+p{font-size:1.06em}.learning-block{margin-top:30px;padding-top:22px;border-top:1px solid var(--rule)}.learning-block h3{color:var(--accent-deep)}.learning-block ol,.learning-block ul{max-width:var(--measure);padding-left:1.3em}.learning-block li{margin:8px 0;line-height:1.7}.learning-block li::marker{color:var(--gold)}.diagram-grid{display:grid;grid-gap:16px;gap:16px}.diagram-card{margin:0;padding:16px 16px 14px;border:1px solid var(--rule);border-radius:var(--radius);background:linear-gradient(var(--paper-sunk),var(--paper-sunk)) padding-box}.diagram-card figcaption{display:grid;grid-gap:4px;gap:4px;color:var(--ink-soft);font-size:14px}.diagram-card figcaption strong{font-family:var(--serif-display);font-size:15px;color:var(--ink)}.diagram-card svg{width:100%;height:auto;margin-top:12px;color:var(--ink)}.diagram-prompt{margin:12px 0 0;padding-left:12px;border-left:2px solid var(--gold);color:var(--accent-deep);font-style:italic}.exercise-panel{padding:clamp(24px,3vw,36px)}.exercise-header{display:flex;justify-content:space-between;gap:14px;align-items:center;flex-wrap:wrap;padding-bottom:14px;margin-bottom:4px;border-bottom:1px solid var(--rule)}.exercise-panel h3{font-family:var(--serif-body);font-weight:600;font-size:1.12em;line-height:1.6;margin:16px 0}button{border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--paper-page);color:var(--ink);cursor:pointer;font-family:var(--serif-display);font-size:14px;letter-spacing:.02em;padding:8px 14px;transition:border-color .16s ease,color .16s ease,background .16s ease}button.is-active,button:hover{border-color:var(--accent);color:var(--accent-deep)}button.is-active{background:var(--accent-wash)}button:disabled{opacity:.55;cursor:progress}textarea{width:100%;min-height:150px;resize:vertical;padding:14px 15px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--paper);color:var(--ink);font-family:var(--serif-body);font-size:16px;line-height:1.75}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.answer-upload-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:12px;color:var(--ink-soft);font-size:13.5px}.upload-button{display:inline-flex;align-items:center;min-height:38px;padding:8px 14px;border:1px solid var(--accent);border-radius:var(--radius);color:var(--accent-deep);cursor:pointer;font-family:var(--serif-display);font-weight:600;font-size:14px;background:var(--accent-wash);transition:background .16s ease}.upload-button:hover{background:color-mix(in srgb,var(--accent-wash) 70%,var(--accent) 6%)}.answer-image-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:12px;gap:12px;margin-top:14px}.answer-image-card{margin:0;border:1px solid var(--rule);border-radius:var(--radius);overflow:hidden;background:var(--paper)}.answer-image-card img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:var(--paper-sunk)}.answer-image-card figcaption{display:grid;grid-gap:8px;gap:8px;padding:8px 10px;color:var(--ink-soft);font-size:13px}.answer-image-card figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.answer-image-card button{padding:4px 10px;font-size:12.5px}.exercise-actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}.grading-error{margin:10px 0 0;padding:10px 14px;border-left:2px solid var(--accent);background:var(--accent-wash);color:var(--accent-deep);font-size:14.5px}.grade-result-card{display:grid;grid-gap:10px;gap:10px;margin:14px 0;padding:16px 18px;border:1px solid var(--rule);border-left-width:3px;border-radius:var(--radius);background:var(--paper-sunk)}.grade-result-card.correct{border-left-color:var(--state-proficient-ink)}.grade-result-card.partially_correct{border-left-color:var(--gold)}.grade-result-card.incorrect{border-left-color:var(--accent)}.grade-result-heading{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.grade-result-heading strong{font-family:var(--serif-display);font-size:16px}.grade-result-heading span{font-family:var(--serif-display);font-size:20px;color:var(--accent-deep);font-feature-settings:"onum";font-variant-numeric:oldstyle-nums}.grade-result-card ul{margin:4px 0 0;padding-left:1.2em}.hint-list{margin:14px 0;padding:14px 18px;list-style:none;border-left:2px solid var(--gold);background:var(--gold-wash)}.hint-list li{margin:6px 0;padding-left:18px;position:relative}.hint-list li:before{content:"→";position:absolute;left:0;color:var(--gold)}details{margin-top:14px;border-top:1px solid var(--rule);padding-top:12px}details summary{cursor:pointer;font-family:var(--serif-display);font-size:14px;letter-spacing:.04em;color:var(--ink-soft)}.kp-nav{background:var(--paper-page);border:1px solid var(--rule);border-radius:var(--radius);padding:14px 18px 16px;box-shadow:var(--shadow-page)}.kp-nav-label{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint);font-weight:600;margin:0 0 10px}.kp-step-row{display:flex;flex-wrap:wrap;gap:6px}.kp-step{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid var(--rule-strong);border-radius:20px;text-decoration:none;color:var(--ink-soft);font-size:13.5px;transition:border-color .16s ease,color .16s ease,background .16s ease}.kp-step.is-active,.kp-step:hover{border-color:var(--accent);color:var(--accent-deep);background:var(--accent-wash)}.kp-step.is-active{font-weight:600}.kp-step-num{flex-shrink:0;width:20px;height:20px;border-radius:50%;background:var(--paper-sunk);border:1px solid var(--rule-strong);display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;font-family:var(--serif-display)}.kp-step.is-active .kp-step-num{background:var(--accent);border-color:var(--accent);color:white}.goals-callout{margin:18px 0 22px;padding:13px 18px 14px;background:var(--accent-wash);border-left:3px solid var(--gold);border-radius:0 var(--radius) var(--radius) 0}.goals-callout-label{margin:0 0 8px;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-deep);font-weight:600}.goals-callout ul{margin:0;padding-left:1.3em;max-width:var(--measure)}.goals-callout li{margin:5px 0;line-height:1.65;color:var(--ink)}.goals-callout li::marker{color:var(--gold)}.explanation-body{max-width:var(--measure);color:var(--ink);line-height:1.82;margin:0 0 4px}.explanation-body p{margin:0 0 .9em}.explanation-body p:last-child{margin-bottom:0}.learning-block-toggle{display:flex;justify-content:space-between;align-items:center;width:100%;padding:0;border:none;background:transparent;cursor:pointer;text-align:left}.learning-block-toggle h3{margin:0;color:var(--accent-deep)}.learning-block-toggle:hover h3{color:var(--accent)}.toggle-indicator{flex-shrink:0;font-size:11.5px;color:var(--ink-faint);letter-spacing:.04em;font-family:var(--serif-display);white-space:nowrap;margin-left:12px}.learning-block-body{margin-top:14px}.exercise-count{font-family:var(--serif-display);font-size:17px;font-weight:600}.exercise-empty{color:var(--ink-soft);font-style:italic;padding:12px 0 4px}.exercise-list{display:flex;flex-direction:column;gap:7px;margin:16px 0 6px}.exercise-card{display:flex;align-items:center;gap:12px;padding:11px 14px;border:1px solid var(--rule);border-radius:var(--radius);cursor:pointer;background:var(--paper);transition:border-color .16s ease,background .16s ease;text-align:left;width:100%}.exercise-card.is-selected,.exercise-card:hover{border-color:var(--accent);background:var(--accent-wash)}.exercise-card.is-selected{border-left-width:3px}.exercise-card-num{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--paper-sunk);border:1px solid var(--rule-strong);display:flex;align-items:center;justify-content:center;font-size:12px;font-family:var(--serif-display);font-weight:600;color:var(--ink-soft)}.exercise-card.is-selected .exercise-card-num{background:var(--accent);border-color:var(--accent);color:white}.exercise-card-meta{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:4px}.exercise-card-preview{margin:0;font-size:13.5px;line-height:1.45;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.difficulty-pill{align-self:flex-start;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.05em;font-family:var(--serif-display)}.difficulty-pill.basic{background:#f0f7f4;color:#2d7a5c;border:1px solid #b8dece}.difficulty-pill.medium{background:#fef7e8;color:#9a6f00;border:1px solid #f0d87c}.difficulty-pill.advanced{background:#fef0f0;color:#c0392b;border:1px solid #f0b8b8}.exercise-workspace{margin-top:20px;padding-top:20px;border-top:1px solid var(--rule)}details summary:hover{color:var(--accent-deep)}details ul{margin:10px 0 0;padding-left:1.2em}.chapter-header{background:var(--paper-page);border:1px solid var(--rule);border-radius:var(--radius);padding:clamp(20px,2.8vw,32px) clamp(22px,3vw,36px);box-shadow:var(--shadow-page)}.chapter-header-meta{display:flex;align-items:center;gap:10px;margin-bottom:6px}.chapter-header-number{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint)}.chapter-header-number,.chapter-status-badge{font-family:var(--serif-display);font-weight:600}.chapter-status-badge{padding:2px 9px;border-radius:999px;font-size:11px;border:1px solid var(--rule-strong);background:var(--paper-sunk);color:var(--ink-soft)}.chapter-status-badge.sample-ready{border-color:var(--state-proficient-line);background:var(--state-proficient-bg);color:var(--state-proficient-ink)}.chapter-header-title{font-family:var(--serif-display);font-size:clamp(22px,3vw,28px);font-weight:600;color:var(--ink);margin:0 0 10px;line-height:1.25}.chapter-header-overview{max-width:var(--measure);color:var(--ink-soft);font-size:15px;line-height:1.72;margin:0 0 10px}.chapter-header-kp-count{font-size:12px;color:var(--ink-faint);margin:0;font-family:var(--serif-display);letter-spacing:.06em}.kp-nav-top{justify-content:space-between;gap:12px;margin-bottom:10px}.kp-nav-arrows,.kp-nav-top{display:flex;align-items:center}.kp-nav-arrows{gap:8px;flex-shrink:0}.kp-arrow{display:inline-flex;align-items:center;padding:4px 10px;border:1px solid var(--rule-strong);border-radius:var(--radius);font-size:12.5px;color:var(--ink-soft);text-decoration:none;font-family:var(--serif-display);transition:border-color .16s,color .16s,background .16s}.kp-arrow:hover{border-color:var(--accent);color:var(--accent-deep);background:var(--accent-wash)}.kp-arrow.is-disabled{opacity:.35;cursor:default;pointer-events:none}.kp-nav-index{font-size:12px;color:var(--ink-faint);font-family:var(--serif-display);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;min-width:40px;text-align:center}.kp-single-label{font-size:14px;color:var(--ink-soft);margin:0;font-style:italic}.tutor-header{display:flex;justify-content:space-between;align-items:center;gap:10px}.tutor-header .eyebrow{margin:0}.settings-toggle{font-size:12.5px;padding:5px 11px;color:var(--ink-soft);border-color:var(--rule)}.settings-toggle.is-active{border-color:var(--accent);background:var(--accent-wash);color:var(--accent-deep)}.message-list{display:flex;flex-direction:column;gap:8px;max-height:380px;overflow-y:auto;padding:2px 0}.message{padding:11px 14px;border-radius:var(--radius);line-height:1.7;font-size:14.5px}.message.teacher{background:var(--accent-wash);border-left:2px solid var(--accent)}.message.student{background:var(--paper-sunk);border-left:2px solid var(--rule-strong);align-self:flex-end;max-width:88%}.message.is-loading{padding:14px}.typing-dots{display:inline-flex;gap:5px;align-items:center}.typing-dots span{width:7px;height:7px;border-radius:50%;background:var(--accent);opacity:.6;animation:typing-bounce 1.2s infinite}.typing-dots span:nth-child(2){animation-delay:.2s}.typing-dots span:nth-child(3){animation-delay:.4s}@keyframes typing-bounce{0%,80%,to{transform:scale(.8);opacity:.4}40%{transform:scale(1.1);opacity:1}}.tutor-error{font-size:13px;color:var(--state-weak-ink);background:var(--state-weak-bg);border:1px solid var(--state-weak-line);border-radius:var(--radius);padding:8px 12px;margin:0}.tutor-form{display:grid;grid-gap:6px;gap:6px}.tutor-form textarea{min-height:80px;font-size:14.5px}@media (max-width:1280px){.workbench-shell{grid-template-columns:220px minmax(0,1fr) 300px}}.tutor-panel{position:-webkit-sticky;position:sticky;top:78px;display:grid;align-content:start;grid-gap:16px;gap:16px;padding:clamp(18px,2vw,24px);max-height:calc(100vh - 98px);overflow:auto;animation:rise .6s cubic-bezier(.22,.61,.36,1) .1s both}.tutor-panel .eyebrow{margin-bottom:4px}.settings-grid{display:grid;grid-gap:8px;gap:8px;padding-bottom:16px;border-bottom:1px solid var(--rule)}input,select{width:100%;padding:9px 11px;border:1px solid var(--rule-strong);border-radius:var(--radius);background:var(--paper);color:var(--ink);font-family:var(--serif-body);font-size:14.5px}.settings-grid input[type=password]{font-family:var(--mono);letter-spacing:.08em}select{font-family:var(--serif-display)}.app-shell{min-height:100vh;padding:32px}.hero-panel{max-width:920px;margin:0 auto;padding:32px;background:var(--paper-page);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow-page)}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (max-width:1080px){.workbench-shell{grid-template-columns:1fr}.course-sidebar,.tutor-panel{position:static;max-height:none}.course-sidebar{order:-1}}@media (prefers-reduced-motion:reduce){.course-sidebar,.main-column,.tutor-panel{animation:none}}