:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:#f5f7fb;color:#192a3f;font-synthesis:none;--surface:#fff;--page:#f5f7fb;--line:#e1e8f1;--muted:#607387;--soft:#eef3f9;--ink:#17273c;--navy:#173e69;--blue:#2e6faa;--mark:#fff0a6}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:65px}body{margin:0;overflow-x:hidden}button,input,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.55;cursor:wait}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:3px solid #7cb4e7;outline-offset:2px}a{color:#215d96}button{color:inherit}.skip{position:fixed;top:-60px;left:16px;z-index:100;background:#fff;padding:9px 14px;border:2px solid #2a6da9;border-radius:9px}.skip:focus{top:8px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.shell{display:grid;grid-template-columns:272px minmax(0,1fr);min-height:100vh}.sidebar{position:sticky;top:0;align-self:start;height:100vh;overflow-y:auto;padding:18px 12px 30px;background:var(--surface);border-right:1px solid var(--line);z-index:24}.brand{display:flex;gap:11px;align-items:center;padding:5px 9px 22px}.brand strong{display:block;font-size:17px;letter-spacing:-.03em}.brand small{display:block;font-size:11px;color:var(--muted);margin-top:3px}.brand-icon{display:grid;place-items:center;border-radius:12px;background:var(--navy);color:white;width:42px;height:42px;font-size:23px;font-weight:700}.label,.nav-group-title{font-size:11px;letter-spacing:.085em;font-weight:800;text-transform:uppercase;color:#8899ad;padding:18px 12px 8px}.nav-group-title{padding-top:12px;font-size:10px}.navbtn{display:flex;gap:11px;align-items:center;width:100%;border:0;background:transparent;border-radius:10px;padding:10px 11px;margin:2px 0;color:var(--ink);text-align:left;font-size:13px}.navbtn:hover{background:var(--soft)}.navbtn.active{background:#e5effb;color:#174f87;font-weight:700}.navbtn small{font-size:11px;margin-left:auto;color:var(--muted)}.navshort{min-width:0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1}.sidebar-foot{font-size:11px;color:#8493a8;line-height:1.55;padding:20px 12px}.main{width:100%;max-width:1390px;margin:0 auto;padding:28px clamp(15px,3.3vw,52px) 80px;min-width:0}.mobilebar{display:none}.overlay[hidden],[hidden]{display:none!important}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:23px}.page-head h1{font-size:clamp(24px,3.1vw,32px);line-height:1.23;letter-spacing:-.04em;margin:0}.subtext{font-size:14px;color:var(--muted);line-height:1.6;margin:6px 0 0}.actions,.reader-actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.btn{border:1px solid #d7e1ed;background:var(--surface);color:var(--ink);border-radius:10px;padding:9px 13px;line-height:1.3;display:inline-flex;justify-content:center;align-items:center;gap:8px;min-height:39px;font-size:13px;font-weight:600;text-decoration:none}.btn:hover{background:var(--soft)}.btn.primary{background:var(--navy);border-color:var(--navy);color:#fff}.btn.primary:hover{background:#285a8b}.btn.small{font-size:12px;padding:7px 11px;min-height:32px}.btn.text-only{border:0;background:transparent;color:var(--blue);min-height:32px}.muted,.subtle{color:var(--muted)}.small{font-size:12px}.between{display:flex;justify-content:space-between;align-items:center;gap:12px}.between h2{margin:0}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:22px 0}.stat,.status-stat{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px}.stat strong{display:block;font-size:27px;color:var(--navy);letter-spacing:-.03em}.stat small{display:block;color:var(--muted);font-size:12px;margin-top:5px}.searchbox{display:flex;align-items:center;position:relative;background:var(--surface);border:1px solid #d8e3ef;border-radius:12px;max-width:750px;min-height:46px;padding:0 14px;gap:9px}.searchbox:focus-within{border-color:#72a4d3;box-shadow:0 0 0 3px #7ab3e12e}.searchbox span{color:#778ca5;font-size:24px;line-height:1}.searchbox input{min-width:0;width:100%;border:0;outline:0;background:transparent;padding:11px 0;color:var(--ink);font-size:14px}.searchbox.inline{flex:1;max-width:none}.section-row{display:flex;align-items:center;justify-content:space-between;margin:26px 0 14px;gap:15px}.section-row h2{margin:0;font-size:18px;letter-spacing:-.02em}.section-row .muted{font-size:12px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(222px,1fr));gap:13px}.specialty{display:flex;flex-direction:column;align-items:flex-start;gap:9px;text-align:left;min-height:176px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:19px;transition:transform .15s,border-color .15s,box-shadow .15s}.specialty:hover{transform:translateY(-2px);border-color:#8fb6da;box-shadow:0 9px 28px #172f4f13}.sp-icon{font-size:27px}.sp-title{font-weight:720;line-height:1.3;font-size:15px;letter-spacing:-.01em;min-height:38px}.sp-count,.sp-progress{font-size:12px;color:var(--muted)}.progressbar{display:block;background:#e9eff5;border-radius:10px;overflow:hidden;width:100%;height:6px}.progressbar>span{display:block;height:100%;background:#4383c0;transition:width .2s}.progressbar.wide{height:8px;margin-top:12px}.panel{background:var(--surface);border:1px solid var(--line);border-radius:15px;padding:19px;margin:17px 0}.panel h2{font-size:17px;margin:0 0 12px}.filters{display:flex;gap:10px;align-items:stretch;margin:18px 0}.filters select,.setting-row input,.due-grid input{border:1px solid #d7e1eb;border-radius:10px;padding:10px;background:var(--surface);color:var(--ink)}.topic-list{display:grid;gap:8px}.topic-card{width:100%;text-align:left;display:flex;align-items:center;gap:14px;padding:13px 15px;background:var(--surface);border:1px solid var(--line);border-radius:12px;min-width:0}.topic-card:hover{border-color:#91b5d6;background:#fbfdff}.topic-ic{font-size:20px;min-width:27px;text-align:center}.topic-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.topic-main strong{font-size:13.7px;font-weight:700;overflow-wrap:anywhere;line-height:1.42}.topic-main small{font-size:11px;color:var(--muted)}.topic-arrow{color:#7890a8;font-size:20px}.empty{border:1px dashed #cdd9e7;background:var(--surface);border-radius:14px;padding:32px;text-align:center;color:var(--muted);line-height:1.65}.reader-heading{padding:0 0 12px}.reader-heading h1{margin:7px 0 3px;font-size:clamp(23px,3vw,32px);line-height:1.26;letter-spacing:-.03em;overflow-wrap:anywhere}.reader-heading .subtext{margin-bottom:14px}.reader-actions{margin-top:15px}.link-back{display:inline-flex;align-items:center;gap:7px;background:none;border:0;color:var(--blue);font-weight:700;font-size:13px;padding:8px 0}.cycle-status{border:1px solid #afd0e9;background:#e6f2fb;color:#204f7a;padding:8px 13px;border-radius:11px;display:inline-flex;align-items:center;gap:9px;font-weight:720;font-size:13px;min-height:39px}.cycle-status:hover{background:#d4e9fa}.cycle-symbol{font-weight:900;font-size:16px;min-width:18px}.cycle-next{opacity:.62}.reading-progress{position:fixed;top:0;left:0;z-index:55;height:3px;background:#2d80be;width:0;transition:width .12s}.toc{background:var(--surface);border:1px solid var(--line);border-radius:12px;margin:15px 0}.toc summary{cursor:pointer;font-weight:700;padding:14px 16px;color:var(--ink)}.toc summary:hover{background:var(--soft)}.toc-links{border-top:1px solid var(--line);padding:10px 16px;display:grid;max-height:290px;overflow:auto;gap:2px}.toc-links a{display:block;color:var(--blue);text-decoration:none;padding:7px 0 7px calc(var(--indent)*10px);font-size:12.5px;line-height:1.4}.toc-links a:hover{text-decoration:underline}.reader{padding:clamp(18px,3vw,42px);background:var(--surface);border:1px solid var(--line);border-radius:16px;color:var(--ink);max-width:100%;overflow-wrap:break-word;line-height:1.75}.reader h2{font-size:1.46em;color:#295984;margin:1.7em 0 .6em;line-height:1.35}.reader h3{font-size:1.23em;color:#2b628e;margin:1.5em 0 .5em;line-height:1.4}.reader h4,.reader h5,.reader h6{font-size:1.06em;color:#3d6690;margin:1.35em 0 .45em;line-height:1.4}.reader h2:first-child,.reader h3:first-child{margin-top:0}.reader p{margin:.52em 0;line-height:1.78}.reader strong{font-weight:730}.reader mark{background:var(--mark);color:#192535;border-radius:3px;padding:0 2px}.reader .note-p{margin:.5em 0}.reader ul.doc-list,.reader ol.doc-list{margin:.56em 0 1.04em;padding-left:1.5em;list-style-position:outside}.reader ul.doc-list{list-style-type:disc}.reader ul.doc-list ul.doc-list{list-style-type:circle}.reader ul.doc-list ul.doc-list ul.doc-list{list-style-type:square}.reader ol.doc-list{list-style-type:decimal}.reader .doc-list li{padding-left:.18em;margin:.35em 0;break-inside:avoid}.reader .doc-list li>p{margin:0;line-height:1.75}.reader li>.doc-list{margin:.36em 0 .5em}.reader .doc-list li::marker{color:#3d7fb3;font-weight:700}.reader .table-scroll{overflow-x:auto;max-width:100%;margin:20px 0 25px;border-radius:7px;border:1px solid #dce5ef}.reader table{border-collapse:collapse;min-width:440px;width:100%;font-size:.88em;line-height:1.53}.reader th,.reader td{padding:9px 10px;border:1px solid #dce5ef;vertical-align:top;min-width:90px}.reader th{background:#eaf2fa;font-weight:720}.reader td p,.reader th p{line-height:1.45;margin:0}.reader tr:nth-child(even) td{background:#fbfdff}.reader img.note-image{max-width:100%;height:auto;object-fit:contain;display:block;margin:18px auto;border-radius:7px;cursor:zoom-in;border:1px solid #e8edf2}.reader .pdf-page{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--line)}.reader .pdf-page:last-child{border:0}.reader figure{margin:13px 0}.reader :is(h2,h3,h4,h5,h6){scroll-margin-top:76px}.reader-nav{display:flex;justify-content:space-between;gap:10px;margin:18px 0}.foot-note{color:#8191a4;font-size:11px;line-height:1.6;margin:23px 0}.search-item{align-items:flex-start}.search-snippet{display:block;color:var(--muted);font-size:12px;line-height:1.6;margin-top:4px}.search-snippet mark{background:var(--mark);font-weight:700}.status-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:11px}.status-stat{display:flex;flex-direction:column;align-items:flex-start;gap:5px}.status-stat span{font-size:19px;color:#3d79b2}.status-stat strong{font-size:25px}.status-stat small{font-size:11px;color:var(--muted)}.pill{border-radius:999px;background:#e7f2fd;color:#32679a;font-size:12px;padding:6px 9px;white-space:nowrap}.progress-item{margin:19px 0}.progress-item .between{font-size:12px}.progress-item .between span{color:var(--muted)}.setting-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:15px 0}.setting-row label{font-size:13px;font-weight:650;min-width:136px}.setting-row input[type=range]{flex:1;max-width:310px}.check-row{display:flex;align-items:center;gap:10px;font-size:14px;margin:18px 0 4px}.due-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px}.due-grid label{display:flex;flex-direction:column;gap:7px;color:var(--muted);font-size:12px}.due-grid input{max-width:100%;width:100%}.file-label{cursor:pointer}.offline-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:17px}.offline-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px;border:1px solid var(--line);border-radius:11px;min-width:0}.offline-row span{font-size:12px;font-weight:700;overflow-wrap:anywhere}.offline-row small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.offline-row button{flex-shrink:0}.lightbox{position:fixed;inset:0;background:#0b1725ed;z-index:110;display:flex;justify-content:center;align-items:center;padding:35px}.lightbox img{max-width:96vw;max-height:94vh;object-fit:contain}.close-lightbox{position:absolute;right:20px;top:16px;background:#fff;color:#182738;border:0;border-radius:9px;font-size:27px;width:43px;height:43px}.toast{position:fixed;z-index:120;bottom:25px;left:50%;transform:translateX(-50%);background:#1c344c;color:#fff;border-radius:10px;padding:12px 18px;font-size:13px;box-shadow:0 8px 25px #0003;max-width:90vw;text-align:center}
body.dark{--surface:#1b2938;--page:#101925;--line:#35485b;--muted:#b0c0d0;--soft:#243849;--ink:#e8eff7;--navy:#1e6399;--blue:#a8d5fc;--mark:#ffdf7e;background:var(--page);color:var(--ink)}.dark .navbtn.active{background:#294c6c;color:#d7ecfe}.dark .stat strong{color:#b0d5f9}.dark .specialty:hover,.dark .topic-card:hover{background:#243849}.dark .progressbar{background:#344557}.dark .panel,.dark .reader,.dark .stat,.dark .specialty,.dark .topic-card{box-shadow:none}.dark .reader th{background:#2f465e}.dark .reader td,.dark .reader th{border-color:#42566b}.dark .reader tr:nth-child(even) td{background:#203043}.dark .cycle-status{background:#294a62;color:#d3ebff;border-color:#517696}.dark .reader h2,.dark .reader h3,.dark .reader h4,.dark .reader h5,.dark .reader h6{color:#b4d9fa}.dark .reader .table-scroll{border-color:#455b72}.dark .reader img.note-image{background:#fff}.dark .btn.primary{background:#2c74ad;border-color:#2c74ad}.dark .toc summary:hover{background:#263c50}.dark .navbtn:hover{background:#243849}.dark .pill{background:#2b5270;color:#d0e8fb}.dark .reader mark,.dark .search-snippet mark{color:#1a252f}
@media(max-width:920px){.shell{grid-template-columns:242px minmax(0,1fr)}.main{padding:22px 20px 70px}.offline-grid{grid-template-columns:1fr}.stats{gap:8px}}
@media(max-width:760px){.shell{display:block}.sidebar{position:fixed;left:0;top:0;bottom:0;width:min(290px,85vw);height:100dvh;transform:translateX(-110%);transition:transform .2s;box-shadow:10px 0 35px #0002;z-index:53}.sidebar.show{transform:translateX(0)}.overlay:not([hidden]){position:fixed;inset:0;z-index:52;background:#0d1f3480}.mobilebar{height:57px;display:flex;justify-content:space-between;align-items:center;padding:0 15px;position:sticky;top:0;z-index:50;background:var(--surface);border-bottom:1px solid var(--line);box-shadow:0 2px 8px #071a3008}.mobilebar strong{font-size:14px}.iconbtn{border:1px solid var(--line);background:var(--surface);border-radius:9px;min-width:38px;min-height:38px;font-size:21px}.main{padding:20px 16px 80px}.page-head{align-items:flex-start}.page-head h1{font-size:26px}.stats{grid-template-columns:repeat(2,1fr)}.cards{grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:9px}.specialty{padding:15px;min-height:155px}.sp-title{font-size:13px;min-height:36px}.reader{padding:18px 17px}.reader h2{font-size:1.29em}.reader h3{font-size:1.16em}.reader p{line-height:1.7}.reader ul.doc-list,.reader ol.doc-list{padding-left:1.25em}.reader .doc-list li{padding-left:.07em}.reader .doc-list li>.doc-list{padding-left:1.2em}.reading-progress{top:57px}.status-grid{grid-template-columns:repeat(3,1fr)}.status-stat{padding:12px}.status-stat strong{font-size:21px}.due-grid{grid-template-columns:repeat(2,1fr)}.offline-grid{grid-template-columns:1fr}.filters{flex-wrap:wrap}.filters select{width:100%}}
@media(max-width:430px){.stats{gap:8px}.stat{padding:14px}.stat strong{font-size:23px}.page-head{flex-direction:column;gap:10px}.reader-actions{gap:7px}.cycle-status{padding:7px 10px}.reader-nav{align-items:stretch}.reader-nav .btn{flex:1}.status-grid{grid-template-columns:repeat(2,1fr)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}
@media print{.sidebar,.mobilebar,.toc,.reader-actions,.reader-nav,.reading-progress,.page-head,.foot-note,.link-back{display:none!important}.shell{display:block}.main{max-width:none;padding:0}.reader{border:0;padding:0}.reader img.note-image{max-width:100%;break-inside:avoid}}
/* Active recall masks answer content while keeping section headings as prompts. */
.reader.recall-mode .recall-hidden:not(.recalled){filter:blur(6px);opacity:.45;background:var(--soft);border-radius:5px;cursor:pointer;user-select:none;transition:filter .14s,opacity .14s}
.reader.recall-mode .recall-hidden:not(.recalled):focus{filter:blur(2px);outline:2px dashed #659acd}
.reader.recall-mode .recall-hidden.recalled{filter:none;opacity:1;cursor:default}
/* V5: login, account controls, admin subscriptions, and online-only study */
body:not(.signed-in) .shell,body:not(.signed-in) .mobilebar,body:not(.signed-in) #navOverlay { display:none !important; }
.auth-root { min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#eef4fb,#fff); }
.auth-root[hidden] {display:none}
.auth-card { width:min(100%,460px);padding:38px 30px;border:1px solid #dce5ef;border-radius:18px;background:white;text-align:center;box-shadow:0 18px 45px #143a6312;color:#193858; }
.auth-logo {font-size:34px;background:#153b65;color:white;border-radius:14px;width:64px;height:64px;display:grid;place-items:center;margin:0 auto 15px}
.auth-card h1 {font-size:27px;margin:6px 0}.auth-card h2 {font-size:18px;margin:0 0 12px}
.auth-state {padding:15px 0 20px;line-height:1.6}.auth-state p {margin:8px 0}.google-button {display:flex;justify-content:center;min-height:48px}
.auth-error {color:#b42318;margin-top:12px;min-height:20px}
.account-block {padding:12px;border-radius:10px;background:var(--panel,#edf3f9);margin-top:12px}
.account-block strong {display:block;font-size:13px;overflow-wrap:anywhere}.account-block small {display:block;font-size:12px;margin-top:3px}
.account-block button {margin-top:10px}
.admin-form {display:grid;grid-template-columns:minmax(170px,1fr) minmax(140px,190px) auto;gap:10px;align-items:end}
.admin-form input,.admin-row input,.admin-row select {min-width:0;width:100%;padding:10px;border:1px solid #aebdcd;border-radius:8px;background:var(--card,#fff);color:inherit}
.admin-row {display:grid;grid-template-columns:minmax(180px,1fr) 150px 180px auto;gap:10px;align-items:center;padding:14px 0;border-bottom:1px solid #dde5ed}
.admin-row:last-child {border-bottom:0}.admin-row small {display:block;overflow-wrap:anywhere}.admin-row .btn {white-space:nowrap}
.cloud-indicator {font-size:12px;color:var(--muted,#52677c)}
@media(max-width:820px) {.admin-row {grid-template-columns:1fr 1fr}.admin-row>div:first-child {grid-column:1/-1}.admin-form {grid-template-columns:1fr 1fr}.admin-form label:first-child {grid-column:1/-1}.admin-form button {grid-column:1/-1}}
