/* ═══════════════════════════════════════════════════════════════════════
   Reader — Lumen Amber Theme  (based on ui/ reference)
   ═══════════════════════════════════════════════════════════════════════ */
:root {
  --bg: #f5f0e0; --bg-card: #faf7ee;
  --text-primary: #2d2416; --text-secondary: #6b5f52;
  --accent: #b89968; --accent-light: #e8dcc8; --accent-dark: #8b7355;
  --border: #e8e0d5; --border-light: #f0ebe5;
  --user-font-size: 16px;
  --user-font: Georgia, 'Times New Roman', serif;
  --user-title-font: Georgia, 'Times New Roman', serif;
  --user-font-color: #2d2416; --user-title-color: #2d2416;
  --user-bg-color: #f5f0e0; --user-line-gap: 1.8; --user-para-gap: 1.2em;
  --user-margin: 28px; --user-char-gap: 0px;
}
html.dark-mode {
  --bg: #1a1511; --bg-card: #232019;
  --text-primary: #f5f1e8; --text-secondary: #a89980;
  --accent: #d4a574; --accent-light: #3d3428; --accent-dark: #c2945f;
  --border: #3a3228; --border-light: #2a2420;
  --user-font-color: #f5f1e8; --user-title-color: #f5f1e8; --user-bg-color: #1a1511;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;width:100%}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text-primary);line-height:1.6}
h1,h2,h3,h4,h5,h6{font-family:Georgia,'Times New Roman',serif;font-weight:500;letter-spacing:-.5px}
::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:var(--accent)}

/* Login */
.login-body{min-height:100vh;background:linear-gradient(180deg,#f8f3e6 0%,#efe4d0 100%);display:flex;align-items:center;justify-content:center;padding:24px}
.login-shell{width:min(420px,100%)}
.login-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:0 18px 48px rgba(45,36,22,.14);padding:34px}
.login-kicker{font-size:.78rem;text-transform:uppercase;letter-spacing:.12em;color:var(--accent-dark);font-weight:700;margin-bottom:.4rem}
.login-panel h1{font-size:2.3rem;margin-bottom:1.4rem;color:var(--text-primary)}
.login-form{display:flex;flex-direction:column;gap:1rem}
.login-form label{display:flex;flex-direction:column;gap:.4rem;font-size:.84rem;font-weight:600;color:var(--text-secondary)}
.login-form input{width:100%;padding:.72rem .85rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);color:var(--text-primary);font-size:1rem}
.login-form input:focus{outline:2px solid var(--accent-light);border-color:var(--accent)}
.login-form button{margin-top:.35rem}
.login-form button:disabled{opacity:.65;cursor:wait}
.login-error{min-height:1.2rem;color:#a93226;font-size:.84rem}

/* ── Pages ── */
.page{display:flex;flex-direction:column;height:100vh;height:100dvh;min-height:100svh;overflow:hidden}

/* ── Header ── */
.header{padding:1rem 2rem;background:var(--bg-card);border-bottom:1px solid var(--border);box-shadow:0 1px 3px rgba(0,0,0,.03);display:flex;align-items:center;gap:1rem;flex-shrink:0}
.settings-btn,.icon-btn{background:none;border:none;cursor:pointer;opacity:.7;transition:opacity .2s,color .2s;padding:.4rem;display:flex;align-items:center;justify-content:center;color:var(--text-secondary)}
.settings-btn:hover,.icon-btn:hover{opacity:1;color:var(--accent)}
.icon-btn.bookmarked{opacity:1;color:#d4a574!important}
.icon-btn.bookmarked svg{fill:#d4a574}
.bookmark-dropdown-wrap{position:relative}
.bookmark-dropdown{display:none;position:absolute;top:100%;right:0;margin-top:4px;background:var(--bg-card);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.12);min-width:180px;max-width:280px;max-height:300px;overflow-y:auto;z-index:500}
.bookmark-dropdown.open{display:block}
.bookmark-dropdown-item{padding:.5rem .75rem;font-size:.82rem;color:var(--text-primary);cursor:pointer;transition:background .15s;border-bottom:1px solid var(--border-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bookmark-dropdown-item:last-child{border-bottom:none}
.bookmark-dropdown-item:hover{background:var(--accent-light);color:var(--accent)}
.bookmark-dropdown-empty{padding:.6rem .75rem;font-size:.8rem;color:var(--text-secondary);text-align:center}
.settings-btn svg,.icon-btn svg{width:20px;height:20px}
.auto-scroll-top-btn{min-width:68px;height:34px;padding:0 .75rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);color:var(--text-secondary);font-size:.82rem;font-weight:700;cursor:pointer;transition:all .2s;flex-shrink:0}
.auto-scroll-top-btn:hover{border-color:var(--accent);color:var(--accent)}
.auto-scroll-top-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}
.back-btn{padding:.5rem .9rem;background:var(--bg);border:1px solid var(--border);color:var(--text-primary);border-radius:3px;cursor:pointer;font-size:.85rem;transition:all .2s;display:flex;align-items:center;gap:.4rem;flex-shrink:0}
.back-btn:hover{border-color:var(--accent);color:var(--accent)}
.back-btn svg{width:16px;height:16px}
.home-btn{width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--bg);color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0;padding:0}
.home-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light)}
.home-btn svg{width:16px;height:16px}
.title{font-size:1.4rem;color:var(--text-primary);flex-grow:1;text-align:center}
.spacer{width:3rem;flex-shrink:0}

