@charset "UTF-8";
:root{--paper:#f8f7f2;--ink:#253b42;--muted:#6c8081;--teal:#28786b;--teal-soft:#e4efe7;--line:#dce4dd;--serif:Georgia,"Noto Serif SC","Songti SC","SimSun",serif;--sans:Inter,"Segoe UI","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-color:#c8d4cb var(--paper)}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.7}button,input,textarea,select{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:wait;opacity:.6}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #71ab95;outline-offset:4px}button{color:inherit}::selection{background:#d2e5da}button,input,textarea,select{border-radius:10px}button{border:0;background:transparent}input,textarea,select{border:1px solid #d1dcd5;background:#fffefa;color:var(--ink)}input,textarea,select{width:100%;padding:11px 13px}input::placeholder,textarea::placeholder{color:#94a29b}textarea{resize:vertical;line-height:1.6}input:focus,textarea:focus,select:focus{border-color:var(--teal)}[hidden]{display:none!important}
.site-header{height:94px;max-width:1540px;margin:auto;padding:0 5%;display:flex;align-items:center;justify-content:space-between;position:relative;z-index:5}.brand{text-decoration:none;display:inline-flex;align-items:center;gap:10px;font-family:var(--serif);font-size:26px;letter-spacing:-1px;font-weight:700}.brand svg{width:30px;height:30px;stroke:var(--teal);fill:var(--teal);stroke-width:1.7;stroke-linejoin:round;stroke-linecap:round}.brand svg path{fill:none}.header-actions{display:flex;align-items:center;gap:30px;font-size:13px}.quiet-link{text-decoration:none;color:var(--muted)}.quiet-link:hover{color:var(--teal)}.header-actions span{font-size:11px;margin-left:4px;color:var(--muted)}.small-button{border:1px solid var(--line);padding:8px 15px;border-radius:30px;background:#fffefa}.small-button:hover{border-color:#91b5a3}.eyebrow{font-size:11px;letter-spacing:2.4px;color:var(--teal);font-weight:600;margin:0 0 18px}.loading{margin:25vh auto;text-align:center;color:var(--muted)}.error-view{max-width:620px;margin:15vh auto;padding:24px}.error-view p{color:var(--muted)}.primary-button{background:var(--teal);color:white;border-radius:28px;padding:12px 23px;display:inline-flex;align-items:center;gap:25px;line-height:1.5}.primary-button:hover{background:#1f675c}.text-button{color:var(--teal);padding:8px 0}.text-button:hover{text-decoration:underline}.icon-button{width:38px;height:38px;font-size:24px;border-radius:50%;display:inline-grid;place-items:center}.icon-button:hover{background:#e9ede7}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);padding:12px 22px;background:var(--ink);color:#fff;border-radius:30px;font-size:13px;max-width:90%;z-index:50;box-shadow:0 5px 25px #273b421c}.page-enter{animation:page-in .35s ease both}@keyframes page-in{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.home-hero{min-height:calc(100svh - 94px);position:relative;display:flex;justify-content:center;align-items:center;text-align:center;padding:20px 24px 120px}.home-inner{width:min(710px,100%);margin-top:-35px}.home-hero .eyebrow{margin-bottom:23px;color:#6c8c7e}.home-hero h1{font-family:var(--serif);font-size:clamp(38px,4.3vw,60px);font-weight:500;line-height:1.4;letter-spacing:1px;margin:0 0 16px}.home-hero h1 em{font-style:normal;color:var(--teal)}.hero-subtitle{color:var(--muted);font-size:15px;margin:0 0 39px}.search-box{position:relative}.search-form{display:flex;align-items:center;background:#fffefa;border:1px solid #d8e2d9;box-shadow:0 8px 40px #324a3d06;border-radius:40px;padding:6px 8px 6px 24px;text-align:left}.search-icon{width:22px;height:22px;flex-shrink:0;fill:none;stroke:#7a9186;stroke-width:1.6}.search-form input{border:0;background:transparent;outline:none!important;box-shadow:none;border-radius:0;padding:14px 15px;font-size:15px}.search-submit{width:46px;height:46px;flex-shrink:0;background:var(--teal);color:white;border-radius:50%;font-size:22px}.search-submit:hover{background:#1f675c}.search-results{position:absolute;top:calc(100% + 12px);left:10px;right:10px;z-index:10;background:#fffefa;border:1px solid var(--line);border-radius:20px;box-shadow:0 15px 35px #213d3710;text-align:left;padding:7px}.search-result{display:flex;align-items:center;justify-content:space-between;width:100%;padding:12px 15px;border-radius:12px;text-align:left}.search-result:hover{background:var(--teal-soft)}.search-result small{display:block;color:var(--muted);font-size:12px}.search-result .result-arrow{color:var(--teal)}.search-empty{color:var(--muted);padding:15px;font-size:13px}.search-shortcuts{display:flex;justify-content:center;flex-wrap:wrap;gap:12px;margin-top:17px;color:var(--muted);font-size:12px}.search-shortcuts button{padding:4px 8px;color:var(--muted);font-size:12px}.search-shortcuts button:hover{color:var(--teal)}.scroll-invitation{position:absolute;bottom:43px;left:50%;transform:translateX(-50%);font-size:11px;letter-spacing:2px;color:#899c8e;text-decoration:none;white-space:nowrap}.scroll-invitation span{display:block;font-size:22px;margin-top:4px}.ocean-section{position:relative;min-height:860px;overflow:hidden;padding:90px 24px 70px;background:linear-gradient(180deg,var(--paper) 0%,#edf2e9 44%,#e8efe5 100%)}.ocean-heading{text-align:center;position:relative;z-index:2}.ocean-heading h2{font-family:var(--serif);font-weight:400;font-size:34px;margin:0 0 9px}.ocean-heading p{color:var(--muted);font-size:13px;margin:0}.ocean-world{max-width:1000px;height:550px;margin:25px auto 0;position:relative}.ocean-contours{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.ocean-contours path{fill:none;stroke:#bcd1be;stroke-width:1;opacity:.35}.subject-bubble{position:absolute;border-radius:50%;display:flex;flex-direction:column;justify-content:center;align-items:center;border:1px solid #c2d7c4;box-shadow:inset 0 0 65px #ffffff45;background:#eef3e9dd;color:var(--ink);font-family:var(--serif);font-size:21px;transition:transform .25s,box-shadow .25s}.subject-bubble small{font-family:var(--sans);font-size:11px;color:#73897a;margin-top:4px}.subject-bubble em{font-family:var(--sans);font-style:normal;font-size:10px;color:#879a8e;margin-top:11px;letter-spacing:1px}.subject-bubble.active{width:218px;height:218px;top:160px;left:calc(50% - 109px);background:#d9e7d6;border:1px solid #9fbea4;box-shadow:0 0 0 19px #dce9d444,0 0 0 55px #e3ecd433;font-size:28px}.subject-bubble.active:after{content:'↗';font-family:var(--sans);font-size:22px;position:absolute;bottom:33px;color:#49765e}.subject-bubble.active:hover{transform:scale(1.045);box-shadow:0 0 0 22px #dce9d455,0 0 0 63px #e3ecd433}.subject-bubble.calculus{width:156px;height:156px;top:65px;left:14%}.subject-bubble.probability{width:164px;height:164px;top:58px;right:10%}.subject-bubble.geometry{width:128px;height:128px;bottom:20px;left:19%;font-size:18px}.subject-bubble.discrete{width:140px;height:140px;bottom:20px;right:17%;font-size:18px}.subject-bubble:disabled{cursor:default;opacity:.9}.ocean-caption{text-align:center;color:#7e9585;font-size:11px;letter-spacing:.4px}
.map-page{max-width:1540px;margin:auto;padding:20px 5% 35px}.map-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin:0 0 20px}.map-heading .eyebrow{margin-bottom:9px}.map-heading h1{font-size:34px;font-family:var(--serif);font-weight:500;margin:0;line-height:1.4}.map-heading h1 span{font-size:15px;color:var(--muted);font-family:var(--sans);font-weight:400;margin-left:13px}.map-description{font-size:13px;color:var(--muted);margin:10px 0 0}.map-progress{white-space:nowrap;color:var(--muted);font-size:12px;display:flex;align-items:center;gap:8px;padding-bottom:8px}.read-dot{width:8px;height:8px;background:#76a586;border-radius:50%;display:inline-block}.graph-frame{position:relative;border:1px solid #e2e7dc;border-radius:30px;background:radial-gradient(ellipse at 45% 45%,#f1f3e8 0%,#f9f9f4 69%);overflow:hidden;min-height:540px;height:min(66vw,700px);isolation:isolate}.graph-svg{width:100%;height:100%;display:block;touch-action:none;user-select:none;cursor:grab}.graph-svg:active{cursor:grabbing}.graph-cluster{fill:#e7eddd;opacity:.32}.graph-edges path{fill:none;stroke:#afc4b7;stroke-width:1.4;opacity:.65;transition:opacity .22s,stroke .22s;pointer-events:none}.graph-edges path.related{stroke-dasharray:4 6;opacity:.35}.graph-edges path.focused{stroke:#3f8270;stroke-width:2.1;opacity:.95}.graph-node{cursor:pointer;outline:none}.graph-node circle.node-disc{fill:#edf2e9;stroke:#bdcdbd;stroke-width:1.2;transition:fill .2s,stroke .2s,filter .2s}.graph-node.primary circle.node-disc{fill:#dae8d9;stroke:#8eaf96;stroke-width:1.4}.graph-node.placeholder circle.node-disc{fill:#f8f8f0;stroke:#cad5c8;stroke-dasharray:4 4}.graph-node.read circle.node-disc{fill:#d3e7d5;stroke:#669b76;stroke-dasharray:none}.graph-node text{fill:#344f48;font-size:16px;font-family:var(--sans);text-anchor:middle;pointer-events:none;font-weight:500}.graph-node text.node-english{fill:#7b8f7e;font-size:11.5px;font-weight:400}.graph-node .read-check{fill:#4b8a60;font-size:20px;font-weight:600}.graph-node:hover circle.node-disc,.graph-node:focus-visible circle.node-disc,.graph-node.selected circle.node-disc{stroke:#398570;stroke-width:2.8;filter:drop-shadow(0 4px 10px #789a7825)}.graph-node.dim{opacity:.45}.graph-tools{position:absolute;bottom:23px;right:22px;display:flex;background:#fffffa;border:1px solid #dfe6db;border-radius:24px;padding:3px;box-shadow:0 3px 12px #243c3410}.graph-tools button{width:35px;height:35px;border-radius:50%;font-size:20px;line-height:1}.graph-tools button:last-child{font-size:16px}.graph-tools button:hover{background:#e9eee3}.graph-hint{position:absolute;bottom:26px;left:26px;color:#859585;font-size:11px}.map-footer{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-top:16px;color:var(--muted);font-size:11px}.map-legend{display:flex;flex-wrap:wrap;gap:20px}.legend-disc{display:inline-block;width:10px;height:10px;border:1px solid #9eb69e;background:#e8efdf;border-radius:50%;vertical-align:middle;margin-right:6px}.legend-disc.read{background:#d3e7d5;border-color:#669b76}.legend-disc.placeholder{background:transparent;border-style:dashed}.map-footer a{text-decoration:none;color:var(--teal)}
.reader-page{max-width:800px;margin:0 auto;padding:24px 30px 0}.reader-topline{display:flex;align-items:center;justify-content:space-between;gap:15px;font-size:12px;margin:0 0 46px;color:var(--muted)}.reader-back{text-decoration:none;color:var(--teal);display:inline-flex;align-items:center;gap:9px}.reader-back:hover{text-decoration:underline}.reader-tools{display:flex;gap:18px;align-items:center}.reader-tools button{font-size:12px;padding:0}.reader-tools button:hover{color:var(--teal)}.reader-heading .eyebrow{margin-bottom:14px}.reader-heading h1{font-family:var(--serif);font-size:clamp(34px,4vw,47px);font-weight:500;line-height:1.4;letter-spacing:.7px;margin:0 0 9px}.reader-english{color:#779086;font-size:16px;margin:0 0 26px;font-weight:400}.reader-objective{font-size:14px;line-height:1.8;color:var(--muted);margin:0;padding:18px 0 29px;border-bottom:1px solid var(--line)}.reader-objective span{font-size:10px;letter-spacing:1.4px;display:block;margin-bottom:6px;color:#729184}.prerequisite-strip{display:flex;flex-wrap:wrap;align-items:center;gap:6px 13px;font-size:11px;color:var(--muted);margin:16px 0 0}.prerequisite-strip a{color:var(--teal);text-decoration:none}.prerequisite-strip a:hover{text-decoration:underline}.lesson-content{padding-top:33px;font-size:16px;line-height:1.95;overflow-wrap:anywhere}.lesson-content>h1:first-child{display:none}.lesson-content h1,.lesson-content h2,.lesson-content h3,.lesson-content h4{font-family:var(--serif);line-height:1.5;scroll-margin-top:35px}.lesson-content h2{font-size:27px;font-weight:500;margin:52px 0 20px}.lesson-content h2:first-child{margin-top:12px}.lesson-content h3{font-size:21px;font-weight:500;margin:34px 0 14px}.lesson-content p{margin:15px 0 22px}.lesson-content a{color:var(--teal);text-decoration:none;border-bottom:1px solid #bdd3c5;padding-bottom:1px}.lesson-content a:hover{border-color:var(--teal)}.lesson-content a[data-node]{background:linear-gradient(transparent 74%,#dbeadb 74%)}.lesson-content strong{font-weight:600}.lesson-content blockquote{border-left:2px solid #96b6a0;background:#edf2e8;margin:25px 0;padding:9px 24px;color:#506951;border-radius:0 12px 12px 0}.lesson-content blockquote p:last-child{margin-bottom:9px}.lesson-content pre{background:#efefe7;border-radius:12px;padding:20px;overflow:auto;font-size:13px;line-height:1.7}.lesson-content code{font-family:Consolas,"Courier New",monospace;font-size:.86em}.lesson-content :not(pre)>code{background:#ecefe7;border-radius:4px;padding:2px 5px}.lesson-content table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto;margin:27px 0;font-size:14px}.lesson-content td,.lesson-content th{border:1px solid #d9e0d5;padding:9px 13px;white-space:normal}.lesson-content th{background:#eef2e7;font-weight:500}.lesson-content img{max-width:100%;height:auto;border-radius:13px;display:block;margin:30px auto}.lesson-content .math.block,.lesson-content .katex-display{overflow-x:auto;overflow-y:hidden;padding:8px 2px}.lesson-content .math.inline{white-space:normal}.lesson-content .katex{font-size:1.1em}.lesson-content [id]{scroll-margin-top:30px}.lesson-content ul,.lesson-content ol{padding-left:24px}.lesson-content li{padding-left:4px;margin:9px 0}.lesson-media{margin:32px 0 42px}.lesson-media video{width:100%;max-height:470px;background:#17292c;border-radius:18px;display:block}.media-caption{font-size:11px;color:var(--muted);margin-top:9px;display:flex;justify-content:space-between;gap:16px}.media-caption a{font-size:11px;border:0}.resource-section{border-top:1px solid var(--line);margin-top:48px;padding-top:22px}.resource-section h2{font-size:14px;font-weight:500;margin:0 0 14px;font-family:var(--sans)}.resource-list{display:flex;flex-wrap:wrap;gap:9px}.resource-chip{border:1px solid #d8e2d6;background:#fdfdf7;border-radius:22px;padding:8px 14px;font-size:12px;text-decoration:none;display:inline-flex;gap:9px;align-items:center;color:var(--teal)}.resource-chip:hover{border-color:#85aa96}.resource-chip span{font-size:10px;color:var(--muted)}.pdf-viewer{margin-top:18px;width:100%;height:740px;border:1px solid var(--line);border-radius:12px;background:#fff}.references{margin-top:28px;font-size:12px;color:var(--muted)}.references summary{cursor:pointer}.references ul{padding-left:20px}.references a{color:var(--teal);text-decoration:none}.reader-ending{text-align:center;padding:70px 0 60px;margin-top:42px;border-top:1px solid var(--line);color:var(--muted)}.end-symbol{display:block;color:#75a083;margin-bottom:13px;font-size:23px}.reader-ending h2{font-family:var(--serif);font-size:23px;font-weight:400;margin:0 0 8px;color:var(--ink)}.reader-ending p{font-size:12px;margin:0 0 22px}.end-scroll-hint{font-size:11px;margin-top:20px;color:#8b9b8e}.empty-lesson{padding:45px 0 30px}.empty-lesson .empty-disc{width:80px;height:80px;background:#edf1e6;border:1px dashed #b9cbbb;border-radius:50%;display:grid;place-items:center;color:#86a28c;font-size:28px;margin-bottom:24px}.empty-lesson h2{font-family:var(--serif);font-size:28px;font-weight:500;margin:0 0 10px}.empty-lesson p{font-size:14px;color:var(--muted)}.empty-lesson .primary-button{margin-top:12px;font-size:13px}
.writer-dialog{width:min(860px,calc(100% - 24px));max-height:90svh;padding:0;border:1px solid #dce4d7;border-radius:24px;background:var(--paper);color:var(--ink);box-shadow:0 25px 100px #233a3530}.writer-dialog::backdrop{background:#243f3659;backdrop-filter:blur(5px)}#writer-form{padding:32px 38px}.writer-heading{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:15px}.writer-heading .eyebrow{margin-bottom:7px}.writer-heading h2{font-family:var(--serif);font-size:28px;font-weight:500;margin:0}.writer-intro{font-size:12px;color:var(--muted);line-height:1.8;margin:0 0 24px}#writer-form label{display:block;font-size:13px;margin-bottom:17px;font-weight:500}#writer-form label>span{font-size:10px;color:var(--muted);font-weight:400;margin-left:6px}#writer-form label>input,#writer-form label>select,#writer-form label>textarea{margin-top:6px;font-weight:400;font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.relation-fields select{font-size:12px;padding:8px}.relation-fields option{padding:3px 5px;border-radius:4px}#writer-form textarea{font-family:Consolas,"Microsoft YaHei",monospace}.authoring-help,.attachment-fields{font-size:12px;color:var(--muted);margin:8px 0 18px}.authoring-help summary,.attachment-fields summary{cursor:pointer;color:var(--teal);font-size:12px;margin-bottom:14px}.authoring-help p{line-height:1.9}.authoring-help code{background:#edf0e6;border-radius:3px;padding:1px 4px;font-size:11px}.field-hint{font-size:11px;color:var(--muted)}.writer-status{min-height:23px;font-size:12px;color:var(--teal);white-space:pre-line}.writer-status.error{color:#a64836}.writer-footer{display:flex;justify-content:space-between;align-items:center;padding-top:15px;border-top:1px solid var(--line);font-size:13px}
@media(min-width:1500px){.graph-frame{height:700px}}@media(max-width:850px){.site-header{height:78px;padding:0 5%}.brand{font-size:24px}.header-actions{gap:14px}.header-actions span{display:none}.home-hero{min-height:calc(100svh - 78px)}.home-inner{margin-top:-15px}.hero-subtitle{font-size:13px}.map-page{padding:18px 3% 30px}.map-heading{padding:0 3%;display:block}.map-heading h1{font-size:29px}.map-heading h1 span{font-size:12px}.map-progress{margin-top:12px}.graph-frame{height:570px;min-height:0;border-radius:22px}.graph-hint{font-size:10px;left:16px}.map-footer{padding:0 2%}.graph-node text{font-size:18px}.graph-node text.node-english{font-size:12px}.ocean-section{min-height:790px;padding-top:70px}.ocean-world{height:490px}.subject-bubble.active{width:185px;height:185px;left:calc(50% - 92px);top:148px;font-size:25px}.subject-bubble.calculus{left:1%;width:133px;height:133px}.subject-bubble.probability{right:0;width:141px;height:141px}.subject-bubble.geometry{left:7%;width:115px;height:115px}.subject-bubble.discrete{right:4%;width:121px;height:121px}.reader-page{padding:25px 26px 0}.reader-topline{margin-bottom:34px}.lesson-content{font-size:15px}.lesson-content h2{font-size:25px}}
@media(max-width:520px){.quiet-link{font-size:12px}.small-button{padding:7px 11px;font-size:11px}.header-actions{gap:12px}.home-hero{padding-left:22px;padding-right:22px}.home-hero h1{font-size:36px}.hero-subtitle{font-size:12px}.search-form{padding-left:17px}.search-form input{font-size:13px;padding:13px 11px}.search-submit{width:41px;height:41px}.search-shortcuts{gap:3px}.ocean-section{padding:60px 18px 40px;min-height:740px}.ocean-heading h2{font-size:29px}.ocean-world{height:480px}.subject-bubble.active{top:165px;width:165px;height:165px;left:calc(50% - 82px);font-size:22px}.subject-bubble.calculus{top:32px;left:0;width:119px;height:119px;font-size:18px}.subject-bubble.probability{top:57px;right:0;width:126px;height:126px;font-size:18px}.subject-bubble.geometry{bottom:5px;left:0;width:106px;height:106px;font-size:16px}.subject-bubble.discrete{bottom:9px;right:0;width:110px;height:110px;font-size:16px}.subject-bubble small{font-size:10px}.map-heading h1 span{display:block;margin:4px 0 0}.map-description{font-size:12px}.graph-frame{height:560px}.map-legend{gap:11px;font-size:10px}.map-footer{display:block}.map-footer>a{display:block;margin-top:13px}.reader-page{padding-left:22px;padding-right:22px}.reader-tools{gap:12px;font-size:10px}.reader-tools button{font-size:11px}.reader-heading h1{font-size:33px}.reader-english{font-size:14px}.reader-objective{font-size:13px}.lesson-content{font-size:14px}.lesson-content h2{font-size:23px}.lesson-content h3{font-size:19px}.lesson-content .katex{font-size:1.05em}.lesson-content blockquote{padding:6px 17px}.pdf-viewer{height:520px}.reader-ending{padding-bottom:50px}#writer-form{padding:25px 22px}.form-grid{grid-template-columns:1fr;gap:0}.writer-heading h2{font-size:25px}.writer-footer .primary-button{font-size:12px;gap:13px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
.lesson-media video{aspect-ratio:16/9;object-fit:contain}.lesson-content>.bibliography{display:none}
.interactive-figure{width:100%;max-width:100%;overflow:hidden}
.interactive-viewer{display:block;width:100%;height:520px;border:1px solid var(--line);border-radius:18px;background:#fff}
@media(max-width:520px){.interactive-viewer{height:410px;border-radius:13px}}
.graph-tools{top:18px;bottom:auto;right:18px}

/* The ocean and node directories grow from the file-backed subject registry. */
.ocean-world.dynamic-ocean{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:52px 42px;height:auto;min-height:540px;padding:70px 20px 55px}
.dynamic-ocean .subject-bubble{position:relative;inset:auto!important;flex:0 0 172px;width:172px;height:172px;font-size:21px;padding:20px;z-index:1;line-height:1.5}
.dynamic-ocean .subject-bubble:nth-of-type(2n){margin-top:32px}
.dynamic-ocean .subject-bubble span{max-width:140px}
.dynamic-ocean .subject-bubble small{max-width:140px;font-size:10px;line-height:1.4}
.dynamic-ocean .subject-bubble em{font-size:9px;letter-spacing:0;margin-top:9px}
.dynamic-ocean .subject-bubble.active{flex-basis:205px;width:205px;height:205px;font-size:25px}
.dynamic-ocean .subject-bubble:not(.active):hover{transform:translateY(-4px);background:#dfeadc;box-shadow:0 10px 32px #587c5e15}
.dynamic-ocean .subject-bubble.active:after{bottom:24px}
.map-heading-tools{display:flex;flex-direction:column;align-items:flex-end;gap:12px;max-width:330px}
#subject-switch{width:100%;font-size:12px;padding:9px 13px;background:#fffefa;border:1px solid #d8e2d6;border-radius:20px;color:var(--teal)}
.map-directory{margin-top:25px;padding-top:17px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}
.map-directory summary{cursor:pointer;color:var(--teal);padding:4px 0}
#map-filter{margin:16px 0 13px;max-width:420px;font-size:12px;border-radius:22px}
.map-directory-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 15px}
.map-directory-list button{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:13px 15px;border:1px solid #e2e8dc;border-radius:16px;background:#fffefa;color:var(--teal);font-size:13px;overflow-wrap:anywhere}
.map-directory-list button small{font-size:10px;color:var(--muted);margin-top:4px}
.map-directory-list button:hover{background:var(--teal-soft)}
.map-directory-list button[hidden]{display:none}
.graph-node text.node-title-small{font-size:13px}
.graph-node.definition circle.node-disc{fill:#f8f9f1;stroke:#b9ccb9}
.references ol{padding-left:22px}
.references li{margin:16px 0;line-height:1.75;scroll-margin-top:28px;overflow-wrap:anywhere}
.reference-title{font-weight:500;color:var(--ink)}
.reference-locator,.reference-source{margin:5px 0 0;font-size:11px;line-height:1.8}
.reference-source code{font-family:Consolas,monospace;font-size:10px}
.references li:target{background:#edf2e8}
.lesson-media video::cue{font-family:Arial,"Microsoft YaHei",sans-serif;font-size:14px;font-weight:400;font-style:normal;line-height:1.3;color:#fff;background-color:rgba(12,20,25,.85);text-shadow:0 1px 2px #000}
.lesson-media video:fullscreen::cue{font-size:24px}
@media(max-width:520px){.lesson-media video::cue{font-size:10px}}
@media(max-width:850px){.dynamic-ocean .subject-bubble{flex-basis:150px;width:150px;height:150px;font-size:19px}.dynamic-ocean .subject-bubble.active{flex-basis:175px;width:175px;height:175px;font-size:23px}.ocean-world.dynamic-ocean{gap:34px 28px;padding:55px 0 45px}.map-heading-tools{max-width:100%;align-items:flex-start;margin-top:16px}#subject-switch{max-width:360px}.map-directory-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.ocean-world.dynamic-ocean{gap:28px 18px}.dynamic-ocean .subject-bubble{flex-basis:136px;width:136px;height:136px;font-size:17px;padding:16px}.dynamic-ocean .subject-bubble.active{flex-basis:151px;width:151px;height:151px;font-size:20px}.dynamic-ocean .subject-bubble small{font-size:9px}.dynamic-ocean .subject-bubble em{font-size:8px}.dynamic-ocean .subject-bubble.active:after{bottom:10px;font-size:17px}.map-directory-list{grid-template-columns:1fr}.graph-node text.node-title-small{font-size:13px}}

/* Reading and understanding are separate, deliberate progress states. */
.small-button{text-decoration:none}
.search-results{max-height:min(420px,42svh);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;scrollbar-gutter:stable}
.search-count{font-size:10px;color:var(--muted);margin:7px 14px 4px}
.exercise-result .result-arrow{color:#bb6c38}
.graph-node.read circle.node-disc{fill:#e0eaf4;stroke:#789bb8;stroke-dasharray:none}
.graph-node.understood circle.node-disc{fill:#e9e0f6;stroke:#9473bd;stroke-dasharray:none}
.graph-node .read-check{fill:#557b9a;font-size:23px}
.graph-node .understood-check{fill:#7952a1;font-size:20px;font-weight:600}
.legend-disc.read{background:#e0eaf4;border-color:#789bb8}
.legend-disc.understood{background:#e9e0f6;border-color:#9473bd}
.read-dot{background:#789bb8}
.understood-dot{width:8px;height:8px;background:#9473bd;border-radius:50%;display:inline-block;margin-left:7px}
.graph-edges path.contains{stroke:#8c919f;stroke-dasharray:8 4;opacity:.5}
.legend-line{display:inline-block;width:17px;border-top:1px dashed #8c919f;vertical-align:middle;margin-right:6px}
.practice-link{font-size:11px;color:var(--teal);text-decoration:none}
.map-directory-list button.read{border-color:#aabfd1;background:#f0f4f8}
.map-directory-list button.understood{border-color:#bfa7dc;background:#f0eaf8}
.reader-topline{flex-wrap:wrap;align-items:flex-start;row-gap:16px}
.reader-tools{flex-wrap:wrap;gap:8px 12px}
.reader-tools button{padding:5px 10px;border:1px solid var(--line);border-radius:20px;background:#fffefa;white-space:nowrap}
.reader-tools .read-toggle[aria-pressed="true"]{background:#e0eaf4;border-color:#aabfd1;color:#416a8a}
.reader-tools .understood-toggle[aria-pressed="true"]{background:#e9e0f6;border-color:#b79bd4;color:#6d418f}
.reader-workspace{font-size:11px;text-decoration:none;color:var(--muted);padding:5px 0}
.lesson-progress{font-size:11px;color:var(--muted);margin:-14px 0 23px}
.lesson-progress.read{color:#557b9a}.lesson-progress.understood{color:#7952a1}
.lesson-components{margin-top:35px;border-top:1px solid var(--line);padding-top:19px;font-size:12px;color:var(--muted)}
.lesson-components summary{color:var(--teal);cursor:pointer}
.lesson-components>div{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px}
.lesson-components a{padding:10px 15px;border:1px solid var(--line);border-radius:16px;text-decoration:none;color:var(--teal);background:#fffefa}
.lesson-components small{display:block;font-size:10px;color:var(--muted)}
.lesson-practice{border-top:1px solid var(--line);margin-top:35px;padding-top:20px;display:flex;align-items:center;justify-content:space-between;gap:20px}
.lesson-practice h2{font-size:13px;font-weight:500;margin:0}.lesson-practice p{font-size:11px;color:var(--muted);margin:5px 0 0}
.lesson-practice>a{font-size:12px;color:#a66536;text-decoration:none;white-space:nowrap}

/* Exercises live in their own collection. Orange links mean direct use, never prerequisite order. */
.exercise-page,.workspace-page{max-width:1160px;margin:0 auto;padding:40px 35px 70px}
.collection-heading{margin-bottom:30px}.collection-heading .eyebrow{margin-bottom:12px}
.collection-heading h1{font-family:var(--serif);font-size:38px;font-weight:500;line-height:1.4;margin:0}
.collection-heading h1>span{font-family:var(--sans);font-size:15px;color:var(--muted);margin-left:13px;font-weight:400}
.collection-heading>p:last-child{font-size:13px;color:var(--muted);margin:12px 0 0}
.collection-filters{display:flex;gap:15px;max-width:850px}.collection-filters select{max-width:370px;font-size:12px;border-radius:24px}.collection-filters input{font-size:12px;border-radius:24px}
.collection-count{font-size:11px;color:var(--muted);margin:20px 0 16px}
.concept-filter{font-size:12px;color:var(--muted);margin-top:17px}.concept-filter a{color:var(--teal);text-decoration:none;margin-right:12px}
.exercise-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px;align-items:start}
.exercise-card{min-width:0;border:1px solid #e4dfd3;border-radius:25px;background:#fffdf8;padding:25px}
.exercise-card-heading .eyebrow{font-size:9px;letter-spacing:1px;color:#a77a55;margin-bottom:10px}
.exercise-card h2{font-family:var(--serif);font-size:23px;font-weight:500;line-height:1.5;margin:0 0 7px}
.exercise-card h2 button{padding:0;text-align:left;font:inherit;overflow-wrap:anywhere}
.exercise-card h2 button:hover{color:#a66536}
.exercise-english{font-size:12px;color:var(--muted);margin:0}.exercise-objective{font-size:12px;color:var(--muted);line-height:1.8;margin:13px 0 0}
.exercise-connections{margin:21px 0 15px;padding-top:12px;overflow-wrap:anywhere}
.connection-label{color:#9e6d43;font-size:10px;margin:0 0 11px;display:flex;align-items:center;gap:7px}
.connection-label i{display:inline-block;width:16px;border-top:2px solid #d18e53}
.requirement-nodes{display:flex;flex-direction:column;gap:12px;position:relative;border-left:1px solid #dda56f;padding:0 0 0 23px;margin:0 10px}
.requirement-node{width:100%;min-width:0;position:relative;padding:11px 12px;display:block;text-align:left;border:1px solid #e1bd96;border-radius:17px;background:#fbf5eb;color:var(--ink);text-decoration:none;font-size:12px;line-height:1.6}
.requirement-node:after{content:"";width:23px;border-top:1px solid #dda56f;position:absolute;right:100%;top:50%}
.requirement-node:hover{border-color:#bb793e;background:#f7eddd}
.requirement-node small{font-size:9px;color:var(--muted);display:block;margin-top:3px;line-height:1.5}
.requirement-node em{font-style:normal;font-size:9px;color:#8a8a7b;display:block;margin-top:4px}
.requirement-node.read{background:#eef3f8}.requirement-node.read em{color:#557b9a}
.requirement-node.understood{background:#f0eaf8}.requirement-node.understood em{color:#7952a1}
.requirement-target{text-align:left;position:relative;padding-top:21px;margin-left:10px}
.requirement-target:before{content:"";height:21px;border-left:1px solid #dda56f;position:absolute;left:0;top:0}
.requirement-target>span{display:inline-block;padding:5px 13px;border:1px solid #d4a57b;border-radius:15px;background:#f4e5d3;color:#966437;font-size:10px}
.exercise-no-requirements{font-size:11px;color:var(--muted);margin:23px 0}
.exercise-open{display:flex;justify-content:space-between;align-items:center;font-size:12px;text-decoration:none;color:#a66536;border-top:1px solid #eee3d3;margin-top:22px;padding-top:17px}
.exercise-open span{font-size:17px}
.exercise-empty{font-size:13px;color:var(--muted);padding:30px 0}
.collection-back{font-size:12px;color:var(--teal);text-decoration:none;display:inline-block;margin-top:35px}
.exercise-reader .exercise-connections{border-top:1px solid var(--line);padding-top:15px;margin-top:22px}
.exercise-reader .requirement-node{max-width:none}
.workspace-page{max-width:860px}.workspace-intro{padding:25px 30px;border:1px solid var(--line);border-radius:22px;background:#fffefa}
.workspace-intro h2,.workspace-steps h2{font-size:16px;font-weight:500;margin:0 0 10px}
.workspace-intro p,.workspace-steps p{font-size:13px;line-height:1.95;color:var(--muted);margin:0 0 13px}
.workspace-page code{font-family:Consolas,"Microsoft YaHei",monospace;font-size:.92em;overflow-wrap:anywhere}
.workspace-path{display:block;margin:17px 0 12px;font-size:12px!important;color:var(--teal)}
.workspace-context{font-size:12px;border-left:2px solid #a8c3af;padding-left:16px;margin-bottom:23px;color:var(--muted)}
.workspace-steps{margin:33px 0 0;padding-left:23px;color:var(--teal)}.workspace-steps li{padding:0 0 21px 10px}.workspace-help{font-size:11px;color:var(--muted)}
@media(max-width:850px){.header-actions{gap:16px}.exercise-page,.workspace-page{padding:28px 26px 50px}.exercise-grid{grid-template-columns:1fr}.collection-heading h1{font-size:32px}}
@media(max-width:520px){.header-actions{gap:12px}.site-header{padding:0 5%}.brand{font-size:22px;gap:6px}.brand svg{width:25px;height:25px}.small-button{padding:7px 10px}.header-actions .quiet-link{font-size:11px}.exercise-page,.workspace-page{padding:25px 22px 45px}.collection-heading h1>span{display:block;font-size:13px;margin:5px 0 0}.collection-filters{flex-direction:column;gap:10px}.collection-filters select{max-width:none}.exercise-card{padding:21px 18px}.exercise-card h2{font-size:21px}.reader-topline{margin-bottom:28px}.reader-tools{gap:6px}.reader-tools button{font-size:10px;padding:5px 9px}.reader-workspace{font-size:10px}.graph-hint{max-width:calc(100% - 34px);font-size:9px;bottom:18px}.map-progress{font-size:11px}.lesson-practice{align-items:flex-start;gap:12px;flex-direction:column}.workspace-intro{padding:21px 20px}.workspace-steps{padding-left:19px}.search-results{left:0;right:0}}

/* A knowledge node is stable; its articles are selectable reading material. */
.article-directory{margin:27px 0 0;border:1px solid var(--line);border-radius:18px;background:#fffefa;padding:13px 17px;font-size:12px;color:var(--muted)}
.article-directory>summary{cursor:pointer;color:var(--teal)}.article-directory>summary>span{float:right;color:var(--muted);font-size:10px;margin-left:12px}
.article-directory-body{padding-top:15px}.article-directory-label{font-size:10px;color:var(--muted);margin:7px 0 10px;letter-spacing:.4px}
.article-current-list{padding-left:20px;margin:0 0 22px}.article-current-list li{padding:7px 0}.article-current-list a{text-decoration:none;color:var(--teal)}
.article-current-list small,.other-articles small{display:block;font-size:10px;color:var(--muted)}.article-current-list li>span{font-size:10px;color:#557b9a}
.other-articles{border-top:1px solid var(--line);padding-top:15px}.other-articles h2{font-family:var(--sans);font-size:11px;font-weight:500;margin:0 0 10px;color:var(--ink)}
.other-articles>p{font-size:11px;margin:0 0 14px;color:var(--muted)}.other-articles ul{margin:0;padding:0;list-style:none}
.other-articles li{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 0}.other-articles li>span{font-size:10px;white-space:nowrap;color:var(--muted)}
.other-articles button{text-align:left;padding:0;font-size:12px;color:var(--teal)}
.article-selection{border-top:1px solid var(--line);margin-top:17px;padding-top:15px}.article-selection>summary{color:var(--teal);font-size:11px;cursor:pointer}
.article-selection>p{font-size:11px;line-height:1.8;margin:13px 0}.article-choice-list{display:flex;flex-direction:column;gap:10px}
.article-choice-list label{display:flex;gap:11px;align-items:flex-start;cursor:pointer;color:var(--ink)}.article-choice-list input{width:16px;height:16px;flex:0 0 16px;padding:0;margin:3px 0 0;accent-color:var(--teal)}
.article-choice-list small{display:block;font-size:10px;color:var(--muted)}.article-selection .article-directory-label{margin-top:22px}
.article-selection-order{padding-left:20px;margin:10px 0 20px}.article-selection-order li{padding:6px 0;display:flex;justify-content:space-between;gap:12px;align-items:center}
.article-selection-order li>span{flex:1;font-size:11px;color:var(--ink)}.article-selection-order li>div{white-space:nowrap}
.article-selection-order button{height:27px;width:29px;border:1px solid var(--line);border-radius:50%;margin-left:4px;font-size:12px;color:var(--teal)}.article-selection-order button:disabled{opacity:.3;cursor:default}
.article-selection-actions{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.article-selection-actions .text-button{font-size:11px}
.article-selection-status{min-height:17px;font-size:10px;color:#a26538;margin:11px 0 0}
.reader-article{scroll-margin-top:30px}.reader-article+.reader-article{border-top:1px solid var(--line);margin-top:52px;padding-top:36px}
.article-heading{position:relative;margin:4px 0 25px;padding-bottom:18px;border-bottom:1px solid var(--line)}
.article-heading>p:first-child{font-size:10px;color:var(--muted);letter-spacing:1.1px;margin:0 0 8px}.article-heading h2{font-size:26px!important;margin:0!important;line-height:1.5}
.article-heading .article-english{font-size:12px;color:var(--muted);margin:7px 0 13px}.article-read-toggle{border:1px solid var(--line);border-radius:20px;padding:5px 10px;font-size:10px;line-height:1.5;background:#fffefa;color:var(--muted)}
.article-read-toggle[aria-pressed="true"]{background:#e0eaf4;border-color:#aabfd1;color:#416a8a}.article-content>h1:first-child{display:none}
.reader-article .references{font-size:11px}.reader-article .references p{margin:4px 0 0}
.route-reading-context{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;font-size:10px;margin:-13px 0 27px;color:var(--muted)}
.route-reading-context a{text-decoration:none;color:var(--teal);font-size:11px}.route-reading-context button{font-size:10px;padding:0;color:var(--teal);margin-left:auto}
.routes-page{max-width:1040px;margin:0 auto;padding:40px 35px 70px}.route-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
.route-card{padding:25px;border:1px solid var(--line);border-radius:23px;background:#fffefa;min-width:0}.route-card h2{font-family:var(--serif);font-size:24px;font-weight:500;line-height:1.5;margin:0 0 8px}
.route-card h2 a{text-decoration:none}.route-card>p{font-size:12px;color:var(--muted);line-height:1.8}.route-card .route-english{font-size:11px;margin:0 0 17px}.route-count{font-size:10px!important;margin:21px 0 18px}
.route-open{font-size:12px;color:var(--teal);text-decoration:none}.route-steps{margin-top:18px;padding:15px 18px;border:1px solid var(--line);border-radius:18px;background:#fffefa;font-size:12px;color:var(--muted)}
.route-steps>summary{cursor:pointer;color:var(--teal)}.route-steps ol{list-style:none;margin:13px 0 0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 20px}
.route-steps button{display:flex;text-align:left;align-items:center;gap:12px;width:100%;padding:10px 0;font-size:12px;color:var(--ink)}
.route-steps button>span:first-child{font-size:10px;color:#9daea4}.route-steps button>span:nth-child(2){flex:1}.route-steps small{display:block;font-size:10px;color:var(--muted)}.route-steps em{font-size:10px;font-style:normal;color:var(--muted);white-space:nowrap}
#learning-route-switch{width:100%;font-size:12px;padding:9px 13px;background:#fffefa;border:1px solid #d8e2d6;border-radius:20px;color:var(--teal)}
@media(max-width:850px){.routes-page{padding:28px 26px 50px}.route-list{grid-template-columns:1fr}.route-steps ol{grid-template-columns:1fr}}
@media(max-width:520px){.header-actions{gap:9px}.header-actions .quiet-link{font-size:10px}.small-button{font-size:10px;padding:7px 9px}.routes-page{padding:25px 22px 45px}.article-directory{padding:12px 13px;font-size:11px}.article-directory>summary>span{float:none;display:block;margin:3px 0 0 14px}.article-heading h2{font-size:23px!important}.route-reading-context{gap:8px 12px}.article-selection-actions{gap:12px}.route-card{padding:22px}.route-card h2{font-size:22px}}
.graph-frame.hierarchical-graph{height:auto;min-height:0;overflow:hidden}
.hierarchical-graph .graph-svg{height:auto;touch-action:pan-y}
.hierarchical-graph .graph-hint{position:static;display:block;padding:15px 24px;border-top:1px solid #e2e7dc}
.hierarchical-graph .graph-tools{top:18px;bottom:auto;right:18px;height:43px}
.site-copyright{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 18px;margin:0 auto;padding:20px 22px 26px;border-top:1px solid var(--line);color:var(--muted);font-size:10px;line-height:1.8}.site-copyright a{color:var(--teal);text-underline-offset:4px}.site-copyright a:focus-visible{outline:2px solid var(--teal);outline-offset:4px}
.lesson-subjects{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 0;font-size:11px;align-items:center}.lesson-subjects>span{flex-basis:100%;color:var(--muted);margin-bottom:2px}.lesson-subjects>a{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;border:1px solid #d6e2db;border-radius:16px;padding:7px 11px;text-decoration:none;color:var(--teal);background:#f7faf5}.lesson-subjects>a:hover,.lesson-subjects>a[aria-current]{border-color:#8dab9b;background:#edf4eb}.lesson-subjects small{font-size:10px;color:var(--muted)}.lesson-subjects em{font-size:9px;font-style:normal;color:#829288}
