@charset "utf-8";
/* ============================================================================
   शब्दश्रुती · Shabdashruti
   The digital archive of Prof. Dr. Shrutishree Vadgabalkar

   A website set like a Marathi literary volume:
   handmade paper ground · ink text · kumkum accent · gold folio rules.
   Hand-written. No framework. One stylesheet.

   00 tokens          06 masthead & hero      12 magazine / prose
   01 reset & ground  07 plinths (stats)      13 media & video
   02 typography      08 the bookshelf        14 events
   03 ornament        09 the archive timeline 15 forms & bands
   04 controls        10 the honours hall     16 closing chapter
   05 chrome (nav)    11 the exhibition       17 motion · a11y · print
   ========================================================================= */

/* ---------------------------------------------------------------- 00 tokens */
:root {
  /* — the sheet: white.
       The page used to be cream, which meant every photograph and every book
       jacket had to fight a tint before it could show its own colour. The sheet
       is now white and the warmth is carried by the wood instead. — */
  --paper:        #FFFFFF;
  --paper-raised: #FFFFFF;   /* a card reads by its border and shadow, not by a tint */
  --paper-tint:   #F7F4EF;   /* alternate chapters: a breath of wood dust */
  --paper-deep:   #EFE8DE;   /* the deepest light ground */

  /* — ink, four dilutions. Deepened slightly: ink sits darker on white — */
  --ink:   #1F1913;
  --ink-2: #4F4437;
  --ink-3: #7C7164;
  --ink-4: #A79D90;

  /* — rules & edges — */
  --line:      #E6DFD5;
  --line-soft: #F0EBE3;
  --line-firm: #D0C5B6;

  /* — the accents: kumkum and gold foil, unchanged. Kumkum is her bindi and
       the mark; it stays the one colour that means "act". — */
  --kumkum:      #8E2318;
  --kumkum-deep: #6C1A11;
  --kumkum-soft: #F6E3DE;
  --kumkum-wash: rgba(142, 35, 24, .07);
  --haldi:       #B08A2C;
  --haldi-lit:   #E3C476;

  /* — the wood: now the structural material of the whole site. Shelves, the
       inverted chapters, the footer. Where the page used to go to night, it
       goes to walnut. — */
  --wood:        #6B4A2E;   /* mid teak — planks, spines, structure */
  --wood-lit:    #A87B4E;   /* light grain, detail on dark wood */
  --wood-pale:   #E7DBC8;   /* a pale wood wash */
  --wood-deep:   #3B2A1C;   /* dark walnut — inverted chapters, the footer */
  --wood-deep-2: #4A3626;
  --wood-deep-3: #5E4630;

  /* Inverted chapters were "night" and are now wood. The --night tokens survive
     as aliases so every rule that referenced them still reads true. */
  --night:   var(--wood-deep);
  --night-2: var(--wood-deep-2);
  --night-3: var(--wood-deep-3);
  --walnut:  var(--wood);
  --copper:  #9C6B43;

  /* Green is now semantic only — success states, nothing decorative. */
  --shalu:      #2A5340;
  --shalu-soft: #E9F0E9;

  /* — foil: a gradient used for every gold rule in the site — */
  --foil: linear-gradient(90deg,
          transparent 0%, rgba(176,138,44,.25) 12%, var(--haldi-lit) 38%,
          var(--haldi) 50%, var(--haldi-lit) 62%, rgba(176,138,44,.25) 88%, transparent 100%);

  /* — type — */
  --f-display: "Tiro Devanagari Marathi", "Noto Serif Devanagari", Georgia, serif;
  --f-hand:    "Kalam", "Tiro Devanagari Marathi", cursive;
  --f-text:    "Mukta", "Noto Sans Devanagari", "Segoe UI", system-ui, sans-serif;
  --f-latin:   "Fraunces", "Iowan Old Style", Georgia, serif;

  --t-hero:  clamp(2.6rem, 6.4vw, 5.75rem);
  --t-1:     clamp(2.05rem, 4.4vw, 3.6rem);
  --t-2:     clamp(1.7rem,  3.2vw, 2.6rem);
  --t-3:     clamp(1.28rem, 2vw,   1.68rem);
  --t-4:     1.14rem;
  --t-lede:  clamp(1.12rem, .55vw + .95rem, 1.32rem);
  --t-body:  clamp(1.0625rem, .3vw + 1rem, 1.14rem);
  --t-sm:    .92rem;
  --t-xs:    .795rem;

  /* — spacing, on a 4px keel — */
  --s1: .25rem; --s2: .5rem;  --s3: .75rem; --s4: 1rem;   --s5: 1.5rem;
  --s6: 2rem;   --s7: 3rem;   --s8: 4rem;   --s9: 6rem;   --s10: 8rem;
  --chapter: clamp(4rem, 9vw, 8rem);

  /* — measure & gutters — */
  --wrap:      75rem;
  --wrap-wide: 88rem;
  --wrap-read: 40rem;
  --measure:   66ch;
  --gutter:    clamp(1.25rem, 4vw, 3rem);

  /* — surface — */
  --radius:    3px;
  --radius-lg: 6px;
  /* Shadows are cast in wood-brown rather than ink: a neutral-grey shadow on a
     white sheet reads as dirt, a warm one reads as depth. */
  --shadow-1: 0 1px 1px rgba(59,42,28,.045), 0 2px 6px rgba(59,42,28,.055);
  --shadow-2: 0 2px 4px rgba(59,42,28,.06), 0 10px 26px rgba(59,42,28,.10);
  --shadow-3: 0 4px 10px rgba(59,42,28,.09), 0 26px 60px rgba(59,42,28,.18);
  /* The book boards used to be dropped onto the page with a heavy shadow —
     4px close and 30px wide. On a white sheet that read as a sticker rather
     than as a book, and it fought the cast shadow beneath. The boards are now
     flat; the object still reads as three-dimensional through its spine, its
     fore-edge and the gutter shading, which is geometry rather than gloss. */
  --shadow-book: none;

  /* — motion — */
  --ease:      cubic-bezier(.22, .61, .36, 1);
  --ease-out:  cubic-bezier(.16, 1, .3, 1);
  --ease-book: cubic-bezier(.2, .8, .25, 1);
  --dur:   .28s;
  --dur-2: .5s;

  --head-h: 4.5rem;
}

/* ------------------------------------------------------ 01 reset & ground */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--head-h) + 1.5rem);
  text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: var(--f-text);
  font-size: var(--t-body);
  font-weight: 400;
  line-height: 1.78;
  color: var(--ink);
  background-color: var(--paper);
  overflow-x: hidden;
  font-feature-settings: "kern" 1, "liga" 1;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

/* Texture, now that the sheet is white.

   The white page is left CLEAN — a fibre pattern and a heavy grain multiplied
   over white read as dirt, not as paper, and they were the main reason a white
   ground looks cheap. Texture is kept only where it has something to sit on:
   the tinted grounds, which are washed with wood dust rather than printed on.
   The overall grain stays, at a third of its old strength, so large white areas
   do not read as flat screen-white. */
.section--tint,
.section--deep,
.pager {
  background-image:
    radial-gradient(rgba(60,42,26,.022) 1px, transparent 1.2px),
    radial-gradient(rgba(60,42,26,.014) 1px, transparent 1.2px);
  background-size: 26px 26px, 51px 51px;
  background-position: 0 0, 13px 17px;
  background-attachment: fixed;
}

body::after {
  content: "";
  position: fixed; inset: 0; z-index: 9; pointer-events: none;
  opacity: .07; mix-blend-mode: multiply;
  background-image: 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='.85' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23g)' opacity='.42'/%3E%3C/svg%3E");
}
body > * { position: relative; z-index: 1; }

img, svg, video { max-width: 100%; height: auto; display: block; }
img { background-color: var(--paper-tint); }

a { color: var(--kumkum); text-decoration-thickness: 1px; text-underline-offset: .22em;
    text-decoration-color: rgba(142,35,24,.32);
    transition: color var(--dur) var(--ease), text-decoration-color var(--dur) var(--ease); }
a:hover { color: var(--kumkum-deep); text-decoration-color: currentColor; }

:focus-visible {
  outline: 2px solid var(--kumkum);
  outline-offset: 3px;
  border-radius: 2px;
}
::selection { background: var(--kumkum); color: #FFF8EF; }

hr { border: 0; }
/* overlays carry [hidden] until opened, so they are inert before scripting */
[hidden] { display: none !important; }
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-track { background: var(--paper-tint); }
::-webkit-scrollbar-thumb { background: var(--line-firm); border-radius: 6px;
  border: 3px solid var(--paper-tint); }
::-webkit-scrollbar-thumb:hover { background: var(--ink-3); }

/* --------------------------------------------------------- 02 typography */
h1, h2, h3, h4, h5 {
  font-family: var(--f-display);
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: .002em;
  margin: 0 0 var(--s4);
  color: var(--ink);
  text-wrap: balance;
}
h1 { font-size: var(--t-1); }
h2 { font-size: var(--t-2); }
h3 { font-size: var(--t-3); line-height: 1.32; }
h4 { font-size: var(--t-4); line-height: 1.4; }

/* Devanagari display set on paper gets a whisper of letterpress relief. */
.section:not(.section--night) h1,
.section:not(.section--night) h2,
.masthead h1 { text-shadow: 0 1px 0 rgba(255, 253, 246, .6); }

p { margin: 0 0 var(--s4); max-width: var(--measure); }
p:last-child { margin-bottom: 0; }

strong, b { font-weight: 600; }
em, i { font-style: italic; }
blockquote { margin: 0; }
:lang(mr) { font-feature-settings: "kern" 1; }

/* The three voices of the page ------------------------------------------- */

/* 1. the folio — a printer's running head; Latin italic, letter-spaced */
.folio {
  font-family: var(--f-latin);
  font-style: italic;
  font-size: var(--t-xs);
  font-weight: 400;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-3);
  display: inline-block;
}
.folio--deva {
  font-family: var(--f-display);
  font-style: normal;
  font-size: var(--t-sm);
  letter-spacing: .06em;
  text-transform: none;
  color: var(--kumkum);
}
.folio--gold { color: var(--haldi); }
.folio--pale { color: var(--ink-4); }

/* 2. the hand — the author's own voice: signatures, marginalia, pull quotes */
.hand {
  font-family: var(--f-hand);
  font-weight: 400;
  line-height: 1.55;
  color: var(--kumkum);
}

/* 3. the lede — an editorial standfirst */
.lede {
  font-size: var(--t-lede);
  line-height: 1.7;
  color: var(--ink-2);
  max-width: 48ch;
  font-weight: 300;
}

.deva { font-family: var(--f-display); }
.latin { font-family: var(--f-latin); }
.num { font-family: var(--f-display); font-variant-numeric: lining-nums; }

/* ------------------------------------------------------------- layout ---- */
.wrap { max-width: var(--wrap); margin-inline: auto; padding-inline: var(--gutter); }
.wrap--wide { max-width: var(--wrap-wide); }
.wrap--read { max-width: calc(var(--wrap-read) + var(--gutter) * 2); }
.wrap--mid  { max-width: 58rem; }

.section { padding-block: var(--chapter); position: relative; }
.section--tight { padding-block: clamp(2.5rem, 6vw, 4.5rem); }

/* the four grounds a chapter may be printed on */
.section--tint  { background-color: var(--paper-tint); }   /* -color, so the fibre survives */
.section--deep  { background-color: var(--paper-deep); }
/* An inverted chapter is a wood panel: dark walnut with a fine vertical grain,
   built from a gradient so it costs no request and never tiles visibly. */
