:root{--bg:#f6f5f3;--fg:#1c1b19;--muted:#6b6862;--line:#dedbd5;--accent:#2f5d50;--accent-strong:#234a3f;--accent-soft:#e5eeea;--danger:#a33a2c;--amber:#c98b00;accent-color:var(--accent)}*{box-sizing:border-box}body{background:var(--bg);color:var(--fg);-webkit-text-size-adjust:100%;margin:0;font:15px/1.6 system-ui,-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}a{color:var(--accent)}a:hover{color:var(--accent-strong)}button{font:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input:focus-visible,textarea:focus-visible,select:focus-visible{outline-offset:0}.hint{color:var(--muted);margin:0;font-size:13px}.hint.small{font-size:12px}.error{color:var(--danger);margin:0;font-size:13px}.notice{background:var(--accent-soft);color:var(--accent-strong);border-radius:8px;margin:0;padding:8px 12px;font-size:13px}.brand{letter-spacing:.06em;text-transform:uppercase;color:var(--accent);margin:0;font-size:12px;font-weight:600}.btn,.btn-secondary,.btn-danger{cursor:pointer;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:6px;height:34px;padding:0 14px;font-size:14px;font-weight:500;line-height:1;text-decoration:none;transition:background-color .12s,border-color .12s;display:inline-flex}.btn{background:var(--accent);color:#fff;border:1px solid var(--accent)}.btn:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:#fff}.btn-secondary{color:var(--fg);border:1px solid var(--line);background:#fff}.btn-secondary:hover{color:var(--fg);background:#fbfaf8;border-color:#b9b5ad}.btn-danger{color:var(--danger);background:#fff;border:1px solid #e3c4bf}.btn-danger:hover{border-color:var(--danger);background:#fbf1ef}.btn:active,.btn-secondary:active,.btn-danger:active{transform:translateY(1px)}.btn:disabled,.btn-secondary:disabled,.btn-danger:disabled{opacity:.55;cursor:default;transform:none}.btn-sm{height:28px;padding:0 10px;font-size:13px}.login{place-items:center;min-height:100dvh;padding:24px;display:grid}.auth{justify-items:center;gap:14px;width:min(320px,100%);margin-top:-6vh;display:grid}.auth h1{letter-spacing:-.01em;margin:0 0 10px;font-size:22px;font-weight:600}.auth-notice{color:var(--muted);margin:-8px 0 4px;font-size:13px}.auth input{width:100%;height:48px;font:inherit;text-align:center;color:var(--fg);border:1px solid var(--line);background:#fff;border-radius:10px;padding:0 14px;font-size:16px}.auth input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.auth input[aria-invalid=true]{border-color:var(--danger)}.auth input::placeholder{color:#a8a49d}.auth input.code-input{letter-spacing:.1em;text-transform:uppercase;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:18px}.auth input.code-input::placeholder{letter-spacing:0;text-transform:none;font-family:system-ui,-apple-system,sans-serif;font-size:16px}.auth-error{color:var(--danger);text-align:center;margin:-4px 0 0;font-size:13px;line-height:1.5}.auth button{background:var(--accent);color:#fff;cursor:pointer;border:0;border-radius:10px;width:100%;height:48px;font-weight:600}.auth button:hover{background:var(--accent-strong)}.auth button:disabled{opacity:.6;cursor:progress}.login-card{border:1px solid var(--line);background:#fff;border-radius:14px;gap:10px;width:min(400px,100%);padding:32px;display:grid}.login-card h1{margin:0;font-size:20px;line-height:1.3}.login-card .btn{justify-self:start;margin-top:8px}.shelf{max-width:1120px;margin:0 auto;padding:40px 24px 64px}.shelf-head{justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:28px;display:flex}.shelf-head h1{margin:2px 0;font-size:26px;line-height:1.25}.shelf-notice{margin-bottom:20px}.book-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:14px;margin:0;padding:0;list-style:none;display:grid}.book-card{border:1px solid var(--line);height:100%;color:inherit;background:#fff;border-radius:12px;gap:16px;padding:14px;text-decoration:none;transition:border-color .12s,box-shadow .12s;display:flex}.book-card:hover{border-color:var(--accent);color:inherit;box-shadow:0 2px 12px #0000000f}.book-card:active{transform:translateY(1px)}.book-cover{aspect-ratio:612/783;background:var(--bg);border-radius:3px;flex:0 0 76px;align-self:flex-start;overflow:hidden;box-shadow:0 1px 3px #0003}.book-cover img{object-fit:cover;width:100%;height:100%;display:block}.book-info{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.course{color:var(--accent);letter-spacing:.04em;font-size:12px;font-weight:600}.book-title{font-size:16px;font-weight:600;line-height:1.35}.meta{color:var(--muted);font-size:13px}.progress{gap:6px;margin-top:auto;padding-top:10px;font-size:13px;display:grid}.progress-text strong{color:var(--accent-strong);font-weight:600}.progress-bar{background:#ebe8e3;border-radius:2px;height:4px;overflow:hidden}.progress-bar>span{background:var(--accent);height:100%;display:block}.empty-card{border:1px dashed var(--line);background:#fff;border-radius:12px;padding:28px}.empty-card h2{margin:0 0 4px;font-size:17px}@media (max-width:599px){.shelf{padding:24px 16px 48px}.shelf-head h1{font-size:22px}}.admin{max-width:1180px;margin:0 auto;padding:32px 24px 80px}.admin h1{margin:2px 0 4px;font-size:24px;line-height:1.3}.admin h2{margin:0 0 12px;font-size:17px}.admin h3{color:var(--muted);margin:0 0 8px;font-size:13px;font-weight:600}.admin section{margin-top:36px}.admin .muted,.muted{color:var(--muted)}.admin .nowrap{white-space:nowrap}.admin-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.admin-nav{align-items:center;gap:16px;font-size:14px;display:flex}.admin-nav a{text-decoration:none}.admin-summary{color:var(--muted);margin:12px 0 0;font-size:13px}.admin-back{margin:0 0 12px;font-size:14px}.admin-back a{text-decoration:none}.admin .notice{margin-top:16px}.error-box{color:var(--danger);background:#fbf1ef;border:1px solid #e3c4bf;border-radius:8px;margin:10px 0;padding:10px 12px;font-size:13px}.error-box p{margin:0 0 4px;font-weight:600}.error-box ul{margin:0;padding-left:18px}.field{gap:4px;font-size:13px;display:grid}.field>span{color:var(--fg);font-size:12px;font-weight:600}.field small{color:var(--muted);font-weight:400}.field input,.field select,.row-form input{font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;min-width:0;height:36px;padding:0 10px;font-size:14px}.field input:focus,.field select:focus,.row-form input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.upload-form{border:1px solid var(--line);background:#fff;border-radius:12px;gap:8px;margin-bottom:18px;padding:16px;display:grid}.upload-grid{grid-template-columns:auto 150px minmax(200px,1fr) 190px auto;align-items:end;gap:12px;display:grid}.upload-grid .btn{height:36px}@media (max-width:1000px){.upload-grid{grid-template-columns:1fr 1fr}}.upload-list{gap:6px;margin:0;padding:0;font-size:13px;list-style:none;display:grid}.upload-item{background:var(--bg);border-radius:8px;grid-template-columns:minmax(0,260px) 1fr;align-items:center;gap:4px 14px;padding:6px 10px;display:grid}.upload-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.upload-msg{color:var(--muted)}.upload-item.done .upload-msg{color:var(--accent-strong)}.upload-item.error .upload-msg,.upload-item.conflict .upload-msg{color:var(--danger)}.upload-item .upload-progress{grid-column:1/-1}.upload-progress{background:#ebe8e3;border-radius:3px;height:6px;display:block;overflow:hidden}.upload-progress-bar{background:var(--accent);height:100%;transition:width .2s;display:block}.upload-conflict{background:#fffaf0;border:1px solid #ecd49a;border-radius:8px;gap:6px;padding:10px 12px;font-size:13px;display:grid}.upload-conflict p{margin:0}.upload-conflict label{align-items:flex-start;gap:8px;display:flex}.row-form{flex-wrap:wrap;align-items:end;gap:10px;margin-bottom:14px;display:flex}.row-form .field input{width:280px}.teacher-create{margin-bottom:16px}.table-wrap{border:1px solid var(--line);background:#fff;border-radius:12px;overflow-x:auto}.admin table{border-collapse:collapse;width:100%;font-size:13px}.admin th,.admin td{text-align:left;vertical-align:middle;border-bottom:1px solid #eeebe6;padding:10px 12px}.admin tr:last-child td{border-bottom:0}.admin th{color:var(--muted);background:#fbfaf8;font-size:12px;font-weight:600}.admin table.sticky-head th{z-index:1;position:sticky;top:0}.admin tr.revoked td{color:var(--muted);background:#fbfaf8}.status-cell{overflow-wrap:anywhere;min-width:220px;max-width:420px}.status-cell progress{width:180px;height:6px;accent-color:var(--accent);margin-top:6px;display:block}.badge{vertical-align:1px;border-radius:999px;margin-right:4px;padding:1px 8px;font-size:11px;font-weight:600;line-height:18px;display:inline-block}.badge.ok{background:var(--accent-soft);color:var(--accent-strong)}.badge.busy{color:#8a6400;background:#fff3d6}.badge.err{color:var(--danger);background:#fbe4e0}.badge.off{color:var(--muted);background:#eeebe6}.assign{gap:8px;min-width:260px;display:grid}.assign-books{flex-wrap:wrap;gap:6px 14px;display:flex}.assign-books label{white-space:nowrap;cursor:pointer;align-items:center;gap:5px;display:inline-flex}.assign-books label.disabled{color:#b0aca5;cursor:not-allowed}.assign-actions{align-items:center;gap:10px;display:flex}.assign-status{color:var(--muted);font-size:12px}.ops{justify-items:start;gap:8px;display:grid}.ops-buttons{flex-wrap:wrap;gap:8px;display:flex}.code-banner{border:1px solid var(--accent);background:#fff;border-radius:10px;gap:8px;max-width:520px;margin-top:10px;padding:12px 14px;display:grid}.code-banner p{margin:0;font-size:13px}.code-row{align-items:center;gap:12px;display:flex}.code-banner code{letter-spacing:.12em;-webkit-user-select:all;user-select:all;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:20px;font-weight:600}.book-head .course{margin:0}.book-facts{grid-template-columns:minmax(280px,1fr) auto;align-items:start;gap:24px;display:grid}@media (max-width:900px){.book-facts{grid-template-columns:1fr}}.book-facts dl{grid-template-columns:110px 1fr;gap:10px 16px;margin:0;font-size:14px;display:grid}.book-facts dt{color:var(--muted);font-size:13px}.book-facts dd{margin:0}.page-preview{grid-template-columns:repeat(4,72px);gap:10px;display:grid}.page-preview figure{text-align:center;color:var(--muted);margin:0;font-size:11px}.page-preview img{width:72px;box-shadow:0 0 0 1px var(--line);background:#fff;display:block}.toc-columns{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:start;gap:24px;display:grid}@media (max-width:900px){.toc-columns{grid-template-columns:1fr}}.toc-editor{gap:8px;display:grid}.admin textarea{border:1px solid var(--line);resize:vertical;white-space:pre;background:#fff;border-radius:8px;width:100%;padding:10px;font:13px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;overflow-x:auto}.toc-editor-actions{align-items:center;gap:12px;display:flex}.toc-example{border:1px dashed var(--line);color:var(--muted);background:#fff;border-radius:8px;margin:0;padding:8px 10px;font-size:12px}.toc-preview{border:1px solid var(--line);background:#fff;border-radius:12px;max-height:640px;padding:12px 14px;font-size:13px;overflow:auto}.toc-preview ul{margin:0;padding:0;list-style:none}.toc-preview ul ul{padding-left:16px}.toc-preview-row{justify-content:space-between;gap:12px;padding:3px 0;display:flex}.filters{flex-wrap:wrap;align-items:end;gap:12px;margin:16px 0 0;display:flex}.pager{justify-content:space-between;align-items:center;margin-top:12px;font-size:13px;display:flex}.admin-note{border:1px solid var(--line);background:#fff;border-radius:10px;max-width:760px;margin:0 0 16px;padding:12px 14px}.admin-note code{background:var(--bg);border-radius:4px;padding:1px 5px;font-size:12px}.danger-zone{border-top:1px solid var(--line);padding-top:20px}.danger-zone .hint{max-width:640px;margin-bottom:10px}.reader{background:var(--bg);grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);height:100dvh;display:grid;overflow:hidden}.toolbar{border-bottom:1px solid var(--line);background:#fff;align-items:center;gap:12px;min-width:0;height:48px;padding:0 10px;display:flex}.tb-left{flex:1 1 0;align-items:center;gap:4px;min-width:0;display:flex}.tb-center{flex:none;align-items:center;gap:2px;display:flex}.tb-right{flex:1 1 0;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.tb-back{height:32px;color:var(--muted);white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:0 10px;font-size:13px;text-decoration:none;display:inline-flex}.tb-back:hover{background:var(--bg);color:var(--fg)}.tb-title{align-items:baseline;gap:8px;min-width:0;padding-left:6px;font-size:13px;display:flex}.tb-title .course{flex:none}.title-text{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.icon-btn{width:32px;height:32px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.icon-btn:hover:not(:disabled){background:var(--bg);color:var(--fg)}.icon-btn.on{color:var(--accent)}.icon-btn:disabled{opacity:.35}.page-jump{align-items:center;gap:6px;display:flex}.page-jump-label{color:var(--muted);font-size:12px}.page-jump input{width:58px;height:30px;font:inherit;font-variant-numeric:tabular-nums;text-align:center;border:1px solid var(--line);color:var(--fg);background:#fff;border-radius:7px;padding:0 6px;font-size:14px}.page-jump input:hover{border-color:#c4c0b8}.page-jump input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.page-jump-total{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:12px}.seg-group{border:1px solid var(--line);background:#fff;border-radius:8px;flex:none;align-items:stretch;display:inline-flex;overflow:hidden}.seg{border:0;border-left:1px solid var(--line);min-width:30px;height:30px;color:var(--fg);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0 8px;font-size:15px;line-height:1;display:inline-flex}.seg:first-child{border-left:0}.seg:hover:not(:disabled){background:var(--bg)}.seg:disabled{color:#bdb9b2;cursor:default}.seg:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.zoom-percent{font-variant-numeric:tabular-nums;min-width:56px;font-size:13px}.view-menu{flex:none;position:relative}.view-btn,.bm-btn{border:1px solid var(--line);height:32px;color:var(--fg);cursor:pointer;white-space:nowrap;background:#fff;border-radius:8px;align-items:center;gap:6px;padding:0 10px;font-size:13px;display:inline-flex}.view-btn:hover,.bm-btn:hover{border-color:#b9b5ad}.view-btn.on{border-color:var(--accent);color:var(--accent)}.bm-btn.on{color:var(--amber);background:#fffaf0;border-color:#ecd49a}.vm-panel{z-index:40;border:1px solid var(--line);background:#fff;border-radius:12px;width:320px;max-height:calc(100dvh - 70px);padding:14px;position:absolute;top:calc(100% + 8px);right:0;overflow-y:auto;box-shadow:0 12px 32px #00000024}.vm-panel section+section{border-top:1px solid #eeebe6;margin-top:14px;padding-top:14px}.vm-panel h3{color:var(--muted);margin:0 0 8px;font-size:12px;font-weight:600}.vm-options{grid-template-columns:1fr 1fr;gap:6px;display:grid}.vm-opt{border:1px solid var(--line);height:38px;color:var(--fg);cursor:pointer;text-align:left;background:#fff;border-radius:8px;align-items:center;gap:8px;padding:0 10px;font-size:13px;display:flex}.vm-opt:hover:not(:disabled){border-color:#b9b5ad}.vm-opt.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong);font-weight:600}.vm-opt:disabled{opacity:.45;cursor:not-allowed}.vm-zoom{align-items:center;gap:8px;margin-top:8px;font-size:13px;display:flex}.vm-zoom>span{color:var(--muted);margin-right:auto}.vm-zoom button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:7px;width:32px;height:30px;font-size:15px}.vm-zoom output{text-align:center;font-variant-numeric:tabular-nums;min-width:48px}.vm-switch{cursor:pointer;align-items:flex-start;gap:10px;font-size:13px;display:flex}.vm-switch input{width:16px;height:16px;margin-top:3px}.vm-switch small{color:var(--muted);font-size:12px;display:block}.vm-keys dl{grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:12px;display:grid}.vm-keys dt{color:var(--fg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.vm-keys dd{color:var(--muted);margin:0}@media (hover:none){.vm-keys{display:none}}@media (max-width:1099px){.tb-title{display:none}}@media (max-width:859px){.bm-btn-label{display:none}.bm-btn{justify-content:center;width:36px;padding:0}}@media (max-width:699px){.toolbar{gap:4px;padding:0 4px}.tb-back-label,.page-jump-label,.page-jump-total,.zoom-group,.view-btn-label{display:none}.view-btn{gap:2px;padding:0 8px}.page-jump input{width:64px;font-size:16px}.icon-btn{width:36px;height:36px}.vm-panel{width:auto;position:fixed;top:52px;left:8px;right:8px}.bm-note{font-size:16px}}.reader-body{min-width:0;min-height:0;display:flex;position:relative}.sidebar{border-right:1px solid var(--line);background:#fff;flex-direction:column;flex:none;min-height:0;display:flex;position:relative}.sidebar-tabs{border-bottom:1px solid var(--line);flex:none;align-items:stretch;display:flex}.sidebar-tab{cursor:pointer;height:40px;color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:0 4px;font-size:13px}.sidebar-tab:hover{color:var(--fg)}.sidebar-tab.active{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}.sidebar-close{border:0;border-left:1px solid var(--line);cursor:pointer;color:var(--muted);background:0 0;flex:0 0 44px;font-size:24px;line-height:1}.sidebar-body{overscroll-behavior:contain;flex:1;min-height:0;padding:8px;overflow-y:auto}.sidebar-resizer{cursor:col-resize;z-index:5;touch-action:none;width:8px;height:100%;position:absolute;top:0;right:-4px}.sidebar-resizer:hover,.sidebar-resizer:focus-visible{background:linear-gradient(to right, transparent 3px, var(--accent) 3px, var(--accent) 5px, transparent 5px);outline:none}.panel-empty{color:var(--muted);justify-items:start;gap:8px;margin:0;padding:8px;font-size:13px;display:grid}.panel-empty p{margin:0}.toc ul{margin:0;padding:0;list-style:none}.toc-row{align-items:flex-start;display:flex}.toc-caret{cursor:pointer;width:24px;height:30px;color:var(--muted);background:0 0;border:0;border-radius:6px;flex:0 0 24px;place-items:center;display:grid}.toc-caret svg{transition:transform .12s}.toc-caret.open svg{transform:rotate(90deg)}.toc-caret:hover:not(.placeholder){background:var(--bg);color:var(--fg)}.toc-caret.placeholder{cursor:default}.toc-item{text-align:left;cursor:pointer;min-width:0;color:var(--fg);background:0 0;border:0;border-radius:6px;flex:1;justify-content:space-between;align-items:baseline;gap:10px;padding:6px 8px;font-size:13px;line-height:1.4;display:flex}.toc-row.top>.toc-item{font-weight:500}.toc-item:hover{background:var(--bg)}.toc-item.current{background:var(--accent-soft);color:var(--accent-strong);box-shadow:inset 3px 0 0 var(--accent);font-weight:600}.toc-title{overflow-wrap:anywhere}.toc-page{color:var(--muted);font-variant-numeric:tabular-nums;flex:none;font-size:12px;font-weight:400}.thumbs{grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:12px 8px;padding:4px;display:grid}.thumb{color:var(--muted);cursor:pointer;background:0 0;border:2px solid #0000;border-radius:8px;flex-direction:column;align-items:center;gap:4px;padding:5px;font-size:11px;display:flex;position:relative}.thumb:hover{background:var(--bg)}.thumb-frame{aspect-ratio:612/783;width:100%;box-shadow:0 0 0 1px var(--line);background:#fff;display:block;overflow:hidden}.thumb-frame img{object-fit:contain;width:100%;height:100%;display:block}.thumb.current{border-color:var(--accent);background:var(--accent-soft)}.thumb.current .thumb-label{color:var(--accent-strong);font-weight:600}.thumb-mark{background:var(--amber);clip-path:polygon(0 0,100% 0,100% 100%,50% 74%,0 100%);width:10px;height:14px;position:absolute;top:5px;right:10px}.bookmarks{gap:8px;margin:0;padding:0;list-style:none;display:grid}.bm{border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px 8px 6px}.bm.current{border-color:var(--accent)}.bm-head{align-items:flex-start;gap:6px;display:flex}.bm-go{text-align:left;cursor:pointer;min-width:0;color:var(--fg);background:0 0;border:0;border-radius:6px;flex:1;gap:1px;padding:3px 6px;display:grid}.bm-go:hover{background:var(--bg)}.bm-page{font-size:13px;font-weight:600}.bm-section{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.35;display:-webkit-box;overflow:hidden}.bm-remove{color:#a19d96;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;width:30px;height:30px;display:grid}.bm-remove:hover{color:var(--danger);background:#fbf1ef}.bm-note-wrap{padding:4px 2px 0}.bm-note{resize:none;width:100%;min-height:32px;font:inherit;background:var(--bg);color:var(--fg);border:1px solid #0000;border-radius:7px;padding:6px 8px;font-size:13px;line-height:1.45;display:block;overflow:hidden}.bm-note:hover{border-color:var(--line)}.bm-note:focus{border-color:var(--accent);background:#fff;outline:none}.bm-status{min-height:16px;color:var(--muted);margin:2px 2px 0;font-size:11px}.bm-status.error{color:var(--danger)}.bm-conflict{background:#fffaf0;border:1px solid #ecd49a;border-radius:8px;margin-top:6px;padding:8px;font-size:12px}.bm-conflict p{margin:0 0 4px}.bm-conflict blockquote{white-space:pre-wrap;border-left:3px solid #ecd49a;margin:0 0 8px;padding-left:8px}.bm-conflict-actions{flex-wrap:wrap;gap:6px;display:flex}.bm-conflict-actions button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:7px;height:28px;padding:0 10px;font-size:12px}.viewport{background:var(--bg);overscroll-behavior:contain;touch-action:pan-x pan-y;outline:none;flex:auto;min-width:0;min-height:0;position:relative;overflow:auto}.viewport.pannable{cursor:grab}.viewport.pannable:active{cursor:grabbing}.viewport-canvas{position:relative}.spread{justify-content:safe center;align-items:flex-start;gap:4px;padding:8px 0;display:flex}.page-slot{background:#fff;flex:none;position:relative;box-shadow:0 1px 2px #0000001f,0 3px 10px #00000012}.page-slot:before{content:attr(data-loading);text-align:center;color:#9a968f;font-size:13px;animation:1.6s ease-in-out infinite loading-pulse;position:absolute;top:40%;left:0;right:0}@keyframes loading-pulse{50%{opacity:.4}}.page-img{-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block;position:relative}.page-mark{z-index:1;width:30px;height:36px;color:var(--amber);cursor:pointer;opacity:0;background:0 0;border:0;place-items:center;padding:0;transition:opacity .12s;display:grid;position:absolute;top:0;right:16px}.page-mark svg{width:22px;height:28px}.page-slot:hover .page-mark,.page-mark:focus-visible{opacity:.5}.page-mark:hover,.page-mark.on{opacity:1}@media (hover:none){.page-mark:not(.on){display:none}}.reader.dim .viewport{background:#2d2c2a}.reader.dim .page-img{filter:brightness(.8)contrast(.95)}.reader.dim .page-slot{background:#cfccc6}@media (max-width:899px){.sidebar{z-index:30;position:fixed;top:0;bottom:0;left:0;box-shadow:0 10px 40px #00000040;width:min(340px,88vw)!important}.scrim{z-index:25;background:#00000059;position:fixed;inset:0}}.toasts{z-index:60;pointer-events:none;justify-items:center;gap:8px;width:max-content;max-width:94vw;display:grid;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}.toast{pointer-events:auto;color:#fff;background:#262522;border-radius:10px;align-items:center;gap:12px;padding:10px 10px 10px 16px;font-size:13px;display:flex;box-shadow:0 8px 24px #00000040}.toast-action{color:#a7dcc8;cursor:pointer;background:0 0;border:0;padding:4px 6px;font-weight:600}.toast-close{color:#9e9a93;cursor:pointer;background:0 0;border:0;padding:2px 6px;font-size:18px;line-height:1}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.file-picker{cursor:pointer;align-items:center;gap:8px;min-width:0;display:inline-flex;position:relative}.file-picker-btn{white-space:nowrap;border:1px solid var(--line);background:#fff;border-radius:7px;padding:7px 12px;font-size:13px}.file-picker:hover .file-picker-btn{border-color:var(--accent)}.file-picker:focus-within .file-picker-btn{outline:2px solid var(--accent);outline-offset:1px}.file-picker-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:30ch;font-size:13px;overflow:hidden}.file-picker.has-file .file-picker-name{color:var(--fg)}
