:root{--paper: #f4f2ec;--card: #fbfaf6;--ink: #1c231e;--muted: #68705f;--hairline: rgba(28, 35, 30, .16);--bottle: #206a4e;--bottle-soft: rgba(32, 106, 78, .1);--oxblood: #93392c;--brass: #a8842c;--tally: #2b4a3c;--serif: "Newsreader", Georgia, serif;--sans: "IBM Plex Sans", -apple-system, system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace}@media(prefers-color-scheme:dark){:root{--paper: #141915;--card: #1b211c;--ink: #e8e6dd;--muted: #99a08f;--hairline: rgba(232, 230, 221, .16);--bottle: #4ea57f;--bottle-soft: rgba(78, 165, 127, .14);--oxblood: #c86a57;--brass: #c9a44e;--tally: #9fc0ac}}*{box-sizing:border-box;margin:0}html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.45}button{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--bottle);outline-offset:2px}input,select{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--hairline);border-radius:6px;padding:8px 10px}.shell{max-width:680px;margin:0 auto;padding:0 16px calc(76px + env(safe-area-inset-bottom))}.masthead{display:flex;align-items:center;gap:12px;justify-content:space-between;padding:14px 0 10px;border-bottom:1px solid var(--hairline);margin-bottom:14px}.sync-dot{margin-left:auto;white-space:nowrap}.global-search{width:min(260px,50vw);flex-shrink:0}.global-search input{width:100%;border-radius:999px;padding:6px 14px;font-size:13.5px}@media(max-width:480px){.sync-dot{display:none}}.wordmark{font-family:var(--serif);font-weight:600;font-size:22px;letter-spacing:-.01em}.wordmark em{font-style:italic;color:var(--bottle)}.sync-dot{font-family:var(--mono);font-size:11.5px;color:var(--muted)}.sync-dot.pending{color:var(--brass)}.tabs{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:flex-start;gap:4px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--hairline);padding:8px 8px calc(8px + env(safe-area-inset-bottom));z-index:10}.tabs button{font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;padding:9px 16px;border-radius:999px;color:var(--muted)}.tabs button[aria-current=true]{color:var(--paper);background:var(--bottle)}@media(min-width:720px){.tabs{position:static;background:none;border:none;justify-content:flex-start;padding:0 0 18px;-webkit-backdrop-filter:none;backdrop-filter:none}.shell{padding-bottom:40px}}.controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 14px}.chip-row{display:flex;gap:4px;background:var(--card);border:1px solid var(--hairline);border-radius:999px;padding:3px}.chip-row button{font-size:12.5px;padding:5px 11px;border-radius:999px;color:var(--muted);white-space:nowrap}.chip-row button[aria-pressed=true]{background:var(--bottle-soft);color:var(--bottle);font-weight:600}.chip-row.loose{background:none;border:none;border-radius:0;padding:0;flex-wrap:wrap;gap:6px}.chip-row.loose button{background:var(--card);border:1px solid var(--hairline)}.chip-row.loose button[aria-pressed=true]{background:var(--bottle);color:var(--paper);border-color:var(--bottle)}.search{flex:1;min-width:140px}.search input{width:100%;border-radius:999px;padding:7px 14px;font-size:14px}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin:22px 0 6px}.section-head h2{font-family:var(--serif);font-style:italic;font-weight:500;font-size:17px}.section-head .count{font-family:var(--mono);font-size:11.5px;color:var(--muted)}.book-list{list-style:none;padding:0}.book-row{border-bottom:1px solid var(--hairline)}.book-line{display:grid;grid-template-columns:34px 1fr auto;gap:10px;align-items:center;width:100%;text-align:left;padding:10px 0}.rank{font-family:var(--mono);font-size:12px;color:var(--muted);text-align:right}.book-title{font-family:var(--serif);font-size:16.5px;font-weight:500;line-height:1.25;display:block}.book-meta{font-size:12.5px;color:var(--muted);margin-top:2px;display:flex;gap:8px;flex-wrap:wrap;align-items:baseline}.book-meta .pages{font-family:var(--mono);font-size:11.5px}.genre-tag{font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;color:var(--bottle)}.format-tag{font-family:var(--mono);font-size:10.5px;color:var(--muted);border:1px solid var(--hairline);border-radius:3px;padding:0 4px}.row-right{display:flex;align-items:center;gap:10px}.bump-btn{width:34px;height:34px;border-radius:50%;border:1.5px solid var(--bottle);color:var(--bottle);font-size:19px;line-height:1;display:grid;place-items:center;transition:transform .12s ease,background-color .12s ease}.bump-btn:active{transform:scale(.88);background:var(--bottle-soft)}.book-hero{display:flex;gap:16px;align-items:flex-start}.book-page-title{font-family:var(--serif);font-weight:600;font-size:24px;line-height:1.2}.cover{display:block;object-fit:cover;border-radius:3px;background:var(--hairline);box-shadow:0 1px 2px #0000002e}.cover-s{width:44px;height:66px}.cover-m{width:84px;height:126px}.cover-blank{box-shadow:none;border:1px solid var(--hairline);background:linear-gradient(160deg,transparent 40%,var(--hairline) 40%,var(--hairline) 44%,transparent 44%)}.book-line.with-cover{grid-template-columns:24px 44px 1fr auto}.heat{display:inline-flex;align-items:center;gap:6px}.heat svg{display:block}.heat-n{font-family:var(--mono);font-size:11.5px;font-weight:500;color:var(--muted);min-width:14px}.heat{position:relative}.heat-glyph{display:inline-block;line-height:0}@keyframes heat-pop{0%{transform:scale(1)}40%{transform:scale(1.35)}to{transform:scale(1)}}.heat-pop{transform-origin:bottom center;animation:heat-pop .3s ease-out}@keyframes heat-flash{0%{color:var(--bottle);transform:scale(1.3)}to{color:var(--muted);transform:scale(1)}}.heat-n-flash{animation:heat-flash .5s ease-out}@keyframes plus-rise{0%{opacity:1;transform:translateY(4px)}to{opacity:0;transform:translateY(-14px)}}.plus-one{position:absolute;top:-14px;right:0;font-family:var(--mono);font-style:normal;font-size:12px;font-weight:600;color:var(--bottle);pointer-events:none;animation:plus-rise .8s ease-out forwards}@media(prefers-reduced-motion:reduce){.heat-pop,.heat-n-flash,.plus-one{animation:none}.plus-one{opacity:0}.bump-btn{transition:none}}.detail{padding:4px 0 16px 44px;display:flex;flex-direction:column;gap:12px}.detail-actions{display:flex;flex-wrap:wrap;gap:8px}.btn{font-size:13px;font-weight:600;padding:7px 14px;border-radius:6px;border:1px solid var(--hairline);background:var(--card)}.btn.primary{background:var(--bottle);border-color:var(--bottle);color:#fff}.btn.danger{color:var(--oxblood)}.bump-with{display:flex;gap:8px;align-items:center}.bump-with select{max-width:200px}.stars{display:inline-flex;gap:2px}.stars button{font-size:20px;color:var(--hairline);padding:2px}.stars button.lit{color:var(--brass)}.score-line{font-family:var(--mono);font-size:11.5px;color:var(--muted)}.reading-card{background:var(--card);border:1px solid var(--hairline);border-radius:10px;padding:14px 16px;margin-bottom:10px}.pace-card{background:var(--card);border:1px solid var(--hairline);border-radius:10px;padding:16px;margin-bottom:18px}.pace-line{font-family:var(--mono);font-size:12.5px;margin-bottom:12px}.pace-line .ahead{color:var(--bottle);font-weight:600}.pace-line .behind{color:var(--oxblood);font-weight:600}.rail{margin:10px 0}.rail-label{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:var(--muted);margin-bottom:4px}.rail-track{position:relative;height:6px;background:var(--hairline);border-radius:3px}.rail-fill{position:absolute;inset:0 auto 0 0;background:var(--bottle);border-radius:3px}.rail-fill.short{background:var(--oxblood)}.rail-now{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink);opacity:.55}.month-chart{display:flex;flex-direction:column;gap:3px;margin:8px 0 18px}.month-row{display:grid;grid-template-columns:76px 1fr 56px;gap:10px;align-items:center;font-family:var(--mono);font-size:11.5px;color:var(--muted)}.month-dots{display:flex;gap:4px;flex-wrap:wrap}.month-dots i{width:9px;height:9px;border-radius:2px;background:var(--bottle);opacity:.85}.month-row .pgs{text-align:right}.fav-star{font-size:24px;color:var(--brass);vertical-align:2px;padding:2px 6px}.feedback-fab{position:fixed;right:16px;bottom:calc(74px + env(safe-area-inset-bottom));width:42px;height:42px;border-radius:50%;background:var(--card);border:1px solid var(--hairline);color:var(--bottle);font-size:18px;box-shadow:0 2px 10px #0000001f;z-index:20}@media(min-width:720px){.feedback-fab{bottom:20px}}.feedback-panel{position:fixed;right:16px;bottom:calc(126px + env(safe-area-inset-bottom));width:min(320px,calc(100vw - 32px));background:var(--card);border:1px solid var(--hairline);border-radius:10px;padding:14px;box-shadow:0 8px 30px #0000002e;z-index:20}@media(min-width:720px){.feedback-panel{bottom:72px}}.feedback-panel textarea{width:100%;font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--hairline);border-radius:6px;padding:8px 10px;resize:vertical}.heatmap-wrap{background:var(--card);border:1px solid var(--hairline);border-radius:10px;padding:12px 14px;margin-bottom:16px}.heatmap-wrap{--hm-cell: 9px}.hm-flex{display:flex;align-items:flex-start}.hm-days{display:grid;gap:2px;flex-shrink:0;padding-right:6px}.hm-scroll{overflow-x:auto;scrollbar-width:none}.hm-scroll::-webkit-scrollbar{display:none}.hm-grid{display:grid;gap:2px;width:max-content}.hm-label{font-family:var(--mono);font-size:10px;color:var(--muted);padding-right:4px;line-height:1;align-self:center}.hm-cell{width:var(--hm-cell);height:var(--hm-cell);border-radius:2.5px;background:var(--hairline)}.hm-legend{display:flex;align-items:center;gap:4px;justify-content:flex-end;margin-top:8px}.hm-empty{background:transparent}.hm-1{background:color-mix(in srgb,var(--bottle) 30%,var(--paper))}.hm-2{background:color-mix(in srgb,var(--bottle) 55%,var(--paper))}.hm-3{background:color-mix(in srgb,var(--bottle) 80%,var(--paper))}.hm-4{background:var(--bottle)}.hm-finish{box-shadow:inset 0 0 0 1.5px var(--brass)}.year-table,.fact-table{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:12.5px}.year-table td,.fact-table td{padding:5px 0;border-bottom:1px solid var(--hairline)}.year-table td:last-child,.fact-table td:last-child{text-align:right}.big-stat{font-family:var(--serif);font-size:34px;font-weight:600;line-height:1.1}.big-stat small{font-family:var(--mono);font-size:11px;color:var(--muted);display:block;font-weight:400;letter-spacing:.06em}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:16px;margin:14px 0 22px}.cover-tap{padding:0;line-height:0;display:block;border-radius:3px}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0a0e0bdb;display:grid;place-items:center;padding:24px;cursor:zoom-out}.lightbox img{max-width:min(92vw,480px);max-height:86vh;border-radius:6px;box-shadow:0 12px 48px #00000080}.lightbox-close{position:absolute;top:max(12px,env(safe-area-inset-top));right:16px;font-size:34px;color:#f4f2ec;line-height:1;padding:8px}.mosaic{display:grid;grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:3px}.mosaic-tile{padding:0;line-height:0;border-radius:2px;overflow:hidden}.mosaic-tile img{width:100%;aspect-ratio:2 / 3;object-fit:cover;display:block;transition:transform .12s ease}.mosaic-tile:hover img{transform:scale(1.06)}@media(prefers-reduced-motion:reduce){.mosaic-tile img{transition:none}}.highlight-quote{border-left:2px solid var(--brass);padding:2px 0 2px 12px;margin:0 0 10px;font-family:var(--serif);font-size:14.5px}.bio-card{display:flex;gap:14px;align-items:flex-start}.bio-thumb{width:72px;height:72px;object-fit:cover;border-radius:50%;flex-shrink:0;border:1px solid var(--hairline)}.insight-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14px}.insight-list li:before{content:"— ";color:var(--muted)}.pane{background:var(--card);border:1px solid var(--hairline);border-radius:10px;padding:18px;margin-bottom:16px}.pane h2{font-family:var(--serif);font-style:italic;font-weight:500;font-size:18px;margin-bottom:10px}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.field label{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:var(--muted);text-transform:uppercase}.form-row{display:flex;gap:10px;flex-wrap:wrap}.form-row .field{flex:1;min-width:120px}.hint{font-size:13px;color:var(--muted)}.error{font-size:13px;color:var(--oxblood)}.login-wrap{max-width:400px;margin:12vh auto 0;padding:0 20px}.login-wrap .wordmark{font-size:30px;margin-bottom:4px;display:block}.login-wrap .tagline{font-family:var(--serif);font-style:italic;color:var(--muted);margin-bottom:26px}.linklike{color:var(--bottle);text-decoration:underline;font-size:13px;text-align:left}.boot-bar{height:6px;border-radius:3px;background:var(--hairline);overflow:hidden;margin-top:18px}.boot-bar-fill{height:100%;width:40%;border-radius:3px;background:var(--bottle);animation:boot-slide 1.1s ease-in-out infinite alternate}@keyframes boot-slide{0%{transform:translate(-30%)}to{transform:translate(220%)}}@media(prefers-reduced-motion:reduce){.boot-bar-fill{animation:none;width:100%;opacity:.5}}.empty{text-align:center;color:var(--muted);font-family:var(--serif);font-style:italic;font-size:16px;padding:40px 0}.bulk-input{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--hairline);border-radius:6px;padding:8px 10px;resize:vertical}.pace-sub{font-family:var(--mono);font-size:11.5px;color:var(--muted);margin:2px 0 10px}.rail-label{flex-wrap:wrap;column-gap:12px}.rail-label>span{white-space:nowrap}.section-head{flex-wrap:wrap;column-gap:12px}.hm-label{white-space:nowrap}.upnext-select{font-family:var(--mono);font-size:11.5px;color:var(--muted);background:none;border:none;padding:2px 0;text-align:right}@supports (-webkit-touch-callout: none){.tabs{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--paper);transform:translateZ(0)}}.month-compare{font-family:var(--mono);font-size:11.5px;color:var(--muted);margin-top:8px;border-collapse:collapse}.month-compare td{padding:1px 0 1px 16px;text-align:right}.month-compare td:first-child{padding-left:0;text-align:left}
