@font-face {
  font-family: "Newsreader";
  src: url("/static/fonts/newsreader-latin-var.woff2") format("woff2-variations");
  font-weight: 400 600;
  font-style: normal;
  font-display: swap;

  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+2018-201A,
    U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122;
}

:root {
  --room: #17151a;
  --room-deep: #08070a;
  --paper: #f1ead9;
  --paper-warm: #e9e0cb;
  --ink: #211f1b;
  --ink-soft: #55503f;
  --ink-faint: #8b8371;
  --rule: #c8bda3;
  --brass: #b08b52;
  --brass-light: #dcbb82;
  --brass-dim: #7c6238;
  --cloth: #17161a;
  --warn: #a8503c;
  --good: #4a6b4f;


  --seal: #9d3527;

  --serif: "Newsreader", "Iowan Old Style", Palatino, Georgia, serif;
  --sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Inter, sans-serif;
  --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;



  --page-w: 28rem;
  --page-h: 38.5rem;
  --edge: 30px;
  --lens: 208px;
  --monument-frame-aspect: 793 / 496;



  --cradle-w: 9.5rem;
  --well-w: 7.6rem;
  --well-h: 12.5rem;
  --loupe-stowed: 0.55;


  --cover-ms: 920ms;
  --cover-slide-ms: 360ms;
  --cover-ease: cubic-bezier(0.45, 0.05, 0.3, 1);
  --closed-front-shift: 9.25rem;
  --closed-back-shift: -18.75rem;


  --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23g)' opacity='0.38'/%3E%3C/svg%3E");
  --fibre: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260'%3E%3Cfilter id='f'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.016 0.7' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='260' height='260' filter='url(%23f)' opacity='0.22'/%3E%3C/svg%3E");
  --leather-texture: url("/static/leather-grain.jpg");
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  min-height: 100%;
}

body {
  background: #0b0a0d;
  overflow-x: hidden;
  color: #cec7ba;
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.skip {
  position: absolute;
  left: -9999px;
}
.skip:focus {
  left: 1rem;
  top: 1rem;
  z-index: 90;
  background: var(--paper);
  color: var(--ink);
  padding: 0.6rem 1rem;
  border-radius: 3px;
}

/* ---------- the room ---------- */

.desk {
  flex: 1 0 auto;
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding: clamp(1rem, 2.5vh, 2.5rem) 1.5rem;
  box-sizing: border-box;
  isolation: isolate;

  background:
    radial-gradient(76% 52% at 50% 30%, rgba(120, 104, 78, 0.3) 0%, rgba(40, 34, 28, 0.12) 46%, transparent 74%),
    radial-gradient(150% 100% at 50% 0%, #221e24 0%, var(--room) 38%, var(--room-deep) 100%);
}

.desk::after {

  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--grain);
  opacity: 0.5;
  mix-blend-mode: overlay;
  pointer-events: none;
  z-index: -1;
}

/* ---------- chrome ---------- */

.chrome {
  position: relative;
  z-index: 50;
  isolation: isolate;
  width: 100%;
  min-height: 5.45rem;
  margin: 0;
  padding: 0.78rem clamp(1rem, 4vw, 5rem);
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0.35rem 1.35rem;
  overflow: hidden;
  border-bottom: 1px solid rgba(206, 170, 104, 0.42);
  background-color: #5c3b26;
  background-image:
    radial-gradient(116% 170% at 20% -35%, rgba(255, 226, 188, 0.18), transparent 56%),
    linear-gradient(90deg, rgba(36, 19, 11, 0.28), rgba(92, 59, 38, 0.3) 48%, rgba(35, 18, 10, 0.5)),
    var(--leather-texture);
  background-size: auto, auto, cover;
  background-position: center;
  background-blend-mode: screen, multiply, normal;
  box-shadow:
    inset 0 -18px 30px -24px rgba(0, 0, 0, 0.78),
    inset 0 1px 0 rgba(255, 232, 200, 0.14),
    0 12px 28px -18px rgba(0, 0, 0, 0.95);
}

.chrome::before {
  content: "";
  position: absolute;
  inset: 0.42rem 0.65rem;
  z-index: -1;
  border: 1px solid rgba(206, 170, 104, 0.24);
  border-radius: 3px;
  pointer-events: none;
}

.chrome::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  background-image: var(--grain);
  background-size: 180px 180px;
  opacity: 0.2;
  mix-blend-mode: overlay;
  pointer-events: none;
}

.wordmark {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  margin: 0;
  font-family: var(--serif);
  font-size: 1.9rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  color: #f1d7a4;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.62);
}

.wordmark-glyph {
  width: 1.22rem;
  height: 1.22rem;
  border-radius: 50%;
  border: 2px solid #d1a865;
  background:
    radial-gradient(circle at 34% 28%, rgba(255, 247, 218, 0.72), transparent 52%),
    #2b1a10;
  box-shadow:
    0 0 0 2px rgba(43, 25, 14, 0.8),
    0 0 14px -2px rgba(218, 174, 101, 0.72);
}



.chrome-book {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  padding-left: 1.35rem;
  border-left: 1px solid rgba(206, 170, 104, 0.34);
}

.chrome-book[hidden] {
  display: none;
}

.chrome-title {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.19em;
  text-transform: uppercase;
  color: #e2b86f;
}

.chrome-note,
.chrome-count {
  margin: 0;
  font-size: 0.84rem;
  color: rgba(240, 226, 205, 0.68);
}

.chrome-count {
  margin-left: auto;
  font-family: var(--mono);
  font-size: 0.74rem;
  letter-spacing: 0.06em;
  color: rgba(232, 201, 143, 0.78);
}


.to-contents {
  display: inline-flex;
  align-items: center;
  gap: 0.42rem;
  padding: 0.48rem 0.8rem;
  border: 1px solid rgba(206, 170, 104, 0.34);
  border-radius: 3px;
  background: rgba(28, 14, 8, 0.42);
  color: #d8bf91;
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  cursor: pointer;
  transition: color 160ms ease, border-color 160ms ease, background-color 160ms ease;
}

.to-contents svg {
  width: 0.92rem;
  height: 0.92rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.5;
  stroke-linejoin: round;
}

.to-contents:hover {
  color: #f3dfb8;
  border-color: rgba(226, 184, 111, 0.7);
  background: rgba(38, 19, 10, 0.62);
}

/* ---------- contents ---------- */

.contents {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: grid;
  place-items: center;
  padding: 1.5rem;
  background: rgba(6, 5, 8, 0.72);
  opacity: 0;
  transition: opacity 200ms ease;
}

.contents[hidden] {
  display: none;
}

.contents.open {
  opacity: 1;
}

.contents-sheet {
  width: min(34rem, 100%);
  max-height: min(80vh, 40rem);
  overflow-y: auto;
  padding: 2.2rem 2.1rem 1.6rem;
  border-radius: 3px;
  background-color: var(--paper);
  background-image: var(--fibre), var(--grain);
  background-blend-mode: multiply, multiply;
  color: var(--ink);
  box-shadow: 0 40px 70px -28px rgba(0, 0, 0, 0.95),
    inset 0 0 0 1px rgba(120, 100, 62, 0.22);
  transform: translateY(8px);
  transition: transform 260ms cubic-bezier(0.2, 0.7, 0.25, 1);
}

.contents.open .contents-sheet {
  transform: none;
}

.contents-kicker {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--brass-dim);
}

.contents-title {
  margin: 0.4rem 0 0.3rem;
  font-family: var(--serif);
  font-size: 1.6rem;
  font-weight: 500;
  letter-spacing: -0.012em;
  color: var(--ink);
}

.contents-note {
  margin: 0 0 1.2rem;
  font-size: 0.84rem;
  color: var(--ink-soft);
}

.contents-list {
  list-style: none;
  margin: 0;
  padding: 0;
  border-top: 1px solid var(--rule);
}

.contents-entry {
  display: grid;
  grid-template-columns: 2.4rem 1fr auto;
  gap: 0.1rem 0.9rem;
  align-items: baseline;
  width: 100%;
  padding: 0.7rem 0.2rem;
  border: 0;
  border-bottom: 1px solid rgba(140, 128, 100, 0.3);
  background: none;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}

.contents-entry:hover {
  background: rgba(154, 116, 51, 0.08);
}

.contents-entry:focus-visible {
  outline: 2px solid var(--brass);
  outline-offset: -2px;
}

.contents-entry[aria-current="true"] .contents-name {
  color: var(--ink);
  text-decoration: underline;
  text-decoration-color: var(--brass-dim);
  text-underline-offset: 3px;
}

.contents-numeral {
  grid-row: 1 / 3;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.1em;
  color: var(--ink-faint);
}

.contents-name {
  font-family: var(--serif);
  font-size: 1.06rem;
  color: var(--ink);
}

.contents-held {
  grid-row: 1 / 3;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--brass-dim);
}

