/* =========================================================
   THE WHOLE EARTH DISPATCH
   A broadside on the American environmental movement, 1960–1973.
   ========================================================= */

:root {
    /* paper & ink */
    --paper:        #ECE0C4;   /* aged cream paper */
    --paper-2:      #E1D2AE;   /* darker paper for accent panels */
    --paper-3:      #F5ECD6;   /* lightest cream highlight */
    --ink:          #1F1812;   /* warm near-black printing ink */
    --ink-soft:     #4A3A2D;   /* body brown-black */
    --ink-muted:    #7B6A56;   /* muted brown for meta */
    --rule:         #BFA982;   /* decorative rule line */
    --rule-dim:     #D6C49B;   /* lighter rule */

    /* signature colors — 1970s editorial palette */
    --brick:        #A53E1F;   /* deep brick red */
    --brick-2:      #C5572E;   /* lighter brick */
    --brick-3:      #E68E5E;   /* warm rust highlight */
    --ochre:        #B8851F;   /* mustard ochre */
    --ochre-2:      #D4A23E;   /* lighter ochre */
    --moss:         #4A5A1F;   /* deep moss/olive */
    --moss-2:       #6F7E3F;   /* lighter moss */
    --teal:         #2C5F5D;   /* used sparingly, for cool accents */
    --space:        #0C0E12;   /* deep space (for blue-marble hero) */

    /* type */
    --f-display: "Fraunces", "DM Serif Display", "Iowan Old Style", Georgia, serif;
    --f-body:    "Crimson Pro", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
    --f-mono:    "Space Mono", "Courier Prime", "Courier New", ui-monospace, monospace;

    /* layout */
    --col:       1180px;
    --gutter:    1.5rem;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
img { max-width: 100%; display: block; }

body {
    margin: 0;
    background-color: var(--paper);
    /* aged paper grain: subtle SVG noise overlay */
    background-image:
        url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.12 0 0 0 0 0.10 0 0 0 0 0.08 0 0 0 0.10 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>"),
        radial-gradient(1200px 700px at 80% -10%, rgba(184, 133, 31, 0.10), transparent 60%),
        radial-gradient(900px 600px at -10% 110%, rgba(74, 90, 31, 0.10), transparent 60%);
    color: var(--ink);
    font-family: var(--f-body);
    font-size: 18px;
    line-height: 1.6;
    font-weight: 400;
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: antialiased;
}

::selection { background: var(--ochre-2); color: var(--ink); }

a {
    color: var(--brick);
    text-decoration-thickness: 1.5px;
    text-underline-offset: 3px;
    transition: color 0.15s ease, background 0.15s ease;
}
a:hover { color: var(--moss); }

/* Typography ----------------------------------------------------- */

h1, h2, h3, h4 {
    font-family: var(--f-display);
    color: var(--ink);
    margin: 0 0 0.45em;
    line-height: 1.05;
    letter-spacing: -0.012em;
    font-variation-settings: "SOFT" 30, "WONK" 0;
}

h1 {
    font-size: clamp(2.8rem, 7vw, 6.2rem);
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 0.96;
}
h2 {
    font-size: clamp(1.85rem, 3.6vw, 3rem);
    font-weight: 700;
    letter-spacing: -0.015em;
}
h3 {
    font-size: clamp(1.2rem, 1.8vw, 1.45rem);
    font-weight: 700;
    line-height: 1.18;
}
h4 {
    font-family: var(--f-mono);
    font-size: 0.78rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--brick);
    margin-bottom: 0.6em;
}

.em-italic { font-style: italic; }

.lede {
    font-family: var(--f-display);
    font-weight: 300;
    font-style: italic;
    font-size: clamp(1.25rem, 1.9vw, 1.65rem);
    line-height: 1.4;
    color: var(--ink-soft);
    letter-spacing: -0.005em;
}

.dateline {
    font-family: var(--f-mono);
    font-size: 0.74rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--ink-muted);
}

.eyebrow {
    display: inline-block;
    font-family: var(--f-mono);
    font-size: 0.74rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--brick);
    font-weight: 700;
    padding-bottom: 0.45rem;
    margin-bottom: 0.9rem;
    border-bottom: 2px solid var(--ink);
}

.container {
    max-width: var(--col);
    margin: 0 auto;
    padding: 0 var(--gutter);
}

/* Decorative rules ---------------------------------------------- */

.rule-double {
    height: 7px;
    border: none;
    border-top: 1.5px solid var(--ink);
    border-bottom: 1.5px solid var(--ink);
    margin: 0;
}
.rule-thick {
    height: 5px;
    background: var(--ink);
    border: none;
    margin: 0;
}
.rule-thin {
    height: 1px;
    background: var(--rule);
    border: none;
    margin: 2.5rem 0;
}

/* halftone dots band */
.halftone {
    height: 22px;
    background-image:
        radial-gradient(var(--ink) 1.5px, transparent 1.8px),
        radial-gradient(var(--ink) 1.5px, transparent 1.8px);
    background-size: 10px 10px, 10px 10px;
    background-position: 0 0, 5px 5px;
    opacity: 0.55;
}

/* =========================================================
   MASTHEAD
   ========================================================= */

