
:root{--bg:#eae5db;--paper:#fffdf7;--ink:#282723;--muted:#6b645c;--line:#e2d9c9;--accent:#623f83;--accent2:#a16e34;--soft:#f1eaf6;--nav:#211c2c;--navtext:#e4ddeb;--good:#176747;--bad:#aa343e;--size:18px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:system-ui,sans-serif}body.dark{--bg:#14141c;--paper:#22212b;--ink:#eee9e3;--muted:#b8b1c0;--line:#40394d;--accent:#d3b5ff;--accent2:#e6bc79;--soft:#342943;--good:#75d6aa;--bad:#ff9c9c}button,input,textarea,select{font:inherit}button{cursor:pointer}a{color:var(--accent)}.layout{display:grid;grid-template-columns:292px minmax(0,1fr);min-height:100vh}.sidebar{background:var(--nav);color:var(--navtext);position:sticky;top:0;height:100vh;overflow:auto;padding:24px 15px}.brand{padding:0 10px 20px;border-bottom:1px solid #484052;font-family:Georgia,serif;font-size:23px;color:#f2e3c7}.brand small{display:block;font:10px system-ui;letter-spacing:2.1px;text-transform:uppercase;color:#c7a8e7;margin-top:9px}.navbutton{background:none;color:inherit;border:0;width:100%;text-align:left;padding:9px 10px;border-radius:7px;font-size:13px;line-height:1.4}.navbutton:hover,.navbutton.active{background:#47375c;color:#fff}.group{font-size:10px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;color:#c3a4e7;margin:19px 10px 6px}.navbutton .check{float:right;color:#a8dfbb}.search{width:100%;border:1px solid #62556e;border-radius:7px;background:#30283c;color:white;padding:9px;margin-top:12px;font-size:13px}.main{min-width:0}.toolbar{position:sticky;top:0;z-index:5;background:var(--paper);border-bottom:1px solid var(--line);display:flex;gap:7px;align-items:center;justify-content:space-between;padding:10px 18px}.toolbar button,.smallbtn{border:1px solid var(--line);color:var(--ink);background:var(--paper);border-radius:7px;padding:7px 10px;font-size:13px}.toolbar .tools{display:flex;gap:5px;flex-wrap:wrap}.progress{height:4px;background:var(--line)}.progress>div{height:100%;background:var(--accent);transition:width .2s}.book{max-width:950px;margin:27px auto 45px;padding:clamp(20px,5vw,64px);background:var(--paper);border:1px solid var(--line);box-shadow:0 12px 40px #0000000c;border-radius:4px;min-height:80vh}.book h1,.book h2,.book h3{font-family:Georgia,'Times New Roman',serif;line-height:1.18}.book h1{font-size:clamp(31px,5vw,52px);margin:13px 0 20px;font-weight:500;letter-spacing:-1px}.book h2{font-size:28px;margin:36px 0 14px;color:var(--accent)}.book h3{font-size:21px;margin:20px 0 10px}.book p,.book li{font-size:var(--size);line-height:1.8}.book p{margin:0 0 17px}.eyebrow{font-size:11px;color:var(--accent2);text-transform:uppercase;letter-spacing:2.4px;font-weight:800}.chapterline{border-bottom:1px solid var(--line);padding-bottom:15px;margin-bottom:24px}.quote{font-family:Georgia,serif;font-style:italic;background:var(--soft);padding:21px 25px;border-left:3px solid var(--accent);font-size:21px;line-height:1.5;margin:22px 0}.quote small{display:block;font:11px system-ui;color:var(--muted);text-transform:uppercase;letter-spacing:1.7px;margin-top:12px}.objective{color:var(--muted);font-size:15px!important}.callout,.exercise,.quiz,.lab,.notes{border:1px solid var(--line);border-radius:11px;padding:20px;margin:24px 0}.callout{background:var(--soft)}.exercise summary{cursor:pointer;font-weight:600;color:var(--accent);margin-top:12px}.quiz .question{border-top:1px solid var(--line);padding-top:14px;margin-top:14px}.options{display:grid;gap:7px}.option{background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:10px 14px;text-align:left}.option.correct{border-color:var(--good);color:var(--good)}.option.wrong{border-color:var(--bad);color:var(--bad)}.feedback{font-size:14px!important;min-height:20px;margin-top:9px!important}.primary{background:var(--accent);color:var(--paper);border:0;border-radius:7px;padding:11px 17px;font-weight:650}.secondary{background:transparent;color:var(--accent);border:1px solid var(--accent);border-radius:7px;padding:10px 15px}.endnav{display:flex;justify-content:space-between;gap:8px;align-items:center;margin-top:35px;flex-wrap:wrap}.labfields{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:10px;margin:12px 0}.labfields label{font-size:12px;color:var(--muted);display:block}.labfields input,.labfields select{display:block;width:100%;border:1px solid var(--line);border-radius:6px;padding:9px;background:var(--paper);color:var(--ink);margin-top:5px}.result{padding:14px;background:var(--soft);border-radius:7px;margin:14px 0;font-size:15px;line-height:1.65}.lab .hint{font-size:13px;color:var(--muted);line-height:1.6}.lab svg{width:100%;height:auto;display:block;overflow:visible}.lab table,.book table{border-collapse:collapse;width:100%;font-size:13px;margin:12px 0}.lab th,.lab td,.book th,.book td{padding:8px;text-align:left;border-bottom:1px solid var(--line)}.tablewrap{overflow:auto}.notes textarea{width:100%;min-height:105px;border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:8px;padding:12px}.notes small{color:var(--muted)}pre{overflow:auto;background:#211c2c;color:#eee6ff;padding:17px;border-radius:8px;font-size:13px;line-height:1.6}code{font-family:ui-monospace,monospace}.cover{background:radial-gradient(ellipse at 70% 20%,#554166,#201a2d 70%);color:#f6e7cf;padding:clamp(30px,7vw,76px);border:1px solid #a78b66;min-height:520px;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:center}.cover:after{content:"";position:absolute;inset:15px;border:1px solid #bba17b55;pointer-events:none}.cover h1{font-size:clamp(43px,7vw,78px);line-height:1.02;margin:24px 0;font-weight:normal;color:#f6e7cf}.cover .eyebrow{color:#d1ad76}.cover p{color:#d8cde4}.cover svg{width:100%;max-width:350px;margin:15px 0}.cover .primary{background:#e3c290;color:#211c2c;align-self:flex-start;z-index:1}.contents{display:grid;gap:8px}.tocrow{display:flex;gap:12px;align-items:center;width:100%;background:var(--paper);color:var(--ink);border:1px solid var(--line);padding:13px;text-align:left;border-radius:7px}.tocrow b{color:var(--accent);font-size:13px}.tocrow span{flex:1}.footer{font-size:12px;color:var(--muted);text-align:center;margin:35px 0 0;letter-spacing:1px}.mobilemenu{display:none}.hidden{display:none}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.stat{border:1px solid var(--line);padding:12px;border-radius:8px;font-size:12px;color:var(--muted)}.stat strong{display:block;color:var(--ink);font-size:21px;margin:4px 0}.badge{font-size:11px;color:var(--accent);border:1px solid var(--line);padding:4px 7px;border-radius:5px}.footnote{font-size:13px!important;color:var(--muted)}@media(max-width:760px){.layout{display:block}.sidebar{display:none;position:fixed;top:0;left:0;width:min(88vw,320px);z-index:20;height:100dvh;box-shadow:0 0 0 100vmax #0008}.sidebar.open{display:block}.mobilemenu{display:inline-block}.book{margin:10px;padding:24px 19px}.toolbar{padding:8px}.toolbar #status{display:none}.cover{min-height:450px;padding:30px}.book p{line-height:1.75}}@media print{.sidebar,.toolbar,.progress,.endnav,.notes,button{display:none!important}.layout{display:block}.book{border:0;box-shadow:none;margin:0;max-width:none}.lab{break-inside:avoid}}
dialog#cloud-panel{width:min(92vw,540px);max-height:85vh;overflow:auto;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:22px}dialog::backdrop{background:#17102199}#cloud-panel input{width:100%;padding:10px;margin:6px 0 12px;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:6px}#cloud-panel button{margin:4px 4px 4px 0}#cloud-status{font-size:13px;color:var(--muted);overflow-wrap:anywhere}#cloud-panel [hidden]{display:none!important}#prof-feedback div{border-top:1px solid var(--line);padding:10px 0}#prof-feedback p{white-space:pre-wrap}.toolbar{flex-wrap:wrap}
body.auth-required .layout{display:none}body.auth-required #cloud-panel{position:fixed;inset:0;margin:auto;max-height:90vh;overflow:auto;z-index:9999;box-shadow:0 20px 80px #211c2c33}body.auth-required #cloud-close,body.auth-required #cloud-report{display:none!important}#guest-backup{margin-top:10px}body:not(.auth-required) #guest-backup{display:none!important}

/* v4 application shell */
:root{--bg:#f5f4f8;--paper:#fff;--ink:#252333;--muted:#777386;--line:#e8e5ee;--accent:#6544a0;--accent2:#946b40;--soft:#f3effa;--nav:#211b30;--navtext:#dfd9ec;--size:17px}
body.dark{--bg:#15131d;--paper:#211e2a;--ink:#f1edf7;--muted:#b5acc3;--line:#3d354c;--accent:#c6a8ff;--accent2:#e3bd81;--soft:#30263f}
.layout{grid-template-columns:248px minmax(0,1fr)}.sidebar{padding:24px 16px;display:flex;flex-direction:column;gap:0}.brand{display:flex;align-items:center;gap:11px;font:700 18px system-ui;padding:0 0 22px;border:0;letter-spacing:-.5px;color:#fff}.brand small{font-size:9px;letter-spacing:1.4px;margin-top:4px}.brand-symbol{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:#6f4ba0;color:#fff;font:700 26px Georgia}.search{margin:0 0 15px;background:#322941;border:1px solid #49405b;padding:12px}.group{margin:17px 10px 8px;color:#a99bbd;font-size:10px}.navbutton{display:flex;align-items:center;gap:11px;font-size:13px;font-weight:550;padding:12px 11px;margin:2px 0;border-radius:9px}.navbutton.active{background:#503c73;color:#fff;box-shadow:inset 3px 0 #c4a5ff}.nav-icon{font-size:18px;width:21px;text-align:center;color:#c9b8e6}.nav-empty{font-size:12px;padding:10px}.search-result{font-size:12px;align-items:start}.search-result span{color:#c9b8e6}.sidebar-footer{margin-top:auto;padding:22px 10px 0;font-size:12px;color:#d7c9e7;line-height:1.8}.sidebar-footer small{color:#a99bbd}.live-dot{display:inline-block;background:#9bd9b1;border-radius:50%;width:7px;height:7px;margin-right:5px}.toolbar{padding:15px 26px;gap:12px;min-height:67px}.toolbar .tools{align-items:center}.breadcrumb{font-size:13px;color:var(--muted);font-weight:650}.toolbar #status{font-size:11px!important}.toolbar button{border-radius:9px;padding:9px 12px}.progress{height:3px}.app-page{border:0;box-shadow:none;border-radius:14px;margin:24px auto 40px;max-width:1000px;min-height:72vh;padding:clamp(24px,4vw,50px)}.app-page.wide-page{background:transparent;max-width:1260px;padding:12px 30px 35px;margin:18px auto}.app-heading{margin-bottom:25px}.app-heading h1,.dashboard-welcome h1{font-family:system-ui,sans-serif;font-size:clamp(29px,4vw,42px);font-weight:750;letter-spacing:-1.4px;margin:8px 0 9px}.app-heading p,.dashboard-welcome p{font-size:15px;line-height:1.55;color:var(--muted);margin:0}.dashboard-welcome{display:flex;justify-content:space-between;gap:15px;align-items:start;margin-bottom:25px}.welcome-tag{font-size:12px;color:var(--accent);background:var(--soft);padding:9px 13px;border-radius:9px;white-space:nowrap}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin:18px 0}.metric-card,.module-card,.quick-card,.resume-card,.teacher-card{background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:20px;text-align:left}.metric-card{display:flex;flex-direction:column;gap:9px}.metric-card span{font-size:12px;color:var(--muted);font-weight:600}.metric-card strong{font-size:30px;font-weight:730;letter-spacing:-1px}.metric-card small{font-size:11px;color:var(--muted)}.dashboard-grid{display:grid;grid-template-columns:1.55fr 1fr;gap:15px;margin:18px 0 26px}.resume-card{background:linear-gradient(135deg,#493365,#6a4797);color:#fff;border:0}.resume-card .eyebrow{color:#e5c8ff}.resume-card h2,.teacher-card h2{font-family:system-ui;font-size:23px;line-height:1.25;color:inherit;margin:14px 0 9px;font-weight:700;letter-spacing:-.4px}.resume-card p,.teacher-card p{font-size:14px;line-height:1.6;color:inherit;opacity:.87}.resume-card .mini-progress{background:#ffffff33;margin:18px 0}.resume-card .mini-progress span{background:#e4ceff}.resume-card .primary{background:#fff;color:#4b3469}.resume-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px}.teacher-card .eyebrow{color:var(--accent2)}.teacher-card .secondary{font-size:13px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:28px 0 13px}.section-heading h2{font:700 20px system-ui;letter-spacing:-.45px;color:var(--ink);margin:0}.text-btn{padding:6px 0;border:0;background:none;color:var(--accent);font-size:13px;font-weight:650;text-align:left}.module-grid,.quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.module-card,.quick-card{display:flex;flex-direction:column;gap:10px;transition:transform .15s,border-color .15s;min-width:0}.module-card:hover,.quick-card:hover,.lesson-row:hover{border-color:var(--accent);transform:translateY(-2px)}.module-top,.module-bottom{display:flex;align-items:center;justify-content:space-between;gap:8px}.module-number{display:grid;place-items:center;width:38px;height:38px;background:var(--soft);color:var(--accent);border-radius:10px;font-size:14px;font-weight:750}.muted,.module-bottom{color:var(--muted);font-size:11px}.module-bottom strong{color:var(--accent);font-size:11px}.module-card h3{font:700 17px system-ui;letter-spacing:-.3px;margin:5px 0 0}.module-card p{font-size:13px;line-height:1.5;color:var(--muted);margin:0;min-height:41px}.mini-progress{height:6px;background:var(--line);border-radius:9px;overflow:hidden}.mini-progress span{display:block;height:100%;background:var(--accent);border-radius:9px}.module-card .mini-progress{margin-top:auto}.quick-card{min-height:111px;position:relative;padding-right:35px}.quick-card strong{font-size:15px}.quick-card small{color:var(--muted);font-size:12px;line-height:1.45}.quick-card>span{position:absolute;right:15px;bottom:15px;color:var(--accent)}.module-summary{background:var(--paper);border:1px solid var(--line);padding:18px;border-radius:12px;display:grid;gap:12px;font-size:14px}.lesson-list{display:grid;gap:9px}.lesson-row{display:flex;align-items:center;gap:14px;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:15px;text-align:left;width:100%;transition:transform .15s,border-color .15s}.lesson-number{background:var(--soft);color:var(--accent);font-weight:700;display:grid;place-items:center;width:38px;height:38px;flex-shrink:0;border-radius:10px}.lesson-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}.lesson-copy strong{font-size:14px;overflow-wrap:anywhere}.lesson-copy small{font-size:12px;color:var(--muted)}.lesson-state{font-size:12px;color:var(--accent);white-space:nowrap}.lesson-state.done{color:var(--good)}.lesson-tabs{display:flex;gap:6px;padding:5px;background:var(--soft);border-radius:11px;margin:17px 0 26px}.lesson-tabs button{flex:1;border:0;background:none;color:var(--muted);padding:11px 6px;font-size:13px;font-weight:650;border-radius:8px}.lesson-tabs button.selected{background:var(--paper);color:var(--accent);box-shadow:0 2px 7px #00000012}.chapter-pane[hidden],button[hidden]{display:none!important}.chapterline{margin-bottom:0}.chapter-pane h2:first-child{margin-top:13px}.app-disclaimer{margin-top:24px!important}.wide-page .lab{background:var(--paper)}.app-page .stats .stat{border-radius:12px}.app-page .footer{font-size:10px;color:var(--muted)}
body.auth-required{min-height:100vh;background:radial-gradient(ellipse at 50% 0%,#49365d,#1e1929 75%)}body.auth-required #cloud-panel{width:min(92vw,450px);padding:32px;border-radius:19px}body.auth-required #cloud-title{font:750 28px system-ui;letter-spacing:-1px}body.auth-required #cloud-signin{width:100%;margin:10px 0;font-size:15px}body.auth-required #cloud-login label{font-size:13px;font-weight:600}
button:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
@media(max-width:1050px){.module-grid,.quick-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-grid{grid-template-columns:1fr}.toolbar{padding:12px 15px}.welcome-tag{display:none}}
@media(max-width:760px){.layout{display:block}.sidebar{display:none;width:min(85vw,280px);height:100dvh}.sidebar.open{display:flex}.mobilemenu{display:inline-block}.toolbar{padding:9px 12px;flex-wrap:wrap}.toolbar button{padding:8px 9px}.breadcrumb{font-size:12px;max-width:155px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-page{margin:12px;padding:21px 17px}.app-page.wide-page{margin:10px auto;padding:13px 14px 25px}.module-grid,.quick-grid{gap:10px}.module-card,.quick-card,.metric-card{padding:14px}.module-card h3{font-size:15px}.module-card p{font-size:12px;min-height:55px}.module-bottom{align-items:start;flex-direction:column}.metric-card strong{font-size:26px}.lesson-row{padding:12px;gap:10px}.lesson-state{font-size:10px}.lesson-copy strong{font-size:13px}.dashboard-welcome{margin-bottom:16px}.resume-actions{flex-wrap:wrap}.teacher-card,.resume-card{padding:18px}}
@media(max-width:370px){.module-grid,.quick-grid{grid-template-columns:1fr}.toolbar .tools{gap:3px}.breadcrumb{max-width:105px}}

/* Account and authentication panels */
dialog#cloud-panel{width:min(94vw,560px);padding:26px;border-radius:20px;box-shadow:0 22px 85px #211b3038;border:1px solid var(--line)}
dialog#cloud-panel::backdrop{background:#191427a3;backdrop-filter:blur(2px)}
.account-heading{display:flex;align-items:center;gap:12px;margin-bottom:18px}.account-avatar{flex-shrink:0;width:46px;height:46px;display:grid;place-items:center;border-radius:13px;background:#6544a0;color:#fff;font:700 27px Georgia}.account-heading>div:nth-child(2){flex:1;min-width:0}.account-heading .eyebrow{font-size:9px;letter-spacing:1.3px;color:var(--muted)}#cloud-title,body.auth-required #cloud-title{font:750 22px/1.25 system-ui;letter-spacing:-.6px;margin:5px 0 0;color:var(--ink)}
#cloud-panel .account-close{border:1px solid var(--line);background:var(--soft);color:var(--ink);border-radius:9px;width:34px;height:34px;font-size:23px;line-height:1;margin:0;display:grid;place-items:center;flex-shrink:0}
#cloud-panel .account-status{display:flex;align-items:center;gap:8px;background:var(--soft);color:var(--accent);border-radius:9px;padding:11px 13px;margin:0 0 16px;font-size:12px;font-weight:600} .account-status:before{content:"";width:7px;height:7px;background:currentColor;border-radius:50%;flex-shrink:0}
.account-section{border:1px solid var(--line);border-radius:13px;padding:17px;margin:12px 0}.account-section-label{font-size:10px;letter-spacing:1.4px;font-weight:750;color:var(--accent2)}.account-section h3{font-size:16px;margin:7px 0 10px;letter-spacing:-.2px}.session-description{font-size:13px;line-height:1.55;color:var(--muted);margin:0 0 12px}
.account-actions{display:flex;gap:9px;flex-wrap:wrap}#cloud-panel .account-actions button{margin:0;flex:1;font-size:13px;min-width:108px}
#cloud-panel .account-signout{border:1px solid var(--line);background:var(--paper);color:var(--bad);border-radius:8px;padding:11px 17px;font-weight:650}
#cloud-panel .account-report{display:block;width:100%;font-size:13px;margin:12px 0 0}
.feedback-list{background:var(--soft);color:var(--muted);padding:14px;border-radius:9px;font-size:13px;line-height:1.6;overflow-wrap:anywhere}#prof-feedback div:first-child{border-top:0;padding-top:0}#prof-feedback p{margin:6px 0 0;color:var(--ink)}
.account-footer{margin:16px 0 0;line-height:1.55;font-size:11px!important;color:var(--muted);text-align:center}
#cloud-login>p{font-size:14px;line-height:1.6;color:var(--muted)}#cloud-panel input:not([type=checkbox]){padding:12px;border-radius:9px}#cloud-panel .remember-option{display:flex;align-items:flex-start;gap:10px;padding:12px;background:var(--soft);border-radius:10px;margin:4px 0 12px;cursor:pointer}#cloud-panel .remember-option input{width:17px;height:17px;margin:2px 0 0;accent-color:var(--accent);flex-shrink:0}.remember-option strong{display:block;font-size:13px}.remember-option small{display:block;font-size:11px;color:var(--muted);line-height:1.5;margin-top:3px}.account-primary:disabled{opacity:.6;cursor:wait}.conflict-section{border-color:var(--accent2)}.conflict-section p{font-size:13px;line-height:1.55}
body.auth-required #cloud-panel{padding:28px;width:min(94vw,460px)}@media(max-width:520px){dialog#cloud-panel,body.auth-required #cloud-panel{padding:19px}.account-heading{gap:10px}.account-avatar{width:40px;height:40px}#cloud-title,body.auth-required #cloud-title{font-size:19px}.account-section{padding:14px}}
