/* ------------------------------------------------------------------
   BlackVertex — The Library.
   Built on case.css (tokens, chrome, reveal). BlackVertex grammar:
   square, ruled, flat-until-activated, depth from linework. Premium
   through whitespace — brief captions, one large asset at a time.
   Colour lives only inside the work screenshots; the frame stays B&W.

   Layout: "Split Canvas" — a locked museum wall. A sticky canvas holds
   one work large while the index is read down; hover, scroll, or focus
   moves the active volume and mask-wipes the canvas to it.
   ------------------------------------------------------------------ */

/* ---------------- White→black on scroll (mirrors the homepage flip) ----
   The shell owns the surface colour via --shell-bg. A scroll trigger adds
   .lib-dark on the <body> as the collection takes over; CSS transitions
   carry the flip, and the intro inverts in the same beat so nothing lands
   dark-on-dark. Reduced motion gets an instant switch (see media query). */
body {
  --shell-bg: var(--paper);
  background-color: var(--shell-bg);
  transition: background-color 720ms var(--ease-out);
}
body.lib-dark { --shell-bg: var(--ink); }
.case-shell {
  background-color: var(--shell-bg);
  transition: background-color 720ms var(--ease-out);
}

/* ---------------- Landing chrome ----------------
   The Library uses the landing page header/footer classes, but keeps the
   styles scoped here to avoid importing the full homepage stylesheet. */
.home-header {
  --header-bg: rgba(248, 247, 242, 0);
  --header-bg-scrolled: rgba(248, 247, 242, 0.82);
  --header-border-scrolled: rgba(13, 13, 11, 0.08);
  --header-fg: var(--ink);
  --brand-logo-filter: none;
  --brand-logo-hover-filter: drop-shadow(0 10px 16px rgba(13, 13, 11, 0.16));
  --portal-bg: var(--ink);
  --portal-fg: var(--paper);
  --portal-hover-bg: var(--paper);
  --portal-hover-fg: var(--ink);
  --portal-outline: var(--ink);
  position: fixed;
  inset: 0 0 auto;
  z-index: 20;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: clamp(16px, 2vw, 30px);
  padding: clamp(14px, 1.7vw, 20px) clamp(20px, 2.4vw, 30px);
  border-bottom: 1px solid transparent;
  background: var(--header-bg);
  color: var(--header-fg);
  transform: translate3d(0, 0, 0);
  transition:
    transform 760ms cubic-bezier(0.19, 1, 0.22, 1),
    background-color 420ms var(--ease-out),
    border-color 420ms var(--ease-out),
    color 420ms var(--ease-out),
    backdrop-filter 420ms var(--ease-out);
  will-change: transform, background-color;
}

body.header-scrolled .home-header {
  border-bottom-color: var(--header-border-scrolled);
  background: var(--header-bg-scrolled);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
}

body.header-theme-dark .home-header,
body.lib-dark .home-header {
  --header-bg: rgba(13, 13, 11, 0);
  --header-bg-scrolled: rgba(13, 13, 11, 0.82);
  --header-border-scrolled: rgba(248, 247, 242, 0.16);
  --header-fg: var(--paper-raised);
  --brand-logo-filter: invert(1) brightness(1.16);
  --brand-logo-hover-filter: invert(1) brightness(1.16) drop-shadow(0 10px 18px rgba(248, 247, 242, 0.18));
  --portal-bg: var(--paper-raised);
  --portal-fg: var(--ink);
  --portal-hover-bg: var(--ink);
  --portal-hover-fg: var(--paper-raised);
  --portal-outline: var(--paper-raised);
}

body.header-hidden .home-header {
  transform: translate3d(0, calc(-100% - 14px), 0);
}

.home-brand,
.home-nav,
.home-menu-toggle {
  opacity: 0;
  transform: translateY(-12px);
}

body.is-loaded .home-brand {
  animation: enter-soft 760ms var(--ease-out) 520ms forwards;
}