/* ── Buttons ── */
.btn{padding:.65rem 1.3rem;border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:4px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff}
.btn-sm{padding:.4rem .8rem;font-size:.8rem}
.btn-danger{background:#c0392b;border-color:#c0392b;color:#fff}
.btn-danger:hover{background:#a93226}
.filter-btn{padding:.4rem .85rem;border:1px solid var(--border);background:var(--bg);color:var(--text-secondary);border-radius:3px;font-size:.85rem;cursor:pointer;transition:all .2s;font-weight:500}
.filter-btn:hover{border-color:var(--accent);color:var(--accent)}
.filter-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}

/* ── Modal ── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:1000}
.modal-content{background:var(--bg-card);border-radius:8px;width:90%;max-width:480px;max-height:min(85vh,calc(100dvh - 32px));overflow-y:auto;box-shadow:0 10px 40px rgba(0,0,0,.15)}
.modal-header{padding:1.2rem 1.5rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}
.modal-header h2{font-size:1.15rem}
.modal-body{padding:1.5rem;display:flex;flex-direction:column;gap:1.5rem}
.close-btn{background:none;border:none;cursor:pointer;color:var(--text-secondary);transition:color .2s}
.close-btn:hover{color:var(--text-primary)}
.close-btn svg{width:24px;height:24px}

/* ── Settings controls ── */
.setting-group{display:flex;flex-direction:column;gap:.6rem}
.setting-group label{font-size:.85rem;font-weight:600;color:var(--text-primary)}
.button-group{display:flex;gap:.5rem}
.theme-btn,.font-btn,.loading-mode-btn{flex:1;padding:.5rem;border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:3px;cursor:pointer;font-size:.8rem;transition:all .2s}
.theme-btn:hover,.font-btn:hover,.loading-mode-btn:hover{border-color:var(--accent);color:var(--accent)}
.theme-btn.active,.font-btn.active,.loading-mode-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}
.setting-hint{margin:0;color:var(--text-secondary);font-size:.76rem;line-height:1.55}
.slider-container{display:flex;align-items:center;gap:.8rem}
.slider{flex:1;height:4px;border-radius:2px;background:var(--border);outline:none;-webkit-appearance:none}
.slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent);cursor:pointer}
.slider-container span{font-size:.8rem;color:var(--text-secondary);min-width:36px;text-align:right}
.keybind-table{width:100%;border-collapse:collapse}
.keybind-table td{padding:.45rem .5rem;vertical-align:middle;border-bottom:1px solid var(--border-light)}
.keybind-table td:first-child{font-size:.85rem;color:var(--text-primary);white-space:nowrap}
.keybind-table td:nth-child(2){text-align:center}
.key-display{display:inline-block;padding:.25rem .6rem;background:var(--bg);border:1px solid var(--border);border-radius:3px;font-size:.8rem;font-family:monospace;min-width:60px;text-align:center;color:var(--text-primary)}
.key-display.listening{border-color:var(--accent);background:var(--accent-light);color:var(--accent);animation:pulse 1s infinite}
.key-rebind{padding:.2rem .5rem;background:var(--bg);border:1px solid var(--border);border-radius:3px;font-size:.75rem;cursor:pointer;color:var(--text-secondary);transition:all .2s}
.key-rebind:hover{border-color:var(--accent);color:var(--accent)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.6}}

