/*
Theme Name:   Beauty After Thirty Child
Theme URI:    https://beautyafterthirty.org
Description:  Zine / Brutalist-editorial child theme for beautyafterthirty.org — LIGHT paper-first canvas, near-black ink borders, flat electric-teal riso accent, hard offset shadows, cut-out / contact-sheet layout, oversized Instrument Serif. Custom GeneratePress child.
Author:       Joshua Franz
Template:     generatepress
Version:      1.0.0
*/

/* ============================================================
   BEAUTY AFTER THIRTY — DESIGN SYSTEM
   Prototype:  Zine / Brutalist-editorial (LIGHT / paper-first variant — cut-out + contact-sheet)
   Palette:    paper #EFEEE9 + ink #16161A + electric teal #35D0BA (flat riso, single accent)
   Fonts:      Instrument Serif (display) / Geist (body) / Geist Mono (kicker·meta·index)
   Motion:     ~1 (CWV-first) — CSS hover/active + scroll progress only, no JS animation.
   与 strongerwithtime（同车道：Zine + Instrument Serif + 近黑+teal）明确区隔：
   strongerwithtime = DARK-first neon 健身海报；本站 = LIGHT paper 冷 riso 美妆剪贴册
   （明暗对调 + cut-out/contact-sheet 版式 + beauty niche）。
   ============================================================ */

:root {
  --color-primary:      #16161A;  /* ink */
  --color-primary-dark: #101013;  /* deepest band */
  --color-primary-soft: #E3E1D9;  /* image placeholder / raised panel on paper */
  --color-bg:           #EFEEE9;  /* paper canvas (cool neutral, NOT warm cream) */
  --color-bg-deep:      #E6E4DC;  /* subtly darker paper band */
  --color-accent:       #35D0BA;  /* electric teal (flat riso spot — the ONLY accent) */
  --color-accent-soft:  #8FE6D9;  /* light teal */
  --color-accent-deep:  #1C8E7E;  /* deep teal (text-safe on paper) */
  --color-charcoal:     #26262B;  /* body text */
  --color-ink:          #16161A;  /* headline ink */
  --color-muted:        #6C6C74;  /* grey meta */
  --color-line:         #16161A;  /* brutalist hard border = ink */
  --color-hair:         rgba(22,22,26,.20); /* faint hairline */
  --color-white:        #F7F6F2;  /* raised sheet */

  --font-serif: 'Instrument Serif', Georgia, 'Times New Roman', serif;
  --font-sans:  'Geist', system-ui, sans-serif;
  --font-mono:  'Geist Mono', ui-monospace, 'SFMono-Regular', monospace;

  --max-w: 1280px;
  --max-w-wide: 1440px;
  --max-w-narrow: 720px;

  /* Brutalist: hard square corners everywhere */
  --radius-sm: 0px;
  --radius-md: 0px;
  --radius-lg: 0px;
  --radius-xl: 0px;
  --bd: 3px;
}

/* ============================================================
   GLOBAL
   ============================================================ */
body, .entry-content, .widget {
  font-family: var(--font-sans);
  color: var(--color-charcoal);
  background: var(--color-bg);
  font-size: 17px;
  line-height: 1.62;
  letter-spacing: 0;
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-serif);
  font-weight: 400;
  color: var(--color-ink);
  letter-spacing: -0.01em;
  line-height: 1.04;
}
h1 { font-size: clamp(2.4rem, 5vw, 3.8rem); }
h2 { font-size: clamp(1.9rem, 3.4vw, 2.9rem); margin-top: 1.6em; margin-bottom: 0.4em; }
h3 { font-size: 1.5rem; margin-top: 1.6em; margin-bottom: 0.4em; }

a {
  color: var(--color-accent-deep);
  text-decoration: underline;
  text-decoration-color: var(--color-hair);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  transition: color 0.15s, background 0.15s, text-decoration-color 0.15s;
}
a:hover { color: var(--color-ink); text-decoration-color: var(--color-accent); }
p { margin: 0 0 1.2em; }