.masthead {
    background: var(--paper);
    border-bottom: 4px double var(--ink);
    position: relative;
}
.masthead-inner {
    max-width: var(--col);
    margin: 0 auto;
    padding: 1.1rem var(--gutter) 1.6rem;
    text-align: center;
}
.masthead-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    border-bottom: 1px solid var(--ink);
    padding-bottom: 0.55rem;
    margin-bottom: 1.1rem;
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--ink);
}
.masthead-meta .left, .masthead-meta .right {
    flex: 1;
}
.masthead-meta .right { text-align: right; }
.masthead-meta .center {
    color: var(--brick);
    font-weight: 700;
}

.masthead-title {
    display: block;
    text-decoration: none;
    color: var(--ink);
}
.masthead-title .top-name {
    display: block;
    font-family: var(--f-display);
    font-weight: 800;
    font-size: clamp(2.3rem, 6vw, 4.8rem);
    line-height: 0.94;
    letter-spacing: -0.025em;
    margin: 0;
    text-transform: uppercase;
    font-variation-settings: "SOFT" 0, "WONK" 1;
}
.masthead-title .sub-name {
    display: block;
    margin-top: 0.65rem;
    font-family: var(--f-display);
    font-style: italic;
    font-weight: 400;
    font-size: clamp(1.05rem, 1.6vw, 1.3rem);
    color: var(--ink-soft);
}
.masthead-title:hover { color: var(--brick); }
.masthead-title:hover .sub-name { color: var(--brick); }

.masthead-nav {
    border-top: 1px solid var(--ink);
    border-bottom: 1px solid var(--ink);
    background: var(--paper-3);
    position: sticky;
    top: 0;
    z-index: 50;
    box-shadow: 0 1px 0 var(--ink);
}
.masthead-nav-inner {
    max-width: var(--col);
    margin: 0 auto;
    padding: 0.6rem var(--gutter);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 1.5rem 2.6rem;
}
.masthead-nav a {
    font-family: var(--f-mono);
    font-size: 0.82rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--ink);
    text-decoration: none;
    padding: 0.2rem 0.1rem;
    border-bottom: 2px solid transparent;
    transition: color 0.15s ease, border-color 0.15s ease;
}
.masthead-nav a:hover { color: var(--brick); border-bottom-color: var(--brick); }
.masthead-nav a.active { color: var(--brick); border-bottom-color: var(--brick); }

.nav-toggle {
    display: none;
    position: absolute;
    right: 1rem; top: 0.8rem;
    background: transparent; border: 1.5px solid var(--ink);
    width: 38px; height: 36px;
    cursor: pointer;
    padding: 0;
    font-family: var(--f-mono);
    font-size: 0.75rem;
    color: var(--ink);
    letter-spacing: 0.12em;
}

@media (max-width: 760px) {
    .masthead-nav-inner { gap: 0.6rem 1.2rem; padding: 0.6rem 1rem; }
    .masthead-nav a { font-size: 0.74rem; letter-spacing: 0.15em; }
    .masthead-title .top-name { font-size: 11vw; }
}

/* =========================================================
   HERO (home page)
   ========================================================= */

.hero {
    position: relative;
    background: var(--space);
    color: var(--paper-3);
    overflow: hidden;
    border-bottom: 4px double var(--ink);
}
.hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background:
        radial-gradient(80% 65% at 75% 50%, rgba(255, 255, 255, 0.06), transparent 50%),
        radial-gradient(50% 40% at 12% 92%, rgba(184, 133, 31, 0.18), transparent 70%);
    pointer-events: none;
    z-index: 1;
}
.hero-grid {
    position: relative;
    z-index: 2;
    max-width: var(--col);
    margin: 0 auto;
    padding: 4.5rem var(--gutter) 5rem;
    display: grid;
    grid-template-columns: 1.05fr 1fr;
    gap: 3rem;
    align-items: center;
}
.hero-text .dateline { color: var(--brick-3); }
.hero-text h1 {
    color: var(--paper-3);
    font-size: clamp(2.8rem, 6.4vw, 5.6rem);
    text-transform: uppercase;
    letter-spacing: -0.025em;
    line-height: 0.93;
    margin: 0.7rem 0 1.2rem;
}
.hero-text h1 em {
    font-style: italic;
    font-weight: 400;
    color: var(--brick-3);
    font-variation-settings: "SOFT" 100, "WONK" 1;
    text-transform: none;
    letter-spacing: -0.01em;
    display: inline-block;
}
.hero-text .lede {
    color: rgba(245, 236, 214, 0.88);
    max-width: 38ch;
}
.hero-text .read-more {
    display: inline-flex; align-items: center; gap: 0.6rem;
    font-family: var(--f-mono);
    font-size: 0.78rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--brick-3);
    text-decoration: none;
    border-bottom: 2px solid var(--brick-3);
    padding: 0.35rem 0 0.35rem;
    margin-top: 2rem;
}
.hero-text .read-more:hover { color: var(--paper-3); border-color: var(--paper-3); }

.hero-image-stage {
    position: relative;
    aspect-ratio: 1 / 1;
    max-width: 540px;
    margin: 0 auto;
}
.hero-image-wrap {
    position: relative;
    width: 100%;
    height: 100%;
    margin: 0;
    will-change: transform;
}
.hero-image-wrap img {
    width: 100%; height: 100%; object-fit: cover;
    border-radius: 50%;
    box-shadow:
        0 0 0 2px rgba(255,255,255,0.06),
        0 0 80px rgba(46, 71, 100, 0.45),
        0 0 220px 30px rgba(20, 33, 51, 0.7);
    background: #0c0e12;
}
.hero-image-stage .caption {
    position: absolute;
    left: 0; right: 0; bottom: -2.8rem;
    text-align: center;
    font-family: var(--f-mono);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: rgba(245, 236, 214, 0.6);
}

