:root{--bg: #FBFBFB;--surface: #FFFFFF;--text: #111111;--text-muted: #666666;--text-faint: #9A9A9A;--border: #E5E5E5;--border-strong: #D4D4D4;--accent: #666666;--accent-strong: #111111;--danger: #A13A3A;--serif: Georgia, "Iowan Old Style", "Times New Roman", serif;--sans: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", system-ui, sans-serif;--radius: 3px;--gap-xs: 6px;--gap-sm: 12px;--gap-md: 20px;--gap-lg: 36px;--gap-xl: 64px;color-scheme:light}html.dark{--bg: #09090B;--surface: #0F0F11;--text: #FAFAFA;--text-muted: #A1A1AA;--text-faint: #6B6B70;--border: #27272A;--border-strong: #333336;--accent: #A1A1AA;--accent-strong: #FAFAFA;--danger: #C77;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{min-height:100vh}h1,h2,h3,h4{font-family:var(--serif);font-weight:400;margin:0;letter-spacing:-.01em}button,input,textarea,select{font-family:inherit;color:inherit}button{background:none;border:none;cursor:pointer;font-size:1em}a{color:inherit}::selection{background:var(--text);color:var(--bg)}::placeholder{color:var(--text-faint)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:6px}::-webkit-scrollbar-track{background:transparent}:focus-visible{outline:1.5px solid var(--accent-strong);outline-offset:2px}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.app-shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.sidebar{border-right:1px solid var(--border);padding:var(--gap-lg) var(--gap-md);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:baseline;gap:10px;margin-bottom:var(--gap-xl)}.brand-mark{font-family:var(--serif);font-size:1.5rem;border:1px solid var(--text);width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius);flex-shrink:0}.brand-name{font-family:var(--serif);font-size:1.15rem}.nav{display:flex;flex-direction:column;gap:2px;flex:1}.nav-item{display:flex;align-items:center;gap:12px;text-align:left;padding:11px 10px;border-radius:var(--radius);font-size:.94rem;color:var(--text-muted);border:1px solid transparent;transition:border-color .15s ease,color .15s ease,background-color .15s ease}.nav-index{font-family:var(--sans);font-size:.72rem;color:var(--text-faint);font-variant-numeric:tabular-nums}.nav-item:hover{color:var(--text)}.nav-item[aria-current=page]{color:var(--text);border-color:var(--border);background:var(--surface)}.nav-item[aria-current=page] .nav-index{color:var(--text-muted)}.sidebar-footer{display:flex;align-items:center;gap:var(--gap-sm);padding-top:var(--gap-md);border-top:1px solid var(--border)}.sidebar-caption{font-size:.72rem;color:var(--text-faint);margin:0;letter-spacing:.01em}.theme-toggle{width:34px;height:20px;border:1px solid var(--border-strong);border-radius:20px;position:relative;padding:2px;flex-shrink:0}.theme-toggle-dot{display:block;width:14px;height:14px;border-radius:50%;background:var(--text);transition:transform .2s ease}html.dark .theme-toggle-dot{transform:translate(14px)}.main{padding:var(--gap-xl) var(--gap-xl);max-width:1180px;width:100%}.tabbar{display:none}.eyebrow{font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--text-faint);font-family:var(--sans)}.view-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--gap-md);margin-bottom:var(--gap-lg);flex-wrap:wrap}.view-title{font-size:2rem}.view-sub{color:var(--text-muted);font-size:.92rem;margin-top:6px}.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--text);border-radius:var(--radius);background:var(--text);color:var(--bg);font-size:.88rem;transition:opacity .15s ease;white-space:nowrap}.btn:hover{opacity:.78}.btn-outline{background:transparent;color:var(--text);border-color:var(--border-strong)}.btn-outline:hover{border-color:var(--text);opacity:1}.btn-quiet{border:none;background:none;color:var(--text-muted);padding:8px 4px}.btn-quiet:hover{color:var(--text)}.btn-danger{color:var(--danger)}.toolbar{display:flex;gap:var(--gap-sm);flex-wrap:wrap;align-items:center;margin-bottom:var(--gap-lg)}.field{flex:1;min-width:180px}input[type=text],input[type=search],input[type=date],input[type=number],textarea,select{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;font-size:.92rem;transition:border-color .15s ease}input:focus,textarea:focus,select:focus{border-color:var(--accent-strong);outline:none}textarea{resize:vertical;line-height:1.5;font-family:var(--sans)}label{display:block;font-size:.76rem;color:var(--text-muted);margin-bottom:6px;letter-spacing:.02em}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-md)}.form-grid .full{grid-column:1 / -1}@media(max-width:640px){.form-grid{grid-template-columns:1fr}}.select-chip-group{display:flex;gap:8px;flex-wrap:wrap}.chip{padding:7px 13px;border:1px solid var(--border-strong);border-radius:20px;font-size:.8rem;color:var(--text-muted);transition:all .15s ease}.chip[aria-pressed=true]{border-color:var(--text);color:var(--text);background:var(--surface)}.chip:hover{border-color:var(--text)}.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--gap-md)}.book-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);display:flex;flex-direction:column;overflow:hidden;text-align:left;transition:border-color .15s ease;position:relative}.book-card:hover{border-color:var(--border-strong)}.book-cover{aspect-ratio:3 / 4;display:flex;align-items:flex-end;position:relative;border-bottom:1px solid var(--border);background:var(--bg);overflow:hidden}.book-cover img{width:100%;height:100%;object-fit:cover;display:block}.book-cover-fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:3rem;color:var(--text-faint)}.book-spine{position:absolute;left:0;top:0;bottom:0;width:6px;border-right:1px solid var(--border-strong);background:repeating-linear-gradient(to bottom,transparent,transparent)}.book-spine:after{content:"";position:absolute;left:0;right:0;bottom:0;background:var(--text)}.book-spine[data-status=want]:after{height:0%}.book-spine[data-status=reading]:after{height:50%}.book-spine[data-status=done]:after{height:100%}.book-body{padding:14px 15px 16px;display:flex;flex-direction:column;gap:4px;flex:1}.book-title{font-size:1rem;line-height:1.3}.book-author{font-size:.8rem;color:var(--text-muted)}.book-meta-row{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.status-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);display:flex;align-items:center;gap:6px}.status-dot{width:6px;height:6px;border-radius:50%;border:1px solid var(--text-muted)}.status-dot[data-status=reading]{background:var(--text-muted)}.status-dot[data-status=done]{background:var(--text);border-color:var(--text)}.rating-ticks{display:flex;gap:3px;align-items:flex-end}.rating-ticks span{width:3px;background:var(--border-strong);display:inline-block}.rating-ticks span:nth-child(1){height:6px}.rating-ticks span:nth-child(2){height:9px}.rating-ticks span:nth-child(3){height:12px}.rating-ticks span:nth-child(4){height:15px}.rating-ticks span:nth-child(5){height:18px}.rating-ticks span.filled{background:var(--text)}.empty-state{border:1px dashed var(--border-strong);border-radius:var(--radius);padding:var(--gap-xl) var(--gap-lg);text-align:center;color:var(--text-muted)}.empty-state h3{font-size:1.2rem;margin-bottom:8px;color:var(--text)}.empty-state p{font-size:.9rem;max-width:40ch;margin:0 auto 18px}.back-link{display:inline-flex;align-items:center;gap:6px;color:var(--text-muted);font-size:.85rem;margin-bottom:var(--gap-lg)}.back-link:hover{color:var(--text)}.detail-header{display:grid;grid-template-columns:160px 1fr;gap:var(--gap-lg);margin-bottom:var(--gap-xl)}@media(max-width:720px){.detail-header{grid-template-columns:100px 1fr}}.detail-cover{aspect-ratio:3/4;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-size:2.4rem;color:var(--text-faint);position:relative}.detail-cover img{width:100%;height:100%;object-fit:cover}.detail-title{font-size:2.1rem;line-height:1.15;margin-bottom:6px}.detail-author{font-size:1rem;color:var(--text-muted);font-family:var(--serif);font-style:italic}.detail-meta-line{display:flex;gap:var(--gap-md);flex-wrap:wrap;margin-top:var(--gap-md);font-size:.82rem;color:var(--text-muted)}.detail-meta-line strong{color:var(--text);font-weight:500}.detail-actions{display:flex;gap:8px;margin-top:var(--gap-md);flex-wrap:wrap}.section-divider{border:none;border-top:1px solid var(--border);margin:var(--gap-xl) 0}.section-heading{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:var(--gap-md)}.section-heading h2{font-size:1.3rem}.review-text{font-family:var(--serif);font-size:1.05rem;line-height:1.75;color:var(--text);white-space:pre-wrap}.review-text:empty:before,.review-text.is-empty:before{content:"No review written yet.";font-family:var(--sans);color:var(--text-faint);font-style:normal}.chapter-list{border-top:1px solid var(--border)}.chapter-row{border-bottom:1px solid var(--border)}.chapter-summary{display:flex;align-items:center;justify-content:space-between;width:100%;padding:16px 4px;text-align:left;gap:var(--gap-md)}.chapter-summary:hover .chapter-title{color:var(--accent-strong)}.chapter-num{font-family:var(--serif);font-size:.85rem;color:var(--text-faint);width:28px;flex-shrink:0}.chapter-title-wrap{flex:1;display:flex;flex-direction:column;gap:2px}.chapter-title{font-size:1rem;transition:color .15s ease}.chapter-sub{font-size:.76rem;color:var(--text-faint)}.chapter-caret{width:9px;height:9px;border-right:1px solid var(--text-muted);border-bottom:1px solid var(--text-muted);transform:rotate(-45deg);transition:transform .18s ease;flex-shrink:0}.chapter-row[data-open=true] .chapter-caret{transform:rotate(45deg)}.chapter-body{display:none;padding:0 4px 24px 32px}.chapter-row[data-open=true] .chapter-body{display:block}.chapter-field{margin-bottom:var(--gap-md)}.chapter-field-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);margin-bottom:6px}.chapter-field-value{font-size:.94rem;line-height:1.6;white-space:pre-wrap}.chapter-actions{display:flex;gap:14px;margin-top:6px}.vocab-tabs{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden;margin-bottom:var(--gap-lg)}.vocab-tab{padding:9px 18px;font-size:.85rem;color:var(--text-muted);border-right:1px solid var(--border-strong)}.vocab-tab:last-child{border-right:none}.vocab-tab[aria-pressed=true]{background:var(--text);color:var(--bg)}.word-list{display:flex;flex-direction:column}.word-row{display:grid;grid-template-columns:1.2fr 2fr 100px 90px auto;gap:var(--gap-md);align-items:center;padding:16px 4px;border-bottom:1px solid var(--border)}@media(max-width:860px){.word-row{grid-template-columns:1fr;gap:4px}.word-row .word-meta-mobile{display:flex;gap:12px;flex-wrap:wrap}}.word-term{font-family:var(--serif);font-size:1.1rem}.word-def{font-size:.88rem;color:var(--text-muted);line-height:1.5}.word-tag{font-size:.7rem;color:var(--text-muted);border:1px solid var(--border-strong);border-radius:20px;padding:3px 10px;display:inline-block;width:fit-content}.word-date{font-size:.76rem;color:var(--text-faint);font-variant-numeric:tabular-nums}.word-row-actions{display:flex;gap:10px;justify-self:end}.flashcard-stage{display:flex;flex-direction:column;align-items:center;padding:var(--gap-xl) 0}.flashcard{width:100%;max-width:520px;aspect-ratio:3/2;perspective:1400px;margin-bottom:var(--gap-lg)}.flashcard-inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .45s cubic-bezier(.4,.2,.2,1)}.flashcard[data-flipped=true] .flashcard-inner{transform:rotateY(180deg)}.flashcard-face{position:absolute;inset:0;backface-visibility:hidden;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--gap-lg);gap:14px}.flashcard-face-back{transform:rotateY(180deg)}.flashcard-word{font-family:var(--serif);font-size:2.2rem}.flashcard-hint{font-size:.76rem;color:var(--text-faint);text-transform:uppercase;letter-spacing:.08em}.flashcard-def{font-size:1.02rem;line-height:1.6;max-width:40ch}.flashcard-context{font-size:.88rem;font-style:italic;color:var(--text-muted);max-width:40ch;font-family:var(--serif)}.flashcard-controls{display:flex;align-items:center;gap:var(--gap-md)}.flashcard-progress{font-size:.8rem;color:var(--text-faint);font-variant-numeric:tabular-nums}.icon-btn{width:38px;height:38px;border:1px solid var(--border-strong);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:border-color .15s ease}.icon-btn:hover{border-color:var(--text)}.settings-block{border:1px solid var(--border);border-radius:var(--radius);padding:var(--gap-lg);margin-bottom:var(--gap-md)}.settings-block h3{font-size:1.05rem;margin-bottom:6px}.settings-block p{font-size:.86rem;color:var(--text-muted);margin:0 0 var(--gap-md);line-height:1.6}.settings-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.settings-stat{font-size:.82rem;color:var(--text-muted)}.settings-stat strong{color:var(--text);font-family:var(--serif);font-size:1.1rem}.modal-overlay{position:fixed;inset:0;background:#00000059;display:flex;align-items:flex-start;justify-content:center;padding:6vh 20px;overflow-y:auto;z-index:100;animation:fade-in .15s ease}html.dark .modal-overlay{background:#0009}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius);width:min(100%,640px);max-width:640px;max-height:calc(100dvh - 12vh);padding:var(--gap-lg);min-width:0;overflow:hidden;display:flex;flex-direction:column}.modal-header,.modal-body,.modal-body form{min-width:0}.modal-header h2{min-width:0;overflow-wrap:anywhere;word-break:break-word}.modal-body{overflow-y:auto;overflow-x:hidden;min-height:0}.modal-body input,.modal-body textarea,.modal-body select,.modal-body button{max-width:100%}.modal-body input[type=file]{min-width:0;width:100%}.modal-body .form-grid>*{min-width:0}.modal-body .file-row{min-width:0}.modal-body .file-note{min-width:0;overflow-wrap:anywhere;word-break:break-word}.modal-body .file-row>*{min-width:0}.modal-body .modal-footer{flex-wrap:wrap}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--gap-lg)}.modal-header h2{font-size:1.3rem}.modal-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:1.1rem}.modal-close:hover{color:var(--text)}.file-row{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;align-items:start}.file-row input[type=file]{min-width:0;max-width:100%}.file-note{margin:0;max-width:100%;overflow-wrap:anywhere;word-break:break-word}#book-form{min-width:0}#book-form .form-grid>div{min-width:0}#book-form .form-grid input,#book-form .form-grid textarea,#book-form .form-grid select{max-width:100%;min-width:0}#book-form .select-chip-group{flex-wrap:wrap;min-width:0}.modal-footer{display:flex;justify-content:flex-end;gap:10px;margin-top:var(--gap-lg);padding-top:var(--gap-md);border-top:1px solid var(--border)}.toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%) translateY(12px);background:var(--text);color:var(--bg);padding:11px 20px;border-radius:var(--radius);font-size:.85rem;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;z-index:200}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}@media(max-width:900px){.app-shell{grid-template-columns:1fr}.sidebar{display:none}.main{padding:var(--gap-lg) var(--gap-md) 100px}.view-title{font-size:1.6rem}.tabbar{display:flex;position:fixed;bottom:0;left:0;right:0;border-top:1px solid var(--border);background:var(--bg);z-index:50;padding-bottom:env(safe-area-inset-bottom)}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 0 8px;font-size:.68rem;color:var(--text-faint)}.tab-item[aria-current=page]{color:var(--text)}.tab-icon{width:18px;height:18px;border:1px solid currentColor;border-radius:4px;display:block}.tab-icon[data-icon=vocabulary]{border-radius:50%}.tab-icon[data-icon=settings]{transform:rotate(45deg);border-radius:2px}}@media(max-width:480px){.detail-header{grid-template-columns:84px 1fr;gap:var(--gap-md)}.word-row-actions{justify-self:start}}.progress{height:2px;background:var(--border);border-radius:2px;overflow:hidden}.progress>span{display:block;height:100%;background:var(--text)}.status-pct{color:var(--text-muted);font-variant-numeric:tabular-nums;letter-spacing:0}.resume{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-md);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:var(--gap-md) var(--gap-lg);margin-bottom:var(--gap-lg);flex-wrap:wrap}.resume-main{flex:1;min-width:220px;display:flex;flex-direction:column;gap:6px}.resume h3{font-size:1.3rem}.resume .progress{max-width:360px;margin-top:6px}.resume-sub{font-size:.78rem;color:var(--text-faint)}.file-row{display:flex;flex-direction:column;gap:8px}.file-note{font-size:.78rem;color:var(--text-muted);margin:0}.file-hint{font-size:.78rem;color:var(--text-faint);margin:6px 0 0}.hl-list{display:flex;flex-direction:column;border-top:1px solid var(--border)}.hl-item{display:block;width:100%;text-align:left;padding:16px 4px;border-bottom:1px solid var(--border)}.hl-item:hover .hl-loc{color:var(--text)}.hl-loc{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);margin-bottom:6px}.hl-quote{font-family:var(--serif);font-style:italic;line-height:1.6;border-left:2px solid var(--border-strong);padding-left:12px;margin-bottom:6px}.hl-note{font-size:.92rem;line-height:1.6;white-space:pre-wrap}.drop-overlay{position:fixed;inset:0;z-index:300;display:none;align-items:center;justify-content:center;background:color-mix(in srgb,var(--bg) 88%,transparent);border:2px dashed var(--text);margin:14px;border-radius:6px;font-family:var(--serif);font-size:1.4rem;text-align:center;padding:20px;pointer-events:none}body.is-dragging .drop-overlay{display:flex}body.is-reading .sidebar,body.is-reading .tabbar{display:none}body.is-reading .app-shell{grid-template-columns:1fr}body.is-reading .main{padding:0;max-width:none}.reader{height:100vh;height:100dvh;display:flex;flex-direction:column;background:var(--bg);--reader-fs: 18px}.reader-bar{display:flex;align-items:center;gap:var(--gap-sm);padding:0 var(--gap-md);height:52px;border-bottom:1px solid var(--border);flex-shrink:0}.rb-back{color:var(--text-muted);text-decoration:none;font-size:1.1rem;padding:6px 8px 6px 0}.rb-back:hover{color:var(--text)}.rb-title{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.25}.rb-title strong{font-family:var(--serif);font-weight:400;font-size:.98rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rb-loc{font-size:.72rem;color:var(--text-faint);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rb-tools{display:flex;align-items:center;gap:6px}.rb-btn{min-width:32px;height:32px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:.82rem;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.rb-btn:hover{border-color:var(--text);color:var(--text)}.rb-btn[aria-pressed=true]{border-color:var(--text);color:var(--text);background:var(--surface)}.rb-count{font-variant-numeric:tabular-nums;color:var(--text-faint)}.rb-select{width:auto;max-width:180px;padding:6px 8px;font-size:.8rem;height:32px}.rb-zoom-label{font-size:.72rem;color:var(--text-faint);width:38px;text-align:center;font-variant-numeric:tabular-nums}.reader-progress{height:2px;background:var(--border);flex-shrink:0}.reader-progress>span{display:block;height:100%;width:0;background:var(--text);transition:width .2s ease}.reader-body{flex:1;min-height:0;display:flex}.reader-scroll{flex:1;min-width:0;overflow:auto;position:relative;-webkit-overflow-scrolling:touch}.reader-content{position:relative}.reader-loading{padding:80px 20px;text-align:center;color:var(--text-muted);font-family:var(--serif)}.reader-error{max-width:460px;margin:80px auto;text-align:center;color:var(--text-muted);padding:0 20px}.reader-error h3{color:var(--text);margin-bottom:8px;font-size:1.2rem}.prose{max-width:680px;margin:0 auto;padding:48px 24px 32px;font-family:var(--serif);font-size:var(--reader-fs);line-height:1.75;overflow-wrap:break-word}.prose p{margin:0 0 1em}.prose h1,.prose h2,.prose h3,.prose h4{line-height:1.25;margin:1.6em 0 .7em}.prose h1{font-size:1.7em}.prose h2{font-size:1.4em}.prose h3{font-size:1.2em}.prose img,.prose svg{max-width:100%;height:auto;display:block;margin:1.2em auto}.prose blockquote{margin:1em 0;padding-left:1em;border-left:2px solid var(--border-strong);color:var(--text-muted)}.prose a{color:inherit;text-decoration:underline;text-decoration-color:var(--border-strong);text-underline-offset:3px}.prose ul,.prose ol{padding-left:1.4em}.prose table{max-width:100%;border-collapse:collapse;font-size:.9em}.prose td,.prose th{border:1px solid var(--border);padding:4px 8px}.prose hr{border:none;border-top:1px solid var(--border);margin:2em 0}.prose pre{white-space:pre-wrap;font-size:.85em}.epub-pager{max-width:680px;margin:0 auto;padding:8px 24px 80px;display:flex;justify-content:space-between;gap:12px}.pdf-body{padding:20px 16px 80px;display:flex;flex-direction:column;align-items:center;gap:14px;width:max-content;min-width:100%}.pdf-page{position:relative;background:#fff;border:1px solid var(--border);flex-shrink:0}.pdf-page canvas{display:block}.pdf-invert .pdf-page{background:#161618}.pdf-invert .pdf-page canvas{filter:invert(.9) hue-rotate(180deg)}.textLayer{position:absolute;inset:0;overflow:clip;line-height:1;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:CanvasText;z-index:0;--min-font-size: 1;--text-scale-factor: calc(var(--scale-factor) * var(--min-font-size));--min-font-size-inv: calc(1 / var(--min-font-size))}.textLayer :is(span,br){color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0% 0%}.textLayer>:not(.markedContent),.textLayer .markedContent span:not(.markedContent){z-index:1}.textLayer span.markedContent{top:0;height:0}.textLayer ::selection{background:#5078ff59;color:transparent}.sel-pop{position:fixed;z-index:90;display:none;background:var(--text);color:var(--bg);border-radius:var(--radius);overflow:hidden}.sel-pop button{padding:9px 14px;font-size:.82rem;color:var(--bg)}.sel-pop button+button{border-left:1px solid color-mix(in srgb,var(--bg) 30%,transparent)}.sel-pop button:hover{opacity:.75}.notes-panel{background:var(--bg);display:flex;flex-direction:column;min-height:0}.np-head{display:flex;align-items:center;justify-content:space-between;padding:14px var(--gap-md) 8px}.np-head h2{font-size:1.15rem}.np-quick{padding:0 var(--gap-md) var(--gap-sm)}.np-hint{font-size:.72rem;color:var(--text-faint);margin-top:6px}.np-list{flex:1;overflow-y:auto;padding:0 var(--gap-md);border-top:1px solid var(--border)}.np-empty{color:var(--text-faint);font-size:.86rem;line-height:1.6;padding:var(--gap-md) 0}.np-foot{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:center;padding:var(--gap-sm) var(--gap-md);border-top:1px solid var(--border);padding-bottom:max(var(--gap-sm),env(safe-area-inset-bottom))}.cap{padding:14px 0;border-bottom:1px solid var(--border)}.cap:last-child{border-bottom:none}.cap-meta{display:flex;align-items:center;gap:10px;margin-bottom:6px}.cap-loc{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted)}.cap-loc:hover{color:var(--text);text-decoration:underline}.cap-date{font-size:.7rem;color:var(--text-faint);flex:1}.cap-del{color:var(--text-faint);font-size:1rem;line-height:1;padding:2px 4px}.cap-del:hover{color:var(--danger)}.cap-quote{margin:0 0 8px;font-family:var(--serif);font-style:italic;font-size:.95rem;line-height:1.6;border-left:2px solid var(--border-strong);padding-left:12px;color:var(--text)}.cap-note{border:1px solid transparent;background:transparent;padding:6px 8px;margin-left:-8px;width:calc(100% + 16px);font-size:.9rem;line-height:1.5;resize:none;overflow:hidden}.cap-note:hover{border-color:var(--border)}.cap-note:focus{background:var(--surface)}@media(min-width:901px){.notes-panel{width:380px;flex-shrink:0;border-left:1px solid var(--border)}.reader[data-notes=closed] .notes-panel,#np-close{display:none}}@media(max-width:900px){.reader-bar{padding:0 var(--gap-sm);gap:8px}.rb-hide-sm{display:none}.prose{padding:32px 18px 24px}.notes-panel{position:fixed;left:0;right:0;bottom:0;height:64vh;height:64dvh;z-index:70;border-top:1px solid var(--border-strong);transform:translateY(102%);transition:transform .22s ease}.reader[data-notes=open] .notes-panel{transform:none}}.btn[disabled]{opacity:.5;cursor:default}.btn[disabled]:hover{opacity:.5}.field-error{color:var(--danger);font-size:.76rem;margin:6px 0 0}input[aria-invalid=true],textarea[aria-invalid=true]{border-color:var(--danger)}.form-error{border:1px solid var(--danger);color:var(--danger);border-radius:var(--radius);padding:10px 12px;font-size:.85rem;margin-top:var(--gap-md)}.loading-state{padding:var(--gap-xl) 0;text-align:center;color:var(--text-muted);font-family:var(--serif);animation:fade-in .2s ease .15s both}.loading-bar{height:2px;width:160px;margin:14px auto 0;background:var(--border);border-radius:2px;overflow:hidden;position:relative}.loading-bar:after{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;background:var(--text);animation:loading-slide 1.1s ease-in-out infinite}@keyframes loading-slide{0%{transform:translate(-100%)}to{transform:translate(260%)}}.error-state{border:1px solid var(--border-strong);border-radius:var(--radius);padding:var(--gap-xl) var(--gap-lg);text-align:center;color:var(--text-muted)}.error-state h3{font-size:1.2rem;margin-bottom:8px;color:var(--text)}.error-state p{font-size:.9rem;max-width:52ch;margin:0 auto 18px;line-height:1.6}.flashcard:focus-visible{outline-offset:4px}html,body,#root{width:100%;min-width:0}body{overflow-x:hidden}img,svg,video,canvas{max-width:100%}button,input,textarea,select,.app-shell,.main,.view-header,.toolbar,.detail-header,.detail-actions,.settings-row,.reader,.reader-body,.reader-bar,.rb-tools,.resume{min-width:0}@media(max-width:900px){.main{width:100%;max-width:none;padding-left:clamp(14px,4vw,24px);padding-right:clamp(14px,4vw,24px);padding-bottom:calc(76px + env(safe-area-inset-bottom))}.view-header{align-items:flex-start}.view-header>*{min-width:0}.book-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resume{padding:var(--gap-md)}.resume-main{min-width:0}}@media(max-width:640px){.view-title{font-size:1.45rem}.view-sub{font-size:.86rem}.toolbar{width:100%}.toolbar>.field{flex:1 1 100%;min-width:0}.toolbar>.btn{flex:1 1 auto;justify-content:center}.book-grid{grid-template-columns:1fr 1fr;gap:10px}.detail-header{grid-template-columns:84px minmax(0,1fr);gap:var(--gap-md)}.detail-title{font-size:1.55rem;overflow-wrap:anywhere}.detail-author{font-size:.92rem;overflow-wrap:anywhere}.detail-actions .btn{flex:1 1 auto;justify-content:center}.flashcard{max-width:100%;aspect-ratio:4 / 3}.flashcard-word{font-size:1.8rem}.settings-block{padding:var(--gap-md)}.modal-overlay{padding:3vh 12px}.modal{padding:var(--gap-md);width:min(100%,calc(100vw - 24px));max-height:calc(100dvh - 6vh)}.modal-header{margin-bottom:var(--gap-md)}.modal-footer>*{flex:1 1 140px;min-width:0}.file-row>button{width:100%;max-width:100%}#book-form .form-grid>div[style]{min-width:0;flex-wrap:wrap}#book-form .form-grid>div[style]>input[type=file]{flex:1 1 180px;width:100%}}@media(max-width:380px){.main{padding-left:12px;padding-right:12px}.modal-overlay{padding:12px 8px}.modal{width:calc(100vw - 16px);padding:12px;max-height:calc(100dvh - 24px);border-radius:10px}.modal-header h2{font-size:1.08rem}.modal-footer{gap:8px}.modal-footer>*{flex:1 1 120px}.book-grid{grid-template-columns:1fr}.detail-header{grid-template-columns:72px minmax(0,1fr);gap:12px}.detail-title{font-size:1.35rem}.tab-item{padding-top:8px;min-height:54px}.tab-icon{width:16px;height:16px}}.reader-bar{padding-top:env(safe-area-inset-top);height:calc(52px + env(safe-area-inset-top))}.rb-tools{flex-shrink:0}@media(max-width:900px){.reader-bar{height:calc(52px + env(safe-area-inset-top))}.rb-btn{padding-left:8px;padding-right:8px}}@media(max-width:560px){.rb-tools{gap:4px}.rb-btn{min-width:32px;width:32px;padding:0}.rb-notes{width:auto;min-width:44px;padding:0 7px}.rb-notes .rb-count{margin-left:1px}.rb-select{max-width:120px}}@media(max-width:420px){.rb-back{padding-right:4px}.rb-title strong{font-size:.9rem}.rb-loc{font-size:.66rem}.rb-hide-xs{display:none!important}.reader-bar{padding-left:8px;padding-right:8px}}@media(max-width:360px){.rb-title{max-width:34%}.rb-btn{width:30px;min-width:30px;height:30px}.rb-notes{width:42px;min-width:42px;font-size:.72rem}}.prose{width:100%;max-width:680px}.prose table{display:block;width:100%;overflow-x:auto}.prose pre{max-width:100%;overflow-x:auto}.prose code{overflow-wrap:anywhere}.prose img,.prose svg,.prose video{max-width:100%}.reader-scroll{overscroll-behavior:contain}.pdf-body{min-width:100%;width:max-content;box-sizing:border-box}@media(max-width:900px){.notes-panel{padding-bottom:env(safe-area-inset-bottom)}}@media(max-width:480px){.notes-panel{height:min(72dvh,620px)}.np-head,.np-list,.np-quick{padding-left:12px;padding-right:12px}}