.section--night {
  background-color: var(--wood-deep);
  background-image: repeating-linear-gradient(90deg,
      rgba(255, 246, 232, .020) 0 1px,
      transparent 1px 4px,
      rgba(0, 0, 0, .045) 4px 5px,
      transparent 5px 13px);
  color: var(--paper-tint);
}
.section--night h1, .section--night h2, .section--night h3, .section--night h4 { color: var(--paper); }
.section--night .lede, .section--night .muted { color: var(--ink-4); }
.section--night a { color: var(--haldi-lit); text-decoration-color: rgba(227,196,118,.4); }
.section--night a:hover { color: #F5E4BC; }
.section--night .folio { color: var(--ink-4); }

/* a hairline where two grounds of paper meet */
.section--tint + .section,
.section + .section--tint,
.section--deep + .section { border-top: 1px solid var(--line-soft); }

/* ---------------------------------------------------------- 03 ornament */

/* the kumkum dot — list marker, divider centre, active-nav mark */
.bindi {
  display: inline-block; width: .46em; height: .46em; border-radius: 50%;
  background: var(--kumkum); vertical-align: .12em; flex: 0 0 auto;
}

/* the folio rule — a thin double gold rule, as at a chapter opening */
/* the folio rule: two gold hairlines parted by a kumkum dot.
   The dot is painted on the <hr> itself — an <hr> takes no children. */
.rule {
  display: flex; align-items: center; gap: var(--s3);
  margin: 0; border: 0; width: 100%; height: 7px;
  background-image: radial-gradient(circle at 50% 50%, var(--kumkum) 0 2.6px, transparent 2.9px);
  background-repeat: no-repeat;
}
.rule::before, .rule::after {
  content: ""; flex: 1 1 0; height: 1px; background: var(--foil);
}
.rule__mark {
  flex: 0 0 auto; color: var(--haldi); font-size: .7rem; line-height: 1;
  letter-spacing: .3em; padding-inline-start: .3em;
}
.rule--plain::before, .rule--plain::after { background: linear-gradient(90deg, transparent, var(--line-firm), transparent); }
.rule--short { max-width: 13rem; }

/* the chapter opening: numeral · title · rule · standfirst */
/* A chapter opening aligns to the left edge of the content it introduces, so a
   page reads down one axis instead of four. Centring is reserved for genuine
   title-page moments (--center), where nothing follows on a different edge. */
.chapter-head { text-align: start; margin-bottom: clamp(2.25rem, 5vw, 4rem); }
.chapter-head--center { text-align: center; }

.chapter-head__no {
  display: block;
  font-family: var(--f-display);
  font-size: var(--t-sm);
  letter-spacing: .34em;
  text-transform: uppercase;
  color: var(--haldi);
  margin-bottom: var(--s3);
}
.chapter-head__no .n {
  font-size: 1.6em; letter-spacing: 0; color: var(--kumkum);
  display: block; line-height: 1.1; margin-bottom: .1em;
}
.chapter-head h1, .chapter-head h2 { margin-bottom: var(--s3); }
.chapter-head__en {
  display: block;
  font-family: var(--f-latin); font-style: italic; font-weight: 400;
  font-size: clamp(.95rem, 1.1vw, 1.12rem);
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--ink-3);
  margin-top: -.15rem;
}
.chapter-head .rule { max-width: 16rem; margin: var(--s5) 0; }
.chapter-head .lede { margin-inline: 0; max-width: 54ch; }
.chapter-head--center .rule { margin-inline: auto; }
.chapter-head--center .lede { margin-inline: auto; }

/* a manuscript corner-piece, used sparingly on framed panels */
.frame { position: relative; }
.frame::before, .frame::after {
  content: ""; position: absolute; width: 22px; height: 22px; pointer-events: none;
  border: 1px solid var(--haldi); opacity: .55;
}
.frame::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.frame::after  { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }

/* a hanging drop-cap, as at the head of a printed chapter */
/* A lead flow drop-caps its own first paragraph, so the effect survives whatever
   an editor writes in the CMS rather than depending on a hand-added class. */
.dropcap::first-letter,
.flow--lead > p:first-of-type::first-letter {
  font-family: var(--f-display);
  font-size: 3.1em; line-height: .84;
  float: inline-start;
  padding: .1em .14em 0 0;
  color: var(--kumkum);
}
/* Devanagari has no drop-cap tradition, and ::first-letter takes the whole
   conjunct — "प्रा." enlarges as one blob. Marathi gets a coloured opening
   phrase instead, which is how a Marathi book actually opens a chapter. */
[lang="mr"] .flow--lead > p:first-of-type::first-letter,
:lang(mr) .dropcap::first-letter,
[lang="mr"] .dropcap::first-letter {
  font-family: inherit; font-size: inherit; line-height: inherit;
  float: none; padding: 0; color: inherit;
}
[lang="mr"] .flow--lead > p:first-of-type::first-line,
:lang(mr) .dropcap::first-line,
[lang="mr"] .dropcap::first-line {
  font-weight: 500;
  color: var(--ink);
}

/* --------------------------------------------------------- 04 controls */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .6em;
  font-family: var(--f-text); font-weight: 500; font-size: 1rem; line-height: 1.25;
  padding: .82em 1.75em; min-height: 46px;
  border: 1px solid transparent; border-radius: var(--radius);
  text-decoration: none; cursor: pointer; text-align: center;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease),
              border-color var(--dur) var(--ease), transform .12s var(--ease),
              box-shadow var(--dur) var(--ease);
}
.btn:active { transform: translateY(1px); }
.btn .arrow { transition: transform var(--dur) var(--ease); }
.btn:hover .arrow { transform: translateX(3px); }