/* ── Home Page ── */
.home-container{display:flex;flex:1;overflow:hidden}
.library-section{flex:1;border-right:1px solid var(--border);display:flex;flex-direction:column;padding:2rem;overflow-y:auto}
.library-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.2rem}
.library-header h2{font-size:1.15rem}
.add-book-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--accent);border:none;border-radius:50%;cursor:pointer;color:#fff;transition:all .2s;flex-shrink:0}
.add-book-btn:hover{background:var(--accent-dark);transform:scale(1.1)}
.add-book-btn svg{stroke:#fff}
.admin-btn{padding:.48rem .9rem;border:1px solid var(--border);border-radius:4px;background:var(--text-primary);color:var(--bg-card);font-size:.82rem;font-weight:700;cursor:pointer;align-items:center;justify-content:center;transition:all .2s}
.admin-btn:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff}
.loadout-btn{text-decoration:none;white-space:nowrap}
.logout-btn{padding:.48rem .82rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);color:var(--text-secondary);font-size:.8rem;font-weight:700;cursor:pointer;transition:all .2s;flex-shrink:0}
.logout-btn:hover{border-color:#a93226;color:#a93226;background:rgba(169,50,38,.08)}
.account-setting{border-top:1px solid var(--border);padding-top:1rem}
.settings-logout-btn{width:100%;padding:.72rem 1rem;background:#fff7f5;color:#8f2d24;border-color:#e8c8c2}
.settings-logout-btn:hover{background:#fbe9e5;border-color:#a93226;color:#8f2d24}
.credit-line{text-align:center;padding:1rem 0 .5rem;font-size:.75rem;color:var(--text-secondary);opacity:.6;font-style:italic}
.books-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1.2rem}
.book-card{padding:1.3rem;background:var(--bg-card);border:2px solid var(--border);border-radius:6px;cursor:pointer;transition:all .25s cubic-bezier(.22,1,.36,1);text-align:center;display:flex;flex-direction:column;gap:.5rem}
.book-card:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:0 4px 12px rgba(184,153,104,.15)}
.book-card.selected{background:var(--accent-light);border-color:var(--accent)}
.book-card-title{font-size:.9rem;font-weight:600;color:var(--text-primary)}
.book-card-meta{font-size:.75rem;color:var(--text-secondary)}
.detail-panel{flex:1;padding:2rem;overflow-y:auto}
.empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);font-size:1rem}
.book-detail{animation:fadeUp .5s cubic-bezier(.22,1,.36,1)}
.book-detail h2{font-size:1.4rem;margin-bottom:.4rem}
.book-detail-author{color:var(--accent);font-size:.85rem;margin-bottom:.3rem;font-style:italic}
.book-detail-volumes{color:var(--text-secondary);font-size:.85rem;margin-bottom:1rem}
.book-detail-type{color:var(--text-secondary);font-size:.85rem;margin-bottom:1rem}
.progress-section{margin-bottom:1.5rem}
.progress-label{font-size:.8rem;color:var(--text-secondary);margin-bottom:.4rem;font-weight:500}
.progress-bar{width:100%;height:6px;background:var(--border-light);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .4s}
.actions{display:flex;gap:.8rem;flex-wrap:wrap}
.offline-cache-btn{border-color:var(--accent);color:var(--accent-dark);background:linear-gradient(180deg,var(--bg-card),var(--accent-light))}
.offline-cache-btn:hover{background:var(--accent-light);color:var(--accent-dark)}
.offline-cache-btn:disabled{opacity:.72;cursor:wait}
.offline-cache-done{background:#294837;border-color:#294837;color:#fff}
.offline-cache-done:hover{background:#294837;border-color:#294837;color:#fff}

/* Root dashboard */
.admin-page{background:linear-gradient(180deg,var(--bg) 0%,var(--bg-card) 100%)}
.admin-header .title{text-align:left;flex-grow:0}
.admin-workbench{flex:1;overflow-y:auto;padding:1.6rem 2rem 2.4rem;display:flex;flex-direction:column;gap:1rem}
.admin-hero{display:flex;justify-content:space-between;gap:1.2rem;align-items:flex-end;padding:1.3rem 1.4rem;border:1px solid var(--border);border-radius:8px;background:linear-gradient(135deg,var(--bg-card),var(--accent-light));box-shadow:0 10px 30px rgba(45,36,22,.08)}
.admin-kicker{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-dark);font-weight:800;margin-bottom:.15rem}
.admin-hero h2{font-size:1.85rem;margin-bottom:.3rem;color:var(--text-primary)}
.admin-hero p{max-width:560px;color:var(--text-secondary);font-size:.94rem}
.admin-metrics{display:grid;grid-template-columns:repeat(2,minmax(92px,1fr));gap:.75rem;flex-shrink:0}
.admin-metrics div{padding:.75rem .9rem;border:1px solid rgba(139,115,85,.22);border-radius:6px;background:rgba(250,247,238,.72);min-width:92px}
.admin-metrics strong{display:block;font-size:1.45rem;line-height:1;color:var(--text-primary)}
.admin-metrics span{display:block;margin-top:.25rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);font-weight:700}
.admin-toolbar{display:flex;gap:.75rem;align-items:center}
.admin-toolbar input{flex:1;padding:.72rem .9rem;border:1px solid var(--border);border-radius:5px;background:var(--bg-card);color:var(--text-primary);font-size:.95rem}
.admin-toolbar input:focus{outline:2px solid var(--accent-light);border-color:var(--accent)}
.admin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:.85rem}
.admin-book-card{display:flex;flex-direction:column;gap:.85rem;padding:1rem;border:1px solid var(--border);border-radius:8px;background:var(--bg-card);box-shadow:0 4px 16px rgba(45,36,22,.04)}
.admin-book-main h3{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:1rem;font-weight:760;letter-spacing:0;margin-bottom:.35rem;color:var(--text-primary)}
.admin-book-meta{display:flex;flex-wrap:wrap;gap:.35rem .75rem;color:var(--text-secondary);font-size:.78rem}
.admin-open-btn{align-self:flex-start}
.admin-user-chips{display:flex;flex-wrap:wrap;gap:.45rem}
.admin-user-chip{min-height:32px;padding:.35rem .65rem;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text-secondary);font-size:.8rem;font-weight:700;cursor:pointer;transition:all .16s}
.admin-user-chip:hover{border-color:var(--accent);color:var(--accent)}
.admin-user-chip.installed{background:#294837;border-color:#294837;color:#fff}
.admin-user-chip.installed:hover{background:#6f2e2e;border-color:#6f2e2e;color:#fff}
.admin-empty{grid-column:1/-1;height:auto;padding:2rem}

/* ── Import Progress ── */
.modal-sm{max-width:360px}
.import-spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto}
@keyframes spin{to{transform:rotate(360deg)}}
.import-progress-bar{width:100%;height:4px;background:var(--border-light);border-radius:2px;overflow:hidden;margin-top:1rem}
.import-progress-fill{height:100%;background:var(--accent);border-radius:2px;transition:width .3s}

/* ── Chapter Browser (volume accordion) ── */
.chapter-browser-container{flex:1;padding:2rem;overflow-y:auto;display:flex;flex-direction:column}
.continue-reading-btn{padding:.7rem 1.3rem;background:var(--accent);border:none;color:#fff;border-radius:4px;font-size:.9rem;font-weight:600;cursor:pointer;margin-bottom:1.5rem;transition:background .2s;flex-shrink:0}
.continue-reading-btn:hover{background:var(--accent-dark)}
.chapter-tools{display:flex;gap:.75rem;margin-bottom:1rem;flex-shrink:0}
.chapter-tools input{width:100%;padding:.65rem .85rem;background:var(--bg-card);border:1px solid var(--border);border-radius:4px;color:var(--text-primary);font-size:.95rem}
.chapter-tools input:focus{outline:2px solid var(--accent-light);border-color:var(--accent)}
.volume-chapters{display:flex;flex-direction:column;gap:1rem;flex:1}
.volume-group{border:1px solid var(--border);border-radius:6px;overflow:hidden;background:var(--bg-card)}
.volume-group-header{padding:.85rem 1rem;background:var(--accent-light);border-bottom:1px solid var(--border);cursor:pointer;display:flex;align-items:center;font-weight:600;color:var(--text-primary);transition:background .2s;gap:.5rem}
.volume-group-header:hover,.volume-group-header.expanded{background:var(--accent);color:var(--text-primary)}
.volume-group-name{flex:1}
.volume-group-count{font-size:.75rem;font-weight:400;opacity:.7}
.volume-group-toggle{font-size:.75rem;font-weight:bold;transition:transform .2s}
.volume-group-header.expanded .volume-group-toggle{transform:rotate(180deg)}
.volume-group-list{max-height:0;overflow:hidden;transition:max-height .3s}
.volume-group-list.expanded{max-height:2000px;overflow-y:auto}
.chapter-list-item{padding:.6rem .9rem;border-bottom:1px solid var(--border);cursor:pointer;transition:all .2s;color:var(--text-secondary);font-size:.85rem}
.chapter-list-item:last-child{border-bottom:none}
.chapter-list-item:hover{background:var(--accent-light);color:var(--accent)}
.chapter-list-item.read{opacity:.5}
.chapter-list-item.current{background:var(--accent-light);color:var(--accent);font-weight:600}

/* ── Reading Page ── */
.reading-container{flex:1;display:flex;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;align-items:flex-start}
.reading-gutter{flex:0 0 20%;background:var(--bg)}
.reading-content{flex:0 0 60%;display:flex;flex-direction:column;overflow:visible;padding:2rem 0;min-height:100%}
.chapter-nav{padding:0 var(--user-margin);margin-bottom:1.5rem}
.chapter-nav.top{animation:fadeUp .5s cubic-bezier(.22,1,.36,1)}
.nav-info{margin-bottom:1.2rem;text-align:center}
.nav-info h2{font-size:1.6rem;margin-bottom:.3rem}
.volume-label{color:var(--accent);font-size:.8rem;font-weight:600;margin-bottom:.2rem;letter-spacing:.5px}
.nav-info p{color:var(--text-secondary);font-size:.9rem}
.nav-buttons{display:flex;gap:.8rem;flex-wrap:wrap;justify-content:center}
.nav-btn{padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:3px;cursor:pointer;font-size:.85rem;transition:all .2s;color:var(--text-primary)}
.nav-btn:hover{border-color:var(--accent);color:var(--accent)}
.nav-btn:disabled{opacity:.4;cursor:default}
.content-text{padding:0 var(--user-margin);font-family:var(--user-font);font-size:var(--user-font-size);color:var(--user-font-color);line-height:var(--user-line-gap);letter-spacing:calc(var(--user-char-gap) / 2);word-spacing:.08em}
.content-text p{margin-bottom:var(--user-para-gap);text-indent:2em}
.content-text .title-line{font-family:var(--user-title-font);color:var(--user-title-color);font-weight:600;text-indent:0}

/* ── Search ── */
.search-bar{display:flex;gap:.5rem;padding:0 var(--user-margin);margin-bottom:1rem;align-items:center;flex-wrap:wrap}
.search-bar input[type=text]{flex:1;padding:.45rem .7rem;background:var(--bg);border:1px solid var(--border);border-radius:3px;font-size:.85rem;color:var(--text-primary)}
.search-bar .search-info{font-size:.8rem;color:var(--text-secondary);min-width:80px}
.search-full-toggle{display:flex;align-items:center;gap:.3rem;font-size:.8rem;color:var(--text-secondary);cursor:pointer;white-space:nowrap;user-select:none}
.search-full-toggle input[type=checkbox]{accent-color:var(--accent)}
.search-jump-points{display:flex;gap:.4rem;flex:0 0 100%;overflow-x:auto;padding-top:.15rem}
.search-jump-point{max-width:220px;padding:.3rem .55rem;border:1px solid var(--border);border-radius:4px;background:var(--bg-card);color:var(--text-secondary);font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.search-jump-point:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light)}

/* ── Bookmarks ── */
.bookmark-list{display:flex;flex-direction:column;gap:.5rem}
.bookmark-item{display:flex;justify-content:space-between;align-items:center;padding:.6rem .8rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;cursor:pointer;transition:all .2s}
.bookmark-item:hover{border-color:var(--accent);background:var(--accent-light)}
.bookmark-title{font-size:.85rem;color:var(--text-primary)}
.bookmark-del{background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:1rem}
.bookmark-del:hover{color:#c0392b}

/* ── Toast ── */
.toast{position:fixed;bottom:2rem;right:2rem;padding:.8rem 1.3rem;background:var(--bg-card);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.1);font-size:.85rem;color:var(--text-primary);animation:fadeUp .3s;z-index:2000}

@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.auto-page-countdown{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%);padding:.6rem 1.5rem;background:var(--bg-card);border:1px solid var(--accent);border-radius:6px;box-shadow:0 4px 20px rgba(0,0,0,.15);font-size:.9rem;color:var(--accent);font-weight:600;z-index:1500;animation:fadeUp .3s;pointer-events:none}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ── Mobile Layout Optimization ── */
@media (max-width: 768px) {
  body { overflow: hidden; }
  .home-container {
    flex-direction: column-reverse;
    overflow-y: auto;
  }
  .library-section { border-right: none; border-top: 1px solid var(--border); padding: 1rem; overflow-y: visible; }
  .detail-panel { padding: 1rem; overflow-y: visible; flex: none; }
  
  .reading-gutter { display: none; }
  #readingPage { position: relative; height: 100dvh; min-height: 100svh; overflow: hidden; background: var(--user-bg-color); }
  #readingPage .header {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    z-index: 60;
    min-height: 52px;
    padding: calc(env(safe-area-inset-top, 0px) + 0.45rem) 0.55rem 0.45rem;
    gap: 0.35rem;
    justify-content: flex-start;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
    background: var(--bg-card);
    background: color-mix(in srgb, var(--bg-card) 94%, transparent);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    transition: transform .22s ease, opacity .22s ease;
  }
  #readingPage .header::-webkit-scrollbar { display: none; }
  #readingPage.toolbar-hidden .header {
    transform: translateY(calc(-100% - 8px));
    opacity: 0;
    pointer-events: none;
  }
  #readingPage .reading-container {
    height: 100%;
    flex: 1;
    padding-top: calc(52px + env(safe-area-inset-top, 0px));
    scroll-padding-top: calc(62px + env(safe-area-inset-top, 0px));
    overscroll-behavior-y: auto;
    transition: padding-top .22s ease;
  }
  #readingPage.toolbar-hidden .reading-container {
    padding-top: 0;
    scroll-padding-top: 10px;
  }
  .reading-content { flex: 1 1 100%; padding: 1.15rem 0 2.7rem; width: 100%; max-width: 100%; overflow: visible; }
  
  .header { padding: 0.6rem 0.8rem; gap: 0.5rem; justify-content: space-between; }
  .title { font-size: 1.1rem; margin: 0; padding: 0; text-align: left; }
  .icon-btn, .settings-btn, .home-btn, .back-btn { padding: 0.3rem; font-size: 0.8rem; }
  .back-btn svg { width: 14px; height: 14px; }
  .auto-scroll-top-btn { padding: 0 0.5rem; min-width: 50px; font-size: 0.75rem; }
  .spacer { width: 0; display: none; }
  #readingPage .title { display: none; }
  #readingPage .settings-btn,
  #readingPage .icon-btn,
  #readingPage .home-btn,
  #readingPage .back-btn {
    width: 38px;
    height: 38px;
    min-width: 38px;
    padding: 0;
    border-radius: 6px;
  }
  #readingPage .back-btn {
    font-size: 0;
    justify-content: center;
    gap: 0;
  }
  #readingPage .back-btn svg,
  #readingPage .settings-btn svg,
  #readingPage .icon-btn svg,
  #readingPage .home-btn svg {
    width: 18px;
    height: 18px;
  }
  #readingPage .auto-scroll-top-btn {
    height: 38px;
    min-width: 48px;
    padding: 0 .38rem;
    border-radius: 6px;
    font-size: .68rem;
  }
  #readingPage .bookmark-dropdown { right: auto; left: -115px; max-width: 230px; }
  
  .login-panel { padding: 20px; }
  .search-bar {
    position: sticky;
    top: 0;
    z-index: 20;
    flex-direction: column;
    align-items: stretch;
    padding: .75rem clamp(18px, 5vw, 28px);
    margin: 0 0 .8rem;
    background: var(--user-bg-color);
    border-bottom: 1px solid var(--border);
  }
  .search-bar .btn { min-height: 38px; }
  .search-jump-points { padding-bottom: .1rem; }
  .chapter-browser-container { padding: 1rem; }
  .chapter-tools {
    position: sticky;
    top: 0;
    z-index: 5;
    padding: .35rem 0 .7rem;
    background: var(--bg);
  }
  .chapter-tools input { min-height: 42px; font-size: 1rem; }
  .volume-group-header { min-height: 46px; padding: .9rem 1rem; }
  .volume-group-header:hover,
  .volume-group-header.expanded { color: var(--text-primary); }
  .chapter-list-item { min-height: 43px; padding: .72rem 1rem; font-size: .94rem; color: var(--text-primary); }
  .admin-workbench { padding: 1rem; }
  .admin-hero { flex-direction: column; align-items: stretch; padding: 1rem; }
  .admin-hero h2 { font-size: 1.35rem; }
  .admin-toolbar { flex-direction: column; align-items: stretch; }
  .admin-grid { grid-template-columns: 1fr; }
  .admin-user-chip { flex: 1 1 92px; }
  
  .chapter-nav { padding: 0 clamp(18px, 5vw, 28px); margin-bottom: 1rem; }
  .nav-info { margin-bottom: .9rem; }
  .nav-info h2 { font-size: 1.28rem; line-height: 1.35; letter-spacing: 0; }
  .nav-info p { font-size: .84rem; }
  .nav-buttons { gap: .5rem; }
  .nav-btn { flex: 1 1 42%; min-height: 40px; padding: .55rem .65rem; font-size: .86rem; }
  .content-text {
    padding: 0 clamp(18px, 5vw, 28px) !important;
    font-size: clamp(17px, var(--user-font-size), 22px);
    line-height: max(var(--user-line-gap), 1.85);
    letter-spacing: calc(var(--user-char-gap) / 2);
    word-spacing: .08em;
    overflow-wrap: break-word;
  }
  .content-text p { margin-bottom: max(var(--user-para-gap), 1.05em); }
  .content-text .title-line { line-height: 1.45; }
  
  /* Reset auto page modal so it fits */
  .modal-overlay { align-items: flex-end; padding: 0; }
  .modal-content {
    width: 100%;
    max-width: none;
    max-height: min(88dvh, calc(100dvh - 12px));
    margin: 0;
    border-radius: 12px 12px 0 0;
  }
  .modal-header { padding: 1rem 1.1rem; }
  .modal-body { padding: 1rem 1.1rem calc(1rem + env(safe-area-inset-bottom, 0px)); gap: 1rem; }
  .button-group { flex-wrap: wrap; }
  .theme-btn, .font-btn { min-height: 38px; }
  .slider-container { gap: .65rem; }
  .keybind-table td { padding: .55rem .35rem; }
}

