:root{--bg: #08090c;--surface: #0f1116;--surface-2: #151821;--surface-3: #1b1f29;--border: #1f232c;--border-strong: #2a2f3a;--text: #e9eaee;--text-muted: #9aa0aa;--text-dim: #7a808a;--star: #f5b301;--accent: #caa24a;--accent-ink: #1a140a;--award-bg: #3a2d12;--award-text: #ffce6b;--gr: #8db36e;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}:root[data-theme=light]{--bg: #f4efe3;--surface: #fbf7ef;--surface-2: #f1ebdd;--surface-3: #e9e1d0;--border: #e6ddca;--border-strong: #d4c9b1;--text: #2b2017;--text-muted: #6b5d4b;--text-dim: #8a7c66;--star: #d99500;--accent: #8a5a1c;--accent-ink: #fff7ea;--award-bg: #f0e2c4;--award-text: #6b4e16;--gr: #4f7a2e}body{margin:0;min-width:320px}a{color:var(--text);font-weight:700;text-decoration:none}a:hover{text-decoration:underline}button{border:1px solid #9a6b44;border-radius:999px;background:var(--surface);color:var(--text);cursor:pointer;font:inherit;padding:.55rem 1rem}button:disabled{cursor:not-allowed;opacity:.55}.app-shell{min-height:100vh}.app-header{align-items:center;background:var(--surface);border-bottom:1px solid var(--border);display:flex;gap:2rem;justify-content:space-between;padding:1rem clamp(1rem,4vw,3rem)}.app-header nav{display:flex;flex-wrap:wrap;gap:1rem}.brand{color:var(--text);font-size:1.25rem}.brand-mark{color:var(--accent)}.header-actions{display:flex;align-items:center;gap:.6rem}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:2.2rem;height:2.2rem;padding:0;border-radius:999px;border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text-muted);cursor:pointer;transition:color .15s ease,border-color .15s ease,background .15s ease}.theme-toggle svg{width:1.15rem;height:1.15rem}.theme-toggle:hover,.theme-toggle:focus-visible{color:var(--accent);border-color:var(--accent);background:var(--surface-3)}.app-main{margin:0 auto;max-width:1180px;padding:2rem clamp(1rem,4vw,3rem)}.page,.stack{display:flex;flex-direction:column;gap:1rem}.panel,.book-card,.unmatched-row,.shelf-entry{background:var(--surface);border:1px solid var(--border);border-radius:1rem;box-shadow:0 10px 24px #3f2a1d14;padding:1rem}.book-grid{display:grid;gap:1.25rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));align-items:stretch}@media(min-width:1500px){.app-main{max-width:1560px}}@media(max-width:900px){.book-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}}@media(max-width:560px){.book-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.9rem}}.book-card{display:flex;flex-direction:column;gap:.75rem;min-width:0;overflow:hidden;padding:.75rem;transition:transform .14s ease,box-shadow .14s ease}.book-card:hover{transform:translateY(-3px);box-shadow:0 16px 30px #3f2a1d24}.book-cover-link{display:block;position:relative;width:max-content;max-width:100%;margin-inline:auto}.book-cover,.detail-cover{border-radius:.6rem;object-fit:cover}.book-cover{aspect-ratio:2 / 3;width:190px;height:auto;max-width:100%;margin-inline:auto;display:block;background:var(--surface-2);border-radius:.6rem;box-shadow:0 6px 14px #3f2a1d29}.detail-cover{max-width:220px;width:100%}.known-tag{position:absolute;box-sizing:border-box;max-width:calc(100% - 1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;inset-block-start:.5rem;inset-inline-start:.5rem;background:#2b1c10eb;color:#f7e6c8;font-size:.72rem;font-weight:700;letter-spacing:.02em;padding:.18rem .5rem;border-radius:999px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.missing-cover{align-items:center;aspect-ratio:2 / 3;background:var(--surface-2);color:var(--text-muted);display:flex;font-size:.9rem;justify-content:center;text-align:center;width:190px;max-width:100%}.original-title,.muted{color:var(--text-muted);margin:.25rem 0 0}.emph{font-weight:700;color:inherit}.byline{font-size:.95rem}.book-card-body{display:flex;flex:1 1 auto;flex-direction:column;gap:.5rem;min-width:0}.book-card-footer{display:flex;flex-direction:column;gap:.5rem;margin-top:auto;padding-top:.5rem}.book-headings h3{margin:0;font-size:1rem;line-height:1.3;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-meta{margin:.2rem 0 0;color:var(--text-muted);font-size:.8rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-ratings{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .6rem}.card-rating{display:inline-flex;align-items:center;gap:.22rem;font-size:.82rem;text-decoration:none;white-space:nowrap}.card-rating-star{color:#e0a106;font-size:.85rem;line-height:1}.card-rating-value{font-weight:700;color:var(--text)}.card-rating-src{color:var(--text-muted);font-weight:600}.card-rating-count{color:var(--text-muted)}.card-rating-count:before{content:"·";margin-inline-end:.28rem}.card-rating--gr .card-rating-src{color:var(--gr);font-weight:700}.card-rating--gr .card-rating-value{font-size:.9rem}.card-rating--evrit{opacity:.92}.card-rating--evrit .card-rating-value{font-weight:600}.book-teaser{color:var(--text-muted);font-size:.86rem;line-height:1.45;margin:0;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.detail-teaser{color:var(--text);font-size:1.1rem;font-weight:600;line-height:1.5;margin:0}.book-description{display:flex;flex-direction:column;gap:.75rem}.book-description p{color:var(--text);line-height:1.55;margin:0}.page-intro{color:var(--text-muted);margin:0;max-width:60ch}.cluster-header{align-items:baseline;border-bottom:1px solid var(--border);display:flex;gap:.75rem;justify-content:space-between;padding-bottom:.4rem}.cluster-header h2{margin:0}.cluster-count{color:var(--text-muted);font-size:.9rem;white-space:nowrap}.rating-row{display:flex;flex-wrap:wrap;gap:.5rem}.rating-badge{align-items:center;align-self:flex-start;border-radius:999px;display:inline-flex;font-size:.85rem;font-weight:700;gap:.3rem;padding:.25rem .6rem}.rating-badge .rating-star{font-size:.9rem;line-height:1}.rating-badge .rating-source{font-weight:600;opacity:.85}.rating-badge .rating-count{font-weight:500;opacity:.7}.rating-badge .rating-count:before{content:"·";margin-inline-end:.3rem}.evrit-badge,.goodreads-badge{background:var(--surface-2);color:var(--text-muted)}.evrit-badge .rating-star,.goodreads-badge .rating-star{color:#e0a106}.rating-link{cursor:pointer;text-decoration:none;transition:transform .12s ease,box-shadow .12s ease}.rating-link:hover,.rating-link:focus-visible{transform:translateY(-1px);box-shadow:0 4px 12px #3f2a1d38}.evrit-badge.rating-link,.goodreads-badge.rating-link{color:var(--text-muted)}.tag-list li{align-self:flex-start;background:#f2c94c;border-radius:999px;color:var(--text);display:inline-flex;font-weight:700;padding:.25rem .7rem}.reasons{display:flex;flex-direction:column;gap:.4rem}.reasons-title{color:var(--text-muted);font-size:.85rem;font-weight:700;letter-spacing:.02em;margin:0}.reason-chips{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:0;padding:0}.reason-chip{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;color:var(--text-muted);font-size:.82rem;padding:.2rem .65rem}.reason-list,.rating-list,.catalog-list{margin:0;padding-inline-start:1.25rem}.stats-grid,.filter-row,.candidate-list,.pager-row{display:flex;flex-wrap:wrap;gap:.75rem}.active-filter{background:var(--accent);color:var(--accent-ink)}.error-message{background:var(--surface-2);border:1px solid #f8b4b4;border-radius:.75rem;color:#9b1c1c;padding:.75rem 1rem}.success-message{color:#087f5b;font-weight:700}.book-detail{display:grid;gap:2.5rem;grid-template-columns:minmax(190px,250px) minmax(0,1fr);align-items:start}.book-detail .detail-teaser,.book-detail .book-description{max-width:68ch}.detail-aside{gap:.85rem}.detail-ratings{margin-top:.15rem}.detail-list{display:grid;gap:.5rem 1rem;grid-template-columns:max-content 1fr}.detail-list dt{color:var(--text-muted);font-weight:700}.detail-list dd{margin:0}.detail-genres h2{font-size:.85rem;font-weight:700;color:var(--text-muted);margin:0 0 .35rem}.detail-genres .tag-list{gap:.4rem}.detail-genres .tag-list li{background:var(--surface-2);color:var(--text-muted);font-size:.8rem;font-weight:600;padding:.2rem .55rem}.tag-list{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;padding:0}.shelf-list{display:grid;gap:1rem}.shelf-grid{align-items:start}.shelf-card{display:flex;flex-direction:column;gap:.5rem}.shelf-card .book-card{height:100%}.shelf-meta{align-items:center;color:var(--text-muted);display:flex;flex-wrap:wrap;font-size:.85rem;gap:.5rem;padding-inline:.25rem}.shelf-tag{background:var(--surface-2);border-radius:999px;color:var(--text-muted);font-weight:700;padding:.15rem .6rem}.shelf-rating{color:var(--text-muted);font-weight:700}.shelf-hint{margin-top:.5rem}.unmatched-card{opacity:.9}.tab-icon{display:none}@media(max-width:720px){.book-detail{grid-template-columns:minmax(0,1fr);gap:1rem}.detail-aside,.detail-main{display:contents}.detail-cover{order:1;justify-self:center;max-width:210px}.detail-head{order:2}.detail-ratings{order:3}.quick-shelf{order:4}.detail-genres{order:5}.detail-genres h2{display:none}.detail-list--key{order:6;display:flex;flex-wrap:wrap;grid-template-columns:none;gap:.2rem .9rem;font-size:.85rem}.detail-list--key dt{color:var(--text-muted)}.detail-list--key dt:after{content:":"}.detail-list--key dd{margin-inline-end:.6rem}.detail-teaser{order:7}.book-description{order:8}.award-list{order:9}.detail-list--extra{order:10;font-size:.85rem;color:var(--text-muted)}.book-detail .book-row{order:11}.app-header{position:sticky;top:0;z-index:30;align-items:center;gap:.5rem;padding:.55rem .95rem;min-height:52px;box-shadow:0 1px #3f2a1d14}.app-header .brand{font-size:1.02rem;font-weight:700}.app-header .auth-menu,.app-header .auth-login,.app-header .header-actions{margin-inline-start:auto}.auth-login,.auth-logout{min-height:36px;padding:.35rem .75rem;font-size:.82rem}.auth-name{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-header nav{position:fixed;inset-inline:0;bottom:0;z-index:40;display:flex;justify-content:space-around;align-items:stretch;gap:0;background:var(--surface);border-top:1px solid var(--border);box-shadow:0 -2px 14px #3f2a1d14;padding-bottom:env(safe-area-inset-bottom,0)}.app-header nav a{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;min-height:56px;padding:.35rem .25rem;border-radius:0;color:var(--text-muted);font-size:.68rem;font-weight:600}.app-header nav a.active{background:transparent;color:var(--accent)}.app-header nav a.active .tab-icon{transform:translateY(-1px)}.tab-icon{display:block;width:23px;height:23px}.tab-label{line-height:1}.app-main{padding-bottom:calc(64px + env(safe-area-inset-bottom,0))}.app-main{padding-top:1.1rem}.reco-hero h1,.page h1,.page-header h1{font-size:1.45rem;line-height:1.2}.page-intro{font-size:.9rem}.reco-readloved-cta{font-size:.82rem;padding:.45rem .75rem;align-self:stretch;text-align:center}.reco-toolbar{gap:.45rem}.reco-ai-toggle,.reco-filter-toggle{font-size:.85rem;padding:.4rem .85rem}.book-row-header h2{font-size:1.08rem}}@media(max-width:480px){.auth-login-long{display:none}}.filter-sidebar{align-self:start;background:var(--surface);border:1px solid var(--border);border-radius:.9rem;padding:.85rem;position:sticky;top:1rem;max-height:calc(100vh - 2rem);overflow-y:auto}.filter-toggle{align-items:center;background:var(--surface-2);border:none;border-radius:.6rem;color:var(--text-muted);cursor:pointer;display:flex;font-size:.98rem;font-weight:700;justify-content:space-between;padding:.55rem .8rem;width:100%}.filter-toggle:hover{background:#e6d8c8}.filter-body{display:flex;flex-direction:column;gap:.95rem;margin-top:.85rem}.filter-group{border:none;display:flex;flex-direction:column;gap:.4rem;margin:0;min-width:0;padding:0}.filter-group>legend,.filter-label-row{align-items:baseline;color:var(--text-muted);display:flex;font-size:.85rem;font-weight:700;justify-content:space-between;padding:0;width:100%}.filter-value{color:var(--text-muted);font-variant-numeric:tabular-nums}.segmented{background:var(--surface-2);border-radius:.6rem;display:flex;gap:.2rem;padding:.2rem}.segmented.wrap{flex-wrap:wrap}.seg{border-radius:.45rem;color:var(--text-muted);cursor:pointer;flex:1 1 auto;font-size:.82rem;padding:.32rem .4rem;text-align:center;white-space:nowrap}.seg input{height:0;opacity:0;pointer-events:none;position:absolute;width:0}.seg.active{background:var(--surface-3);box-shadow:0 1px 3px #00000059;color:var(--text);font-weight:700}.filter-slider{accent-color:#a4651f;width:100%}.filter-select{background:var(--surface);border:1px solid var(--border);border-radius:.5rem;color:var(--text);padding:.4rem .5rem;width:100%}.filter-reset{background:none;border:none;color:#8a5a1c;cursor:pointer;font-size:.85rem;font-weight:700;padding:.2rem;text-align:start}.filter-reset:hover{text-decoration:underline}.feedback-control{display:flex;gap:.4rem;margin-top:.15rem}.feedback-btn{background:var(--surface);border:1px solid var(--border);border-radius:.6rem;cursor:pointer;font-size:1.05rem;line-height:1;padding:.3rem .5rem;transition:background .12s ease,box-shadow .12s ease}.feedback-btn:hover{background:var(--surface-2)}.feedback-btn.active{background:var(--surface-2);border-color:var(--border);box-shadow:inset 0 0 0 1px #d6a45f}.catalog-layout{display:grid;gap:1.5rem;grid-template-columns:240px 1fr}@media(max-width:720px){.catalog-layout{grid-template-columns:1fr}.filter-sidebar{position:static;max-height:none;overflow:visible}}@media(min-width:721px){.app-header nav a{color:var(--text);padding:.35rem .7rem;border-radius:999px}.app-header nav a.active{background:var(--accent);color:var(--accent-ink);text-decoration:none}}.catalog-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.catalog-search{flex:1 1 260px;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:.7rem;color:var(--text);font:inherit;padding:.6rem .85rem}.catalog-search:focus-visible{outline:2px solid #a4651f;outline-offset:1px}.sort-control{align-items:center;color:var(--text-muted);display:inline-flex;font-size:.9rem;font-weight:700;gap:.4rem}.sort-control select{background:var(--surface);border:1px solid var(--border);border-radius:.6rem;color:var(--text);font:inherit;padding:.45rem .6rem}.result-count{font-size:.9rem;margin:0}.load-more{align-self:center;background:var(--accent);border:none;color:var(--accent-ink);font-weight:700;margin-top:.5rem;padding:.6rem 1.6rem}.load-more:hover{background:#58330f}.filter-hint{color:var(--text-muted);font-size:.72rem;margin:.1rem 0 0}.genre-chips{display:flex;flex-wrap:wrap;gap:.35rem;max-height:9.5rem;overflow-y:auto;padding:.1rem}.genre-chips-tall{max-height:17rem}.genre-chip{background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-muted);cursor:pointer;font-size:.78rem;padding:.25rem .6rem}.genre-chip:hover{background:var(--surface-2)}.genre-chip.active{background:var(--accent);border-color:var(--text);color:var(--accent-ink);font-weight:700}.shelf-add{background:var(--surface);border:1px solid var(--border);border-radius:.9rem;display:flex;flex-direction:column;gap:.5rem;padding:.85rem 1rem}.shelf-add label{color:var(--text-muted);font-size:.85rem;font-weight:700}.shelf-add-row{display:flex;flex-wrap:wrap;gap:.5rem}.shelf-add-row input{flex:1 1 240px;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:.7rem;color:var(--text);font:inherit;padding:.55rem .8rem}.shelf-grid{align-items:stretch}.shelf-card{display:flex;flex-direction:column;gap:.4rem}.shelf-card .book-card{flex:1 1 auto}.shelf-meta{background:var(--surface);border:1px solid var(--border);border-radius:.7rem;padding:.45rem .65rem;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.shelf-meta .shelf-rating{display:inline-flex;align-items:center;gap:.3rem;color:inherit;font-weight:400}.star-rating{display:inline-flex;gap:.05rem;direction:ltr}.star-wrap{position:relative;display:inline-block;font-size:1.05rem;line-height:1;padding:0 1px}.star-base{color:#d8c9b6}.star-fill{position:absolute;top:0;left:1px;overflow:hidden;white-space:nowrap;color:#e0a72e;pointer-events:none}.star-rating.is-previewing .star-fill{color:#c7891b}.star-half{position:absolute;top:0;width:50%;height:100%;margin:0;padding:0;background:none;border:none;cursor:pointer;z-index:1}.star-half-left{left:0}.star-half-right{right:0}.star-rating:not(.is-readonly) .star-wrap:hover{transform:scale(1.12);transition:transform .12s ease}.star-rating.is-readonly .star-wrap{cursor:default}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.reco-mode-toggle{display:inline-flex;gap:0;border:1px solid var(--border, var(--border));border-radius:999px;overflow:hidden;align-self:flex-start}.reco-mode-toggle button{border:none;background:transparent;padding:.45rem 1.1rem;font:inherit;cursor:pointer;color:var(--muted, #555)}.reco-mode-toggle button.active{background:var(--accent);color:#fff}.llm-reason{margin:.35rem 0 0;padding:.55rem .7rem;background:var(--surface-2);border-inline-start:3px solid var(--accent);border-radius:8px;font-size:.92rem;line-height:1.5;color:var(--text)}.llm-reason-badge{margin-inline-end:.35rem}.chat-form{display:flex;gap:.5rem;width:100%;max-width:720px}.chat-input{flex:1;padding:.7rem .9rem;border:1px solid var(--border-strong);border-radius:10px;background:var(--surface);color:var(--text);font:inherit}.chat-input::placeholder{color:var(--text-dim)}.chat-send{padding:.7rem 1.3rem;border:none;border-radius:10px;background:var(--accent);color:var(--accent-ink);font:inherit;font-weight:700;cursor:pointer}.chat-send:disabled{opacity:.55;cursor:default}.chat-suggestions{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem;padding:0;margin:0}.chat-suggestion{border:1px solid var(--border, var(--border));background:var(--surface);border-radius:999px;padding:.4rem .9rem;font:inherit;cursor:pointer;color:var(--text-dim)}.chat-suggestion:hover{background:var(--surface-2)}.chat-reply{background:var(--surface-2);border-radius:12px;padding:.8rem 1rem;max-width:720px;line-height:1.55}.chat-landing{background:var(--surface);border:1px solid var(--border-strong);border-radius:16px;padding:1.25rem 1.4rem;display:flex;flex-direction:column;gap:.9rem}.chat-landing>h2{margin:0;font-size:1.15rem;color:var(--accent)}.chat-search{width:100%}.chat-search .chat-form,.chat-search .chat-reply{max-width:none}.reco-rows{gap:2rem}.book-row{display:flex;flex-direction:column;gap:.75rem}.book-row-header{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap}.book-row-header h2{margin:0;font-size:1.2rem}.book-row-reason{margin:0;color:var(--text-muted);font-size:.9rem}.book-row-all{margin-inline-start:auto;font-size:.9rem;font-weight:600;color:var(--text-muted);white-space:nowrap}.book-row-viewport{position:relative;display:flex;align-items:center;gap:.4rem}.book-row-window{flex:1 1 auto;overflow:hidden;padding:.35rem .1rem .85rem}.book-row-track{display:flex;gap:1rem;transition:transform .32s ease;will-change:transform}.book-row-item{flex:0 0 auto;width:260px;display:flex}.book-row-item .book-card{flex:1 1 auto}.book-row-pager{margin:.1rem 0 0;text-align:center;font-size:.82rem;color:var(--text-muted);letter-spacing:.01em}.book-row-loading{position:absolute;inset-inline-start:2.4rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#ffffffd9;box-shadow:0 1px 6px #0000001f;pointer-events:none;z-index:3}.book-row-spinner{width:22px;height:22px;border:2px solid var(--border);border-top-color:#c7891b;border-radius:50%;animation:book-row-spin .7s linear infinite}@keyframes book-row-spin{to{transform:rotate(360deg)}}.book-row-arrow{position:static;flex:0 0 auto;z-index:2;width:2.4rem;height:2.4rem;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:1.5rem;line-height:1;cursor:pointer;box-shadow:0 4px 12px #3f2a1d2e;display:flex;align-items:center;justify-content:center;transition:opacity .15s ease,background .15s ease}.book-row-arrow:hover:not(:disabled){background:#f1e7da}.book-row-arrow:disabled{opacity:.32;cursor:default;box-shadow:none}@media(max-width:560px){.book-row-item{width:clamp(140px,40vw,166px)}.book-row-arrow{width:2rem;height:2rem;font-size:1.25rem}}@media(max-width:720px){.book-row-arrow{display:none}.book-row-viewport{gap:0}.book-row-window{overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scrollbar-width:none;padding-bottom:.4rem}.book-row-window::-webkit-scrollbar{display:none}.book-row-item{scroll-snap-align:start}.book-row-track{gap:.6rem}.book-row-pager{display:none}.book-row-window{position:relative}.book-row-window:after{content:"";position:absolute;top:0;bottom:0;left:0;width:2.25rem;background:linear-gradient(to right,var(--bg) 20%,transparent);pointer-events:none;z-index:2}.book-row-window:before{content:"‹";position:absolute;left:.3rem;top:42%;transform:translateY(-50%);z-index:3;direction:ltr;color:var(--text-muted);font-size:1.5rem;line-height:1;pointer-events:none;animation:swipe-nudge 1.8s ease-in-out infinite}}@keyframes swipe-nudge{0%,to{transform:translateY(-50%) translate(0);opacity:.45}50%{transform:translateY(-50%) translate(-4px);opacity:.85}}@media(prefers-reduced-motion:reduce){.book-row-window:before{animation:none}}.genre-tags{display:flex;flex-wrap:wrap;gap:.3rem;list-style:none;margin:0;padding:0}.genre-tag{background:var(--surface-2);border-radius:999px;color:var(--text-muted);font-size:.7rem;font-weight:600;padding:.12rem .5rem;white-space:nowrap}.award-badge{position:absolute;box-sizing:border-box;inset-block-end:.5rem;inset-inline-start:.5rem;max-width:calc(100% - 1rem);background:#7a4c12f0;color:#ffe9c2;font-size:.68rem;font-weight:700;padding:.16rem .5rem;border-radius:999px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.award-list{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:0;padding:0}.award-pill{background:var(--award-bg);border:1px solid var(--border-strong);border-radius:999px;color:var(--award-text);font-size:.8rem;font-weight:600;padding:.2rem .65rem}.quick-shelf{display:flex;gap:.45rem;margin-top:auto;padding-top:.75rem;padding-bottom:.2rem}.quick-shelf-btn{flex:1;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-muted);font-size:.78rem;font-weight:700;padding:.4rem .5rem;white-space:nowrap;cursor:pointer;transition:background .14s ease,border-color .14s ease,color .14s ease}.quick-shelf-btn--toread{background:#b06a2c;border-color:#b06a2c;color:#fff7ec}.quick-shelf-btn--toread:hover{background:#9a571d;border-color:#9a571d}.quick-shelf-btn--read{background:transparent}.quick-shelf-btn--read:hover{background:var(--surface-2)}.quick-shelf-btn:disabled{opacity:.6;cursor:default}@media(max-width:720px){.quick-shelf-btn{min-height:44px;font-size:.82rem}}.quick-shelf-btn--read.is-active{background:#2f7d54;border-color:#2f7d54;color:#fff}.quick-shelf-btn--read.is-active:hover{background:#276845;border-color:#276845}.quick-shelf-btn--toread.is-active{background:#c08a2e;border-color:#c08a2e;color:#fff8ea}.quick-shelf-btn--toread.is-active:hover{background:#a9771f;border-color:#a9771f}.taste-stats{display:flex;flex-wrap:wrap;gap:1rem}.taste-stat{background:var(--surface);border:1px solid var(--border);border-radius:.9rem;display:flex;flex-direction:column;align-items:center;gap:.2rem;min-width:7rem;padding:.85rem 1.2rem}.taste-stat-num{font-size:1.6rem;font-weight:800;color:var(--text)}.taste-stat-label{color:var(--text-muted);font-size:.85rem}.taste-block{display:flex;flex-direction:column;gap:.6rem}.taste-block h2{margin:0;font-size:1.1rem}.taste-chips{display:flex;flex-wrap:wrap;gap:.45rem;list-style:none;margin:0;padding:0}.taste-chip{display:inline-flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-muted);font-size:.85rem;font-weight:600;padding:.3rem .7rem}.taste-chip-count{background:var(--accent);color:var(--accent-ink);border-radius:999px;font-size:.72rem;font-weight:700;min-width:1.4rem;text-align:center;padding:.05rem .4rem}.reco-controls{display:flex;flex-direction:column;gap:.5rem}.reco-filter{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.reco-filter-label{font-size:.85rem;font-weight:700;color:var(--text-muted);margin-inline-end:.25rem}.reco-mode{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem}.reco-ai-toggle{background:var(--surface-2);border:1px solid var(--accent);color:var(--accent);border-radius:999px;cursor:pointer;font-weight:700;padding:.5rem 1.15rem;white-space:nowrap;box-shadow:0 6px 16px #6c5cf052;transition:filter .15s ease,background .15s ease,color .15s ease,box-shadow .15s ease}.reco-ai-toggle:hover{filter:brightness(1.05)}.reco-ai-toggle.active{background:var(--surface);border-color:var(--accent);color:var(--accent);box-shadow:none}.reco-ai-toggle.active:hover{background:var(--surface-2);filter:none}.reco-mode-hint{margin:0;font-size:.85rem;color:var(--text-muted);flex:1 1 16rem}.reco-hero{display:flex;flex-direction:column;gap:.4rem}.reco-hero h1,.reco-hero .page-intro{margin:0}.reco-readloved-cta{display:inline-block;align-self:flex-start;margin-top:.2rem;padding:.5rem .9rem;border-radius:999px;background:var(--accent);color:var(--accent-ink);font-weight:600;font-size:.9rem;text-decoration:none;box-shadow:none}.reco-readloved-cta:hover{filter:brightness(1.05)}.reco-chat{margin-top:.35rem}.reco-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem}.reco-filter-toggle{display:inline-flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;cursor:pointer;font-weight:700;color:var(--text-muted);padding:.45rem 1rem;transition:background .15s ease,border-color .15s ease}.reco-filter-toggle:hover,.reco-filter-toggle.open{background:var(--surface);border-color:var(--border)}.reco-filter-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;border-radius:999px;background:#c08a2e;color:#fff;font-size:.72rem;font-weight:700}.reco-filter-clear{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:.85rem;text-decoration:underline;padding:.3rem .2rem}.reco-filter-clear:hover{color:var(--text-muted)}.reco-toolbar .reco-filter-clear{margin-inline-start:auto}.reco-controls{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:.85rem 1rem}.section-title{margin:.5rem 0 0;font-size:1.3rem;color:var(--text)}.taste-section{border-top:1px solid var(--border);padding-top:1rem;margin-top:.5rem;display:flex;flex-direction:column;gap:.75rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.taste-header{display:flex;flex-direction:column;gap:.85rem;background:var(--surface);border:1px solid #ecdfcf;border-radius:1rem;padding:1rem 1.15rem}.taste-hint{margin:.1rem 0 0;font-size:.82rem}.taste-chip{cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.taste-chip:hover{background:var(--surface-2)}.taste-chip.active{background:var(--accent);border-color:var(--text);color:var(--accent-ink)}.taste-chip.active .taste-chip-count{background:var(--surface);color:var(--text)}.shelf-add-form{margin:0}.result-card{display:flex;flex-direction:column;gap:.4rem}.result-card .book-card{flex:1 1 auto}.shelf-add-controls{display:flex;gap:.4rem;align-items:center}.shelf-add-controls select{flex:1 1 auto;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:.6rem;color:var(--text);font:inherit;padding:.4rem .5rem}.shelf-add-controls button{white-space:nowrap}.shelf-add-controls button.added{background:var(--surface-2);border-color:var(--border);color:#2f6b3a}.active-taste-filter{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.filter-pill{background:var(--accent);border:1px solid var(--accent);border-radius:999px;color:var(--accent-ink);cursor:pointer;font-size:.82rem;font-weight:700;padding:.25rem .7rem}.filter-pill:hover{background:#532f15}.link-button{background:none;border:none;color:var(--text-muted);cursor:pointer;font:inherit;text-decoration:underline;padding:.4rem .3rem}.taste-stats-line{margin:0;color:var(--text-muted);font-size:.95rem}.taste-stats-line strong{color:var(--text);font-weight:800}.taste-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.6rem}.taste-filter-toggle{display:inline-flex;align-items:center;gap:.4rem;background:var(--surface);border:1px solid var(--border);border-radius:999px;cursor:pointer;font-weight:700;color:var(--text-muted);padding:.35rem .85rem;font-size:.88rem;transition:background .15s ease,border-color .15s ease}.taste-filter-toggle:hover,.taste-filter-toggle.open{background:var(--surface);border-color:var(--border)}.taste-filter-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.2rem;height:1.2rem;padding:0 .3rem;border-radius:999px;background:#c08a2e;color:#fff;font-size:.7rem;font-weight:700}.taste-filter-panel{display:flex;flex-direction:column;gap:.85rem}.shelf-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.5rem}.shelf-header-title{display:flex;flex-direction:column;gap:.15rem}.shelf-header-title h1,.shelf-header-title .page-intro{margin:0}.shelf-toolbar{display:flex;flex-wrap:wrap;gap:.5rem}.shelf-tool-btn{background:var(--surface);border:1px solid var(--border);border-radius:.7rem;color:var(--text-muted);cursor:pointer;font:inherit;font-weight:700;padding:.45rem .85rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.prefs-panel{background:var(--surface);border:1px solid var(--border);border-radius:.9rem;padding:1rem 1.2rem;display:flex;flex-direction:column;gap:.6rem}.prefs-chips{display:flex;flex-wrap:wrap;gap:.5rem}.prefs-chip{background:var(--surface);border:1px solid #d8c8b3;border-radius:1rem;color:var(--text-muted);cursor:pointer;font:inherit;padding:.3rem .8rem}.prefs-chip.excluded{background:#3a1d1d;border-color:#7a3b32;color:#8a3324}.prefs-chip.selected{background:#2e7d32;border-color:#2e7d32;color:#fff;font-weight:700}.shelf-tool-btn:hover{background:var(--surface-2)}.shelf-tool-btn.active{background:var(--accent);border-color:var(--text);color:var(--accent-ink)}.shelf-import{background:var(--surface);border:1px solid var(--border);border-radius:.9rem;padding:.85rem 1rem}.shelf-add-actions{display:flex;gap:.4rem}.shelf-add-actions button{flex:1 1 0;min-width:0;white-space:nowrap;background:var(--surface);border:1px solid var(--border);border-radius:.6rem;color:var(--text-muted);cursor:pointer;font:inherit;font-weight:700;padding:.4rem .5rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.shelf-add-actions button:hover{background:var(--surface-2)}.shelf-add-actions button.added{background:var(--surface-2);border-color:var(--border);color:#2f6b3a}.shelf-move-btn,.shelf-remove-btn{background:none;border:1px solid var(--border);border-radius:.6rem;color:var(--text-muted);cursor:pointer;font:inherit;font-size:.8rem;padding:.2rem .55rem}.shelf-move-btn:hover{background:var(--surface-2)}.shelf-remove-btn{border-color:#e6b9b9;color:#9b1c1c}.shelf-remove-btn:hover{background:var(--surface-2)}.confirm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#281e1473;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}.confirm-dialog{background:var(--surface);border-radius:1rem;box-shadow:0 18px 50px #281e1447;max-width:24rem;width:100%;padding:1.5rem 1.5rem 1.25rem;text-align:start}.confirm-title{margin:0 0 .5rem;font-size:1.15rem;color:#3b2f25}.confirm-message{margin:0 0 1.25rem;color:var(--text-muted);line-height:1.5}.confirm-actions{display:flex;gap:.6rem;justify-content:flex-end}.confirm-cancel,.confirm-ok{border-radius:.7rem;cursor:pointer;font:inherit;font-weight:600;padding:.5rem 1.1rem}.confirm-cancel{background:none;border:1px solid var(--border);color:var(--text-muted)}.confirm-cancel:hover{background:var(--surface-2)}.confirm-ok{background:#9b1c1c;border:1px solid #9b1c1c;color:#fff}.confirm-ok:hover{background:#851818}.book-card .byline{margin-top:.15rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-footer{margin-top:2.5rem;padding:1.25rem;border-top:1px solid var(--border);text-align:center;font-size:.9rem}.app-footer a{color:var(--text-muted)}@media(max-width:720px){.app-footer{padding-bottom:calc(80px + env(safe-area-inset-bottom,0))}}.stats-tiles{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.stats-tile{background:var(--surface);border:1px solid var(--border);border-radius:1rem;display:flex;flex-direction:column;gap:.2rem;padding:1rem 1.2rem}.stats-tile-num{font-size:1.8rem;font-weight:800;color:var(--text);line-height:1.1}.stats-tile-label{color:var(--text-muted);font-weight:700}.stats-tile-sub{font-size:.82rem}.stats-updated{margin:.25rem 0 0}.stats-updated strong{color:var(--text)}.stats-note{margin:.55rem 0 0;font-size:.82rem;line-height:1.5;max-inline-size:60ch}.stats-note strong{color:var(--text)}.stats-breakdown{display:flex;flex-direction:column;gap:.6rem}.stats-pie{display:flex;gap:1.5rem;align-items:center;flex-wrap:wrap}.stats-pie-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.stats-pie-legend li{display:flex;align-items:center;gap:.5rem;font-size:.9rem;cursor:pointer}.stats-pie-center-name{font-size:18px;font-weight:700;fill:var(--text-muted)}.stats-pie-center-val{font-size:14px;fill:#8a7560}.stats-pie-swatch{inline-size:.85rem;block-size:.85rem;border-radius:3px;flex:0 0 auto}.stats-bars{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.stats-bar-row{display:grid;grid-template-columns:minmax(7rem,12rem) 1fr minmax(5rem,auto);align-items:center;gap:.75rem}.stats-bar-label{color:var(--text-muted);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-bar-track{background:var(--surface-2);border-radius:999px;block-size:.7rem;overflow:hidden}.stats-bar-fill{display:block;block-size:100%;background:linear-gradient(90deg,#d8b25e,var(--accent));border-radius:999px}.stats-bar-value{color:var(--text-muted);font-weight:700;text-align:start;white-space:nowrap}.stats-bar-pct{font-weight:400}.stats-note{font-size:.85rem}@media(max-width:560px){.stats-bar-row{grid-template-columns:minmax(5rem,8rem) 1fr;grid-template-areas:"label value" "track track"}.stats-bar-label{grid-area:label}.stats-bar-value{grid-area:value;text-align:end}.stats-bar-track{grid-area:track}}.auth-menu{display:inline-flex;align-items:center;gap:.5rem;margin-inline-start:auto}.auth-menu--loading{width:1px;height:1px}.auth-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;display:inline-flex;align-items:center;justify-content:center}.auth-avatar--placeholder{background:var(--accent);color:#fff;font-weight:700;font-size:.85rem}.auth-name{font-size:.9rem;font-weight:600}.auth-login,.auth-logout{display:inline-flex;align-items:center;gap:.35rem;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:.35rem .85rem;font-size:.9rem;font-weight:600;cursor:pointer;text-decoration:none}.auth-login{margin-inline-start:auto;background:var(--accent);border-color:var(--accent);color:#fff}.auth-login:hover{background:#b88f3a}.auth-logout:hover{background:var(--surface-2)}.shelf-guest{text-align:center;padding:3rem 1rem}.shelf-guest .auth-login{margin:1rem auto 0}.onboarding{max-width:1100px;margin:0 auto;padding:0 1rem 7rem;min-height:100vh}.onboarding-header{position:sticky;top:0;z-index:5;background:linear-gradient(180deg,var(--bg) 80%,rgba(8,9,12,0));padding:1.25rem 0 .75rem;text-align:center}.onboarding-header h1{font-size:1.6rem;margin:.25rem 0 .15rem;color:#1f2937}.onboarding-counter{margin:0;color:#6b7280;font-weight:600}.onboarding-skip{display:inline-block;margin:.6rem auto 0;border:1px solid #cbd5e1;background:var(--surface);color:#334155;font-size:.9rem;font-weight:600;cursor:pointer;padding:.4rem 1.1rem;border-radius:999px;box-shadow:0 1px 3px #00000014}.onboarding-skip:hover{background:var(--surface-2);color:var(--text)}.onboarding-search{margin:.75rem auto 0;max-width:420px}.onboarding-search input{width:100%;box-sizing:border-box;border:1px solid #d1d5db;border-radius:999px;padding:.6rem 1rem;font-size:1rem}.onboarding-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:.85rem;margin-top:1rem}.onboarding-loading{display:flex;align-items:center;justify-content:center;gap:.6rem;padding:3rem 0;color:var(--text-muted)}.onboarding-spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:#c7891b;border-radius:50%;animation:book-row-spin .7s linear infinite}.spinner{display:flex;align-items:center;gap:.6rem;color:var(--text-muted)}.spinner-block{justify-content:center;padding:2.5rem 0}.spinner-inline{justify-content:flex-start;padding:.4rem 0}.spinner-ring{width:22px;height:22px;flex:none;border:3px solid var(--border);border-top-color:#c7891b;border-radius:50%;animation:book-row-spin .7s linear infinite}.spinner-label{font-size:.95rem}@media(prefers-reduced-motion:reduce){.spinner-ring,.onboarding-spinner{animation-duration:1.6s}}.onboarding-tile{position:relative;aspect-ratio:2 / 3;border:2px solid transparent;border-radius:12px;overflow:hidden;padding:0;cursor:pointer;background:var(--surface-2);box-shadow:0 1px 4px #0000001f;transition:transform .12s ease,box-shadow .12s ease}.onboarding-tile:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000002e}.onboarding-tile img{width:100%;height:100%;object-fit:cover;display:block}.onboarding-tile-fallback{display:flex;align-items:center;justify-content:center;height:100%;padding:.5rem;font-size:.8rem;color:#4b5563;text-align:center}.onboarding-tile.selected{border-color:#16a34a;box-shadow:0 0 0 3px #16a34a40}.onboarding-tile[disabled]{opacity:.6;cursor:progress}.onboarding-check{position:absolute;top:6px;inset-inline-end:6px;width:26px;height:26px;border-radius:50%;background:#16a34a;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.95rem;box-shadow:0 1px 3px #0000004d}.onboarding-footer{position:fixed;bottom:0;inset-inline:0;z-index:6;display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:.85rem 1rem calc(.85rem + env(safe-area-inset-bottom));background:linear-gradient(0deg,var(--bg) 72%,rgba(8,9,12,0))}.onboarding-continue{min-width:220px;background:var(--accent);color:#fff;border:none;border-radius:999px;padding:.7rem 2rem;font-size:1.05rem;font-weight:700;cursor:pointer}.onboarding-continue:hover:not([disabled]){background:#b88f3a}.onboarding-continue[disabled]{background:var(--surface-2);cursor:not-allowed}.onboarding-gr-toggle{border:none;background:none;color:var(--accent);font-weight:600;font-size:.9rem;cursor:pointer}.onboarding-import{width:100%;max-width:640px;max-height:50vh;overflow-y:auto;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:.75rem}@media(min-width:720px){.onboarding-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}}.onboarding-sentinel{min-height:48px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:.9rem}.onboarding-clear{margin-top:.5rem;border:none;background:none;color:var(--accent);font-weight:600;font-size:.85rem;cursor:pointer}