.btn--solid { background: var(--kumkum); color: #FFF8EF; box-shadow: var(--shadow-1); }
.btn--solid:hover { background: var(--kumkum-deep); color: #FFF8EF; box-shadow: var(--shadow-2); }

.btn--ghost { border-color: var(--line-firm); color: var(--ink); background: transparent; }
.btn--ghost:hover { border-color: var(--kumkum); color: var(--kumkum); background: var(--kumkum-wash); }

.btn--paper { background: var(--paper-raised); color: var(--ink); border-color: var(--line); box-shadow: var(--shadow-1); }
.btn--paper:hover { background: #fff; border-color: var(--line-firm); box-shadow: var(--shadow-2); }

.btn--gold { background: transparent; color: var(--haldi-lit); border-color: rgba(227,196,118,.45); }
.btn--gold:hover { background: rgba(227,196,118,.10); border-color: var(--haldi-lit); color: #F5E4BC; }

.btn--sm { padding: .55em 1.1em; min-height: 38px; font-size: var(--t-sm); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .45; pointer-events: none; }

/* the text link — an underline that draws itself */
.textlink {
  display: inline-flex; align-items: center; gap: .45em;
  font-weight: 500; text-decoration: none; color: var(--kumkum);
  padding-bottom: 3px; position: relative;
}
.textlink::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: currentColor; opacity: .34;
  transform-origin: left; transform: scaleX(1);
  transition: opacity var(--dur) var(--ease);
}
.textlink:hover::after { opacity: 1; }
.textlink .arrow { transition: transform var(--dur) var(--ease); }
.textlink:hover .arrow { transform: translateX(4px); }
.section--night .textlink { color: var(--haldi-lit); }

/* filter chips — a rail of genres or albums */
.chips {
  display: flex; flex-wrap: wrap; gap: var(--s2);
  justify-content: center; margin-bottom: clamp(2rem, 4vw, 3rem);
}
.chips--left { justify-content: flex-start; }
.chip {
  font-family: var(--f-text); font-size: var(--t-sm); line-height: 1;
  display: inline-flex; align-items: center; gap: .45em;
  padding: .62em 1.15em; min-height: 40px;
  border: 1px solid var(--line); border-radius: 100px;
  background: var(--paper-raised); color: var(--ink-2);
  text-decoration: none; cursor: pointer;
  transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease),
              color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.chip:hover { border-color: var(--kumkum); color: var(--kumkum); box-shadow: var(--shadow-1); }
.chip .n { font-size: .8em; color: var(--ink-4); font-variant-numeric: tabular-nums; }
.chip[aria-current="true"], .chip.is-on {
  background: var(--kumkum); border-color: var(--kumkum); color: #FFF8EF;
}
.chip[aria-current="true"] .n, .chip.is-on .n { color: rgba(255,248,239,.72); }

/* a small typographic badge */
.badge {
  display: inline-flex; align-items: center; gap: .4em;
  font-size: var(--t-xs); letter-spacing: .1em; text-transform: uppercase;
  font-weight: 600; color: var(--kumkum);
  background: var(--kumkum-soft); border-radius: 100px;
  padding: .35em .85em;
}
.badge--gold { color: #6B5316; background: rgba(176,138,44,.16); }
.badge--green { color: var(--shalu); background: var(--shalu-soft); }

/* ------------------------------------------------------------ 05 chrome */
.skip-link {
  position: fixed; left: 1rem; top: -4rem; z-index: 200;
  background: var(--kumkum); color: #FFF8EF; padding: .7rem 1.2rem;
  border-radius: 0 0 var(--radius) var(--radius); text-decoration: none;
  transition: top var(--dur) var(--ease);
}
.skip-link:focus { top: 0; color: #FFF8EF; }

.head {
  position: sticky; top: 0; z-index: 100;  /* above the mobile sheet, so it can be closed */
  background: color-mix(in srgb, var(--paper) 88%, transparent);
  backdrop-filter: saturate(150%) blur(14px);
  -webkit-backdrop-filter: saturate(150%) blur(14px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease),
              box-shadow var(--dur) var(--ease);
}
.head.is-stuck {
  border-bottom-color: var(--line);
  box-shadow: 0 1px 20px rgba(36,28,22,.07);
  background: color-mix(in srgb, var(--paper) 94%, transparent);
}
.head__in {
  display: flex; align-items: center; gap: var(--s5);
  min-height: var(--head-h);
}
/* The bar must be able to give way. Without min-width:0 the imprint reports its
   full text as its minimum, the tools cluster is pushed past the viewport, and
   the whole document scrolls sideways — which is exactly what it was doing at
   360px and 390px. */
.head__in > * { min-width: 0; }

/* ---------------------------------------------------- the mark & lockups --
   The identity, inlined as SVG so it inherits colour from the ground it sits
   on and can animate its bindi. Geometry mirrors assets/brand/mark.svg exactly.
   Specified in full at /brand.php. */
.mark { display: block; overflow: visible; flex: 0 0 auto; }
.mark__bindi {
  transform-origin: 60px 17px;
  transition: transform var(--dur-2) var(--ease-out);
}
a:hover > .mark__bindi, a:hover .mark .mark__bindi,
button:hover .mark .mark__bindi { transform: scale(1.16); }

/* The lockup is drawn at specimen size on /brand, inside cards that are only a
   few rem wide. Set at a flat 1.85rem the Devanagari name alone measured 230px
   and pushed those cards — and the document with them — past the viewport on
   anything narrower than a laptop. It is now fluid, allowed to wrap, and its
   words may shrink: a drawing of the mark, not the mark itself. */
.lockup { display: inline-flex; align-items: center; gap: var(--s4); flex-wrap: wrap; max-width: 100%; }
.lockup--stack { flex-direction: column; gap: var(--s3); text-align: center; }
.lockup__words { display: grid; gap: .12rem; min-width: 0; }
.lockup__mr {
  font-family: var(--f-display); line-height: 1; color: inherit;
  font-size: clamp(1.35rem, 4.4vw, 1.85rem); letter-spacing: .005em;
  overflow-wrap: break-word;
}
.lockup--stack .lockup__mr { font-size: clamp(2.1rem, 5.5vw, 3.2rem); }
.lockup__en {
  font-family: var(--f-latin); font-style: italic;
  font-size: .72rem; letter-spacing: .21em; text-transform: uppercase;
  color: var(--kumkum);
}
.lockup--stack .lockup__en { font-size: .78rem; }

/* the imprint — the site's masthead mark */
.imprint {
  display: flex; align-items: center; gap: .62rem;
  text-decoration: none; color: var(--ink); margin-inline-end: auto;
  min-width: 0;
}
.imprint__mark {
  display: block;
  /* Fluid rather than fixed: the name is long, and on a 360px screen a fixed
     1.42rem alone consumes more than the bar has to give. */
  font-family: var(--f-display); font-size: clamp(.95rem, 3.6vw, 1.42rem); line-height: 1;
  letter-spacing: .01em; white-space: nowrap;
  transition: color var(--dur) var(--ease);
}
.imprint__sub {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: .66rem; letter-spacing: .18em; text-transform: uppercase;
  color: var(--ink-3); margin-top: .16rem;
  transition: color var(--dur) var(--ease);
}
.imprint:hover .imprint__mark { color: var(--kumkum); }
.imprint:hover .imprint__sub  { color: var(--kumkum-deep); }
.imprint:focus-visible { outline: 2px solid var(--kumkum); outline-offset: 4px; border-radius: 2px; }
/* below this width the imprint's Latin sub-line and the tools cluster
   cannot both fit; the Devanagari mark is the one that must survive */
@media (max-width: 40rem) {
  .imprint__sub { display: none; }
  .imprint .mark { width: 32px; height: 32px; }
  .head__in { gap: var(--s3); }
  .langswitch a { padding-inline: .62rem; }
}

.nav { display: flex; align-items: center; gap: clamp(.7rem, 1.5vw, 1.5rem); }
.nav a {
  position: relative; font-size: .96rem; color: var(--ink-2);
  text-decoration: none; padding: .4rem 0; white-space: nowrap;
  transition: color var(--dur) var(--ease);
}
.nav a::after {
  content: ""; position: absolute; left: 50%; bottom: -1px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--kumkum);
  opacity: 0; transform: translate(-50%, 4px) scale(.4);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease-out);
}
.nav a:hover { color: var(--ink); }
.nav a:hover::after, .nav a[aria-current="page"]::after { opacity: 1; transform: translate(-50%, 0) scale(1); }
.nav a[aria-current="page"] { color: var(--ink); font-weight: 500; }

/* the tools cluster: search · language · menu */
.head__tools { display: flex; align-items: center; gap: var(--s2); }
.iconbtn {
  display: inline-flex; align-items: center; justify-content: center; gap: .4em;
  width: 44px; height: 44px; padding: 0;
  background: transparent; border: 1px solid transparent; border-radius: var(--radius);
  color: var(--ink-2); cursor: pointer; font: inherit; font-size: 1rem;
  transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease),
              background-color var(--dur) var(--ease);
}
.iconbtn:hover { color: var(--kumkum); border-color: var(--line); background: var(--paper-raised); }
.iconbtn svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.6; }

.langswitch {
  display: inline-flex; align-items: stretch;
  border: 1px solid var(--line); border-radius: 100px; overflow: hidden;
  background: var(--paper-raised); line-height: 1;
}
.langswitch a {
  display: inline-flex; align-items: center; padding: 0 .78rem; min-height: 34px;
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .06em;
  color: var(--ink-3); text-decoration: none;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.langswitch a + a { border-inline-start: 1px solid var(--line); }
.langswitch a:hover { color: var(--kumkum); background: var(--kumkum-wash); }
.langswitch a[aria-current="true"] { background: var(--ink); color: var(--paper); }
.langswitch .deva { font-size: .92rem; letter-spacing: 0; }

/* reading progress — a gold thread across the top of the page */
.progress {
  position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: transparent; overflow: hidden; pointer-events: none;
}
.progress__bar {
  height: 100%; width: 100%;
  transform: scaleX(0); transform-origin: left center;
  background: linear-gradient(90deg, var(--kumkum), var(--haldi));
}

/* mobile menu button */
.menubtn { display: none; }
.menubtn__box { display: block; width: 20px; height: 12px; position: relative; }
.menubtn__box i {
  position: absolute; left: 0; height: 1.5px; width: 100%; background: currentColor;
  transition: transform var(--dur) var(--ease-out), opacity .18s var(--ease);
}
.menubtn__box i:nth-child(1) { top: 0; }
.menubtn__box i:nth-child(2) { top: 5.25px; }
.menubtn__box i:nth-child(3) { top: 10.5px; }
.menubtn[aria-expanded="true"] .menubtn__box i:nth-child(1) { transform: translateY(5.25px) rotate(45deg); }
.menubtn[aria-expanded="true"] .menubtn__box i:nth-child(2) { opacity: 0; }
.menubtn[aria-expanded="true"] .menubtn__box i:nth-child(3) { transform: translateY(-5.25px) rotate(-45deg); }

/* — the mobile sheet: a page of the book, not a dropdown — */
.sheet {
  position: fixed; inset: 0; z-index: 95;
  background: var(--paper);
  display: flex; flex-direction: column;
  padding: calc(var(--head-h) + var(--s5)) var(--gutter) var(--s7);
  overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; visibility: hidden;
  transform: translateY(-1.25rem);
  transition: opacity var(--dur-2) var(--ease-out), transform var(--dur-2) var(--ease-out), visibility var(--dur-2);
}
.sheet.is-open { opacity: 1; visibility: visible; transform: none; }
.sheet__index { list-style: none; margin: 0; padding: 0; }
.sheet__index li { border-bottom: 1px solid var(--line-soft); }
.sheet__index li:first-child { border-top: 1px solid var(--line-soft); }
.sheet__index a {
  display: flex; align-items: baseline; gap: var(--s4);
  padding: 1.05rem .25rem; text-decoration: none; color: var(--ink);
  transition: padding-inline-start var(--dur) var(--ease), color var(--dur) var(--ease);
}
.sheet__index a:hover, .sheet__index a:focus-visible { padding-inline-start: .75rem; color: var(--kumkum); }
.sheet__index .n {
  font-family: var(--f-latin); font-style: italic; font-size: .8rem;
  color: var(--ink-4); min-width: 1.9rem; font-variant-numeric: tabular-nums;
}
.sheet__index .t { font-family: var(--f-display); font-size: 1.42rem; line-height: 1.25; }
.sheet__index .t small {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: .72rem; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3);
  margin-top: .1rem;
}
.sheet__index a[aria-current="page"] { color: var(--kumkum); }
.sheet__index a[aria-current="page"] .n { color: var(--kumkum); }
.sheet__foot { margin-top: auto; padding-top: var(--s7); }
.sheet__foot .hand { font-size: 1.3rem; }

@media (max-width: 64rem) {
  .head .nav { display: none; }
  .menubtn { display: inline-flex; }
}
@media (min-width: 64.0625rem) {
  .sheet { display: none; }
}

/* — the search overlay — */
.search {
  position: fixed; inset: 0; z-index: 120;
  background: color-mix(in srgb, var(--paper) 96%, transparent);
  backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
  opacity: 0; visibility: hidden;
  transition: opacity var(--dur-2) var(--ease-out), visibility var(--dur-2);
  overflow-y: auto; overscroll-behavior: contain;
  padding: clamp(3.5rem, 12vh, 8rem) var(--gutter) var(--s8);
}
.search.is-open { opacity: 1; visibility: visible; }
.search__in { max-width: 46rem; margin-inline: auto; }
.search__close { position: fixed; top: 1rem; right: var(--gutter); z-index: 2; }
.search__field { position: relative; border-bottom: 1px solid var(--line-firm); padding-bottom: var(--s3); }
.search__field input {
  width: 100%; border: 0; background: transparent; padding: 0 2.5rem 0 0;
  font-family: var(--f-display); font-size: clamp(1.6rem, 4.5vw, 2.6rem);
  line-height: 1.3; color: var(--ink);
}
.search__field input::placeholder { color: var(--ink-4); }
.search__field input:focus { outline: none; }
.search__field::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
  background: var(--kumkum); transform: scaleX(0); transform-origin: left;
  transition: transform var(--dur-2) var(--ease-out);
}
.search__field:focus-within::after { transform: scaleX(1); }
.search__hint { margin-top: var(--s3); font-size: var(--t-sm); color: var(--ink-3); }
.search__hint kbd {
  font-family: var(--f-text); font-size: .78rem; border: 1px solid var(--line);
  border-bottom-width: 2px; border-radius: 3px; padding: .1em .45em; background: var(--paper-raised);
}
.search__results { margin-top: var(--s6); list-style: none; padding: 0; }
.search__results li { border-bottom: 1px solid var(--line-soft); }
.search__results a {
  display: grid; gap: .15rem; padding: var(--s4) .25rem; text-decoration: none; color: var(--ink);
  transition: padding-inline-start var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
.search__results a:hover, .search__results a:focus-visible { padding-inline-start: .7rem; background: var(--paper-tint); }
.search__results .k { font-size: var(--t-xs); letter-spacing: .14em; text-transform: uppercase; color: var(--kumkum); }
.search__results .t { font-family: var(--f-display); font-size: 1.2rem; line-height: 1.3; }
.search__results .d { font-size: var(--t-sm); color: var(--ink-3); }
.search__results mark { background: rgba(176,138,44,.28); color: inherit; border-radius: 2px; padding: 0 .1em; }

body.is-locked { overflow: hidden; }

/* -------------------------------------------------- 06 masthead & hero */
.masthead {
  position: relative;
  padding-block: clamp(2.5rem, 6vw, 5rem) clamp(3rem, 7vw, 6rem);
  overflow: hidden;
}
/* a broad, very soft wash of warm wood behind the portrait side */
.masthead::before {
  content: ""; position: absolute; inset: 0 0 0 46%; z-index: -1;
  background: radial-gradient(80% 70% at 62% 42%, rgba(107, 74, 46, .085), transparent 70%);
  pointer-events: none;
}
.masthead__in {
  display: grid; gap: clamp(2.5rem, 5vw, 4.5rem); align-items: center;
}
@media (min-width: 60rem) {
  /* minmax(0, …) so a long display line cannot grow its own column past its
     share and squeeze the portrait — an `fr` alone still floors at min-content. */
  .masthead__in { grid-template-columns: minmax(0, 1.06fr) minmax(0, .94fr); }
}

.masthead__epigraph { margin-bottom: clamp(1.75rem, 4vw, 2.75rem); }
.masthead__epigraph q {
  display: block; quotes: none;
  font-family: var(--f-display);
  font-size: clamp(1.35rem, 2.6vw, 2.05rem);
  line-height: 1.5; color: var(--kumkum);
  text-indent: -.45em;
}
.masthead__epigraph q::before { content: "\201C"; }
.masthead__epigraph q::after  { content: "\201D"; }
.masthead__epigraph cite {
  display: block; font-style: normal; margin-top: var(--s3);
  font-family: var(--f-latin); font-size: var(--t-sm); color: var(--ink-3);
}
.masthead__epigraph cite em { font-style: italic; }

/* the author's name, set as the title page of a book */
.masthead h1 {
  font-size: var(--t-hero);
  line-height: 1.06;
  letter-spacing: -.01em;
  margin-bottom: var(--s3);
}
.masthead h1 .pre {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: clamp(.85rem, 1.3vw, 1.05rem); letter-spacing: .22em;
  text-transform: uppercase; color: var(--ink-3);
  margin-bottom: .55rem; line-height: 1;
}
.masthead h1 .en {
  display: block; font-family: var(--f-latin); font-weight: 400;
  font-size: clamp(1rem, 1.85vw, 1.45rem); letter-spacing: .04em;
  color: var(--ink-2); margin-top: .55rem; line-height: 1.3;
}
.masthead__role {
  font-size: var(--t-lede); color: var(--ink-2); font-weight: 300;
  margin-bottom: var(--s2); max-width: 30ch;
}
.masthead__alt { font-size: var(--t-sm); color: var(--ink-3); margin-bottom: clamp(1.75rem, 4vw, 2.5rem); }
.masthead__cta { display: flex; flex-wrap: wrap; gap: var(--s3); margin-bottom: clamp(2rem, 4.5vw, 3rem); }

/* the portrait, hung in a temple-niche arch against a shalu panel.
   The panel is bounded by the niche — never by the figure — so the caption
   below always sits on clean paper. */
.portrait { position: relative; justify-self: center; width: min(100%, 26rem); }
.portrait figure { margin: 0; }
.portrait__niche { position: relative; display: block; }
/* a gold hairline arch, set off evenly from the photograph like a mount */
.portrait__panel {
  position: absolute; inset: clamp(-1.6rem, -1.4vw, -1rem); z-index: 0;
  border: 1px solid rgba(176, 138, 44, .6);
  border-radius: 15rem 15rem var(--radius) var(--radius);
  background: color-mix(in srgb, var(--wood) 7%, transparent);
}
.portrait img {
  position: relative; z-index: 1;
  width: 100%; aspect-ratio: 4 / 5; object-fit: cover; object-position: 50% 22%;
  border-radius: 13rem 13rem var(--radius) var(--radius);
  border: 1px solid var(--line-firm);
  box-shadow: var(--shadow-3);
}
.portrait figcaption {
  position: relative; text-align: center; margin-top: clamp(2.25rem, 4vw, 2.75rem);
}
.portrait figcaption .sig {
  font-family: var(--f-hand); font-size: 1.55rem; color: var(--kumkum);
  line-height: 1.3; display: block;
}
.portrait figcaption .role {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3);
  display: block; margin-top: .3rem;
}

/* the scroll invitation */
.scroll-cue {
  display: inline-flex; flex-direction: column; align-items: center; gap: .5rem;
  text-decoration: none; color: var(--ink-3); font-family: var(--f-latin);
  font-style: italic; font-size: var(--t-xs); letter-spacing: .18em; text-transform: uppercase;
}
.scroll-cue .line {
  width: 1px; height: 2.5rem; background: linear-gradient(var(--line-firm), transparent);
  position: relative; overflow: hidden;
}
.scroll-cue .line::after {
  content: ""; position: absolute; inset: 0 auto auto 0; width: 1px; height: 45%;
  background: var(--kumkum); animation: cue 2.4s var(--ease) infinite;
}
@keyframes cue { 0% { transform: translateY(-100%); } 60%, 100% { transform: translateY(240%); } }
.scroll-cue:hover { color: var(--kumkum); }

