:root{--navy:#12263f;--paper:#f7f4ee;--ink:#1d2733;--desk:#2b313a}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif}header.site{background:var(--navy);color:#fff;justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1.25rem;display:flex}header.site h1{letter-spacing:.02em;margin:0;font-size:1.15rem}header.site a{color:inherit;text-decoration:none}header.site .brand{align-items:center;gap:.6rem;display:inline-flex}header.site .brand-logo{width:auto;height:2.5rem;display:block}header.site .who{align-items:center;gap:.75rem;font-size:.85rem;display:flex}header.site .who span{opacity:.8;text-overflow:ellipsis;white-space:nowrap;max-width:40vw;overflow:hidden}header.site .who button{font:inherit;color:#fff;cursor:pointer;background:0 0;border:1px solid #ffffff80;border-radius:4px;padding:.25rem .6rem}main{max-width:64rem;margin:0 auto;padding:1.5rem}.shelf{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr));gap:1.25rem;display:grid}.book{color:inherit;background:#fff;border:1px solid #d8d2c4;border-radius:6px;padding:.75rem;text-decoration:none}.book:hover{border-color:var(--navy)}.book .cover{aspect-ratio:11/8.5;color:#5b6b7d;background:#dfe6ee;place-items:center;font-size:.85rem;display:grid;overflow:hidden}.book .cover img{object-fit:contain;pointer-events:none;-webkit-user-drag:none;-webkit-user-select:none;user-select:none;width:100%;height:100%}.book .name{margin:.6rem 0 .2rem;font-weight:600}.book .tag{color:#6b5313;background:#f3e7c6;border-radius:3px;margin:0 0 .3rem;padding:.1rem .4rem;font-size:.75rem;display:inline-block}.book .meta{color:#5b6b7d;margin:0;font-size:.85rem}.login form{gap:.9rem;max-width:22rem;display:grid}.login label{gap:.3rem;font-size:.9rem;display:grid}.login input{font:inherit;border:1px solid #b9b3a5;border-radius:4px;padding:.55rem .6rem}.login button{font:inherit;background:var(--navy);color:#fff;cursor:pointer;border:0;border-radius:4px;padding:.6rem}.login .error{color:#a12a2a}.login,.license,.devices{max-width:44rem}.notice{background:#eef3f9;border:1px solid #c8d6e8;border-radius:6px;padding:.6rem .8rem}.login .sent{gap:.5rem;max-width:30rem;display:grid}.login .hint{opacity:.8;margin:0;font-size:.85rem}.login .pw-login{border-top:1px solid #d8d2c4;margin-top:2rem;padding-top:1rem}.login .pw-login summary{cursor:pointer;color:#555;margin-bottom:.9rem;font-size:.9rem}.draft-banner{color:#6b4d00;background:#fff4d6;border:2px dashed #c9971c;border-radius:6px;padding:.6rem .8rem;font-weight:700}.license-text{background:#fff;border:1px solid #d8d2c4;border-radius:6px;max-height:55vh;padding:.4rem 1.2rem;line-height:1.5;overflow-y:auto}.license-text h3{margin:1rem 0 .25rem;font-size:1rem}.license-text p{margin:.4rem 0 .8rem}.license-text .draft-line{color:#8a5a00;font-weight:700}.license-accept{gap:.9rem;margin-top:1.2rem;display:grid}.license-accept .agree{align-items:flex-start;gap:.6rem;font-size:.95rem;display:flex}.license-accept .agree input{flex:none;width:1.2rem;height:1.2rem;margin-top:.15rem}.license-accept button,.devices button{font:inherit;background:var(--navy);color:#fff;cursor:pointer;border:0;border-radius:4px;justify-self:start;padding:.6rem 1rem}.device-list{gap:.6rem;padding:0;list-style:none;display:grid}.device-list li{background:#fff;border:1px solid #d8d2c4;border-radius:6px;justify-content:space-between;align-items:center;gap:1rem;padding:.7rem .9rem;display:flex}.device-list p{margin:0}.device-name{flex-wrap:wrap;align-items:center;gap:.5rem;font-weight:600;display:flex}.device-meta{opacity:.75;font-size:.85rem}.tag-current{color:#12263f;background:#e3eef9;border-radius:999px;padding:.1rem .5rem;font-size:.75rem;font-weight:600}.devices button{white-space:nowrap;padding:.45rem .8rem;font-size:.9rem}.device-help{opacity:.8;font-size:.85rem}.shelf-foot{margin-top:2rem;font-size:.9rem}.reader{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;background:var(--desk);color:#e9edf2;flex-direction:column;flex:1;min-height:0;display:flex}body:has(.reader){overscroll-behavior:none;flex-direction:column;height:100dvh;display:flex;overflow:hidden}.reader-bar{align-items:center;gap:1rem;padding:.5rem 1rem;font-size:.9rem;display:flex}.reader-bar .back{color:#cfd8e3;white-space:nowrap;text-decoration:none}.reader-title{text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;overflow:hidden}.reader-pos{white-space:nowrap}.muted{opacity:.6}.reader-body{flex:1;min-height:0;display:flex;position:relative}.viewer{touch-action:none;cursor:grab;flex:1;min-height:0;position:relative;overflow:hidden}.viewer:active{cursor:grabbing}.viewer canvas{pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.viewer-status{text-align:center;opacity:.85;font-size:.9rem;position:absolute;inset:auto 0 1rem}.reader-controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:.6rem;padding:.5rem;display:flex}.reader button{font:inherit;color:#fff;cursor:pointer;background:#3d4552;border:1px solid #56606f;border-radius:4px;padding:.4rem .8rem}.reader button:disabled{opacity:.4;cursor:default}.goto{gap:.3rem;display:flex}.goto input{width:4.5rem;font:inherit;color:#fff;text-align:center;background:#1f242b;border:1px solid #56606f;border-radius:4px;padding:.4rem}.zoom{gap:.25rem;display:inline-flex}.zoom button{min-width:2.4rem}.goto-error{text-align:center;color:#ffb4b4;margin:0 0 .5rem;font-size:.85rem}@media (max-width:640px){header.site{padding:.5rem .75rem}header.site h1{font-size:1rem}header.site .brand-logo{height:2rem}header.site .who span{display:none}.reader-bar{gap:.6rem;padding:.4rem .6rem;font-size:.8rem}.reader-controls{padding:.4rem .3rem calc(.4rem + env(safe-area-inset-bottom));flex-wrap:nowrap;gap:.35rem}.reader button{padding:.4rem .55rem;font-size:.85rem}.goto input{width:3.2rem}.zoom button{min-width:2rem}.zoom button:nth-child(2),.reader-title,.reader-pos .muted{display:none}.reader-bar{justify-content:space-between}.bar-btn{padding:.25rem .45rem}}.bar-btn{font:inherit;color:#dfe6ee;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #56606f;border-radius:4px;padding:.25rem .6rem;font-size:.85rem}.reader .bar-btn{background:0 0;padding:.25rem .6rem}.reader .bar-btn svg{margin:.15rem 0;display:block}.reader .bar-btn.on{background:#3d4552}.settings-wrap{position:relative}.settings{z-index:20;background:#1f242b;border:1px solid #56606f;border-radius:6px;width:15rem;padding:.6rem .8rem;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 6px 24px #0006}.settings fieldset{border:0;gap:.3rem;margin:0 0 .5rem;padding:0;display:grid}.settings legend{text-transform:uppercase;letter-spacing:.06em;opacity:.7;margin-bottom:.2rem;font-size:.75rem}.settings label{cursor:pointer;align-items:center;gap:.5rem;font-size:.9rem;display:flex}.settings .note{opacity:.75;margin:.2rem 0 0;font-size:.8rem}.toc{background:#20252c;border-right:1px solid #3a424e;flex-direction:column;flex:none;width:19rem;min-height:0;display:flex}.toc-head{border-bottom:1px solid #3a424e;justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.9rem;font-weight:600;display:flex}.reader .toc-head button{background:0 0;border:0;padding:.2rem .4rem}.toc-scroll{flex:1;padding:.3rem 0 1rem;overflow-y:auto}.toc ul{margin:0;padding:0;list-style:none}.toc-row{align-items:stretch;display:flex}.toc-row.active{background:#34404f;box-shadow:inset 3px 0 #8fb3d9}.reader .toc-twisty{color:#aab6c3;background:0 0;border:0;flex:none;justify-content:center;align-items:center;width:1.4rem;padding:0;font-size:.8rem;display:inline-flex}.reader .toc-link{text-align:left;color:#e9edf2;background:0 0;border:0;border-radius:0;flex:1;justify-content:space-between;gap:.6rem;padding:.35rem .6rem .35rem .1rem;font-size:.86rem;line-height:1.3;display:flex}.reader .toc-link:hover{background:#2c333d}.toc-page{opacity:.6;font-variant-numeric:tabular-nums;flex:none}.tools{gap:.3rem;display:inline-flex}.viewer.tool-highlight{cursor:text}.viewer.tool-note{cursor:crosshair}.tool-hint{white-space:nowrap;background:#14181ee0;border:1px solid #56606f;border-radius:999px;align-items:center;gap:.6rem;padding:.3rem .4rem .3rem .9rem;font-size:.85rem;display:flex;position:absolute;top:.6rem;left:50%;transform:translate(-50%)}.reader .tool-hint button{border-radius:999px;padding:.15rem .6rem;font-size:.8rem}.popover{z-index:12;white-space:nowrap;background:#1f242b;border:1px solid #56606f;border-radius:8px;align-items:center;gap:.35rem;padding:.35rem .45rem;display:flex;position:absolute;transform:translate(-50%);box-shadow:0 6px 20px #00000073}.reader .swatch{border:2px solid #fff9;border-radius:50%;width:1.6rem;height:1.6rem;padding:0}.reader .swatch.on{border-color:#fff;box-shadow:0 0 0 2px #8fb3d9}.reader .pop-btn{padding:.3rem .6rem;font-size:.85rem}.reader .danger{color:#ffb4b4;border-color:#7a4048}.tabs{gap:.25rem;display:flex}.reader .tabs button{color:#aab6c3;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;padding:.2rem .5rem;font-size:.88rem;font-weight:600}.reader .tabs button.on{color:#fff;border-bottom-color:#8fb3d9}.notes-panel{flex-direction:column;flex:1;min-height:0;display:flex}.notes-tools{border-bottom:1px solid #3a424e;gap:.4rem;padding:.5rem .75rem;font-size:.8rem;display:grid}.sync{opacity:.8}.sync-local,.sync-error{color:#f3d58a}.export{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.reader .export button{padding:.15rem .5rem;font-size:.8rem}.notes-empty{opacity:.8;padding:.75rem;font-size:.85rem}.notes-list{flex:1;padding:.25rem 0 1rem;overflow-y:auto}.reader .notes-item{text-align:left;color:#e9edf2;background:0 0;border:0;border-bottom:1px solid #2c333d;border-radius:0;gap:.2rem;width:100%;padding:.55rem .75rem;font-size:.85rem;display:grid}.reader .notes-item:hover{background:#2c333d}.notes-meta{opacity:.75;align-items:center;gap:.4rem;font-size:.75rem;display:flex}.dot{border-radius:50%;width:.7rem;height:.7rem;display:inline-block}.notes-excerpt{opacity:.85;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-style:italic;display:-webkit-box;overflow:hidden}.notes-body{white-space:pre-wrap;-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.note-editor-backdrop{z-index:30;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.note-editor{-webkit-user-select:text;user-select:text;background:#1f242b;border:1px solid #56606f;border-radius:10px;gap:.6rem;width:min(34rem,94vw);padding:.8rem;display:grid;box-shadow:0 10px 40px #00000080}.note-editor-head{justify-content:space-between;align-items:center;font-size:.9rem;font-weight:600;display:flex}.reader .note-editor-head button{background:0 0;border:0;padding:.2rem .4rem}.note-excerpt{opacity:.8;-webkit-user-select:none;user-select:none;border-left:3px solid #f6c945;margin:0;padding-left:.6rem;font-size:.85rem;font-style:italic}.note-editor textarea{font:inherit;resize:vertical;color:#fff;background:#14181d;border:1px solid #56606f;border-radius:6px;min-height:8rem;padding:.6rem;font-size:.95rem}.note-editor-actions{align-items:center;gap:.5rem;display:flex}.note-editor-actions .spacer{flex:1}.reader .primary{background:#2f6db5;border-color:#2f6db5}@media (max-width:700px){.note-editor-backdrop{align-items:flex-end}.note-editor{width:100vw;padding-bottom:calc(.8rem + env(safe-area-inset-bottom));border-radius:12px 12px 0 0}.bar-label{display:none}.tool-hint{font-size:.78rem}.toc{z-index:15;width:min(88vw,21rem);position:absolute;inset:0 auto 0 0;box-shadow:6px 0 24px #00000080}}@media print{body *{display:none!important}body:after{content:"Printing is not available for this title.";padding:2rem;display:block}}.reader:fullscreen{background:var(--desk);width:100vw;height:100vh}html.reader-immersive header.site{display:none}.reader.full-immersive{z-index:40;padding-top:env(safe-area-inset-top);position:fixed;inset:0}.reader.full{position:relative}.reader.full .reader-bar,.reader.full .reader-controls{z-index:20;background:#20242aeb;transition:opacity .25s,transform .25s;position:absolute;left:0;right:0}.reader.full .reader-bar{padding-top:calc(.5rem + env(safe-area-inset-top));top:0}.reader.full .reader-controls{bottom:0}.reader.full .toc{margin:3rem 0 3.4rem}.reader.full .tool-hint{top:3.4rem}.reader.chrome-hidden .reader-bar{opacity:0;pointer-events:none;transform:translateY(-100%)}.reader.chrome-hidden .reader-controls{opacity:0;pointer-events:none;transform:translateY(100%)}.reader.chrome-hidden .viewer.tool-read{cursor:none}.home-tip{left:.75rem;right:.75rem;bottom:calc(4.5rem + env(safe-area-inset-bottom));z-index:45;background:#1f242b;border:1px solid #56606f;border-radius:10px;align-items:center;gap:.8rem;padding:.8rem;font-size:.9rem;display:flex;position:fixed;box-shadow:0 8px 30px #00000080}.home-tip p{flex:1;margin:0;line-height:1.4}@media (prefers-reduced-motion:reduce){.reader.full .reader-bar,.reader.full .reader-controls{transition:none}}.license-text ul{margin:.2rem 0 .8rem;padding-left:1.4rem}.license-text li{margin:.2rem 0}.license-text hr{border:0;border-top:1px solid #d8d2c4;margin:1rem 0}.license-text mark.blank{color:#5a3d00;background:#ffe58a;outline:1px dashed #b07800;padding:0 .2em;font-weight:600}header.site .who .admin-link{border:1px solid #ffffff80;border-radius:4px;padding:.2rem .55rem}.admin-nav{background:#e7e1d4;border-bottom:1px solid #d0c8b6;flex-wrap:wrap;align-items:center;gap:1.1rem;padding:.55rem 1.5rem;font-size:.92rem;display:flex}.admin-nav a{color:var(--navy)}.admin-nav .admin-role{opacity:.7;margin-left:auto;font-size:.8rem}.admin-main{max-width:72rem}.admin-head{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.admin-head h2{margin-right:auto}.admin .btn,.admin button{font:inherit;cursor:pointer;color:var(--navy);background:#fff;border:1px solid #9aa6b5;border-radius:4px;padding:.35rem .75rem;font-size:.9rem;text-decoration:none}.admin button[type=submit],.admin .btn{background:var(--navy);color:#fff;border-color:var(--navy)}.admin button:disabled{opacity:.5;cursor:default}.admin input,.admin select,.admin textarea{font:inherit;background:#fff;border:1px solid #b9b3a5;border-radius:4px;padding:.35rem .5rem;font-size:.92rem}.admin .wide{width:100%;min-width:18rem}.admin .narrow{width:5.5rem}.admin .mono{width:100%;font-family:ui-monospace,Menlo,monospace}.admin .sub{color:#5b6b7d;font-size:.85rem}.admin .ok{color:#1f6b2a}.admin .error{color:#a12a2a}.admin-table{border-collapse:collapse;background:#fff;border:1px solid #d8d2c4;width:100%;font-size:.92rem}.admin-table th,.admin-table td{text-align:left;vertical-align:top;border-bottom:1px solid #ece6d9;padding:.45rem .6rem}.admin-table th{background:#f1ece1;font-weight:600}.admin-table .num{text-align:right}.admin-table tr.warn td{background:#fff6e3}.admin-table.compact td{padding:.25rem .4rem}.admin-table .actions button{margin-right:.15rem;padding:.15rem .45rem}.admin-card{background:#fff;border:1px solid #d8d2c4;border-radius:6px;margin:1rem 0;padding:.4rem 1rem 1rem}.admin-card.review.resolved,.admin-card.review.dismissed{opacity:.75}.admin-form{gap:.7rem;max-width:40rem;display:grid}.admin-form label{gap:.25rem;font-size:.9rem;display:grid}.admin label.inline{align-items:center;gap:.35rem;font-size:.9rem;display:inline-flex}.admin .row{flex-wrap:wrap;align-items:center;gap:.6rem;margin:.5rem 0;display:flex}.admin fieldset{border:1px solid #d8d2c4;border-radius:4px;flex-wrap:wrap;gap:1rem;display:flex}.status-toggle select.published{background:#e3f3e5}.status-toggle select.draft{background:#f3e7c6}.status-toggle select.archived{background:#e5e5e5}.job-badge{text-transform:uppercase;letter-spacing:.03em;background:#e6e9ee;border-radius:3px;padding:.05rem .4rem;font-size:.75rem;display:inline-block}.job-badge.running,.job-badge.queued,.job-badge.uploading{background:#dbe8f8}.job-badge.succeeded,.job-badge.resolved{background:#e3f3e5}.job-badge.failed,.job-badge.open{background:#f8dcdc}.job{border:1px solid #ece6d9;border-radius:4px;margin:.4rem 0;padding:.4rem .6rem}.job-log{white-space:pre-wrap;background:#f6f4ef;border:1px solid #e3ddcf;max-height:16rem;padding:.5rem;font-size:.78rem;overflow:auto}.cover-editor{flex-wrap:wrap;align-items:flex-start;gap:1.2rem;display:flex}.cover-preview{color:#5b6b7d;background:#dfe6ee;place-items:center;width:10rem;min-height:8rem;font-size:.85rem;display:grid}.cover-preview img{width:100%;height:auto;display:block}.reader-filters input[type=search]{min-width:14rem}.add-reader summary.btn{cursor:pointer;margin:.4rem 0;list-style:none;display:inline-block}.add-reader[open] summary.btn{margin-bottom:.8rem}.email-preview{background:#fff;border:1px solid #d8d2c4;border-radius:6px;max-width:44rem;padding:.4rem 1rem}.email-preview pre{white-space:pre-wrap;font-family:inherit}
