/* Printed cards, a real cover hinge and an open paper spread. */
.shelf-stage { position: relative; min-height: 260px; isolation: isolate; overflow-anchor: none; }
.shelf-filters button { position: relative; transition: color .2s, background-color .2s, border-color .2s, transform .2s; }
.shelf-filters button::after { content: ''; position: absolute; bottom: -5px; left: 15%; width: 70%; height: 2px; background: var(--red); transform: scaleX(0) rotate(-2deg); transform-origin: left; transition: transform .28s cubic-bezier(.2,.8,.2,1); }
.shelf-filters button[aria-pressed="true"]::after { transform: scaleX(1) rotate(-2deg); }
.shelf-filters button:active { transform: translateY(2px) rotate(-1deg); }
html { scrollbar-gutter: stable; }
html.book-in-motion { overflow: hidden; scroll-behavior: auto; }
html.book-arriving { background: var(--paper); }
.book-arriving #reader-shell { visibility: hidden; }
.book-revealing #reader-shell { visibility: visible; }
.book-transition { --book-width: min(72vw,340px,41.3svh); --book-height: calc(var(--book-width) * 1.38); position: fixed; inset: 0; z-index: 1000; overflow: clip; perspective: 1800px; cursor: progress; }
.arrival-book { display: none; }
.book-arriving .arrival-book { display: block; }
.book-backdrop { position: absolute; inset: 0; background: var(--paper) var(--paper-image) center top / 100% 100svh repeat-y; }

.book-stage { position: absolute; left: calc(50% - var(--book-width) / 2); top: calc(50% - var(--book-height) / 2); width: var(--book-width); height: var(--book-height); font-size: var(--book-width); perspective: 1600px; }
.book-volume { position: relative; width: 100%; height: 100%; transform: rotate(-3deg); transform-origin: left top; transform-style: preserve-3d; }
.book-volume::before { content: ''; position: absolute; inset: 7px -6px -7px 6px; background: repeating-linear-gradient(to bottom,#d4c8ac 0 1px,#eee7d5 1px 3px); border: 1px solid #a4977c; box-shadow: 12px 18px 35px #25251f30; }
.book-is-revealing .book-volume::before { opacity: 0; transition: opacity .3s; }
.book-cover { z-index: 2; position: absolute; inset: 0; transform-origin: left center; transform-style: preserve-3d; }
.book-cover-front, .book-cover-back { position: absolute; inset: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden; background: var(--paper) var(--paper-image) center / cover; }
.book-cover-front { box-sizing: border-box; padding: 6%; display: flex; flex-direction: column; border: 2px solid var(--ink); box-shadow: 8px 12px 22px #25251f24; transform: translateZ(.5px); }
.book-cover-front::before { content: ''; position: absolute; inset: 0 auto 0 0; width: 8px; background: linear-gradient(90deg,#25251f36,transparent); border-right: 1px solid #25251f22; }
.book-cover-masthead { display: flex; align-items: center; justify-content: space-between; color: var(--red); font-family: var(--display); font-size: .09em; font-weight: 900; line-height: 1; letter-spacing: -.025em; border-block: 2px solid var(--ink); padding-block: 4%; }
.book-cover-masthead span { color: var(--ink); font-size: .55em; letter-spacing: 0; }
.book-cover-title { font-size: .18em; line-height: 1.05; font-weight: 900; letter-spacing: -.065em; text-transform: uppercase; padding-block: 7%; overflow-wrap: anywhere; }
.book-cover-art { flex: 1; min-height: 0; border: 2px solid var(--ink); }
.book-cover-footer { display: flex; justify-content: space-between; gap: 8px; font-size: max(7px,.023em); font-weight: 700; letter-spacing: .02em; padding-top: 6%; }
.book-cover-back { transform: rotateY(180deg); overflow: hidden; }
.book-stage--illustrated { height: calc(var(--book-width) * 1.5); top: calc(50% - var(--book-width) * .75); }
.book-cover-front--illustrated { padding: 0; border: 0; }
.book-cover-front--illustrated > img { display: block; width: 100%; height: 100%; object-fit: contain; }
.book-cover-back > .opening-leaf, .book-interior > .opening-leaf { margin: 0; }
.book-interior { position: absolute; inset: 0; overflow: hidden; background: var(--leaf-paper,#f4eddb); }
.book-crease { position: absolute; pointer-events: none; z-index: 3; top: 0; bottom: 0; left: 0; width: 16px; transform: translateX(-50%); background: linear-gradient(90deg,transparent,#25251f17 45%,#25251f22 50%,#fff5 55%,transparent); }
.book-is-revealing .book-stage, .book-is-revealing .book-cover { will-change: transform; }

@media (prefers-reduced-motion: reduce) {
  .shelf-filters button, .shelf-filters button::after { transition: none; }
  .book-transition { display: none !important; }
}