@media (max-width: 880px) {
    .hero-grid { grid-template-columns: 1fr; gap: 2.5rem; padding: 3rem var(--gutter) 4.5rem; }
    .hero-image-wrap { max-width: 360px; }
}

/* hero ribbon below — kicker stats / breaking news strip */
.hero-ribbon {
    background: var(--ink);
    color: var(--paper-3);
    border-bottom: 4px double var(--ink);
}
.hero-ribbon-inner {
    max-width: var(--col);
    margin: 0 auto;
    padding: 1.1rem var(--gutter);
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1.5rem;
    align-items: center;
}
.hero-ribbon .kicker {
    font-family: var(--f-mono);
    font-size: 0.68rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--brick-3);
    margin-bottom: 0.2rem;
}
.hero-ribbon .ribbon-stat {
    font-family: var(--f-display);
    font-weight: 700;
    font-size: clamp(1.2rem, 2vw, 1.55rem);
    line-height: 1.1;
}
.hero-ribbon > div > div { border-left: 1px solid rgba(245,236,214,0.18); padding-left: 1.2rem; }
.hero-ribbon > div:first-child > div { border-left: 0; padding-left: 0; }
@media (max-width: 760px) {
    .hero-ribbon-inner { grid-template-columns: 1fr 1fr; }
}

/* =========================================================
   PAGE BANNER (non-home pages)
   ========================================================= */

.page-banner {
    background: var(--paper);
    border-bottom: 4px double var(--ink);
    padding: 3.4rem 0 3.2rem;
    position: relative;
}
.page-banner::after {
    content: "";
    position: absolute;
    bottom: -22px; left: 0; right: 0;
    height: 14px;
    background-image:
        radial-gradient(var(--ink) 1.5px, transparent 1.8px);
    background-size: 10px 10px;
    opacity: 0.18;
    pointer-events: none;
}
.page-banner .part-number {
    display: inline-block;
    font-family: var(--f-display);
    font-weight: 800;
    font-style: italic;
    font-size: 1rem;
    color: var(--brick);
    margin-right: 1rem;
}
.page-banner h1 {
    font-size: clamp(2.4rem, 5.2vw, 4.4rem);
    text-transform: uppercase;
    letter-spacing: -0.02em;
    margin: 0.6rem 0 1.2rem;
}
.page-banner h1 em {
    font-style: italic;
    color: var(--brick);
    text-transform: none;
    font-weight: 400;
    font-variation-settings: "SOFT" 100, "WONK" 1;
}
.page-banner .lede { max-width: 62ch; }
.page-banner .top-rule {
    display: flex; align-items: baseline; justify-content: space-between;
    border-bottom: 1px solid var(--ink);
    padding-bottom: 0.5rem;
    margin-bottom: 1.2rem;
}

/* =========================================================
   SECTIONS
   ========================================================= */

.section {
    padding: 4.5rem 0;
    position: relative;
}
.section--paper2 { background: var(--paper-2); border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);}
.section--ink {
    background: var(--ink);
    color: var(--paper-3);
}
.section--ink h2 { color: var(--paper-3); }
.section--ink .lede { color: rgba(245,236,214,0.85); }
.section--ink .dateline { color: var(--brick-3); }

.section-head {
    max-width: 740px;
    margin-bottom: 2.6rem;
}

.divider-art {
    display: flex; align-items: center; gap: 0.9rem;
    margin: 4rem 0;
    color: var(--ink);
}
.divider-art .line { flex: 1; height: 2px; background: var(--ink); }
.divider-art .mark {
    font-family: var(--f-display);
    font-style: italic;
    font-size: 1.4rem;
    color: var(--brick);
}
.divider-art .dots {
    width: 80px; height: 12px;
    background-image: radial-gradient(var(--ink) 1.3px, transparent 1.6px);
    background-size: 8px 8px;
}

/* Two-col article opener (drop cap intro) */
.two-col {
    column-count: 2;
    column-gap: 2.6rem;
    column-rule: 1px solid var(--rule);
    font-size: 1.05rem;
    line-height: 1.7;
    color: var(--ink-soft);
}
.two-col p { margin: 0 0 1.1em; break-inside: avoid; }
@media (max-width: 760px) { .two-col { column-count: 1; } }

.dropcap::first-letter {
    font-family: var(--f-display);
    font-weight: 800;
    font-size: 5em;
    float: left;
    line-height: 0.82;
    margin: 0.06em 0.12em 0 -0.04em;
    color: var(--brick);
    font-variation-settings: "SOFT" 0, "WONK" 1;
}

/* =========================================================
   PROSE
   ========================================================= */

.prose p, .prose ul, .prose ol {
    font-size: 1.05rem;
    line-height: 1.7;
    color: var(--ink-soft);
    margin: 0 0 1.15em;
    max-width: 65ch;
}
.prose h2 { margin-top: 2.2rem; }
.prose h3 { margin-top: 1.6rem; }
.prose ul, .prose ol { padding-left: 1.5rem; }
.prose li { margin: 0.3em 0; }
.prose strong { color: var(--ink); }
.prose em { color: var(--ink); }

