*{box-sizing:border-box}:root{--bg:#f6f4ef;--surface:#fff;--surface-2:#faf9f5;--text:#2b2b2b;--muted:#757068;--border:#e3ded4;--accent:#8a6d4f;--danger:#b3261e;--shadow:#1e190f1a;--chrome-bar-height:5.4rem}:root[data-theme=dark]{--bg:#141416;--surface:#1b1b1e;--surface-2:#232326;--text:#d8d5cf;--muted:#8f8b83;--border:#333338;--accent:#c9a97f;--danger:#e57373;--shadow:#00000073}body{background:var(--bg);color:var(--text);margin:0;font-family:system-ui,-apple-system,Segoe UI,Noto Sans TC,Noto Sans CJK TC,sans-serif;position:relative}#root{isolation:isolate;height:100dvh}button,select,input,textarea{font:inherit;color:inherit}button{cursor:pointer;border:1px solid var(--border);background:var(--surface);white-space:nowrap;touch-action:manipulation;border-radius:8px;padding:.4rem .85rem;transition:background .15s,border-color .15s}button:hover{background:var(--surface-2);border-color:var(--muted)}button:disabled{opacity:.5;cursor:default}button.ghost{background:0 0;border-color:#0000}button.ghost:hover{background:var(--surface-2)}button.ghost.active{background:var(--surface-2);border-color:var(--border);color:var(--accent)}select{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:.3rem .5rem}.error{color:#7a2020;background:#fdd;border:1px solid #e99;border-radius:8px;margin:0 2rem;padding:.5rem 1rem}.empty{color:var(--muted);text-align:center;padding:3rem 1rem}.library{flex-direction:column;min-height:100dvh;padding-bottom:2rem;display:flex}.library-header{border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:1rem;padding:1.25rem 2rem;display:flex}.library-header h1{letter-spacing:.04em;color:var(--accent);margin:0 auto 0 0;font-size:1.4rem}.library-actions{gap:.5rem;display:flex}.shelf-actions{flex-wrap:wrap;align-items:center;gap:.75rem;padding:1.25rem 2rem 0;display:flex}.shelf-order{color:var(--muted);white-space:nowrap;align-items:center;gap:.4rem;font-size:.8rem;display:flex}.reading-now{align-items:center;gap:1.5rem;padding:2rem 2rem 0;display:flex}.book-cover.reading-now-cover{flex:none;width:min(34vw,220px)}.reading-now-info{flex-direction:column;gap:.4rem;min-width:0;display:flex}.reading-now-info h2{margin:0;font-size:1.35rem;line-height:1.3}.reading-now-author{color:var(--muted);margin:0;font-size:.9rem}.reading-now-actions{align-items:center;gap:.5rem;margin-top:.5rem;display:flex}.cover-wall{grid-template-columns:repeat(5,minmax(0,1fr));gap:2rem 1.5rem;padding:2rem;display:grid}.book-card{flex-direction:column;gap:.6rem;display:flex;position:relative}button.ghost.book-more{background:var(--surface);opacity:.9;border-radius:999px;padding:.1rem .4rem;line-height:1.2;position:absolute;top:.3rem;right:.3rem}button.ghost.book-more:hover{opacity:1}.book-status{color:var(--muted);flex-direction:column;margin:0;font-size:.8rem;line-height:1.5;display:flex}.book-cover{aspect-ratio:2/3;border:1px solid var(--border);background:var(--surface);width:100%;box-shadow:0 2px 8px var(--shadow);border-radius:6px;justify-content:center;align-items:center;padding:0;transition:transform .15s,box-shadow .15s;display:flex;overflow:hidden}.book-cover:hover{box-shadow:0 6px 16px var(--shadow);transform:translateY(-3px)}.book-cover img{object-fit:cover;width:100%;height:100%}.book-cover span{padding:.5rem;font-weight:600}.book-info{flex-direction:column;gap:.15rem;display:flex}.book-info strong{font-size:.95rem;line-height:1.3}.book-info small{color:var(--muted)}.alert-popup{z-index:30;border:1px solid var(--border);background:var(--surface);max-width:min(24rem,100vw - 2rem);box-shadow:0 12px 32px var(--shadow);border-radius:12px;flex-direction:column;gap:.75rem;padding:1.25rem;display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.alert-title{margin:0;font-size:1rem}button.danger{border-color:var(--danger);color:var(--danger)}button.danger:hover{background:var(--danger);color:var(--surface)}.reader{height:100dvh;position:relative;overflow:hidden}.chrome-top,.chrome-bottom{z-index:30;background:var(--surface);position:absolute;left:0;right:0}.chrome-top{border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex;top:0}.chrome-bottom{height:var(--chrome-bar-height);border-top:1px solid var(--border);flex-direction:column;justify-content:flex-end;display:flex;bottom:0}.chrome-actions{align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.chrome-settings{margin-left:auto}.reader-title{text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;overflow:hidden}.reader-chapter{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:45%;margin-left:auto;font-size:.85rem;overflow:hidden}.layout-toggle{position:relative}.font-busy-trace{pointer-events:none;width:calc(100% + 2px);height:calc(100% + 2px);position:absolute;inset:-1px;overflow:visible}.font-busy-trace rect{fill:none;stroke:var(--accent);stroke-width:2px;stroke-linecap:round;stroke-dasharray:20 80;animation:2.1s linear infinite font-busy-march}@keyframes font-busy-march{to{stroke-dashoffset:-100px}}@media (prefers-reduced-motion:reduce){.font-busy-trace rect{stroke-dasharray:none;opacity:.75;animation:none}}.sheet-backdrop{top:0;left:0;right:0;bottom:var(--chrome-bar-height);background:#14120e40;transition:opacity .25s;position:fixed}.sheet-backdrop[data-starting-style],.sheet-backdrop[data-ending-style]{opacity:0}.sheet-viewport{pointer-events:none;position:fixed;inset:0}.sheet-popup{pointer-events:auto;left:0;right:0;bottom:var(--chrome-bar-height);background:var(--surface);border-top:1px solid var(--border);max-height:min(60vh,28rem);box-shadow:0 -8px 24px var(--shadow);transform:translateY(max(0px, var(--drawer-swipe-movement-y,0px)));border-radius:14px 14px 0 0;flex-direction:column;transition:transform .3s;display:flex;position:absolute}.sheet-popup[data-starting-style],.sheet-popup[data-ending-style]{transform:translateY(100%)}.sheet-popup[data-swiping]{transition:none}.sheet-header{border-bottom:1px solid var(--border);align-items:center;gap:1rem;padding:.75rem 1rem;display:flex}.sheet-title{margin:0 auto 0 0;font-size:.95rem}.sheet-close{font-size:1rem;line-height:1}.sheet-body{flex:1;padding:.75rem 1rem 1rem;overflow-y:auto}.sheet-list{flex-direction:column;gap:.5rem;display:flex}.sheet-form{flex-direction:column;gap:.75rem;display:flex}.sheet-form label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.85rem;display:flex}.sheet-form select,.sheet-form input{color:var(--text)}.sheet-actions{flex-wrap:wrap;gap:.5rem;margin-top:.15rem;display:flex}.sheet-actions button{padding:.3rem .6rem;font-size:.8rem}.sheet-note{color:var(--muted);margin:0;font-size:.8rem;line-height:1.5}@media (prefers-reduced-motion:reduce){.sheet-popup,.sheet-backdrop{transition:none}.sheet-popup[data-starting-style],.sheet-popup[data-ending-style]{transform:none}}.font-progress{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;height:3px;margin:-.25rem 0 .15rem;overflow:hidden}.font-progress-fill{border-radius:inherit;background:var(--accent);height:100%;transition:width .25s ease-out;position:relative}.font-progress-fill:after{content:"";background:linear-gradient(90deg,#0000,#ffffff8c,#0000);animation:1.4s ease-in-out infinite font-progress-sheen;position:absolute;inset:0}@keyframes font-progress-sheen{0%{transform:translate(-100%)}to{transform:translate(100%)}}.font-progress.indeterminate .font-progress-fill{width:40%;transition:none;animation:1.6s ease-in-out infinite font-progress-slide}.font-progress.indeterminate .font-progress-fill:after{animation:none}@keyframes font-progress-slide{0%{transform:translate(-100%)}50%{transform:translate(250%)}to{transform:translate(-100%)}}@media (prefers-reduced-motion:reduce){.font-progress-fill:after,.font-progress.indeterminate .font-progress-fill{animation:none}.font-progress.indeterminate .font-progress-fill{opacity:.5;width:100%}}.font-toast{z-index:12;background:var(--text);max-width:min(20rem,100% - 2rem);color:var(--bg);text-align:center;box-shadow:0 6px 18px var(--shadow);border-radius:999px;padding:.5rem .9rem;font-size:.8rem;line-height:1.4;animation:.18s ease-out font-toast-in;position:absolute;bottom:1.5rem;left:50%;transform:translate(-50%)}@keyframes font-toast-in{0%{opacity:0;transform:translate(-50%,.4rem)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.font-toast{animation:none}}.reader-body{height:100%;display:flex;position:relative}.toc-item{text-align:left;background:0 0;border:none;border-radius:6px;padding:.35rem .5rem;font-size:.9rem;line-height:1.4}.toc-item:hover{background:var(--surface-2);border:none}.toc-item.current{color:var(--accent);box-shadow:inset 3px 0 0 var(--accent);font-weight:600}.viewer-wrap{background:var(--surface);flex:1;align-items:stretch;min-width:0;display:flex}.viewer{flex:1;min-width:0;position:relative}.viewer-mount{width:100%;height:100%}.highlight-layer{pointer-events:none;position:absolute;inset:0}.highlight-box{border-radius:2px;position:absolute}.page-btn{color:var(--muted);background:0 0;border:none;border-radius:0;width:3rem;font-size:2rem}.page-btn:hover{color:var(--text);background:0 0;border:none}.scrubber{--scrubber-inset:10px;flex:none;position:relative;overflow-x:clip}.scrubber-track{cursor:pointer;touch-action:none;height:22px;position:relative;overflow:hidden}.scrubber-track:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:6px}.scrubber-track:before{content:"";left:var(--scrubber-inset);right:var(--scrubber-inset);background:var(--border);border-radius:999px;height:3px;transition:height .12s;position:absolute;top:50%;transform:translateY(-50%)}.scrubber:hover .scrubber-track:before,.scrubber.dragging .scrubber-track:before{height:6px}.scrubber-fill{background:var(--accent);border-radius:999px;height:3px;transition:height .12s;position:absolute;top:50%;transform:translateY(-50%)}.scrubber:hover .scrubber-fill,.scrubber.dragging .scrubber-fill{height:6px}.scrubber-thumb{background:var(--accent);opacity:0;border-radius:50%;width:14px;height:14px;transition:opacity .12s;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 1px 3px #00000040}.scrubber:hover .scrubber-thumb,.scrubber.dragging .scrubber-thumb{opacity:1}.scrubber-cap{pointer-events:none;border-radius:50%;width:6px;height:6px;position:absolute;top:50%;transform:translate(-50%,-50%)}.scrubber-cap-head{left:var(--scrubber-inset);background:var(--muted)}.scrubber-cap-tail{left:calc(100% - var(--scrubber-inset));border:1px solid var(--muted)}.scrubber-rtl .scrubber-cap-head{left:calc(100% - var(--scrubber-inset))}.scrubber-rtl .scrubber-cap-tail{left:var(--scrubber-inset)}.scrubber.disabled{opacity:.45}.scrubber.disabled .scrubber-track{cursor:default}.scrubber-preview{background:var(--surface);border:1px solid var(--border);pointer-events:none;white-space:nowrap;border-radius:8px;flex-direction:column;align-items:center;gap:.15rem;max-width:70vw;margin-bottom:8px;padding:.35rem .6rem;display:flex;position:absolute;bottom:100%;transform:translate(-50%);box-shadow:0 4px 16px #0000002e}.scrubber-chapter{text-overflow:ellipsis;max-width:60vw;color:var(--text);font-size:.9rem;overflow:hidden}.scrubber-pct{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.8rem}.highlight-toolbar{background:var(--surface);border:1px solid var(--border);box-shadow:0 8px 24px var(--shadow);border-radius:12px;align-items:center;gap:.5rem;padding:.5rem .75rem;display:flex;position:fixed;top:0;left:0}.swatch{border:1px solid #00000026;border-radius:50%;width:1.6rem;height:1.6rem;padding:0}.swatch:hover{transform:scale(1.1)}.annotation-item{background:var(--surface-2);border-left:3px solid #f7e463;border-radius:0 8px 8px 0;padding:.5rem .7rem}.annotation-item blockquote{cursor:pointer;margin:0 0 .3rem;font-size:.88rem;line-height:1.5}.annotation-item blockquote:hover{text-decoration:underline}.note-text{color:var(--muted);margin:.2rem 0;font-size:.85rem}.note-editor{flex-direction:column;gap:.3rem;display:flex}.note-editor textarea{resize:vertical;background:var(--surface);border:1px solid var(--border);border-radius:6px;min-height:4rem;padding:.4rem;font-size:.85rem}.annotation-actions{gap:.4rem;margin-top:.3rem;display:flex}.annotation-actions button{padding:.15rem .45rem;font-size:.75rem}.drawer-backdrop{background:#14120e59;transition:opacity .25s;position:fixed;inset:0}.drawer-backdrop[data-starting-style],.drawer-backdrop[data-ending-style]{opacity:0}.drawer-viewport{pointer-events:none;position:fixed;inset:0}.drawer-popup{pointer-events:auto;background:var(--surface);border-left:1px solid var(--border);width:min(26rem,100%);height:100%;box-shadow:-8px 0 24px var(--shadow);transform:translateX(var(--drawer-swipe-movement-x,0px));flex-direction:column;transition:transform .3s;display:flex;position:absolute;top:0;right:0}.drawer-popup[data-starting-style],.drawer-popup[data-ending-style]{transform:translate(100%)}.drawer-popup[data-swiping]{transition:none}.drawer-header{border-bottom:1px solid var(--border);align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.drawer-title{margin:0 auto 0 0;font-size:1.1rem}.drawer-close{font-size:1rem;line-height:1}.drawer-body{flex-direction:column;flex:1;gap:1.75rem;padding:1.25rem;display:flex;overflow-y:auto}.drawer-section{flex-direction:column;gap:.75rem;display:flex}.drawer-section-title{letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--border);margin:0;padding-bottom:.35rem;font-size:.7rem;font-weight:600}.drawer-section label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.85rem;display:flex}.drawer-section select,.drawer-section input{color:var(--text)}.drawer-section input[type=email],.drawer-section input[inputmode=numeric]{background:var(--surface);border:1px solid var(--border);border-radius:6px;width:100%;padding:.4rem .6rem}.drawer-section form{flex-direction:column;gap:.6rem;display:flex}.drawer-actions{flex-wrap:wrap;gap:.5rem;display:flex}.drawer-lede{margin:0;font-size:.95rem;line-height:1.6}.drawer-note{color:var(--muted);margin:0;font-size:.8rem;line-height:1.5}.drawer-list{flex-direction:column;gap:.4rem;margin:0;padding:0;font-size:.85rem;list-style:none;display:flex}.drawer-list li{justify-content:space-between;gap:1rem;display:flex}.price-lines{gap:.35rem 0;margin:0;font-size:.85rem;display:grid}.price-lines dt{font-weight:600}.price-lines dd{color:var(--muted);margin:0 0 .5rem;line-height:1.5}.auth-pending{color:var(--accent);margin:0;font-size:.85rem;line-height:1.5}@media (prefers-reduced-motion:reduce){.drawer-popup,.drawer-backdrop{transition:none}.drawer-popup[data-starting-style],.drawer-popup[data-ending-style]{transform:none}}@media (width<=700px){.library-header{gap:.5rem .75rem;padding:.75rem 1rem}.shelf-actions{padding:1rem 1rem 0}.cover-wall{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem 1rem;padding:1rem}.reading-now{gap:1rem;padding:1.25rem 1rem 0}.reading-now-info h2{font-size:1.1rem}.chrome-top,.chrome-actions{gap:.25rem;padding:.4rem .5rem}.chrome-top button,.chrome-actions button{padding:.35rem .5rem;font-size:.85rem}.page-btn{display:none}.highlight-toolbar{flex-wrap:wrap;justify-content:center;max-width:calc(100vw - 1.5rem)}.error{margin:0 1rem}}
