:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--font-serif:"Noto Serif TC", "Source Han Serif TC", "Songti TC", "SimSun", "LiSong Pro", serif;--font-ui:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", "Hiragino Sans TC", sans-serif;--text-xs:.75rem;--text-sm:.8125rem;--text-base:.9375rem;--text-md:1rem;--text-lg:1.125rem;--text-xl:1.375rem;--text-2xl:1.625rem;--track-display:.02em;--track-label:.04em;--sp-1:4px;--sp-2:6px;--sp-3:8px;--sp-4:12px;--sp-5:16px;--sp-6:20px;--sp-7:24px;--sp-8:32px;--sp-9:40px;--sp-10:48px;--r-xs:2px;--r-sm:4px;--r-md:6px;--r-lg:10px;--r-pill:999px;--tap:44px;--measure:720px;--measure-prose:34em;--measure-form:420px;--z-dropdown:10;--z-sticky:20;--z-backdrop:30;--z-sheet:40;--z-toast:50;--z-tooltip:60;--dur-fast:.12s;--dur:.18s;--dur-slow:.26s;--ease-out-quart:cubic-bezier(.25, 1, .5, 1);--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--bg:oklch(100% 0 0);--surface:oklch(98.1% .004 77);--surface-2:oklch(96.2% .006 77);--chrome:oklch(98.1% .004 77);--ink:oklch(22.5% .014 77);--ink-2:oklch(43% .014 77);--ink-3:oklch(53.5% .014 77);--ink-faint:oklch(66.5% .012 77);--rule:oklch(90.5% .006 77);--rule-strong:oklch(83.5% .008 77);--brand:oklch(50.5% .104 77);--brand-hover:oklch(44% .088 77);--brand-tint:oklch(96.5% .025 77);--on-brand:oklch(99.5% .004 77);--danger:oklch(50.5% .165 25);--danger-tint:oklch(95.8% .02 25);--ok:oklch(49% .105 150);--press:oklch(22.5% .014 77/.05);--backdrop:oklch(22.5% .014 77/.42)}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:oklch(14.5% 0 0);--surface:oklch(19.5% 0 0);--surface-2:oklch(24.5% 0 0);--chrome:oklch(19.5% 0 0);--ink:oklch(92.5% .008 77);--ink-2:oklch(78% .01 77);--ink-3:oklch(65.5% .012 77);--ink-faint:oklch(50% .01 77);--rule:oklch(28.5% .005 77);--rule-strong:oklch(38% .006 77);--brand:oklch(78.5% .115 77);--brand-hover:oklch(84.5% .105 77);--brand-tint:oklch(26.5% .03 77);--on-brand:oklch(18% .03 77);--danger:oklch(70.5% .145 25);--danger-tint:oklch(26% .04 25);--ok:oklch(72% .11 150);--press:oklch(92.5% .008 77/.07);--backdrop:oklch(8% 0 0/.62)}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-size:var(--text-base);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0;line-height:1.6}h1,h2,h3,h4,p,ol,ul,figure{margin:0}ol,ul{padding:0;list-style:none}button,input,select,textarea{font:inherit;color:inherit}::selection{background:var(--brand-tint);color:var(--ink)}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--r-xs)}::placeholder{color:var(--ink-3);opacity:1}.tnum,.row-rail,.meta-grid dd,.admin-table td,.reader-pageinfo,.reader-progress,.setting-value{font-variant-numeric:tabular-nums}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}}.btn{justify-content:center;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:var(--sp-2) var(--sp-4);font-family:var(--font-ui);font-size:var(--text-base);white-space:nowrap;color:var(--ink);background:var(--bg);border:1px solid var(--rule-strong);border-radius:var(--r-sm);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-quart), border-color var(--dur-fast) var(--ease-out-quart), color var(--dur-fast) var(--ease-out-quart);line-height:1.3;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--ink-faint)}.btn:active:not(:disabled){background:var(--press)}.btn:disabled{color:var(--ink-faint);border-color:var(--rule);cursor:not-allowed}.btn.primary{color:var(--on-brand);background:var(--brand);border-color:var(--brand);font-weight:600}.btn.primary:hover:not(:disabled){background:var(--brand-hover);border-color:var(--brand-hover)}.btn.primary:active:not(:disabled){background:var(--brand-hover)}.btn.primary:disabled{background:var(--rule);border-color:var(--rule);color:var(--ink-3)}.btn[aria-busy=true]{color:var(--ink-3);cursor:progress}.btn-block{width:100%;margin-top:var(--sp-5)}.btn svg{flex:none;width:18px;height:18px}.chip{min-height:40px;padding:var(--sp-2) var(--sp-4);font-size:var(--text-base);color:var(--ink-2);background:var(--bg);border:1px solid var(--rule-strong);border-radius:var(--r-pill);cursor:pointer;white-space:nowrap;transition:background var(--dur-fast) var(--ease-out-quart), border-color var(--dur-fast) var(--ease-out-quart), color var(--dur-fast) var(--ease-out-quart);align-items:center;display:inline-flex}.chip:hover:not(:disabled){border-color:var(--ink-faint);color:var(--ink)}.chip:active:not(:disabled){background:var(--press)}.chip[aria-pressed=true],.chip.selected{color:var(--brand);background:var(--brand-tint);border-color:var(--brand);font-weight:600}.chip:disabled{color:var(--ink-faint);border-color:var(--rule);cursor:not-allowed}.chip[aria-pressed=true]:hover:not(:disabled),.chip.selected:hover:not(:disabled){color:var(--brand);border-color:var(--brand);background:var(--brand-tint)}.chip.primary{color:var(--on-brand);background:var(--brand);border-color:var(--brand);font-weight:600}.chip.primary:hover:not(:disabled){background:var(--brand-hover);border-color:var(--brand-hover);color:var(--on-brand)}.chip.primary:disabled{background:var(--rule);border-color:var(--rule);color:var(--ink-3)}.seg{gap:var(--sp-5);border-bottom:1px solid var(--rule);display:flex}.seg-item{padding:var(--sp-3) 0 var(--sp-4);min-height:var(--tap);font-size:var(--text-base);color:var(--ink-3);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-quart);background:0 0;border:none;position:relative}.seg-item:hover{color:var(--ink)}.seg-item[aria-selected=true]{color:var(--ink);font-weight:600}.seg-item[aria-selected=true]:after{content:"";background:var(--brand);height:2px;position:absolute;bottom:-1px;left:0;right:0}.rows{display:block}.row{column-gap:var(--sp-4);width:100%;padding:var(--sp-4) 0;text-align:left;border:none;border-bottom:1px solid var(--rule);font-family:var(--font-ui);color:var(--ink);background:0 0;grid-template-columns:minmax(0,1fr) auto;align-items:start;display:grid}button.row{cursor:pointer;transition:background var(--dur-fast) var(--ease-out-quart)}button.row:hover{background:var(--surface-2)}button.row:active{background:var(--press)}button.row:focus-visible{outline-offset:-2px}.row-main{flex-direction:column;gap:3px;min-width:0;display:flex}.row-sub{flex-direction:column;gap:2px;padding-left:1.1em;display:flex}.row-rail{white-space:nowrap;font-size:var(--text-xs);color:var(--ink-3);flex-direction:column;align-items:flex-end;gap:3px;display:flex}.row-title{font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--track-display);color:var(--ink);overflow-wrap:anywhere;font-weight:600;line-height:1.4}button.row-title{text-align:left;cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0}button.row-title:hover{color:var(--brand);text-underline-offset:3px;text-decoration:underline}.row-author{font-size:var(--text-sm);color:var(--ink-2)}.row-desc{font-size:var(--text-sm);color:var(--ink-2);text-wrap:pretty;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.65;display:-webkit-box;overflow:hidden}.row-meta{font-size:var(--text-xs);color:var(--ink-3)}.row-tags{font-size:var(--text-xs);color:var(--ink-3);overflow-wrap:anywhere}.row-count{font-size:var(--text-sm);color:var(--ink-2)}.row-actions{gap:var(--sp-2);margin-top:var(--sp-3);flex-wrap:wrap;display:flex}.row-actions .chip{min-height:var(--tap)}.status{font-size:var(--text-xs);color:var(--ink-3)}.status-ongoing{color:var(--brand);font-weight:600}.flag-new{color:var(--danger);font-weight:600;font-size:var(--text-xs);align-items:center;gap:3px;display:inline-flex}.flag-new:before{content:"▌"}.page-head{padding-top:calc(env(safe-area-inset-top,0px) + var(--sp-6))}.page-head h1{font-family:var(--font-serif);font-size:var(--text-xl);letter-spacing:var(--track-display);text-wrap:balance;font-weight:600}.page-head .head-line{justify-content:space-between;align-items:baseline;gap:var(--sp-4);padding-bottom:var(--sp-3);display:flex}.head-note{font-size:var(--text-xs);color:var(--ink-3)}.field{gap:var(--sp-1);flex-direction:column;display:flex}.field>label{font-size:var(--text-sm);color:var(--ink-2)}.field .hint{margin-top:2px}.input{width:100%;min-height:var(--tap);padding:10px var(--sp-4);font-size:var(--text-md);font-family:var(--font-ui);color:var(--ink);background:var(--bg);border:1px solid var(--rule-strong);border-radius:var(--r-sm);transition:border-color var(--dur-fast) var(--ease-out-quart)}.input:hover{border-color:var(--ink-faint)}.input:focus{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand);outline:none}.input:disabled{background:var(--surface-2);color:var(--ink-3)}.input[aria-invalid=true]{border-color:var(--danger)}.input-mono{font-variant-numeric:tabular-nums;letter-spacing:.08em}select.input{padding-right:var(--sp-3)}input[type=file].input{padding:10px var(--sp-3);font-size:var(--text-sm)}.form-error{color:var(--danger);font-size:var(--text-sm)}.form-msg{color:var(--ink-2);font-size:var(--text-sm)}.form-ok{color:var(--ok);font-size:var(--text-sm)}.form-warn{color:var(--ink-2);font-size:var(--text-sm)}.form-warn:before{content:"⚠ "}.meta-grid{border-top:1px solid var(--rule);grid-template-columns:max-content minmax(0,1fr);gap:0;margin:0;display:grid}.meta-grid dt,.meta-grid dd{padding:var(--sp-3) 0;border-bottom:1px solid var(--rule);font-size:var(--text-sm);margin:0}.meta-grid dt{color:var(--ink-3);white-space:nowrap;padding-right:var(--sp-6)}.meta-grid dd{color:var(--ink);overflow-wrap:anywhere}.sk{background:var(--surface-2);border-radius:var(--r-xs)}.sk-line{height:.75em;animation:sk-pulse 1.4s var(--ease-out-quart) infinite;margin:.28em 0}@keyframes sk-pulse{0%,to{opacity:1}50%{opacity:.55}}@media (prefers-reduced-motion:reduce){.sk-line{opacity:.8;animation:none}}.empty{padding:var(--sp-9) var(--sp-2);border-top:1px solid var(--rule);text-align:left}.empty h2{font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--track-display);margin-bottom:var(--sp-2);font-weight:600}.empty p{font-size:var(--text-sm);color:var(--ink-2);text-wrap:pretty;max-width:32em}.empty .btn{margin-top:var(--sp-5)}.muted{color:var(--ink-3);font-size:var(--text-sm)}.page-pad{padding:var(--sp-7) 0}.linkish{color:var(--brand);font:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:none;padding:0;text-decoration:underline;text-decoration-thickness:1px}.linkish:hover{color:var(--brand-hover)}.sheet-backdrop{background:var(--backdrop);z-index:var(--z-backdrop);animation:fade-in var(--dur) var(--ease-out-quart);position:fixed;inset:0}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.sheet{background:var(--surface);max-height:78vh;color:var(--ink);border-top:1px solid var(--rule-strong);border-radius:var(--r-lg) var(--r-lg) 0 0;padding-bottom:env(safe-area-inset-bottom,0px);z-index:var(--z-sheet);animation:sheet-up var(--dur-slow) var(--ease-out-expo);outline:none;flex-direction:column;display:flex;position:fixed;bottom:0;left:0;right:0}@keyframes sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-grip{width:36px;height:3px;margin:var(--sp-2) auto 0;border-radius:var(--r-pill);background:var(--rule-strong)}.sheet-head{justify-content:space-between;align-items:center;gap:var(--sp-4);padding:var(--sp-3) var(--sp-5) var(--sp-3);border-bottom:1px solid var(--rule);display:flex}.sheet-head h2{font-family:var(--font-serif);font-size:var(--text-md);letter-spacing:var(--track-display);font-weight:600}.sheet-body{overscroll-behavior:contain;padding:0 var(--sp-5) var(--sp-5);-webkit-overflow-scrolling:touch;overflow-y:auto}.sheet-actions{gap:var(--sp-4);padding-top:var(--sp-5);margin-top:var(--sp-2);border-top:1px solid var(--rule);display:flex}.sheet-actions .primary{flex:1}.setting-row{align-items:center;gap:var(--sp-4);min-height:56px;padding:var(--sp-2) 0;border-bottom:1px solid var(--rule);display:flex}.setting-row:last-of-type{border-bottom:none}.setting-label{font-size:var(--text-sm);color:var(--ink-3);flex:0 0 4em}.setting-control{align-items:center;gap:var(--sp-2);flex-wrap:wrap;flex:1;display:flex}.setting-value{font-size:var(--text-sm);color:var(--ink-2);text-align:center;min-width:46px}.app-shell{background:var(--bg);min-height:100dvh;color:var(--ink);font-family:var(--font-ui)}.app-main{max-width:var(--measure);padding:0 var(--sp-5) calc(env(safe-area-inset-bottom,0px) + 88px);margin:0 auto}.bottom-nav{background:var(--chrome);border-top:1px solid var(--rule);padding-bottom:env(safe-area-inset-bottom,0px);z-index:var(--z-sticky);display:flex;position:fixed;bottom:0;left:0;right:0}.nav-item{min-height:56px;padding:var(--sp-2) 0;font-size:var(--text-xs);color:var(--ink-3);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-quart);background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;display:flex;position:relative}.nav-item:hover{color:var(--ink)}.nav-item:active{background:var(--press)}.nav-item[aria-current=page]{color:var(--brand);font-weight:600}.nav-item[aria-current=page]:before{content:"";background:var(--brand);width:20px;height:2px;position:absolute;top:0;left:50%;transform:translate(-50%)}.nav-item svg{width:20px;height:20px}.nav-badge{background:var(--danger);min-width:16px;color:var(--bg);border-radius:var(--r-pill);text-align:center;font-variant-numeric:tabular-nums;margin-left:6px;padding:0 4px;font-size:10px;line-height:16px;position:absolute;top:4px;left:50%}.catalog-tools{gap:var(--sp-4);padding:var(--sp-4) 0;flex-direction:column;display:flex}.search-row{gap:var(--sp-3);display:flex}.search-row .input{flex:1}.search-row .btn{flex:none}.applied{align-items:center;gap:var(--sp-2);padding-bottom:var(--sp-4);font-size:var(--text-xs);color:var(--ink-3);flex-wrap:wrap;display:flex}.applied-chip{align-items:center;gap:var(--sp-1);min-height:32px;padding:2px var(--sp-2) 2px var(--sp-3);font-size:var(--text-xs);color:var(--ink-2);background:var(--surface-2);border:1px solid var(--rule);border-radius:var(--r-pill);cursor:pointer;display:inline-flex}.applied-chip:hover{border-color:var(--ink-faint);color:var(--ink)}.applied-chip .x{color:var(--ink-3);font-size:14px;line-height:1}.applied-chip:hover .x{color:var(--danger)}.work-detail{padding-top:calc(env(safe-area-inset-top,0px) + var(--sp-3))}.detail-head{justify-content:space-between;align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0 var(--sp-5);display:flex}.detail-actions{gap:var(--sp-2);display:flex}.detail-title{font-family:var(--font-serif);font-size:var(--text-2xl);letter-spacing:var(--track-display);text-wrap:balance;font-weight:600;line-height:1.35}.detail-author{margin-top:var(--sp-1);font-size:var(--text-base);color:var(--ink-2)}.detail-colophon{margin-top:var(--sp-6)}.detail-desc{margin-top:var(--sp-6);font-family:var(--font-serif);font-size:var(--text-md);color:var(--ink);max-width:var(--measure-prose);text-wrap:pretty;white-space:pre-wrap;line-height:1.85}.detail-cta{left:0;right:0;bottom:calc(env(safe-area-inset-bottom,0px) + 56px);gap:var(--sp-3);max-width:var(--measure);padding:var(--sp-3) var(--sp-5);background:var(--chrome);border-top:1px solid var(--rule);z-index:var(--z-sticky);margin:0 auto;display:flex;position:fixed}.detail-cta .primary{flex:1}.auth-page{max-width:var(--measure-form);padding-top:calc(env(safe-area-inset-top,0px) + var(--sp-9));margin:0 auto}.auth-page h1{font-family:var(--font-serif);font-size:var(--text-xl);letter-spacing:var(--track-display);font-weight:600}.auth-lede{margin-top:var(--sp-2);font-size:var(--text-sm);color:var(--ink-2)}.auth-form{gap:var(--sp-4);margin-top:var(--sp-6);flex-direction:column;display:flex}.auth-form .btn{margin-top:var(--sp-2)}.auth-foot{margin-top:var(--sp-6);font-size:var(--text-sm);color:var(--ink-3)}.subnav{gap:var(--sp-5);padding-bottom:var(--sp-4);display:flex}.subnav .linkish{font-size:var(--text-sm)}.admin-shell{padding-bottom:var(--sp-10)}.admin-panel{padding:var(--sp-5) 0;border-top:1px solid var(--rule)}.admin-panel h2{font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--track-display);margin-bottom:var(--sp-2);font-weight:600}.admin-panel h3{font-size:var(--text-base);color:var(--ink);margin:var(--sp-6) 0 var(--sp-3);font-weight:600}.admin-panel>p+.form-row,.admin-panel>h2+p{margin-bottom:var(--sp-4)}.form-row{gap:var(--sp-3);margin:var(--sp-3) 0;display:flex}.form-row .input{flex:1}.form-grid{gap:var(--sp-4);margin:var(--sp-4) 0;flex-direction:column;display:flex}.admin-table{border-collapse:collapse;width:100%;font-size:var(--text-sm);margin:var(--sp-3) 0}.admin-table th{text-align:left;padding:var(--sp-2) var(--sp-3) var(--sp-2) 0;font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--track-label);border-bottom:1px solid var(--rule-strong);white-space:nowrap;font-weight:600}.admin-table td{padding:var(--sp-3) var(--sp-3) var(--sp-3) 0;border-bottom:1px solid var(--rule);vertical-align:middle}.admin-table .row-actions{margin-top:0}.state{align-items:center;gap:var(--sp-1);font-size:var(--text-xs);color:var(--ink-2);font-weight:600;display:inline-flex}.state:before{content:"●";color:var(--ink-faint);font-size:9px}.state-busy:before{color:var(--brand)}.state-ok:before{color:var(--ok)}.state-bad:before{color:var(--danger)}.state-review:before{content:"⚠";color:var(--brand);font-size:11px}.tally{gap:var(--sp-2) var(--sp-5);margin:var(--sp-3) 0;flex-wrap:wrap;display:flex}.tally div{font-size:var(--text-sm);color:var(--ink-3)}.tally b{font-size:var(--text-lg);color:var(--ink);font-variant-numeric:tabular-nums;display:block}.hint{font-size:var(--text-xs);color:var(--ink-3)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--text-xs)}.snippet{font-family:var(--font-serif);font-size:var(--text-sm);color:var(--ink-2);line-height:1.6}@media (width>=768px){:root{--measure:820px}.app-main{padding-left:var(--sp-8);padding-right:var(--sp-8)}.row{padding:var(--sp-5) 0}.detail-cta{margin-top:var(--sp-7);background:0 0;border-top:none;padding:0;position:static}.detail-cta .primary{flex:none;min-width:180px}.sheet{border-radius:var(--r-lg);max-width:560px;bottom:var(--sp-8);margin:0 auto}.bottom-nav{justify-content:center;gap:var(--sp-8)}.nav-item{flex:none;min-width:128px}}.admin-sub{margin-top:var(--sp-7)}.admin-sub h3:first-child{margin-top:0}.reader{font-family:var(--font-ui);background:var(--bg);color:var(--ink);--chrome-top:56px;--chrome-bottom:112px;--column-gap:48px;flex-direction:column;display:flex;position:fixed;inset:0}.reader[data-mode=paginated]{--chrome-bottom:152px}.reader.theme-light{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:oklch(100% 0 0);--surface:oklch(98.1% .004 77);--surface-2:oklch(96.2% .006 77);--chrome:oklch(98.1% .004 77);--ink:oklch(22.5% .014 77);--ink-2:oklch(43% .014 77);--ink-3:oklch(53.5% .014 77);--ink-faint:oklch(66.5% .012 77);--rule:oklch(90.5% .006 77);--rule-strong:oklch(83.5% .008 77);--brand:oklch(50.5% .104 77);--brand-hover:oklch(44% .088 77);--brand-tint:oklch(96.5% .025 77);--on-brand:oklch(99.5% .004 77);--note-bg:oklch(95.5% .04 92);--press:oklch(22.5% .014 77/.05);--backdrop:oklch(22.5% .014 77/.42)}.reader.theme-sepia{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:oklch(94.5% .027 86);--surface:oklch(96.5% .022 86);--surface-2:oklch(91.5% .026 86);--chrome:oklch(96.5% .022 86);--ink:oklch(28.5% .022 62);--ink-2:oklch(40.5% .022 66);--ink-3:oklch(50% .022 70);--ink-faint:oklch(64.5% .02 74);--rule:oklch(86.8% .024 86);--rule-strong:oklch(80% .026 86);--brand:oklch(47% .098 64);--brand-hover:oklch(40% .085 64);--brand-tint:oklch(91.5% .045 80);--on-brand:oklch(98.5% .015 86);--note-bg:oklch(91.5% .045 92);--press:oklch(28.5% .022 62/.06);--backdrop:oklch(28.5% .022 62/.4)}.reader.theme-dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:oklch(15.5% 0 0);--surface:oklch(20.5% .004 77);--surface-2:oklch(25% .005 77);--chrome:oklch(20.5% .004 77);--ink:oklch(87.8% .009 77);--ink-2:oklch(75.5% .011 77);--ink-3:oklch(64.5% .011 77);--ink-faint:oklch(49% .01 77);--rule:oklch(29.5% .005 77);--rule-strong:oklch(38.5% .006 77);--brand:oklch(79% .115 77);--brand-hover:oklch(85% .105 77);--brand-tint:oklch(27% .03 77);--on-brand:oklch(18% .03 77);--note-bg:oklch(30% .035 92);--press:oklch(87.8% .009 77/.07);--backdrop:oklch(8% 0 0/.62)}.reader-scroll{overscroll-behavior-y:contain;padding:calc(env(safe-area-inset-top,0px) + var(--sp-6)) var(--sp-6) calc(env(safe-area-inset-bottom,0px) + 72px);-webkit-overflow-scrolling:touch;flex:1;overflow-y:auto}.reader-viewport{padding:calc(env(safe-area-inset-top,0px) + var(--sp-6)) 0 calc(env(safe-area-inset-bottom,0px) + var(--sp-8));flex:1;overflow:hidden}.reader[data-chrome-visible] .reader-scroll{padding-top:calc(env(safe-area-inset-top,0px) + var(--chrome-top) + var(--sp-4));padding-bottom:calc(env(safe-area-inset-bottom,0px) + var(--chrome-bottom) + var(--sp-6))}.reader[data-chrome-visible] .reader-viewport{padding-top:calc(env(safe-area-inset-top,0px) + var(--chrome-top) + var(--sp-4));padding-bottom:calc(env(safe-area-inset-bottom,0px) + var(--chrome-bottom) + var(--sp-2))}.reader-body{max-width:var(--measure-prose);font-family:var(--font-serif);font-size:var(--reader-font-size,18px);line-height:var(--reader-line-height,1.9);color:var(--ink);margin:0 auto}.reader-body p{margin:0 0 var(--reader-para-spacing,.9em);text-indent:2em;text-align:justify;text-justify:inter-ideograph;word-break:break-word;overflow-wrap:anywhere}.reader-body p:last-child{margin-bottom:0}.reader-viewport .reader-body{max-width:none;height:100%;padding:0 var(--sp-6)}.reader-top{align-items:center;gap:var(--sp-3);min-height:calc(env(safe-area-inset-top,0px) + var(--chrome-top));padding:calc(env(safe-area-inset-top,0px) + var(--sp-2)) var(--sp-4) var(--sp-2);background:var(--chrome);border-bottom:1px solid var(--rule);transition:transform var(--dur) var(--ease-out-quart);z-index:var(--z-sticky);display:flex;position:absolute;top:0;left:0;right:0;transform:translateY(-100%)}.reader-top[data-visible]{transform:translateY(0)}.reader-top-title{flex-direction:column;gap:1px;min-width:0;display:flex}.reader-chapter-label{font-family:var(--font-serif);font-size:var(--text-base);letter-spacing:var(--track-display);white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.reader-work-title{font-size:var(--text-xs);color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.reader-rule{background:var(--brand);height:2px;transition:width var(--dur-slow) var(--ease-out-quart);position:absolute;bottom:-1px;left:0}.icon-btn{width:var(--tap);height:var(--tap);color:var(--ink-2);border-radius:var(--r-sm);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-quart), background var(--dur-fast) var(--ease-out-quart);background:0 0;border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.icon-btn:hover:not(:disabled){color:var(--ink);background:var(--press)}.icon-btn:active:not(:disabled){background:var(--press)}.icon-btn:disabled{color:var(--ink-faint);cursor:not-allowed}.icon-btn svg{width:20px;height:20px}.reader-toolbar{background:var(--chrome);border-top:1px solid var(--rule);padding-bottom:env(safe-area-inset-bottom,0px);transition:transform var(--dur) var(--ease-out-quart);z-index:var(--z-sticky);flex-direction:column;display:flex;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%)}.reader-toolbar[data-visible]{transform:translateY(0)}.tb-pages{justify-content:center;align-items:center;gap:var(--sp-2);margin:var(--sp-2) var(--sp-4) 0;background:var(--surface-2);border-radius:var(--r-pill);padding:2px;display:flex}.tb-pages .pill-btn{min-height:34px;padding:0 var(--sp-4);font-size:var(--text-sm);color:var(--ink-2);border-radius:var(--r-pill);cursor:pointer;background:0 0;border:none}.tb-pages .pill-btn:hover:not(:disabled){color:var(--ink);background:var(--press)}.tb-pages .pill-btn:disabled{color:var(--ink-faint);cursor:not-allowed}.tb-pageinfo{text-align:center;min-width:68px;font-size:var(--text-xs);color:var(--ink-3);font-variant-numeric:tabular-nums}.tb-chapters{align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);display:flex}.tb-chapters .step-btn{min-height:40px;padding:0 var(--sp-3);font-size:var(--text-sm);color:var(--ink-2);border-radius:var(--r-sm);cursor:pointer;white-space:nowrap;transition:color var(--dur-fast) var(--ease-out-quart), border-color var(--dur-fast) var(--ease-out-quart);background:0 0;border:1px solid #0000}.tb-chapters .step-btn:hover:not(:disabled){color:var(--ink);border-color:var(--rule-strong)}.tb-chapters .step-btn:disabled{color:var(--ink-faint);cursor:not-allowed}.reader-progress{text-align:center;min-width:0;font-size:var(--text-xs);color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.tb-main{border-top:1px solid var(--rule);display:flex}.tool-btn{min-height:52px;padding:var(--sp-2) 0;font-size:var(--text-xs);color:var(--ink-3);cursor:pointer;transition:color var(--dur-fast) var(--ease-out-quart), background var(--dur-fast) var(--ease-out-quart);background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;display:flex}.tool-btn:hover:not(:disabled){color:var(--ink);background:var(--press)}.tool-btn:active:not(:disabled){background:var(--press)}.tool-btn:disabled{color:var(--ink-faint);cursor:not-allowed}.tool-btn:focus-visible{outline-offset:-3px}.tool-btn svg{width:20px;height:20px}.tool-glyph{width:20px;height:20px;font-family:var(--font-serif);place-items:center;font-size:15px;font-weight:600;line-height:1;display:grid}.reader-pageinfo{bottom:calc(env(safe-area-inset-bottom,0px) + var(--sp-2));text-align:center;font-size:var(--text-xs);color:var(--ink-3);z-index:5;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out-quart);position:absolute;left:0;right:0}.reader[data-chrome-visible] .reader-pageinfo{opacity:0}.reader-notes{top:calc(env(safe-area-inset-top,0px) + var(--sp-3));align-items:center;gap:var(--sp-2);padding:0 var(--sp-5);z-index:var(--z-toast);pointer-events:none;flex-direction:column;display:flex;position:absolute;left:0;right:0}.reader-note{max-width:100%;padding:var(--sp-2) var(--sp-5);border-radius:var(--r-pill);background:var(--note-bg);color:var(--ink);font-size:var(--text-sm);text-align:center;border:1px solid var(--rule-strong);animation:note-in var(--dur-slow) var(--ease-out-expo);margin:0}@keyframes note-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.reader-msg{justify-content:center;align-items:center;gap:var(--sp-4);min-height:100dvh;padding:var(--sp-7);text-align:center;font-family:var(--font-ui);font-size:var(--text-base);background:var(--bg);color:var(--ink);flex-direction:column;display:flex}.reader-msg h2{font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--track-display);font-weight:600}.reader-msg p{color:var(--ink-2);text-wrap:pretty;max-width:24em}.reader-msg .msg-actions{gap:var(--sp-3);margin-top:var(--sp-2);display:flex}.reader-err-code{font-size:var(--text-xs);color:var(--ink-3);font-family:ui-monospace,Menlo,monospace}.reader-skeleton{max-width:var(--measure-prose);padding:calc(env(safe-area-inset-top,0px) + var(--sp-8)) var(--sp-6);margin:0 auto}.reader-skeleton .sk-line{height:1.1em;margin:0 0 .8em}.toc-list{margin:0;padding:0}.toc-item{gap:var(--sp-3);width:100%;min-height:var(--tap);padding:var(--sp-4) var(--sp-2);text-align:left;font-family:var(--font-ui);font-size:var(--text-base);border:none;border-bottom:1px solid var(--rule);color:var(--ink);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-quart);background:0 0;align-items:baseline;display:flex}.toc-item:hover{background:var(--press)}.toc-item:focus-visible{outline-offset:-2px}.toc-item[aria-current]{color:var(--brand);font-weight:600}.toc-item[aria-current]:before{content:"▸";margin-right:-2px}.toc-label{font-family:var(--font-serif);white-space:nowrap;letter-spacing:var(--track-display)}.toc-title{min-width:0;color:var(--ink-3);font-size:var(--text-sm);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.toc-here{padding:1px var(--sp-2);border:1px solid var(--brand);border-radius:var(--r-pill);font-size:var(--text-xs);color:var(--brand);flex:none;font-weight:600}.toc-more{width:100%;margin-top:var(--sp-4)}.reader-figure{margin-block:var(--sp-4);text-align:center}.reader-figure img{border-radius:2px;max-width:100%;height:auto;max-height:80svh;display:inline-block}.reader-figure-caption{color:var(--ink-3);text-align:center;margin-block-start:var(--sp-2);font-size:.85em;display:block}.reader-figure-missing{padding-block:var(--sp-4);border:1px dashed var(--rule)}