.split {
    display: grid;
    grid-template-columns: 1.1fr 0.9fr;
    gap: 3rem;
    align-items: start;
}
.split--reverse > :first-child { order: 2; }
@media (max-width: 880px) {
    .split { grid-template-columns: 1fr; gap: 1.8rem; }
    .split--reverse > :first-child { order: 0; }
}

/* =========================================================
   PHOTOGRAPHS (polaroid / dossier style)
   ========================================================= */

.photo {
    background: var(--paper-3);
    padding: 0.8rem 0.8rem 1.4rem;
    border: 1px solid var(--rule);
    box-shadow:
        0 1px 0 var(--rule),
        0 8px 22px rgba(31, 24, 18, 0.16);
    position: relative;
    margin: 0;
    transform: rotate(-0.6deg);
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.photo:nth-child(even) { transform: rotate(0.7deg); }
.photo:hover { transform: rotate(0) translateY(-3px); box-shadow: 0 14px 30px rgba(31,24,18,0.22); }
.photo img {
    width: 100%; height: auto; display: block;
    filter: contrast(1.02) saturate(0.9);
}
.photo figcaption {
    margin-top: 0.7rem;
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.04em;
    color: var(--ink-soft);
    line-height: 1.45;
}
.photo figcaption strong {
    color: var(--brick);
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    margin-right: 0.4em;
}

/* archival caption: handwritten-style on cream */
.photo--stamp::before {
    content: "ARCHIVE";
    position: absolute;
    top: 12px; right: 12px;
    transform: rotate(8deg);
    font-family: var(--f-mono);
    font-size: 0.6rem;
    letter-spacing: 0.18em;
    color: var(--brick);
    border: 1.5px solid var(--brick);
    padding: 2px 6px;
    opacity: 0.7;
    pointer-events: none;
}

/* =========================================================
   PRIMARY SOURCE — typed manuscript / photocopied document
   ========================================================= */

.document {
    background:
        linear-gradient(180deg, var(--paper-3) 0%, var(--paper-3) 100%);
    background-image:
        repeating-linear-gradient(180deg,
            transparent 0 31px,
            rgba(31, 24, 18, 0.05) 31px 32px);
    background-color: var(--paper-3);
    border: 1.5px solid var(--ink);
    padding: 2.4rem 2.4rem 2rem 4.2rem;
    margin: 3rem auto;
    max-width: 760px;
    position: relative;
    box-shadow:
        2px 2px 0 var(--ink),
        6px 6px 0 rgba(31,24,18,0.15);
}
/* hole-punch left margin */
.document::before {
    content: "";
    position: absolute;
    left: 1.4rem; top: 1.5rem; bottom: 1.5rem;
    width: 18px;
    background-image: radial-gradient(circle at 50% 50%,
        var(--paper) 0 5px,
        transparent 5px);
    background-size: 18px 80px;
    background-repeat: repeat-y;
}
.document::after {
    content: "PUBLIC LAW · TYPED COPY";
    position: absolute;
    top: -14px;
    right: 1.4rem;
    background: var(--brick);
    color: var(--paper-3);
    font-family: var(--f-mono);
    font-weight: 700;
    font-size: 0.66rem;
    letter-spacing: 0.22em;
    padding: 0.35rem 0.7rem;
    transform: rotate(-1.5deg);
    box-shadow: 2px 2px 0 var(--ink);
}
.document .doc-title {
    font-family: var(--f-display);
    font-weight: 800;
    color: var(--ink);
    font-size: 1.4rem;
    margin: 0 0 0.2rem;
    letter-spacing: -0.01em;
}
.document .doc-meta {
    font-family: var(--f-mono);
    font-size: 0.74rem;
    letter-spacing: 0.04em;
    color: var(--ink-muted);
    border-bottom: 1px solid var(--rule);
    padding-bottom: 0.7rem;
    margin-bottom: 1.4rem;
}
.document blockquote {
    margin: 0 0 1.3rem;
    padding: 0;
    font-family: var(--f-mono);
    font-size: 0.95rem;
    line-height: 1.7;
    color: var(--ink);
}
.document blockquote p { margin: 0 0 1em; }
.document blockquote p:last-child { margin-bottom: 0; }
.document .doc-context {
    background: rgba(184, 133, 31, 0.12);
    border-left: 4px solid var(--ochre);
    padding: 0.95rem 1.1rem;
    font-family: var(--f-body);
    font-size: 1rem;
    line-height: 1.6;
    color: var(--ink-soft);
}
.document .doc-context strong { color: var(--ink); font-weight: 700; }

/* For the Silent Spring document, switch the stamp text */
.document.document--book::after { content: "EXCERPT · FAIR USE"; }
.document.document--book blockquote {
    font-family: var(--f-display);
    font-style: italic;
    font-size: 1.18rem;
    line-height: 1.55;
}

@media (max-width: 700px) {
    .document { padding: 2.2rem 1.4rem 1.7rem 2.4rem; }
    .document::before { left: 0.6rem; width: 12px; background-size: 12px 70px; }
    .document::before { background-image: radial-gradient(circle at 50% 50%, var(--paper) 0 3.5px, transparent 3.5px); }
}

/* =========================================================
   PULL QUOTES
   ========================================================= */

.pull {
    margin: 2.6rem 0;
    padding: 1.8rem 0;
    border-top: 5px solid var(--ink);
    border-bottom: 1px solid var(--ink);
    font-family: var(--f-display);
    font-weight: 400;
    font-style: italic;
    font-size: clamp(1.45rem, 2.4vw, 2rem);
    line-height: 1.3;
    color: var(--brick);
    text-align: center;
    max-width: 36ch;
    margin-left: auto;
    margin-right: auto;
}
.pull cite {
    display: block;
    margin-top: 0.8rem;
    font-style: normal;
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--ink);
}