blockquote {
  border-left: var(--bd) solid var(--color-accent);
  background: var(--color-white);
  padding: 1.4rem 1.6rem;
  margin: 2.2em 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.4rem;
  line-height: 1.3;
  color: var(--color-ink);
}

hr { border: none; height: var(--bd); background: var(--color-ink); margin: 3em 0; }
img { max-width: 100%; height: auto; }
figure { margin: 2em 0; }
figcaption { font-family: var(--font-mono); font-size: 0.8rem; color: var(--color-muted); margin-top: 0.5rem; text-align: left; letter-spacing: 0.02em; }

/* mono kicker / index */
.tb-eyebrow {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--color-ink);
  font-weight: 500;
}
.bat-idx {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-accent-deep);
  font-weight: 500;
}

/* ============================================================
   LAYOUT RESET — force sections to stack (override GP flex)
   ============================================================ */
.tb-main { display: block !important; width: 100%; }
.tb-main > * { width: 100%; }  /* 勿加 display:block（会压掉子级 grid/flex） */

/* ============================================================
   1. MASTHEAD — left ransom nameplate + teal knockout
   ============================================================ */
.tb-masthead { background: var(--color-bg); border-bottom: var(--bd) solid var(--color-ink); }
.tb-masthead-inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 clamp(1rem, 4vw, 2.4rem);
}
.tb-mast-top {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 0.7rem 0;
  border-bottom: 1px solid var(--color-hair);
  font-family: var(--font-mono);
  font-size: 0.7rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--color-muted); gap: 1rem;
}
.tb-mast-top .r { text-align: right; }
.tb-mast-main {
  padding: 1.7rem 0 1.3rem;
  display: flex; align-items: flex-end; gap: 1.4rem; flex-wrap: wrap;
}
.tb-masthead-title {
  font-family: var(--font-serif);
  font-size: clamp(2.8rem, 8vw, 6rem);
  line-height: 0.86; letter-spacing: -0.02em;
  color: var(--color-ink); text-decoration: none; display: inline-block;
}
.tb-masthead-title:hover { color: var(--color-ink); }
.tb-masthead-title .k {
  background: var(--color-accent);
  box-shadow: 6px 6px 0 var(--color-ink);
  padding: 0 0.12em;
}
.tb-masthead-tagline {
  font-family: var(--font-mono);
  font-size: 0.78rem; letter-spacing: 0.04em;
  color: var(--color-muted); max-width: 32ch; margin-bottom: 0.5rem;
}
@media (max-width: 640px) {
  .tb-mast-top .r { display: none; }
}

/* Navigation — ink bar, mono caps, teal hover fill */
.tb-nav { background: var(--color-ink); border-top: var(--bd) solid var(--color-ink); width: 100%; }
.tb-nav-inner { max-width: var(--max-w); margin: 0 auto; padding: 0 clamp(1rem, 4vw, 2.4rem); }
.tb-nav-menu { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; }
.tb-nav-menu li { list-style: none; margin: 0; padding: 0; }
.tb-nav-menu li a {
  display: block; padding: 0.85rem 1.1rem;
  font-family: var(--font-mono);
  font-size: 0.74rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--color-bg); text-decoration: none;
  border-right: 1px solid rgba(255,255,255,.14);
}
.tb-nav-menu li:first-child a { border-left: 1px solid rgba(255,255,255,.14); }
.tb-nav-menu li a:hover { background: var(--color-accent); color: var(--color-ink); }
.tb-nav-menu li.current-menu-item > a { background: var(--color-accent); color: var(--color-ink); }
@media (max-width: 640px) { .tb-nav-menu li a { padding: 0.7rem 0.75rem; font-size: 0.68rem; letter-spacing: 0.1em; } }

/* ============================================================
   2. HERO — cut-out cover clipping + contact-sheet notebook
   ============================================================ */