/* ------------------------------------------------------- 07 the plinths */
.plinths {
  display: grid; gap: 1px;
  grid-template-columns: repeat(2, 1fr);
  background: var(--line-soft);
  border-block: 1px solid var(--line-soft);
}
@media (min-width: 46rem) { .plinths { grid-template-columns: repeat(4, 1fr); } }
.plinth {
  background: var(--paper); padding: clamp(1.25rem, 3vw, 2rem) var(--s4);
  text-align: center; transition: background-color var(--dur) var(--ease);
}
.plinth:hover { background: var(--paper-raised); }
.plinth b {
  display: block; font-family: var(--f-display); font-weight: 400;
  font-size: clamp(2.1rem, 4.4vw, 3.1rem); line-height: 1.08; color: var(--ink);
  letter-spacing: -.01em;
}
.plinth span {
  display: block; font-size: var(--t-xs); letter-spacing: .13em;
  text-transform: uppercase; color: var(--ink-3); margin-top: .4rem;
}
.plinth em {
  display: block; font-family: var(--f-display); font-style: normal;
  font-size: var(--t-sm); color: var(--kumkum); margin-top: .1rem;
}
.section--night .plinths { background: var(--night-3); border-color: var(--night-3); }
.section--night .plinth { background: var(--night); }
.section--night .plinth:hover { background: var(--night-2); }
.section--night .plinth b { color: var(--paper); }
.section--night .plinth span { color: var(--ink-4); }
.section--night .plinth em { color: var(--haldi-lit); }

/* ---------------------------------------------------- 08 the bookshelf */

/* the shelf: books stand on a walnut ledge */
.shelf { position: relative; }
.shelf__row {
  display: grid; gap: clamp(1.5rem, 3.2vw, 2.75rem) clamp(1.5rem, 3vw, 2.5rem);
  grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
  align-items: start;   /* covers share a top line; captions run on beneath */
}
@media (min-width: 40rem)  { .shelf__row { grid-template-columns: repeat(auto-fill, minmax(11.5rem, 1fr)); } }
@media (min-width: 64rem)  { .shelf__row { grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); } }

/* — a curated shelf —
   The library's own shelves above are auto-filled: a genre holds however many
   books it holds, and a short last row is simply what a shelf looks like. The
   title page is different. Its shelf is a SET, chosen to a number, and it must
   close flush — so it is given an exact grid: four across from tablet up, two
   on a phone. Eight books therefore read as two rows of four, never as four
   and a straggler. Written after the auto-fill rules so it wins by source
   order at every width. */
.shelf__row--set { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 48rem) { .shelf__row--set { grid-template-columns: repeat(4, 1fr); } }
.shelf__plank {
  height: 7px; margin-top: clamp(1.5rem, 3vw, 2.25rem);
  background: linear-gradient(180deg, var(--wood-deep-3), var(--wood) 45%, var(--wood-deep));
  border-radius: 2px;
  box-shadow: 0 1px 0 rgba(255,248,239,.16) inset, 0 8px 20px rgba(36,28,22,.20);
}

/* — the tome: a hardcover book with spine and fore-edge, in three dimensions — */
.tome {
  --depth: 15px;
  display: block; position: relative; text-decoration: none; color: var(--ink);
  perspective: 1500px;
}
/* every part of a tome is a <span>; each must be blockified or the
   aspect-ratio box never forms */
.tome__stage {
  display: block; position: relative; aspect-ratio: 3 / 4.4;
  transform-style: preserve-3d;
  transform: rotateY(0deg);
  transition: transform var(--dur-2) var(--ease-book);
  will-change: transform;
}
.tome:hover .tome__stage,
.tome:focus-visible .tome__stage { transform: rotateY(-27deg) rotateX(1.5deg) translateY(-6px); }

/* — turning the book over —
   A book whose back cover has been photographed does not merely tilt: it turns
   right over, the way you turn a book in your hands to read the blurb. The
   whole behaviour hangs off .tome--flip, which the templates add only when
   there is a back board to show, so every other book keeps the old tilt. */
.tome--flip:hover .tome__stage,
.tome--flip:focus-visible .tome__stage,
.tome--flip.is-turned .tome__stage {
  transform: rotateY(-180deg) translateY(-6px);
  transition-duration: .85s;
}
.tome__back {
  position: absolute; inset: 0; overflow: hidden;
  background: var(--paper-tint);
  border-radius: 3px 1px 1px 3px;   /* mirrored: the gutter is on the right now */
  /* rotate first, then push out along the turned axis — that lands the board on
     the far side of the block, facing away, where a back cover belongs */
  transform: rotateY(180deg) translateZ(calc(var(--depth) / 2));
  box-shadow: var(--shadow-book);
  backface-visibility: hidden;
}
.tome__back img { width: 100%; height: 100%; object-fit: cover; }
/* the gutter shadow, mirrored to the spine's new side */
.tome__back::after {
  content: ""; position: absolute; inset: 0 0 0 auto; width: 12%;
  background: linear-gradient(270deg, rgba(20,14,10,.36), rgba(20,14,10,.10) 45%, transparent);
  pointer-events: none;
}

.tome__face {
  position: absolute; inset: 0;
  background: var(--paper-tint); overflow: hidden;
  border-radius: 1px 3px 3px 1px;
  transform: translateZ(calc(var(--depth) / 2));
  box-shadow: var(--shadow-book);
  backface-visibility: hidden;
}
.tome__face img { width: 100%; height: 100%; object-fit: cover; }
/* the gutter shadow where the cover meets the spine */
.tome__face::after {
  content: ""; position: absolute; inset: 0 auto 0 0; width: 12%;
  background: linear-gradient(90deg, rgba(20,14,10,.36), rgba(20,14,10,.10) 45%, transparent);
  pointer-events: none;
}
/* a faint sheen that travels across the cover on hover */
.tome__face::before {
  content: ""; position: absolute; inset: -20% -60%; z-index: 2; pointer-events: none;
  background: linear-gradient(102deg, transparent 42%, rgba(255,252,240,.30) 50%, transparent 58%);
  transform: translateX(-60%);
  transition: transform .85s var(--ease-book);
}
.tome:hover .tome__face::before { transform: translateX(60%); }

.tome__spine {
  position: absolute; top: 0; bottom: 0; left: 0; width: var(--depth);
  transform-origin: left center;
  transform: translateZ(calc(var(--depth) / -2)) rotateY(-90deg);
  background: linear-gradient(90deg, #4E1B14, var(--kumkum-deep) 40%, #5C170F);
  border-radius: 2px 0 0 2px;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.tome__spine::before, .tome__spine::after {
  content: ""; position: absolute; left: 12%; right: 12%; height: 1px;
  background: var(--haldi); opacity: .75;
}
.tome__spine::before { top: 9%; }
.tome__spine::after  { bottom: 9%; }

.tome__edge {
  position: absolute; top: 1.5%; bottom: 1.5%; right: 0; width: var(--depth);
  transform-origin: right center;
  transform: translateZ(calc(var(--depth) / -2)) rotateY(90deg);
  background:
    repeating-linear-gradient(90deg, #EFE7D5 0 1px, #DCCFB4 1px 2px);
  box-shadow: inset -2px 0 4px rgba(36,28,22,.16);
}

/* The pool of shadow the book used to stand in. Removed with the board shadow
   above — half a shadow reads worse than none — but the element is left in the
   markup and in this file, so restoring it is a one-line change rather than a
   hunt through three templates. */
.tome__shadow { display: none; }

/* the caption beneath a tome */
.tome__label { display: block; margin-top: var(--s4); }
.tome__title {
  display: block;
  font-family: var(--f-display); font-size: 1.06rem; line-height: 1.34;
  margin: 0 0 .18rem; transition: color var(--dur) var(--ease);
}
.tome:hover .tome__title { color: var(--kumkum); }
.tome__meta {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .07em; color: var(--ink-3); line-height: 1.5;
}
.tome__honours {
  display: inline-flex; align-items: center; gap: .35em; margin-top: .35rem;
  font-size: var(--t-xs); letter-spacing: .1em; text-transform: uppercase;
  color: var(--haldi); font-weight: 600;
}

/* a typographic cover for titles with no photographed jacket —
   never a broken image, always a designed object */
.jacket {
  width: 100%; height: 100%;
  display: flex; flex-direction: column; justify-content: space-between;
  padding: 1.15rem 1rem 1rem 1.35rem; text-align: center;
  background:
    linear-gradient(150deg, #6E1A11, #8E2318 45%, #5F160E);
  color: #F6E8D6;
}
.jacket::before {
  content: ""; display: block; height: 1px; background: var(--haldi); opacity: .8;
}
.jacket b {
  font-family: var(--f-display); font-weight: 400;
  font-size: clamp(.9rem, 2.6cqw, 1.15rem); line-height: 1.42;
  display: flex; align-items: center; justify-content: center; flex: 1;
  padding-block: .6rem;
}
/* This is the author's name printed on a designed book jacket, not interface
   text — small is faithful to a cover at thumbnail size — but .62rem was below
   comfortable reading even for that, so it is nudged up. */
.jacket span {
  font-family: var(--f-latin); font-style: italic; font-size: .68rem;
  letter-spacing: .12em; text-transform: uppercase; color: rgba(246,232,214,.72);
  padding-top: .5rem; border-top: 1px solid rgba(176,138,44,.55);
}
.jacket--tint { background: linear-gradient(150deg, #35291D, #4A3728 45%, #2C2118); }

/* — the reading room: one book, presented — */
.tome-detail { display: grid; gap: clamp(2rem, 5vw, 4.5rem); align-items: start; }
@media (min-width: 56rem) { .tome-detail { grid-template-columns: minmax(15rem, 21rem) 1fr; } }
@media (min-width: 56rem) { .tome-detail__aside { position: sticky; top: calc(var(--head-h) + 2rem); } }
.tome-detail .tome { --depth: 22px; }
.tome-detail .tome__stage { transform: rotateY(-14deg) rotateX(2deg); }
.tome-detail .tome:hover .tome__stage { transform: rotateY(-24deg) rotateX(2deg); }
/* In the reading room the book already stands at an angle, so the turn carries
   it from -14° round to -194° — the same half-revolution, ending square on. */
.tome-detail .tome--flip:hover .tome__stage,
.tome-detail .tome--flip.is-turned .tome__stage { transform: rotateY(-194deg) rotateX(2deg); }

.tome-detail h1 { font-size: clamp(1.9rem, 4vw, 3.1rem); margin-bottom: var(--s2); }
.tome-detail__en {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-lede);
  color: var(--ink-2); margin-bottom: var(--s5);
}

/* the colophon — a book's particulars, set as a printer would */
.colophon { list-style: none; margin: 0 0 var(--s6); padding: 0; max-width: 34rem; }
.colophon li {
  display: grid; grid-template-columns: 8.5rem 1fr; gap: var(--s4);
  padding: .55rem 0; border-bottom: 1px dotted var(--line-firm); font-size: var(--t-sm);
}
.colophon li:first-child { border-top: 1px dotted var(--line-firm); }
.colophon dt, .colophon li > b {
  font-family: var(--f-latin); font-style: italic; font-weight: 400;
  letter-spacing: .1em; text-transform: uppercase; font-size: var(--t-xs);
  color: var(--ink-3); padding-top: .18em;
}
@media (max-width: 30rem) { .colophon li { grid-template-columns: 1fr; gap: 0; } }

/* the laurel — awards a book has won */
.laurel {
  background: linear-gradient(180deg, var(--paper-raised), var(--paper-tint));
  border: 1px solid var(--line);
  border-inline-start: 3px solid var(--haldi);
  border-radius: 0 var(--radius) var(--radius) 0;
  padding: clamp(1.25rem, 3vw, 1.85rem);
  margin-block: var(--s6);
  box-shadow: var(--shadow-1);
}
.laurel__head {
  display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap;
  font-family: var(--f-display); font-size: 1.18rem; margin-bottom: var(--s3);
}
.laurel__head .c {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .14em; text-transform: uppercase; color: var(--haldi);
}
.laurel ol { margin: 0; padding: 0; list-style: none; counter-reset: laurel; }
.laurel li {
  counter-increment: laurel; position: relative;
  padding: .45rem 0 .45rem 2.2rem; font-size: var(--t-sm); line-height: 1.65;
  border-top: 1px solid var(--line-soft);
}
.laurel li:first-child { border-top: 0; }
.laurel li::before {
  content: counter(laurel, decimal-leading-zero);
  position: absolute; left: 0; top: .55rem;
  font-family: var(--f-latin); font-style: italic; font-size: .72rem;
  color: var(--haldi); letter-spacing: .05em;
}
.laurel li .y { color: var(--ink-3); font-size: var(--t-xs); letter-spacing: .06em; }

/* --------------------------------------------- 09 the archive timeline */
.archive { position: relative; }
.archive__spine {
  position: absolute; left: 0; top: 0; bottom: 0; width: 1px;
  background: linear-gradient(180deg, transparent, var(--line-firm) 6%, var(--line-firm) 94%, transparent);
}
@media (min-width: 60rem) { .archive__spine { left: 9.5rem; } }

.leaf {
  position: relative;
  display: grid; gap: var(--s4);
  padding: 0 0 clamp(3rem, 7vw, 5.5rem) 2.25rem;
}
@media (min-width: 60rem) {
  .leaf { grid-template-columns: 9.5rem 1fr; gap: clamp(2.5rem, 5vw, 4.5rem); padding-left: 0; padding-bottom: clamp(4rem, 8vw, 7rem); }
  .leaf__year { text-align: end; padding-inline-end: 2.5rem; }
}
.leaf:last-child { padding-bottom: 0; }

.leaf__year { position: relative; }
.leaf__year b {
  display: block; font-family: var(--f-display); font-weight: 400;
  font-size: clamp(1.6rem, 3vw, 2.35rem); line-height: 1.1; color: var(--kumkum);
  letter-spacing: -.01em;
}
.leaf__year span {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink-4); margin-top: .25rem;
}
/* the node on the spine */
.leaf::before {
  content: ""; position: absolute; left: -4.5px; top: .75rem;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--paper); border: 1.5px solid var(--kumkum);
  transition: background-color var(--dur) var(--ease), transform var(--dur) var(--ease-out);
}
.leaf:hover::before { background: var(--kumkum); transform: scale(1.25); }
@media (min-width: 60rem) { .leaf::before { left: calc(9.5rem - 4.5px); } }

.leaf__body h3 { margin-bottom: var(--s2); font-size: clamp(1.3rem, 2.2vw, 1.75rem); }
.leaf__body p { color: var(--ink-2); max-width: 54ch; }
.leaf__body figure {
  margin: var(--s5) 0 0; max-width: 30rem;
}
.leaf__body figure img {
  width: 100%; border-radius: var(--radius); border: 1px solid var(--line);
  box-shadow: var(--shadow-2);
}
.leaf__body figcaption {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  color: var(--ink-3); margin-top: .55rem; letter-spacing: .04em;
}
.leaf__context {
  margin-top: var(--s4); padding-inline-start: var(--s4);
  border-inline-start: 2px solid var(--line);
  font-size: var(--t-sm); color: var(--ink-3); max-width: 48ch;
}
.leaf__context b {
  display: block; font-family: var(--f-latin); font-style: italic; font-weight: 400;
  font-size: var(--t-xs); letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-4); margin-bottom: .15rem;
}

/* ------------------------------------------------- 10 the honours hall */

/* the laureate plaques — books that swept a season */
.laureates { display: grid; gap: var(--s5); }
@media (min-width: 46rem) { .laureates { grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); } }
.plaque {
  position: relative; text-align: center; text-decoration: none; color: inherit;
  background: linear-gradient(170deg, var(--paper-raised), var(--paper-tint));
  border: 1px solid var(--line);
  padding: clamp(1.75rem, 4vw, 2.5rem) var(--s5);
  box-shadow: var(--shadow-1);
  transition: transform var(--dur-2) var(--ease-out), box-shadow var(--dur-2) var(--ease-out);
}
.plaque:hover { transform: translateY(-4px); box-shadow: var(--shadow-2); }
.plaque__count {
  display: block; font-family: var(--f-display); font-size: clamp(3rem, 7vw, 4.4rem);
  line-height: 1; color: var(--kumkum);
}
.plaque__of {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .2em; text-transform: uppercase;
  color: var(--haldi); margin-top: .45rem;
}
.plaque h3 { margin: var(--s4) 0 .2rem; font-size: 1.25rem; }
.plaque .en { font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .1em; color: var(--ink-3); display: block; }
.plaque .rule { max-width: 5rem; margin: var(--s4) auto 0; }

/* the honours register — a ledger of citations */
.register { max-width: 54rem; margin-inline: auto; }
.honour {
  display: grid; grid-template-columns: 5.5rem 1fr; gap: var(--s5);
  padding: clamp(1.1rem, 2.5vw, 1.6rem) var(--s3);
  border-bottom: 1px solid var(--line-soft);
  align-items: baseline;
  transition: background-color var(--dur) var(--ease);
}
.honour:first-child { border-top: 1px solid var(--line-soft); }
.honour:hover { background: var(--paper-raised); }
.honour__year {
  font-family: var(--f-display); font-size: 1.3rem; color: var(--kumkum); line-height: 1.2;
}
.honour__year span {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: .66rem; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-4);
}
.honour h3 { margin-bottom: .18rem; font-size: 1.14rem; line-height: 1.4; }
.honour p { margin: 0; color: var(--ink-2); font-size: var(--t-sm); }
@media (max-width: 34rem) {
  .honour { grid-template-columns: 1fr; gap: .3rem; }
  .honour__year { font-size: 1.05rem; }
  .honour__year span { display: inline; margin-inline-start: .5rem; }
}

