:root{color-scheme:light;--bg:#f6f5f1;--paper:#fff;--ink:#242b29;--muted:#6c7470;--line:#dfe3dc;--accent:#285d4b;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink)}[hidden]{display:none!important}button,input,textarea{font:inherit}button{cursor:pointer;min-height:44px;border:1px solid var(--line);border-radius:12px;padding:10px 15px;background:var(--paper);color:var(--ink)}button:hover{border-color:var(--accent)}button:disabled{cursor:default;opacity:.45}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid #b5ccbc;outline-offset:3px}a{color:inherit;text-decoration:none}.primary,.play{background:var(--accent);color:#fff;border-color:var(--accent)}.quiet{background:transparent;border-color:transparent}.brand{font-size:23px;font-weight:700;letter-spacing:-.7px}.brand span{display:block;font-size:11px;font-weight:400;letter-spacing:1px;color:var(--muted);margin-top:4px}header{max-width:960px;margin:auto;padding:25px 24px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}main{max-width:760px;margin:auto;padding:30px 24px 130px}.section-heading{margin:16px 0 35px}h1{font-size:30px;letter-spacing:-.7px;line-height:1.4;margin:12px 0}h2{font-size:19px;margin:15px 0}p{line-height:1.7}small,.hint{color:var(--muted)}.section-heading p{color:var(--muted)}.row{display:flex;justify-content:space-between;align-items:center;gap:12px}.content-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:20px 2px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;text-align:left;gap:15px}.content-item strong{font-size:18px;display:block;overflow-wrap:anywhere}.content-item small{display:block;margin-top:7px}.arrow{font-size:25px;color:var(--muted)}.recent-card{background:#e6ece4;padding:24px;border-radius:16px;margin-bottom:30px}.recent-card h2{overflow-wrap:anywhere}.empty{padding:45px 20px;border:1px dashed #bac8bf;border-radius:16px;text-align:center}.eyebrow{font-size:12px;letter-spacing:2px;color:var(--muted);margin:30px 0 0}#book-title{overflow-wrap:anywhere}.chapter-heading h2{font-weight:500;overflow-wrap:anywhere}.chapter-heading button{flex-shrink:0}.reading{padding:22px 0;min-height:180px}.reading p{font-size:19px;line-height:1.9;white-space:pre-wrap;overflow-wrap:anywhere;max-height:330px;overflow:auto}.reading .quiet{padding-left:0}.status{color:var(--accent);min-height:30px}.options{display:flex;justify-content:space-between;align-items:center;font-size:14px;gap:12px}.options label{min-height:44px;display:flex;align-items:center;gap:8px}.controls{background:var(--bg);border-top:1px solid var(--line);padding:16px 0 10px}.transport{display:flex;align-items:center;justify-content:space-around;gap:15px;margin-top:16px}.play{min-width:96px;min-height:68px;border-radius:35px;font-size:20px}.transport button:not(.play){font-size:15px}.controls progress{appearance:none;width:100%;height:4px;border:0;border-radius:2px;margin-top:12px;background:var(--line)}progress::-webkit-progress-bar{background:var(--line)}progress::-webkit-progress-value{background:var(--accent)}progress::-moz-progress-bar{background:var(--accent)}#notice{font-size:14px;line-height:1.6;color:var(--muted);margin-bottom:15px}#notice:empty{display:none}#mini{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,760px);background:var(--paper);border-top:1px solid var(--line);padding:12px 20px calc(12px + env(safe-area-inset-bottom));display:flex;justify-content:space-between;align-items:center;gap:12px;z-index:5}#mini-info{text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1}dialog{border:1px solid var(--line);border-radius:18px;padding:22px;width:min(640px,calc(100% - 32px));max-height:calc(100dvh - 32px);background:var(--bg);color:var(--ink)}dialog::backdrop{background:rgba(20,32,26,.3)}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:15px}.dialog-head h2{margin:0}.tabs{display:flex;gap:10px;margin-bottom:22px}.tabs button{flex:1}.tabs .active{border-color:var(--accent);color:var(--accent);background:#e6ece4}label{display:block}input:not([type=checkbox]),textarea{display:block;width:100%;padding:13px;border:1px solid var(--line);border-radius:10px;background:#fff;margin:8px 0 18px;min-height:44px;color:var(--ink)}textarea{resize:vertical;line-height:1.6}.filebox{padding:25px;background:#fff;border:1px dashed #bac8bf;border-radius:12px}.filebox input{border:0!important;padding:0!important;margin-bottom:0!important}.scroll-list{max-height:56dvh;overflow-y:auto;overscroll-behavior:contain;margin:15px 0}.chapter-row{display:block;text-align:left;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;padding:14px}.selected{background:#e6ece4!important;border-color:var(--accent)!important}.current{box-shadow:inset 3px 0 var(--accent)}.paragraph{display:block;width:100%;text-align:left;padding:18px;margin-bottom:12px;white-space:pre-wrap;line-height:1.8;overflow-wrap:anywhere;font-size:17px}.hint{font-size:13px}.dialog-head button{flex-shrink:0}
@media(max-width:600px){header{padding:18px 20px}main{padding:20px 20px 160px}h1{font-size:26px}.brand{font-size:21px}.section-heading{margin-top:18px}.controls{position:fixed;bottom:0;left:0;width:100%;padding:14px 20px calc(12px + env(safe-area-inset-bottom));z-index:3}.reading{min-height:140px}.reading p{font-size:18px;max-height:none}.options{margin-bottom:20px}dialog{width:100%;max-width:none;max-height:90dvh;margin:auto 0 0;border-radius:20px 20px 0 0;padding:20px 20px calc(20px + env(safe-area-inset-bottom))}.scroll-list{max-height:55dvh}.play{min-height:64px;min-width:88px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

.history-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}
.history-row>div{min-width:0}.history-row strong{display:block;overflow-wrap:anywhere}.history-row small{display:block;margin-top:7px}
.history-row button{flex-shrink:0}#recent:not(:empty){margin-bottom:32px}
.voice-row{display:flex;gap:12px;margin-bottom:12px}.voice-choice{flex:1;text-align:left}
#playback-route{font-size:12px;text-align:right}.controls .status{margin:0 0 5px;min-height:24px}

.mode-picker{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;font-size:14px}.mode-picker select{font:inherit;min-height:44px;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}

@media(max-width:600px){main{padding-bottom:340px}.content-item strong{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}}

.listening-options{gap:16px;align-items:flex-start;margin-top:16px}
.listening-options label{flex:1;min-width:0}.listening-options select{width:100%;padding:10px;font-size:16px}
.header-actions{display:flex;align-items:center;gap:10px}
.qr-box{text-align:center;padding:12px 0}
.qr-box svg, .qr-box img{display:block;margin:0 auto 16px;border-radius:14px;background:#fff;padding:12px;border:1px solid var(--line);box-shadow:0 4px 16px rgba(0,0,0,.06);width:220px;height:220px}
.qr-link{font-size:16px;font-weight:600;color:var(--accent);word-break:break-all;margin-bottom:10px}
.session-item{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;margin-bottom:8px;border-radius:12px;background:#fff;border:1px solid var(--line);cursor:pointer;text-align:left;width:100%}
.session-item:hover,.session-item:focus-visible{border-color:var(--accent);background:#fbfbf9}
.session-tag{display:inline-block;padding:2px 8px;font-size:12px;border-radius:6px;background:var(--line);color:var(--muted);margin-right:6px}
.session-tag.current{background:var(--accent);color:#fff}
.session-sub{display:block;font-size:13px;color:var(--muted);margin-top:4px}
.login-page{min-height:90vh;display:grid;place-items:center;padding:24px}.login-card{width:min(100%,400px)}.login-card label,#account-dialog label{display:block;margin:18px 0}.login-card input,#account-dialog input{display:block;width:100%;margin-top:8px;padding:12px;box-sizing:border-box}.login-card p{color:var(--muted)}#device-list>div{display:flex;justify-content:space-between;gap:16px;padding:12px 0}

header{flex-wrap:wrap;gap:12px}.header-actions{margin-left:auto;flex-wrap:wrap}#purge-dialog label{display:block;margin:16px 0}#purge-dialog input[type=password]{display:block;width:100%;padding:12px;margin-top:8px}#purge-confirm{width:auto;display:inline;margin-right:8px}@media(max-width:600px){.header-actions{gap:4px}.header-actions button{padding:10px 12px}#device-list>div{flex-wrap:wrap}}

#engine-dialog label{display:block;margin:16px 0}#engine-dialog input,#engine-dialog select{display:block;width:100%;min-height:44px;margin-top:8px;padding:12px;font:inherit;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}#engine-use{width:100%;margin-top:8px}

#qwen-clone-form label{display:block;margin:12px 0}#qwen-clone-form input:not([type=checkbox]){display:block;width:100%;padding:10px;margin-top:6px}#qwen-clone-consent{width:auto}#engine-model{font-size:14px}

#device-form label{display:block;margin:18px 0}#device-form input,#device-form select{display:block;width:100%;min-height:44px;padding:12px;margin-top:8px;font:inherit;border:1px solid var(--line);border-radius:10px}

.book-row{display:flex;align-items:center;gap:8px}.book-row .content-item{flex:1;min-width:0}.book-row>button.quiet{flex-shrink:0}.history-row{flex-wrap:wrap}

/* Mobile settings: consistent full-width touch controls and progressive disclosure. */
#reading-dialog label,#engine-dialog label{display:block;margin:18px 0;font-size:14px;font-weight:500}
#reading-dialog select,#engine-dialog select{display:block;width:100%;min-height:48px;margin-top:8px;padding:12px 14px;font:inherit;font-size:16px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
.settings-section{padding-bottom:12px}.settings-fold{border-top:1px solid var(--line);margin-top:16px;padding:8px 0}
.settings-fold>summary{min-height:48px;padding:14px 0;font-size:16px;font-weight:600;cursor:pointer;overflow-wrap:anywhere}
#engine-dialog .voice-row{flex-wrap:wrap;align-items:center;padding:14px 0;border-bottom:1px solid var(--line);gap:8px;margin:0}
#engine-dialog .voice-row>span{flex:1 1 100%;overflow-wrap:anywhere;line-height:1.6}
#engine-dialog input[type=checkbox]{display:inline-block;width:22px;height:22px;min-height:22px;margin:0 8px 0 0;vertical-align:middle;padding:0}
#engine-dialog [role=status]:empty,#reading-dialog [role=status]:empty,#engine-summary:empty{display:none}
#reading-dialog .row{position:sticky;bottom:0;background:var(--bg);padding:12px 0 0;gap:12px}
#reading-dialog .row button{flex:1;min-height:48px}
@media(max-width:600px){#reading-dialog,#engine-dialog{padding:20px 20px calc(20px + env(safe-area-inset-bottom));overflow-y:auto}#engine-dialog .row button{min-height:48px;flex:1}}

.file-picker{position:relative;display:flex;align-items:center;justify-content:center;min-height:52px;width:100%;border:1px solid var(--accent);border-radius:12px;background:#e6ece4;color:var(--accent);font-size:16px;font-weight:600;cursor:pointer}
.file-picker input[type=file]{position:absolute;inset:0;width:100%;height:100%;min-height:52px;margin:0;padding:0;opacity:0;cursor:pointer}
.file-picker:focus-within{outline:3px solid #b5ccbc;outline-offset:3px}
.file-name{margin:14px 0 0;font-size:14px;line-height:1.6;overflow-wrap:anywhere;color:var(--muted)}
#file-form>.primary{width:100%;min-height:48px}
input[type=file]::file-selector-button{min-height:44px;padding:10px 14px;font:inherit;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);margin-right:12px;cursor:pointer}

.reader-toolbar{display:flex;align-items:center;gap:14px;margin:12px 0 20px}
.reader-toolbar small{color:var(--muted);font-variant-numeric:tabular-nums}
.controls{border-top:1px solid var(--line);background:var(--paper);border-radius:16px;padding:16px 20px}
#playback-settings-dialog .row{display:block}
#playback-settings-dialog #reading-open{display:block;width:100%;text-align:left;min-height:52px;line-height:1.5}
#playback-settings-dialog .mode-picker{display:block;margin:24px 0;font-size:14px}
#playback-settings-dialog select{display:block;width:100%;min-height:48px;margin-top:8px;padding:12px;font:inherit;font-size:16px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
#playback-settings-dialog .listening-options{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-top:24px;margin-top:24px;border-top:1px solid var(--line)}
#playback-settings-dialog .listening-options label{display:block;font-size:14px}
#playback-settings-dialog .options{margin:24px 0 0}
#playback-settings-dialog .options input{width:22px;height:22px}
#sleep-state:empty{display:none}
@media(max-width:600px){
 main{padding-bottom:220px}
 .controls{border-radius:0;padding:12px 20px calc(12px + env(safe-area-inset-bottom))}
 .controls .transport{margin-top:12px;gap:12px}
 .controls .transport button{min-height:48px}
 .controls .transport .play{min-height:60px;min-width:88px}
 #playback-settings-dialog{height:100dvh;max-height:100dvh;margin:0;width:100%;border-radius:0;border:0;padding:calc(20px + env(safe-area-inset-top)) 20px calc(20px + env(safe-area-inset-bottom))}
 #playback-settings-dialog .dialog-head{position:sticky;top:0;background:var(--bg);padding-bottom:16px;z-index:1;border-bottom:1px solid var(--line)}
 #playback-settings-dialog .playback-settings-body{padding-top:12px}
}

/* Multi-user controls retain the existing mobile reading layout. */
.resource-filter{display:flex;align-items:center;gap:12px;margin:12px 0}
.resource-filter select{min-height:48px;flex:1}
.book-row{flex-wrap:wrap}.book-row .content-item{flex:1;min-width:180px}
.users-dialog{width:min(640px,calc(100% - 24px));max-height:90dvh;overflow:auto}
.users-dialog form{display:grid;gap:14px}.users-dialog input,.users-dialog select{min-height:48px;width:100%;box-sizing:border-box}
.users-dialog input[type=checkbox]{min-height:24px;width:24px}
.user-row{display:flex;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid #dce2da}
.user-row>span{flex:1;overflow-wrap:anywhere}.user-row button,.users-dialog button{min-height:48px}
.users-dialog details{border-top:1px solid #dce2da;padding:12px 0}
.users-dialog summary{min-height:48px;cursor:pointer}
@media(max-width:600px){.users-dialog{margin:0;width:100%;height:100dvh;max-height:100dvh;border-radius:0;box-sizing:border-box}.book-row>.quiet{min-height:48px}}

.user-row>p{flex:1;min-width:0;margin:0;overflow-wrap:anywhere}.user-row>button{flex-shrink:0;white-space:nowrap}.resource-actions{display:flex;flex-wrap:wrap;gap:8px}.resource-actions:empty{display:none}

.filter-segments{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:6px;margin:16px 0;background:#e6ece7;border-radius:14px}
.filter-segments button{min-height:52px;border:0;background:transparent;color:#36584c;font-size:17px;font-weight:600;border-radius:10px}
.filter-segments button.selected{background:#285d4d!important;color:#fff}
.filter-segments button:focus-visible{outline:3px solid #9ebfaa;outline-offset:2px}
.reader-toolbar{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;margin:24px 0}
#playback-settings-open{width:min(100%,320px);min-height:58px;padding:16px 24px;background:#285d4d;color:#fff;border:0;border-radius:14px;font-size:20px;font-weight:650}
.reader-toolbar small{font-size:14px;color:#496056}
.text-entry{width:100%;min-height:52px;margin-top:16px;padding:14px 18px;background:#eef0de;color:#4c5a23;border:1px solid #d1d8b9;border-radius:12px;font-size:17px;font-weight:600;text-align:left}
.text-entry-hint{margin:8px 0 0;color:#5d633f;font-size:14px;line-height:1.6}

.reading{padding:8px 0;min-height:0}.reading #current-text{max-height:180px;overflow:auto}
.reading .text-entry-hint{font-size:14px;line-height:1.6;white-space:normal;max-height:none;overflow:visible;margin:8px 0 16px}

header{display:block;position:sticky;top:0;z-index:4;background:var(--bg)}
.header-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.header-top .brand{font-size:20px;flex-shrink:0}
.header-top .header-actions{gap:4px;margin:0}
.header-top .header-actions button{font-size:13px;padding:8px;min-height:44px;white-space:nowrap}
.header-tools{display:flex;align-items:center;gap:10px;margin-top:12px}
#qr-open{width:48px;min-height:48px;font-size:23px;padding:8px}
.header-tools #import-open{min-height:52px;white-space:nowrap}
.header-tools #playback-settings-open{margin-left:auto;width:auto;min-height:52px;padding:12px 20px;font-size:18px;white-space:nowrap}
.reader-navigation{display:flex;align-items:center;justify-content:space-between;gap:12px}
.reader-navigation #back{width:auto;margin:0;min-height:48px;padding:12px 16px;background:#eef0de;color:#4c5a23;border:1px solid #d1d8b9;border-radius:12px;font-size:15px;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
.reader-navigation #back:hover{background:#e5e8d2}
.reader-navigation .text-entry{width:auto;margin:0;min-height:48px;font-size:15px;padding:12px 16px}
.playback-summary{display:block;color:var(--muted);margin:8px 0}
@media(max-width:360px){.header-top{flex-wrap:wrap}.header-top .header-actions{width:100%;justify-content:flex-end}.header-tools{gap:6px}.header-tools #playback-settings-open{padding:12px 14px}}

#listen{scroll-margin-top:200px}

/* Playback settings belongs to the reader only. */
body:has(#listen[hidden]) #playback-settings-open{display:none}
#qr-open{display:inline-flex;align-items:center;justify-content:center}

/* Give playback and pause distinct colors in both player controls. */
#mini-play{background:var(--accent);color:#fff;border-color:var(--accent)}
#play[data-playing="true"],#mini-play[data-playing="true"]{background:#925b38;border-color:#925b38;color:#fff}
/* Keep voice ownership, visibility and sharing actions legible on phones. */
#manage-voice-list .voice-row{flex-wrap:wrap;align-items:center;padding:16px 0;border-bottom:1px solid var(--line)}
.voice-info{flex:1;min-width:160px;overflow-wrap:anywhere}
.voice-info strong,.voice-visibility{display:block}
.voice-visibility{margin-top:6px;color:var(--muted)}
.voice-visibility.shared{color:var(--accent);font-weight:600}
#manage-voice-list .resource-actions{width:100%}
#manage-voice-list button{min-height:48px}

/* Transport controls: 5-button symmetric responsive layout */
.transport{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:16px;max-width:540px;margin-left:auto;margin-right:auto}
.transport button{border-radius:12px;white-space:nowrap;padding:10px 12px;font-size:14px;transition:background .15s,border-color .15s,transform .1s}
.transport button:active:not(:disabled){transform:scale(.97)}
.transport .nav-chunk{flex:1;background:var(--paper);border:1px solid var(--line);font-weight:600;min-height:48px}
.transport .nav-chunk:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.transport .nav-chapter{flex:0.9;background:transparent;border:1px solid transparent;color:var(--muted);font-size:13px;min-height:44px}
.transport .nav-chapter:hover:not(:disabled){border-color:var(--line);background:var(--paper);color:var(--ink)}
.transport .play{flex:1.2;min-width:88px;max-width:110px;min-height:60px;border-radius:30px;font-size:19px;font-weight:600;box-shadow:0 3px 10px rgba(40,93,75,.15)}

@media(max-width:600px){
 .controls .transport{margin-top:10px;gap:6px;width:100%;max-width:100%}
 .controls .transport button{min-height:44px;padding:8px 4px;font-size:13px}
 .controls .transport .nav-chunk{font-size:13px;border-radius:10px;flex:1}
 .controls .transport .nav-chapter{font-size:12px;padding:8px 2px;flex:0.85}
 .controls .transport .play{min-height:54px;min-width:74px;font-size:17px;border-radius:27px;flex:1.15}
}
@media(max-width:360px){
 .controls .transport{gap:4px}
 .controls .transport button{font-size:11px;padding:6px 2px}
 .controls .transport .play{min-width:64px;font-size:16px}
}