.tb-hero { background: var(--color-bg); padding: 3rem 0 3.4rem; }
.tb-hero-inner {
  max-width: var(--max-w); margin: 0 auto; padding: 0 clamp(1rem, 4vw, 2.4rem);
  display: grid; grid-template-columns: 1.55fr 0.95fr; gap: 2.6rem; align-items: start;
}
@media (max-width: 950px) { .tb-hero-inner { grid-template-columns: 1fr; gap: 2.4rem; } }

.tb-hero-cover {
  position: relative; display: block;
  border: var(--bd) solid var(--color-ink);
  box-shadow: 14px 14px 0 var(--color-accent);
  background: var(--color-primary-soft);
}
.tb-hero-cover img { width: 100%; height: clamp(340px, 44vw, 540px); object-fit: cover; filter: saturate(0.92); display: block; }
.tb-hero-tag {
  position: absolute; top: 1rem; left: 1rem;
  background: var(--color-ink); color: var(--color-bg);
  font-family: var(--font-mono); font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase;
  padding: 0.4rem 0.7rem;
}
/* overlapping ink title card breaking the frame */
.tb-hero-card {
  position: relative; z-index: 3;
  margin: -4.2rem 0 0 -1.2rem; max-width: 84%;
  background: var(--color-white);
  border: var(--bd) solid var(--color-ink);
  padding: 1.6rem 1.6rem 1.5rem;
}
.tb-hero-card .bat-idx { display: block; margin-bottom: 0.5rem; }
.tb-hero-card h1 { font-size: clamp(2.1rem, 4vw, 3.2rem); margin: 0; }
.tb-hero-card h1 a { color: inherit; text-decoration: none; }
.tb-hero-card .lead { font-size: 1.02rem; color: var(--color-charcoal); margin: 0.7rem 0 1.1rem; line-height: 1.5; }
.tb-hero-cta {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 0.76rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--color-ink); text-decoration: none;
  border-bottom: 3px solid var(--color-accent); padding-bottom: 2px;
}
.tb-hero-cta:hover { background: var(--color-accent); color: var(--color-ink); }
@media (max-width: 950px) { .tb-hero-card { max-width: 100%; margin-left: 0; } }

/* contact-sheet notebook list (right column) — thumbnail + serif title */
.tb-hero-side { align-self: start; }
.tb-hero-side h4 {
  font-family: var(--font-mono); font-weight: 500;
  font-size: 0.74rem; letter-spacing: 0.2em; text-transform: uppercase;
  margin: 0 0 0.9rem; padding-bottom: 0.7rem;
  border-bottom: var(--bd) solid var(--color-ink); color: var(--color-ink);
}
.tb-hero-side ol { list-style: none; padding: 0; margin: 0; }
.tb-hero-side li {
  display: grid; grid-template-columns: 74px 1fr; gap: 0.9rem;
  padding: 0.75rem 0; border-bottom: 1px solid var(--color-hair); align-items: start;
}
.tb-hero-side li:last-child { border-bottom: none; }
.tb-sheet-thumb { width: 74px; height: 74px; overflow: hidden; border: 2px solid var(--color-ink); background: var(--color-primary-soft); flex-shrink: 0; }
.tb-sheet-thumb img { width: 100%; height: 100%; object-fit: cover; filter: saturate(0.92); display: block; }
.tb-hero-side li a {
  font-family: var(--font-serif); font-size: 1.16rem; line-height: 1.05;
  color: var(--color-ink); text-decoration: none;
  border-bottom: 2px solid transparent; align-self: center;
}
.tb-hero-side li a:hover { border-bottom-color: var(--color-accent); color: var(--color-ink); }
.tb-hero-side li .tb-mini-cat {
  display: block; font-family: var(--font-mono);
  font-size: 0.64rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--color-muted); margin-top: 0.35rem;
}

/* ============================================================
   3. EDITOR'S NOTE
   ============================================================ */