/* a single citation, given the space of an exhibit label */
.citation {
  max-width: 44rem; margin-inline: auto; text-align: center;
  padding: clamp(2rem, 5vw, 3.5rem) clamp(1.5rem, 4vw, 3rem);
  border: 1px solid rgba(176,138,44,.42);
  background: rgba(176,138,44,.05);
  position: relative;
}
.citation blockquote {
  font-family: var(--f-display); font-size: clamp(1.15rem, 2.1vw, 1.5rem);
  line-height: 1.72; color: var(--ink);
}
.section--night .citation { border-color: rgba(227,196,118,.55); background: rgba(227,196,118,.055); }
.section--night .citation blockquote { color: var(--paper); }
.citation cite {
  display: block; font-style: normal; margin-top: var(--s5);
  font-family: var(--f-latin); font-size: var(--t-sm); color: var(--ink-3);
}
.citation cite b { display: block; font-family: var(--f-display); font-weight: 400;
  font-size: 1.1rem; color: var(--ink-2); margin-bottom: .15rem; }
.section--night .citation cite b { color: var(--paper-tint); }

/* ------------------------------------------------- 11 the exhibition */

/* museum hang: photographs at deliberately varied scale, not a uniform grid */
.hang {
  display: grid; gap: clamp(1.25rem, 3vw, 2.5rem);
  grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 48rem) { .hang { grid-template-columns: repeat(6, 1fr); grid-auto-flow: dense; } }
/* On a phone the wall is a plain two across, so an odd number of photographs
   leaves the last one in a half-width slot with a hole beside it. It is hung
   full width instead — the wall always ends on a straight edge. */
@media (max-width: 47.99rem) { .hang > :nth-child(odd):last-child { grid-column: span 2; } }

.exhibit { margin: 0; position: relative; }
.exhibit a {
  display: block; position: relative; overflow: hidden;
  background: var(--paper-deep);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-1);
  transition: box-shadow var(--dur-2) var(--ease-out), transform var(--dur-2) var(--ease-out);
}
.exhibit a::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 55%, rgba(20,14,10,.55));
  opacity: 0; transition: opacity var(--dur-2) var(--ease);
}
.exhibit a:hover, .exhibit a:focus-visible { transform: translateY(-3px); box-shadow: var(--shadow-3); }
.exhibit a:hover::after, .exhibit a:focus-visible::after { opacity: 1; }
.exhibit img {
  width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4 / 3;
  transition: transform 1.1s var(--ease-book);
}
.exhibit a:hover img { transform: scale(1.045); }
.exhibit__zoom {
  position: absolute; inset: auto var(--s4) var(--s4) auto; z-index: 2;
  width: 2.4rem; height: 2.4rem; border-radius: 50%;
  background: rgba(247,242,230,.92); color: var(--ink);
  display: grid; place-items: center; font-size: .9rem;
  opacity: 0; transform: scale(.8);
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease-out);
}
.exhibit a:hover .exhibit__zoom, .exhibit a:focus-visible .exhibit__zoom { opacity: 1; transform: none; }
.exhibit figcaption {
  padding-top: .65rem; font-size: var(--t-xs); color: var(--ink-3);
  line-height: 1.6; letter-spacing: .02em;
}
.exhibit figcaption b {
  display: block; font-family: var(--f-display); font-weight: 400;
  font-size: var(--t-sm); color: var(--ink-2); margin-bottom: .1rem;
}

/* the hang rhythm — a curated sequence of spans */
@media (min-width: 48rem) {
  .exhibit { grid-column: span 2; }
  .exhibit--wide  { grid-column: span 4; }
  .exhibit--full  { grid-column: span 6; }
  .exhibit--tall  { grid-column: span 2; }
  .exhibit--wide img { aspect-ratio: 16 / 9; }
  .exhibit--full img { aspect-ratio: 21 / 9; }
  .exhibit--tall img { aspect-ratio: 3 / 4; }
}

/* — the viewing room: full-screen lightbox — */
.viewer {
  position: fixed; inset: 0; z-index: 150;
  background: rgba(17, 12, 8, .965);
  display: grid; grid-template-rows: auto 1fr auto;
  opacity: 0; visibility: hidden;
  transition: opacity var(--dur-2) var(--ease-out), visibility var(--dur-2);
}
.viewer.is-open { opacity: 1; visibility: visible; }
.viewer__bar {
  display: flex; align-items: center; justify-content: space-between; gap: var(--s4);
  padding: var(--s4) var(--gutter); color: var(--paper-tint);
}
.viewer__count {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .18em; text-transform: uppercase; color: var(--ink-4);
  font-variant-numeric: tabular-nums;
}
/* The stage is a flex box with min-height:0, so the 1fr row is definite and the
   plate's percentage limits resolve against it. A grid row would size to the
   photograph first and let a tall plate run off the screen. overflow:hidden is
   the belt to that pair of braces. */
.viewer__stage {
  position: relative; min-height: 0; overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  padding-inline: clamp(3.75rem, 9vw, 7rem);
}
.viewer__stage img {
  max-width: 100%; max-height: 100%; width: auto; height: auto;
  object-fit: contain;
  box-shadow: 0 24px 70px rgba(0, 0, 0, .55);
  opacity: 0; transform: scale(.985);
  transition: opacity .38s var(--ease-out), transform .38s var(--ease-out);
}
.viewer__stage img.is-shown { opacity: 1; transform: none; }
.viewer__label {
  padding: var(--s5) var(--gutter) var(--s6); text-align: center;
  max-width: 42rem; margin-inline: auto;
}
.viewer__label b {
  display: block; font-family: var(--f-display); font-weight: 400; font-size: 1.15rem;
  color: var(--paper); margin-bottom: .3rem;
}
.viewer__label span { font-size: var(--t-sm); color: var(--ink-4); line-height: 1.65; }
.viewer__nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 3.25rem; height: 3.25rem; border-radius: 50%;
  border: 1px solid rgba(247,242,230,.28); background: rgba(247,242,230,.06);
  color: var(--paper); cursor: pointer; display: grid; place-items: center;
  font-size: 1.1rem; transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.viewer__nav:hover { background: rgba(247,242,230,.16); border-color: rgba(247,242,230,.6); }
.viewer__nav--prev { left: clamp(.5rem, 2vw, 1.5rem); }
.viewer__nav--next { right: clamp(.5rem, 2vw, 1.5rem); }
.viewer__close {
  width: 2.9rem; height: 2.9rem; border-radius: 50%;
  border: 1px solid rgba(247,242,230,.28); background: transparent;
  color: var(--paper); cursor: pointer; font-size: 1.05rem;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.viewer__close:hover { background: rgba(247,242,230,.14); border-color: var(--paper); }
@media (max-width: 40rem) {
  .viewer__nav { width: 2.6rem; height: 2.6rem; }
  .viewer__label { padding-bottom: var(--s5); }
}

/* ------------------------------------------------ 12 magazine & prose */

/* the featured piece — a magazine's opening spread */
.feature {
  display: grid; gap: clamp(1.75rem, 4vw, 3.5rem); align-items: center;
  text-decoration: none; color: inherit;
}
@media (min-width: 52rem) { .feature { grid-template-columns: 1.05fr .95fr; } }
.feature__art {
  position: relative; overflow: hidden; background: var(--paper-deep);
  border: 1px solid var(--line); box-shadow: var(--shadow-2);
}
.feature__art img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
  transition: transform 1.1s var(--ease-book); }
