:root{--paper:#f6f1e6;--ink:#1d1b18;--ink-soft:#6b645a;--line:#1d1b1812;--accent:#e2563b;--accent-soft:#e2563b47;--card:#fbf8f1;--c-blue:#3d6fb4;--c-green:#4f8a4a;--c-mustard:#c08a1e;--c-plum:#8a4f86;--c-teal:#2f8a86;--hand:"Patrick Hand", "Comic Sans MS", cursive;--mono:"JetBrains Mono", ui-monospace, monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#1b1a17;--ink:#ece5d6;--ink-soft:#a39a8a;--line:#ece5d60f;--accent:#f07a5f;--accent-soft:#f07a5f4d;--card:#22201c;--c-blue:#7fa6dc;--c-green:#8cc283;--c-mustard:#e2b553;--c-plum:#c592c1;--c-teal:#6cc4bf;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background-color:var(--paper);background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);color:var(--ink);font-family:var(--hand);background-size:24px 24px;font-size:19px;line-height:1.35}button,input{font:inherit;color:inherit}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:.8em}.muted{color:var(--ink-soft)}.row{flex-wrap:wrap;gap:10px;display:flex}.error{color:var(--accent);width:100%;margin:4px 0 0}.sk{background:var(--card);border:0;position:relative}.sk:before{content:"";border:2px solid var(--ink);pointer-events:none;border-radius:4px;position:absolute;inset:0}.app{max-width:960px;margin:0 auto;padding:0 16px 64px}.top{justify-content:space-between;align-items:center;padding:20px 0;display:flex}.brand{color:inherit;align-items:center;gap:10px;font-size:28px;text-decoration:none;display:flex}.brand-mark{background:var(--accent);border:2px solid var(--ink);clip-path:polygon(0 0,100% 0,100% 100%,50% 75%,0 100%);width:16px;height:22px}.byline{color:var(--ink-soft);align-items:center;gap:6px;text-decoration:none;display:inline-flex}.byline svg{width:13px;height:13px}.byline:hover{color:var(--ink);-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.lede{max-width:30em;margin:8px 0 24px;font-size:22px}.shelf{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px;display:grid}.tile{text-align:left;cursor:pointer;flex-direction:column;align-items:stretch;gap:4px;min-height:190px;padding:16px;transition:transform .12s;display:flex}div.tile{cursor:default}button.tile:hover{transform:rotate(-.6deg)translateY(-2px)}button.tile:focus-visible{outline:2px dashed var(--accent);outline-offset:4px}.add-tile{color:var(--ink-soft);background:0 0;justify-content:center;align-items:center}.add-tile:before{border-style:dashed}.add-tile .plus{font-size:44px;line-height:1}.book-tile:after{content:"";background:var(--book);border-radius:0 0 3px 3px;width:36px;height:6px;position:absolute;top:0;left:16px}.book-title{overflow-wrap:anywhere;font-size:23px;line-height:1.15}.book-author{color:var(--ink-soft);margin:0}.spacer{flex:1}.bar{background:0 0;height:14px;margin:8px 0 4px;display:block;overflow:hidden}.bar-fill{background:repeating-linear-gradient(-45deg, var(--book,var(--ink)) 0 2px, transparent 2px 6px);height:100%;display:block}.book-stats{justify-content:space-between;display:flex}.book-next{color:var(--ink-soft);font-size:16px}.foot{align-items:baseline;gap:16px;margin-top:40px;font-size:16px;display:flex}.link{cursor:pointer;color:var(--ink-soft);background:0 0;border:0;padding:0;text-decoration:underline}.link:hover:not(:disabled){color:var(--ink)}.link:disabled{opacity:.4;cursor:default}.btn{cursor:pointer;background:var(--card);padding:6px 16px}.btn:hover{background:var(--accent-soft)}.btn.primary{background:var(--ink);color:var(--paper)}.btn.primary:hover{background:var(--accent)}.btn:focus-visible,input:focus-visible{outline:2px dashed var(--accent);outline-offset:3px}.book-form{flex-direction:column;gap:10px;width:100%;display:flex}.book-form label{flex-direction:column;gap:2px;display:flex}.book-form label span{color:var(--ink-soft);font-size:15px}.book-form input,.sk-input{border:0;border-bottom:2px solid var(--ink);background:0 0;min-width:0;padding:4px 2px}.book-form input::placeholder{color:var(--ink-soft);opacity:.5}.back{cursor:pointer;color:var(--ink-soft);background:0 0;border:0;margin-bottom:12px;padding:0}.back:hover{color:var(--ink)}.book-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.book-head>div:first-child{min-width:0}.book-head h1{-webkit-text-decoration:underline 4px var(--book);text-decoration:underline 4px var(--book);text-underline-offset:6px;overflow-wrap:anywhere;margin:0;font-size:40px;font-weight:400;line-height:1.05}h2{margin:32px 0 8px;font-size:26px;font-weight:400}.panel{margin-top:20px;padding:18px}.stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:20px;display:grid}.stat{overflow-wrap:anywhere;flex-direction:column;min-width:0;padding:12px 14px;display:flex}.stat-n{color:var(--book,var(--ink));font-size:28px;font-weight:600}.log-range{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:18px;display:flex}.log-range .sk-input{text-align:center;width:4.5em}.page-grid{-webkit-user-select:none;user-select:none;touch-action:manipulation;cursor:crosshair;grid-template-columns:repeat(auto-fill,minmax(16px,1fr));gap:3px;display:grid}.cell{aspect-ratio:1;border:1.5px solid var(--ink);opacity:.55;border-radius:2px}.cell.read{opacity:1;border-color:var(--book,var(--ink));background:repeating-linear-gradient(-45deg, var(--book,var(--ink)) 0 1.5px, transparent 1.5px 4px)}.cell.sel{opacity:1;background:var(--accent);border-color:var(--accent)}.cell.read.sel{background:repeating-linear-gradient(-45deg, var(--accent) 0 1.5px, var(--accent-soft) 1.5px 4px)}.readout{color:var(--ink-soft);min-height:1.4em;margin:10px 0 0}.sessions{max-width:520px;margin:0;padding:0;list-style:none}.sessions li{align-items:baseline;gap:8px;padding:4px 0;display:flex}.sessions .dots{border-bottom:2px dotted var(--ink-soft);opacity:.4;flex:1}.sessions .session-count{font-size:16px}.x{cursor:pointer;color:var(--ink-soft);background:0 0;border:0;padding:0 4px;font-size:20px;line-height:1}.x:hover{color:var(--accent)}@media (width<=520px){body{font-size:18px}.book-head h1{font-size:32px}.stats{gap:8px}.stat{padding:10px}.stat-n{font-size:22px}.page-grid{grid-template-columns:repeat(auto-fill,minmax(20px,1fr))}}
