@charset "UTF-8";:root{--bg: #faf8f3;--surface: #ffffff;--surface-2: #f1eee6;--text: #1f2422;--muted: #6b716d;--border: #e2ddd1;--accent: #2f5d50;--accent-text: #ffffff;--accent-soft: #dceae4;--danger: #b3261e;--warn-bg: #fff4d6;--ok-bg: #e2f2e7;--radius: 12px;--tabbar-h: 60px;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #141716;--surface: #1d2120;--surface-2: #262b29;--text: #e8ebe9;--muted: #9aa29e;--border: #333a37;--accent: #7cc4ad;--accent-text: #0e1a16;--accent-soft: #23362f;--danger: #ff8a80;--warn-bg: #3a3220;--ok-bg: #1f3428;color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--text);font:16px/1.45 -apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}a{color:var(--accent)}h1{font-size:1.6rem;margin:.4rem 0 1rem}h2{font-size:1.1rem;margin:1.5rem 0 .6rem}code{font-size:.85em;background:var(--surface-2);padding:.1em .3em;border-radius:4px}.muted{color:var(--muted)}.small{font-size:.85rem}.center{text-align:center}.error{color:var(--danger);margin:.25rem 0}.overdue{color:var(--danger);font-weight:600}.due-soon{color:#a15c00;font-weight:600}.page{max-width:720px;margin:0 auto;padding:1rem max(1rem,env(safe-area-inset-right)) 2rem max(1rem,env(safe-area-inset-left))}.page--with-nav{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 1.5rem)}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:calc(env(safe-area-inset-top) + .5rem) 1rem .5rem;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}.topbar__profile{display:flex;align-items:center;gap:.5rem;color:var(--text);text-decoration:none;font-weight:600}.sync{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--muted);text-decoration:none}.sync__dot{width:8px;height:8px;border-radius:50%;background:#3a9d5d}.sync--offline .sync__dot,.sync--local .sync__dot{background:#9aa29e}.sync--syncing .sync__dot{background:#d29b00;animation:pulse 1s infinite alternate}.sync--error .sync__dot,.sync--signed-out .sync__dot{background:var(--danger)}@keyframes pulse{to{opacity:.3}}.tabbar{position:fixed;inset:auto 0 0;z-index:10;display:grid;grid-template-columns:repeat(5,1fr);height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--border)}.tabbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:.72rem;color:var(--muted);text-decoration:none}.tabbar a span{font-size:1.3rem;line-height:1}.tabbar a.active{color:var(--accent);font-weight:600}.centered{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:8vh}.centered form{width:100%;max-width:360px;text-align:left}.brand{font-size:2rem}.stack{display:flex;flex-direction:column;gap:.75rem}.stack.center{align-items:center}.narrow{max-width:480px}.row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end}.row>label{flex:1 1 140px}.grow{flex:1;min-width:0;display:flex;flex-direction:column}.back{display:inline-block;margin-bottom:.25rem;text-decoration:none}.links{margin:.5rem 0;font-size:.95rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.9rem;margin:.75rem 0}.card h2{margin-top:0}.notice{background:var(--warn-bg);padding:.7rem .9rem;border-radius:var(--radius)}.notice--ok{background:var(--ok-bg)}.empty{text-align:center;padding:2rem 0;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:.5rem}label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:var(--muted)}label.check{flex-direction:row;align-items:center;gap:.5rem;font-size:1rem;color:var(--text)}label.inline{flex-direction:row;align-items:center;gap:.5rem;margin:.5rem 0}fieldset{border:0;padding:0;margin:0}legend{font-size:.85rem;color:var(--muted);margin-bottom:.4rem}.checks{display:flex;flex-direction:column;gap:.4rem}input,select{font:inherit;font-size:16px;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.6rem .7rem;min-height:44px;width:100%}input[type=checkbox]{width:22px;height:22px;min-height:0;accent-color:var(--accent)}input:focus-visible,select:focus-visible,button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;min-height:44px;padding:.55rem 1rem;font:inherit;font-weight:600;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:999px;text-decoration:none;cursor:pointer}.btn:disabled{opacity:.5;cursor:default}.btn--primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.btn--ghost{background:transparent;border-color:transparent;color:var(--accent)}.btn--danger{background:transparent;color:var(--danger);border-color:var(--danger)}.btn--small{min-height:36px;padding:.3rem .8rem;font-size:.9rem}.search-bar{display:flex;gap:.5rem;margin:.5rem 0}.search-bar input{flex:1}.tabs,.chips{display:flex;gap:.4rem;overflow-x:auto;scrollbar-width:none;margin:0 -1rem .75rem;padding:0 1rem}.tabs button,.chips button,.segmented button{flex:none;font:inherit;font-size:.9rem;padding:.45rem .85rem;min-height:38px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer}.tabs button.active,.chips button.active,.segmented button.active{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.count{opacity:.7;margin-left:.2rem}.segmented{display:grid;grid-template-columns:repeat(4,1fr);gap:.3rem}.segmented button{padding:.45rem .2rem;font-size:.82rem}.cover{flex:none;width:56px;height:84px;object-fit:cover;border-radius:4px;background:var(--surface-2);box-shadow:0 1px 3px #00000026}.cover--blank{display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--muted);background:linear-gradient(135deg,var(--accent-soft),var(--surface-2))}.book-list,.plain-list,.reads,.family,.profile-grid{list-style:none;margin:0;padding:0}.book-list>li{display:flex;align-items:center;gap:.5rem;padding:.6rem 0;border-bottom:1px solid var(--border)}.book-list>li>:first-child{flex:1;min-width:0}.book-card{display:flex;gap:.8rem;align-items:center;color:inherit;text-decoration:none;min-width:0}.book-card__text{display:flex;flex-direction:column;min-width:0}.book-card__text strong{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.book-card__text small{color:var(--muted)}.shelf-select{width:auto;flex:none;max-width:140px;font-size:14px;min-height:36px;padding:.3rem .5rem}.plain-list>li{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.55rem 0;border-bottom:1px solid var(--border)}.plain-list .cover{width:40px;height:60px}.picker{max-height:60vh;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius);padding:0 .6rem;margin-top:.6rem}.pages{width:90px;flex:none}.due{flex:none;width:150px}.due.overdue input{border-color:var(--danger)}.book-head{display:flex;gap:1rem;align-items:flex-start;margin:.5rem 0 1rem}.book-head .cover{width:110px;height:165px}.book-head h1{margin:0 0 .25rem;font-size:1.4rem}.book-head p{margin:0 0 .3rem}.reads .card{margin:.5rem 0;display:flex;flex-direction:column;gap:.6rem}.read-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.4rem}.badge{font-size:.8rem;background:var(--accent-soft);color:var(--text);padding:.15rem .6rem;border-radius:999px}.avatar{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--accent-soft);font-size:1.4rem;border:2px solid transparent;cursor:default}button.avatar{cursor:pointer;padding:0}.avatar.selected{border-color:var(--accent)}.avatar--sm{width:32px;height:32px;font-size:1.05rem}.avatar--lg{width:88px;height:88px;font-size:2.8rem;border-radius:20px}.avatar--add{color:var(--muted);background:var(--surface-2)}.avatar-choices{display:flex;flex-wrap:wrap;gap:.4rem}.profile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:1rem;width:100%;max-width:480px;margin:1rem 0}.profile-tile{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:.5rem;width:100%;font:inherit;color:var(--text);background:none;border:0;text-decoration:none;cursor:pointer}.profile-tile--last .avatar{box-shadow:0 0 0 3px var(--accent)}.pin-dots{display:flex;gap:.9rem;justify-content:center;margin:.5rem 0}.pin-dots span{width:16px;height:16px;border-radius:50%;border:2px solid var(--accent)}.pin-dots span.filled{background:var(--accent)}.pin-dots--error{animation:shake .3s}@keyframes shake{25%{transform:translate(-6px)}75%{transform:translate(6px)}}.pin-pad{display:grid;grid-template-columns:repeat(3,72px);gap:.8rem;justify-content:center}.pin-key{width:72px;height:72px;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:1.6rem;cursor:pointer}.pin-key:active{background:var(--accent-soft)}.family__card{display:block;color:inherit;text-decoration:none}.family__head{display:flex;align-items:center;gap:.6rem;margin-bottom:.5rem}.family__counts{display:flex;flex-wrap:wrap;gap:.3rem .9rem;font-size:.85rem;color:var(--muted)}.family__counts b{color:var(--text)}.family__covers{display:flex;gap:.4rem;margin-top:.6rem;overflow:hidden}.family__covers .cover{width:40px;height:60px}.scanner{display:none;position:relative;border-radius:var(--radius);overflow:hidden;background:#000;margin:.5rem 0;aspect-ratio:4/3}.scanner--on{display:block}.scanner video{width:100%;height:100%;object-fit:cover;display:block}.scanner__guide{position:absolute;inset:35% 10%;border:3px solid rgba(255,255,255,.85);border-radius:8px;box-shadow:0 0 0 999px #00000059}.install{position:fixed;left:.75rem;right:.75rem;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + .75rem);z-index:20;display:flex;align-items:center;gap:.6rem;padding:.75rem .9rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 6px 24px #0000002e;font-size:.92rem}.install>span{flex:1}.install__share{width:18px;height:18px;vertical-align:-3px;color:#0a84ff}