/* ── iOS Smooth Auto-scroll Hardware Acceleration ── */
.reading-container {
  will-change: scroll-position;
  transform: translateZ(0);
  -webkit-transform: translateZ(0);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  -webkit-overflow-scrolling: touch;
}
.reading-content {
  transform: translateZ(0);
  -webkit-transform: translateZ(0);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  perspective: 1000;
  -webkit-perspective: 1000;
}
.reading-container.auto-paging {
  /* Disable momentum to sync JS thread with render thread during auto page */
  -webkit-overflow-scrolling: auto !important;
  /* Option: prevent touch interference */
  touch-action: none;
}

/* Tool center uses Reader's existing theme variables. */
[hidden]{display:none!important}
.hub-header{justify-content:space-between;padding:20px max(24px,calc((100vw - 1180px)/2));box-shadow:none}
.hub-brand{display:flex;align-items:baseline;gap:14px;text-decoration:none;color:var(--text-primary);font:28px Georgia,serif;margin-right:auto}
.hub-brand span,.hub-eyebrow{font:600 10px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:2px;color:var(--accent-dark)}
.hub-chip{font-size:12px;border:1px solid var(--border);border-radius:20px;padding:4px 12px;color:var(--text-secondary)}
.hub-chip.is-offline{border-color:var(--accent);color:var(--accent-dark)}
.hub-content{overflow-y:auto;flex:1;padding:48px 24px 24px;width:100%;scrollbar-gutter:stable}
.hub-section,.hub-footer,.hub-update{max-width:1130px;margin-left:auto;margin-right:auto}
.hub-intro{margin:16px 0 42px}.hub-intro h1{font-size:clamp(30px,4vw,46px);margin:10px 0 15px}.hub-intro>p:last-child{color:var(--text-secondary);font-size:15px}
.hub-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.hub-tile{position:relative;min-height:255px;border:1px solid var(--border);border-radius:12px;background:var(--bg-card);padding:28px;text-align:left;color:var(--text-primary);cursor:pointer;transition:transform .18s,border-color .18s,box-shadow .18s;display:flex;flex-direction:column;align-items:flex-start}
.hub-tile:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:0 8px 24px #2d241610}.hub-tile:focus-visible,.hub-brand:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.hub-tile-icon{font:30px/1.3 Georgia,serif;color:var(--accent-dark);height:50px}.hub-tile-number{position:absolute;right:28px;top:28px;font-size:11px;color:var(--text-secondary);letter-spacing:1px}
.hub-tile h2{font-size:25px;margin:14px 0 7px}.hub-tile p{font-size:13px;color:var(--text-secondary);line-height:1.7}.hub-tile-link{font-size:12px;color:var(--accent-dark);margin-top:25px}
.hub-section-heading{display:flex;align-items:center;gap:20px;margin-bottom:26px;flex-wrap:wrap}.hub-section-heading h1{font-size:34px}.hub-import{margin-left:auto}
.hub-panel{padding:30px;border:1px solid var(--border);border-radius:12px;background:var(--bg-card);margin:20px 0}.hub-panel h2{font-size:27px;margin:5px 0 12px}.hub-panel>p,.hub-game p{max-width:780px}.hub-panel p{font-size:14px;color:var(--text-secondary);line-height:1.9}
.hub-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:20px 0 10px}.hub-actions a{text-decoration:none}.hub-actions button:disabled{opacity:.6;cursor:wait}
.hub-hint{font-size:13px;color:var(--text-secondary);line-height:1.9;margin:12px 0}.hub-game{display:flex;gap:28px;align-items:flex-start}.hub-game>img{width:100px;height:100px;border-radius:14px;object-fit:cover;flex-shrink:0}
.hub-footer{display:flex;justify-content:space-between;gap:10px;margin-top:42px;padding-top:18px;border-top:1px solid var(--border);font-size:11px;color:var(--text-secondary);flex-wrap:wrap}
.hub-update{padding:14px 18px;border:1px solid var(--accent);border-radius:8px;background:var(--accent-light);margin-bottom:24px;font-size:13px}.hub-update button{margin-left:12px}
.hub-panel progress{display:block;width:100%;max-width:600px;height:9px;margin:18px 0;accent-color:var(--accent-dark)}
.hub-file-list{display:grid;gap:12px;margin-top:24px}.hub-file-row{display:flex;gap:10px;align-items:center;padding:16px 20px;border:1px solid var(--border);border-radius:8px;background:var(--bg-card)}.hub-file-name{flex:1;overflow-wrap:anywhere}.hub-file-name small{display:block;color:var(--text-secondary);font-size:11px}
.hub-viewer{position:relative;margin-top:24px;padding:20px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px}.hub-viewer video{width:100%;max-height:65vh;background:#111}.hub-viewer iframe{width:100%;height:70vh;border:0;background:white}.hub-viewer img{max-width:100%;max-height:70vh;object-fit:contain}.hub-viewer pre{white-space:pre-wrap;overflow-wrap:anywhere;font:15px/1.8 monospace;max-height:65vh;overflow:auto}.hub-viewer>button{margin-bottom:16px}
.reader-hub-back{font-size:12px;padding:7px 11px}.reader-update{position:fixed;bottom:16px;right:16px;z-index:900;max-width:340px;background:var(--bg-card);border:1px solid var(--accent);border-radius:8px;padding:14px;box-shadow:0 6px 28px #0002;font-size:13px}.reader-update button{margin-top:8px}
@media(max-width:800px){.hub-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hub-header{padding:16px 20px}.hub-content{padding-top:25px}.hub-brand span{display:none}}
@media(max-width:480px){.hub-grid{grid-template-columns:1fr;gap:12px}.hub-tile-settings{grid-column:auto}.hub-tile{min-height:190px;padding:22px}.hub-tile h2{margin-top:8px}.hub-tile-link{margin-top:15px}.hub-content{padding:20px 16px}.hub-intro{margin-bottom:28px}.hub-game{flex-direction:column}.hub-panel{padding:22px}.hub-file-row{flex-wrap:wrap}.hub-file-name{flex-basis:100%}.hub-section-heading{gap:12px}.hub-import{margin-left:0}.reader-hub-back{padding:4px 7px}}

.empty-tool-page{padding:24px;align-items:flex-start}.empty-tool-page>button{flex-shrink:0}.celeste-card{display:flex;align-items:center;gap:24px}.celeste-card>img{width:96px;height:96px;border-radius:14px}.celeste-card-copy{flex:1}.celeste-card-buttons{display:flex;gap:10px}.root-users{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.root-user-card{margin:0}.root-user-card label{display:inline-flex;gap:8px;margin-right:8px;font-size:13px}.root-user-card input{max-width:190px;border:1px solid var(--border);background:var(--bg);color:var(--text-primary);padding:7px;border-radius:4px}.root-save-details{white-space:pre-wrap;overflow-wrap:anywhere;max-height:300px;overflow:auto;padding:18px;margin:20px 0;background:var(--bg-card);border:1px solid var(--border)}@media(max-width:700px){.celeste-card{flex-wrap:wrap}.celeste-card-copy{flex-basis:calc(100% - 124px)}.celeste-card-buttons{width:100%;justify-content:flex-end}.root-users{grid-template-columns:1fr}}

.hub-intro{margin:0 0 26px}.hub-intro h1{font:28px -apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;margin:0}.hub-tile{min-height:175px;padding:24px;border-radius:6px}.hub-tile:hover{transform:none;box-shadow:none}.hub-tile h2{margin:0 0 8px;font:23px -apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.hub-tile-link{margin-top:auto;padding-top:18px}.save-actions{align-items:flex-start}.save-action{max-width:520px}.save-action .hub-hint{margin:8px 0 0}

body[data-reader-only="true"] #hubPage,body[data-reader-only="true"] .reader-hub-back,body[data-reader-only="true"] #offlineCacheBtn,body[data-reader-only="true"] #readerCoreUpdate{display:none!important}.book-request-note{font:13px/1.6 sans-serif;color:var(--text-secondary);margin:12px 0}

/* Reader component controls */
:where(#hubPage,#adminDashboardPage) select{appearance:none;-webkit-appearance:none;background-color:var(--bg-card,var(--bg));background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%238b8176' stroke-width='1.5' viewBox='0 0 16 16'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;border:1px solid var(--border);border-radius:6px;color:var(--text-primary);font:inherit;font-size:14px;line-height:1.5;padding:9px 38px 9px 12px;min-height:40px;max-width:100%;cursor:pointer;color-scheme:light dark}
:where(#hubPage,#adminDashboardPage) option{background:var(--bg-card,var(--bg));color:var(--text-primary)}
:where(#hubPage,#adminDashboardPage) select:hover{border-color:var(--accent)}
:where(#hubPage,#adminDashboardPage) :is(button,a,select,input):focus-visible{outline:2px solid var(--accent);outline-offset:3px}
:where(#hubPage,#adminDashboardPage) button:disabled{cursor:not-allowed;opacity:.5}
:where(#hubPage,#adminDashboardPage) .btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;line-height:1.5;min-height:38px}
:where(#hubPage,#adminDashboardPage) .btn-primary,:where(#hubPage,#adminDashboardPage) .btn-primary:hover{color:#241c12}
:where(#hubPage,#adminDashboardPage) progress{appearance:none;-webkit-appearance:none;display:block;width:100%;height:7px;border:0;border-radius:99px;background:var(--border);overflow:hidden;margin-top:14px;accent-color:var(--accent)}
:where(#hubPage,#adminDashboardPage) progress::-webkit-progress-bar{background:var(--border);border-radius:99px}
:where(#hubPage,#adminDashboardPage) progress::-webkit-progress-value{background:var(--accent);border-radius:99px}
:where(#hubPage,#adminDashboardPage) progress::-moz-progress-bar{background:var(--accent);border-radius:99px}
:where(#hubPage,#adminDashboardPage) [hidden]{display:none!important}
.celeste-card>img{object-fit:contain;background:var(--bg);padding:10px;border:1px solid var(--border);box-sizing:border-box;flex-shrink:0}
.celeste-card>img.pixel-icon{image-rendering:pixelated}
#ownSaveGame{margin-left:10px;min-width:190px}
#rootUsers select{display:block;width:100%;margin-top:16px}
#gameSaveConflict{margin-top:18px;padding:16px;border:1px solid var(--border);border-radius:6px;background:var(--bg)}
#gameSaveConflict .btn{margin:4px 8px 0 0}
#rootUsers .hub-actions{gap:8px}
body:has(#hubPage[style*="display: flex"]) #readerCoreUpdate{display:none!important}
.hub-update:not([hidden]){display:flex;align-items:center;gap:12px}.core-notice-message{flex:1;min-width:0}.hub-update .core-notice-action,.hub-update .core-notice-close,.reader-update .core-notice-action,.reader-update .core-notice-close{margin:0;flex-shrink:0}.hub-update .core-notice-close,.reader-update .core-notice-close{display:inline-flex;align-items:center;justify-content:center;width:34px;min-width:34px;height:34px;min-height:34px;padding:0;border:1px solid var(--border);border-radius:5px;background:transparent;color:var(--text-secondary);font:22px/1 sans-serif;cursor:pointer}.core-notice-close:hover{color:var(--text-primary);background:var(--bg)}.core-notice-close:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.reader-update:not([hidden]){display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 12px;max-width:min(390px,calc(100vw - 32px))}.reader-update .core-notice-close{grid-column:2;grid-row:1}.reader-update .core-notice-action{grid-column:1;justify-self:start}.reader-update .core-notice-message{grid-column:1;grid-row:1}
@media(max-width:680px){.hub-update:not([hidden]){display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:10px 12px}.hub-update .core-notice-close{grid-column:2;grid-row:1}.hub-update .core-notice-action{grid-column:1;justify-self:start}.hub-update .core-notice-message{grid-column:1;grid-row:1}}
@media(max-width:500px){#ownSaveGame{display:block;margin:8px 0 0;width:100%}.celeste-card>img{width:72px;height:72px}.celeste-card-copy{flex-basis:calc(100% - 96px)}}