body.is-loaded .home-nav {
  animation: enter-soft 760ms var(--ease-out) 820ms forwards;
}

body.is-loaded .home-menu-toggle {
  animation: enter-soft 760ms var(--ease-out) 760ms forwards;
}

.home-brand {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-family: "Geist Mono", monospace;
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}

.home-brand::after {
  content: "";
  position: absolute;
  left: 58px;
  right: 1px;
  bottom: 3px;
  height: 1px;
  background: currentColor;
  opacity: 0.62;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 520ms var(--ease-out);
}

.home-brand img {
  width: 44px;
  height: 44px;
  object-fit: contain;
  filter: var(--brand-logo-filter);
  transform: translate3d(0, 0, 0) rotate(0deg) scale(1);
  transform-origin: 58% 46%;
  transition:
    filter 520ms var(--ease-out),
    transform 520ms var(--ease-out);
  will-change: transform;
}

.home-brand span {
  transform: translate3d(0, 0, 0);
  transition:
    opacity 420ms var(--ease-out),
    transform 520ms var(--ease-out);
}

.home-brand:hover::after,
.home-brand:focus-visible::after {
  transform: scaleX(1);
}

.home-brand:hover img,
.home-brand:focus-visible img {
  filter: var(--brand-logo-hover-filter);
  transform: translate3d(1px, -1px, 0) rotate(-7deg) scale(1.055);
}

.home-brand:hover span,
.home-brand:focus-visible span {
  opacity: 0.86;
  transform: translate3d(3px, 0, 0);
}

.home-nav {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px clamp(18px, 1.8vw, 34px);
  width: auto;
  max-width: min(760px, calc(100vw - 260px));
  font-family: "Geist Mono", monospace;
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.home-nav a {
  position: relative;
  display: inline-flex;
  min-height: 44px;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  white-space: nowrap;
}

.home-nav a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 5px;
  height: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 260ms var(--ease-out);
}

.home-nav a:hover::after,
.home-nav a:focus-visible::after,
.home-nav a[aria-current="page"]::after {
  transform: scaleX(1);
}

.home-nav__portal {
  min-width: 118px;
  padding-inline: 18px;
  background: var(--portal-bg);
  color: var(--portal-fg);
  transition:
    background-color 260ms var(--ease-out),
    color 260ms var(--ease-out),
    transform 260ms var(--ease-out);
}

.home-nav__portal::after {
  display: none;
}

.home-nav__portal:hover,
.home-nav__portal:focus-visible {
  background: var(--portal-hover-bg);
  color: var(--portal-hover-fg);
  outline-color: var(--portal-outline);
  transform: translateY(-1px);
}

.home-menu-toggle {
  display: none;
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--header-fg);
  cursor: pointer;
}

.home-menu-toggle span {
  display: block;
  width: 22px;
  height: 1px;
  background: currentColor;
  transition:
    transform 260ms var(--ease-out),
    opacity 220ms var(--ease-out);
}

.home-menu-toggle span + span {
  margin-top: 7px;
}

body.nav-open .home-menu-toggle span:first-child {
  transform: translateY(4px) rotate(35deg);
}

body.nav-open .home-menu-toggle span:last-child {
  transform: translateY(-4px) rotate(-35deg);
}

/* ---------------- Hero — catalogue frontispiece ----------------
   A title page: a small article over a giant cover word and a short
   deck on the left; a shelf of book spines drawn in linework on the
   right. Motion reuses the site's load sequence: the title masks up,
   the shelf draws and the volumes rise. Everything inverts with the
   white -> black shell flip. */
.lib-hero {
  width: var(--site-wide);
  margin: 0 auto;
  min-height: 100svh;
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.85fr);
  align-items: center;
  gap: clamp(40px, 6vw, 110px);
  padding: clamp(116px, 13vw, 190px) 0 clamp(64px, 8vw, 120px);
  max-width: none;
  box-sizing: border-box;
}

.lib-hero__lead { align-self: center; }