.feature:hover .feature__art img { transform: scale(1.04); }
.feature h2 { font-size: clamp(1.6rem, 3vw, 2.4rem); margin-block: var(--s3); }
.feature:hover h2 { color: var(--kumkum); }
.feature p { color: var(--ink-2); }

/* the article ledger */
.ledger { border-top: 1px solid var(--line); }
.piece {
  display: grid; gap: var(--s2) var(--s6); align-items: baseline;
  padding: clamp(1.5rem, 3.5vw, 2.5rem) var(--s3);
  border-bottom: 1px solid var(--line);
  text-decoration: none; color: inherit;
  transition: background-color var(--dur) var(--ease), padding-inline-start var(--dur) var(--ease);
}
@media (min-width: 46rem) { .piece { grid-template-columns: 7.5rem 1fr auto; } }
.piece:hover { background: var(--paper-raised); padding-inline-start: 1.1rem; }
.piece__date {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .1em; color: var(--ink-3); font-variant-numeric: tabular-nums;
}
.piece h3 { margin-bottom: .3rem; transition: color var(--dur) var(--ease); }
.piece:hover h3 { color: var(--kumkum); }
.piece p { color: var(--ink-2); font-size: var(--t-sm); margin: 0; max-width: 62ch; }
.piece__go { color: var(--kumkum); font-size: var(--t-sm); white-space: nowrap; }
.piece__go .arrow { display: inline-block; transition: transform var(--dur) var(--ease); }
.piece:hover .piece__go .arrow { transform: translateX(4px); }

/* the reading page */
.prose {
  max-width: var(--wrap-read); margin-inline: auto;
  font-size: calc(var(--t-body) * var(--read-scale, 1));
  line-height: 1.85;
}
.prose > p:first-of-type::first-letter {
  font-family: var(--f-display); font-size: 3.1em; line-height: .84;
  float: inline-start; padding: .1em .14em 0 0; color: var(--kumkum);
}
.prose p { max-width: none; margin-bottom: 1.4em; }
.prose h3 { margin: 2.2em 0 .7em; }
.prose h4 { margin: 1.8em 0 .5em; }
.prose ul, .prose ol { padding-inline-start: 1.35em; margin-bottom: 1.4em; }
.prose li { margin-bottom: .5em; }
.prose blockquote {
  margin: 2em 0; padding-inline-start: 1.5em;
  border-inline-start: 2px solid var(--haldi);
  font-family: var(--f-display); font-size: 1.15em; line-height: 1.65; color: var(--ink-2);
}
.prose img { margin: 2em auto; border: 1px solid var(--line); box-shadow: var(--shadow-2); }
.prose a { font-weight: 500; }
.prose--plain > p:first-of-type::first-letter { font-size: inherit; float: none; padding: 0; color: inherit; }

/* the reading toolbar — a small set of typographic controls */
.readbar {
  display: flex; align-items: center; justify-content: space-between; gap: var(--s4);
  flex-wrap: wrap;
  max-width: var(--wrap-read); margin: 0 auto var(--s7);
  padding: .6rem .75rem; border-block: 1px solid var(--line-soft);
}
.readbar__group { display: flex; align-items: center; gap: .35rem; }
.readbar__label {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .14em; text-transform: uppercase; color: var(--ink-4);
  margin-inline-end: .35rem;
}
.readbar button {
  min-width: 38px; min-height: 34px; padding: 0 .6rem;
  border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--paper-raised); color: var(--ink-2);
  font-family: var(--f-text); font-size: var(--t-sm); cursor: pointer;
  transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease),
              background-color var(--dur) var(--ease);
}
.readbar button:hover { border-color: var(--kumkum); color: var(--kumkum); }
.readbar button[aria-pressed="true"] { background: var(--ink); border-color: var(--ink); color: var(--paper); }

/* calm reading mode: the page recedes, the text remains */
html[data-reading="on"] .head__tools .langswitch,
html[data-reading="on"] .pager { display: none; }
html[data-reading="on"] body { background-color: #FBF7EE; }
html[data-reading="on"] .prose { --read-scale: 1.1; }

/* newspaper clippings & magazine covers */
.clippings {
  display: grid; gap: clamp(1.25rem, 3vw, 2.25rem);
  grid-template-columns: repeat(auto-fill, minmax(min(13rem, 100%), 1fr));
}
.clipping {
  margin: 0; background: var(--paper-raised);
  border: 1px solid var(--line); box-shadow: var(--shadow-1);
  padding: .5rem .5rem 0; position: relative;
  transform: rotate(var(--tilt, 0deg));
  transition: transform var(--dur-2) var(--ease-out), box-shadow var(--dur-2) var(--ease-out);
}
.clipping:nth-child(3n+1) { --tilt: -.7deg; }
.clipping:nth-child(3n+2) { --tilt: .5deg; }
.clipping:hover { transform: rotate(0deg) translateY(-4px); box-shadow: var(--shadow-2); }
.clipping img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; }
.clipping figcaption {
  padding: .65rem .35rem .8rem; font-size: var(--t-xs); color: var(--ink-3); line-height: 1.55;
}
.clipping figcaption b { display: block; color: var(--ink-2); font-weight: 600; }

/* ------------------------------------------------------ 13 media & video */
.reels {
  display: grid; gap: clamp(1.5rem, 3vw, 2.5rem);
  grid-template-columns: repeat(auto-fill, minmax(min(19rem, 100%), 1fr));
}
.reel { margin: 0; }
.reel__frame {
  position: relative; width: 100%; padding: 0; aspect-ratio: 16 / 9;
  overflow: hidden; cursor: pointer; display: block;
  border: 1px solid var(--line-firm); background: var(--night);
  box-shadow: var(--shadow-1);
  transition: box-shadow var(--dur-2) var(--ease-out);
}
.reel__frame:hover { box-shadow: var(--shadow-3); }
.reel__frame img {
  width: 100%; height: 100%; object-fit: cover; opacity: .82;
  transition: opacity var(--dur-2) var(--ease), transform 1s var(--ease-book);
}
.reel__frame:hover img { opacity: 1; transform: scale(1.04); }
.reel__play {
  position: absolute; inset: 0; margin: auto;
  width: 4.2rem; height: 4.2rem; border-radius: 50%;
  background: rgba(142,35,24,.94); color: #FFF8EF;
  display: grid; place-items: center; font-size: 1.15rem; padding-inline-start: .2rem;
  box-shadow: 0 8px 24px rgba(0,0,0,.35);
  transition: transform var(--dur) var(--ease-out), background-color var(--dur) var(--ease);
  pointer-events: none;
}
.reel__frame:hover .reel__play { transform: scale(1.1); background: var(--kumkum-deep); }
.reel__frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.reel figcaption { padding-top: var(--s3); }
.reel figcaption b { font-family: var(--f-display); font-weight: 400; font-size: 1.04rem; display: block; }
.reel figcaption span {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3);
}

/* the press columns */
.columns {
  display: grid; gap: clamp(1.75rem, 4vw, 3rem);
  grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
}
.column h3 {
  display: flex; align-items: center; gap: .6rem;
  font-size: 1.18rem; padding-bottom: var(--s3); margin-bottom: var(--s3);
  border-bottom: 1px solid var(--line);
}
.column ul { list-style: none; margin: 0; padding: 0; }
.column li { padding: .6rem 0; border-bottom: 1px dotted var(--line-firm); }
.column li:last-child { border-bottom: 0; }
.column li b { font-weight: 500; font-size: var(--t-body); }
.column li span { display: block; font-size: var(--t-sm); color: var(--ink-3); line-height: 1.55; }

/* ------------------------------------------------------------ 14 events */
.diary { max-width: 52rem; margin-inline: auto; }
.entry {
  display: grid; grid-template-columns: auto 1fr; gap: var(--s5);
  padding: clamp(1.25rem, 3vw, 1.85rem) var(--s3);
  border-bottom: 1px solid var(--line-soft); align-items: start;
  transition: background-color var(--dur) var(--ease);
}
.entry:first-child { border-top: 1px solid var(--line-soft); }
.entry:hover { background: var(--paper-raised); }
.entry__date {
  text-align: center; min-width: 4.6rem; padding: .55rem .6rem;
  background: var(--paper-raised); border: 1px solid var(--line);
  box-shadow: var(--shadow-1); border-radius: var(--radius);
}
.entry__date b {
  display: block; font-family: var(--f-display); font-weight: 400;
  font-size: 1.55rem; line-height: 1.05; color: var(--kumkum);
}
.entry__date span {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: .74rem; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
  margin-top: .1rem;
}
.entry h3 { margin-bottom: .25rem; font-size: 1.16rem; }
.entry__meta { font-size: var(--t-sm); color: var(--ink-2); margin: 0; }
.entry__meta .role { color: var(--kumkum); }
.entry p.note { font-size: var(--t-sm); color: var(--ink-3); margin: .4rem 0 0; }

/* ----------------------------------------------- 14b sets that must close ---
   Auto-fitted grids are right for lists whose length is content — a genre's
   shelf, a gallery wall. They are wrong for SETS: three credo columns, three
   reels, six facts. There the column count is decided by how wide the track
   happens to be, and at one width in three the set breaks two-and-one, leaving
   a single item marooned under a full row. It reads as a mistake because it is
   one — nobody chose it.

   These rules size a set by counting it. `:has(> :nth-child(n):last-child)`
   means "this container holds exactly n items", so each rule applies to one set
   size and to nothing else; a list that happens to hold three today and five
   tomorrow keeps the auto-fit above. Browsers without `:has()` — none current —
   simply keep the old behaviour, which is the point of doing it this way. */

/* exactly three: one column, then three. Never two — and a prose column set
   two-and-one at 600px is the worst of both, so below the breakpoint it stacks. */
.columns:has(> :nth-child(3):last-child) { grid-template-columns: 1fr; }
@media (min-width: 46rem) {
  .columns:has(> :nth-child(3):last-child),
  .laureates:has(> :nth-child(3):last-child),
  .reels:has(> :nth-child(3):last-child) { grid-template-columns: repeat(3, 1fr); }
}

