*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-paper: #fcfbf7;--color-paper-alt: #f5f3ec;--color-ink: #1a1814;--color-ink-soft: #4a4640;--color-ink-muted: #8a857d;--color-accent: #5a4a3a;--color-accent-light: #c8b89a;--color-border: #e0dbd0;--color-border-soft: #ede9e0;--color-shadow: rgba(26, 24, 20, .08);--color-overlay: rgba(26, 24, 20, .45);--color-toast-bg: #2a2520;--color-toast-text: #f0ece4;--color-toast-error: #c0392b;--color-toast-success: #5d8a5e;--font-ui: "Noto Sans KR", system-ui, -apple-system, sans-serif;--font-reader: "Gowun Batang", "Noto Serif KR", Georgia, serif;--topbar-height: 56px;--nav-height: 52px;--bottom-height: 36px;--sidebar-width: 300px;--settings-width: 280px;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-in: cubic-bezier(.55, 0, 1, .45);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--duration: .22s;--color-user-bg: #f4f1ea;--color-user-ink: #1a1814;--user-letter-spacing: 0em;--user-line-height: 1.85}html,body{width:100%;height:100%;overflow:hidden;background:var(--color-paper);color:var(--color-ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}#app{width:100%;height:100%;position:relative}.app-screen{width:100%;height:100%;position:absolute;inset:0}#screen-uploader{display:flex;flex-direction:column;background:var(--color-paper);overflow:hidden}.library-topbar{flex:0 0 var(--topbar-height);display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:var(--color-paper);border-bottom:1px solid var(--color-border-soft);z-index:20;gap:12px}.topbar-brand{display:flex;align-items:center;gap:8px;flex-shrink:0}.topbar-logo{font-size:20px;line-height:1}.topbar-title{font-family:var(--font-reader);font-size:18px;font-weight:700;color:var(--color-ink);letter-spacing:-.03em}.topbar-actions{display:flex;align-items:center;gap:8px}.topbar-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border:1px solid var(--color-border);border-radius:8px;background:transparent;font-family:var(--font-ui);font-size:13px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;white-space:nowrap;transition:background var(--duration) var(--ease-out),border-color var(--duration) var(--ease-out),color var(--duration) var(--ease-out),transform var(--duration) var(--ease-out);-webkit-tap-highlight-color:transparent}.topbar-btn:hover{background:var(--color-border-soft);border-color:var(--color-accent-light);color:var(--color-ink)}.topbar-btn:active{transform:scale(.97)}.topbar-btn--primary{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.topbar-btn--primary:hover{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-paper)}.topbar-btn.active{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.library-body{flex:1 1 auto;overflow-y:auto;padding:24px 20px 40px;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.library-body::-webkit-scrollbar{width:5px}.library-body::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.library-header-row{display:flex;align-items:baseline;gap:10px;margin-bottom:16px}.library-section-title{font-size:15px;font-weight:600;color:var(--color-ink);letter-spacing:-.02em}.library-count{font-size:12px;color:var(--color-ink-muted);font-variant-numeric:tabular-nums}.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:16px}.skeleton-card{height:190px;border-radius:10px;background:linear-gradient(90deg,var(--color-border-soft) 25%,var(--color-paper-alt) 50%,var(--color-border-soft) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.4s ease-in-out infinite}@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.book-card{display:flex;flex-direction:column;border-radius:10px;overflow:visible;background:transparent;cursor:pointer;transition:transform .2s var(--ease-out)}.book-card:hover{transform:translateY(-4px)}.book-cover-wrap{position:relative;border-radius:8px;overflow:hidden;aspect-ratio:2 / 3;box-shadow:0 2px 12px var(--color-shadow),0 1px 4px #00000014;transition:box-shadow .2s var(--ease-out)}.book-card:hover .book-cover-wrap{box-shadow:0 8px 28px #1a181429,0 2px 8px #0000001a}.book-cover-img{width:100%;height:100%;object-fit:cover;display:block;border-radius:8px}.book-cover-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:22px;font-weight:700;color:#ffffffd9;letter-spacing:.04em;text-shadow:0 1px 4px rgba(0,0,0,.2)}.book-cover-wrap:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%) translateY(4px);background:var(--color-ink);color:var(--color-paper);font-family:var(--font-ui);font-size:11px;font-weight:400;line-height:1.5;padding:6px 10px;border-radius:7px;white-space:normal;max-width:160px;text-align:center;word-break:keep-all;box-shadow:0 4px 16px #00000038;pointer-events:none;opacity:0;transition:opacity .2s var(--ease-out),transform .2s var(--ease-out);z-index:100}.book-cover-wrap:before{content:"";position:absolute;bottom:calc(100% + 2px);left:50%;transform:translate(-50%) translateY(4px);border:5px solid transparent;border-top-color:var(--color-ink);pointer-events:none;opacity:0;transition:opacity .2s var(--ease-out),transform .2s var(--ease-out);z-index:101}.book-cover-wrap:hover:after,.book-cover-wrap:hover:before,.book-cover-wrap.tooltip-visible:after,.book-cover-wrap.tooltip-visible:before{opacity:1;transform:translate(-50%) translateY(0)}.book-card:first-child .book-cover-wrap:after,.library-grid .book-card:nth-child(4n+1) .book-cover-wrap:after{left:0;transform:translate(0) translateY(4px)}.book-card:first-child .book-cover-wrap:hover:after,.library-grid .book-card:nth-child(4n+1) .book-cover-wrap:hover:after{transform:translate(0) translateY(0)}.library-grid .book-card:nth-child(4n) .book-cover-wrap:after{left:auto;right:0;transform:translate(0) translateY(4px)}.library-grid .book-card:nth-child(4n) .book-cover-wrap:hover:after{transform:translate(0) translateY(0)}.btn-delete-book{position:absolute;top:6px;right:6px;width:24px;height:24px;border-radius:50%;background:#1a18148c;color:#fff;border:none;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s,background .15s;z-index:10}.book-card:hover .btn-delete-book{opacity:1}.btn-delete-book:hover{background:var(--color-toast-error)}.book-card-title{margin-top:7px;font-family:var(--font-ui);font-size:12px;font-weight:500;color:var(--color-ink-soft);line-height:1.4;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%}.library-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:60px 20px;text-align:center}.empty-icon{font-size:52px;line-height:1;filter:grayscale(.3);margin-bottom:4px}.empty-title{font-size:17px;font-weight:600;color:var(--color-ink);letter-spacing:-.02em}.empty-desc{font-size:13px;color:var(--color-ink-muted);font-weight:300;line-height:1.6}.drop-hint{text-align:center;padding:12px;font-size:11px;color:var(--color-ink-muted);letter-spacing:.01em}.drag-overlay{position:fixed;inset:0;z-index:500;background:#fcfbf7eb;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;animation:modal-in .16s var(--ease-out)}.drag-overlay-inner{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 60px;border:3px dashed var(--color-accent-light);border-radius:20px;text-align:center}.drag-overlay-icon{font-size:64px;line-height:1;animation:bounce-icon .8s var(--ease-spring) infinite alternate}@keyframes bounce-icon{0%{transform:translateY(0)}to{transform:translateY(-10px)}}.drag-overlay-inner p{font-size:16px;font-weight:500;color:var(--color-ink-soft)}.import-progress-bar{position:fixed;bottom:0;left:0;right:0;height:44px;z-index:9000;background:var(--color-ink);display:flex;align-items:center;justify-content:center;overflow:hidden}.import-progress-fill{position:absolute;left:0;top:0;bottom:0;background:var(--color-accent);width:0%;transition:width .3s var(--ease-out)}.import-progress-text{position:relative;z-index:1;font-family:var(--font-ui);font-size:13px;font-weight:500;color:var(--color-toast-text);letter-spacing:.01em}#screen-viewer{display:flex;flex-direction:column;background:var(--color-paper);overflow:hidden}.viewer-nav-bar{flex:0 0 var(--nav-height);display:flex;align-items:center;justify-content:space-between;padding:0 12px;background:var(--color-paper);border-bottom:1px solid var(--color-border-soft);z-index:20;gap:8px;transition:transform .28s var(--ease-out),opacity .28s var(--ease-out)}.viewer-nav-bar.nav-hidden{transform:translateY(-100%);opacity:0;pointer-events:none}.nav-left,.nav-right{flex:0 0 auto;display:flex;align-items:center;gap:6px}.nav-title-area{flex:1 1 auto;text-align:center;font-size:13px;font-weight:500;color:var(--color-ink-soft);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 8px}.nav-action-btn{padding:6px 12px;background:transparent;border:1px solid var(--color-border);border-radius:6px;font-family:var(--font-ui);font-size:12px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;white-space:nowrap;transition:background .2s var(--ease-out),border-color .2s var(--ease-out),color .2s var(--ease-out)}.nav-action-btn:hover{background:var(--color-border-soft);border-color:var(--color-accent-light);color:var(--color-ink)}.nav-action-btn.active{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.reader-main-frame{flex:1 1 auto;position:relative;overflow:hidden;display:flex;align-items:stretch}#viewer-viewport{width:100%;height:100%;position:relative;overflow:hidden}#viewer-viewport iframe{border:none!important;display:block;width:100%!important;height:100%!important}.viewer-bottom-bar{flex:0 0 var(--bottom-height);display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:var(--color-paper);border-top:1px solid var(--color-border-soft);z-index:20;transition:transform .28s var(--ease-out),opacity .28s var(--ease-out)}.viewer-bottom-bar.bottom-hidden{transform:translateY(100%);opacity:0;pointer-events:none}.viewer-bottom-bar span{font-size:11px;font-weight:400;color:var(--color-ink-muted);letter-spacing:.03em;font-variant-numeric:tabular-nums;white-space:nowrap}.progress-bar-track{flex:1 1 auto;height:2px;background:var(--color-border-soft);border-radius:1px;margin:0 12px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--color-accent-light);width:0%;transition:width .4s var(--ease-out);border-radius:1px}.floating-arrow-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:30;width:40px;height:64px;display:flex;align-items:center;justify-content:center;background:var(--color-paper);border:1px solid var(--color-border);border-radius:6px;font-size:13px;color:var(--color-ink-muted);cursor:pointer;opacity:.7;transition:opacity .2s,background .2s,color .2s,transform .2s;box-shadow:0 2px 8px var(--color-shadow)}.floating-arrow-btn.prev{left:8px}.floating-arrow-btn.next{right:8px}.floating-arrow-btn:hover{opacity:1;background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.floating-arrow-btn.prev:hover{transform:translateY(-50%) translate(-1px)}.floating-arrow-btn.next:hover{transform:translateY(-50%) translate(1px)}.floating-arrow-btn:active{opacity:.9}.floating-arrow-btn:disabled{opacity:.18;cursor:not-allowed;pointer-events:none}.toc-sidebar{position:absolute;top:var(--nav-height);left:0;width:var(--sidebar-width);height:calc(100% - var(--nav-height));background:var(--color-paper);border-right:1px solid var(--color-border);z-index:50;display:flex;flex-direction:column;box-shadow:4px 0 32px var(--color-shadow);transform:translate(-100%);transition:transform var(--duration) var(--ease-out);overflow:hidden}.toc-sidebar.open{transform:translate(0)}.toc-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border-soft)}.toc-header h3{font-size:15px;font-weight:600;color:var(--color-ink);letter-spacing:-.02em}#btn-toc-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--color-border);border-radius:6px;font-size:12px;color:var(--color-ink-muted);cursor:pointer;transition:background .15s,color .15s}#btn-toc-close:hover{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.toc-list{flex:1 1 auto;overflow-y:auto;padding:8px 0;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.toc-list::-webkit-scrollbar{width:4px}.toc-list::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}.toc-item{display:block;width:100%;padding:10px 20px;background:transparent;border:none;text-align:left;font-family:var(--font-ui);font-size:13px;font-weight:400;color:var(--color-ink-soft);cursor:pointer;line-height:1.5;letter-spacing:-.01em;transition:background .15s,color .15s,padding-left .15s;border-left:2px solid transparent;white-space:normal;word-break:break-word}.toc-item:hover{background:var(--color-paper-alt);color:var(--color-ink);padding-left:24px;border-left-color:var(--color-accent-light)}.toc-item.active{background:var(--color-paper-alt);color:var(--color-ink);font-weight:500;border-left-color:var(--color-accent);padding-left:24px}.toc-item[data-depth="2"]{padding-left:32px;font-size:12px}.toc-item[data-depth="3"]{padding-left:44px;font-size:12px;color:var(--color-ink-muted)}.toc-sidebar-overlay{position:absolute;inset:0;background:var(--color-overlay);z-index:49;opacity:0;pointer-events:none;transition:opacity var(--duration) var(--ease-out)}.toc-sidebar-overlay.visible{opacity:1;pointer-events:auto}.toc-sidebar-overlay.blur-backdrop{backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.settings-panel{position:fixed;top:var(--topbar-height);right:12px;width:var(--settings-width);background:var(--color-paper);border:1px solid var(--color-border);border-radius:12px;box-shadow:0 8px 32px #1a181424,0 2px 8px #1a18140f;z-index:300;display:flex;flex-direction:column;overflow:hidden;opacity:0;transform:translateY(-6px) scale(.98);transform-origin:top right;transition:opacity var(--duration) var(--ease-out),transform var(--duration) var(--ease-out);pointer-events:none;max-height:calc(100vh - var(--topbar-height) - 20px);overflow-y:auto}#screen-viewer .settings-panel,body.viewer-active .settings-panel{top:var(--nav-height)}.settings-panel.open{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}.settings-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 12px;border-bottom:1px solid var(--color-border-soft);position:sticky;top:0;background:inherit;z-index:1}.settings-title{font-size:13px;font-weight:600;color:var(--color-ink);letter-spacing:-.01em}.settings-close-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--color-border);border-radius:5px;font-size:11px;color:var(--color-ink-muted);cursor:pointer;transition:background .15s,color .15s}.settings-close-btn:hover{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.settings-divider{height:1px;background:var(--color-border-soft);margin:0 16px}.settings-row{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;gap:12px}.settings-row--column{flex-direction:column;align-items:flex-start;gap:10px}.settings-label{font-size:12px;font-weight:500;color:var(--color-ink-muted);letter-spacing:.01em;white-space:nowrap;flex-shrink:0}.settings-control{display:flex;align-items:center;gap:6px}.ctrl-btn{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:30px;padding:0 8px;background:var(--color-paper-alt);border:1px solid var(--color-border);border-radius:6px;font-family:var(--font-ui);font-size:12px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;transition:background .15s,border-color .15s,color .15s;user-select:none;-webkit-tap-highlight-color:transparent}.ctrl-btn:hover{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}.ctrl-btn:active{transform:scale(.96)}.ctrl-btn--text{font-size:11px;min-width:40px}.ctrl-btn--text.active{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}.ctrl-value{font-size:12px;font-weight:500;color:var(--color-ink);min-width:36px;text-align:center;font-variant-numeric:tabular-nums}.theme-swatch-control{width:100%;justify-content:flex-start;gap:8px;flex-wrap:wrap}.theme-swatch{display:flex;flex-direction:column;align-items:center;gap:5px;background:transparent;border:none;cursor:pointer;-webkit-tap-highlight-color:transparent}.swatch-preview{display:block;width:48px;height:32px;border-radius:6px;border:2px solid var(--color-border);transition:border-color .15s,transform .15s}.swatch-paper{background:#fcfbf7}.swatch-dark{background:#1a1a1e}.swatch-white{background:#fff}.swatch-custom{background:var(--color-user-bg, #f4f1ea);border-color:var(--color-user-ink, #1a1814)}.theme-swatch:hover .swatch-preview,.theme-swatch.active .swatch-preview{border-color:var(--color-accent);transform:scale(1.06)}.swatch-name{font-size:10px;font-weight:400;color:var(--color-ink-muted)}.theme-swatch.active .swatch-name{color:var(--color-accent);font-weight:600}.custom-theme-builder{padding:12px 16px 16px;display:flex;flex-direction:column;gap:10px;background:var(--color-paper-alt);border-radius:8px;margin:0 16px 8px;border:1px solid var(--color-border-soft)}.theme-builder-row{display:flex;align-items:center;gap:8px}.builder-label{font-size:11px;font-weight:500;color:var(--color-ink-muted);min-width:30px;flex-shrink:0}.builder-input-wrap{display:flex;align-items:center;gap:6px;flex:1}.builder-input-wrap input[type=color]{width:28px;height:28px;border:1px solid var(--color-border);border-radius:5px;padding:2px;cursor:pointer;background:transparent;flex-shrink:0}.builder-input-wrap input[type=text]{flex:1;padding:4px 8px;border:1px solid var(--color-border);border-radius:5px;font-family:var(--font-ui);font-size:11px;font-weight:500;background:transparent;color:var(--color-ink);outline:none;transition:border-color .15s}.builder-input-wrap input[type=text]:focus{border-color:var(--color-accent)}.theme-builder-row input[type=range]{flex:1;height:4px;appearance:none;-webkit-appearance:none;background:var(--color-border);border-radius:2px;outline:none;cursor:pointer}.theme-builder-row input[type=range]::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--color-accent);cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px #00000026}.builder-val{font-size:10px;font-weight:500;color:var(--color-ink-muted);min-width:28px;text-align:right;font-variant-numeric:tabular-nums}.loading-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--color-paper);z-index:100;gap:16px;transition:opacity var(--duration) var(--ease-out)}.loading-overlay.fade-out{opacity:0;pointer-events:none}.spinner{width:36px;height:36px;border:2.5px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-overlay p{font-size:13px;color:var(--color-ink-muted)}.resize-mask{position:fixed;inset:0;z-index:9000;background:#fcfbf7e0;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;animation:resize-mask-fade .22s var(--ease-out)}@keyframes resize-mask-fade{0%{opacity:0}to{opacity:1}}.resize-mask p{font-size:13px;color:var(--color-ink-muted)}.toast-container{position:fixed;bottom:60px;left:50%;transform:translate(-50%);z-index:9999;display:flex;flex-direction:column-reverse;align-items:center;gap:8px;pointer-events:none}.toast{display:inline-flex;align-items:center;padding:10px 18px;background:var(--color-toast-bg);color:var(--color-toast-text);border-radius:8px;font-size:13px;font-weight:400;letter-spacing:-.01em;line-height:1.4;max-width:340px;text-align:center;box-shadow:0 4px 20px #00000038;opacity:0;transform:translateY(12px);animation:toast-in .28s var(--ease-out) forwards;pointer-events:none}.toast.error{background:var(--color-toast-error)}.toast.success{background:var(--color-toast-success)}.toast.out{animation:toast-out .28s var(--ease-in) forwards}@keyframes toast-in{to{opacity:1;transform:translateY(0)}}@keyframes toast-out{to{opacity:0;transform:translateY(8px)}}.modal-overlay{position:fixed;inset:0;background:#1a181480;z-index:200;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:modal-in .22s var(--ease-out)}@keyframes modal-in{0%{opacity:0}to{opacity:1}}.modal-box{background:var(--color-paper);border-radius:12px;width:90%;max-width:500px;box-shadow:0 16px 48px #00000038;display:flex;flex-direction:column;overflow:hidden;animation:modal-box-in .24s var(--ease-out)}@keyframes modal-box-in{0%{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border-soft)}.modal-header h3{font-size:15px;font-weight:600;color:var(--color-ink)}.modal-close-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--color-border);border-radius:6px;font-size:12px;color:var(--color-ink-muted);cursor:pointer;transition:background .15s,color .15s}.modal-close-btn:hover{background:var(--color-ink);color:var(--color-paper)}.modal-body{padding:20px;display:flex;flex-direction:column;gap:14px}.search-input-row{display:flex;gap:8px}.search-input-row input{flex:1;padding:8px 12px;border:1px solid var(--color-border);border-radius:7px;font-family:var(--font-ui);font-size:13px;background:transparent;color:var(--color-ink);outline:none;transition:border-color .15s}.search-input-row input:focus{border-color:var(--color-accent)}.search-results{max-height:320px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.search-result-item:hover{background:var(--color-paper-alt)}mark.fable-search-mark{background:#ffdc328c;color:inherit;padding:0 1px;border-radius:2px;font-weight:500}.stats-row{display:flex;align-items:center;justify-content:space-between;padding:4px 0;font-size:13px}.stats-label{color:var(--color-ink-muted);font-size:12px}.stats-divider{height:1px;background:var(--color-border-soft);margin:4px 0}.goal-track{height:8px;border-radius:4px;background:var(--color-border-soft);overflow:hidden;margin-top:8px}.goal-fill{height:100%;width:0%;background:linear-gradient(90deg,var(--color-accent-light),var(--color-accent));border-radius:4px;transition:width .6s cubic-bezier(.34,1.56,.64,1)}.tts-bar{position:fixed;bottom:44px;left:50%;transform:translate(-50%);background:var(--color-ink);color:var(--color-paper);padding:8px 14px;border-radius:10px;z-index:300;display:flex;align-items:center;gap:12px;box-shadow:0 4px 16px #00000040;animation:toast-in .28s var(--ease-out);min-width:260px}.tts-label{font-size:12px;white-space:nowrap;flex-shrink:0}.tts-progress-wrap{flex:1}.tts-progress-track{height:3px;background:#fff3;border-radius:2px;overflow:hidden}.tts-progress-fill{height:100%;width:0%;background:var(--color-accent-light);transition:width .2s linear;border-radius:2px}.tts-controls{display:flex;gap:6px;flex-shrink:0}.context-menu{position:fixed;bottom:0;left:0;right:0;z-index:400;background:var(--color-paper);border-top:1px solid var(--color-border);border-radius:16px 16px 0 0;padding:12px 16px 28px;display:flex;gap:8px;box-shadow:0 -8px 32px #00000024}.context-menu.slide-up{animation:slide-up .28s var(--ease-out)}@keyframes slide-up{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.ctx-btn{flex:1;padding:10px 8px;background:var(--color-paper-alt);border:1px solid var(--color-border);border-radius:8px;font-family:var(--font-ui);font-size:12px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;text-align:center;transition:background .15s,color .15s}.ctx-btn:hover{background:var(--color-ink);color:var(--color-paper)}.keyboard-hint-layer{position:fixed;inset:0;z-index:500;background:#1a181480;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);animation:modal-in .22s var(--ease-out)}.keyboard-hint-box{background:var(--color-paper);border-radius:14px;padding:24px 28px;width:min(320px,88vw);box-shadow:0 16px 48px #00000038;display:flex;flex-direction:column;gap:14px;animation:modal-box-in .24s var(--ease-out)}.keyboard-hint-title{font-size:15px;font-weight:600;color:var(--color-ink)}.keyboard-hint-box ul{list-style:none;display:flex;flex-direction:column;gap:8px}.keyboard-hint-box li{font-size:13px;color:var(--color-ink-soft);display:flex;align-items:center;gap:8px}kbd{display:inline-block;padding:2px 7px;border:1px solid var(--color-border);border-radius:4px;font-family:var(--font-ui);font-size:11px;background:var(--color-paper-alt);color:var(--color-ink-soft);box-shadow:0 1px 2px #0000001a}.keyboard-hint-close{align-self:flex-end;padding:7px 20px;background:var(--color-ink);color:var(--color-paper);border:none;border-radius:7px;font-family:var(--font-ui);font-size:13px;font-weight:500;cursor:pointer;transition:opacity .15s}.keyboard-hint-close:hover{opacity:.85}.offline-banner{position:fixed;top:0;left:0;right:0;z-index:1000;background:#2a7ae2;color:#fff;padding:7px 16px;font-size:12px;font-weight:500;display:flex;align-items:center;gap:8px;justify-content:center;letter-spacing:.01em;animation:banner-in .3s var(--ease-out)}.offline-banner--viewer{position:absolute;top:var(--nav-height);right:0;left:auto;width:auto;border-radius:0 0 0 8px;padding:5px 12px;font-size:11px;justify-content:flex-start}.offline-dot{width:7px;height:7px;border-radius:50%;background:#fff;flex-shrink:0;animation:dot-pulse 1.5s ease-in-out infinite}@keyframes banner-in{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes dot-pulse{0%,to{opacity:1}50%{opacity:.4}}.scroll-top-btn{position:absolute;right:16px;bottom:calc(var(--bottom-height) + 20px);width:40px;height:40px;border-radius:50%;background:var(--color-ink);color:var(--color-paper);border:none;font-size:14px;cursor:pointer;z-index:40;display:flex;align-items:center;justify-content:center;opacity:.7;box-shadow:0 4px 16px var(--color-shadow);transition:opacity .2s,transform .2s}.scroll-top-btn:hover{opacity:1;transform:translateY(-2px)}body[data-theme=dark],body[data-theme=dark] #screen-uploader{background:#1a1a1e}body[data-theme=dark] .library-topbar{background:#1a1a1e;border-color:#2e2e34}body[data-theme=dark] .topbar-title{color:#c8c6c0}body[data-theme=dark] .topbar-btn{border-color:#2e2e34;color:#a0a0a0}body[data-theme=dark] .topbar-btn:hover{background:#2e2e34;border-color:#444;color:#e0e0e0}body[data-theme=dark] .topbar-btn--primary{background:#3a3a42;border-color:#555;color:#e0e0e0}body[data-theme=dark] .library-section-title{color:#c8c6c0}body[data-theme=dark] .library-body{scrollbar-color:#2e2e34 transparent}body[data-theme=dark] .empty-title{color:#c8c6c0}body[data-theme=dark] .empty-desc{color:#5a5a64}body[data-theme=dark] .book-card-title{color:#8a8882}body[data-theme=dark] .book-cover-wrap:after{background:#e0e0e0;color:#1a1814}body[data-theme=dark] .book-cover-wrap:before{border-top-color:#e0e0e0}body[data-theme=dark] .drag-overlay{background:#1a1a1eeb}body[data-theme=dark] .drag-overlay-inner{border-color:#5a5a64}body[data-theme=dark] .drag-overlay-inner p{color:#c8c6c0}body[data-theme=dark] #screen-viewer,body[data-theme=dark] .viewer-nav-bar,body[data-theme=dark] .viewer-bottom-bar,body[data-theme=dark] .floating-arrow-btn,body[data-theme=dark] .settings-panel,body[data-theme=dark] .toc-sidebar{background:#1a1a1e;border-color:#2e2e34;color:#c8c6c0}body[data-theme=dark] .reader-main-frame{filter:contrast(.96)}body[data-theme=dark] .nav-title-area,body[data-theme=dark] .viewer-bottom-bar span{color:#7a7874}body[data-theme=dark] .nav-action-btn{border-color:#2e2e34;color:#909090}body[data-theme=dark] .nav-action-btn:hover,body[data-theme=dark] .nav-action-btn.active{background:#2e2e34;border-color:#444;color:#e0e0e0}body[data-theme=dark] .floating-arrow-btn{background:#1a1a1e;border-color:#2e2e34;color:#555}body[data-theme=dark] .floating-arrow-btn:hover{background:#2e2e34;border-color:#555;color:#e0e0e0}body[data-theme=dark] .progress-bar-track{background:#2e2e34}body[data-theme=dark] .progress-bar-fill{background:#5a5a64}body[data-theme=dark] .settings-panel{box-shadow:0 8px 32px #00000080}body[data-theme=dark] .settings-title{color:#c8c6c0}body[data-theme=dark] .settings-label{color:#5a5a64}body[data-theme=dark] .settings-divider{background:#2e2e34}body[data-theme=dark] .ctrl-btn{background:#242428;border-color:#2e2e34;color:#909090}body[data-theme=dark] .ctrl-btn:hover,body[data-theme=dark] .ctrl-btn--text.active{background:#3a3a42;border-color:#555;color:#e0e0e0}body[data-theme=dark] .ctrl-value{color:#c8c6c0}body[data-theme=dark] .settings-close-btn{border-color:#2e2e34;color:#555}body[data-theme=dark] .settings-close-btn:hover{background:#2e2e34;color:#e0e0e0}body[data-theme=dark] .toc-header{border-color:#2e2e34}body[data-theme=dark] .toc-header h3{color:#c8c6c0}body[data-theme=dark] #btn-toc-close{border-color:#2e2e34;color:#555}body[data-theme=dark] #btn-toc-close:hover{background:#2e2e34;color:#e0e0e0}body[data-theme=dark] .toc-item{color:#7a7872}body[data-theme=dark] .toc-item:hover,body[data-theme=dark] .toc-item.active{background:#242428;color:#c8c6c0;border-left-color:#5a5a64}body[data-theme=dark] .toc-sidebar-overlay{background:#000000b3}body[data-theme=dark] .loading-overlay,body[data-theme=dark] .resize-mask{background:#1a1a1eeb}body[data-theme=dark] .spinner{border-color:#2e2e34;border-top-color:#5a5a64}body[data-theme=dark] .loading-overlay p,body[data-theme=dark] .resize-mask p{color:#5a5a64}body[data-theme=dark] .modal-box{background:#242428}body[data-theme=dark] .modal-header{border-color:#2e2e34}body[data-theme=dark] .modal-header h3{color:#c8c6c0}body[data-theme=dark] .modal-close-btn{border-color:#2e2e34;color:#666}body[data-theme=dark] .modal-close-btn:hover{background:#2e2e34;color:#e0e0e0}body[data-theme=dark] .search-input-row input{border-color:#2e2e34;color:#c8c6c0}body[data-theme=dark] .stats-label{color:#5a5a64}body[data-theme=dark] .stats-divider{background:#2e2e34}body[data-theme=dark] .context-menu{background:#1a1a1e;border-color:#2e2e34}body[data-theme=dark] .ctx-btn{background:#242428;border-color:#2e2e34;color:#909090}body[data-theme=dark] .ctx-btn:hover{background:#3a3a42;color:#e0e0e0}body[data-theme=dark] .custom-theme-builder{background:#242428;border-color:#2e2e34}body[data-theme=dark] .builder-label{color:#5a5a64}body[data-theme=dark] .builder-input-wrap input[type=text]{border-color:#2e2e34;color:#c8c6c0}body[data-theme=dark] .skeleton-card{background:linear-gradient(90deg,#2e2e34 25%,#242428,#2e2e34 75%);background-size:200% 100%}body[data-theme=dark] .import-progress-bar{background:#2e2e34}body[data-theme=dark] .import-progress-fill{background:#5a5a64}body[data-theme=dark] .import-progress-text{color:#c8c6c0}body[data-theme=white],body[data-theme=white] #screen-uploader{background:#fff}body[data-theme=white] .library-topbar,body[data-theme=white] #screen-viewer,body[data-theme=white] .viewer-nav-bar,body[data-theme=white] .viewer-bottom-bar,body[data-theme=white] .floating-arrow-btn,body[data-theme=white] .settings-panel,body[data-theme=white] .toc-sidebar{background:#fff;border-color:#e0e0e0}body[data-theme=white] .nav-title-area{color:#333}body[data-theme=white] .nav-action-btn{border-color:#ddd;color:#555}body[data-theme=white] .nav-action-btn:hover,body[data-theme=white] .nav-action-btn.active{background:#f0f0f0;border-color:#ccc;color:#111}body[data-theme=white] .floating-arrow-btn{background:#fff;border-color:#ddd;color:#aaa}body[data-theme=white] .floating-arrow-btn:hover{background:#111;color:#fff;border-color:#111}body[data-theme=white] .progress-bar-track{background:#eee}body[data-theme=white] .progress-bar-fill{background:#aaa}body[data-theme=white] .settings-title{color:#111}body[data-theme=white] .settings-label{color:#aaa}body[data-theme=white] .settings-divider{background:#f0f0f0}body[data-theme=white] .ctrl-btn{background:#f8f8f8;border-color:#ddd;color:#555}body[data-theme=white] .ctrl-btn:hover,body[data-theme=white] .ctrl-btn--text.active{background:#111;border-color:#111;color:#fff}body[data-theme=white] .ctrl-value{color:#111}body[data-theme=white] .loading-overlay,body[data-theme=white] .resize-mask{background:#fff}.recent-section{margin-bottom:28px}.recent-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-top:12px}.recent-card{display:flex;align-items:center;gap:12px;padding:10px;border-radius:10px;background:var(--color-paper-alt);border:1px solid var(--color-border-soft);cursor:pointer;transition:transform .2s var(--ease-out),box-shadow .2s var(--ease-out),border-color .2s}.recent-card:hover{transform:translateY(-2px);box-shadow:0 6px 20px var(--color-shadow);border-color:var(--color-accent-light)}.recent-cover{flex:0 0 48px;width:48px;height:64px;border-radius:5px;overflow:hidden;box-shadow:0 1px 4px #0000001f}.recent-cover .book-cover-img,.recent-cover .book-cover-placeholder{width:100%;height:100%}.recent-cover .book-cover-placeholder{font-size:18px}.recent-info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:5px}.recent-title{font-size:13px;font-weight:500;color:var(--color-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.recent-progress-track{height:4px;background:var(--color-border);border-radius:2px;overflow:hidden}.recent-progress-fill{height:100%;background:var(--color-accent);border-radius:2px;transition:width .4s var(--ease-out)}.recent-pct{font-size:10px;color:var(--color-ink-muted);font-variant-numeric:tabular-nums}.folder-section{margin-bottom:24px}.folder-bar{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.folder-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:18px;border:1px solid var(--color-border);background:transparent;font-family:var(--font-ui);font-size:12px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;white-space:nowrap;transition:background .18s var(--ease-out),border-color .18s,color .18s,transform .18s;-webkit-tap-highlight-color:transparent}.folder-chip:hover{background:var(--color-border-soft);border-color:var(--color-accent-light)}.folder-chip:active{transform:scale(.96)}.folder-chip.active{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}.folder-chip-del{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;font-size:9px;background:#0000001f;color:inherit;transition:background .15s}.folder-chip.active .folder-chip-del{background:#ffffff40}.folder-chip-del:hover{background:var(--color-toast-error);color:#fff}.folder-chip--add{border-style:dashed;color:var(--color-ink-muted)}.folder-chip--add:hover{border-color:var(--color-accent);color:var(--color-accent);background:transparent}.book-progress-badge{position:absolute;bottom:6px;left:6px;z-index:6;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600;color:#fff;background:#1a1814b8;font-variant-numeric:tabular-nums;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.book-card-progress{position:absolute;bottom:0;left:0;right:0;height:3px;background:#0000001f;z-index:5}.book-card-progress-fill{height:100%;background:var(--color-accent-light);transition:width .4s var(--ease-out)}.btn-card-menu{position:absolute;top:6px;right:6px;z-index:7;width:26px;height:26px;border-radius:7px;background:#1a18148c;color:#fff;border:none;font-size:15px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s,background .15s;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.book-card:hover .btn-card-menu{opacity:1}.btn-card-menu:hover{background:var(--color-accent)}.card-menu-popup{position:fixed;z-index:9500;width:200px;max-height:70vh;overflow-y:auto;background:var(--color-paper);border:1px solid var(--color-border);border-radius:10px;box-shadow:0 8px 32px #1a181438,0 2px 8px #0000001a;padding:6px;animation:card-menu-in .16s var(--ease-out)}@keyframes card-menu-in{0%{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.card-menu-head{font-size:10px;font-weight:600;color:var(--color-ink-muted);letter-spacing:.04em;text-transform:uppercase;padding:6px 10px 4px}.card-menu-item{display:flex;align-items:center;width:100%;padding:8px 10px;border:none;background:transparent;border-radius:7px;font-family:var(--font-ui);font-size:12px;font-weight:400;color:var(--color-ink-soft);text-align:left;cursor:pointer;transition:background .13s,color .13s}.card-menu-item:hover{background:var(--color-paper-alt);color:var(--color-ink)}.card-menu-item.checked{font-weight:600;color:var(--color-accent)}.card-menu-item.checked:after{content:" ✓";margin-left:auto}.card-menu-item--accent{color:var(--color-accent)}.card-menu-item--danger{color:var(--color-toast-error)}.card-menu-item--danger:hover{background:#c0392b14}.card-menu-divider{height:1px;background:var(--color-border-soft);margin:5px 4px}.progress-bar-zone{flex:1 1 auto;position:relative;margin:0 12px;height:16px;display:flex;align-items:center}.progress-bar-zone .progress-bar-track{flex:1 1 auto;margin:0}.progress-range-slider{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);width:100%;height:16px;margin:0;appearance:none;-webkit-appearance:none;background:transparent;cursor:pointer}.progress-range-slider::-webkit-slider-runnable-track{height:16px;background:transparent}.progress-range-slider::-moz-range-track{height:16px;background:transparent}.progress-range-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--color-accent);border:2px solid var(--color-paper);box-shadow:0 1px 4px #0000004d;cursor:grab;transition:transform .12s}.progress-range-slider::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.2)}.progress-range-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--color-accent);border:2px solid var(--color-paper);box-shadow:0 1px 4px #0000004d;cursor:grab}body[data-theme=dark] .recent-card{background:#242428;border-color:#2e2e34}body[data-theme=dark] .recent-title{color:#c8c6c0}body[data-theme=dark] .recent-progress-track{background:#2e2e34}body[data-theme=dark] .recent-progress-fill{background:#8a8882}body[data-theme=dark] .recent-pct{color:#5a5a64}body[data-theme=dark] .folder-chip{border-color:#2e2e34;color:#a0a0a0}body[data-theme=dark] .folder-chip:hover{background:#2e2e34}body[data-theme=dark] .folder-chip.active{background:#e0e0e0;color:#1a1814;border-color:#e0e0e0}body[data-theme=dark] .card-menu-popup{background:#242428;border-color:#2e2e34}body[data-theme=dark] .card-menu-head{color:#5a5a64}body[data-theme=dark] .card-menu-item{color:#a0a0a0}body[data-theme=dark] .card-menu-item:hover{background:#2e2e34;color:#e0e0e0}body[data-theme=dark] .card-menu-divider{background:#2e2e34}body[data-theme=dark] .progress-range-slider::-webkit-slider-thumb{border-color:#1a1a1e;background:#8a8882}body[data-theme=dark] .progress-range-slider::-moz-range-thumb{border-color:#1a1a1e;background:#8a8882}body[data-theme=white] .recent-card{background:#f8f8f8;border-color:#eee}body[data-theme=white] .folder-chip.active{background:#111;border-color:#111}body[data-theme=white] .card-menu-popup{background:#fff}.library-search-input{width:160px;padding:7px 12px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-paper-alt);font-family:var(--font-ui);font-size:12px;color:var(--color-ink);outline:none;transition:width .22s var(--ease-out),border-color .15s}.library-search-input:focus{width:220px;border-color:var(--color-accent)}#btn-restore-label{display:inline-flex;align-items:center;cursor:pointer}.library-topbar{transition:transform .28s var(--ease-out),opacity .28s var(--ease-out);position:relative;z-index:25}.library-topbar.topbar-hidden{transform:translateY(-100%);opacity:0;pointer-events:none}.dashboard-section{margin-bottom:26px}.dash-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:14px}.dash-card{background:var(--color-paper-alt);border:1px solid var(--color-border-soft);border-radius:14px;padding:16px;display:flex;flex-direction:column}.dash-card-head{font-size:12px;font-weight:600;color:var(--color-ink-muted);margin-bottom:14px;letter-spacing:.01em}.dash-chart{display:flex;align-items:flex-end;justify-content:space-between;gap:6px;height:90px;flex:1}.dash-bar-col{display:flex;flex-direction:column;align-items:center;gap:6px;flex:1;height:100%;justify-content:flex-end}.dash-bar-wrap{width:100%;height:100%;display:flex;align-items:flex-end;justify-content:center}.dash-bar{width:60%;min-height:3px;background:linear-gradient(180deg,var(--color-accent-light),var(--color-accent));border-radius:4px 4px 0 0;transition:height .6s var(--ease-spring)}.dash-bar-label{font-size:10px;color:var(--color-ink-muted)}.dash-week-total{margin-top:10px;font-size:12px;font-weight:600;color:var(--color-accent);text-align:right}.dash-card--goal{align-items:center}.dash-ring{width:96px;height:96px;border-radius:50%;background:conic-gradient(var(--color-accent) calc(var(--goal) * 1%),var(--color-border) 0);display:flex;align-items:center;justify-content:center;position:relative;transition:background .6s var(--ease-out)}.dash-ring:before{content:"";position:absolute;inset:10px;background:var(--color-paper-alt);border-radius:50%}.dash-ring-pct{position:relative;z-index:1;font-size:20px;font-weight:700;color:var(--color-ink)}.dash-goal-detail{margin-top:12px;font-size:11px;color:var(--color-ink-muted)}.dash-card--insight .dash-insight-list{list-style:none;display:flex;flex-direction:column;gap:12px;flex:1;justify-content:center}.dash-insight-list li{display:flex;align-items:center;justify-content:space-between;font-size:12px}.dash-insight-list span{color:var(--color-ink-muted)}.dash-insight-list strong{font-size:16px;color:var(--color-ink);font-weight:700}.tag-section{margin-bottom:20px}.tag-bar{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;align-items:center}.tag-chip{padding:5px 12px;border-radius:14px;border:1px solid var(--color-border);background:transparent;font-family:var(--font-ui);font-size:11px;font-weight:500;color:var(--color-ink-soft);cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .12s}.tag-chip:hover{border-color:var(--color-accent-light)}.tag-chip:active{transform:scale(.95)}.tag-chip.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.tag-empty-hint{font-size:11px;color:var(--color-ink-muted)}.sort-select{margin-left:auto;padding:5px 10px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-paper-alt);font-family:var(--font-ui);font-size:11px;color:var(--color-ink-soft);cursor:pointer}.book-card-tags{display:flex;gap:4px;margin-top:4px;flex-wrap:wrap;justify-content:center}.book-card-tag{font-size:9px;padding:1px 6px;border-radius:8px;background:var(--color-border-soft);color:var(--color-ink-muted)}.book-card.dragging{opacity:.4;transform:scale(.96)}.folder-chip.drop-target{background:var(--color-accent-light)!important;border-color:var(--color-accent)!important;transform:scale(1.06);box-shadow:0 0 0 3px #c8b89a66}.slider-tooltip{position:fixed;bottom:calc(var(--bottom-height) + 14px);transform:translate(-50%);background:var(--color-ink);color:var(--color-paper);padding:6px 12px;border-radius:8px;font-size:11px;display:flex;flex-direction:column;align-items:center;gap:2px;pointer-events:none;z-index:350;box-shadow:0 4px 16px #00000047;white-space:nowrap;max-width:240px}.slider-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--color-ink)}.slider-tooltip-chapter{font-weight:500;max-width:220px;overflow:hidden;text-overflow:ellipsis}.slider-tooltip-pct{font-size:13px;font-weight:700;color:var(--color-accent-light)}.modal-box--large{max-width:640px;width:92%}.meta-edit-cover-row{display:flex;align-items:center;gap:14px;margin-bottom:6px}.meta-edit-cover-preview{width:70px;height:100px;object-fit:cover;border-radius:6px;box-shadow:0 2px 8px var(--color-shadow)}.meta-edit-cover-btn{padding:7px 14px;border:1px solid var(--color-border);border-radius:8px;font-size:12px;color:var(--color-ink-soft);cursor:pointer;background:var(--color-paper-alt);transition:background .15s}.meta-edit-cover-btn:hover{background:var(--color-border-soft)}.meta-edit-field{display:flex;flex-direction:column;gap:5px}.meta-edit-field span{font-size:11px;font-weight:600;color:var(--color-ink-muted)}.meta-edit-field input{padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;font-family:var(--font-ui);font-size:13px;background:transparent;color:var(--color-ink);outline:none;transition:border-color .15s}.meta-edit-field input:focus{border-color:var(--color-accent)}.modal-primary-btn{margin-top:8px;padding:10px;border:none;border-radius:8px;background:var(--color-ink);color:var(--color-paper);font-family:var(--font-ui);font-size:13px;font-weight:600;cursor:pointer;transition:background .18s}.modal-primary-btn:hover{background:var(--color-accent)}.export-info{font-size:13px;color:var(--color-ink-soft);text-align:center}.export-format-row{display:flex;gap:12px}.export-format-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding:18px 10px;border:1px solid var(--color-border);border-radius:12px;background:var(--color-paper-alt);font-family:var(--font-ui);font-size:12px;font-weight:600;color:var(--color-ink-soft);cursor:pointer;transition:transform .15s var(--ease-out),border-color .15s,background .15s}.export-format-btn:hover{transform:translateY(-3px);border-color:var(--color-accent);background:var(--color-paper)}.export-format-icon{font-size:26px}.fts-results{max-height:50vh;overflow-y:auto;margin-top:4px}.fts-status{padding:24px;text-align:center;color:var(--color-ink-muted);font-size:13px}.fts-result-item{padding:12px 14px;border-bottom:1px solid var(--color-border-soft);cursor:pointer;transition:background .15s}.fts-result-item:hover{background:var(--color-paper-alt)}.fts-result-title{font-size:12px;font-weight:600;color:var(--color-ink);margin-bottom:4px}.fts-result-snippet{font-size:12px;line-height:1.5;color:var(--color-ink-soft)}.fts-result-snippet mark{background:#ffdc3280;border-radius:2px;padding:0 1px}.font-family-select{padding:6px 10px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-paper-alt);font-family:var(--font-ui);font-size:12px;color:var(--color-ink-soft);cursor:pointer}.pomodoro-popup{position:fixed;top:calc(var(--nav-height) + 12px);right:16px;z-index:360;width:180px;background:var(--color-paper);border:1px solid var(--color-border);border-radius:14px;box-shadow:0 10px 36px #1a181438;padding:16px;display:flex;flex-direction:column;gap:12px;animation:pomodoro-in .24s var(--ease-spring)}@keyframes pomodoro-in{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.pomodoro-popup[data-mode=focus]{border-color:#d9694e}.pomodoro-popup[data-mode=break]{border-color:#5d8a5e}.pomodoro-head{display:flex;align-items:center;justify-content:space-between}.pomodoro-mode-badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:10px;background:var(--color-border-soft);color:var(--color-ink-soft)}.pomodoro-popup[data-mode=focus] .pomodoro-mode-badge{background:#fbe4dd;color:#c0392b}.pomodoro-popup[data-mode=break] .pomodoro-mode-badge{background:#e0efe0;color:#3d7a3e}.pomodoro-close{background:none;border:none;font-size:13px;color:var(--color-ink-muted);cursor:pointer}.pomodoro-time{font-size:38px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums;color:var(--color-ink);letter-spacing:.02em}.pomodoro-controls{display:flex;gap:8px;justify-content:center}.toast{animation:toast-spring-in .42s var(--ease-spring) forwards}@keyframes toast-spring-in{0%{opacity:0;transform:translateY(20px) scale(.9)}60%{opacity:1;transform:translateY(-4px) scale(1.02)}to{opacity:1;transform:translateY(0) scale(1)}}.toast-container{transition:transform .32s var(--ease-spring)}body[data-theme=dark] .recent-cover img,body[data-theme=dark] .book-cover-img{filter:brightness(.85) contrast(1.05)}body[data-theme=dark] .dash-card{background:#242428;border-color:#2e2e34}body[data-theme=dark] .dash-ring:before{background:#242428}body[data-theme=dark] .dash-ring-pct,body[data-theme=dark] .dash-insight-list strong{color:#e0e0e0}body[data-theme=dark] .tag-chip{border-color:#2e2e34;color:#a0a0a0}body[data-theme=dark] .tag-chip.active{background:#5a4a3a;border-color:#5a4a3a;color:#fff}body[data-theme=dark] .library-search-input{background:#242428;border-color:#2e2e34;color:#c8c6c0}body[data-theme=dark] .sort-select,body[data-theme=dark] .font-family-select{background:#242428;border-color:#2e2e34;color:#a0a0a0}body[data-theme=dark] .pomodoro-popup{background:#242428;border-color:#2e2e34}body[data-theme=dark] .pomodoro-time{color:#e0e0e0}body[data-theme=dark] .meta-edit-field input{background:#1a1a1e;border-color:#2e2e34;color:#c8c6c0}body[data-theme=dark] .export-format-btn{background:#242428;border-color:#2e2e34;color:#a0a0a0}body[data-theme=dark] .fts-result-item:hover{background:#242428}body[data-theme=dark] .book-card-tag{background:#2e2e34;color:#909090}body[data-theme=white] .dash-card{background:#f8f8f8;border-color:#eee}body[data-theme=white] .dash-ring:before{background:#f8f8f8}@media (max-width: 640px){:root{--topbar-height: 52px;--sidebar-width: 88vw;--nav-height: 48px;--settings-width: min(92vw, 280px)}.topbar-btn{padding:6px 12px;font-size:12px}.topbar-title{font-size:16px}.dash-grid{grid-template-columns:1fr;gap:10px}.library-search-input{width:110px}.library-search-input:focus{width:140px}.topbar-actions{flex-wrap:wrap;gap:6px}.pomodoro-popup{right:8px;width:160px}.export-format-row{flex-direction:column}.library-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px}.nav-title-area{font-size:12px}.floating-arrow-btn{width:34px;height:52px;font-size:11px}.viewer-bottom-bar span{font-size:10px}.settings-panel{right:0;border-top-right-radius:0;border-top-left-radius:0;border-top:none}.tts-bar{min-width:90vw}.theme-builder-row{flex-wrap:wrap}}@media (max-width: 380px){.nav-action-btn{padding:5px 8px;font-size:11px}.topbar-btn span{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}button:focus:not(:focus-visible){outline:none}