/* title lockup */
.lib-hero__title {
  margin: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.lib-hero__mask { display: block; overflow: hidden; }
.lib-hero__mask > span { display: inline-block; transform: translateY(116%); will-change: transform; }
body.is-loaded .lib-hero__the-mask > span { animation: lib-rise 880ms var(--ease-out) 140ms forwards; }
body.is-loaded .lib-hero__word-mask > span { animation: lib-rise 1060ms var(--ease-out) 240ms forwards; }

.lib-hero__the {
  font-size: clamp(15px, 1.45vw, 22px);
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--muted);
  transition: color 720ms var(--ease-out);
}

.lib-hero__word-mask { padding-bottom: 0.12em; margin-top: clamp(6px, 0.8vw, 14px); }
.lib-hero__word {
  font-size: clamp(72px, 11.5vw, 158px);
  font-weight: 800;
  line-height: 0.88;
  letter-spacing: -0.058em;
  color: var(--ink);
  transition: color 720ms var(--ease-out);
}
.lib-hero__dot { color: var(--muted); transition: color 720ms var(--ease-out); }

.lib-hero__deck {
  max-width: 34ch;
  margin: clamp(32px, 4vw, 56px) 0 0;
  font-size: clamp(17px, 1.35vw, 21px);
  font-weight: 500;
  line-height: 1.5;
  color: var(--muted);
  text-wrap: pretty;
  opacity: 0;
  transition: color 720ms var(--ease-out);
}
body.is-loaded .lib-hero__deck { animation: lib-soft 820ms var(--ease-out) 600ms forwards; }

/* the shelf */
.lib-hero__art {
  align-self: center;
  justify-self: end;
  width: 100%;
  max-width: 460px;
  color: var(--ink);
  transition: color 720ms var(--ease-out);
}
.lib-hero__art svg { display: block; width: 100%; height: auto; overflow: visible; }
.lib-hero__art rect,
.lib-hero__art line { transition: fill 720ms var(--ease-out), stroke 720ms var(--ease-out); }

.lib-shelf__line {
  transform-box: fill-box;
  transform-origin: left center;
  transform: scaleX(0);
}
body.is-loaded .lib-shelf__line { animation: lib-rule 900ms var(--ease-out) 360ms forwards; }

.lib-shelf__spine {
  transform-box: fill-box;
  transform-origin: bottom;
  transform: scaleY(0);
}
body.is-loaded .lib-shelf__spine { animation: lib-rise-y 760ms var(--ease-out) forwards; }
/* spine title band: always the opposite colour of the spine, so it
   stays legible through the white -> black flip */
.lib-shelf__band { fill: var(--shell-bg); transition: fill 720ms var(--ease-out); }

/* the frontispiece inverts with the shell */
body.lib-dark .lib-hero__the,
body.lib-dark .lib-hero__dot,
body.lib-dark .lib-hero__deck { color: var(--muted-dark); }
body.lib-dark .lib-hero__word { color: var(--paper-raised); }
body.lib-dark .lib-hero__art { color: var(--paper-raised); }

@keyframes lib-rise { to { transform: translateY(0); } }
@keyframes lib-rule { to { transform: scaleX(1); } }
@keyframes lib-rise-y { to { transform: scaleY(1); } }
@keyframes lib-soft { to { opacity: 1; } }

/* ---------------- Split — dark gallery: scrollable index + fixed canvas ---
   Full-bleed ink band. The warm-paper intro flows into it, so scrolling
   reads as the gallery dimming its lights. The index column is tall and
   scrolls; the canvas stays fixed beside it (staggered layout). */
.lib-split {
  width: 100%;
  margin: 0;
  background-color: var(--shell-bg);
  color: var(--paper-raised);
  transition: background-color 720ms var(--ease-out);
}

.lib-split__inner {
  width: var(--site-wide);
  margin: 0 auto;
  padding: clamp(72px, 9vw, 150px) 0 clamp(96px, 12vw, 200px);
  display: grid;
  grid-template-columns: 0.92fr 1.45fr;
  gap: clamp(40px, 6vw, 120px);
  align-items: start;
}