/* inline marginal pull */
.pull--inline {
    text-align: left;
    border-top: 4px solid var(--brick);
    border-bottom: none;
    padding: 1rem 0 0.7rem;
    margin: 1.8rem 0;
    font-size: 1.5rem;
}
.pull--inline cite { text-align: left; color: var(--ink-muted); }

/* =========================================================
   DOSSIER CARDS (leaders)
   ========================================================= */

.dossier-grid {
    display: grid;
    gap: 2rem;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
}
.dossier {
    background: var(--paper-3);
    border: 1.5px solid var(--ink);
    box-shadow: 4px 4px 0 var(--ink);
    padding: 1.3rem 1.3rem 1.4rem;
    position: relative;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.dossier:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 var(--ink);
}
.dossier .file-label {
    display: flex; align-items: baseline; justify-content: space-between;
    font-family: var(--f-mono);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--brick);
    border-bottom: 1px solid var(--ink);
    padding-bottom: 0.45rem;
    margin-bottom: 0.95rem;
}
.dossier .file-label .tag {
    color: var(--paper-3);
    background: var(--ink);
    padding: 2px 6px;
    letter-spacing: 0.1em;
    font-weight: 700;
}
.dossier .portrait {
    aspect-ratio: 4 / 5;
    background-color: var(--paper);
    background-size: cover;
    background-position: center top;
    border: 1px solid var(--ink);
    margin-bottom: 1rem;
    filter: contrast(1.05) saturate(0.85);
    position: relative;
}
.dossier .portrait::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: radial-gradient(rgba(31, 24, 18, 0.12) 0.7px, transparent 0.8px);
    background-size: 3px 3px;
    mix-blend-mode: multiply;
    opacity: 0.5;
    pointer-events: none;
}
.dossier h3 {
    font-size: 1.4rem;
    margin: 0 0 0.2rem;
    color: var(--ink);
    line-height: 1.08;
}
.dossier .meta {
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    color: var(--ink-muted);
    margin-bottom: 0.7rem;
    line-height: 1.5;
}
.dossier .role {
    font-family: var(--f-mono);
    font-size: 0.68rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--brick);
    font-weight: 700;
}
.dossier p {
    font-size: 0.98rem;
    color: var(--ink-soft);
    line-height: 1.55;
    margin: 0.7rem 0 0;
}

/* =========================================================
   DISPATCH (timeline events)
   ========================================================= */

.dispatch-rail {
    position: relative;
}
.dispatch-rail::before {
    content: "";
    position: absolute;
    top: 0; bottom: 0; left: 11px;
    width: 3px;
    background:
        repeating-linear-gradient(180deg,
            var(--ink) 0 8px,
            transparent 8px 14px);
}
.dispatch {
    position: relative;
    padding: 0.6rem 0 2.4rem 3.5rem;
}
.dispatch::before {
    content: "";
    position: absolute;
    left: 0; top: 1rem;
    width: 25px; height: 25px;
    background: var(--brick);
    border: 3px solid var(--ink);
    border-radius: 50%;
    box-shadow: 0 0 0 4px var(--paper);
    z-index: 1;
}
.dispatch--final::before { background: var(--moss); }

.dispatch-card {
    background: var(--paper-3);
    border: 1.5px solid var(--ink);
    box-shadow: 4px 4px 0 var(--ink);
    padding: 1.6rem 1.7rem 1.7rem;
    position: relative;
}
.dispatch-card .top-strip {
    display: flex; align-items: baseline; justify-content: space-between;
    gap: 1rem;
    padding-bottom: 0.7rem;
    margin-bottom: 0.9rem;
    border-bottom: 1px solid var(--ink);
    flex-wrap: wrap;
}
.dispatch-card .date-stamp {
    font-family: var(--f-display);
    font-weight: 800;
    font-size: 1.25rem;
    color: var(--brick);
    letter-spacing: -0.005em;
    text-transform: uppercase;
}
.dispatch-card .dateline-from {
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ink-muted);
}
.dispatch-card h3 {
    font-size: 1.5rem;
    line-height: 1.12;
    margin: 0 0 0.6rem;
    color: var(--ink);
    letter-spacing: -0.01em;
}
.dispatch-card h3 em {
    font-style: italic;
    color: var(--brick);
    font-variation-settings: "SOFT" 100;
}
.dispatch-card p {
    font-size: 1.02rem;
    color: var(--ink-soft);
    line-height: 1.6;
    margin: 0.6rem 0;
}
.dispatch-card .photo {
    margin: 1.3rem -0.4rem 0;
}

@media (max-width: 600px) {
    .dispatch { padding-left: 2.6rem; }
    .dispatch-rail::before { left: 8px; }
    .dispatch::before { width: 18px; height: 18px; left: 0; }
    .dispatch-card { padding: 1.2rem 1.2rem 1.3rem; }
}

/* =========================================================
   ISSUE CARDS (field reports — day-to-day conditions)
   ========================================================= */

