:root{color-scheme:light;--paper:#f6f4ef;--card:#fffdf9;--ink:#292827;--muted:#817b72;--line:#e3dfd7;--accent:#772f38;--accent-soft:#f2e7e5;--green:#4d6c57;--serif:Georgia,'Times New Roman',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #aa8086;outline-offset:4px}[hidden]{display:none!important}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:400}h1{font-size:clamp(32px,4.2vw,54px);line-height:1.12;letter-spacing:-1.8px}h2{font-size:27px;letter-spacing:-.6px}h3{font-size:28px;line-height:1.13;letter-spacing:-.5px}.topbar{height:96px;max-width:1280px;margin:auto;padding:0 52px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font-size:24px;letter-spacing:-.9px;text-decoration:none;display:flex;align-items:center;font-weight:650;gap:12px}.brand-mark{font-family:var(--serif);font-weight:400;background:var(--accent);color:var(--card);width:38px;height:38px;border-radius:9px;display:flex;justify-content:center;font-size:34px;line-height:32px}.brand-tag{letter-spacing:1.4px;font-weight:500;font-size:8px;color:var(--muted);margin-left:15px;padding-left:22px;border-left:1px solid var(--line)}nav{display:flex;align-items:center;gap:28px}.nav-button{background:none;border:0;padding:12px 0;color:var(--muted);font-size:13px;position:relative}.nav-button.active{color:var(--ink)}.nav-button.active:after{content:'';position:absolute;height:2px;background:var(--accent);bottom:4px;left:0;right:0}.help-button{border:1px solid #cfcac2;background:none;border-radius:50%;height:24px;width:24px;color:var(--muted);font-family:var(--serif)}main{max-width:1160px;margin:auto;padding:0 20px;min-height:calc(100vh - 190px)}.page-heading{display:flex;justify-content:space-between;align-items:flex-end;padding:62px 0 38px;gap:30px}.eyebrow{font-size:9px;letter-spacing:1.8px;font-weight:600;color:var(--muted);font-family:var(--sans);margin-bottom:17px}.lede{font-size:14px;color:var(--muted);line-height:1.8;margin-top:18px}.heading-note{font-size:10px;color:var(--muted);white-space:nowrap;padding-bottom:5px;display:flex;align-items:center;gap:8px}.small-dot{height:5px;width:5px;border-radius:50%;background:var(--green)}.library-stats{border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;gap:70px;padding:23px 0}.library-stats div{display:flex;align-items:baseline;gap:12px}.library-stats strong{font-family:var(--serif);font-weight:400;font-size:27px;letter-spacing:-.7px}.library-stats span{font-size:11px;color:var(--muted)}.section-heading{display:flex;align-items:center;justify-content:space-between;margin:37px 0 21px}.section-heading h2{font-size:25px}.count{font-family:var(--sans);font-size:10px;color:var(--muted);display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid var(--line);border-radius:50%;vertical-align:middle;margin-left:9px}.muted{color:var(--muted)}.section-heading>.muted{font-size:11px}.library-layout{display:grid;grid-template-columns:1fr 262px;gap:26px}.books{display:flex;flex-direction:column;gap:14px}.book-card{background:var(--card);border:1px solid var(--line);border-radius:5px;padding:24px;display:grid;grid-template-columns:77px 1fr auto;gap:25px;align-items:center;min-height:165px}.cover{height:112px;width:77px;border-radius:2px 4px 4px 2px;background:#7b3b42;box-shadow:3px 3px 7px #29282715;position:relative;padding:15px 10px 12px;color:#faeae0;display:flex;flex-direction:column;justify-content:space-between;font-family:var(--serif);overflow:hidden}.cover:before{content:'';position:absolute;top:0;bottom:0;left:5px;border-left:1px solid #ffffff22;border-right:1px solid #00000012;width:3px}.cover-title{font-size:10px;line-height:1.2;text-align:center;overflow:hidden;max-height:62px}.cover-mark{font-size:23px;text-align:center;opacity:.7}.cover.tone-1{background:#586657}.cover.tone-2{background:#73708a}.cover.tone-3{background:#a1774e}.book-meta .eyebrow{font-size:8px;letter-spacing:1px;margin-bottom:10px}.book-meta h3{font-size:25px;overflow-wrap:anywhere}.book-author{color:var(--muted);font-size:11px;margin-top:7px}.book-meta progress{margin-top:20px;width:100%;max-width:280px}.book-progress-label{font-size:10px;color:var(--muted);margin-top:8px}.book-action{font-size:11px!important;padding:11px 16px!important;white-space:nowrap}.button{border-radius:4px;padding:13px 19px;font-size:12px;font-weight:500;display:inline-flex;justify-content:center;align-items:center;gap:20px;border:1px solid transparent;line-height:1.3}.primary{background:var(--accent);color:#fff9f0}.primary:hover{background:#622731}.secondary{border-color:#d8d2c8;background:transparent;color:var(--ink)}.secondary:hover{background:#eeeae3}.import-card{border:1px dashed #d3cbbf;border-radius:5px;padding:27px 25px;display:flex;flex-direction:column;align-items:flex-start;background:#efebe3;min-height:319px}.upload-symbol{border:1px solid #d0c7ba;border-radius:50%;height:34px;width:34px;display:flex;align-items:center;justify-content:center;color:#776d5f;font-size:20px;margin-bottom:22px}.import-card p{font-size:12px;color:var(--muted);line-height:1.7;margin:15px 0 23px}.import-card .button{width:100%;justify-content:space-between}.file-note{font-size:9px;line-height:1.8;color:var(--muted);margin-top:12px}.import-card.dragging{border-color:var(--accent);background:var(--accent-soft)}.empty-state{border:1px solid var(--line);border-radius:5px;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:35px 25px;min-height:319px;background:var(--card)}.empty-state .empty-art{font-size:52px;line-height:1;color:#b4a796;font-family:var(--serif);margin-bottom:18px}.empty-state h2{font-size:26px}.empty-state p{font-size:12px;color:var(--muted);line-height:1.8;margin-top:12px}.library-footnote{display:flex;gap:12px;align-items:center;justify-content:center;margin:34px 0 40px;color:var(--muted)}.tiny-book{font-size:22px;color:#b8aea0}.library-footnote p{font-family:var(--serif);font-size:13px}.library-footnote p span{font-family:var(--sans);font-size:10px;margin-left:14px;color:#9a948b}.site-footer{max-width:1160px;margin:0 auto;padding:24px 20px 27px;border-top:1px solid var(--line);font-size:9px;color:#9a948b;display:flex;justify-content:space-between}.footer-dot{margin:0 7px}.practice-heading{display:flex;justify-content:space-between;align-items:center;padding:30px 0}.text-button{border:0;background:none;padding:5px 0;color:var(--muted);font-size:11px}.text-button:hover{color:var(--accent)}.save-status{font-size:10px;color:var(--green)}.save-status.pending{color:#a1774e}.save-status.error{color:var(--accent)}.practice-title{text-align:center;max-width:660px;margin:10px auto 30px}.practice-title h1{font-size:38px;overflow-wrap:anywhere}.book-location{display:flex;justify-content:center;gap:18px;color:var(--muted);font-size:10px;margin:17px 0}.book-progress{max-width:210px}.metrics{display:flex;justify-content:center;gap:75px;margin:35px 0}.metrics>div{text-align:center;min-width:80px}.metrics strong{font-family:var(--serif);font-size:37px;font-weight:400;letter-spacing:-1px;display:block;font-variant-numeric:tabular-nums}.metrics strong span{font-size:22px}.metrics>div>span{font-size:10px;color:var(--muted);margin-top:5px;display:block}.practice-layout{display:grid;grid-template-columns:1fr 235px;gap:25px;margin-top:34px}.typing-card{background:var(--card);border:1px solid var(--line);border-radius:5px;overflow:hidden}.typing-card-header{padding:22px 25px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #eeeae3}.typing-card-header .eyebrow{font-size:8px;margin:0}.keycap{border:1px solid #dad5cd;border-radius:3px;font-size:8px;margin-left:7px;padding:2px 4px}.typing-surface{position:relative;height:274px;overflow:hidden;padding:28px 28px 15px;cursor:text}.typing-surface:focus-within{box-shadow:inset 0 0 0 2px #c6a4a955}.passage{font-family:'SFMono-Regular',Consolas,'Liberation Mono',monospace;font-size:21px;line-height:1.95;letter-spacing:.2px;color:#b8b2a9;overflow-wrap:break-word;white-space:pre-wrap;height:100%;overflow:hidden}.passage .typed{color:#425f4b}.passage .current{color:var(--ink);position:relative;background:#eee7dc}.passage .current:before{content:'';position:absolute;left:-1px;top:2px;bottom:1px;width:2px;background:var(--accent);animation:blink 1.1s steps(1) infinite}.passage .wrong{background:#f4dce0;color:var(--accent);text-decoration:underline;text-decoration-thickness:2px}.typing-input{position:absolute;left:28px;top:28px;width:calc(100% - 56px);height:calc(100% - 56px);resize:none;opacity:.001;border:0;pointer-events:none;caret-color:transparent}.typing-hint{border-top:1px solid #eeeae3;font-size:10px;color:var(--muted);padding:16px 25px;min-height:45px;line-height:1.5}.typing-hint.error{color:var(--accent)}.pause-overlay{position:absolute;inset:0;background:#fffdf9ed;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:default}.pause-overlay h2{font-size:32px}.pause-overlay .eyebrow{margin-bottom:14px}.pause-overlay p{color:var(--muted);margin:12px 0 20px;font-size:12px}.session-card{background:#eeebe3;border:1px solid #e0dacd;border-radius:5px;padding:26px 23px}.session-card .eyebrow{font-size:8px}.session-card h2{font-size:29px;margin-top:5px}.session-card>p:not(.eyebrow):not(.session-note){font-size:11px;color:var(--muted);margin:10px 0 22px}.goal-progress-label{display:flex;justify-content:space-between;color:var(--muted);font-size:9px;margin-top:9px}.session-tip{display:flex;gap:12px;border-top:1px solid #dcd6ca;padding:22px 0;margin-top:24px}.session-tip>span{color:var(--accent);font-size:21px}.session-tip p{font-size:11px;line-height:1.8;color:#8a8072}.session-card .button{width:100%;font-size:11px}.session-note{font-size:9px;line-height:1.7;color:var(--muted);text-align:center;margin-top:13px}.practice-footer{font-size:10px;color:var(--muted);margin:22px 0 40px;line-height:1.8}.practice-footer span{float:right}.compact{padding-bottom:36px}.compact h1{font-size:44px}.history-table{width:100%;border-collapse:collapse;text-align:left;margin-bottom:48px;background:var(--card);border:1px solid var(--line)}.history-table th{font-weight:500;font-size:10px;color:var(--muted);padding:17px;border-bottom:1px solid var(--line)}.history-table td{font-size:11px;padding:20px 17px;border-bottom:1px solid var(--line)}.history-table .history-book{font-family:var(--serif);font-size:19px;max-width:290px;overflow-wrap:anywhere}.history-book small{display:block;font-family:var(--sans);color:var(--muted);font-size:9px;margin-top:8px}.history-table .status-pill{font-size:9px;padding:4px 7px;border-radius:3px;background:#e9eee7;color:var(--green)}.history-table .status-pill.ended{background:#efebe3;color:var(--muted)}progress{height:4px;border:0;border-radius:5px;background:#ddd7cc;width:100%;display:block;overflow:hidden}progress::-webkit-progress-bar{background:#ddd7cc;border-radius:5px}progress::-webkit-progress-value{background:var(--accent);border-radius:5px}progress::-moz-progress-bar{background:var(--accent);border-radius:5px}dialog{border:1px solid #d9d2c8;border-radius:8px;background:var(--card);color:var(--ink);padding:38px;width:460px;max-width:calc(100vw - 32px);box-shadow:0 20px 80px #29282725}dialog::backdrop{background:#29282770;backdrop-filter:blur(4px)}dialog h2{font-size:32px;line-height:1.15;margin-bottom:18px}dialog label{font-size:11px;color:var(--muted);display:block;margin:20px 0 8px}dialog input,dialog select{padding:12px 13px;background:var(--paper);border:1px solid #d9d2c8;border-radius:4px;color:var(--ink);width:100%;font-size:13px}.dialog-book{font-family:var(--serif);font-size:17px;color:var(--muted);margin:7px 0 23px;overflow-wrap:anywhere}.dialog-actions{margin-top:27px;display:flex;justify-content:flex-end;gap:10px}.presets{display:flex;gap:8px;margin:10px 0 18px}.preset{border:1px solid var(--line);padding:6px 12px;border-radius:4px;background:transparent;color:var(--muted);font-size:10px}.preset.selected{background:var(--accent-soft);border-color:#c9a9ad;color:var(--accent)}.small{font-size:11px;line-height:1.8}.summary-metrics{display:grid;grid-template-columns:1fr 1fr;gap:25px;padding:25px 0;margin:15px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.summary-metrics strong{font-family:var(--serif);font-size:33px;font-weight:400;display:block}.summary-metrics span{display:block;color:var(--muted);font-size:10px;margin-top:5px}.help-list{padding-left:19px;display:flex;flex-direction:column;gap:18px;font-size:12px;color:var(--muted);line-height:1.7}.help-list strong{color:var(--ink)}#help-dialog>.button{margin-top:25px}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#302c2a;color:#fffaf0;box-shadow:0 8px 30px #0002;border-radius:5px;max-width:calc(100vw - 32px);width:max-content;display:flex;align-items:center;gap:20px;padding:14px 17px;font-size:12px;line-height:1.6;z-index:20}.toast button{color:#fffaf0;background:none;border:0;font-size:20px}.sr-only{position:absolute;clip:rect(0,0,0,0);clip-path:inset(50%);height:1px;width:1px;overflow:hidden;white-space:nowrap}.button,.nav-button,.text-button{transition:background-color .15s,color .15s}@keyframes blink{50%{opacity:0}}
@media(max-width:900px){.topbar{padding:0 25px;height:80px}.brand-tag{display:none}main{padding:0 25px}.page-heading{padding-top:42px}.heading-note{display:none}.library-stats{gap:30px;justify-content:space-between}.library-stats div{display:block}.library-stats span{display:block;margin-top:5px}.library-layout{grid-template-columns:1fr 225px;gap:17px}.book-card{grid-template-columns:55px 1fr;padding:19px;gap:18px}.cover{width:55px;height:85px;padding:12px 8px}.cover-title{font-size:8px}.cover-mark{font-size:17px}.book-action{grid-column:2;justify-self:start;margin-top:-4px}.book-meta h3{font-size:22px}.book-meta progress{margin-top:14px}.import-card{padding:25px 20px}.practice-layout{grid-template-columns:1fr 200px;gap:18px}.typing-surface{padding:25px 22px}.passage{font-size:18px}.typing-card-header{padding:18px}.typing-card-header .eyebrow{letter-spacing:1px}.metrics{gap:40px}.practice-footer span{float:none;display:block}.history-table td,.history-table th{padding:15px 10px}.history-table .history-book{font-size:16px}}
@media(max-width:620px){.topbar{padding:0 20px;height:72px}.brand{font-size:21px;gap:9px}.brand-mark{height:32px;width:32px;font-size:29px;line-height:28px}nav{gap:18px}.nav-button{font-size:11px}main{padding:0 20px}.page-heading{padding:35px 0 30px}h1{font-size:36px;letter-spacing:-1.1px}.lede{font-size:12px}.library-stats{gap:13px;padding:20px 0}.library-stats strong{font-size:25px}.library-stats span{font-size:9px;max-width:90px;line-height:1.5}.section-heading{margin-top:28px}.section-heading h2{font-size:23px}.section-heading>.muted{display:none}.library-layout{grid-template-columns:1fr}.import-card{min-height:0;display:grid;grid-template-columns:42px 1fr;gap:10px 15px}.upload-symbol{grid-row:1;margin:0}.import-card h3{font-size:23px}.import-card h3 br{display:none}.import-card p{grid-column:2;margin:0}.import-card p br{display:none}.import-card .button{grid-column:2;margin-top:7px}.file-note{grid-column:2;margin-top:0}.book-card{grid-template-columns:63px 1fr;padding:20px;gap:15px}.cover{width:63px;height:95px;grid-row:1/3}.book-action{margin-top:0}.empty-state{min-height:240px}.library-footnote p span{display:block;margin:5px 0 0}.site-footer{margin-top:15px;padding:20px;font-size:8px}.site-footer>span:last-child{display:none}.practice-heading{padding:22px 0}.practice-title h1{font-size:31px}.practice-title{margin-bottom:20px}.metrics{gap:13px;justify-content:space-between;margin:24px 0}.metrics>div{min-width:0}.metrics strong{font-size:30px}.metrics>div>span{font-size:9px}.practice-layout{display:flex;flex-direction:column;margin-top:25px}.typing-card-header{padding:16px}.typing-card-header .eyebrow{font-size:7px}.typing-surface{height:280px;padding:20px}.passage{font-size:18px;line-height:1.9}.typing-hint{padding:13px 16px}.session-card{padding:22px;display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.session-card .eyebrow{grid-column:1/3;margin-bottom:8px}.session-card h2{font-size:26px}.session-card>p:not(.eyebrow):not(.session-note){grid-column:1;grid-row:3;margin-bottom:13px}.session-card>progress{grid-column:1;grid-row:4}.goal-progress-label{grid-column:1;grid-row:5}.session-card .button{grid-column:2;grid-row:2/4;align-self:center}.session-note{grid-column:2;grid-row:4/6;margin:0;font-size:8px}.session-tip{display:none}.practice-footer{font-size:9px}.compact h1{font-size:33px}.history-table th:nth-child(3),.history-table td:nth-child(3){display:none}.history-table th,.history-table td{padding:13px 7px;font-size:10px}.history-table .history-book{font-size:15px}.history-table .status-pill{display:inline-block;font-size:8px}.history-table th:last-child,.history-table td:last-child{display:none}dialog{padding:28px 25px}dialog h2{font-size:28px}.dialog-actions .button{padding:12px;font-size:11px}}
.practice-title .book-progress{margin:0 auto}
/* Typing never changes the text block or character dimensions. Only the caret
   moves; vertical scrolling advances by whole lines without animation. */
.passage{color:#7b756c;position:relative;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;scroll-behavior:auto;mask-image:none;padding-bottom:1.95em;font-kerning:none;font-variant-ligatures:none}
.passage::-webkit-scrollbar{display:none}
body[data-typing-font="mono"] .passage,.font-preview[data-typing-font="mono"]{font-family:'SFMono-Regular',Consolas,'Liberation Mono',monospace}
body[data-typing-font="serif"] .passage,.font-preview[data-typing-font="serif"]{font-family:var(--serif);font-kerning:none;font-variant-ligatures:none}
body[data-typing-font="sans"] .passage,.font-preview[data-typing-font="sans"]{font-family:var(--sans);font-kerning:none;font-variant-ligatures:none}
body[data-typing-size="small"] .passage,.font-preview[data-typing-size="small"]{font-size:18px}
body[data-typing-size="standard"] .passage,.font-preview[data-typing-size="standard"]{font-size:21px}
body[data-typing-size="large"] .passage,.font-preview[data-typing-size="large"]{font-size:24px}
.font-preview{margin:20px 0;padding:18px;background:var(--paper);border:1px solid var(--line);border-radius:4px;font-size:21px;line-height:1.6;overflow-wrap:anywhere}
dialog .checkbox-label{display:flex;align-items:flex-start;gap:10px;color:var(--ink);font-size:12px;line-height:1.6;margin:24px 0 9px}
dialog .checkbox-label input{width:16px;height:16px;flex:0 0 auto;margin:2px 0 0;accent-color:var(--accent)}
.settings-note{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.illustrations-panel{border:1px solid var(--line);border-radius:5px;background:var(--card);padding:25px;margin-top:24px}
.illustrations-header{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:14px}
.illustrations-header .eyebrow{margin-bottom:7px;font-size:8px}.illustrations-header h2{font-size:25px}
.illustrations-navigation{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}
.illustrations-navigation .button{padding:9px 13px;min-height:36px}.illustrations-navigation>span{font-size:11px;color:var(--muted)}
#illustration-status{margin-top:13px}.illustrations-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:20px;margin-top:20px}
.illustrations-grid:empty{margin-top:0}.illustrations-grid figure{margin:0;min-width:0}
.illustrations-grid img{display:block;width:100%;height:auto;max-height:360px;object-fit:contain;background:var(--paper);border:1px solid var(--line);border-radius:3px}
.illustrations-grid figcaption{font-size:10px;color:var(--muted);margin-top:9px}
@media(max-width:620px){nav{gap:12px}.help-button{height:22px;width:22px}.topbar{padding:0 15px}.brand{font-size:19px;gap:7px}.brand-mark{width:29px;height:29px;font-size:26px;line-height:25px}.illustrations-panel{padding:20px}.illustrations-header{align-items:flex-start;flex-direction:column}.illustrations-navigation{justify-content:flex-start;gap:9px}.illustrations-grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){*,*:before{animation:none!important;transition:none!important}}
dialog{max-height:calc(100dvh - 32px);overflow-y:auto}
.storage-settings{margin-top:25px;padding-top:22px;border-top:1px solid var(--line)}
.storage-settings h3{font-size:22px;margin-bottom:12px}.storage-settings p{line-height:1.7;margin:10px 0}
.storage-settings>.button{margin:8px 0}.backup-actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0 12px}
.book-actions{display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.delete-book,.backup-book{font-size:10px;margin:0}
.illustrations-grid{grid-template-columns:1fr}.illustrations-grid canvas{display:block;max-width:100%;width:auto;height:auto;max-height:580px;object-fit:contain;background:white;border:1px solid var(--line);border-radius:3px;margin:0 auto}
@media(max-width:620px){.book-actions{grid-column:2;align-items:flex-start;gap:7px}}