.lib-split__head {
  margin: 0 0 clamp(20px, 2.2vw, 34px);
  font-family: "Geist Mono", monospace;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--muted-dark);
}

/* index column — tall rows so it scrolls past the fixed canvas -- */
.lib-index { display: flex; flex-direction: column; }

.lib-index__item {
  position: relative;
  display: grid;
  grid-template-columns: 52px 1fr;
  align-content: center;
  gap: 14px;
  min-height: clamp(132px, 21vh, 224px);
  padding: clamp(20px, 2vw, 32px) 0 clamp(20px, 2vw, 32px) clamp(22px, 2.2vw, 38px);
  border-bottom: 1px solid var(--line-dark);
  color: var(--paper-raised);
  text-decoration: none;
}
.lib-index__item:first-child { border-top: 1px solid var(--line-dark); }

/* active marker — a short rule that draws in (linework depth) */
.lib-index__item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 0;
  height: 2px;
  background: var(--paper-raised);
  transition: width 460ms var(--ease-out);
}

.lib-index__no {
  font-family: "Geist Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.12em;
  color: var(--muted-dark);
  transition: color 460ms var(--ease-out);
}

.lib-index__name {
  font-size: clamp(28px, 3vw, 52px);
  font-weight: 800;
  line-height: 0.98;
  letter-spacing: -0.045em;
  color: var(--paper-raised);
  opacity: 0.3;
  transition: opacity 460ms var(--ease-out);
}

.lib-index__tag {
  grid-column: 2;
  max-height: 0;
  margin-top: 0;
  overflow: hidden;
  opacity: 0;
  font-family: "Geist Mono", monospace;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--muted-dark);
  transition:
    max-height 500ms var(--ease-out),
    margin-top 500ms var(--ease-out),
    opacity 380ms var(--ease-out);
}

/* active volume */
.lib-index__item.is-active::before { width: clamp(12px, 1.4vw, 22px); }
.lib-index__item.is-active .lib-index__no { color: var(--paper-raised); }
.lib-index__item.is-active .lib-index__name { opacity: 1; }
.lib-index__item.is-active .lib-index__tag {
  max-height: 44px;
  margin-top: 12px;
  opacity: 1;
}

/* forthcoming — stays quiet, never becomes the live link */
.lib-index__item--soon { cursor: default; }
.lib-index__item--soon.is-active .lib-index__name { opacity: 0.45; }

/* canvas column ------------------------------------------------ */
.lib-canvas {
  position: sticky;
  top: clamp(96px, 12vh, 134px);
  display: block;
  color: inherit;
  text-decoration: none;
}

.lib-canvas__stage {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border: 1px solid var(--line-dark);
  background: var(--ink-2);
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
}

.lib-canvas__plate {
  position: absolute;
  inset: 0;
  opacity: 0;
  clip-path: inset(100% 0 0 0);
  transition:
    clip-path 760ms var(--ease-out),
    opacity 220ms var(--ease-out);
}
.lib-canvas__plate.is-active { opacity: 1; clip-path: inset(0 0 0 0); }
.lib-canvas__plate img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}

.lib-canvas__plate--empty {
  display: grid;
  place-items: center;
  background-color: var(--ink);
  background-image: repeating-linear-gradient(
    135deg,
    var(--line-dark) 0,
    var(--line-dark) 1px,
    transparent 1px,
    transparent 16px
  );
}
.lib-canvas__plate--empty span {
  font-family: "Geist Mono", monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--muted-dark);
  background: var(--ink);
  padding: 8px 14px;
}

