:root{--paper:#f3efe6;--sheet:#fffdf8;--ink:#1d2928;--muted:#6f7771;--teal:#0b666d;--teal-soft:#dceceb;--red:#b54132;--gold:#c69b52;--line:#d9d4c9;--shadow:0 18px 50px rgba(38,45,42,.09);--reader-size:17px;--rail:300px;--notes:340px}
[data-theme="night"]{--paper:#111817;--sheet:#19211f;--ink:#e8e7df;--muted:#9ba39e;--teal:#65c4c2;--teal-soft:#203c3a;--red:#ee8779;--gold:#d6b470;--line:#34413e;--shadow:0 20px 60px rgba(0,0,0,.3)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"LXGW WenKai Screen","霞鹜文楷","STKaiti","Microsoft YaHei",serif;line-height:1.8}.progress-line{position:fixed;z-index:100;left:0;top:0;height:3px;width:0;background:linear-gradient(90deg,var(--red),var(--gold));transition:width .12s linear}.topbar{position:fixed;z-index:60;inset:3px 0 auto;height:60px;display:flex;align-items:center;gap:16px;padding:0 22px;background:color-mix(in srgb,var(--sheet) 90%,transparent);border-bottom:1px solid var(--line);backdrop-filter:blur(18px)}
button,input,textarea{font:inherit}.icon-button,.action-button,.course-switcher,.rail-footer button,.resume-button,.dialog-actions button,.primary-button,.notes-list-header button{border:0;background:transparent;color:inherit;cursor:pointer}.icon-button{min-width:34px;height:34px;border-radius:9px}.icon-button:hover{background:var(--teal-soft)}.wordmark{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;font-weight:800;letter-spacing:.02em}.seal{display:grid;place-items:center;width:32px;height:32px;background:var(--red);color:#fff;border-radius:5px;box-shadow:inset 0 0 0 2px rgba(255,255,255,.25)}.course-switcher{display:flex;gap:8px;align-items:center;max-width:260px;padding:7px 11px;border:1px solid var(--line);border-radius:9px}.course-switcher span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.current-location{flex:1;text-align:center;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-actions{display:flex;align-items:center;gap:5px}.action-button{padding:7px 12px;border:1px solid var(--line);border-radius:9px}.notes-button span{display:inline-grid;place-items:center;min-width:20px;height:20px;margin-left:5px;border-radius:999px;background:var(--teal-soft);font-size:12px}.sync-dot{display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:#aaa}.sync-dot.ok{background:#3ca66b}.sync-dot.busy{background:var(--gold);animation:pulse 1s infinite}
.app-shell{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);min-height:100vh;padding-top:63px}.left-rail{position:fixed;z-index:30;left:0;top:63px;bottom:0;width:var(--rail);display:flex;flex-direction:column;padding:22px 18px 14px;background:var(--sheet);border-right:1px solid var(--line)}.course-card{padding:5px 8px 19px;border-bottom:1px solid var(--line)}.eyebrow{margin:0 0 5px;color:var(--red);font:700 11px/1.3 ui-monospace,monospace;letter-spacing:.14em}.course-card h1{font-size:21px;line-height:1.4;margin:4px 0}.course-card>p:not(.eyebrow){margin:3px 0;color:var(--muted);font-size:13px}.progress-copy{display:flex;align-items:baseline;gap:10px;margin-top:15px}.progress-copy strong{font-size:24px;color:var(--teal)}.progress-copy span{font-size:12px;color:var(--muted)}.meter{height:5px;margin-top:6px;background:var(--teal-soft);border-radius:9px;overflow:hidden}.meter span{display:block;height:100%;width:0;background:var(--teal);transition:width .25s}.resume-button{padding:7px 0;color:var(--red);font-size:13px}.search-box{display:flex;align-items:center;gap:8px;margin:16px 4px 8px;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--paper)}.search-box input{min-width:0;width:100%;border:0;outline:0;background:transparent;color:var(--ink);font-size:13px}.toc{flex:1;overflow:auto;padding:5px 4px 28px;font-size:13px;scrollbar-width:thin}.toc a{display:block;padding:5px 8px;border-radius:6px;color:var(--muted);text-decoration:none;line-height:1.45}.toc a:hover,.toc a.active{background:var(--teal-soft);color:var(--teal)}.toc a.active{font-weight:800}.toc .level-2{padding-left:20px}.toc .level-3{padding-left:34px}.toc .level-4{padding-left:48px;font-size:12px}.toc .hidden{display:none}.rail-footer{display:flex;border-top:1px solid var(--line);padding-top:10px}.rail-footer button{flex:1;padding:7px;color:var(--muted);font-size:12px}.rail-footer button:hover{color:var(--teal)}
.reading-stage{grid-column:2;min-width:0;width:min(960px,calc(100% - 56px));margin:0 auto;padding:42px 0 100px}.course-hero{position:relative;display:flex;justify-content:space-between;gap:30px;padding:42px 48px;margin-bottom:24px;background:var(--teal);color:#f5faf7;border-radius:3px 3px 22px 3px;box-shadow:var(--shadow);overflow:hidden}.course-hero:after{content:"";position:absolute;width:270px;height:270px;right:-100px;top:-150px;border:1px solid rgba(255,255,255,.25);border-radius:50%;box-shadow:0 0 0 35px rgba(255,255,255,.04),0 0 0 70px rgba(255,255,255,.03)}.course-hero .eyebrow{color:#eac688}.course-hero h2{position:relative;z-index:1;margin:3px 0 8px;font-size:34px;line-height:1.25}.course-hero p{margin:0;color:rgba(255,255,255,.75)}.hero-stats{position:relative;z-index:1;display:flex;align-items:end;gap:22px}.hero-stats span{display:flex;flex-direction:column;color:rgba(255,255,255,.62);font-size:11px;white-space:nowrap}.hero-stats strong{color:#fff;font-size:24px}.reader-content{font-size:var(--reader-size)}.reader-content .page{position:relative;margin:0 0 22px;padding:48px 58px;background:var(--sheet);border:1px solid var(--line);border-radius:3px 16px 16px 16px;box-shadow:var(--shadow);scroll-margin-top:80px}.reader-content .page-no{position:absolute;right:20px;top:13px;color:var(--muted);font:11px/1.4 ui-monospace,monospace}.reader-content h1,.reader-content h2,.reader-content h3,.reader-content h4{font-family:"Microsoft YaHei","PingFang SC",sans-serif;scroll-margin-top:82px;line-height:1.45;overflow-wrap:anywhere}.reader-content h1{margin:1.25em 0 .65em;color:var(--teal);font-size:29px}.reader-content h2{margin:1.2em 0 .55em;color:var(--red);font-size:24px}.reader-content h3{margin:1.15em 0 .5em;font-size:20px}.reader-content h4{font-size:17px}.reader-content p{text-align:justify;overflow-wrap:anywhere}.reader-content .back{display:none}.reader-content figure{margin:25px auto;text-align:center}.reader-content figure img{max-width:100%;height:auto;border:1px solid var(--line);border-radius:8px;cursor:zoom-in;background:#fff}.reader-content figcaption,.reader-content caption{color:var(--muted);font-size:12px}.table-wrap{overflow:auto;margin:24px 0}.reader-content table{width:100%;border-collapse:collapse;font-size:.9em}.reader-content th,.reader-content td{padding:10px;border:1px solid var(--line)}.reader-content th{background:var(--teal-soft);color:var(--teal)}
.reader-content strong{font-weight:800;color:color-mix(in srgb,var(--ink) 90%,var(--teal))}.reader-content code{padding:.08em .34em;border:1px solid color-mix(in srgb,var(--line) 78%,transparent);border-radius:4px;background:color-mix(in srgb,var(--paper) 75%,#dfe4e3);font-family:"Cascadia Mono","SFMono-Regular",Consolas,monospace;font-size:.88em}.reader-content mark{padding:.06em .16em;border-radius:3px;color:inherit;-webkit-box-decoration-break:clone;box-decoration-break:clone}.highlight-grey{background:#ececea}.highlight-gold{background:#f6df92}.highlight-rose{background:#f6c5c1}.highlight-mint{background:#cde9dd}[data-theme="night"] .reader-content mark{color:#17201e}.ink-color{color:var(--ink-color)}.pdf-list-item{position:relative;margin-left:1.8em;padding-left:.25em;text-indent:-1.8em}.pdf-formula{margin:1.1em auto!important;padding:.7em 1em;border-left:3px solid var(--gold);background:var(--paper);font-family:"Cascadia Mono","SFMono-Regular",Consolas,monospace;text-align:left!important;overflow-x:auto}.pdf-subhead{padding-left:.7em;border-left:3px solid var(--gold);color:var(--muted)!important}.bookmark-fallback{opacity:.75}
.study-layer{margin:18px 0 28px;padding:18px 20px;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));border-radius:4px 14px 14px 14px;background:linear-gradient(135deg,color-mix(in srgb,var(--sheet) 82%,#f5dfae),var(--sheet));box-shadow:inset 4px 0 var(--gold)}.study-layer[hidden]{display:none}.study-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}.study-head strong{color:var(--red)}.importance{padding:2px 7px;border-radius:999px;background:var(--red);color:#fff;font:700 10px/1.6 ui-monospace,monospace}.exam-tags{display:flex;flex-wrap:wrap;gap:5px;margin-left:auto}.exam-tags span{padding:2px 7px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:10px}.study-layer ul{margin:.4em 0;padding-left:1.3em}.study-layer p{margin:.55em 0;text-align:left}.study-layer .pitfall{color:var(--red)}.study-layer .self-test{padding:9px 11px;background:color-mix(in srgb,var(--teal-soft) 65%,transparent);border-radius:7px}.master-button{border:1px solid var(--teal);border-radius:7px;background:transparent;color:var(--teal);padding:6px 10px;cursor:pointer}.master-button.done{background:var(--teal);color:#fff}
.notes-rail{position:fixed;z-index:45;right:0;top:63px;bottom:0;width:var(--notes);display:flex;flex-direction:column;padding:24px;background:var(--sheet);border-left:1px solid var(--line);box-shadow:-24px 0 60px rgba(20,30,28,.08);transform:translateX(105%);transition:transform .25s ease}.notes-rail.open{transform:none}.notes-rail header{display:flex;justify-content:space-between;align-items:start}.notes-rail h2{margin:0;font-size:24px}.note-context{display:flex;flex-direction:column;margin:22px 0 10px;padding:11px 13px;border-left:3px solid var(--gold);background:var(--paper)}.note-context span{font-size:11px;color:var(--muted)}.note-context strong{font-size:14px}.notes-rail textarea{min-height:190px;resize:vertical;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);outline:0;line-height:1.7}.notes-rail textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-soft)}.note-status{margin:6px 0 18px;text-align:right;color:var(--muted);font-size:11px}.notes-list-header{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:7px;font-size:12px}.notes-list{overflow:auto}.note-item{padding:12px 2px;border-bottom:1px solid var(--line);cursor:pointer}.note-item strong{display:block;color:var(--teal);font-size:13px}.note-item p{margin:3px 0;color:var(--muted);font-size:12px;line-height:1.5}.empty-note{color:var(--muted);font-size:13px;text-align:center;padding:30px 0}
.atlas-dialog{width:min(620px,calc(100% - 24px));padding:0;border:0;border-radius:18px;background:transparent;color:var(--ink)}.atlas-dialog::backdrop{background:rgba(10,18,17,.68);backdrop-filter:blur(6px)}.dialog-card{position:relative;padding:34px;background:var(--sheet);border:1px solid var(--line);border-radius:18px;box-shadow:0 30px 90px rgba(0,0,0,.3)}.dialog-card h2{margin:4px 0;font-size:28px}.dialog-close{position:absolute;right:18px;top:16px;border:0;background:transparent;color:var(--muted);font-size:25px;cursor:pointer}.dialog-lead,.privacy-note{color:var(--muted)}.course-library{display:grid;gap:10px;margin:22px 0}.library-item{display:flex;justify-content:space-between;align-items:center;padding:13px 15px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}.library-item strong{display:block}.library-item span{color:var(--muted);font-size:12px}.library-item button{border:0;background:var(--teal);color:#fff;border-radius:7px;padding:7px 11px;cursor:pointer}.dialog-actions{display:flex;flex-wrap:wrap;gap:9px}.dialog-actions button,.primary-button{display:inline-flex;align-items:center;padding:9px 14px;border:1px solid var(--line);border-radius:8px;background:var(--paper);cursor:pointer}.dialog-actions .primary-button,.primary-button{background:var(--teal);color:#fff;border-color:var(--teal)}.privacy-note{font-size:12px;margin-bottom:0}.field{display:flex;flex-direction:column;gap:6px;margin:20px 0}.field span{font-size:12px;color:var(--muted)}.field input{padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink)}.sync-status{margin-top:16px;padding:10px 12px;background:var(--paper);border-radius:8px;color:var(--muted);font-size:13px}
.toast-stack{position:fixed;z-index:120;right:24px;bottom:24px;display:grid;gap:9px}.toast{min-width:260px;max-width:380px;padding:12px 15px;background:var(--ink);color:var(--sheet);border-left:4px solid var(--gold);border-radius:7px;box-shadow:var(--shadow);animation:toast-in .22s ease}.toast.error{border-color:var(--red)}@keyframes toast-in{from{opacity:0;transform:translateY(8px)}}.image-viewer{display:none;position:fixed;z-index:110;inset:0;align-items:center;justify-content:center;padding:30px;background:rgba(0,0,0,.9)}.image-viewer.open{display:flex}.image-viewer img{max-width:96vw;max-height:94vh;object-fit:contain;background:#fff}.image-viewer button{position:absolute;right:20px;top:15px;border:0;background:transparent;color:#fff;font-size:34px;cursor:pointer}.loading-state{display:grid;place-items:center;min-height:40vh;color:var(--muted)}.loading-state span{width:34px;height:34px;border:3px solid var(--line);border-top-color:var(--teal);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.mobile-only{display:none}
:root{--reader-line:1.8;--reader-width:960px}.reading-stage{width:min(var(--reader-width),calc(100% - 56px))}.reader-content{line-height:var(--reader-line)}[data-font="serif"] .reader-content{font-family:"Noto Serif SC","Source Han Serif SC","Songti SC",SimSun,serif}[data-font="sans"] .reader-content{font-family:"Noto Sans SC","Source Han Sans SC","Microsoft YaHei","PingFang SC",sans-serif}[data-font="kai"] .reader-content{font-family:"LXGW WenKai Screen","霞鹜文楷","STKaiti",KaiTi,serif}.font-choices{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:22px 0}.font-choices label{display:flex;flex-direction:column;gap:3px;padding:14px;border:1px solid var(--line);border-radius:10px;background:var(--paper);cursor:pointer}.font-choices label:has(input:checked){border-color:var(--teal);box-shadow:0 0 0 3px var(--teal-soft)}.font-choices input{position:absolute;opacity:0}.font-choices strong{font-size:17px}.font-choices span{color:var(--muted);font-size:11px}.serif-sample{font-family:"Songti SC",SimSun,serif}.sans-sample{font-family:"Microsoft YaHei","PingFang SC",sans-serif}.kai-sample{font-family:"LXGW WenKai Screen","STKaiti",KaiTi,serif}.range-field{display:grid;gap:6px;margin:18px 0}.range-field span{display:flex;justify-content:space-between;color:var(--muted);font-size:13px}.range-field input{width:100%;accent-color:var(--teal)}
@media(min-width:1280px){body.notes-open .reading-stage{transform:translateX(calc(var(--notes) / -2));transition:transform .25s ease}}
@media(max-width:850px){.mobile-only{display:block}.wordmark>span:last-child,.current-location{display:none}.topbar{padding:0 12px;gap:8px}.course-switcher{flex:1;max-width:none;min-width:0}.top-actions{position:fixed;z-index:70;left:12px;right:12px;bottom:10px;justify-content:space-around;padding:6px;background:color-mix(in srgb,var(--sheet) 92%,transparent);border:1px solid var(--line);border-radius:14px;box-shadow:0 12px 40px rgba(20,30,28,.2);backdrop-filter:blur(16px)}.top-actions .icon-button{display:block}.top-actions .action-button{flex:1}.app-shell{display:block}.left-rail{transform:translateX(-105%);transition:transform .25s ease;top:63px;width:min(340px,88vw);box-shadow:20px 0 60px rgba(0,0,0,.2)}.left-rail.open{transform:none}.reading-stage{width:auto;margin:0;padding:24px 12px 100px}.course-hero{display:block;padding:32px 26px}.course-hero h2{font-size:28px}.hero-stats{margin-top:22px}.reader-content .page{padding:38px 24px}.reader-content h1{font-size:24px}.reader-content h2{font-size:21px}.reader-content h3{font-size:18px}.notes-rail{top:0;width:min(380px,94vw);z-index:90}.toast-stack{left:12px;right:12px;bottom:78px}.toast{min-width:0;max-width:none}.notes-button{padding:7px 9px}}
@media print{.topbar,.left-rail,.notes-rail,.progress-line,.toast-stack{display:none!important}.app-shell{display:block;padding:0}.reading-stage{width:auto;padding:0}.course-hero{box-shadow:none}.reader-content .page{box-shadow:none;border:0;break-before:page}}
@media(max-width:850px){.topbar{backdrop-filter:none}}