.tb-letter { background: var(--color-white); border-top: var(--bd) solid var(--color-ink); border-bottom: var(--bd) solid var(--color-ink); }
.tb-letter-inner {
  max-width: var(--max-w); margin: 0 auto; padding: 2.4rem clamp(1rem, 4vw, 2.4rem);
  display: grid; grid-template-columns: auto 1fr; gap: 1.8rem; align-items: start;
}
@media (max-width: 640px) { .tb-letter-inner { grid-template-columns: 1fr; } }
.tb-letter-avatar {
  width: 84px; height: 84px; flex-shrink: 0;
  background: var(--color-ink); color: var(--color-accent);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-serif); font-size: 2.1rem;
  box-shadow: 7px 7px 0 var(--color-accent);
}
.tb-letter .bat-idx { display: block; margin-bottom: 0.4rem; }
.tb-letter h3 { font-size: 1.9rem; margin: 0.2rem 0 0.7rem; }
.tb-letter p { font-family: var(--font-sans); font-size: 1rem; font-style: normal; color: var(--color-charcoal); line-height: 1.6; margin: 0 0 0.7rem; max-width: 64ch; }
.tb-letter .tb-signature { font-family: var(--font-mono); font-size: 0.76rem; letter-spacing: 0.06em; color: var(--color-muted); margin-top: 0.4rem; }

/* ============================================================
   4. GENERIC SECTION + HEAD
   ============================================================ */
.tb-section { max-width: var(--max-w); margin: 0 auto; padding: 3.2rem clamp(1rem, 4vw, 2.4rem); }
.tb-section.dark { max-width: 100%; background: var(--color-primary-dark); color: var(--color-bg); }
.tb-section.dark > .bat-inner { max-width: var(--max-w); margin: 0 auto; }
.tb-section.dark h2 { color: #fff; }
.tb-section.dark .tb-eyebrow { color: var(--color-accent); }
.tb-section.bg-deep { max-width: 100%; background: var(--color-bg-deep); border-top: var(--bd) solid var(--color-ink); border-bottom: var(--bd) solid var(--color-ink); }
.tb-section.bg-deep > .bat-inner { max-width: var(--max-w); margin: 0 auto; }

.tb-section-head {
  display: flex; justify-content: space-between; align-items: flex-end;
  border-bottom: var(--bd) solid var(--color-ink); padding-bottom: 0.9rem; margin-bottom: 1.8rem; gap: 1rem;
}
.tb-section.dark .tb-section-head { border-bottom-color: var(--color-bg); }
.tb-section-head-left { display: flex; flex-direction: column; gap: 0.3rem; }
.tb-section-head h2 { font-size: clamp(1.9rem, 3.4vw, 2.9rem); margin: 0; }
.tb-section-head .tb-more {
  font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--color-ink); text-decoration: none; white-space: nowrap;
  border-bottom: 3px solid var(--color-accent); padding-bottom: 2px;
}
.tb-section-head .tb-more:hover { background: var(--color-accent); color: var(--color-ink); }
.tb-section.dark .tb-section-head .tb-more { color: var(--color-bg); }

/* ============================================================
   5. TOPICS — bordered cards + hard offset hover
   ============================================================ */
.tb-catgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.4rem; }
@media (max-width: 900px) { .tb-catgrid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .tb-catgrid { grid-template-columns: 1fr; } }
.tb-catcard {
  display: block; text-decoration: none; color: inherit;
  border: var(--bd) solid var(--color-ink); background: var(--color-white);
  transition: box-shadow 0.12s, transform 0.12s;
}
.tb-catcard:hover { box-shadow: 9px 9px 0 var(--color-accent); transform: translate(-2px, -2px); }
.tb-catcard img { width: 100%; height: 150px; object-fit: cover; border-bottom: var(--bd) solid var(--color-ink); filter: saturate(0.9); display: block; }
.tb-catcard-ph { height: 150px; border-bottom: var(--bd) solid var(--color-ink); background: var(--color-accent); color: var(--color-ink); display: flex; align-items: center; justify-content: center; font-family: var(--font-serif); font-size: 3.4rem; line-height: 1; }
.tb-catcard-text { padding: 0.9rem 1rem 1.1rem; }
.tb-catcard-name { font-family: var(--font-serif); font-size: 1.45rem; margin: 0; line-height: 1.02; }
.tb-catcard-count { font-family: var(--font-mono); font-size: 0.64rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--color-muted); margin-top: 0.45rem; }