.issue-grid {
    display: grid;
    gap: 1.6rem;
    grid-template-columns: repeat(auto-fit, minmax(290px, 1fr));
}
.issue {
    background: var(--paper-3);
    border: 1.5px solid var(--ink);
    box-shadow: 4px 4px 0 var(--ink);
    padding: 1.5rem 1.5rem 1.6rem;
    display: flex;
    flex-direction: column;
}
.issue .issue-kicker {
    font-family: var(--f-mono);
    font-size: 0.68rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--brick);
    font-weight: 700;
    border-bottom: 1px solid var(--ink);
    padding-bottom: 0.5rem;
    margin-bottom: 0.85rem;
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 0.6rem;
}
.issue h3 {
    font-size: 1.32rem;
    line-height: 1.12;
    margin: 0 0 0.7rem;
    color: var(--ink);
}
.issue ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.issue li {
    position: relative;
    padding-left: 1.1rem;
    margin: 0.5rem 0;
    font-size: 0.97rem;
    line-height: 1.5;
    color: var(--ink-soft);
}
.issue li::before {
    content: "▪";
    position: absolute;
    left: 0;
    color: var(--ochre);
}
.issue .issue-figure {
    margin: -1.5rem -1.5rem 1.1rem;
    border-bottom: 1.5px solid var(--ink);
    overflow: hidden;
    background: var(--paper);
}
.issue .issue-figure img {
    width: 100%;
    height: 180px;
    object-fit: cover;
    filter: contrast(1.05) saturate(0.85);
}
.issue .death-toll {
    margin-top: auto;
    padding-top: 1rem;
}
.issue .death-toll .toll-num {
    font-family: var(--f-display);
    font-weight: 800;
    font-size: 1.7rem;
    color: var(--brick);
    line-height: 1;
}
.issue .death-toll .toll-label {
    font-family: var(--f-mono);
    font-size: 0.68rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-muted);
    display: block;
    margin-top: 0.25rem;
}


/* =========================================================
   "GOAL" PANELS (manifesto)
   ========================================================= */

.manifesto {
    margin: 1rem 0;
    counter-reset: demand;
}
.demand {
    display: grid;
    grid-template-columns: 90px 1fr;
    gap: 1.4rem;
    align-items: start;
    padding: 1.6rem 0;
    border-bottom: 1px solid var(--ink);
}
.demand:first-child { border-top: 4px solid var(--ink); padding-top: 1.8rem; }
.demand:last-child  { border-bottom: 4px solid var(--ink); }
.demand .num {
    font-family: var(--f-display);
    font-weight: 800;
    font-style: italic;
    font-variation-settings: "SOFT" 0, "WONK" 1;
    font-size: clamp(3rem, 5vw, 4.4rem);
    line-height: 0.9;
    color: var(--brick);
    counter-increment: demand;
    text-align: right;
}
.demand h3 {
    font-size: clamp(1.3rem, 2.1vw, 1.7rem);
    color: var(--ink);
    margin: 0.15rem 0 0.45rem;
    line-height: 1.18;
}
.demand p {
    margin: 0;
    color: var(--ink-soft);
    line-height: 1.6;
    font-size: 1.02rem;
    max-width: 60ch;
}
@media (max-width: 600px) {
    .demand { grid-template-columns: 60px 1fr; gap: 1rem; }
}

/* =========================================================
   SECTION-LINK CARDS (home page table of contents)
   ========================================================= */

.toc-grid {
    display: grid;
    gap: 1.4rem;
    grid-template-columns: repeat(auto-fit, minmax(245px, 1fr));
}
.toc-card {
    background: var(--paper-3);
    border: 1.5px solid var(--ink);
    padding: 1.4rem 1.4rem 1.5rem;
    text-decoration: none;
    color: var(--ink);
    position: relative;
    transition: background 0.2s ease, transform 0.2s ease;
    display: block;
    box-shadow: 3px 3px 0 var(--ink);
}
.toc-card:hover {
    background: var(--ochre-2);
    transform: translate(-1px, -1px);
    box-shadow: 4px 4px 0 var(--ink);
    color: var(--ink);
}
.toc-card .part {
    font-family: var(--f-mono);
    font-size: 0.7rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--brick);
    margin-bottom: 0.6rem;
    border-bottom: 1px solid var(--ink);
    padding-bottom: 0.4rem;
    display: flex; justify-content: space-between; align-items: baseline;
}
.toc-card .part .arrow { font-family: var(--f-display); font-style: italic; font-weight: 800; color: var(--ink); }
.toc-card h3 { margin: 0 0 0.4rem; }
.toc-card p  { margin: 0; font-size: 0.97rem; color: var(--ink-soft); line-height: 1.55; }

/* =========================================================
   STATS — newspaper kicker style
   ========================================================= */

.stat-strip {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 0;
    border: 2px solid currentColor;
    border-style: double;
}
.stat-cell {
    padding: 1.6rem 1.3rem;
    text-align: center;
    border-right: 1px solid currentColor;
}
.stat-cell:last-child { border-right: none; }
.stat-cell .stat-num {
    display: block;
    font-family: var(--f-display);
    font-weight: 800;
    font-size: clamp(2rem, 3.2vw, 2.7rem);
    line-height: 1;
    color: var(--brick-3);
    margin-bottom: 0.3rem;
    letter-spacing: -0.015em;
}
.section--ink .stat-cell .stat-num { color: var(--ochre-2); }
.stat-cell .stat-label {
    font-family: var(--f-mono);
    font-size: 0.7rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: rgba(245, 236, 214, 0.78);
    line-height: 1.45;
}
@media (max-width: 760px) {
    .stat-strip { grid-template-columns: repeat(2, 1fr); }
    .stat-cell { border-right: 1px solid currentColor; }
    .stat-cell:nth-child(2n) { border-right: none; }
    .stat-cell:nth-child(-n+2) { border-bottom: 1px solid currentColor; }
}