/* exactly four: two-by-two on a tablet, one row on a laptop */
@media (min-width: 46rem) { .columns:has(> :nth-child(4):last-child) { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 62rem) { .columns:has(> :nth-child(4):last-child) { grid-template-columns: repeat(4, 1fr); } }

/* exactly six facts on their plinths: three-by-two, then one long row */
@media (min-width: 46rem) { .plinths:has(> :nth-child(6):last-child) { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 64rem) { .plinths:has(> :nth-child(6):last-child) { grid-template-columns: repeat(6, 1fr); } }

/* ------------------------------------------------- 15 forms & bands */
.form-grid { display: grid; gap: var(--s5); }
@media (min-width: 40rem) {
  .form-grid--2 { grid-template-columns: 1fr 1fr; }
  .form-grid--2 .span2 { grid-column: 1 / -1; }
}
.field { position: relative; }
.field > label {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .13em; text-transform: uppercase;
  color: var(--ink-3); margin-bottom: .4rem;
}
.field > label .req { color: var(--kumkum); font-style: normal; }
.field input, .field textarea, .field select {
  width: 100%; font-family: var(--f-text); font-size: var(--t-body); color: var(--ink);
  background: var(--paper-raised);
  border: 1px solid var(--line-firm); border-radius: var(--radius);
  padding: .78em .95em; line-height: 1.6;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease),
              background-color var(--dur) var(--ease);
}
.field textarea { resize: vertical; min-height: 8rem; }
.field input::placeholder, .field textarea::placeholder { color: var(--ink-4); }
.field input:hover, .field textarea:hover { border-color: var(--ink-4); }
.field input:focus, .field textarea:focus, .field select:focus {
  outline: none; border-color: var(--kumkum); background: #fff;
  box-shadow: 0 0 0 3px var(--kumkum-wash);
}
.field .err { color: var(--kumkum); font-size: var(--t-sm); margin: .35rem 0 0; }
.field [aria-invalid="true"] { border-color: var(--kumkum); }
.field__hint { font-size: var(--t-xs); color: var(--ink-4); margin: .35rem 0 0; }

.notice {
  padding: var(--s4) var(--s5); border-radius: var(--radius);
  margin-bottom: var(--s5); border: 1px solid; max-width: var(--measure);
  display: flex; gap: var(--s3); align-items: flex-start;
}
.notice--ok  { background: var(--shalu-soft); border-color: var(--shalu); color: #1F3E2D; }
.notice--err { background: var(--kumkum-soft); border-color: var(--kumkum); color: var(--kumkum-deep); }
.notice b { font-weight: 600; }

/* the newsletter band, printed on night paper */
.band { text-align: center; }
.band .rule { max-width: 12rem; margin: var(--s5) auto; }
.band form {
  display: flex; gap: var(--s3); justify-content: center; flex-wrap: wrap;
  margin-top: var(--s6);
}
.band input[type="email"] {
  font-family: var(--f-text); font-size: var(--t-body);
  padding: .85em 1.1em; min-width: min(24rem, 82vw);
  /* A field's edge has to be findable: --night-3 on --night was 1.6:1, below the
     3:1 a control's boundary owes the reader. Light grain reads as an edge. */
  border: 1px solid var(--wood-lit); border-radius: var(--radius);
  background: var(--night-2); color: var(--paper);
  transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
.band input[type="email"]::placeholder { color: var(--ink-3); }
.band input[type="email"]:focus {
  outline: none; border-color: var(--haldi); background: #2E251C;
}

/* the folded question — FAQ */
.folded { border-bottom: 1px solid var(--line-soft); }
.folded:first-of-type { border-top: 1px solid var(--line-soft); }
.folded summary {
  display: flex; align-items: flex-start; gap: var(--s4);
  padding: 1.15rem .25rem; cursor: pointer; list-style: none;
  font-family: var(--f-display); font-size: 1.14rem; line-height: 1.45;
  transition: color var(--dur) var(--ease);
}
.folded summary::-webkit-details-marker { display: none; }
.folded summary:hover { color: var(--kumkum); }
.folded summary::after {
  content: "+"; margin-inline-start: auto; flex: 0 0 auto;
  color: var(--kumkum); font-size: 1.35rem; line-height: 1.1;
  transition: transform var(--dur-2) var(--ease-out);
}
.folded[open] summary::after { transform: rotate(45deg); }
.folded__body { padding: 0 .25rem 1.35rem; color: var(--ink-2); font-size: var(--t-sm); }
.folded__body p { max-width: 62ch; }

/* -------------------------------------------- 16 the closing chapter */

/* the pager — "turn the page" */
.pager { border-top: 1px solid var(--line); background-color: var(--paper-tint); }
.pager a {
  display: flex; flex-direction: column; align-items: center; gap: .35rem;
  padding: clamp(2.25rem, 5vw, 3.5rem) var(--gutter);
  text-decoration: none; color: var(--ink);
  transition: background-color var(--dur-2) var(--ease);
}
.pager a:hover { background: var(--paper-raised); }
.pager b {
  font-family: var(--f-display); font-weight: 400;
  font-size: clamp(1.4rem, 3vw, 2.1rem); line-height: 1.3; text-align: center;
}
.pager .arrow { color: var(--kumkum); display: inline-block; transition: transform var(--dur) var(--ease); }
.pager a:hover .arrow { transform: translateX(6px); }
.pager .en {
  font-family: var(--f-latin); font-style: italic; font-size: var(--t-xs);
  letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3);
}

/* the colophon page — a footer that closes the book */

/* The footer is printed on walnut, but every colour inside it was still being
   drawn from the ink scale — four dilutions mixed to sit on WHITE paper. On the
   dark ground that read from merely dim (the colophon bar, at 2.9:1) to very
   nearly invisible: the newsletter heading is plain `--ink`, #1F1913 on #3B2A1C,
   which is 1.2:1 — a heading no one could read.

   Rather than repaint two dozen selectors, the ink scale is re-mixed for this
   one panel: same four steps, same warmth, inverted for a dark ground. Every
   rule beneath keeps working and every one of them now passes AA. */
.foot {
  /* the same walnut panel an inverted chapter is printed on, grain and all —
     the footer used to be the one dark surface on the site with no grain, and
     it read as a flat block of brown rather than as the back board of the book */
  background-color: var(--night);
  background-image: repeating-linear-gradient(90deg,
      rgba(255, 246, 232, .020) 0 1px,
      transparent 1px 4px,
      rgba(0, 0, 0, .045) 4px 5px,
      transparent 5px 13px);
  position: relative;

  --ink:   var(--paper);   /* headings                    — 15.1:1 */
  --ink-2: #EFE7DA;        /* the standfirst              — 11.2:1 */
  --ink-3: #C6B8A4;        /* small caps, the colophon bar —  7.0:1 */
  --ink-4: #D8CCBA;        /* the blurb                   —  8.7:1 */

  color: var(--ink-4);
}
.foot::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px;
  background: var(--foil); opacity: .6;
}
/* Devanagari display type is given letterpress relief on paper — a pale shadow
   under the stroke. On wood that same shadow is a halo, so it is lifted. */
.foot h1, .foot h2, .foot h3 { text-shadow: none; }
/* the third rule: envoi · newsletter · colophon are three separate registers */
.foot .band { border-bottom: 1px solid var(--wood-deep-3); }

/* the envoi — the author's parting line, in her own hand */
.envoi {
  text-align: center;
  padding: clamp(3rem, 7vw, 5rem) var(--gutter) clamp(2rem, 5vw, 3.5rem);
  /* the rules that part the footer's three registers: --night-2 on --night was
     invisible, so they read as gaps rather than as divisions */
  border-bottom: 1px solid var(--wood-deep-3);
}
.envoi q {
  display: block; quotes: none; max-width: 34rem; margin-inline: auto;
  font-family: var(--f-display); font-size: clamp(1.3rem, 2.8vw, 1.95rem);
  line-height: 1.62; color: var(--paper);
}
/* the English gloss under the Marathi line — a translator's footnote, set small
   so it never competes with the line it is glossing */
.envoi__gloss {
  display: block; margin-top: var(--s3);
  font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-sm); letter-spacing: .06em; color: var(--ink-4);
}
.envoi .sig {
  display: block; font-family: var(--f-hand);
  font-size: clamp(1.6rem, 3.4vw, 2.3rem); color: var(--haldi-lit);
  margin-top: var(--s6); line-height: 1.3;
}
.envoi .sig small {
  display: block; font-family: var(--f-latin); font-style: italic;
  font-size: .68rem; letter-spacing: .2em; text-transform: uppercase;
  color: var(--ink-3); margin-top: .5rem;
}

.foot__in {
  display: grid; gap: var(--s7);
  padding-block: clamp(2.75rem, 6vw, 4.5rem);
}
@media (min-width: 52rem) { .foot__in { grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: var(--s6); } }
.foot h4 {
  color: var(--paper-tint); font-family: var(--f-latin); font-style: italic;
  font-weight: 400; font-size: var(--t-xs); letter-spacing: .2em; text-transform: uppercase;
  margin-bottom: var(--s4);
}
.foot ul { list-style: none; margin: 0; padding: 0; }
.foot li { padding: .28rem 0; font-size: var(--t-sm); line-height: 1.6; }
.foot a { color: var(--paper-tint); text-decoration: none; }
.foot a:hover { color: var(--haldi-lit); text-decoration: underline; text-underline-offset: .25em; }
.foot__mark {
  display: flex; align-items: center; gap: .7rem;
  font-family: var(--f-display); font-size: 1.6rem; line-height: 1;
  color: var(--paper); margin-bottom: var(--s4);
}
.foot__glyph { opacity: .96; }
.foot__blurb { font-size: var(--t-sm); line-height: 1.75; max-width: 34ch; color: var(--ink-4); }
.foot__social { display: flex; gap: .5rem; margin-top: var(--s5); }
.foot__social a {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--wood-lit); display: grid; place-items: center;
  transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
.foot__social a:hover { border-color: var(--haldi); background: rgba(176,138,44,.12); text-decoration: none; }
.foot__social svg { width: 17px; height: 17px; fill: currentColor; }

.foot__bar {
  border-top: 1px solid var(--wood-deep-3); padding-block: var(--s5);
  display: flex; flex-wrap: wrap; gap: var(--s3) var(--s5);
  justify-content: space-between; align-items: center;
  font-size: var(--t-xs); color: var(--ink-3); letter-spacing: .03em;
}
.foot__bar a { color: var(--ink-3); }

/* the maker's credit — the same weight as the colophon beside it, so it reads
   as one of the notes at the foot of the page rather than as an advertisement */
.foot__by { display: inline-flex; align-items: center; gap: .38em; }
.foot__by a { color: var(--ink-3); text-decoration: none; }
.foot__by a:hover { color: var(--haldi-lit); text-decoration: underline; text-underline-offset: .25em; }
/* kumkum is the site's colour for "this matters", but at #8E2318 on walnut it
   is 1.4:1 — a heart nobody can see. The footer's own gold carries it. */
.foot__heart { color: var(--haldi); font-size: 1.05em; line-height: 1; }

/* ------------------------------------------ 17 motion · a11y · print */

/* scroll reveal — a 14px rise, nothing more */
.reveal { opacity: 0; transform: translateY(14px); }
.reveal.is-in {
  opacity: 1; transform: none;
  transition: opacity .62s var(--ease-out), transform .62s var(--ease-out);
  transition-delay: var(--d, 0ms);
}

/* text that sets itself line by line — used once, on the masthead */
.set-lines > * { display: block; }
.set-lines.is-ready > * {
  opacity: 0; transform: translateY(.5em);
  animation: setline .85s var(--ease-out) forwards;
  animation-delay: calc(var(--i, 0) * 110ms);
}
@keyframes setline { to { opacity: 1; transform: none; } }

/* utilities */
.center { text-align: center; }
/* paragraphs carry a 66ch measure; a centred one must also centre its box */
p.center { margin-inline: auto; }
.muted { color: var(--ink-2); }
.small { font-size: var(--t-sm); }
.xs { font-size: var(--t-xs); }
.mt0 { margin-top: 0 !important; }
.mb0 { margin-bottom: 0 !important; }
.mt5 { margin-top: var(--s5); }
.mt6 { margin-top: var(--s6); }
.mt7 { margin-top: var(--s7); }
.flow > * + * { margin-top: var(--s4); }
.stack-end { display: flex; justify-content: center; margin-top: clamp(2.25rem, 5vw, 3.5rem); }
.nowrap { white-space: nowrap; }
.visually-hidden {
  position: absolute !important; width: 1px; height: 1px; margin: -1px;
  padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
.empty {
  text-align: center; padding: clamp(2.5rem, 6vw, 4rem) var(--s5);
  border: 1px dashed var(--line-firm); border-radius: var(--radius);
  color: var(--ink-3); max-width: 40rem; margin-inline: auto;
}
.empty .bindi { margin-bottom: var(--s4); }

/* offscreen chapters are not laid out until they are near —
   the single largest rendering win on a long editorial page */
.cv { content-visibility: auto; contain-intrinsic-size: auto 720px; }

/* — reduced motion: the design must survive without a single transition — */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1; transform: none; }
  .set-lines.is-ready > * { opacity: 1; transform: none; animation: none; }
  *, *::before, *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important; scroll-behavior: auto !important;
  }
  .tome:hover .tome__stage { transform: none; }
}

/* — forced colours / high contrast — */
@media (forced-colors: active) {
  .rule::before, .rule::after, .progress__bar { forced-color-adjust: none; background: LinkText; }
  .btn, .chip, .field input, .field textarea { border: 1px solid ButtonBorder; }
  .tome__face, .exhibit a { border: 1px solid CanvasText; }
}

/* ==========================================================================
   18 · the alignment system

   One page, one axis. Components used to narrow and centre themselves
   individually — a register at 54rem auto, a citation at 44rem auto, a FAQ
   list at 46rem auto — which produced four different left edges on a single
   screen. Narrowing now happens ONCE, on the section's wrap; everything
   inside inherits that edge.
   ========================================================================= */

/* ONE page box. Previously .wrap (75rem), .wrap--wide (88rem) and .wrap--mid
   (58rem) were each centred in the viewport, so three sections of the same page
   started at three different x positions. Now every section shares the same
   outer box, and "narrow" or "wide" is expressed as a cap on the CONTENT —
   which bounds the measure on the right without ever moving the left edge. */
.wrap--wide { max-width: var(--wrap); }
.wrap--mid  { max-width: var(--wrap); }
.wrap--mid > * { max-width: 58rem; }

/* Components keep a bounded measure — a 75rem-wide list of awards is unreadable —
   but they bound it on the RIGHT only. The left edge always stays on the wrap. */
.register { max-width: 58rem; margin-inline: 0; }
.citation { max-width: 46rem; margin-inline: 0; text-align: start; }
.ledger   { max-width: 64rem; margin-inline: 0; }
.archive,
.diary    { margin-inline: 0; }

.citation cite { text-align: start; }

/* Rows meet the wrap edge rather than sitting on a private inset. */
.honour { padding-inline: 0; }
.piece  { padding-inline: 0; }
.piece:hover { padding-inline-start: .9rem; }
.folded summary,
.folded__body { padding-inline: 0; }