.lib-canvas__open {
  position: absolute;
  left: clamp(14px, 1.4vw, 22px);
  bottom: clamp(12px, 1.2vw, 20px);
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: "Geist Mono", monospace;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--paper-raised);
  mix-blend-mode: difference;
  transition: opacity 300ms var(--ease-out), transform 420ms var(--ease-out);
}
.lib-canvas__open i { font-style: normal; transition: transform 420ms var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .lib-canvas:hover .lib-canvas__open i { transform: translate(3px, -3px); }
}
.lib-canvas.is-locked { cursor: default; }
.lib-canvas.is-locked .lib-canvas__open { opacity: 0; }

/* ---------------- Landing footer ---------------- */
.home-footer {
  position: relative;
  z-index: 2;
  overflow: hidden;
  margin-top: 0;
  background: var(--ink);
  color: var(--paper-raised);
  isolation: isolate;
}

.home-footer::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  opacity: 0.16;
  background-image:
    linear-gradient(rgba(248, 247, 242, 0.12) 1px, transparent 1px),
    linear-gradient(90deg, rgba(248, 247, 242, 0.12) 1px, transparent 1px);
  background-size: 76px 76px;
}

.home-footer__inner {
  position: relative;
  width: var(--site-wide);
  margin: 0 auto;
  min-height: clamp(430px, 56dvh, 540px);
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  padding: clamp(50px, 7vh, 84px) 0 clamp(24px, 3.4vh, 34px);
}

.home-footer__inner::before {
  content: "BLACKVERTEX";
  position: absolute;
  top: clamp(0px, 0.7vh, 8px);
  right: 0;
  z-index: -1;
  color: rgba(248, 247, 242, 0.04);
  font-family: "Geist Mono", monospace;
  font-size: clamp(82px, 10.5vw, 160px);
  font-weight: 600;
  letter-spacing: 0.06em;
  line-height: 0.8;
  white-space: nowrap;
  text-align: right;
}

.home-footer__grid {
  display: grid;
  grid-template-columns: minmax(280px, 0.9fr) minmax(340px, 1fr) minmax(260px, 0.74fr);
  gap: clamp(32px, 4.6vw, 68px);
  align-items: start;
  align-self: end;
  padding: clamp(28px, 4vh, 44px) 0 clamp(24px, 3.6vh, 36px);
}

.home-footer__brand p,
.home-footer__portal p {
  max-width: 330px;
  color: rgba(248, 247, 242, 0.66);
  font-size: 15px;
  line-height: 1.58;
}

.home-footer__mark {
  display: inline-flex;
  gap: 14px;
  align-items: center;
  margin-bottom: 18px;
  font-family: "Geist Mono", monospace;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
}

.home-footer__mark img {
  width: 34px;
  height: 34px;
  filter: invert(1);
}

.home-footer__nav {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 26px;
}

.home-footer__nav div,
.home-footer__portal {
  display: grid;
  gap: 12px;
  align-content: start;
}

.home-footer__nav span,
.home-footer__portal > span {
  padding-bottom: 12px;
  border-bottom: 1px solid rgba(248, 247, 242, 0.18);
  color: rgba(248, 247, 242, 0.48);
  font-family: "Geist Mono", monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
}

.home-footer__nav a,
.home-footer__portal a,
.home-footer__bottom a {
  width: max-content;
  color: rgba(248, 247, 242, 0.84);
  font-family: "Geist Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  transition:
    color 280ms var(--ease-out),
    transform 280ms var(--ease-out);
}

.home-footer__nav a:hover,
.home-footer__nav a:focus-visible,
.home-footer__portal a:hover,
.home-footer__portal a:focus-visible,
.home-footer__bottom a:hover,
.home-footer__bottom a:focus-visible {
  color: var(--paper-raised);
  transform: translateX(5px);
}

.home-footer__portal a {
  display: inline-flex;
  align-items: center;
  min-height: 38px;
  margin-top: 4px;
  padding: 0 14px;
  border: 1px solid rgba(248, 247, 242, 0.5);
}

.home-footer__portal a:hover,
.home-footer__portal a:focus-visible {
  background: var(--paper-raised);
  color: var(--ink);
  transform: translateY(-2px);
}