/* =========================================================
   CALL TO ACTION
   ========================================================= */

.cta-bar {
    background: var(--brick);
    color: var(--paper-3);
    padding: 3rem 0 3.2rem;
    border-top: 4px double var(--ink);
    border-bottom: 4px double var(--ink);
    text-align: center;
    position: relative;
}
.cta-bar::before, .cta-bar::after {
    content: "✻";
    color: var(--ochre-2);
    font-size: 1.6rem;
    line-height: 1;
    display: inline-block;
    margin: 0 1.2rem;
    vertical-align: middle;
}
.cta-bar h2 {
    color: var(--paper-3);
    font-size: clamp(1.6rem, 3vw, 2.4rem);
    text-transform: uppercase;
    letter-spacing: -0.015em;
    margin: 0.5rem auto 0.6rem;
    max-width: 22ch;
    line-height: 1.05;
}
.cta-bar h2 em {
    font-style: italic;
    color: var(--ochre-2);
    text-transform: none;
    font-weight: 400;
    font-variation-settings: "SOFT" 100, "WONK" 1;
}
.cta-bar p {
    color: rgba(245, 236, 214, 0.88);
    margin: 0 auto 1.6rem;
    max-width: 60ch;
    font-size: 1.05rem;
}
.btn {
    display: inline-block;
    font-family: var(--f-mono);
    font-size: 0.85rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--ink);
    background: var(--ochre-2);
    padding: 0.85rem 1.4rem;
    text-decoration: none;
    border: 2px solid var(--ink);
    box-shadow: 4px 4px 0 var(--ink);
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    margin: 0.3rem 0.4rem 0;
}
.btn:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 var(--ink);
    color: var(--ink);
}
.btn--outline {
    background: transparent;
    color: var(--paper-3);
    border-color: var(--paper-3);
    box-shadow: 4px 4px 0 var(--paper-3);
}
.btn--outline:hover { color: var(--paper-3); box-shadow: 6px 6px 0 var(--paper-3); }

/* =========================================================
   NOTE BLOCKS
   ========================================================= */

.note {
    background: var(--paper-3);
    border: 1.5px solid var(--ink);
    padding: 1rem 1.2rem;
    margin: 1.6rem 0;
    font-size: 0.98rem;
    color: var(--ink-soft);
    position: relative;
}
.note::before {
    content: "ED. NOTE";
    position: absolute;
    top: -0.6rem; left: 1rem;
    background: var(--paper);
    padding: 0 0.45rem;
    font-family: var(--f-mono);
    font-size: 0.65rem;
    letter-spacing: 0.22em;
    color: var(--brick);
    font-weight: 700;
}
.note strong { color: var(--ink); }

/* =========================================================
   FOOTNOTES / SOURCE NOTES
   ========================================================= */

.footnotes {
    font-family: var(--f-mono);
    font-size: 0.78rem;
    line-height: 1.55;
    color: var(--ink-muted);
    border-top: 1px solid var(--rule);
    padding-top: 1rem;
    margin-top: 2.4rem;
}
.footnotes strong { color: var(--ink); }
.prose sup, .dispatch-card sup, .document sup { color: var(--brick); font-weight: 700; }

/* =========================================================
   COLOPHON / FOOTER
   ========================================================= */

.colophon {
    background: var(--ink);
    color: var(--paper-3);
    padding: 3rem 0 1.6rem;
    margin-top: 0;
    position: relative;
    border-top: 4px double var(--brick);
}
.colophon .container { max-width: var(--col); margin: 0 auto; padding: 0 var(--gutter); }
.colophon-masthead {
    font-family: var(--f-display);
    font-weight: 800;
    font-size: 1.55rem;
    letter-spacing: -0.01em;
    margin-bottom: 0.2rem;
    text-transform: uppercase;
    color: var(--paper-3);
}
.colophon-masthead em {
    font-style: italic;
    color: var(--ochre-2);
    font-weight: 400;
    text-transform: none;
    font-variation-settings: "SOFT" 100, "WONK" 1;
}
.colophon-grid {
    display: grid;
    grid-template-columns: 1.6fr 1fr 1fr;
    gap: 2rem;
    padding-top: 1.4rem;
    margin-top: 1.3rem;
    border-top: 1px solid rgba(245,236,214,0.18);
}
.colophon-grid h4 {
    color: var(--ochre-2);
    font-family: var(--f-mono);
    font-size: 0.72rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    margin: 0 0 0.7rem;
    font-weight: 700;
}
.colophon-grid p { margin: 0.2rem 0; font-family: var(--f-body); color: rgba(245,236,214,0.85); font-size: 0.92rem; }
.colophon-grid ul { list-style: none; padding: 0; margin: 0; }
.colophon-grid li { margin: 0.32rem 0; }
.colophon-grid a {
    color: var(--paper-3);
    text-decoration: none;
    border-bottom: 1px solid rgba(245, 236, 214, 0.32);
    padding-bottom: 1px;
}
.colophon-grid a:hover { color: var(--ochre-2); border-color: var(--ochre-2); }
.colophon-base {
    border-top: 1px solid rgba(245,236,214,0.18);
    margin-top: 1.6rem;
    padding-top: 1rem;
    display: flex; justify-content: space-between; flex-wrap: wrap; gap: 1rem;
    font-family: var(--f-mono);
    font-size: 0.7rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: rgba(245,236,214,0.55);
}
@media (max-width: 760px) {
    .colophon-grid { grid-template-columns: 1fr; }
}

