:root{--paper:#eef1e9;--surface:#f8f9f4;--surface-raised:#fff;--ink:#20261f;--ink-soft:#565f4f;--ink-faint:#8b917f;--border:#d9dbcc;--accent:#2f4a3d;--accent-strong:#21362c;--accent-tint:#dfe8e0;--gold:#a87f34;--gold-tint:#efe2c4;--slate:#56677a;--slate-tint:#dfe4ea;--brick:#8a3d33;--brick-tint:#ecdad4;--focus:#2f4a3d;--shadow:220 25% 12%;--font-display:"Fraunces", Georgia, serif;--font-body:"Work Sans", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#12150f;--surface:#191d16;--surface-raised:#20251d;--ink:#e9ebe1;--ink-soft:#aab19c;--ink-faint:#767d69;--border:#2c3226;--accent:#7fb096;--accent-strong:#9cc4ac;--accent-tint:#24312a;--gold:#d8b364;--gold-tint:#362d1c;--slate:#9db0c4;--slate-tint:#232a33;--brick:#d68a7b;--brick-tint:#33221e;--focus:#9cc4ac}}:root[data-theme=dark]{--paper:#12150f;--surface:#191d16;--surface-raised:#20251d;--ink:#e9ebe1;--ink-soft:#aab19c;--ink-faint:#767d69;--border:#2c3226;--accent:#7fb096;--accent-strong:#9cc4ac;--accent-tint:#24312a;--gold:#d8b364;--gold-tint:#362d1c;--slate:#9db0c4;--slate-tint:#232a33;--brick:#d68a7b;--brick-tint:#33221e;--focus:#9cc4ac}*{box-sizing:border-box}html,body{height:100%}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;overflow-x:hidden}#app{min-height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);flex-direction:column;display:flex}h1,h2,h3{font-family:var(--font-display);text-wrap:balance;margin:0}button,input,textarea{color:inherit;font-family:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}.btn{font-family:var(--font-body);border:1px solid #0000;border-radius:10px;justify-content:center;align-items:center;gap:8px;padding:12px 20px;font-size:14px;font-weight:500;text-decoration:none;transition:background .15s,transform .1s;display:inline-flex}.btn:active{transform:scale(.98)}.btn-primary{background:var(--accent);color:var(--surface-raised)}.btn-primary:hover{background:var(--accent-strong)}.btn-github{background:var(--ink);color:var(--paper);width:100%;max-width:240px}.btn-github:hover{opacity:.9}.mark{font-family:var(--font-display);letter-spacing:-.01em;font-size:40px;font-weight:600}.mark:after{content:"";background:var(--gold);border-radius:2px;width:34px;height:3px;margin:12px auto 0;display:block}.empty-note{color:var(--ink-faint);text-align:center;font-size:12px}.cover-fallback{justify-content:flex-start;align-items:flex-end;width:100%;height:100%}.cover-initial{font-family:var(--font-display);color:#fff;text-shadow:0 1px 2px #00000059;padding:6px;font-weight:600}.appbar{flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 20px 14px;display:flex}.appbar h1{font-size:22px;font-weight:600}.icon-btn{border:1px solid var(--border);background:var(--surface-raised);width:34px;height:34px;color:var(--ink-soft);border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.icon-btn:hover{color:var(--ink);border-color:var(--ink-faint)}.filters{scrollbar-width:none;flex-shrink:0;gap:6px;padding:0 20px 14px;display:flex;overflow-x:auto}.filters::-webkit-scrollbar{display:none}.chip{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--border);background:var(--surface-raised);color:var(--ink-soft);white-space:nowrap;border-radius:999px;flex-shrink:0;padding:7px 12px;font-size:10.5px}.chip.on{background:var(--accent);color:var(--surface-raised);border-color:var(--accent)}.list{flex-direction:column;flex:1;gap:10px;padding:4px 16px 90px;display:flex;overflow-y:auto}.card{background:var(--surface-raised);border:1px solid var(--border);text-align:left;border-radius:14px;gap:12px;width:100%;padding:10px;display:flex}.card:hover{border-color:var(--ink-faint)}.cover-sm{border-radius:6px;flex-shrink:0;width:52px;height:76px;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #00000014}.cover-sm .cover-initial{font-size:11px;line-height:1.25}.card-body{flex-direction:column;flex:1;gap:4px;min-width:0;padding:2px 0;display:flex}.card-title{font-family:var(--font-display);color:var(--ink);text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:15px;font-weight:500;line-height:1.25;display:-webkit-box;overflow:hidden}.card-author{color:var(--ink-soft);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.card-meta{align-items:center;gap:8px;margin-top:auto;display:flex}.stamp{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;border-radius:5px;padding:2.5px 7px;font-size:9.5px;font-weight:500}.stamp.reading{background:var(--accent-tint);color:var(--accent)}.stamp.want{background:var(--slate-tint);color:var(--slate)}.stamp.finished{background:var(--gold-tint);color:var(--gold)}.stamp.dnf{background:var(--brick-tint);color:var(--brick)}.stars{gap:1px;display:flex}.stars svg{width:11px;height:11px}.star-on{fill:var(--gold)}.star-off{fill:none;stroke:var(--ink-faint);stroke-width:1.5px}.fab{right:20px;bottom:calc(24px + env(safe-area-inset-bottom));background:var(--accent);width:52px;height:52px;color:var(--surface-raised);border:none;border-radius:16px;justify-content:center;align-items:center;display:flex;position:fixed;box-shadow:0 10px 20px -6px #171c2666}.fab:hover{background:var(--accent-strong)}.fab svg{width:22px;height:22px}.back-row{flex-shrink:0;align-items:center;gap:10px;padding:12px 20px;display:flex}.back-row span{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);font-size:10.5px}.detail-scroll{flex:1;padding:4px 20px 32px;overflow-y:auto}.scan-wrap{flex-shrink:0;padding:4px 20px 20px}.viewfinder{aspect-ratio:4/3;background:linear-gradient(160deg,#1b2a22,#0e150f);border-radius:16px;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.viewfinder video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.vf-frame{z-index:1;border:2px solid #ffffffbf;border-radius:8px;width:68%;height:46%;position:relative}.scan-line{background:var(--gold);height:2px;box-shadow:0 0 8px var(--gold);animation:1.8s ease-in-out infinite scan;position:absolute;top:12%;left:6%;right:6%}@keyframes scan{0%,to{top:12%}50%{top:82%}}.vf-caption{text-align:center;font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin-top:12px;font-size:10.5px}.divider-row{color:var(--ink-faint);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:10px;margin:18px 0;font-size:10px;display:flex}.divider-row:before,.divider-row:after{content:"";background:var(--border);flex:1;height:1px}.link-btn{font-family:var(--font-body);color:var(--accent);text-underline-offset:3px;background:0 0;border:none;padding:0;font-size:12.5px;font-weight:500;text-decoration:underline}.manual-form{flex-direction:column;gap:12px;display:flex}.isbn-row{gap:8px;display:flex}input[type=text]{background:var(--surface-raised);border:1px solid var(--border);font-family:var(--font-mono);color:var(--ink);border-radius:10px;flex:1;width:100%;padding:11px 12px;font-size:13px}input.prose{font-family:var(--font-body)}.field-label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 6px;font-size:10px;display:block}.lookup-result{background:var(--surface-raised);border:1px solid var(--border);border-radius:12px;gap:12px;padding:12px;display:flex}.lookup-fields{flex-direction:column;flex:1;gap:10px;display:flex}.cover-md{border-radius:8px;flex-shrink:0;width:56px;height:82px;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #00000014}.cover-md .cover-initial{font-size:13px}.cover-lg{border-radius:8px;flex-shrink:0;width:76px;height:112px;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #00000014,0 6px 14px -6px #171c264d}.cover-lg .cover-initial{font-size:15px}.detail-head{gap:14px;margin-bottom:8px;display:flex}.detail-title{font-family:var(--font-display);text-wrap:balance;margin:0 0 4px;font-size:19px;font-weight:600;line-height:1.25}.detail-author{color:var(--ink-soft);margin:0 0 10px;font-size:13px}.detail-isbn{font-family:var(--font-mono);color:var(--ink-faint);letter-spacing:.03em;margin:0;font-size:10.5px}.section{margin-top:22px}.segmented{background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;gap:2px;padding:3px;display:flex}.segmented button{font-family:var(--font-body);color:var(--ink-soft);background:0 0;border:none;border-radius:7px;flex:1;padding:8px 4px;font-size:11.5px;font-weight:500}.segmented button.active{background:var(--accent);color:var(--surface-raised)}.rate-row{align-items:center;gap:10px;display:flex}.rate-stars{gap:4px;display:flex}.rate-stars button{background:0 0;border:none;padding:2px}.rate-stars svg{width:24px;height:24px}.rate-value{font-family:var(--font-mono);color:var(--ink-soft);font-size:12px}textarea{resize:vertical;background:var(--surface-raised);border:1px solid var(--border);width:100%;min-height:84px;font-family:var(--font-body);color:var(--ink);border-radius:10px;padding:12px;font-size:13.5px;line-height:1.55}.history{flex-direction:column;gap:8px;display:flex}.history-item{background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;justify-content:space-between;align-items:baseline;gap:8px;padding:10px 12px;font-size:12.5px;display:flex}.history-item .dates{font-family:var(--font-mono);color:var(--ink-soft);font-size:11px}.history-item .tag{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);font-size:10px;font-family:var(--font-mono)}
