.book-grid{gap:var(--gap-md);padding-bottom:var(--gap-xl);z-index:1;grid-template-columns:repeat(2,1fr);display:grid;position:relative}.book-card{opacity:0;background:var(--surface);border-radius:var(--radius-lg);cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;border:1px solid #0000;flex-direction:column;padding:28px 24px 24px;transition:transform .2s cubic-bezier(.4,0,.2,1),background .2s,box-shadow .25s;display:flex;position:relative;overflow:hidden}.book-card.revealed{animation:.6s cubic-bezier(.2,.7,.3,1) both floatIn}.book-card:not(.locked):before{content:"";background:var(--accent);opacity:.7;border-radius:0 2px 2px 0;width:3px;position:absolute;top:24px;bottom:24px;left:0}.book-card:hover{box-shadow:var(--shadow-hover);transform:translateY(-4px)}.book-card:not(.locked){box-shadow:var(--shadow-active)}.book-card.locked{cursor:default}.book-card.locked.revealed{animation:.6s both inkFadeUp}.book-card.locked:hover{background:var(--surface);box-shadow:none;transform:none}.book-card-head{margin-bottom:var(--gap-md);justify-content:space-between;align-items:flex-start;display:flex}.book-seal{background:var(--fg-soft);width:44px;height:44px;font-family:var(--font-display);color:var(--fg);border-radius:8px;flex-shrink:0;place-items:center;font-size:22px;transition:transform .25s,background .2s;display:grid}.book-card:not(.locked) .book-seal{background:var(--accent);color:#fff;box-shadow:0 2px 10px color-mix(in oklch, var(--accent) 28%, transparent)}.book-card:not(.locked):hover .book-seal{transform:scale(1.08)rotate(-3deg)}.book-card.locked .book-seal{background:var(--fg-softer);color:var(--muted)}.book-status{font-family:var(--font-mono);letter-spacing:.08em;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:3px 10px;font-size:11px;transition:border-color .2s,color .2s}.book-status.active{color:var(--accent);border-color:color-mix(in oklch, var(--accent) 40%, transparent);background:color-mix(in oklch, var(--accent) 5%, transparent)}.book-status.active:before{content:"";background:var(--accent);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin-right:5px;animation:2s ease-in-out infinite breathe;display:inline-block}.book-title{font-family:var(--font-display);letter-spacing:.04em;margin-bottom:4px;font-size:22px}.book-author{font-family:var(--font-mono);color:var(--muted);margin-bottom:var(--gap-sm);font-size:13px}.book-desc{color:var(--muted);margin-bottom:var(--gap-md);flex:1;font-size:14px;line-height:1.7}.book-progress{padding-top:var(--gap-sm);border-top:1px solid var(--border)}.progress-row{margin-bottom:var(--gap-xs);justify-content:space-between;align-items:baseline;display:flex}.progress-label{font-family:var(--font-mono);letter-spacing:.04em;color:var(--muted);font-size:11px}.progress-text{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--fg);font-size:14px}.progress-text .progress-total{color:var(--muted)}.progress-track{background:var(--fg-softer);border-radius:2px;height:4px;overflow:hidden}.progress-fill{background:var(--fg);border-radius:2px;width:0;height:100%;transition:width 1.2s cubic-bezier(.4,0,.2,1);position:relative}.progress-fill:after{content:"";background:linear-gradient(to right, transparent, color-mix(in oklch, var(--fg) 15%, transparent));border-radius:0 2px 2px 0;width:20px;position:absolute;top:0;bottom:0;right:0}.book-card:not(.locked) .progress-fill{background:var(--accent)}.book-card:not(.locked) .progress-fill:after{background:linear-gradient(to right, transparent, color-mix(in oklch, var(--accent) 25%, transparent))}.book-card-foot{margin-top:var(--gap-md);justify-content:space-between;align-items:center;display:flex}.book-card-foot .btn{padding:8px 18px;font-size:13px}.coming-soon-text{font-family:var(--font-mono);color:var(--muted);letter-spacing:.06em;font-size:12px}.book-card.entered{opacity:1}.book-card.locked.entered{opacity:.55}@media (max-width:640px){.book-grid{gap:var(--gap-sm);grid-template-columns:1fr}.filter-bar{-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;flex-wrap:nowrap;overflow-x:auto}.filter-bar .filter-btn{scroll-snap-align:start}}