.home-footer__bottom {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  padding-top: 22px;
  border-top: 1px solid rgba(248, 247, 242, 0.14);
  color: rgba(248, 247, 242, 0.48);
  font-family: "Geist Mono", monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

/* ---------------- Responsive ---------------- */
@media (max-width: 1040px) {
  .home-nav {
    gap: 8px 16px;
    max-width: min(680px, calc(100vw - 230px));
    font-size: 11.5px;
  }

  .home-footer__grid {
    grid-template-columns: 1fr 1fr;
  }

  .home-footer__portal {
    grid-column: 1 / -1;
  }
}

@media (max-width: 980px) {
  .lib-split__inner {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: clamp(26px, 5vw, 44px);
    padding-top: clamp(40px, 8vw, 72px);
  }
  .lib-canvas {
    order: -1;
    width: 100%;
    top: clamp(64px, 9vh, 88px);
  }
  .lib-canvas__stage { aspect-ratio: 16 / 10; }
  .lib-split__head { display: none; }
  .lib-index__item { min-height: auto; }
}

@media (max-width: 820px) {
  .home-header {
    align-items: center;
  }

  .home-menu-toggle {
    position: relative;
    z-index: 22;
    display: block;
    padding: 14px 8px;
  }

  .home-nav {
    position: fixed;
    top: 72px;
    left: clamp(16px, 4vw, 28px);
    right: clamp(16px, 4vw, 28px);
    z-index: 21;
    display: grid;
    max-width: none;
    gap: 0;
    padding: 12px;
    border: 1px solid var(--header-border-scrolled);
    background: var(--header-bg-scrolled);
    -webkit-backdrop-filter: blur(14px);
    backdrop-filter: blur(14px);
    opacity: 0;
    pointer-events: none;
    transform: translateY(-8px);
    transition:
      opacity 260ms var(--ease-out),
      transform 260ms var(--ease-out);
  }

  body.nav-open .home-nav {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
  }

  .home-nav a {
    justify-content: flex-start;
    min-height: 48px;
    padding: 0 12px;
  }

  .home-nav__portal {
    justify-content: center;
    margin-top: 8px;
  }

  .lib-hero {
    grid-template-columns: 1fr;
    align-items: start;
    align-content: center;
    gap: clamp(40px, 9vw, 72px);
    padding-top: clamp(120px, 20vh, 190px);
  }
  .lib-hero__art { justify-self: start; max-width: 360px; }
}

@media (max-width: 560px) {
  .home-brand {
    gap: 10px;
    font-size: 12px;
    letter-spacing: 0.13em;
  }

  .home-brand::after {
    left: 46px;
  }

  .home-brand img {
    width: 36px;
    height: 36px;
  }

  .lib-index__item { grid-template-columns: 40px 1fr; padding-left: 18px; }
  .lib-index__name { font-size: clamp(30px, 9vw, 40px); }
  .lib-hero__art { max-width: 300px; }

  .home-footer__grid,
  .home-footer__nav,
  .home-footer__bottom {
    grid-template-columns: 1fr;
  }

  .home-footer__grid,
  .home-footer__bottom {
    display: grid;
  }

  .home-footer__inner::before {
    font-size: clamp(56px, 16vw, 104px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .lib-canvas__plate {
    transition: opacity 240ms linear;
    clip-path: none;
  }
  .lib-index__item::before,
  .lib-index__name,
  .lib-index__no,
  .lib-index__tag { transition: none; }
  /* shell flip + hero entrance become instant */
  body,
  .case-shell,
  .lib-split,
  .lib-hero__the,
  .lib-hero__word,
  .lib-hero__dot,
  .lib-hero__deck,
  .lib-hero__art,
  .lib-hero__art rect,
  .lib-hero__art line { transition: none; }
  .lib-hero__mask > span { transform: none; animation: none; }
  .lib-hero__deck { opacity: 1; animation: none; }
  .lib-shelf__line { transform: scaleX(1); animation: none; }
  .lib-shelf__spine { transform: scaleY(1); animation: none; }
}
