:root{--ink:#263d2f;--muted:#65746a;--line:#dbe2bd;--forest:#254722;--green:#366c34;--lime:#bed62f;--soft-lime:#e8efaa;--cream:#f8f6ed;--accent:#78a83a;background:var(--cream);color:var(--ink);font-family:Arial,Helvetica,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(circle at 0 100%, #e4eca7 0 8%, transparent 8.1%), var(--cream);min-width:320px;margin:0}.login{background:radial-gradient(circle at 100% 0, #d9e47c 0 12%, transparent 12.1%), radial-gradient(circle at 0 100%, #dce58f 0 13%, transparent 13.1%), var(--cream);place-items:center;min-height:100vh;padding:24px;display:grid}.login form{background:#fffefa;border:1px solid #d9e3ac;border-radius:20px;gap:14px;width:min(100%,440px);padding:clamp(28px,5vw,42px);display:grid;box-shadow:0 22px 58px #2a4a2524}.login-logo{width:155px;height:auto;margin-bottom:8px}.login h1{letter-spacing:-.04em;margin:0;font-size:clamp(1.8rem,5vw,2.35rem)}.login-intro{color:var(--muted);margin:0 0 10px;line-height:1.5}.login label{gap:6px;font-size:.88rem;font-weight:700;display:grid}.login input{background:#fff;border:1px solid #b9cba9;border-radius:8px;padding:11px}.login input:focus{border-color:var(--green);outline:3px solid #bedd4c80}.login button{background:var(--forest);color:#fff;cursor:pointer;border:0;border-radius:8px;padding:12px;font-weight:800}.login button:hover{background:var(--green)}.login-credit{color:var(--muted);justify-content:center;align-items:center;gap:7px;margin-top:4px;font-size:.7rem;line-height:1;display:flex}.login-credit img{width:102px;height:auto}.password-field{display:block;position:relative}.password-field input{width:100%;padding-right:48px}.login .password-toggle{width:40px;height:40px;color:var(--forest);background:0 0;border-radius:6px;place-items:center;padding:0;display:grid;position:absolute;top:50%;right:4px;transform:translateY(-50%)}.login .password-toggle:hover{color:var(--green);background:#eaf0c8}.password-toggle:focus-visible{outline:3px solid #bedd4c80}.password-toggle svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:21px;height:21px}.admin-shell{background:linear-gradient(140deg,#f8f6ed,#e6edbd);min-height:100vh}.admin-header{color:#fff;background:var(--forest);justify-content:space-between;gap:16px;padding:20px clamp(20px,5vw,72px);font-size:.85rem;display:flex}.admin-panel{width:min(100% - 32px,960px);margin:0 auto;padding:clamp(38px,7vw,76px) 0}.admin-panel h1,.admin-setup h1{letter-spacing:-.045em;margin:0;font-size:clamp(2rem,5vw,3rem)}.admin-panel>div>p:not(.eyebrow){max-width:650px;color:var(--muted);line-height:1.55}.student-create-form{background:#fffefa;border:1px solid #d9e3ac;border-radius:14px;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:28px;padding:24px;display:grid;box-shadow:0 10px 24px #31512a12}.student-create-form h2,.student-create-form p,.student-create-form .permission-check,.student-create-form button{grid-column:1/-1}.student-create-form h2{color:var(--forest);margin:0;font-size:1.15rem}.student-create-form label{color:var(--ink);gap:6px;font-size:.84rem;font-weight:700;display:grid}.student-create-form input{background:#fff;border:1px solid #b9cba9;border-radius:8px;width:100%;padding:10px}.student-create-form input:focus{border-color:var(--green);outline:3px solid #bedd4c80}.student-create-form .permission-check{align-items:center;gap:8px;display:flex}.student-create-form .permission-check input{width:auto}.student-create-form p{color:var(--muted);margin:0;font-size:.82rem;line-height:1.45}.student-create-form button,.access-actions button,.admin-setup button{color:#fff;background:var(--forest);cursor:pointer;border:0;border-radius:8px;padding:10px 13px;font-weight:800}.student-create-form button:disabled,.access-actions button:disabled{opacity:.55;cursor:not-allowed}.access-list{gap:14px;margin-top:28px;display:grid}.empty-access-list{color:var(--muted);text-align:center;border:1px dashed #b9cba9;border-radius:14px;margin:0;padding:22px}.access-card{background:#fffefa;border:1px solid #d9e3ac;border-radius:14px;justify-content:space-between;align-items:center;gap:22px;padding:22px;display:flex;box-shadow:0 10px 24px #31512a12}.access-card strong,.access-card span,.access-card small{display:block}.access-card span{color:var(--muted);margin-top:4px;font-size:.88rem}.access-card small{color:var(--green);margin-top:10px;font-weight:700}.access-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.access-actions .secondary-action{color:var(--forest);background:#edf2cf}.admin-error{color:#842029;background:#f8d7da;border-radius:8px;padding:10px 12px}.admin-setup{background:radial-gradient(circle at 100% 0,#d9e47c 0 12%,transparent 12.1%),var(--cream);place-items:center;min-height:100vh;padding:24px;display:grid}.admin-setup form{background:#fffefa;border:1px solid #d9e3ac;border-radius:20px;gap:14px;width:min(100%,480px);padding:clamp(28px,5vw,42px);display:grid;box-shadow:0 22px 58px #2a4a2524}.admin-setup p:not(.eyebrow){color:var(--muted);margin:0;line-height:1.5}.admin-setup label{gap:6px;font-size:.88rem;font-weight:700;display:grid}.admin-setup input{border:1px solid #b9cba9;border-radius:8px;padding:11px}.admin-setup input:focus{border-color:var(--green);outline:3px solid #bedd4c80}button,input{font:inherit}.topbar{border-bottom:4px solid var(--lime);min-height:76px;color:var(--ink);background:#fffefa;justify-content:space-between;align-items:center;gap:12px;padding:12px clamp(20px,5vw,72px);display:flex}.brand-lockup{align-items:center;gap:14px;display:flex}.brand-logo{width:102px;height:auto}.brand-lockup span{letter-spacing:.07em;text-transform:uppercase;color:var(--green);border-left:1px solid #cbd7b9;padding-left:14px;font-size:.8rem;font-weight:700}.user-chip{color:var(--green);justify-items:end;gap:3px;font-size:.78rem;font-weight:700;display:grid}.user-chip span{color:#71816d;letter-spacing:.09em;text-transform:uppercase;font-size:.61rem;font-weight:800}.reader-shell{max-width:1280px;margin:0 auto;padding:clamp(30px,5vw,66px) clamp(16px,4vw,42px) 52px}.reader-heading{max-width:700px;margin-bottom:28px}.eyebrow{color:#668c22;letter-spacing:.12em;margin:0 0 10px;font-size:.72rem;font-weight:800}.reader-heading h1{letter-spacing:-.045em;margin:0;font-size:clamp(1.9rem,4vw,3rem)}.reader-heading p:not(.eyebrow){color:var(--muted);margin:12px 0 0;line-height:1.55}.viewer{border:1px solid var(--line);background:#fffefa;border-radius:18px;overflow:hidden;box-shadow:0 18px 45px #31512a1c}.toolbar{z-index:20;border-bottom:1px solid var(--line);background:#f4f5e6;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:12px;display:flex;position:sticky;top:0}.toolbar button{cursor:pointer;color:var(--forest);background:#fffefa;border:1px solid #b9cba9;border-radius:7px;padding:7px 10px;font-size:.83rem;font-weight:700}.toolbar button:hover:not(:disabled){border-color:var(--green);color:var(--green);background:#f5f8dc}.toolbar button:disabled{cursor:not-allowed;opacity:.42}.toolbar-divider{background:var(--line);width:1px;height:24px}.page-input{color:#526557;font-size:.84rem}.page-input input{text-align:center;background:#fff;border:1px solid #b9cba9;border-radius:5px;width:48px;padding:6px}.zoom-value{text-align:center;color:#526557;min-width:40px;font-size:.8rem}.mode-button{margin-left:4px}.book-stage{background:radial-gradient(circle at 92% 8%,#dce88e 0 7%,#0000 7.1%),radial-gradient(circle at 7% 92%,#e7edb5 0 8%,#0000 8.1%),linear-gradient(140deg,#e7ebd9,#f7f5eb);place-items:center;min-height:640px;padding:32px 16px;display:grid;overflow:auto}.book-stage .book{transform:scale(var(--zoom));transform-origin:50%;transition:transform .16s}.page{-webkit-user-select:none;user-select:none;background:#fff;position:relative;overflow:hidden}.page img{object-fit:contain;background:#fff;width:100%;height:100%;display:block}.page-number{color:#27472888;font-size:.75rem;font-weight:700;position:absolute;bottom:15px;right:18px}.single-page-stage{cursor:grab;align-content:start;justify-items:center;min-height:0;padding:28px;display:grid}.single-page-stage.is-panning{cursor:grabbing;-webkit-user-select:none;user-select:none}.single-page-stage .book{width:min(100%,860px);margin:0}.single-page-stage .page{border:1px solid #cbd5e1;box-shadow:0 6px 16px #0f172a1c}.single-page-stage .page img{object-fit:initial;width:100%;height:auto}.flip-stage.is-zoomed{cursor:grab}.flip-stage.is-zoomed.is-panning{cursor:grabbing;-webkit-user-select:none;user-select:none}.reader-content{min-width:0}.reader-content.toc-open{grid-template-columns:minmax(220px,290px) minmax(0,1fr);display:grid}.toc-panel{border-right:1px solid var(--line);background:#fbfcf0;max-height:760px;padding:18px 14px;overflow:auto}.toc-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.toc-header h2{color:var(--forest);margin:0;font-size:1rem}.toc-header button{width:30px;height:30px;color:var(--forest);cursor:pointer;background:#fffefa;border:1px solid #b9cba9;border-radius:6px;padding:0;font-size:1.3rem;line-height:1}.toc-panel p{color:var(--muted);margin:8px 0 14px;font-size:.76rem;line-height:1.4}.toc-panel ol{gap:4px;margin:0;padding:0;list-style:none;display:grid}.toc-panel li button{width:100%;color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px;font-size:.76rem;line-height:1.3;display:flex}.toc-panel li button:hover,.toc-panel li button:focus-visible{color:var(--forest);background:#e7efb7;outline:none}.toc-panel li strong{color:#668c22;font-size:.72rem}.toc-level-1{margin-top:8px}.toc-level-1 button{font-weight:800;color:var(--forest)!important}.toc-level-2 button{padding-left:16px!important}.toc-trigger{background:#e8efaa!important}.reader-note{color:var(--muted);text-align:center;margin:16px 0 0;padding:0 20px 18px;font-size:.82rem}.reader-export-error{color:#842029;text-align:center;background:#f8d7da;border-radius:8px;margin:16px 20px 0;padding:10px 12px;font-size:.84rem}.mobile-reader-controls{display:none}.mobile-options-trigger{display:inline-block}.mobile-options-panel{border-bottom:1px solid var(--line);background:#f4f5e6;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px;display:grid}.mobile-options-panel button{color:var(--forest);cursor:pointer;background:#fffefa;border:1px solid #b9cba9;border-radius:7px;padding:9px;font-size:.82rem;font-weight:700}.viewer:fullscreen,.viewer.is-focus-mode{background:var(--cream);border:0;border-radius:0;flex-direction:column;width:100vw;height:100dvh;display:flex;overflow:hidden}.viewer.is-focus-mode{z-index:100;position:fixed;inset:0}.viewer:fullscreen .reader-content,.viewer.is-focus-mode .reader-content{flex:1;min-height:0;overflow:hidden}.viewer:fullscreen .book-stage,.viewer.is-focus-mode .book-stage{height:100%;min-height:0}.viewer:fullscreen .single-page-stage{place-items:center;padding:16px;display:grid}.viewer:fullscreen .single-page-stage .book{zoom:var(--zoom);transform:none}.viewer:fullscreen .reader-note,.viewer.is-focus-mode .reader-note{display:none}.print-shell{background:#f8f6ed;padding:28px}.print-screen-message{max-width:720px;color:var(--ink);background:#fffefa;border:1px solid #d9e3ac;border-radius:14px;margin:0 auto 24px;padding:20px}.print-screen-message h1{margin:0;font-size:1.4rem}.print-screen-message p{color:var(--muted);margin:8px 0 0}.print-pages{justify-items:center;gap:22px;display:grid}.print-pages img{background:#fff;width:min(100%,900px);height:auto;display:block;box-shadow:0 4px 14px #0f172a25}@media print{@page{margin:0}body{background:#fff}.print-screen-message{display:none}.print-shell{background:#fff;padding:0}.print-pages{display:block}.print-pages img{break-after:page;page-break-after:always;width:100%;max-width:none;height:auto;box-shadow:none}.print-pages img:last-child{break-after:auto;page-break-after:auto}}@media (max-width:760px){.reader-content.toc-open{display:block}.toc-panel{z-index:110;max-height:none;padding:calc(18px + env(safe-area-inset-top)) 16px calc(24px + env(safe-area-inset-bottom));background:#fbfcf0;border:0;position:fixed;inset:0;overflow:auto;box-shadow:0 0 0 100vmax #243d2666}.toc-panel ol{max-width:620px;margin:0 auto}.toc-panel p,.toc-header{max-width:620px;margin-left:auto;margin-right:auto}.topbar{min-height:60px}.brand-logo{width:82px}.brand-lockup span{display:none}.user-chip{font-size:.66rem}.user-chip span{font-size:.53rem}.toolbar{z-index:10;gap:6px;position:sticky;top:0}.toolbar button{padding:7px 8px}.toolbar .desktop-navigation,.toolbar .desktop-zoom,.toolbar .export-action,.toolbar-divider{display:none}.mobile-options-panel{grid-template-columns:1fr}.mode-button{margin-left:0}.book-stage{min-height:450px;padding:20px 8px 84px}.flip-stage .book{width:300px!important;height:405px!important}.single-page-stage,.flip-stage{touch-action:none}.single-page-stage{padding:16px 10px 84px}.mobile-reader-controls{z-index:30;right:10px;bottom:max(10px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffefaee;border:1px solid #b9cba9;border-radius:12px;grid-template-columns:42px minmax(68px,1fr) 38px 46px 38px 42px;align-items:center;gap:5px;padding:8px;display:grid;position:fixed;left:10px;box-shadow:0 8px 24px #243d2633}.mobile-reader-controls button{min-height:36px;color:var(--forest);background:#fffefa;border:1px solid #b9cba9;border-radius:7px;font-size:.8rem;font-weight:800}.mobile-reader-controls button:disabled{opacity:.4}.mobile-reader-controls span,.mobile-reader-controls strong{color:#526557;text-align:center;white-space:nowrap;font-size:.72rem;overflow:hidden}.mobile-reader-controls strong{color:var(--forest)}.viewer:fullscreen .mobile-reader-controls,.viewer.is-focus-mode .mobile-reader-controls{bottom:max(12px, env(safe-area-inset-bottom))}.viewer:fullscreen .book-stage,.viewer.is-focus-mode .book-stage{min-height:calc(100dvh - 120px)}.student-create-form{grid-template-columns:1fr}.admin-header,.access-card{flex-direction:column;align-items:flex-start}.access-actions{justify-content:flex-start}}@media (hover:none) and (pointer:coarse){.toolbar .fullscreen-button,.toolbar .export-action,.toolbar-divider{display:none}.mobile-options-trigger{display:inline-block}}