.contents-place {
  grid-column: 2;
  font-family: var(--mono);
  font-size: 0.63rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

.contents-close {
  margin-top: 1.2rem;
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  background: none;
  border: 1px solid var(--rule);
  border-radius: 2px;
  padding: 0.42rem 0.9rem;
  cursor: pointer;
}

.contents-close:hover {
  color: var(--ink);
  border-color: var(--brass-dim);
}

.contents-close:focus-visible {
  outline: 2px solid var(--brass);
  outline-offset: 2px;
}

/* ---------- the book ---------- */
.stage {
  position: relative;
  display: flex;
  justify-content: center;
  padding: 1.5rem 0 1.25rem;
  width: 100%;
}

.book {
  position: relative;
  width: calc(var(--page-w) * 2);
  height: var(--page-h);
  margin-right: var(--cradle-w);
  --stack-min: 3px;
  --left-stack-ratio: 0;
  --right-stack-ratio: 1;
  --left-stack: max(var(--stack-min), calc(var(--edge) * var(--left-stack-ratio)));
  --right-stack: max(var(--stack-min), calc(var(--edge) * var(--right-stack-ratio)));
}

.board {
  position: absolute;
  top: -18px;
  bottom: -18px;
  left: calc(var(--edge) * -1 - 16px);
  right: calc((var(--edge) + 16px + var(--cradle-w)) * -1);
  border-radius: 7px;
  background:
    linear-gradient(180deg, rgba(255, 240, 214, 0.07) 0%, transparent 8%, transparent 80%, rgba(0, 0, 0, 0.6) 100%),
    linear-gradient(90deg, #150c04 0%, #2b1910 9%, #201308 50%, #281710 88%, #130b04 100%);
  box-shadow:
    0 46px 78px -28px rgba(0, 0, 0, 0.95),
    0 10px 24px -12px rgba(0, 0, 0, 0.85),
    inset 0 0 0 1px rgba(206, 178, 126, 0.16),
    inset 0 0 0 3px rgba(0, 0, 0, 0.4);
}

.board::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 7px;
  background-image: var(--grain);
  opacity: 0.55;
  mix-blend-mode: overlay;
}

.edges {
  position: absolute;
  top: 4px;
  bottom: 4px;
  width: var(--edge);
  z-index: 1;
  box-shadow:
    inset 0 0 14px -4px rgba(56, 42, 22, 0.55),
    0 10px 20px -10px rgba(0, 0, 0, 0.7);
  transition:
    width var(--cover-ms, 920ms) var(--cover-ease),
    left var(--cover-ms, 920ms) var(--cover-ease),
    right var(--cover-ms, 920ms) var(--cover-ease);
}

.edges-left {
  left: calc(var(--left-stack) * -1);
  width: var(--left-stack);
  border-radius: 4px 0 0 4px;
  background-image:
    linear-gradient(90deg, rgba(20, 16, 10, 0.5) 0%, transparent 55%),
    repeating-linear-gradient(
      to right,
      #f4ecd9 0 1px,
      #c2b699 1px 2px,
      #eae2cd 2px 3.5px,
      #b3a689 3.5px 4.5px
    );
}

.edges-right {
  right: calc(var(--right-stack) * -1);
  width: var(--right-stack);
  border-radius: 0 4px 4px 0;
  background-image:
    linear-gradient(270deg, rgba(20, 16, 10, 0.5) 0%, transparent 55%),
    repeating-linear-gradient(
      to right,
      #f4ecd9 0 1px,
      #c2b699 1px 2px,
      #eae2cd 2px 3.5px,
      #b3a689 3.5px 4.5px
    );
}

/* ---------- the loupe's holster ---------- */
.cradle {
  position: absolute;
  top: -18px;
  bottom: -18px;
  right: calc((var(--edge) + 16px + var(--cradle-w)) * -1);
  width: var(--cradle-w);
  z-index: 5;
  pointer-events: none;
}

.cradle::before {
  content: "";
  position: absolute;
  inset: 1.6rem auto 1.6rem 0.1rem;
  width: 1px;
  background: repeating-linear-gradient(
    180deg,
    rgba(206, 178, 126, 0.32) 0 5px,
    transparent 5px 12px
  );
}

.cradle-well {
  position: absolute;
  left: 50%;
  top: 50%;
  width: var(--well-w);
  height: var(--well-h);
  margin: calc(var(--well-h) / -2) 0 0 calc(var(--well-w) / -2);
  border-radius: calc(var(--well-w) / 2);
  background: linear-gradient(180deg, #120a05 0%, #221408 44%, #150c05 100%);
  box-shadow:
    inset 0 2px 6px -1px rgba(0, 0, 0, 0.95),
    inset 0 0 0 1px rgba(0, 0, 0, 0.55),
    0 1px 0 rgba(206, 178, 126, 0.16);
}

.cradle-well::before {
  content: "";
  position: absolute;
  inset: 0.42rem;
  border: 1px dashed rgba(198, 170, 120, 0.26);
  border-radius: calc(var(--well-w) / 2);
}


.cradle-stud {
  position: absolute;
  left: 50%;
  width: 0.62rem;
  height: 0.62rem;
  margin-left: -0.31rem;
  border-radius: 50%;
  background: radial-gradient(circle at 34% 30%, #f4e2ba 0%, var(--brass) 52%, #5f4a24 100%);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.7), inset 0 0 0 1px rgba(60, 45, 20, 0.5);
}

.cradle-stud-top {
  top: -1.15rem;
}

.cradle-stud-bottom {
  bottom: -1.15rem;
}

.cradle-clip {
  position: absolute;
  top: 50%;
  right: calc((var(--edge) + 16px + var(--cradle-w)) * -1);
  width: var(--cradle-w);
  height: 1rem;
  margin-top: calc(var(--well-h) * 0.27);
  z-index: 41;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

.cradle-clip::before {
  content: "";
  width: 2.6rem;
  height: 0.72rem;
  border-radius: 0.46rem;
  background: linear-gradient(180deg, #ecd7a6 0%, var(--brass) 44%, #6d5527 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 247, 224, 0.65),
    inset 0 -1px 0 rgba(50, 36, 14, 0.5),
    0 3px 7px -2px rgba(0, 0, 0, 0.75);
}

/* ---------- fore-edge tabs ---------- */

.tab {
  position: absolute;
  top: 3.4rem;
  z-index: 6;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.7rem;
  width: 2.1rem;
  padding: 0.7rem 0 0.85rem;
  font: inherit;
  color: #b8ad97;
  background: linear-gradient(90deg, #141318, #201e26 45%, #141318);
  border: 1px solid rgba(198, 170, 120, 0.16);
  border-radius: 5px;
  cursor: pointer;
  box-shadow: 0 12px 22px -10px rgba(0, 0, 0, 0.8);
}

.tab-left {
  left: calc(var(--left-stack) * -1 - 2.9rem);
}

.tab-right {
  right: calc(var(--right-stack) * -1 - 2.9rem);
}

.tab-left,
.tab-right {
  transition:
    left 780ms cubic-bezier(0.2, 0.62, 0.22, 1),
    right 780ms cubic-bezier(0.2, 0.62, 0.22, 1);
}

.tab-label {
  writing-mode: vertical-rl;
  text-orientation: mixed;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
}

.tab-right .tab-label {
  transform: rotate(180deg);
}

.tab-icon {
  width: 0.95rem;
  height: 0.95rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0.85;
}

.tab-lozenge {
  width: 0.4rem;
  height: 0.4rem;
  border: 1px solid var(--brass-dim);
  transform: rotate(45deg);
}

.tab:hover,
.tab[aria-expanded="true"] {
  color: var(--brass-light);
  border-color: rgba(198, 170, 120, 0.4);
}

.tab:focus-visible,
.turn:focus-visible,
.take:focus-visible,
.bid-form input:focus-visible {
  outline: 2px solid var(--brass);
  outline-offset: 2px;
}

/* ---------- pages ---------- */

.spread {
  position: absolute;
  inset: 0;
  z-index: 3;
  perspective: 2600px;
  perspective-origin: 50% 42%;
}

.page,
.leaf-face {
  background-color: var(--paper);
  background-image: var(--fibre), var(--grain);
  background-blend-mode: multiply, multiply;
  color: var(--ink);
}

.page {
  position: absolute;
  top: 0;
  width: var(--page-w);
  height: var(--page-h);
  overflow: hidden;
  backface-visibility: hidden;
}

.page-verso {
  left: 0;
  border-radius: 3px 1px 1px 3px;
  box-shadow: inset -18px 0 30px -22px rgba(46, 34, 16, 0.62);
}

.stack {
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
}

.leaf {
  position: absolute;
  top: 0;
  left: var(--page-w);
  width: var(--page-w);
  height: var(--page-h);
  transform-style: preserve-3d;
  transform-origin: left center;
  transform: rotateY(0deg);
  transition: transform 780ms cubic-bezier(0.2, 0.62, 0.22, 1);



  content-visibility: hidden;
  contain-intrinsic-size: var(--page-w) var(--page-h);
}



.leaf.near {
  content-visibility: visible;
  will-change: transform;
}

.leaf.turned {
  transform: rotateY(-179.6deg);
}

.leaf.dragging {
  transition: none;
}

.leaf-face {
  position: absolute;
  inset: 0;
  backface-visibility: hidden;
  overflow: hidden;
}

.leaf-front {
  border-radius: 1px 3px 3px 1px;
  box-shadow: inset 18px 0 30px -22px rgba(46, 34, 16, 0.62);
}

.leaf-back {
  transform: rotateY(180deg);
  border-radius: 3px 1px 1px 3px;
  box-shadow: inset -18px 0 30px -22px rgba(46, 34, 16, 0.62);
}



.leaf-edge {
  position: absolute;
  top: 0;
  right: 0;
  width: 1rem;
  height: 100%;
  cursor: grab;
  touch-action: none;
}

.leaf-edge:active {
  cursor: grabbing;
}

/* ---------- the boards ---------- */



.book.is-closed {
  width: var(--page-w);
  margin-right: 0;
  transform: translateX(0);
}

.book.is-closed.is-cover-staged {
  transform: translateX(var(--closed-front-shift));
}

.book.is-closed.is-cover-staged:has(.cover.is-back) {
  transform: translateX(var(--closed-back-shift));
}


.book {
  transform: translateX(0);
  transition:
    width var(--cover-ms, 920ms) var(--cover-ease),
    margin-right var(--cover-ms, 920ms) var(--cover-ease),
    transform var(--cover-slide-ms, 360ms) var(--cover-ease);
}

.book.is-cover-turning {
  transition:
    width var(--cover-ms, 920ms) var(--cover-ease),
    margin-right var(--cover-ms, 920ms) var(--cover-ease),
    transform var(--cover-ms, 920ms) var(--cover-ease);
}

.book.is-cover-turning .spread {
  pointer-events: none;
}

html.is-loading .book {
  transition: none;
}


.book.is-closed .board {
  top: -10px;
  bottom: -10px;
  left: -10px;
  right: -10px;
  border-radius: 5px;
  box-shadow: 0 46px 78px -30px rgba(0, 0, 0, 0.95),
    0 12px 26px -14px rgba(0, 0, 0, 0.9),
    inset 0 0 0 1px rgba(198, 162, 98, 0.13);
}


.board {
  transition: inset var(--cover-ms, 920ms) var(--cover-ease);
}

html.is-loading .board {
  transition: none;
}



.book.is-closed .edges-right,
.book.is-closed .edges-left {
  width: calc(var(--edge) * 0.55);
  box-shadow: inset 0 0 16px -3px rgba(40, 28, 12, 0.85),
    0 10px 20px -10px rgba(0, 0, 0, 0.8);
  background-image: linear-gradient(
      90deg,
      rgba(30, 19, 9, 0.68) 0%,
      rgba(30, 19, 9, 0.24) 58%,
      rgba(30, 19, 9, 0.46) 100%
    ),
    repeating-linear-gradient(
      to right,
      #ab9576 0 1px,
      #7c6141 1px 2px,
      #9d8964 2px 3.5px,
      #6d5537 3.5px 4.5px
    );
}

.book.is-closed .edges-right {
  right: calc(var(--edge) * -0.5);
}


.book.is-closed:has(.cover.is-back) .edges-right {
  visibility: hidden;
}

.book.is-closed:has(.cover.is-back) .edges-left {
  visibility: visible;
  left: calc(var(--edge) * -0.5);
}

.book.is-closed .spread,
.book.is-closed .tab,
.book.is-closed .cradle,
.book.is-closed .cradle-clip,
.book.is-closed .edges-left {
  visibility: hidden;
}

.stage:has(.book.is-closed) ~ .story-mobile {
  display: none;
}

.book.is-closed ~ .loupe,
.book.is-closed ~ .loupe-zoom {
  display: none;
}



.cover {
  position: absolute;
  top: 0;
  left: 50%;
  width: var(--page-w);
  height: var(--page-h);
  z-index: 30;
  transform-origin: left center;
  transform: translateX(-50%) perspective(2200px) rotateY(var(--cover-turn, 0deg));
  transform-style: preserve-3d;
  opacity: 1;
  transition: transform var(--cover-ms, 920ms) var(--cover-ease);


  touch-action: pan-y;
  cursor: grab;


  user-select: none;
  -webkit-user-select: none;
}

.cover:active {
  cursor: grabbing;
}


.cover.is-dragging {
  transition: none;
  will-change: transform;
}



.cover.is-opening {
  transform: translateX(0) perspective(2200px) rotateY(-176deg);
  z-index: 30;
  animation:
    cover-open-front var(--cover-ms, 920ms) var(--cover-ease) both,
    cover-open-layer var(--cover-ms, 920ms) linear both;
  pointer-events: none;
  will-change: transform;
}



.cover.is-back {
  transform-origin: right center;
}

.cover.is-back.is-opening {
  transform: translateX(-100%) perspective(2200px) rotateY(176deg);
  animation-name: cover-open-back, cover-open-layer;
}

.cover.is-opening.is-from-drag {
  animation: cover-open-front-drag var(--cover-ms, 920ms) var(--cover-ease) both;
}

.cover.is-back.is-opening.is-from-drag {
  animation-name: cover-open-back-drag;
}

.cover.is-opening.is-behind {
  z-index: 2;
}

.cover.is-closing {
  z-index: 30;
  animation:
    cover-close-front var(--cover-ms, 920ms) var(--cover-ease) both,
    cover-close-layer var(--cover-ms, 920ms) linear both;
  pointer-events: none;
  will-change: transform;
}

.cover.is-back.is-closing {
  animation-name: cover-close-back, cover-close-layer;
}

@keyframes cover-open-front {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
  to {
    transform: translateX(0) perspective(2200px) rotateY(-176deg);
  }
}

@keyframes cover-open-back {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
  to {
    transform: translateX(-100%) perspective(2200px) rotateY(176deg);
  }
}

@keyframes cover-open-front-drag {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(var(--cover-start-turn, 0deg));
  }
  to {
    transform: translateX(0) perspective(2200px) rotateY(-176deg);
  }
}

@keyframes cover-open-back-drag {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(var(--cover-start-turn, 0deg));
  }
  to {
    transform: translateX(-100%) perspective(2200px) rotateY(176deg);
  }
}

@keyframes cover-close-front {
  from {
    transform: translateX(0) perspective(2200px) rotateY(-176deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
}

@keyframes cover-close-back {
  from {
    transform: translateX(-100%) perspective(2200px) rotateY(176deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
}

@keyframes cover-open-front-narrow {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(-176deg);
  }
}

@keyframes cover-open-back-narrow {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(176deg);
  }
}

@keyframes cover-open-front-narrow-drag {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(var(--cover-start-turn, 0deg));
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(-176deg);
  }
}

@keyframes cover-open-back-narrow-drag {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(var(--cover-start-turn, 0deg));
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(176deg);
  }
}

@keyframes cover-close-front-narrow {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(-176deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
}

@keyframes cover-close-back-narrow {
  from {
    transform: translateX(-50%) perspective(2200px) rotateY(176deg);
  }
  to {
    transform: translateX(-50%) perspective(2200px) rotateY(0deg);
  }
}

@keyframes cover-open-layer {
  0%,
  40% {
    z-index: 30;
  }
  40.1%,
  100% {
    z-index: 2;
  }
}

@keyframes cover-close-layer {
  0%,
  39.2% {
    z-index: 2;
  }
  39.3%,
  100% {
    z-index: 30;
  }
}

.book:not(.is-closed):has(.cover.is-opening) .spread {
  animation: cover-spread-reveal var(--cover-ms, 920ms) ease-out both;
}

.book:not(.is-closed):has(.cover.is-opening) .tab,
.book:not(.is-closed):has(.cover.is-opening) .cradle,
.book:not(.is-closed):has(.cover.is-opening) .cradle-clip,
.book:not(.is-closed):has(.cover.is-opening) ~ .loupe.is-placed {
  animation: cover-fittings-reveal var(--cover-ms, 920ms) ease-out both;
  pointer-events: none;
}

@keyframes cover-spread-reveal {
  0% {
    opacity: 0;
  }
  18% {
    opacity: 0.12;
  }
  42% {
    opacity: 1;
  }
  100% {
    opacity: 1;
  }
}

@keyframes cover-fittings-reveal {
  0%,
  58% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}


.cover.is-back .cover-liner-hinge {
  right: auto;
  left: 0;
  background: linear-gradient(
    90deg,
    rgba(74, 54, 28, 0.34) 0%,
    rgba(74, 54, 28, 0.12) 46%,
    transparent 100%
  );
}

.cover.is-back .cover-liner-plate {
  inset: 2.2rem 2.2rem 2.2rem 3.4rem;
}


.cover-face {
  position: absolute;
  inset: 0;
  overflow: hidden;
  border-radius: 2px 6px 6px 2px;
  background-color: #5c3b26;
  background-image:
    radial-gradient(116% 94% at 24% 6%, rgba(255, 226, 188, 0.17) 0%, transparent 58%),
    radial-gradient(46% 32% at 16% 34%, rgba(255, 232, 200, 0.06) 0%, transparent 72%),
    radial-gradient(40% 30% at 80% 70%, rgba(0, 0, 0, 0.20) 0%, transparent 74%),
    linear-gradient(158deg, #7a5133 0%, #613e26 46%, #472a1a 100%);
  box-shadow: inset -26px 0 40px -28px rgba(0, 0, 0, 0.78),
    inset 0 1px 0 rgba(255, 232, 200, 0.20),
    inset 0 -18px 30px -24px rgba(0, 0, 0, 0.5),
    0 34px 60px -28px rgba(0, 0, 0, 0.78);
  color: #f3e6d1;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}


.cover-front .cover-inner,
.cover-back .cover-inner {
  justify-content: center;
}


.cover-back .cover-inner {
  padding: 2rem 3.6rem 2rem 2rem;
}


.cover-back .cover-face,
.cover-face.cover-back {
  background-color: #4f3221;
  background-image: radial-gradient(
      112% 92% at 74% 8%,
      rgba(255, 226, 188, 0.12) 0%,
      transparent 58%
    ),
    radial-gradient(42% 30% at 82% 36%, rgba(255, 232, 200, 0.05) 0%, transparent 72%),
    radial-gradient(40% 30% at 20% 70%, rgba(0, 0, 0, 0.20) 0%, transparent 74%),
    linear-gradient(202deg, #6d4830 0%, #573722 46%, #3f2517 100%);
  box-shadow: inset 26px 0 40px -28px rgba(0, 0, 0, 0.78),
    inset 0 1px 0 rgba(255, 232, 200, 0.16),
    inset 0 -18px 30px -24px rgba(0, 0, 0, 0.5),
    0 34px 60px -28px rgba(0, 0, 0, 0.78);
}


.cover-face::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.42;
  mix-blend-mode: overlay;
  background-image: var(--grain), var(--fibre);
  background-size: 180px 180px, 320px 200px;
}


.cover-spine {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 2.1rem;
  background-image:

    repeating-linear-gradient(
      180deg,
      transparent 0 9.6%,
      rgba(255, 232, 200, 0.07) 9.6% 10.5%,
      rgba(130, 92, 54, 0.16) 10.5% 12.2%,
      rgba(0, 0, 0, 0.24) 12.2% 13.1%,
      transparent 13.1% 16.66%
    ),

    linear-gradient(
      90deg,
      rgba(0, 0, 0, 0.62) 0%,
      rgba(0, 0, 0, 0.26) 30%,
      rgba(255, 232, 200, 0.10) 62%,
      rgba(0, 0, 0, 0.14) 84%,
      rgba(0, 0, 0, 0.40) 100%
    );
  box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.46),
    inset 1px 0 0 rgba(255, 232, 200, 0.07);
}



.cover-back .cover-spine {
  left: auto;
  right: 0;
  transform: scaleX(-1);
}


.cover-frame {
  position: absolute;
  inset: 1.5rem 1.5rem 1.5rem 3.1rem;
  pointer-events: none;
  border: 1px solid rgba(206, 170, 104, 0.52);
  border-radius: 2px;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
}


.cover-frame::before {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px solid rgba(206, 170, 104, 0.3);
  border-radius: 1px;
}

.cover-back .cover-frame {
  inset: 1.5rem 3.1rem 1.5rem 1.5rem;
}

/* ---------- the inside of the board ---------- */


.cover-liner {
  background-color: var(--paper-warm);
  background-image: radial-gradient(
      120% 100% at 30% 8%,
      rgba(255, 250, 236, 0.7) 0%,
      transparent 66%
    ),
    var(--fibre), var(--grain),
    linear-gradient(160deg, #e6dcc4 0%, #d8ccb0 58%, #c9bb9c 100%);
  background-blend-mode: normal, multiply, multiply, normal;
  box-shadow: inset 0 0 0 1px rgba(120, 96, 58, 0.22),
    inset 0 -20px 34px -26px rgba(70, 52, 26, 0.5);
  transform: rotateY(180deg);
}


.cover-liner::after {
  content: none;
}


.cover-liner-hinge {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  width: 2.6rem;
  background: linear-gradient(
    270deg,
    rgba(74, 54, 28, 0.34) 0%,
    rgba(74, 54, 28, 0.12) 46%,
    transparent 100%
  );
}


.cover-liner-plate {
  position: absolute;
  inset: 2.2rem 3.4rem 2.2rem 2.2rem;
  border: 1px solid rgba(154, 116, 51, 0.26);
  border-radius: 2px;
}


.cover-corner {
  position: absolute;
  width: 0.68rem;
  height: 0.68rem;
  pointer-events: none;
}



.cover-corner svg {
  display: block;
  width: 100%;
  height: 100%;
  fill: none;
  stroke: #dfba7e;
  stroke-width: 1.5;
  stroke-linejoin: round;
  opacity: 0.9;
  filter: drop-shadow(0 1px 0 rgba(58, 34, 12, 0.6));
}

.cover-corner-tl { top: 1.5rem; left: 3.1rem; transform: translate(-50%, -50%); }
.cover-corner-tr { top: 1.5rem; right: 1.5rem; transform: translate(50%, -50%); }
.cover-corner-br { bottom: 1.5rem; right: 1.5rem; transform: translate(50%, 50%); }
.cover-corner-bl { bottom: 1.5rem; left: 3.1rem; transform: translate(-50%, 50%); }


.cover-back .cover-corner-tl,
.cover-back .cover-corner-bl { left: 1.5rem; }
.cover-back .cover-corner-tr,
.cover-back .cover-corner-br { right: 3.1rem; }


.cover-inner {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100%;
  height: 100%;


  padding: 2rem 2rem 2rem 3.6rem;


  overflow-y: auto;
  scrollbar-width: none;
}

.cover-inner::-webkit-scrollbar {
  display: none;
}

.cover-kicker {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.56rem;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  color: rgba(240, 226, 205, 0.62);
}


.cover-crest {
  display: block;
  width: 3.15rem;
  height: 3.15rem;
  margin: 0.3rem 0 0;
}

.cover-crest svg {
  display: block;
  width: 100%;
  height: 100%;
  fill: none;
  stroke: var(--brass, #b9945a);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.cover-crest-ring {
  stroke-width: 2.6;
}

.cover-crest-rule {
  opacity: 0.5;
  stroke-width: 1.2;
}

.cover-crest-peak {
  fill: rgba(185, 148, 90, 0.34);
}

.cover-crest-stem {
  stroke-width: 4.4;
  stroke-linecap: round;
}

.cover-crest-fleuron {
  fill: var(--brass, #b9945a);
  stroke: none;
}

.cover-crest-horizon,
.cover-crest-sweep {
  opacity: 0.62;
  stroke-width: 1.4;
}


.cover-title {
  margin: 0.15rem 0 0;
  font-family: var(--serif);
  font-size: 1.98rem;
  font-weight: 500;
  line-height: 1.06;
  letter-spacing: 0.012em;
  color: #e8c98f;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.42);
}



.cover-title-thanks {
  font-size: 2.5rem;
  letter-spacing: 0.02em;
}

.cover-sub {
  margin: 0.42rem 0 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.94rem;
  line-height: 1.35;
  color: rgba(240, 226, 205, 0.8);
}


.cover-rule {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  width: 62%;
  margin: 0.7rem 0;
}

.cover-rule::before,
.cover-rule::after {
  content: "";
  flex: 1 1 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(185, 148, 90, 0.6), transparent);
}

.cover-rule span {
  width: 0.4rem;
  height: 0.4rem;
  border: 1px solid rgba(185, 148, 90, 0.75);
  transform: rotate(45deg);
}

.cover-lead {
  margin: 0;
  max-width: 21.5rem;
  font-family: var(--serif);
  font-size: 0.9rem;
  line-height: 1.5;
  color: rgba(240, 226, 205, 0.86);
}

.cover-lead-offer {
  margin-top: 0.6rem;
  color: rgba(240, 226, 205, 0.72);
}


.cover-own-key {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  width: 100%;
  margin: 0.95rem 0 0.6rem;
  font-family: var(--mono);
  font-size: 0.54rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: rgba(232, 201, 143, 0.9);
}

.cover-own-key::before,
.cover-own-key::after {
  content: "";
  flex: 1 1 0;
  height: 1px;
  background: rgba(185, 148, 90, 0.34);
}

.cover-own-key span {
  margin-right: -0.3em;
}



.cover-steps {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  width: 100%;
  max-width: 21rem;
  margin: 0;
  padding: 0;
  list-style: none;
  text-align: left;
}

.cover-step {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
}

.cover-step-no {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 1.15rem;
  height: 1.15rem;
  margin-top: 0.06rem;
  border: 1px solid rgba(185, 148, 90, 0.55);
  border-radius: 50%;
  font-family: var(--mono);
  font-size: 0.56rem;
  color: #e8c98f;
}

.cover-step-body {
  display: block;
  min-width: 0;
}

.cover-step-term {
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: #e8c98f;
}

.cover-step-note {
  display: block;
  margin-top: 0.06rem;
  font-family: var(--serif);
  font-size: 0.83rem;
  line-height: 1.28;
  color: rgba(240, 226, 205, 0.78);
}



.cover-open {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  margin: 1.5rem 0 0;
  padding: 0.62rem 1.5rem;
  border: 1px solid rgba(232, 201, 143, 0.72);
  border-radius: 3px;
  background: linear-gradient(180deg, rgba(232, 201, 143, 0.96), rgba(185, 148, 90, 0.92));
  color: #3a1409;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 8px 18px -12px rgba(0, 0, 0, 0.8);
  transition: transform 160ms ease, box-shadow 160ms ease, filter 160ms ease;
}

.cover-open:hover {
  filter: brightness(1.06);
  transform: translateY(-1px);
  box-shadow: 0 12px 22px -12px rgba(0, 0, 0, 0.85);
}

.cover-open:active {
  transform: translateY(0);
}

.cover-open-label {
  white-space: nowrap;
}

.cover-open-arrow {
  width: 1.05rem;
  height: 1.05rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.cover-open-arrow-back {
  order: -1;
}

.gutter {
  position: absolute;
  top: 0;
  left: calc(var(--page-w) - 13px);
  width: 26px;
  height: 100%;
  pointer-events: none;
  z-index: 20;
  background: linear-gradient(
    to right,
    rgba(52, 40, 22, 0) 0%,
    rgba(52, 40, 22, 0.2) 38%,
    rgba(40, 30, 16, 0.34) 50%,
    rgba(52, 40, 22, 0.2) 62%,
    rgba(52, 40, 22, 0) 100%
  );
}

/* ---------- the plate ---------- */





.monument-plate {
  position: absolute;
  inset: 1.25rem 1.15rem 1rem 0.6rem;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  gap: 0.45rem;
}



.monument-window {
  position: relative;
  width: 100%;
  aspect-ratio: var(--monument-frame-aspect);
  flex: 0 0 auto;
  overflow: hidden;
}



.monument-image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;


  opacity: 0;
  transition: opacity 700ms ease;
  mix-blend-mode: multiply;
  filter: saturate(0.74) contrast(0.86) brightness(1.09) sepia(0.08);



  --plate-wash: radial-gradient(
      124% 128% at 50% 47%,
      #000 78%,
      rgba(0, 0, 0, 0.6) 93%,
      transparent 100%
    ),
    linear-gradient(to right, transparent 0, #000 3.5%, #000 96.5%, transparent 100%),
    linear-gradient(to bottom, transparent 0, #000 3%, #000 97%, transparent 100%);
  -webkit-mask-image: var(--plate-wash);
  mask-image: var(--plate-wash);
  -webkit-mask-composite: source-in;
  mask-composite: intersect;
}

.monument-window[data-fit="cover"] .monument-image {
  object-fit: cover;
}

.monument-window.is-loaded .monument-image {
  opacity: 1;
}

.monument-window.is-absent .monument-image {
  display: none;
}


.monument-holding {
  position: absolute;
  inset: auto 0 50% 0;
  margin: 0;
  text-align: center;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink-faint);
}



.monument-missing {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 1.4rem;
  text-align: center;
  border: 1px dashed rgba(120, 100, 62, 0.45);
}

.monument-missing[hidden] {
  display: none;
}

.monument-missing-key {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--warn);
}

.monument-missing-note {
  margin: 0;
  font-size: 0.82rem;
  color: var(--ink-soft);
}

.monument-missing-path {
  margin: 0;
  max-width: 100%;
  overflow-wrap: anywhere;
  font-family: var(--mono);
  font-size: 0.74rem;
  color: var(--ink);
  background: rgba(255, 253, 246, 0.6);
  border: 1px solid var(--rule);
  border-radius: 2px;
  padding: 0.34rem 0.5rem;
}



.plate-head {
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.7rem;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--ink-faint);
}


.plate-head::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: linear-gradient(90deg, var(--rule), transparent);
}

/* ---------- who holds the plate ---------- */



.plate-owner {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 0.2rem;
  padding-top: 0.4rem;
  text-align: center;
  position: relative;
  flex: 0 0 auto;
  width: 100%;
}



.plate-owner-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;


  align-self: stretch;
}

.plate-owner-orn {
  width: 0.34rem;
  height: 0.34rem;
  border: 1px solid var(--brass-dim);
  transform: rotate(45deg);
}

.plate-owner-key {
  margin: 0.5rem 0 0.2rem;
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

/* ---------- the owner's bookplate ---------- */



.owner-card {
  --seal-deep: #7a2418;
  position: relative;
  width: 100%;
  margin: 0.7rem 0 0;


  padding: 1rem 1.15rem 0.9rem;


  border: 2px solid var(--seal-deep);
  box-shadow: inset 0 0 0 1px rgba(122, 36, 24, 0.3);
  border-radius: 2px;
  background: rgba(157, 53, 39, 0.04);
  text-align: center;
}



.owner-frame-corner {
  position: absolute;
  width: 1.6rem;
  height: 1.6rem;
}

.owner-frame-corner svg {
  display: block;
  width: 100%;
  height: 100%;
  fill: none;
  stroke: var(--seal-deep);
  stroke-width: 1.4;
  stroke-linecap: round;
  opacity: 0.85;
}

.owner-frame-corner-tl { top: 1px; left: 1px; transform: scaleX(-1); }
.owner-frame-corner-tr { top: 1px; right: 1px; }
.owner-frame-corner-br { bottom: 1px; right: 1px; transform: scaleY(-1); }
.owner-frame-corner-bl { bottom: 1px; left: 1px; transform: scale(-1, -1); }



.owner-card-crest,
.owner-card-flourish {
  position: absolute;
  left: 50%;
  width: 4.4rem;
  transform: translateX(-50%);


  padding: 0 0.35rem;
}

.owner-card-crest { top: -0.46rem; }
.owner-card-flourish { bottom: -0.46rem; }

.owner-card-crest svg,
.owner-card-flourish svg {
  display: block;
  width: 100%;
  height: auto;
  fill: none;
  stroke: var(--seal-deep);
  stroke-width: 1.1;
  stroke-linecap: round;
  opacity: 0.8;
}

.owner-card-crest svg path:last-child,
.owner-card-flourish svg path:last-child {
  fill: var(--seal-deep);
  stroke: none;
}



.owner-card-key {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.55rem;
  margin: 0 0 0.62rem;
  font-family: var(--mono);
  font-size: 0.5rem;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(122, 36, 24, 0.82);
}



.owner-card-key::before,
.owner-card-key::after {
  content: "";
  flex: 1 1 0;
  height: 1px;
  background: rgba(122, 36, 24, 0.32);
}



.owner-card-key span,
.owner-card-standing span {
  margin-right: -0.28em;
}



.owner-card-body {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
}

.owner-card-lines {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 0;
}



.plate-owner-name {
  margin: 0;
  font-family: var(--serif);
  font-size: 1.42rem;
  line-height: 1.08;
  font-weight: 400;
  letter-spacing: 0.035em;
  color: var(--seal);


  overflow-wrap: anywhere;
}



.owner-card-standing {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;

  margin: 0.62rem 0 0;
  font-family: var(--mono);
  font-size: 0.52rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(122, 36, 24, 0.76);
}



.owner-card-standing::before,
.owner-card-standing::after {
  content: "";
  flex: 0 1 1.4rem;
  height: 1px;
  background: rgba(122, 36, 24, 0.26);
}


.owner-card-standing span {
  flex: 0 0 auto;
  white-space: nowrap;
}



.plate-owner-url {


  margin: 0.8rem 1.15rem 0;
  padding: 0.36rem 0.75rem;
  border: 1px solid rgba(122, 36, 24, 0.55);


  border-radius: 4px;
  font-family: var(--serif);
  font-size: 0.74rem;
  line-height: 1.3;
  text-align: center;
}

.owner-url-globe {
  display: inline-block;
  width: 0.68rem;
  height: 0.68rem;
  margin-right: 0.28rem;

  vertical-align: -0.1em;
  fill: none;
  stroke: var(--seal-deep, #7a2418);
  stroke-width: 1.6;
  stroke-linecap: round;
  opacity: 0.75;
}

.plate-owner-url a {
  color: var(--seal);
  text-decoration-color: rgba(157, 53, 39, 0.42);
  text-underline-offset: 3px;
  overflow-wrap: anywhere;
}

.plate-owner-url a:hover {
  color: #7a2418;
  text-decoration-color: rgba(157, 53, 39, 0.8);
}


.owner-card-flourish {
  display: block;
  width: 6rem;
  margin: 0.46rem auto 0;
}

.owner-card-flourish svg {
  display: block;
  width: 100%;
  height: auto;
  fill: none;
  stroke: var(--seal-deep, #7a2418);
  stroke-width: 1.1;
  stroke-linecap: round;
  opacity: 0.62;
}

.owner-card-flourish svg path:last-child {
  fill: var(--seal-deep, #7a2418);
  stroke: none;
}


.plate-owner-vacant {
  margin: 0.6rem 0 0;
  font-family: var(--mono);
  font-size: 0.82rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--seal);
}

.plate-owner-call {
  margin: 0.35rem 0 0;
  font-family: var(--serif);
  font-style: italic;
  font-size: 0.92rem;
  color: var(--ink-soft);
}





.owner-seal {
  display: block;
  flex: 0 0 auto;


  width: 6.1rem;
  height: 6.1rem;
}

.owner-seal svg {
  width: 100%;
  height: 100%;
  overflow: visible;
}



.owner-seal-disc {
  fill: var(--seal);
}

.owner-seal-ring {
  fill: none;
  stroke: var(--seal-deep, #7a2418);
  stroke-width: 1.5;
}

.owner-seal-name-box {
  overflow: visible;
}

.owner-seal-name {
  display: flex;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  align-items: center;
  justify-content: center;
  padding: 2px;
  color: var(--paper);
  font-family: var(--serif);
  font-size: 10px;
  line-height: 1.05;
  font-weight: 400;
  letter-spacing: 0;
  text-align: center;
  overflow-wrap: anywhere;
}



.owner-seal-wreath {
  opacity: 0.9;
}

.owner-seal-branch,
.owner-seal-leaf {
  fill: none;
  stroke: var(--seal-deep, #7a2418);
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.owner-seal-leaf {
  fill: var(--seal-deep, #7a2418);
  stroke-width: 0.8;
  opacity: 0.9;
}



.owner-seal.has-logo .owner-seal-disc {
  fill: var(--paper);
  stroke: rgba(122, 36, 24, 0.45);
  stroke-width: 1;
}



.owner-seal-logo {
  mix-blend-mode: multiply;
  filter: saturate(0.52) sepia(0.2) contrast(0.96) brightness(1.02);
  opacity: 0.96;


  --seal-logo-mask: radial-gradient(
    circle closest-side at 50% 50%,
    #000 0 86%,
    rgba(0, 0, 0, 0.55) 94%,
    transparent 100%
  );
  -webkit-mask-image: var(--seal-logo-mask);
  mask-image: var(--seal-logo-mask);
}

/* ---------- the story ---------- */



.story {
  position: absolute;
  inset: 0;
  padding: 1.8rem 2.2rem 0.9rem;
  display: flex;
  flex-direction: column;
}

.story-numeral {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--ink-faint);
  margin: 0 0 0.5rem;
}

.story-title {
  font-family: var(--serif);
  font-size: 1.85rem;
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.012em;
  margin: 0 0 0.26rem;
  color: var(--ink);
}



.story-place {
  margin: 0 0 0.5rem;
  font-family: var(--mono);
  font-size: 0.63rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--brass-dim);
}


.story-orn {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 0.75rem;
  color: var(--brass-dim);
}

.story-orn::before,
.story-orn::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--rule) 22%, var(--rule) 78%, transparent);
}

.story-orn span {
  width: 0.36rem;
  height: 0.36rem;
  border: 1px solid currentColor;
  transform: rotate(45deg);
  flex: 0 0 auto;
}

.story-note {
  font-family: var(--serif);
  font-size: 1.02rem;
  line-height: 1.5;
  color: #3c372d;
  margin: 0 0 0.7rem;
}





.story-spec {
  margin: 0 0 auto;
  padding: 0;
  display: grid;
  gap: 0.22rem;
  font-family: var(--mono);
  font-size: 0.68rem;
  color: var(--ink-faint);
}

.story-spec > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  border-bottom: 1px dotted rgba(140, 128, 100, 0.4);
  padding-bottom: 0.2rem;
}

.story-spec dt {
  letter-spacing: 0.13em;
  text-transform: uppercase;
  font-size: 0.59rem;
  padding-top: 0.08rem;
}

.story-spec dd {
  margin: 0;
  color: var(--ink-soft);
  font-variant-numeric: tabular-nums;
}

/* ---------- bidding ---------- */



.bidding {
  position: relative;
  align-self: stretch;
  margin-top: 0.2rem;
  border-top: 1px solid var(--rule);
  padding-top: 0.35rem;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.own-key {
  margin: 0.25rem 0 0.15rem;
  font-family: var(--mono);
  font-size: 0.56rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brass-dim);
}

.price-row {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 0.45rem;
  margin-bottom: 0.35rem;
}

.price {
  font-family: var(--mono);
  font-size: 1.2rem;
  letter-spacing: -0.02em;
  color: var(--ink);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.price-label {
  font-family: var(--mono);
  font-size: 0.56rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

.bid-form {
  display: flex;
  flex-direction: column;
  gap: 0.32rem;
  width: 100%;
}

.bid-field {
  position: relative;
  display: flex;
  align-items: center;
  width: 100%;
}

.bid-field-icon {
  position: absolute;
  left: 0.62rem;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1rem;
  height: 1rem;
  color: #7b6951;
  pointer-events: none;
  z-index: 2;
}

.bid-field-icon svg {
  width: 0.95rem;
  height: 0.95rem;
  display: block;
}

.bid-form input {
  width: 100%;
  font: inherit;
  font-size: 0.8rem;
  color: var(--ink);
  background: rgba(247, 243, 233, 0.75);
  border: 1px solid rgba(175, 155, 120, 0.48);
  border-radius: 3px;
  padding: 0.38rem 0.65rem 0.38rem 2.05rem;
  min-width: 0;
  box-sizing: border-box;
  box-shadow: inset 0 1px 2px rgba(90, 70, 40, 0.06);
  transition: border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease;
}

.bid-form input::placeholder {
  color: #8c7d68;
  opacity: 0.92;
}

.bid-form input:hover {
  background: rgba(255, 252, 245, 0.9);
  border-color: rgba(160, 136, 96, 0.65);
}

.bid-form input:focus,
.bid-form input:focus-visible {
  outline: none;
  background: #fffdf8;
  border-color: #a88349;
  box-shadow: 0 0 0 2px rgba(180, 145, 85, 0.28), inset 0 1px 2px rgba(90, 70, 40, 0.06);
}

.bid-form input.is-invalid {
  border-color: #b33927 !important;
  background-color: rgba(255, 242, 240, 0.85) !important;
  box-shadow: 0 0 0 2px rgba(179, 57, 39, 0.22) !important;
}

.bid-handle {
  width: 100%;
}

.bid-optional-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.32rem;
  width: 100%;
}

.bid-optional {
  width: 100%;
}

.bid-amount {
  flex: 0 0 5.2rem;
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
}

.take {
  position: relative;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.52rem 0.95rem;
  margin-top: 0.15rem;
  font: inherit;
  color: #f7eedc;
  background: linear-gradient(180deg, #997847 0%, #826233 48%, #6e5025 100%);
  border: 1px solid #5a421c;
  border-radius: 4px;
  box-shadow:
    inset 0 1px 0 rgba(255, 235, 185, 0.42),
    inset 0 -1px 0 rgba(35, 22, 9, 0.55),
    0 2px 6px rgba(25, 18, 10, 0.35);
  cursor: pointer;
  box-sizing: border-box;
  text-shadow: 0 1px 2px rgba(20, 12, 5, 0.7);
  transition: filter 150ms ease, transform 100ms ease, box-shadow 150ms ease;
  user-select: none;
}

.take::after {
  content: "";
  position: absolute;
  inset: 1px;
  border: 1px solid rgba(255, 230, 175, 0.22);
  border-radius: 3px;
  pointer-events: none;
}

.take-orn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1rem;
  height: 1rem;
  color: #eeddbb;
  flex: 0 0 auto;
}

.take-orn svg {
  width: 0.9rem;
  height: 0.9rem;
  display: block;
}

.take-label {
  flex: 1 1 auto;
  text-align: center;
  font-family: var(--serif);
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #f7eedc;
}

.take-arrow {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 0.9rem;
  height: 0.9rem;
  color: #eeddbb;
  flex: 0 0 auto;
}

.take-arrow svg {
  width: 0.8rem;
  height: 0.8rem;
  display: block;
}

.take:hover:not(:disabled) {
  filter: brightness(1.08);
  transform: translateY(-1px);
  box-shadow:
    inset 0 1px 0 rgba(255, 240, 200, 0.55),
    inset 0 -1px 0 rgba(35, 22, 9, 0.55),
    0 4px 10px rgba(25, 18, 10, 0.4);
}

.take:active:not(:disabled) {
  transform: translateY(0);
  filter: brightness(0.96);
  box-shadow:
    inset 0 2px 4px rgba(20, 10, 3, 0.6),
    0 1px 2px rgba(25, 18, 10, 0.25);
}

.take:disabled {
  opacity: 0.55;
  cursor: default;
  filter: grayscale(0.2);
}

.take:focus-visible {
  outline: 2px solid var(--brass);
  outline-offset: 2px;
}

.bid-status {
  margin: 0.25rem 0 0;
  font-size: 0.72rem;
  line-height: 1.3;
  min-height: 0.95rem;
  color: var(--ink-soft);
  transition: color 150ms ease;
}

.bid-status.bad {
  color: #a82e1e;
  font-weight: 500;
}

.bid-status.good {
  color: var(--good);
  font-weight: 500;
}

.ownership-note {
  max-width: 31rem;
  margin: 0.2rem auto 0;
  font-size: 0.55rem;
  line-height: 1.35;
  color: var(--ink-faint);
}



.provenance {
  margin: 0.3rem 0 0;
  padding: 0;
  list-style: none;
  font-family: var(--mono);
  font-size: 0.66rem;
  color: var(--ink-faint);
  max-height: 1.2rem;
  overflow: hidden;
}

.provenance li {
  display: flex;
  justify-content: center;
  gap: 0.7rem;
}

.provenance-who {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.provenance-at {
  color: rgba(139, 131, 113, 0.75);
}



.stamp {
  position: absolute;
  right: 0.1rem;
  top: 0;
  width: 4.2rem;
  height: 4.2rem;
  pointer-events: none;
  opacity: 0;
  transform: rotate(-8deg) scale(1.5);
  transition: opacity 260ms ease, transform 420ms cubic-bezier(0.2, 1.5, 0.4, 1);
}

.stamp.struck {
  opacity: 0.82;
  transform: rotate(-8deg) scale(1);
}

.stamp svg {
  width: 100%;
  height: 100%;
  overflow: visible;
}

.stamp circle,
.stamp path,
.stamp line {
  fill: none;
  stroke: #8a6a3c;
  stroke-width: 1.1;
}

.stamp text {
  fill: #8a6a3c;
  font-family: var(--mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.stamp-name-box {
  overflow: visible;
}

.stamp-name {
  display: flex;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  align-items: center;
  justify-content: center;
  color: #8a6a3c;
  font-family: var(--mono);
  font-size: 9px;
  line-height: 1.05;
  letter-spacing: 0;
  text-align: center;
  overflow-wrap: anywhere;
}

/* ---------- fore-edge panels ---------- */



.panel {
  position: absolute;
  inset: 0;
  z-index: 12;
  padding: 2rem 2.2rem 1.2rem;
  display: flex;
  flex-direction: column;


  overflow-y: auto;
  overscroll-behavior: contain;


  scrollbar-gutter: stable;
  background-color: var(--paper-warm);
  background-image: var(--fibre), var(--grain);
  background-blend-mode: multiply, multiply;
  box-shadow: inset -18px 0 30px -22px rgba(46, 34, 16, 0.62);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 200ms ease, transform 260ms cubic-bezier(0.2, 0.7, 0.25, 1);


  scrollbar-width: thin;
  scrollbar-color: rgba(154, 116, 51, 0.45) transparent;
}



.panel::-webkit-scrollbar {
  width: 10px;
}

.panel::-webkit-scrollbar-track {
  background: transparent;
}

.panel::-webkit-scrollbar-thumb {
  background-color: rgba(154, 116, 51, 0.4);
  border-radius: 99px;


  border: 3px solid transparent;
  background-clip: padding-box;
}

.panel:hover::-webkit-scrollbar-thumb,
.panel::-webkit-scrollbar-thumb:hover {
  background-color: rgba(154, 116, 51, 0.66);
  background-clip: padding-box;
}


.panel::-webkit-scrollbar-button {
  display: none;
  width: 0;
  height: 0;
}

.panel::-webkit-scrollbar-corner {
  background: transparent;
}

.panel.open {
  opacity: 1;
  transform: none;
}



.panel-foot-bar {
  position: sticky;
  bottom: -1.2rem;
  flex: 0 0 auto;
  margin: 0.6rem -2.2rem -1.2rem;


  padding: 1.7rem 2.2rem 1.2rem;
  background: linear-gradient(rgba(233, 224, 203, 0), var(--paper-warm) 42%);
  pointer-events: none;
}

.panel h3 {
  margin: 0 0 1rem;
  font-family: var(--mono);
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--brass-dim);
}

.panel h4 {
  margin: 0.95rem 0 0.3rem;
  font-family: var(--mono);
  font-size: 0.57rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brass-dim);
}

.panel p {
  margin: 0 0 0.45rem;
  font-size: 0.8rem;
  line-height: 1.55;
  color: var(--ink-soft);
}


.panel-lead {
  font-family: var(--serif);
  font-size: 0.93rem !important;
  line-height: 1.5;
  color: var(--ink) !important;
}


.panel-legend {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 0.78rem;
  color: var(--ink-soft);
}

.panel-legend li {
  display: grid;
  grid-template-columns: 8.4rem 1fr;
  gap: 0.2rem 0.7rem;
  padding: 0.24rem 0;
  border-bottom: 1px dotted var(--rule);
}

.legend-mark {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--brass-dim);
  padding-top: 0.16rem;
}

.panel-rows {
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.3rem;
  font-family: var(--mono);
  font-size: 0.72rem;
  color: var(--ink-faint);
}

.panel-rows > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  border-bottom: 1px dotted rgba(140, 128, 100, 0.4);
  padding-bottom: 0.28rem;
}

.panel-rows dt {
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-size: 0.6rem;
}

.panel-rows dd {
  margin: 0;
  color: var(--ink-soft);
  font-variant-numeric: tabular-nums;
}

.panel-provenance {
  margin: 0;
  padding: 0;
  list-style: none;
  font-family: var(--mono);
  font-size: 0.74rem;
  color: var(--ink-soft);
  display: grid;
  gap: 0.34rem;
}

.panel-provenance li {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 0.8rem;
  border-bottom: 1px dotted rgba(140, 128, 100, 0.4);
  padding-bottom: 0.3rem;
}

.panel-sources {
  display: grid;
  gap: 0.38rem;
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: 0.76rem;
}

.panel-sources a {
  color: var(--ink-soft);
  text-decoration-color: rgba(154, 116, 51, 0.45);
  text-underline-offset: 0.16em;
}

.panel-sources a:hover {
  color: var(--brass-dim);
}





.panel-close {
  pointer-events: auto;
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  background: none;
  border: 1px solid var(--rule);
  border-radius: 2px;
  padding: 0.38rem 0.8rem;
  cursor: pointer;
}

.panel-close:hover {
  color: var(--ink);
  border-color: var(--brass-dim);
}

.panel-close:focus-visible {
  outline: 2px solid var(--brass);
  outline-offset: 2px;
}

/* ---------- the glass ---------- */



.loupe {
  position: absolute;
  top: 0;
  left: 0;
  width: var(--lens);
  height: var(--lens);
  transform: translate3d(var(--loupe-x, 0px), var(--loupe-y, 0px), 0) translate(-50%, -50%);
  z-index: 40;

  cursor: grab;
  touch-action: none;
  -webkit-tap-highlight-color: transparent;



  visibility: hidden;
}

.loupe.is-placed,
.loupe-zoom.is-placed {
  visibility: visible;
}

.loupe.is-held {
  cursor: grabbing;
}



.book.turning ~ .loupe {
  pointer-events: none;
}

.loupe:focus-visible {
  outline: none;
}

.loupe:focus-visible .loupe-ring {
  filter: drop-shadow(0 0 7px var(--brass-light));
}



.loupe-body {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  transform: none;
  transition: transform 380ms cubic-bezier(0.2, 0.7, 0.25, 1);
}





.loupe.at-rest .loupe-body {
  transform: scaleY(0.86) rotate(-133deg) scale(0.78);
}



.loupe.at-rest.in-cradle .loupe-body {
  transform: rotate(-45deg) scale(var(--loupe-stowed));
}



.loupe-shade {
  position: absolute;
  inset: -6% -6% -10% -6%;
  border-radius: 50%;
  background: radial-gradient(circle at 52% 56%, rgba(18, 12, 4, 0.5) 42%, transparent 68%);
  filter: blur(7px);
  transform: translate(4px, 8px);
}

.loupe canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  display: block;
}



.loupe.at-rest .loupe-glass {
  background-color: rgba(176, 190, 164, 0.72);
  box-shadow:
    inset 0 0 30px -6px rgba(58, 64, 44, 0.55),
    inset 0 0 0 1px rgba(255, 250, 232, 0.35);
}


.loupe-glass {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background:
    radial-gradient(circle at 30% 24%, rgba(255, 255, 255, 0.46) 0%, rgba(255, 255, 255, 0.09) 24%, transparent 44%),
    radial-gradient(circle at 70% 80%, rgba(74, 58, 30, 0.16) 0%, transparent 54%);
  box-shadow:
    inset 0 0 26px -8px rgba(64, 48, 24, 0.46),
    inset 0 0 0 1px rgba(255, 248, 228, 0.24);
}


.loupe-frame {
  position: absolute;
  left: 50%;
  top: 50%;
  width: calc(var(--lens) * 1.76);
  height: calc(var(--lens) * 1.76);
  transform: translate(-50%, -50%);
  overflow: visible;
}

.loupe-ring {
  fill: none;
  stroke: url(#brass);
  stroke-width: 15;
  filter: drop-shadow(0 10px 14px rgba(0, 0, 0, 0.55));
}

.loupe-ring-inner {
  fill: none;
  stroke: rgba(40, 30, 14, 0.5);
  stroke-width: 1.6;
}

.knurl line {
  stroke: rgba(52, 38, 16, 0.5);
  stroke-width: 1.4;
}

/* ---------- the reach of the glass, set on the glass ---------- */



.loupe-zoom {
  position: absolute;
  top: 0;
  left: 0;

  visibility: hidden;
  transform: translate3d(var(--loupe-x, 0px), var(--loupe-y, 0px), 0)
    translate(-50%, calc(-50% - var(--lens) * 0.5 - 0.15rem));
  z-index: 42;
  display: flex;
  align-items: stretch;
  border-radius: 999px;
  background: linear-gradient(180deg, #f0dcae 0%, var(--brass) 46%, #7a5f2d 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 250, 232, 0.7),
    inset 0 -1px 0 rgba(48, 34, 12, 0.45),
    0 3px 8px -2px rgba(0, 0, 0, 0.7);


  opacity: 0;
  pointer-events: none;
  transition: opacity 200ms ease;
}

.loupe-zoom.visible {
  opacity: 1;
  pointer-events: auto;
}

.loupe-step {
  font-family: var(--mono);
  font-size: 0.8rem;
  line-height: 1;
  color: #2a2110;
  background: none;
  border: 0;
  padding: 0.24rem 0.52rem;
  cursor: pointer;
  border-radius: 999px;
}

.loupe-step:hover {
  color: #000;
  background: rgba(255, 250, 232, 0.35);
}

.loupe-step:focus-visible {
  outline: 2px solid var(--paper);
  outline-offset: 1px;
}

.loupe-level {
  display: grid;
  place-items: center;
  min-width: 2.4rem;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
  color: #2a2110;
  border-inline: 1px solid rgba(74, 56, 22, 0.32);
}




/* ---------- pager ---------- */

.pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
  margin-top: 0.95rem;
}

.turn {
  display: grid;
  place-items: center;
  width: 2.4rem;
  height: 2.1rem;
  color: #cdc5b4;
  background: linear-gradient(#232028, #16151a);
  border: 1px solid rgba(198, 170, 120, 0.28);
  border-radius: 4px;
  cursor: pointer;
}

.turn svg {
  width: 1.05rem;
  height: 1.05rem;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.turn:hover:not(:disabled) {
  color: var(--brass-light);
  border-color: rgba(198, 170, 120, 0.55);
}

.turn:disabled {
  opacity: 0.28;
  cursor: default;
}



.pager-count {
  min-width: 3.4rem;
  margin: 0;
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.16em;
  text-align: center;
  color: #e6ddc8;
  font-variant-numeric: tabular-nums;
}


.hint {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  text-align: center;
  margin: 1.15rem 0 0;
  font-size: 0.86rem;
  color: #cfc6b6;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.85);
}

.hint-hand {
  flex: 0 0 auto;
  width: 1.15rem;
  height: 1.15rem;
  fill: none;
  stroke: #e2b86f;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}



.story-mobile {
  display: none;
}

/* ---------- collected bookplates in the margins ---------- */

.patron-rail {
  --patron-edge: clamp(1.65rem, 7vw, 8rem);
  display: none;
}

.patron-rail[hidden] {
  display: none;
}

@media (min-width: 70rem) {
  .desk:has(.book.is-closed) .patron-rail:not([hidden]) {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    transform: translateY(calc(-50% - 1.6rem));
    z-index: 8;
    display: block;
    height: var(--page-h);
    pointer-events: none;
  }

  .patron-rail-title {
    position: absolute;
    left: var(--patron-edge);
    top: 0;
    width: clamp(13.5rem, 18vw, 18rem);
    margin: 0;
    font-family: var(--mono);
    font-size: 0.56rem;
    letter-spacing: 0.24em;
    text-align: center;
    text-transform: uppercase;
    color: rgba(226, 184, 111, 0.72);
  }

  .patron-rail-title::after {
    content: "\25c7";
    display: block;
    width: 5.5rem;
    margin: 0.45rem auto 0;
    overflow: visible;
    border-top: 1px solid rgba(206, 170, 104, 0.24);
    color: rgba(226, 184, 111, 0.7);
    font-size: 0.46rem;
    line-height: 0;
  }

  .patron-rail-title-right {
    right: var(--patron-edge);
    left: auto;
    display: none;
  }

  .patron-rail.has-right-column .patron-rail-title-right {
    display: block;
  }

  .patron-list {
    position: absolute;
    inset: 0;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  .patron-list::before,
  .patron-list::after {
    content: "";
    position: absolute;
    top: calc(12% + 2.375rem);
    left: calc(var(--patron-edge) - 0.73rem);
    width: 1px;
    height: max(0.38rem, var(--patron-left-span, 0%));
    background: linear-gradient(
      180deg,
      transparent,
      rgba(226, 184, 111, 0.42) 8%,
      rgba(226, 184, 111, 0.24) 92%,
      transparent
    );
    transform: translateY(-0.19rem);
  }

  .patron-list::after {
    right: calc(var(--patron-edge) - 0.73rem);
    left: auto;
    display: none;
    height: max(0.38rem, var(--patron-right-span, 0%));
  }

  .patron-rail.has-right-column .patron-list::after {
    display: block;
  }

  .patron-item {
    position: absolute;
    width: clamp(13.5rem, 18vw, 18rem);
    pointer-events: auto;
  }

  .patron-item:nth-child(odd) {
    left: var(--patron-edge);
  }

  .patron-item:nth-child(even) {
    right: var(--patron-edge);
  }

  .patron-item:nth-child(1),
  .patron-item:nth-child(2) {
    top: 12%;
  }

  .patron-item:nth-child(3),
  .patron-item:nth-child(4) {
    top: 29%;
  }

  .patron-item:nth-child(5),
  .patron-item:nth-child(6) {
    top: 46%;
  }

  .patron-item:nth-child(7),
  .patron-item:nth-child(8) {
    top: 63%;
  }

  .patron-item:nth-child(9),
  .patron-item:nth-child(10) {
    top: 80%;
  }

  .patron-item::before {
    content: "";
    position: absolute;
    top: 50%;
    left: -1.04rem;
    z-index: 2;
    width: 0.38rem;
    height: 0.38rem;
    border: 1px solid rgba(255, 218, 143, 0.75);
    border-radius: 50%;
    background: #f0c36e;
    box-shadow: 0 0 0.7rem rgba(240, 195, 110, 0.74);
    transform: translateY(-50%);
  }

  .patron-item:nth-child(even)::before {
    right: -1.04rem;
    left: auto;
  }

  .patron-card {
    position: relative;
    display: grid;
    grid-template-columns: 3rem minmax(0, 1fr) auto;
    grid-template-rows: auto 1fr;
    column-gap: 0.7rem;
    row-gap: 0.15rem;
    align-items: center;
    width: 100%;
    min-height: 4.75rem;
    padding: 0.62rem 0.68rem;
    overflow: hidden;
    border: 1px solid rgba(206, 170, 104, 0.28);
    border-radius: 3px;
    background-color: rgba(52, 35, 27, 0.92);
    background-image:
      linear-gradient(145deg, rgba(255, 226, 188, 0.07), transparent 48%),
      linear-gradient(180deg, rgba(37, 18, 10, 0.18), rgba(18, 8, 4, 0.58)),
      var(--leather-texture);
    background-size: auto, auto, cover;
    background-blend-mode: screen, multiply, normal;
    box-shadow:
      0 16px 28px -18px rgba(0, 0, 0, 0.98),
      inset 0 0 0 2px rgba(16, 7, 3, 0.28),
      inset 0 1px 0 rgba(255, 232, 200, 0.1);
    color: rgba(240, 226, 205, 0.76);
    text-align: left;
    transition: border-color 180ms ease, transform 180ms ease, filter 180ms ease;
  }

  .patron-card::after {
    content: "";
    position: absolute;
    inset: 4px;
    border: 1px solid rgba(206, 170, 104, 0.14);
    pointer-events: none;
  }

  .patron-card:hover {
    border-color: rgba(226, 184, 111, 0.64);
    filter: brightness(1.08);
    transform: translateY(-2px);
  }

  .patron-avatar {
    position: relative;
    grid-row: 1 / 3;
    display: grid;
    place-items: center;
    width: 2.75rem;
    height: 2.75rem;
    border: 1px solid rgba(226, 184, 111, 0.64);
    border-radius: 50%;
    box-shadow:
      0 0 0 4px rgba(17, 10, 7, 0.48),
      0 0 0 5px rgba(206, 170, 104, 0.14);
    color: #e1b66f;
    font-family: var(--serif);
    font-size: 1.32rem;
    line-height: 1;
  }

  .patron-avatar img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border-radius: inherit;
    object-fit: contain;
    background: rgba(240, 226, 205, 0.88);
  }

  .patron-copy {
    grid-row: 1 / 3;
    display: flex;
    min-width: 0;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
  }

  .patron-holder {
    color: #e2b875;
    font-family: var(--serif);
    font-size: 0.9rem;
    font-weight: 500;
    line-height: 1.08;
    text-decoration: none;
    overflow-wrap: anywhere;
  }

  a.patron-holder:hover {
    color: #f5dcae;
    text-decoration: underline;
    text-underline-offset: 3px;
  }

  a.patron-holder:focus-visible,
  .patron-open:focus-visible {
    outline: 2px solid var(--brass-light);
    outline-offset: 3px;
  }

  .patron-monument {
    margin-top: 0.24rem;
    overflow-wrap: anywhere;
    font-family: var(--serif);
    font-size: 0.74rem;
    font-style: italic;
    line-height: 1.15;
    color: rgba(240, 226, 205, 0.76);
  }

  .patron-meta,
  .patron-date {
    font-family: var(--mono);
    text-transform: uppercase;
  }

  .patron-meta {
    margin-top: 0.28rem;
    font-size: 0.46rem;
    letter-spacing: 0.09em;
    line-height: 1.25;
    color: rgba(226, 184, 111, 0.68);
  }

  .patron-date {
    grid-column: 3;
    grid-row: 1;
    align-self: start;
    white-space: nowrap;
    color: rgba(226, 184, 111, 0.62);
    font-size: 0.42rem;
    letter-spacing: 0.08em;
  }

  .patron-open {
    grid-column: 3;
    grid-row: 2;
    align-self: end;
    justify-self: end;
    z-index: 1;
    display: grid;
    place-items: center;
    width: 1.45rem;
    height: 1.45rem;
    padding: 0 0 0.12rem;
    border: 1px solid rgba(226, 184, 111, 0.28);
    border-radius: 2px;
    background: rgba(17, 10, 7, 0.42);
    color: #ddb572;
    font-family: var(--serif);
    font-size: 1.08rem;
    line-height: 1;
    cursor: pointer;
    transition: border-color 160ms ease, color 160ms ease, background-color 160ms ease;
  }

  .patron-open:hover {
    border-color: rgba(226, 184, 111, 0.66);
    background: rgba(91, 56, 31, 0.64);
    color: #f5dcae;
  }
}

@media (min-width: 112rem) {
  .desk:has(.book.is-closed) .patron-rail:not([hidden]) {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    transform: translateY(calc(-50% - 1.6rem));
    z-index: 8;
    display: block;
    height: var(--page-h);
    pointer-events: none;
  }
}

/* ---------- narrower ---------- */



@media (max-width: 64rem) {
  :root {
    --page-w: min(90vw, 25rem);


    --page-h: min(104vw, 31rem);
    --edge: 10px;
    --lens: 168px;
  }

  .book {
    width: var(--page-w);
  }

  .book.is-closed,
  .book.is-closed.is-cover-staged,
  .book.is-closed.is-cover-staged:has(.cover.is-back) {
    transform: none;
  }

  .cover.is-opening {
    transform: translateX(-50%) perspective(2200px) rotateY(-176deg);
    animation-name: cover-open-front-narrow, cover-open-layer;
  }

  .cover.is-back.is-opening {
    transform: translateX(-50%) perspective(2200px) rotateY(176deg);
    animation-name: cover-open-back-narrow, cover-open-layer;
  }

  .cover.is-opening.is-from-drag {
    animation-name: cover-open-front-narrow-drag;
  }

  .cover.is-back.is-opening.is-from-drag {
    animation-name: cover-open-back-narrow-drag;
  }

  .cover.is-closing {
    animation-name: cover-close-front-narrow, cover-close-layer;
  }

  .cover.is-back.is-closing {
    animation-name: cover-close-back-narrow, cover-close-layer;
  }


  .monument-plate {
    inset: 0.6rem 1rem 0.7rem 0.5rem;
    gap: 0.35rem;
  }

  .leaf-edge {
    width: 0.85rem;
  }

  .plate-head {
    font-size: 0.56rem;
    letter-spacing: 0.2em;
  }

  .plate-owner {
    min-height: 7rem;
    gap: 0.2rem;
  }



  .owner-seal {
    width: 4.8rem;
    height: 4.8rem;
  }

  .stage {
    padding-bottom: 6rem;
  }



  .book.is-closed {
    width: var(--page-w);
  }






  .cover-inner {
    padding: 1.5rem 1.5rem 1.5rem 3.1rem;
  }

  .cover-back .cover-inner {
    padding: 1.5rem 3.1rem 1.5rem 1.5rem;
  }

  .cover-crest {
    display: none;
  }

  .cover-front .cover-lead {
    display: none;
  }

  .cover-title {
    font-size: 1.6rem;
  }

  .cover-title-thanks {
    font-size: 1.95rem;
  }

  .cover-sub {
    margin-top: 0.32rem;
    font-size: 0.82rem;
  }

  .cover-rule {
    margin: 0.52rem 0;
  }

  .cover-lead {
    font-size: 0.81rem;
    line-height: 1.38;
  }

  .cover-own-key {
    margin: 0.5rem 0 0.42rem;
  }

  .cover-steps {
    gap: 0.3rem;
  }

  .cover-step-note {
    font-size: 0.77rem;
    line-height: 1.26;
  }

  .cover-open {
    margin-top: 0.62rem;
    padding: 0.52rem 1.1rem;
    font-size: 0.58rem;
  }



  .cover-corner {
    width: 0.56rem;
    height: 0.56rem;
  }

  .page-verso,
  .gutter,
  .tab,
  .leaf-back,


  .cradle,
  .cradle-clip {
    display: none;
  }

  .leaf {
    left: 0;
  }

  .book {
    margin-right: 0;
  }

  .board {
    left: -16px;
    right: -16px;
    top: -12px;
    bottom: -12px;
  }

  .story-mobile {
    display: block;
    max-width: var(--page-w);
    margin: 1.4rem auto 0;
    position: relative;
    border-radius: 3px;
    background-color: var(--paper);
    background-image: var(--fibre), var(--grain);
    background-blend-mode: multiply, multiply;
    color: var(--ink);
    box-shadow: 0 22px 40px -20px rgba(0, 0, 0, 0.8);
  }



  .story-mobile .story {
    position: static;
    inset: auto;
    padding: 1.9rem 1.6rem 1.5rem;
  }

  .story-mobile .story-spec {
    margin: 0 0 1.1rem;
  }

  .story-mobile .provenance {
    max-height: none;
  }

}

@media (max-width: 40rem) {
  :root {
    --page-h: min(140vw, 34rem);
  }

  .chrome {
    min-height: 0;
    padding: 0.62rem 0.8rem 0.68rem;
    flex-wrap: wrap;
    gap: 0.25rem 0.65rem;
  }

  .chrome::before {
    inset: 0.28rem 0.36rem;
  }

  .wordmark {
    font-size: 1.42rem;
  }

  .wordmark-glyph {
    width: 0.95rem;
    height: 0.95rem;
  }

  .chrome-book {
    order: 3;
    flex: 1 0 100%;
    gap: 0;
    padding: 0.38rem 0 0;
    border-top: 1px solid rgba(206, 170, 104, 0.2);
    border-left: 0;
  }

  .chrome-title {
    font-size: 0.56rem;
  }

  .chrome-note {
    display: none;
  }

  .chrome-count {
    margin-left: auto;
    font-size: 0.62rem;
  }

  .to-contents {
    padding: 0.38rem 0.55rem;
    font-size: 0.56rem;
  }

  .stamp {
    position: static;
    margin: 0.6rem 0 0 auto;
    display: block;
  }
}



@media (max-width: 23rem) {
  .cover-own-key {
    display: none;
  }



  .cover-front .cover-sub {
    display: none;
  }



  .cover-front .cover-kicker,
  .cover-front .cover-rule {
    display: none;
  }



  .cover-front .cover-title {
    margin-top: 0;
  }

  .cover-title {
    font-size: 1.42rem;
  }

  .cover-title-thanks {
    font-size: 1.72rem;
  }

  .cover-sub {
    font-size: 0.78rem;
  }

  .cover-lead {
    font-size: 0.79rem;
    line-height: 1.26;
  }

  .cover-lead-offer {
    margin-top: 0.42rem;
  }

  .cover-steps {
    max-width: none;
  }

  .cover-step-note {
    font-size: 0.75rem;
  }

  .cover-front .cover-open {
    margin-top: 0.42rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .leaf,
  .loupe-body,
  .monument-image,
  .contents,
  .contents-sheet,
  .stamp,
  .edges,
  .board,
  .tab-left,
  .tab-right,
  .cover,
  .book {
    transition: none;
  }

  .cover.is-opening,
  .cover.is-closing {
    animation: none;
  }

  .book.is-cover-turning {
    transition: none;
  }

  .patron-item {
    animation: none;
  }

  .book:not(.is-closed):has(.cover.is-opening) .spread,
  .book:not(.is-closed):has(.cover.is-opening) .tab,
  .book:not(.is-closed):has(.cover.is-opening) .cradle,
  .book:not(.is-closed):has(.cover.is-opening) .cradle-clip,
  .book:not(.is-closed):has(.cover.is-opening) ~ .loupe.is-placed {
    animation: none;
  }



}

/* ---------- opening the diary ---------- */




.opening {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.15rem;
  background:
    radial-gradient(70% 50% at 50% 42%, rgba(120, 104, 78, 0.22) 0%, transparent 72%),
    radial-gradient(150% 100% at 50% 0%, #221e24 0%, var(--room) 38%, var(--room-deep) 100%);
}



html:not(.is-loading) .opening {
  opacity: 0;
  visibility: hidden;
  transition: opacity 460ms ease, visibility 0s linear 460ms;
  pointer-events: none;
}



.opening-mark,
.opening-line,
.opening-rule {
  opacity: 0;
  animation: opening-arrive 260ms ease 200ms forwards;
}

@keyframes opening-arrive {
  to {
    opacity: 1;
  }
}



.opening.is-stalled .opening-mark,
.opening.is-stalled .opening-line,
.opening.is-stalled .opening-rule {
  animation: none;
  opacity: 1;
}


.opening-mark {
  position: relative;
  width: 54px;
  height: 54px;
}

.opening-ring {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  border: 2px solid transparent;
  background:
    linear-gradient(var(--room), var(--room)) padding-box,
    conic-gradient(from 0deg, var(--brass-dim), var(--brass-light), var(--brass), var(--brass-dim)) border-box;
  opacity: 0.9;
}



.opening-shine {
  position: absolute;
  inset: -1px;
  border-radius: 50%;
  background: conic-gradient(
    from 0deg,
    transparent 0deg,
    rgba(246, 228, 189, 0.85) 26deg,
    transparent 62deg
  );
  mask-image: radial-gradient(closest-side, transparent 74%, #000 78%, #000 100%);
  -webkit-mask-image: radial-gradient(closest-side, transparent 74%, #000 78%, #000 100%);
  animation: opening-turn 1500ms linear infinite;
}

@keyframes opening-turn {
  to {
    transform: rotate(1turn);
  }
}

.opening-line {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-faint);
}



.opening-rule {
  width: 148px;
  height: 1px;
  overflow: hidden;
  background: rgba(200, 189, 163, 0.16);
}

.opening-rule span {
  display: block;
  width: 40%;
  height: 100%;
  background: linear-gradient(90deg, transparent, var(--brass), transparent);
  animation: opening-sweep 1500ms ease-in-out infinite;
}

@keyframes opening-sweep {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(350%);
  }
}



.opening.is-stalled .opening-shine,
.opening.is-stalled .opening-rule span {
  animation: none;
}

.opening.is-stalled .opening-line {
  color: var(--warn);
}

@media (prefers-reduced-motion: reduce) {
  .opening-shine,
  .opening-rule span {
    animation: none;
  }



  .opening-rule span {
    width: 100%;
    background: linear-gradient(90deg, transparent, var(--brass-dim), transparent);
  }
}

/* ---------- realistic cover ---------- */

.book.is-closed .board {
  inset: -13px;
  border: 1px solid rgba(88, 49, 25, 0.72);
  border-radius: 8px 12px 12px 8px;
  background:
    radial-gradient(120% 90% at 42% 4%, rgba(157, 103, 73, 0.12), transparent 54%),
    linear-gradient(90deg, rgba(7, 3, 2, 0.82) 0%, rgba(27, 13, 9, 0.25) 12%, rgba(18, 8, 6, 0.4) 76%, rgba(6, 2, 2, 0.88) 100%),
    var(--leather-texture);
  background-size: auto, auto, cover;
  background-position: center;
  background-blend-mode: screen, multiply, normal;
  box-shadow:
    0 56px 82px -35px rgba(0, 0, 0, 0.98),
    0 20px 34px -20px rgba(0, 0, 0, 0.95),
    0 3px 4px rgba(0, 0, 0, 0.9),
    inset 0 1px 0 rgba(220, 174, 111, 0.12),
    inset 0 0 0 2px rgba(0, 0, 0, 0.4);
}

.book.is-closed .board::before {
  border-radius: inherit;
  background-image: var(--grain);
  background-size: 145px 145px;
  opacity: 0.14;
  mix-blend-mode: overlay;
}

.book.is-closed .edges-right {
  right: -16px;
  width: 19px;
  border-radius: 0 6px 6px 0;
  background-image:
    linear-gradient(90deg, rgba(28, 15, 8, 0.72), transparent 25%, rgba(28, 15, 8, 0.4)),
    repeating-linear-gradient(90deg, #9b8055 0 1px, #5c452b 1px 2px, #b09a70 2px 3px, #6d5434 3px 4px);
  box-shadow:
    inset 5px 0 8px -5px rgba(0, 0, 0, 0.8),
    4px 8px 14px -8px rgba(0, 0, 0, 0.9);
}

.cover-face {
  border: 1px solid rgba(23, 10, 7, 0.96);
  border-radius: 6px 11px 11px 6px;
  background-color: #26130f;
  background-image:
    radial-gradient(130% 92% at 42% 1%, rgba(168, 111, 78, 0.11), transparent 54%),
    radial-gradient(70% 58% at 17% 45%, rgba(115, 69, 50, 0.09), transparent 68%),
    radial-gradient(82% 72% at 90% 88%, rgba(0, 0, 0, 0.46), transparent 72%),
    linear-gradient(145deg, rgba(65, 35, 25, 0.08) 0%, rgba(31, 15, 11, 0.14) 42%, rgba(10, 4, 3, 0.44) 100%),
    var(--leather-texture);
  background-size: auto, auto, auto, auto, cover;
  background-position: center;
  background-repeat: no-repeat;
  background-blend-mode: screen, soft-light, multiply, multiply, normal;
  color: #d9b16f;
  box-shadow:
    inset -24px 0 42px -28px rgba(0, 0, 0, 0.92),
    inset 0 2px 1px rgba(233, 185, 119, 0.1),
    inset 0 -22px 30px -24px rgba(0, 0, 0, 0.74),
    2px 4px 5px rgba(0, 0, 0, 0.72),
    0 32px 60px -28px rgba(0, 0, 0, 0.94);
}

.cover-face::after {
  opacity: 0.12;
  mix-blend-mode: overlay;
  background-image: var(--grain);
  background-size: 125px 125px;
  filter: contrast(1.18);
}

.cover-front::before,
.cover-back::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: inherit;
  pointer-events: none;
  background:
    linear-gradient(90deg, rgba(255, 218, 177, 0.055), transparent 11%, transparent 86%, rgba(0, 0, 0, 0.24)),
    radial-gradient(120% 38% at 48% -8%, rgba(255, 219, 180, 0.065), transparent 70%);
  box-shadow: inset 0 0 36px rgba(0, 0, 0, 0.24);
}

.cover-spine {
  width: 3.15rem;
  border-right: 1px solid rgba(18, 8, 4, 0.88);
  border-radius: 6px 42% 42% 6px / 5px 2.5% 2.5% 5px;
  background-image:
    repeating-linear-gradient(
      180deg,
      transparent 0 9.4%,
      rgba(226, 171, 101, 0.12) 9.5% 10.2%,
      rgba(92, 48, 25, 0.62) 10.3% 11.2%,
      rgba(15, 7, 4, 0.75) 11.3% 12.3%,
      rgba(190, 127, 72, 0.11) 12.4% 13.1%,
      transparent 13.2% 20%
    ),
    linear-gradient(90deg, rgba(9, 3, 2, 0.88) 0%, rgba(39, 19, 13, 0.6) 14%, rgba(131, 84, 57, 0.18) 46%, rgba(171, 112, 76, 0.2) 60%, rgba(38, 17, 12, 0.58) 84%, rgba(8, 3, 2, 0.9) 100%),
    var(--leather-texture);
  background-size: auto, auto, auto 100%;
  background-position: center, center, center;
  background-blend-mode: normal, multiply, normal;
  box-shadow:
    inset 7px 0 10px -8px rgba(255, 204, 139, 0.28),
    inset -8px 0 10px -8px rgba(0, 0, 0, 0.95),
    3px 0 8px rgba(0, 0, 0, 0.58);
}

.cover-spine::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: repeating-linear-gradient(
    180deg,
    transparent 0 9.5%,
    rgba(235, 182, 105, 0.13) 9.6% 10.1%,
    transparent 10.2% 12.5%,
    rgba(8, 3, 2, 0.4) 12.6% 13%,
    transparent 13.1% 20%
  );
  filter: drop-shadow(0 2px 1px rgba(0, 0, 0, 0.7));
}

.cover-back .cover-spine {
  width: 3.15rem;
}

.cover-frame {
  inset: 1.5rem 1.55rem 1.5rem 4rem;
  border-color: rgba(202, 151, 76, 0.62);
  border-radius: 1px;
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
}

.cover-frame::before {
  inset: 6px;
  border-color: rgba(190, 137, 66, 0.34);
}

.cover-corner {
  width: 2.35rem;
  height: 2.35rem;
  z-index: 2;
}

.cover-corner svg {
  stroke: #c99346;
  stroke-width: 1.35;
  opacity: 0.84;
  filter: drop-shadow(0 1px 0 rgba(12, 5, 2, 0.9));
}

.cover-corner-tl { top: 1.5rem; left: 4rem; transform: translate(-1px, -1px); }
.cover-corner-tr { top: 1.5rem; right: 1.55rem; transform: translate(1px, -1px) rotate(90deg); }
.cover-corner-br { right: 1.55rem; bottom: 1.5rem; transform: translate(1px, 1px) rotate(180deg); }
.cover-corner-bl { bottom: 1.5rem; left: 4rem; transform: translate(-1px, 1px) rotate(270deg); }

.cover-inner,
.cover-front .cover-inner {
  justify-content: flex-start;
  padding: 3.35rem 2.8rem 2.75rem 5.2rem;
  overflow: hidden;
}

.cover-kicker {
  margin-top: 0;
  font-size: 0.56rem;
  font-weight: 600;
  letter-spacing: 0.34em;
  color: rgba(211, 161, 86, 0.8);
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.8);
}

.cover-crest {
  width: 3.6rem;
  height: 3.6rem;
  margin: 1.05rem 0 0.55rem;
  filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.72));
}

.cover-crest svg {
  stroke: #bd853c;
  stroke-width: 1.75;
}

.cover-title {
  max-width: 18rem;
  margin: 0.2rem 0 0;
  font-size: 2.55rem;
  font-weight: 500;
  line-height: 1.02;
  letter-spacing: 0.006em;
  color: #d5a65d;
  text-shadow: 0 1px 0 #100704, 0 -1px 0 rgba(242, 200, 129, 0.12), 0 2px 8px rgba(0, 0, 0, 0.35);
}

.cover-sub {
  max-width: 16rem;
  margin: 1rem 0 0;
  font-size: 1.13rem;
  line-height: 1.35;
  color: rgba(215, 171, 102, 0.9);
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.72);
}

.cover-rule {
  width: 52%;
  margin: 1.5rem 0 0.72rem;
}

.cover-rule::before { background: linear-gradient(90deg, transparent, rgba(190, 135, 62, 0.64)); }
.cover-rule::after { background: linear-gradient(90deg, rgba(190, 135, 62, 0.64), transparent); }

.cover-rule span {
  width: 0.35rem;
  height: 0.35rem;
  border-color: rgba(212, 157, 77, 0.88);
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.7);
}

.cover-edition {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.67rem;
  font-weight: 600;
  letter-spacing: 0.23em;
  text-transform: uppercase;
  color: rgba(211, 155, 72, 0.9);
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.78);
}

.cover-rule-lower { margin: 0.72rem 0 0; }

.cover-medallion {
  display: block;
  width: 4.5rem;
  height: 4.5rem;
  margin: 1.55rem 0 0;
  color: #bd873f;
  filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.8));
}

.cover-medallion svg {
  width: 100%;
  height: 100%;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.cover-medallion-wreath,
.cover-medallion-leaves { opacity: 0.78; }
.cover-medallion-building { stroke-width: 2; }

.cover-open {
  position: relative;
  min-width: 9.75rem;
  margin: 0.8rem 0 0;
  padding: 0.65rem 0.85rem;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: #c89148;
  font-size: 0.61rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  box-shadow: none;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.78);
}

.cover-open::before,
.cover-open::after {
  content: "";
  position: absolute;
  left: 18%;
  right: 18%;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(195, 139, 63, 0.64), transparent);
}

.cover-open::before { top: 0; }
.cover-open::after { bottom: 0; }

.cover-open:hover {
  color: #e0b56f;
  filter: none;
  box-shadow: none;
}

.cover-open:focus-visible {
  outline: 2px solid rgba(218, 170, 91, 0.85);
  outline-offset: 3px;
}

.cover-open-arrow { display: none; }

.cover-back .cover-inner { padding: 3.35rem 5.2rem 2.75rem 2.8rem; }
.cover-back .cover-frame { inset: 1.5rem 4rem 1.5rem 1.55rem; }
.cover-back .cover-corner-tl,
.cover-back .cover-corner-bl { left: 1.55rem; }
.cover-back .cover-corner-tr,
.cover-back .cover-corner-br { right: 4rem; }

@media (max-width: 64rem) {
  .cover-inner,
  .cover-front .cover-inner { padding: 2.25rem 2rem 2rem 4.2rem; }
  .cover-back .cover-inner { padding: 2.25rem 4.2rem 2rem 2rem; }
  .cover-crest { display: block; width: 2.8rem; height: 2.8rem; margin-top: 0.6rem; }
  .cover-title { font-size: 2rem; }
  .cover-sub { margin-top: 0.6rem; font-size: 0.92rem; }
  .cover-rule { margin-top: 0.8rem; }
  .cover-medallion { width: 3.4rem; height: 3.4rem; margin-top: 0.7rem; }
  .cover-open { margin-top: 0.45rem; }
}

@media (max-width: 40rem) {
  .cover-spine { width: 2.65rem; }
  .cover-frame { left: 3.45rem; }
  .cover-corner-tl,
  .cover-corner-bl { left: 3.45rem; }
  .cover-inner,
  .cover-front .cover-inner { padding-left: 4.35rem; }
  .cover-title { font-size: 1.72rem; }
  .cover-kicker { font-size: 0.48rem; }
  .cover-medallion { width: 3rem; height: 3rem; }
}

/* ---------- cookie consent banner ---------- */

.cookie-banner {
  position: fixed;
  bottom: 1.5rem;
  right: 1.5rem;
  z-index: 100;
  max-width: min(28rem, calc(100vw - 2rem));
  background-color: #2b1c12;
  background-image:
    radial-gradient(120% 180% at 20% 0%, rgba(255, 226, 188, 0.14), transparent 60%),
    linear-gradient(180deg, rgba(46, 26, 15, 0.4), rgba(28, 14, 8, 0.8)),
    var(--leather-texture);
  background-size: auto, auto, cover;
  background-position: center;
  background-blend-mode: screen, multiply, normal;
  border: 1px solid rgba(206, 170, 104, 0.42);
  border-radius: 6px;
  box-shadow:
    0 16px 36px -8px rgba(0, 0, 0, 0.85),
    0 4px 12px rgba(0, 0, 0, 0.5),
    inset 0 1px 0 rgba(255, 232, 200, 0.18);
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 280ms ease, transform 280ms cubic-bezier(0.2, 0.7, 0.25, 1);
  box-sizing: border-box;
}

.cookie-banner[hidden] {
  display: none;
}

.cookie-banner.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.cookie-banner-inner {
  padding: 1.1rem 1.25rem 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
}

.cookie-banner-content {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.cookie-banner-title {
  margin: 0;
  font-family: var(--mono);
  font-size: 0.65rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: #e2b86f;
}

.cookie-banner-desc {
  margin: 0;
  font-family: var(--sans);
  font-size: 0.82rem;
  line-height: 1.45;
  color: #dfd5c4;
}

.cookie-banner-desc a {
  color: #f1d7a4;
  text-decoration: underline;
  text-decoration-color: rgba(226, 184, 111, 0.45);
  text-underline-offset: 2px;
}

.cookie-banner-desc a:hover {
  color: #fff2d4;
  text-decoration-color: #e2b86f;
}

.cookie-banner-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 0.65rem;
  margin-top: 0.2rem;
}

.cookie-btn {
  font-family: var(--mono);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.42rem 0.85rem;
  border-radius: 3px;
  cursor: pointer;
  transition: filter 150ms ease, transform 100ms ease, background-color 150ms ease, border-color 150ms ease;
  user-select: none;
}

.cookie-btn-accept {
  color: #241d10;
  background: linear-gradient(180deg, #ecd7a6 0%, #b89255 55%, #9a7a44 100%);
  border: 1px solid #7d6033;
  box-shadow: inset 0 1px 0 rgba(255, 245, 220, 0.55), 0 2px 4px rgba(0, 0, 0, 0.35);
}

.cookie-btn-accept:hover {
  filter: brightness(1.08);
  transform: translateY(-1px);
}

.cookie-btn-decline {
  color: #d8cdb9;
  background: rgba(30, 18, 10, 0.55);
  border: 1px solid rgba(206, 170, 104, 0.32);
}

.cookie-btn-decline:hover {
  color: #fff;
  border-color: rgba(206, 170, 104, 0.6);
  background: rgba(50, 30, 18, 0.7);
}

@media (max-width: 36rem) {
  .cookie-banner {
    bottom: 0.8rem;
    right: 0.8rem;
    left: 0.8rem;
    max-width: none;
  }
}