/* "Continue reading" belongs to the column it closes, not to the page centre.
   These are <p>, so they inherit the 66ch prose measure — meaningless for a row
   of buttons, and enough to wrap one on a narrow column. */
.stack-end { justify-content: flex-start; max-width: none; }

/* A section footer that spans the content it closes: the action stays on the
   page's axis, a quiet note closes the line on the right. */
.stack-end--split {
  justify-content: space-between;
  align-items: center;
  gap: var(--s4) var(--s5);
  flex-wrap: wrap;
}
.stack-end__note {
  font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3);
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------- Devanagari tracking --
   The small-caps label treatment across this site is a Latin device: wide
   letter-spacing plus uppercase. Devanagari has no case, and tracking pulls the
   glyphs off their shirorekha — "प्रकरण पहिले" was rendering as loose, separated
   parts of words. On a Marathi page those labels lose the tracking and the
   (meaningless) uppercasing, and take the Devanagari face instead of Fraunces. */
html[lang="mr"] :is(
  .folio, .chapter-head__no, .shelf__count, .stack-end__note, .plinth span,
  .plinth em, .imprint__sub, .foot h4, .plaque__of, .masthead h1 .pre,
  .honour__year span, .field label, .readbar__label, .envoi .sig small,
  .tome__honours, .exhibit figcaption, .piece__date, .search__results .k,
  .bg-plate__meta, .panel__head, .specimen__meta span, .app__note
) {
  letter-spacing: .015em;
  text-transform: none;
  font-style: normal;
  font-family: var(--f-text);
}
/* The chapter numeral keeps the display face; only its tracking relaxes. */
html[lang="mr"] .chapter-head__no { font-family: var(--f-display); }
.chapter-head--center ~ .stack-end,
.section--center .stack-end { justify-content: center; }

/* A shelf or gallery-room heading: title, count, rule — on the page's axis. */
.shelf__head { margin-bottom: var(--s6); }
.shelf__head h2 {
  font-size: var(--t-3);
  margin-bottom: .25rem;
}
.shelf__count {
  display: block;
  font-family: var(--f-latin); font-style: italic;
  font-size: var(--t-xs); letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink-3);
}
.shelf__head .rule { max-width: 12rem; margin: var(--s4) 0 0; }

/* The register's decade rule now spans its column instead of stopping short. */
.register .folio span:nth-child(2) { flex: 1; }

/* The honorific opens the role line, set in the same weight as the rest so it
   reads as part of the sentence rather than a badge. */
.masthead__role b { font-weight: 500; color: var(--ink); }

/* ==========================================================================
   19 · the finishing pass
   Small refinements that make the volume feel bound rather than assembled.
   Everything here is additive; nothing above is overridden.
   ========================================================================= */

/* The half-title rule: a short foil line opening the title page, the way a
   printed book puts a rule above the epigraph. */
.masthead__epigraph::before {
  content: ""; display: block; width: 4.5rem; height: 2px;
  margin-bottom: clamp(1.1rem, 2.4vw, 1.6rem);
  background: var(--foil);
}

/* A change of ground is a page turn, so the seam gets a foil thread. */
.section--night, .section--deep { position: relative; }
.section--night::before, .section--deep::before {
  content: ""; position: absolute; inset-inline: 0; top: 0; height: 1px;
  background: var(--foil); opacity: .55; pointer-events: none;
}

/* The statistics read as engraved plinths: the count is underlined by a foil
   rule that draws itself in as you arrive at it. */
.plinth { position: relative; }
.plinth::after {
  content: ""; position: absolute; inset-inline: 50% 50%; bottom: 0; height: 2px;
  background: var(--foil);
  transition: inset var(--dur-2) var(--ease-out);
}
.plinth:hover::after { inset-inline: 18% 18%; }
.plinth b { text-shadow: 0 1px 0 rgba(255, 253, 246, .75); }

/* The chapter numeral, letterpressed into the sheet. */
.chapter-head__no .n { text-shadow: 0 1px 0 rgba(255, 253, 246, .8); }
.section--night .chapter-head__no .n,
.section--deep  .chapter-head__no .n { text-shadow: 0 1px 0 rgba(0, 0, 0, .35); }

/* The language switch: the reader's language is not merely selected, it is the
   one struck into the metal. */
.langswitch { box-shadow: inset 0 1px 0 rgba(255, 253, 246, .7); }
.langswitch a[aria-current="true"] {
  background: var(--kumkum); color: #FFF6EC;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25);
}
.langswitch a:focus-visible { outline: 2px solid var(--kumkum); outline-offset: -2px; }

/* A shelf casts a little more shadow onto the plank than a flat list would. */
.shelf__plank { box-shadow: 0 -6px 14px -8px rgba(36, 28, 22, .35); }

/* Downloads and asset links on the brand sheet share the site's focus ring. */
a[download]:focus-visible { outline: 2px solid var(--kumkum); outline-offset: 3px; }

@media (prefers-reduced-motion: reduce) {
  .plinth::after { transition: none; }
  .mark__bindi { transition: none; }
}

/* ==========================================================================
   20 · the small screen

   Audited with real device viewports (puppeteer at 360 / 390 / 414 / 768),
   not with a headless window — headless Chrome clamps its viewport to ~501px,
   which hid genuine overflow on every page.
   ========================================================================= */

@media (max-width: 30rem) {          /* ≤ 480px — phones */
  :root { --gutter: 1.1rem; --head-h: 3.9rem; }

  .head__in { gap: .5rem; }
  .imprint { gap: .45rem; }
  .imprint .mark { width: 28px; height: 28px; }

  /* Search lives in the index sheet at this size; the bar keeps the two things
     a reader reaches for most — the language, and the way out. */
  .head__tools > #search-open { display: none; }
  .head__tools { gap: .35rem; }

  /* 40px was still under the minimum, and the header has room for the extra
     four: the imprint beside it gives way long before the bar does. */
  .iconbtn { width: 44px; height: 44px; }

  /* The language toggle stays visible and stays a real target. */
  .langswitch a { padding: 0 .62rem; font-size: .74rem; }
  .langswitch .deva { font-size: .84rem; }
}

/* The language toggle is never allowed to disappear or to shrink below a
   comfortable tap: it is how half this site's readers reach their half of it. */
.langswitch { flex: 0 0 auto; }
.langswitch a { min-width: 2.6rem; justify-content: center; }

/* Header controls hold their size; only the imprint gives way.
   The buttons inside were already immovable, but the cluster HOLDING them was
   not: `.head__in > * { min-width: 0 }` let it be squeezed below its own
   contents, and the buttons — which cannot shrink — simply hung out of its
   right-hand side and off the page. Sizing the cluster to its contents is what
   actually keeps the bar inside the viewport; the ellipsis on the imprint below
   is what pays for it. */
.head__tools { flex: 0 0 auto; }
.head__tools .iconbtn { flex: 0 0 auto; }

/* The imprint is a link, so it must be a real target, not the height of its text. */
.imprint { min-height: 44px; }

/* A count inside a chip has a floor — .8em of a small chip fell to 9.9px. */
.chip .n { font-size: max(.8em, .75rem); }

/* Search, added to the index sheet so hiding the header icon costs nothing. */
.sheet__search {
  display: flex; align-items: center; gap: var(--s3);
  width: 100%; margin-bottom: var(--s5);
  padding: .85rem var(--s4);
  border: 1px solid var(--line-firm); border-radius: 100px;
  background: var(--paper-raised); color: var(--ink-3);
  font: inherit; font-size: var(--t-sm); text-align: start; cursor: pointer;
  transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.sheet__search:hover, .sheet__search:focus-visible { border-color: var(--kumkum); color: var(--kumkum); }
.sheet__search svg { width: 18px; height: 18px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.6; }
@media (min-width: 30.0625rem) { .sheet__search { display: none; } }

/* A tablet is a touch device too: the 44px minimum applies at 768px exactly as
   it does at 360px, so these run to 64rem rather than stopping at phone width. */
@media (max-width: 64rem) {
  /* The two controls a reader reaches for most were the two that had never been
     measured: the language toggle stood 34px high and the section end-links
     ("Read the full life →") 33px — both under the 44px a fingertip needs, on
     every page, at every touch width. The toggle keeps its size on the page by
     centring its label in a taller box rather than growing its type. */
  .langswitch a { min-height: 44px; }
  .textlink { padding-block: .55rem; }
  /* the underline is drawn on the box, so it follows the padding down and away
     from the words unless it is pinned back to them */
  .textlink::after { bottom: .5rem; }

  /* Footer and list rows were 25px high — barely half the minimum. */
  .foot li { padding: 0; }
  .foot li a,
  .foot li > span { display: block; padding: .62rem 0; min-height: 44px; }
  .foot__bar { gap: var(--s3); }
  .foot__bar a { display: inline-flex; align-items: center; min-height: 44px; }

  /* The breadcrumb above a book stood 15px high — the smallest target on the
     site, and the one a reader uses to get back out of it. */
  nav.folio a { display: inline-flex; align-items: center; min-height: 44px; }

  /* Links inside definition-style lists (email, telephone) — in both the
     colophon and the three-column blocks, which use different markup. */
  .colophon li { padding: .25rem 0; }
  .colophon li a,
  .column li a { display: inline-block; padding: .5rem 0; min-height: 40px; }
}

@media (max-width: 40rem) {
  .chip .n, .shelf__count, .stack-end__note { font-size: .74rem; }
  .folio, .chapter-head__no { letter-spacing: .18em; }

  /* The pager and buttons get room to be tapped. */
  .btn { padding: .82em 1.4em; }
  .stack-end--split { gap: var(--s4); }
}

/* Two labels sat at 10.6–10.9px. This site is read by an audience that will not
   thank us for 10px type, so the floor is raised everywhere, not just on phones. */
.imprint__sub { font-size: .72rem; }
.envoi .sig small,
.sheet__index .t small,
.plinth em { font-size: .74rem; }

@media (max-width: 26rem) {          /* ≤ 416px — the narrowest phones */
  .plinths { grid-template-columns: repeat(2, 1fr); }
  .masthead__cta { gap: var(--s2); }
  .masthead__cta .btn { flex: 1 1 auto; justify-content: center; }
}

/* ≤ 360px — the smallest screens still in real use (iPhone SE 1st gen, and any
   phone held at 200% text zoom, which lands in the same place).

   The masthead's name is set `white-space: nowrap` so it never breaks across
   two lines mid-word; with nothing allowed to shrink it, at 320px it pushed the
   menu button 9px past the edge and the whole document scrolled sideways. The
   imprint is the one thing in that bar that can give way — the name is repeated
   on every page beneath it, while search, language and the index are not — so
   it is allowed to clip, with an ellipsis to say that it has. */
@media (max-width: 22.5rem) {
  :root { --gutter: .9rem; }

  .imprint { overflow: hidden; }
  .imprint > span { min-width: 0; overflow: hidden; }
  .imprint__mark { overflow: hidden; text-overflow: ellipsis; }
  .imprint .mark { width: 26px; height: 26px; }
  /* Set a shade smaller so the whole name fits rather than ellipsising: on the
     author's own site her name is the one thing worth the space. */
  .imprint__mark { font-size: .84rem; }

  .head__in { gap: .35rem; }
  .head__tools { gap: .2rem; }
  /* The buttons are NOT shrunk here. They were, when the bar's overflow at this
     width was thought to be a size problem; it was not — the tools cluster was
     being squeezed below its own contents, which is fixed above. With that
     fixed there is room at 320px for full-size targets, and the imprint's
     ellipsis absorbs whatever is left over. */
  .langswitch a { padding: 0 .5rem; min-width: 2.2rem; }

  /* the newsletter field was floored at 24rem/82vw and could not fit beside its
     button; below this width the two stack rather than overflow */
  .band form { flex-direction: column; align-items: stretch; }
  .band input[type="email"] { min-width: 0; width: 100%; }
  .band .btn { width: 100%; justify-content: center; }

  .lockup { gap: var(--s3); }
}

/* — print: the site returns to paper — */
@media print {
  body { background: #fff; font-size: 11pt; }
  body::before, body::after { display: none; }
  .head, .sheet, .search, .viewer, .pager, .band, .foot__social,
  .scroll-cue, .readbar, .progress, .chips { display: none !important; }
  .section { padding-block: 1.5rem; break-inside: avoid; }
  .section--night { background: #fff; color: #000; }
  .section--night h2, .section--night h3 { color: #000; }
  a { color: #000; text-decoration: underline; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 8pt; color: #555; }
  .tome__stage { transform: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
}
