:root{--bg:#f5f3ed;--panel:#fffdf7;--ink:#303c35;--muted:#81867d;--line:#dedfd5;--accent:#435d49;--reader-bg:#faf8f2;--reader-ink:#333d36;--font-size:21px;--line-height:1.95;--reading-font:Georgia,'Songti SC','Noto Serif CJK SC',serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;-webkit-tap-highlight-color:transparent}button,input{font:inherit}button,a,input{touch-action:manipulation}button{cursor:pointer}button{color:inherit}button:disabled{opacity:.35;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #879c78;outline-offset:4px}button{border:0;background:none}a{color:inherit;text-decoration:none}[hidden]{display:none!important}.top{max-width:1200px;margin:auto;height:108px;display:flex;justify-content:space-between;align-items:center;padding:0 44px;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;font-size:24px;font-weight:600;letter-spacing:2px}.brand-icon{background:var(--accent);color:#f9f8ec;border-radius:12px;padding:7px 9px;font:24px Georgia,serif}.brand small{display:block;font-size:9px;letter-spacing:3px;margin-top:4px;color:var(--muted)}.header-right{display:flex;align-items:center;gap:24px}.status{font-size:12px;color:var(--muted)}.status:before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:#8c9d74;margin-right:8px}.icon-button{width:30px;height:30px;border:1px solid var(--line);border-radius:50%;font-family:Georgia,serif}.shelf-main{max-width:1112px;margin:auto;padding:0 0 24px}.intro{position:relative;padding:66px 0 62px;overflow:hidden;min-height:386px}.eyebrow{font-size:10px;letter-spacing:3px;color:#819174;margin-bottom:19px}h1{font-family:Georgia,'Songti SC',serif;font-weight:500;font-size:45px;line-height:1.5;letter-spacing:2px;margin:0 0 14px}h1 span{color:#9fa98f}.intro p{font-size:14px;line-height:1.9;color:var(--muted);margin:0 0 25px}.mobile-break{display:none}.primary{display:inline-flex;gap:10px;align-items:center;justify-content:center;padding:13px 24px;border-radius:7px;background:var(--accent);color:#fffdf4;font-size:14px}.primary span{font-size:23px;line-height:14px}.file-hint{margin-left:16px;color:var(--muted);font-size:11px}.intro-art{position:absolute;right:80px;top:40px;width:340px;height:320px;pointer-events:none}.art-orbit{position:absolute;inset:0;border:1px solid #d9dece;border-radius:50%;transform:rotate(-20deg) scale(1.15,.82)}.art-book{position:absolute;width:162px;height:223px;border-radius:3px 9px 9px 3px;box-shadow:9px 16px 25px #3645351a,inset 5px 0 0 #ffffff14}.book-back{left:158px;top:53px;background:#c7ab81;transform:rotate(16deg);color:#6b593f;padding:28px 24px}.book-back span{writing-mode:vertical-rl;letter-spacing:5px;font-family:serif}.book-front{left:56px;top:30px;background:#526b56;transform:rotate(-12deg);color:#e9e9d6;padding:26px 22px;border:1px solid #758569}.book-front div{font-size:10px;letter-spacing:3px;opacity:.7}.book-front strong{font-family:serif;font-weight:400;font-size:23px;line-height:1.8;display:block;margin-top:20px}.book-front i{position:absolute;right:22px;bottom:38px;font-size:25px;color:#b5c3a5}.book-front small{font-size:7px;letter-spacing:2px;position:absolute;bottom:18px}.art-star{position:absolute;right:2px;top:10px;font-size:35px;color:#a5ad94}.section-heading{display:flex;justify-content:space-between;align-items:center;margin:0 0 22px;gap:16px}h2{font-size:19px;font-weight:600;margin:0;letter-spacing:.5px}.muted{color:var(--muted);font-size:12px;line-height:1.8}.heading-group{display:flex;align-items:center;gap:10px}.count{border:1px solid var(--line);padding:2px 8px;border-radius:20px;font-size:11px;color:var(--muted)}.continue-card{width:100%;display:flex;align-items:center;text-align:left;background:#e9eddf;border:1px solid #dce2d1;border-radius:10px;padding:20px 24px;gap:22px;margin-bottom:43px}.mini-cover{width:51px;height:68px;flex-shrink:0;border-radius:2px 5px 5px 2px;background:#526b56;color:#f2efdc;display:grid;place-content:center;writing-mode:vertical-rl;font:12px serif;padding:8px;overflow:hidden}.continue-info{flex:1;min-width:0}.continue-info strong{font-size:16px;font-weight:500}.continue-info p{font-size:12px;color:#78846f;margin:8px 0 0}.continue-action{font-size:13px;color:#53694e}.books-section{padding-top:3px}.search{display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--line);padding:7px 0;color:var(--muted)}.search>span{font-size:24px;line-height:14px}.search input{background:none;border:0;outline:0;font-size:12px;color:var(--ink);width:156px}.book-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:38px 30px}.book-card{min-width:0}.book-open{width:100%;padding:0;text-align:left;display:block}.cover{aspect-ratio:.72;background:var(--cover,#526b56);color:#f5efdc;border-radius:3px 9px 9px 3px;position:relative;overflow:hidden;padding:22px 20px;box-shadow:2px 6px 9px #30392d12;transition:transform .2s;display:flex;flex-direction:column;justify-content:space-between}.book-open:hover .cover{transform:translateY(-4px)}.cover:before{content:'';position:absolute;left:5px;top:0;bottom:0;border-left:1px solid #ffffff28;border-right:1px solid #0000000c;width:3px}.cover:after{content:'✦';position:absolute;font-size:115px;opacity:.09;right:-12px;bottom:12px}.cover-title{font-family:Georgia,'Songti SC',serif;font-size:23px;line-height:1.6;position:relative;z-index:1;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.cover small{font-size:9px;letter-spacing:2px;opacity:.6}.cover img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}.book-title{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:14px 0 7px;font-weight:500}.book-meta{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--muted)}.book-meta>span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.remove-book{padding:4px 2px 4px 10px;color:var(--muted)}.add-book{border:1px dashed #cfd5c5;border-radius:7px;aspect-ratio:.72;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#8a9780;gap:12px;width:100%}.add-book span{font-size:29px;font-weight:200}.add-book small{font-size:12px}.empty{padding:40px;text-align:center;color:var(--muted)}footer{display:flex;justify-content:space-between;border-top:1px solid var(--line);margin-top:65px;padding-top:23px;font-size:11px;color:#92988b}#reader{min-height:100vh;background:var(--reader-bg);color:var(--reader-ink);padding-bottom:calc(70px + env(safe-area-inset-bottom))}.reader-top{position:sticky;top:0;z-index:5;height:65px;display:flex;align-items:center;justify-content:space-between;gap:20px;background:var(--reader-bg);border-bottom:1px solid #88888822;padding:0 max(20px,calc((100vw - 1000px)/2));padding-top:env(safe-area-inset-top);height:calc(65px + env(safe-area-inset-top))}.text-button{padding:10px 8px;font-size:13px;white-space:nowrap}.reader-title{font-size:12px;opacity:.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reading-content{max-width:730px;padding:45px 30px 20px;margin:auto;font-family:var(--reading-font);font-size:var(--font-size);line-height:var(--line-height);overflow-wrap:anywhere;min-height:65vh}.reading-content h1,.reading-content h2,.reading-content h3{font-family:inherit;line-height:1.6;letter-spacing:0;margin:1em 0;font-size:1.35em}.reading-content p{margin:0 0 1em;white-space:pre-wrap}.reading-content img{max-width:100%;height:auto;display:block;margin:1.5em auto}.chapter-nav{max-width:730px;margin:25px auto;display:flex;align-items:center;justify-content:space-between;padding:0 25px}.chapter-nav>span{font-size:12px;opacity:.5}.reader-bottom{position:fixed;bottom:0;left:0;right:0;padding:16px max(22px,calc((100vw - 730px)/2)) calc(16px + env(safe-area-inset-bottom));background:var(--reader-bg);border-top:1px solid #88888822;display:flex;align-items:center;gap:16px;font-size:11px;z-index:5}.reader-bottom input{flex:1;min-width:50px}.reader-bottom span{white-space:nowrap;opacity:.7}input[type=range]{accent-color:#819572}dialog{border:1px solid var(--line);border-radius:15px;background:var(--panel);color:var(--ink);padding:25px;width:min(440px,calc(100vw - 32px));max-height:80dvh;box-shadow:0 20px 80px #19231933}dialog::backdrop{background:#17221866;backdrop-filter:blur(3px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:22px}.close{font-size:26px;color:var(--muted);padding:0 5px}.setting-label{display:block;font-size:14px;margin:24px 0}.setting-label output{float:right;color:var(--muted);font-size:12px}.setting-label input{display:block;width:100%;margin-top:18px}.segmented,.theme-options{display:flex;gap:8px;margin-top:14px}.segmented button{flex:1;border:1px solid var(--line);padding:10px;border-radius:6px;font-size:13px}.theme-options button{flex:1;border:2px solid transparent;padding:14px 0;border-radius:7px;font-size:12px}.theme-options [data-theme=paper]{background:#faf8f2}.theme-options [data-theme=sepia]{background:#eee1c8}.theme-options [data-theme=green]{background:#dce7db}.theme-options [data-theme=dark]{background:#242b28;color:#c3ccbf}.theme-options button.selected,.segmented button.selected{border-color:#829372}.toc-list{overflow-y:auto;max-height:55dvh}.toc-list button{display:block;text-align:left;width:100%;padding:14px 8px;border-top:1px solid var(--line);font-size:14px;line-height:1.6}.toc-list button.active{color:#4d7243;background:#edf0e5}.help-content p{font-size:14px;line-height:1.9}.help-content h3{font-size:14px;margin-top:25px}.help-content p.muted{font-size:12px}.delete-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:25px}#toast{position:fixed;bottom:calc(34px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);background:#303d34;color:#fff;padding:12px 20px;max-width:90vw;width:max-content;border-radius:8px;font-size:13px;z-index:20;opacity:0;pointer-events:none;transition:opacity .2s}#toast.show{opacity:1}body.reading{background:var(--reader-bg)}@media(min-width:1300px){.intro-art{right:110px}}@media(max-width:1199px){.shelf-main{padding:0 44px 24px}.book-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.intro-art{right:10px}}@media(max-width:800px){.intro-art{right:-25px;transform:scale(.8);transform-origin:right center}.intro{padding-top:48px}h1{font-size:36px}.file-hint{display:block;margin:12px 0 0}.book-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:28px 22px}}@media(max-width:540px){.top{padding:0 23px;height:86px}.brand{font-size:21px}.brand-icon{font-size:22px}.header-right{gap:14px}.status{font-size:10px}.shelf-main{padding:0 23px 24px}.intro{padding:38px 0 33px;min-height:350px}.intro-art{right:-47px;top:32px;transform:scale(.51);transform-origin:right top;opacity:.85}.eyebrow{font-size:8px;letter-spacing:1.9px;position:relative;z-index:1}h1{font-size:31px;line-height:1.6;position:relative;z-index:1}.intro p{font-size:12px;line-height:1.9;max-width:225px;margin-bottom:23px}.mobile-break{display:block}.primary{font-size:13px;padding:12px 20px}.file-hint{font-size:10px}.section-heading{margin-bottom:18px}h2{font-size:17px}.section-heading>.muted{font-size:10px}.continue-card{padding:17px 15px;gap:14px;margin-bottom:34px}.continue-info strong{font-size:14px}.continue-info p{font-size:10px;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.continue-action{font-size:11px}.book-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:25px 22px}.cover{padding:22px 17px}.cover-title{font-size:23px}.search input{width:108px;font-size:11px}.search{gap:4px}.book-title{font-size:13px}.book-meta{font-size:10px}footer{margin-top:40px;gap:12px;flex-direction:column;font-size:10px}.reader-top{gap:12px;padding-left:12px;padding-right:12px}.reader-top .reader-title{max-width:44vw}.reading-content{padding:27px 23px 16px}.reader-bottom{gap:10px}.reader-bottom span{font-size:10px}}@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
/* Reader controls stay outside the text flow, so tapping never shifts a line. */
:root{--page-margin:20px;--paragraph-space:1.1em;--paragraph-indent:2em}
#reader{padding:calc(76px + env(safe-area-inset-top)) 0 calc(120px + env(safe-area-inset-bottom));--control-fill:color-mix(in srgb,var(--reader-ink) 6%,var(--reader-bg));--drawer-bg:var(--reader-bg);--drawer-line:color-mix(in srgb,var(--reader-ink) 11%,transparent)}
.reader-top{position:fixed;left:0;right:0;top:0;height:calc(66px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 16px 0;gap:18px;border:0;background:var(--reader-bg);transition:transform .18s ease,opacity .18s ease}
.reader-title{flex:1;max-width:none!important;min-width:0;text-align:left;opacity:.7;font-size:14px;line-height:1.6}
.reader-tools{display:flex;gap:9px;flex-shrink:0}.reader-icon{width:36px;height:36px;padding:8px;background:var(--control-fill);border-radius:7px;display:grid;place-items:center}.reader-icon svg{width:22px;height:22px;display:block}
.reading-content{max-width:800px;padding:0 var(--page-margin);min-height:calc(100dvh - 170px);font-weight:400;color:var(--reader-ink)}
.reading-content p{margin:0 0 var(--paragraph-space);text-indent:var(--paragraph-indent);white-space:normal}
.reading-content h1,.reading-content h2,.reading-content h3{font-size:1.15em;font-weight:500;margin:.7em 0 1.4em;text-indent:0}
.reading-content figure{margin:1em 0}.reading-content blockquote{margin:1em 0;padding-left:1em;border-left:2px solid #88888844}.reading-content li p{text-indent:0}.reading-content figcaption{text-indent:0;font-size:.8em;opacity:.65;text-align:center}
.reader-bottom{display:block;padding:0 0 env(safe-area-inset-bottom);background:var(--reader-bg);transition:transform .18s ease,opacity .18s ease}
.reader-progress{display:flex;align-items:center;gap:10px;padding:9px 18px 6px;max-width:800px;margin:auto;font-size:10px}.reader-progress input{flex:1;min-width:20px;height:14px}.reader-progress span{white-space:nowrap;opacity:.6;font-size:10px}
.chapter-nav{max-width:none;width:100%;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid #88888812}
.chapter-nav button{border-right:1px solid #88888812;padding:17px 4px;font-size:14px}.chapter-nav button:last-child{border:0}
#reader.controls-hidden .reader-top{transform:translateY(-100%);opacity:0;pointer-events:none;visibility:hidden}
#reader.controls-hidden .reader-bottom{transform:translateY(100%);opacity:0;pointer-events:none;visibility:hidden}
html:has(dialog[open]){overflow:hidden}
dialog.toc-drawer{position:fixed;inset:0 0 0 auto;margin:0;width:min(82vw,480px);max-width:none;height:100dvh;max-height:100dvh;border:0;border-radius:0;padding:0;background:var(--reader-bg);color:var(--reader-ink);box-shadow:-12px 0 45px #00000015;overflow:hidden}
dialog.toc-drawer[open]{display:flex;flex-direction:column;animation:drawer-in .18s ease-out}
.toc-drawer::backdrop{background:#0008;backdrop-filter:none}
.toc-drawer .dialog-heading{padding:calc(21px + env(safe-area-inset-top)) 20px 21px;margin:0;flex-shrink:0;background:color-mix(in srgb,var(--reader-ink) 4%,var(--reader-bg))}
.toc-drawer h2{font-size:21px}.toc-drawer .close{color:var(--reader-ink);font-size:30px;width:35px;height:35px;line-height:30px;padding:0}
.toc-book-title{padding:14px 20px;font-weight:600;font-size:14px;line-height:1.6;border-bottom:1px solid #88888818;flex-shrink:0;background:color-mix(in srgb,var(--reader-ink) 7%,var(--reader-bg));overflow-wrap:anywhere}
.toc-drawer .toc-list{max-height:none;overflow:auto;flex:1;overscroll-behavior:contain;padding-bottom:env(safe-area-inset-bottom)}
.toc-drawer .toc-list button{font-size:15px;padding:17px 22px;border-top:0;border-bottom:1px solid #8888881a;line-height:1.65;color:var(--reader-ink)}
.toc-drawer .toc-list button.active{color:#2677d9;background:color-mix(in srgb,#2677d9 12%,var(--reader-bg));border-left:3px solid #2677d9;padding-left:19px;font-weight:600}
#settingsDialog .setting-label{margin:21px 0}#settingsDialog{overscroll-behavior:contain}
@keyframes drawer-in{from{transform:translateX(100%)}to{transform:translateX(0)}}
@media(min-width:850px){.reader-top{padding-left:max(24px,calc((100vw - 800px)/2));padding-right:max(24px,calc((100vw - 800px)/2))}.chapter-nav{max-width:800px;margin:auto}}
@media(prefers-reduced-motion:reduce){dialog.toc-drawer[open]{animation:none}}

/* Compact library: actions and books, without a promotional header. */
.top{height:84px}
.library-actions{display:flex;align-items:center;gap:16px;padding:28px 0 30px}
.library-actions .file-hint{display:inline;margin:0}
@media(max-width:540px){.top{height:76px}.library-actions{padding:22px 0 26px}}

.txt-file-name{font-size:13px;overflow-wrap:anywhere;margin:0 0 18px}.txt-encoding-label{display:flex;align-items:center;gap:16px;font-size:13px}.txt-encoding-label select{flex:1;min-width:0;border:1px solid var(--line);padding:9px;border-radius:6px;color:var(--ink);background:var(--panel);font:inherit}#txtPreview{white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;max-height:32dvh;margin:12px 0;padding:14px;background:var(--bg);border:1px solid var(--line);border-radius:7px;font:14px/1.8 -apple-system,'PingFang SC',sans-serif}#txtEncodingNote{font-size:11px;margin:12px 0}

.tap-word{cursor:pointer;border-radius:2px}.word-active{background:#8ea97844;box-shadow:0 1px 0 #819572}.word-popup{position:fixed;z-index:12;width:360px;max-width:calc(100vw - 20px);max-height:min(420px,56dvh);overflow:auto;overscroll-behavior:contain;padding:17px 18px;background:var(--reader-bg);color:var(--reader-ink);border:1px solid #88888844;border-radius:12px;box-shadow:0 10px 40px #0003;font:14px/1.6 -apple-system,'PingFang SC',sans-serif}.word-popup-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding-bottom:10px;border-bottom:1px solid #88888822}.word-popup-heading h2{font-size:21px;font-weight:600;letter-spacing:0;overflow-wrap:anywhere;line-height:1.4}.word-popup-heading .close{color:var(--reader-ink);padding:0 2px;font-size:26px;line-height:30px}.word-popup-heading span{font-size:12px;opacity:.6}.word-chinese{font-size:18px;margin:13px 0}.word-sense{margin:13px 0}.word-sense>span{font-size:11px;font-style:italic;opacity:.6}.word-sense p{margin:3px 0;font-size:13px;line-height:1.65}.word-sense .word-example{opacity:.65;font-size:12px}.word-popup-source{font-size:9px;opacity:.55;border-top:1px solid #88888822;padding-top:10px;margin-top:12px}.word-notice{font-size:13px;opacity:.65;line-height:1.7}.lookup-setting{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:14px;margin:24px 0}.lookup-setting input{accent-color:var(--accent);width:20px;height:20px}

.reading-content .tap-word{touch-action:manipulation;-webkit-tap-highlight-color:rgba(110,145,90,.18)}

.ui-language-setting{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:20px 0;font-size:14px}.ui-language-setting select{font:inherit;padding:8px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--ink)}

.library-settings{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.library-settings svg{width:18px;height:18px}

::highlight(collab){background:#e8ce72;color:#242424}
#collabDialog input{display:block;width:100%;font-family:monospace;box-sizing:border-box}
#collabDialog button{margin:4px;padding:8px}
#collabDialog label{display:block;margin-top:12px}
#collabComments{padding-left:20px;max-height:35vh;overflow:auto}
#collabComments p{white-space:pre-wrap;overflow-wrap:anywhere}
#collabComposer{position:fixed;bottom:12px;right:12px;z-index:30;max-width:300px;padding:12px;background:var(--bg,#f5f3ed);color:var(--text,#222);border:1px solid #aaa;border-radius:12px;box-shadow:0 3px 20px #0003}
#collabComposer textarea{display:block;width:100%;box-sizing:border-box}
.collab-note{position:absolute;z-index:4;max-width:34px;padding:2px;border:1px solid #b39430;border-radius:5px;background:#fff2ac}