/* ============================================================
   6. MOSAIC — broken staggered grid, overlaid captions
   ============================================================ */
.tb-mosaic { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 200px; grid-auto-flow: dense; gap: 1.4rem; }
@media (max-width: 950px) { .tb-mosaic { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 175px; } }
@media (max-width: 560px) { .tb-mosaic { grid-template-columns: 1fr; } }
.tb-mosaic-item {
  position: relative; display: block; overflow: hidden;
  border: var(--bd) solid var(--color-ink); background: var(--color-ink);
  text-decoration: none; color: inherit;
}
.tb-mosaic-item img { width: 100%; height: 100%; object-fit: cover; filter: saturate(0.9); transition: transform 0.2s; display: block; }
.tb-mosaic-item:hover img { transform: scale(1.04); }
.tb-mosaic-body { position: absolute; left: 0; right: 0; bottom: 0; padding: 0.9rem 1rem; background: linear-gradient(transparent, rgba(16,16,19,.92)); }
.tb-mosaic-meta { font-family: var(--font-mono); font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-accent); }
.tb-mosaic-title { font-family: var(--font-serif); font-size: 1.25rem; line-height: 1.02; margin: 0.25rem 0 0; color: #fff; }
.tb-mosaic-item.big { grid-column: span 2; grid-row: span 2; }
.tb-mosaic-item.big .tb-mosaic-title { font-size: 1.95rem; }
.tb-mosaic-item.tall { grid-row: span 2; }
.tb-mosaic-item.wide { grid-column: span 2; }
@media (max-width: 560px) { .tb-mosaic-item.big, .tb-mosaic-item.wide { grid-column: span 1; } .tb-mosaic-item.big, .tb-mosaic-item.tall { grid-row: span 1; } }

/* ============================================================
   7. DARK ANNOTATED BAND (marginalia) — 明暗交替
   ============================================================ */
.tb-annot { display: grid; grid-template-columns: 1.2fr 1fr; gap: 2.4rem; align-items: center; }
@media (max-width: 800px) { .tb-annot { grid-template-columns: 1fr; } }
.tb-annot-fig { position: relative; border: var(--bd) solid var(--color-bg); box-shadow: -12px 12px 0 var(--color-accent); }
.tb-annot-fig img { width: 100%; height: 360px; object-fit: cover; filter: saturate(0.85); display: block; }
.tb-annot .lab { font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--color-accent); margin-bottom: 1rem; }
.tb-annot blockquote { margin: 0; border: none; background: transparent; padding: 0; font-family: var(--font-serif); font-style: italic; font-size: clamp(1.6rem, 2.6vw, 2.3rem); line-height: 1.16; color: #fff; }
.tb-annot .src { font-family: var(--font-mono); font-size: 0.74rem; letter-spacing: 0.04em; color: #a6a6ae; margin-top: 1.2rem; }
.tb-annot .src a { color: var(--color-accent); }

/* ============================================================
   8. SINGLE POST
   ============================================================ */
.single .entry-content, .page .entry-content { max-width: var(--max-w-narrow); margin: 0 auto; font-size: 18px; line-height: 1.75; }
.single .entry-content > p:first-of-type { font-size: 1.2rem; line-height: 1.55; color: var(--color-ink); }
.single .entry-content > p:first-of-type::first-letter {
  font-family: var(--font-serif); font-size: 3.6rem; float: left; line-height: 0.8;
  padding: 0.35rem 0.6rem 0 0; color: var(--color-accent-deep);
}
.tb-post-header { max-width: var(--max-w-narrow); margin: 2.6rem auto 1.4rem; padding: 0 clamp(1rem, 4vw, 2.4rem); }
.tb-breadcrumb { font-family: var(--font-mono); font-size: 0.72rem; color: var(--color-muted); letter-spacing: 0.06em; margin-bottom: 1rem; }
.tb-breadcrumb a { color: var(--color-ink); text-decoration: none; }
.tb-breadcrumb a:hover { color: var(--color-accent-deep); }
.tb-post-cat {
  display: inline-block; font-family: var(--font-mono); font-size: 0.7rem;
  letter-spacing: 0.16em; text-transform: uppercase; color: var(--color-ink);
  background: var(--color-accent); padding: 0.35rem 0.8rem; text-decoration: none; margin-bottom: 1rem;
}
.tb-post-cat:hover { background: var(--color-ink); color: var(--color-bg); }
.tb-post-title { font-size: clamp(2.2rem, 4.4vw, 3.4rem); line-height: 1.02; margin: 0.3rem 0 1.2rem; }
.tb-post-meta { font-family: var(--font-mono); font-size: 0.78rem; color: var(--color-muted); letter-spacing: 0.02em; display: flex; flex-wrap: wrap; gap: 0.5rem 1.1rem; align-items: center; }
.tb-post-meta strong { color: var(--color-charcoal); font-weight: 500; }
.tb-post-cover { max-width: var(--max-w-wide); margin: 2rem auto 3rem; padding: 0 clamp(1rem, 4vw, 2.4rem); }
.tb-post-cover img { width: 100%; aspect-ratio: 16/9; object-fit: cover; border: var(--bd) solid var(--color-ink); box-shadow: 14px 14px 0 var(--color-accent); }

.ftc-disclosure {
  max-width: var(--max-w-narrow); margin: 0 auto 2.5rem;
  background: var(--color-white); border-left: var(--bd) solid var(--color-accent);
  padding: 1rem 1.25rem; font-size: 0.92rem; color: var(--color-charcoal);
}
.ftc-disclosure p { margin: 0; }
.entry-content .ftc-disclosure { margin-left: 0; margin-right: 0; }

.single .entry-content blockquote {
  border-left: none; background: transparent; text-align: left;
  font-family: var(--font-serif); font-style: italic;
  font-size: clamp(1.4rem, 2.4vw, 1.75rem); line-height: 1.3; color: var(--color-ink);
  padding: 1.4rem 0; margin: 2.5rem 0;
  border-top: var(--bd) solid var(--color-ink); border-bottom: var(--bd) solid var(--color-ink);
}

.tb-author-bio {
  max-width: var(--max-w-narrow); margin: 4rem auto 2rem; padding: 1.8rem;
  background: var(--color-white); border: var(--bd) solid var(--color-ink);
  display: grid; grid-template-columns: 84px 1fr; gap: 1.5rem; align-items: start;
}
@media (max-width: 540px) { .tb-author-bio { grid-template-columns: 1fr; } }
.tb-author-avatar {
  width: 84px; height: 84px; background: var(--color-ink); color: var(--color-accent);
  display: flex; align-items: center; justify-content: center; font-family: var(--font-serif); font-size: 2rem;
  box-shadow: 6px 6px 0 var(--color-accent);
}
.tb-author-bio .bat-idx, .tb-author-bio .tb-eyebrow { margin-bottom: 0.4rem; display: block; }
.tb-author-bio h4 { margin: 0 0 0.4rem; font-size: 1.3rem; font-family: var(--font-serif); }
.tb-author-bio p { font-size: 0.95rem; color: var(--color-charcoal); margin: 0 0 0.4rem; line-height: 1.6; }
.tb-author-bio a { font-family: var(--font-mono); font-size: 0.78rem; }

.tb-related { max-width: var(--max-w); margin: 4rem auto 3rem; padding: 0 clamp(1rem, 4vw, 2.4rem); }
.tb-related h3 { font-family: var(--font-serif); font-size: 1.6rem; margin: 0 0 1.5rem; padding-bottom: 0.6rem; border-bottom: var(--bd) solid var(--color-ink); }
.tb-related-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.4rem; }
@media (max-width: 700px) { .tb-related-grid { grid-template-columns: 1fr; } }
.tb-related-card { text-decoration: none; color: inherit; display: block; border: var(--bd) solid var(--color-ink); background: var(--color-white); transition: box-shadow 0.12s, transform 0.12s; }
.tb-related-card:hover { box-shadow: 8px 8px 0 var(--color-accent); transform: translate(-2px,-2px); }
.tb-related-card .tb-related-cover { overflow: hidden; background: var(--color-primary-soft); border-bottom: var(--bd) solid var(--color-ink); }
.tb-related-cover img { width: 100%; height: 150px; object-fit: cover; display: block; filter: saturate(0.9); }
.tb-related-card .tb-related-title { font-family: var(--font-serif); font-size: 1.2rem; line-height: 1.05; margin: 0; padding: 0.8rem 0.9rem 1rem; }

/* ============================================================
   9. ARCHIVE
   ============================================================ */
.tb-archive-hero { background: var(--color-bg-deep); padding: 3.4rem clamp(1rem,4vw,2.4rem) 3rem; border-bottom: var(--bd) solid var(--color-ink); }
.tb-archive-hero .tb-eyebrow, .tb-archive-hero .bat-idx { margin-bottom: 0.8rem; color: var(--color-accent-deep); }
.tb-archive-hero h1 { font-size: clamp(2.4rem, 5vw, 3.8rem); margin: 0 0 0.6rem; }
.tb-archive-hero p { max-width: 64ch; font-size: 1.02rem; color: var(--color-charcoal); line-height: 1.55; }
.tb-archive-grid { max-width: var(--max-w); margin: 3rem auto; padding: 0 clamp(1rem,4vw,2.4rem); display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.6rem; }
@media (max-width: 900px) { .tb-archive-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .tb-archive-grid { grid-template-columns: 1fr; } }
.tb-archive-card { text-decoration: none; color: inherit; display: block; border: var(--bd) solid var(--color-ink); background: var(--color-white); transition: box-shadow 0.12s, transform 0.12s; }
.tb-archive-card:hover { box-shadow: 9px 9px 0 var(--color-accent); transform: translate(-2px,-2px); }
.tb-archive-card .tb-archive-cover { overflow: hidden; background: var(--color-primary-soft); border-bottom: var(--bd) solid var(--color-ink); }
.tb-archive-cover img { width: 100%; height: 180px; object-fit: cover; display: block; filter: saturate(0.9); }
.tb-archive-body { padding: 1rem 1.1rem 1.2rem; }
.tb-archive-card .tb-archive-meta { font-family: var(--font-mono); font-size: 0.64rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--color-muted); margin-bottom: 0.4rem; }
.tb-archive-card .tb-archive-title { font-family: var(--font-serif); font-size: 1.35rem; line-height: 1.04; margin: 0 0 0.5rem; }
.tb-archive-card .tb-archive-excerpt { font-size: 0.93rem; color: var(--color-charcoal); line-height: 1.5; }
.tb-archive-feature { max-width: var(--max-w); margin: 3rem auto 0; padding: 0 clamp(1rem,4vw,2.4rem); }

/* ============================================================
   10. FOOTER
   ============================================================ */
.site-footer, .site-info { background: var(--color-ink); color: var(--color-bg); font-family: var(--font-sans); font-size: 0.9rem; }
.site-info a { color: var(--color-bg); text-decoration: underline; }
.site-info a:hover { color: var(--color-accent); }
.footer-widgets, .site-info { padding: 2.5rem clamp(1rem,4vw,2.4rem); }

/* ============================================================
   11. READING PROGRESS BAR (CSS scroll-driven — MOTION ~1)
   ============================================================ */
@supports (animation-timeline: scroll()) {
  .tb-progress {
    position: fixed; top: 0; left: 0; height: 4px; width: 100%;
    background: var(--color-accent); transform-origin: left; transform: scaleX(0);
    animation: tb-progress linear; animation-timeline: scroll(root block); z-index: 9999;
  }
  @keyframes tb-progress { to { transform: scaleX(1); } }
}
@media (prefers-reduced-motion: reduce) { .tb-progress { display: none; } }