/* anchor offset for sticky nav */
.anchor { scroll-margin-top: 80px; }

/* =========================================================
   PARALLAX & SCROLL-DRIVEN MOTION
   ========================================================= */

/* All parallaxed elements compose their transform from CSS variables
   so multiple effects (translate + rotate + scale) cooperate. */
[data-parallax-y],
[data-parallax-x],
[data-parallax-rotate],
[data-parallax-scale] {
    transform:
        translate3d(var(--p-x, 0), var(--p-y, 0), 0)
        rotate(var(--p-rot, 0deg))
        scale(var(--p-sc, 1));
    will-change: transform;
}

/* Hero text inner-span layering for kinetic typography */
.hero-text h1 .line,
.hero-text h1 em {
    display: inline-block;
    will-change: transform;
}

/* Page-banner H1 lines split into independently-moving spans */
.page-banner h1 .line,
.page-banner h1 em {
    display: inline-block;
    will-change: transform;
}

/* Star layers */
.star-layer { mix-blend-mode: screen; }
.star-layer svg { filter: drop-shadow(0 0 1.5px rgba(255,255,255,0.35)); }
.hero { isolation: isolate; }

/* =========================================================
   REVEAL ANIMATIONS — fire once when the element enters view
   ========================================================= */

/* generic upward fade */
[data-reveal="up"] {
    opacity: 0;
    transform: translate3d(0, 36px, 0);
    transition:
        opacity   0.7s cubic-bezier(.2,.7,.2,1),
        transform 0.7s cubic-bezier(.2,.7,.2,1);
    will-change: transform, opacity;
}
[data-reveal="up"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}

/* dispatch card slides in from the left of the rail */
[data-reveal="dispatch"] {
    opacity: 0;
    transform: translate3d(-56px, 20px, 0);
    transition:
        opacity   0.78s cubic-bezier(.2,.7,.2,1),
        transform 0.78s cubic-bezier(.2,.7,.2,1);
    will-change: transform, opacity;
}
[data-reveal="dispatch"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}
/* the dispatch dot pops in after a tiny delay */
[data-reveal="dispatch"] ~ .dispatch-card,
[data-reveal="dispatch"] .dispatch-card { /* no-op, kept for safety */ }

/* primary source document — "slap down on the desk" */
[data-reveal="document"] {
    opacity: 0;
    transform: translate3d(0, 56px, 0) rotate(-3deg) scale(0.94);
    transition:
        opacity   0.95s cubic-bezier(.18,.85,.25,1),
        transform 0.95s cubic-bezier(.18,.85,.25,1);
    will-change: transform, opacity;
}
[data-reveal="document"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0) rotate(0deg) scale(1);
}

/* dossier card — pops up + slight rotate */
[data-reveal="dossier"] {
    opacity: 0;
    transform: translate3d(0, 32px, 0) scale(0.96);
    transition:
        opacity   0.65s cubic-bezier(.2,.7,.2,1),
        transform 0.65s cubic-bezier(.2,.7,.2,1);
    will-change: transform, opacity;
}
[data-reveal="dossier"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale(1);
}

/* polaroid photo — fades + rotates into its tilted resting angle */
[data-reveal="polaroid"] {
    opacity: 0;
    transform: translate3d(0, 24px, 0) rotate(-4deg);
    transition:
        opacity   0.7s cubic-bezier(.2,.7,.2,1),
        transform 0.7s cubic-bezier(.2,.7,.2,1);
}
[data-reveal="polaroid"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0) rotate(-0.6deg);
}
[data-reveal="polaroid"]:nth-child(even) {
    transform: translate3d(0, 24px, 0) rotate(4deg);
}
[data-reveal="polaroid"]:nth-child(even).is-visible {
    transform: translate3d(0, 0, 0) rotate(0.7deg);
}

/* stat cell — numbers count up, the cell itself rises */
[data-reveal="stat"] {
    opacity: 0;
    transform: translate3d(0, 18px, 0);
    transition:
        opacity   0.55s ease-out,
        transform 0.55s ease-out;
}
[data-reveal="stat"].is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}

/* counter — tabular nums so digits don't reflow during count-up */
[data-counter] { font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }

/* Reduced motion: clear everything */
@media (prefers-reduced-motion: reduce) {
    [data-parallax-y], [data-parallax-x],
    [data-parallax-rotate], [data-parallax-scale],
    [data-reveal] {
        transform: none !important;
        opacity: 1 !important;
        transition: none !important;
    }
}

/* =========================================================
   PRINT
   ========================================================= */

@media print {
    .masthead-nav, .cta-bar, .colophon { display: none; }
    body { background: #fff; color: #000; }
    .hero { background: #fff; color: #000; }
    .hero-text h1, .hero-text .lede { color: #000; }
    .hero-image-wrap img { filter: none; }
    .document { box-shadow: none; }
    .dossier, .toc-card, .dispatch-card { box-shadow: none; }
}
