/* =========================================================================
   TRENDING — the owner's mock, ported verbatim by
   scripts/build_trending_sheet.py. DO NOT hand-edit: edit
   specimens/trending-mock/index.html (or the transformer) and rebuild.
   The sheet's inline icons are Font Awesome Free 5.15.3 glyph paths
   (fontawesome.com), CC BY 4.0 — this comment is the attribution.
   ========================================================================= */

/* Compact chrome — the house desk numbers (ent/sports/food/opinion),
   on donor-identical markup. The owner named Opinion as the
   reference for this page's masthead: same band heights, same
   wordmark, same file. */
.trlight .band.utility { height: 30px; }
.trlight .brand-band.small { height: 58px; }
.trlight .brand-band.small .wordmark { width: 290px; }
.trlight nav.sections { height: 32px; }

/* ---- WIDTH — owner's call, 2026-08-15: '30% wider, and therefore
   bigger on all text, shapes etc, so it takes up more of the
   screen … the same width and sizing as the opinions page.'

   Opinion's law, applied to this drawing. The sheet is a fixed
   1024px mock: every measure in it is an absolute px the owner
   approved at that size, and a 6.7px label stretched into a wider
   container is still 6.7px. So the drawing is SCALED, not
   stretched — one --trz, driving `zoom` on the sheet and the house
   tail's width below it so the two stay flush.

   The rungs are Opinion's rungs, to the number, because he asked
   for the two pages to match. The cap is 1.3 — 30%, which is also
   the step at which Opinion's type stops growing — and it lands
   this 1024px drawing at 1331px against Opinion's 1313px.

   The ladder is stepped because CSS cannot divide a viewport width
   by a px length to get a unitless zoom; every rung keeps the
   scaled sheet above its own 1024px drawing width, so no rung
   starts the page panning sideways. Under 1080px nothing scales
   and the mock's own responsive block takes over. */
.trlight { max-width: none; border-radius: 0; box-shadow: none; }
.trlight { --trz: 1; }
@media (min-width:1080px){ .trlight { --trz: 1.02; } }
@media (min-width:1180px){ .trlight { --trz: 1.12; } }
@media (min-width:1280px){ .trlight { --trz: 1.22; } }
@media (min-width:1380px){ .trlight { --trz: 1.3; } }
.trlight .trsheet { zoom: var(--trz); }

/* FACES: Oswald and Permanent Marker are the mock's, kept. Unlike the
   Opinion port — which swapped Archivo Black and Caveat for house
   faces — this page's whole voice IS its condensed display type, and
   the owner's order was 'make it look exactly the same'. The families
   load from the host the donor head already preconnects to; the link
   is added in scripts/sections.py beside the Opinion precedent. */

/* The mock's own ground, moved off `body` (which the port does not
   own) and onto the sheet. The 1024px drawing centres itself exactly
   as its .site-shell did; the frame comes off on the wide desks'
   terms, so no border, no radius, no shadow. */
.trsheet{width:min(1024px,100%);margin:0 auto;background:#fff;color:#050505;font-family:Inter,Arial,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}

/* ---- THE PREFLIGHT, and why it is not optional. The mock's own
   stylesheet resets almost nothing, because its <head> loaded the
   Tailwind CDN and inherited Tailwind's preflight for free. It uses
   exactly two Tailwind utility classes, both in the dropped utility
   bar — so what that <script> tag was really buying this drawing was
   the RESET, and dropping the CDN without it is a visibly different
   page: .vibe-bottom, .culture-copy's Read link and every other
   <button> the mock never gave `border:0` come back wearing the
   browser's own button chrome, and the headings the mock never gave a
   weight (TRENDING SCOREBOARD, the newsletter head, the Culture Watch
   titles) render bold instead of at Oswald's own.

   So this is the slice of Tailwind v3 preflight the drawing was drawn
   against, scoped. It precedes the mock's own rules, which override it
   wherever they say anything. ---- */
.trsheet *,.trsheet *::before,.trsheet *::after,.trsheet-fx *,.trsheet-fx *::before,.trsheet-fx *::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}
.trsheet h1,.trsheet h2,.trsheet h3,.trsheet h4,.trsheet-fx h1,.trsheet-fx h2{font-size:inherit;font-weight:inherit}
.trsheet h1,.trsheet h2,.trsheet h3,.trsheet h4,.trsheet p,.trsheet figure,.trsheet blockquote,.trsheet-fx h1,.trsheet-fx h2,.trsheet-fx p{margin:0}
.trsheet img,.trsheet video,.trsheet-fx img{display:block;max-width:100%;height:auto}
.trsheet a,.trsheet-fx a{color:inherit;text-decoration:inherit}
.trsheet button,.trsheet input,.trsheet-fx button,.trsheet-fx input{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0;background-color:transparent;background-image:none;text-transform:none}
.trsheet button,.trsheet-fx button{-webkit-appearance:button;cursor:pointer}
.trsheet input::placeholder,.trsheet-fx input::placeholder{color:#9ca3af;opacity:1}
/* The Font Awesome webfont set its glyphs inline-block on a text
   baseline; the SVGs that replaced them need saying so, because the
   preflight line above has just made every svg a block. */
.trsheet svg,.trsheet-fx svg{display:inline-block;vertical-align:-.125em}

/* The overlays are the mock's, but they are viewport furniture rather
   than part of the 1024px drawing, so they ride OUTSIDE the zoom and
   keep the sizes the mock drew them at. */
.trsheet-fx{font-family:Inter,Arial,sans-serif;font-size:16px;line-height:1.5;color:#050505;-webkit-font-smoothing:antialiased}

/* ---- the mock's own stylesheet, selector for selector, scoped to
   the sheet. Its page frame (body, .site-shell, the drawn masthead
   and nav, the drawn footer, the search and menu sheets) is gone:
   the house chrome draws those. ---- */
.trsheet, .trsheet-fx { --acid: #dfff18; --blue: #1b34c8; --pink: #f324bd; --orange: #ff5a00; --ink: #050505; }
.trsheet * { box-sizing: border-box; }
.trsheet button, .trsheet input { font: inherit; }
.trsheet button, .trsheet a { -webkit-tap-highlight-color: transparent; }
.trsheet .wrap { width: calc(100% - 68px); max-width: 954px; margin-inline: auto; }
.trsheet .ticker { height: 35px; border-bottom: 1px solid #f1f1f1; display: flex; align-items: center; overflow: hidden; }
.trsheet .ticker-track { width: calc(100% - 142px); max-width: 880px; margin-inline: auto; display: flex; align-items: center; gap: 8px; white-space: nowrap; font-size: 7.6px; font-weight: 700; }
.trsheet .ticker-pill { flex: 0 0 auto; border-radius: 999px; padding: 5px 10px 4px; background: #080808; color: #fff; font-size: 6.7px; font-weight: 900; letter-spacing: .03em; }
.trsheet .ticker-dot { flex: 0 0 auto; width: 4px; height: 4px; border-radius: 50%; background: #111; }
.trsheet .ticker-dot.acid { background: #caef00; }
.trsheet .ticker-dot.yellow { background: #fbc500; }
.trsheet .ticker-dot.blue { background: #2b59ff; }
.trsheet .ticker-item { flex: 0 0 auto; }
.trsheet main { background: #fff; }
.trsheet .hero-grid { height: 323px; margin-top: 10px; display: grid; grid-template-columns: 121px repeat(5, minmax(0, 1fr)); gap: 6px; }
.trsheet .hero-intro { padding-top: 31px; }
.trsheet .hero-intro h1 { margin: 0; font-family: Oswald, Impact, sans-serif; font-weight: 700; text-transform: uppercase; white-space: nowrap; }
.trsheet .hero-intro h1 span { display: block; }
.trsheet .hero-intro .top-line { font-size: 43px; line-height: .82; letter-spacing: -2px; }
.trsheet .hero-intro .right-line { font-size: 32px; line-height: 1; letter-spacing: -1.7px; }
.trsheet .scribble { margin: 14px 0 9px 3px; font-family: "Permanent Marker", cursive; font-size: 32px; line-height: 1; letter-spacing: -5px; transform: rotate(-7deg); }
.trsheet .hero-intro p { width: 114px; margin: 0; font-size: 10px; line-height: 1.45; font-weight: 500; }
.trsheet .story-link { display: block; text-decoration: none; color: inherit; cursor: pointer; }
.trsheet .story-link:focus-visible { outline: 3px solid #315cff; outline-offset: 2px; }
.trsheet .hero-rail { display: contents; }
.trsheet .hero-card { height: 323px; overflow: hidden; border-radius: 6px; background: #ddd; transition: transform .18s ease, box-shadow .18s ease; }
.trsheet .hero-card:hover { transform: translateY(-3px); box-shadow: 0 9px 20px rgba(0,0,0,.15); }
.trsheet .hero-card img, .trsheet .trend-card img, .trsheet .deep-image, .trsheet .media-img { display: block; width: 100%; height: 100%; object-fit: fill; }
.trsheet .more-head { height: 24px; margin-top: 18px; display: flex; align-items: center; gap: 7px; font-size: 8px; font-weight: 900; text-transform: uppercase; }
.trsheet .trend-burst { width: 12px; height: 12px; border-radius: 50%; display: grid; place-items: center; background: var(--acid); color: #050505; font-size: 7px; }
.trsheet .mini-scribble { margin-left: 6px; font-family: "Permanent Marker", cursive; font-size: 25px; letter-spacing: -5px; transform: rotate(-8deg); }
.trsheet .trending-layout { height: 312px; margin-top: 9px; display: grid; grid-template-columns: minmax(0, 2.48fr) minmax(0, 1fr); gap: 15px; }
.trsheet .trending-left { min-width: 0; }
.trsheet .trend-cards { height: 170px; display: grid; grid-template-columns: .93fr 1.04fr 1fr .94fr; gap: 10px; }
.trsheet .trend-card { height: 170px; min-width: 0; overflow: hidden; border-radius: 5px; background: #ddd; transition: transform .18s ease; }
.trsheet .trend-card:hover { transform: translateY(-2px); }
.trsheet .trend-lower { height: 130px; margin-top: 12px; display: grid; grid-template-columns: 1.1fr .96fr; gap: 12px; }
.trsheet .mini-grid { min-width: 0; display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); grid-template-rows: repeat(2, 1fr); column-gap: 12px; row-gap: 7px; }
.trsheet .mini-story { position: relative; min-width: 0; display: grid; grid-template-columns: 59px minmax(0,1fr); gap: 8px; align-items: stretch; }
.trsheet .mini-story img { width: 59px; height: 58px; border-radius: 4px; object-fit: fill; }
.trsheet .mini-copy { padding-top: 3px; min-width: 0; }
.trsheet .mini-copy h3 { margin: 0; font-family: Oswald, sans-serif; font-size: 8.4px; line-height: 1.2; font-weight: 600; }
.trsheet .mini-count { margin-top: 4px; font-size: 6.5px; font-weight: 800; }
.trsheet .mini-count svg { color: #ff4b00; margin-right: 3px; }
.trsheet .mini-rank { position: absolute; right: -8px; top: 24px; font-family: Oswald, sans-serif; font-size: 12px; font-weight: 700; }
.trsheet .vibe-card { height: 130px; border: 1px solid #ececec; border-radius: 5px; padding: 9px 14px 7px; box-shadow: 0 3px 12px rgba(0,0,0,.07); overflow: hidden; }
.trsheet .vibe-kicker { color: #7c2bff; font-size: 7px; line-height: 1; font-weight: 900; text-transform: uppercase; }
.trsheet .vibe-card h3 { margin: 5px 0 8px; width: 145px; color: #0f2dac; font-size: 10.5px; line-height: 1.25; font-weight: 800; }
.trsheet .chips { display: flex; flex-wrap: wrap; gap: 4px; height: 37px; overflow: hidden; }
.trsheet .chip { border-radius: 6px; background: #f0effb; padding: 4px 8px; font-size: 5.8px; line-height: 1; white-space: nowrap; color: #555; }
.trsheet .vibe-bottom { height: 24px; margin-top: 2px; border-top: 1px solid #eee; display: flex; align-items: end; justify-content: center; gap: 8px; font-size: 6.7px; font-weight: 800; text-transform: uppercase; }
.trsheet .scoreboard { height: 312px; padding: 16px 17px 13px; border-radius: 5px; background: linear-gradient(145deg, #d7ff1e 0%, #f5ff32 48%, #d8ff16 100%); overflow: hidden; }
.trsheet .score-head { display: flex; align-items: flex-start; justify-content: space-between; height: 58px; }
.trsheet .score-head h2 { margin: 0; font-family: Oswald, sans-serif; font-size: 24px; line-height: .88; letter-spacing: -.8px; text-transform: uppercase; }
.trsheet .score-bolt { font-size: 34px; line-height: 1; transform: rotate(10deg); -webkit-text-stroke: 1px #000; color: transparent; margin: 1px 23px 0 0; }
.trsheet .score-list { margin-top: 4px; }
.trsheet .score-row { height: 31px; display: grid; grid-template-columns: 20px minmax(0,1fr) 28px; align-items: center; border-bottom: 1px solid rgba(0,0,0,.12); font-size: 9px; font-weight: 700; }
.trsheet .score-rank { font-size: 11px; }
.trsheet .score-value { text-align: right; font-size: 10px; font-weight: 900; }
.trsheet .score-button { display: flex; width: 172px; height: 25px; margin: 13px auto 0; align-items: center; justify-content: center; gap: 8px; border: 0; border-radius: 3px; background: #050505; color: white; font-size: 6.8px; font-weight: 900; letter-spacing: .02em; text-transform: uppercase; cursor: pointer; }
.trsheet .insight-grid { height: 269px; margin-top: 28px; display: grid; grid-template-columns: 1.28fr 1fr 1.02fr 1.08fr; gap: 11px; }
.trsheet .panel { min-width: 0; height: 269px; padding: 10px 9px 8px; border: 1px solid #ececec; border-radius: 5px; background: #fff; box-shadow: 0 3px 13px rgba(0,0,0,.07); overflow: hidden; }
.trsheet .panel-title { display: flex; align-items: center; gap: 7px; height: 18px; font-size: 8px; font-weight: 900; text-transform: uppercase; }
.trsheet .panel-title .icon-disc { width: 16px; height: 16px; border-radius: 50%; color: #fff; display: grid; place-items: center; font-size: 8px; }
.trsheet .panel-sub { height: 31px; padding-top: 3px; text-align: center; font-family: Oswald, sans-serif; font-size: 6.8px; }
.trsheet .pink { color: var(--pink); }
.trsheet .pink-bg { background: #d92de2; }
.trsheet .blue { color: #2541d9; }
.trsheet .blue-bg { background: #2541d9; }
.trsheet .orange { color: var(--orange); }
.trsheet .orange-bg { background: var(--orange); }
.trsheet .viral-body { height: 162px; display: grid; grid-template-columns: 1.25fr 1fr; gap: 9px; }
.trsheet .viral-main { overflow: hidden; border-radius: 4px; }
.trsheet .viral-side { display: grid; grid-template-rows: repeat(3, 1fr); gap: 3px; }
.trsheet .viral-item { min-width: 0; display: grid; grid-template-columns: 48px minmax(0,1fr); gap: 5px; }
.trsheet .viral-item img { width: 48px; height: 50px; border-radius: 3px; object-fit: fill; }
.trsheet .viral-item h3 { margin: 1px 0 0; font-family: Oswald, sans-serif; font-size: 6.4px; line-height: 1.16; font-weight: 600; }
.trsheet .viral-views { margin-top: 3px; font-size: 5.8px; font-weight: 800; }
.trsheet .viral-views svg { color: #ff4b00; }
.trsheet .panel-action { height: 37px; display: flex; align-items: end; justify-content: center; gap: 10px; border: 0; background: transparent; color: #2141ce; font-size: 7px; font-weight: 900; text-transform: uppercase; cursor: pointer; white-space: nowrap; }
.trsheet .search-list { height: 174px; padding: 0 2px; }
.trsheet .search-row { height: 25px; display: grid; grid-template-columns: minmax(0,1fr) 43px 28px; align-items: center; gap: 5px; font-size: 6.8px; font-weight: 700; }
.trsheet .search-bar { height: 3px; background: #e4e6f8; overflow: hidden; }
.trsheet .search-bar span { display: block; height: 100%; background: #2b47d8; }
.trsheet .search-num { text-align: right; font-size: 6px; font-weight: 800; white-space: nowrap; }
.trsheet .culture-list { height: 174px; display: grid; grid-template-rows: repeat(3, 1fr); gap: 4px; }
.trsheet .culture-item { display: grid; grid-template-columns: 96px minmax(0,1fr); gap: 9px; min-width: 0; }
.trsheet .culture-item img { width: 96px; height: 54px; object-fit: fill; border-radius: 4px; }
.trsheet .culture-copy h3 { margin: 3px 0 8px; font-family: Oswald, sans-serif; font-size: 8px; line-height: 1.15; }
.trsheet .read-link { border: 0; padding: 0; background: none; font-size: 6.5px; font-weight: 900; text-transform: uppercase; cursor: pointer; }
.trsheet .social-list { height: 174px; display: grid; grid-template-rows: repeat(5, 1fr); gap: 1px; }
.trsheet .social-row { min-width: 0; display: grid; grid-template-columns: 19px minmax(0,1fr) 17px 31px; gap: 6px; align-items: center; }
.trsheet .network-icon { width: 16px; height: 16px; border-radius: 50%; display: grid; place-items: center; background: #090909; color: #fff; font-size: 7px; font-weight: 900; }
.trsheet .network-icon.ig { color: #ff246c; background: #fff; border: 1px solid #ff246c; }
.trsheet .network-icon.tt { background: #fff; color: #050505; font-size: 11px; }
.trsheet .network-icon.yt { background: #fff; color: #f00; font-size: 10px; }
.trsheet .social-copy { font-family: Oswald, sans-serif; font-size: 7.2px; line-height: 1.12; font-weight: 600; }
.trsheet .network-mark { text-align: center; font-size: 9px; font-weight: 800; }
.trsheet .social-num { text-align: right; font-size: 6.4px; font-weight: 800; }
.trsheet .deep-section { margin-top: 18px; }
.trsheet .deep-head { height: 17px; display: flex; align-items: center; gap: 7px; font-size: 7.5px; font-weight: 900; text-transform: uppercase; }
.trsheet .deep-head .disc { width: 13px; height: 13px; border-radius: 50%; display: grid; place-items: center; background: #070707; color: #fff; font-size: 6px; }
.trsheet .deep-grid { height: 109px; margin-top: 6px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 9px; }
.trsheet .deep-card { min-width: 0; display: grid; grid-template-columns: .92fr 1.08fr; border-radius: 4px; overflow: hidden; background: #fafafa; transition: transform .18s ease; }
.trsheet .deep-card:hover { transform: translateY(-2px); }
.trsheet .deep-copy { padding: 13px 5px 6px 8px; min-width: 0; }
.trsheet .deep-copy h3 { margin: 0; font-family: Oswald, sans-serif; font-size: 11px; line-height: 1.14; font-weight: 600; }
.trsheet .byline { margin-top: 7px; font-size: 5.1px; line-height: 1.5; font-weight: 800; text-transform: uppercase; }
.trsheet .newsletter { height: 55px; margin-top: 16px; padding: 0 22px 0 28px; border-radius: 5px; background: linear-gradient(105deg, #e6ff24 0%, #d8ff1f 45%, #eeff2d 100%); display: grid; grid-template-columns: 73px 1fr 386px 86px; align-items: center; overflow: hidden; }
.trsheet .news-doodle { font-family: "Permanent Marker", cursive; font-size: 31px; letter-spacing: -7px; transform: rotate(-8deg); }
.trsheet .news-copy h2 { margin: 0; font-family: Oswald, sans-serif; font-size: 14px; line-height: 1.05; text-transform: uppercase; }
.trsheet .news-copy p { margin: 4px 0 0; font-size: 7px; font-weight: 600; }
.trsheet .subscribe-form { display: grid; grid-template-columns: 1fr 88px; gap: 10px; }
.trsheet .subscribe-form input { width: 100%; height: 24px; border: 0; border-radius: 3px; padding: 0 10px; background: #fff; outline: none; font-size: 7px; }
.trsheet .subscribe-form input:focus { box-shadow: 0 0 0 2px #111; }
.trsheet .subscribe-form button { height: 24px; border: 0; border-radius: 3px; background: #050505; color: #fff; font-size: 6.5px; font-weight: 900; text-transform: uppercase; cursor: pointer; }
.trsheet .news-stars { text-align: right; font-size: 29px; letter-spacing: 5px; transform: rotate(-8deg); }
.trsheet-fx .overlay { position: fixed; inset: 0; z-index: 50; display: none; align-items: center; justify-content: center; padding: 20px; background: rgba(0,0,0,.72); backdrop-filter: blur(4px); }
.trsheet-fx .overlay.open { display: flex; }
.trsheet-fx .dialog { width: min(470px, 100%); border-radius: 8px; padding: 24px; background: #fff; box-shadow: 0 20px 70px rgba(0,0,0,.3); }
.trsheet-fx .dialog-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; }
.trsheet-fx .dialog-kicker { color: #2944d5; font-size: 10px; font-weight: 900; text-transform: uppercase; }
.trsheet-fx .dialog h2 { margin: 7px 0 10px; font-family: Oswald, sans-serif; font-size: 28px; line-height: 1.05; }
.trsheet-fx .dialog p { margin: 0; color: #555; font-size: 12px; line-height: 1.6; }
.trsheet-fx .dialog-close { width: 31px; height: 31px; border: 0; border-radius: 50%; background: #f0f0f0; cursor: pointer; }
.trsheet-fx .toast { position: fixed; z-index: 80; left: 50%; bottom: 24px; transform: translate(-50%, 25px); opacity: 0; pointer-events: none; border-radius: 999px; padding: 10px 18px; background: #050505; color: #fff; font-size: 11px; font-weight: 700; transition: .22s ease; }
.trsheet-fx .toast.show { opacity: 1; transform: translate(-50%, 0); }
@media (max-width: 800px) {
.trsheet .wrap { width: calc(100% - 28px); }
.trsheet .utility-left .location, .trsheet .utility-left .utility-divider { display: none; }
.trsheet .utility-right > a { display: none; }
.trsheet .ticker-track { width: max-content; margin-left: 14px; }
.trsheet .hero-grid { height: auto; grid-template-columns: 1fr; gap: 10px; }
.trsheet .hero-intro { padding: 4px 0 8px; }
.trsheet .hero-intro .top-line { font-size: 38px; line-height: .85; }
.trsheet .hero-intro .right-line { font-size: 32px; line-height: 1; }
.trsheet .hero-intro p { width: auto; }
.trsheet .scribble { position: absolute; margin: -35px 0 0 165px; }
.trsheet .hero-rail { width: 100%; display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; scroll-snap-type: x mandatory; }
.trsheet .hero-card { flex: 0 0 160px; height: 323px; aspect-ratio: auto; scroll-snap-align: start; }
.trsheet .more-head { margin-top: 24px; }
.trsheet .trending-layout { height: auto; grid-template-columns: 1fr; }
.trsheet .trend-cards { height: auto; grid-template-columns: repeat(2, minmax(0,1fr)); }
.trsheet .trend-card { height: auto; aspect-ratio: .9; }
.trsheet .trend-lower { height: auto; grid-template-columns: 1fr; }
.trsheet .mini-grid { height: 254px; grid-template-columns: 1fr; grid-template-rows: repeat(4, 1fr); }
.trsheet .vibe-card { height: 130px; }
.trsheet .scoreboard { margin-top: 2px; }
.trsheet .insight-grid { height: auto; grid-template-columns: 1fr; }
.trsheet .panel { height: 269px; }
.trsheet .deep-grid { height: auto; grid-template-columns: 1fr; }
.trsheet .deep-card { height: 140px; }
.trsheet .newsletter { height: auto; min-height: 142px; padding: 16px; grid-template-columns: 52px 1fr; row-gap: 12px; }
.trsheet .news-doodle { font-size: 24px; }
.trsheet .subscribe-form { grid-column: 1 / -1; }
.trsheet .news-stars { display: none; }
.trsheet .footer-brand { grid-column: 1 / -1; }
}

/* ================================================================
   THE CLARITY PASS — owner's order, 2026-08-16: 'clean things up
   in terms of sizing, clarity, making things easier to swap out …
   what I DON'T want is you to totally undo the format that I
   loved.' So the format is untouched: nothing removed, nothing
   hidden, nothing reordered, no colour or word changed. Every
   rule below is one of SIZE (type to a readable floor), ROOM
   (the box fits its contents) or BROKEN (it does not work).
   Deleting this block reverts the pass exactly.
   ================================================================ */

/* ---- SIZE. The floor is 8px for a label, 10px for anything
   read as a story headline. Relative order is preserved: every
   value moves up, none crosses another, so his hierarchy is
   the hierarchy that ships. Rendered px are at the 1.3 rung. */
.trsheet .byline { font-size: 7px; }  /* 5.1 -> 7  (6.6 -> 9.1 rendered) deep-dive bylines */
.trsheet .chip { font-size: 8px; }  /* 5.8 -> 8  (7.5 -> 10.4 rendered) vibe-check chips */
.trsheet .viral-views { font-size: 7px; }  /* 5.8 -> 7  (7.5 -> 9.1 rendered) viral view counts */
.trsheet .search-num { font-size: 7.5px; }  /* 6 -> 7.5  (7.8 -> 9.8 rendered) search volumes */
.trsheet .viral-item h3 { font-size: 9.5px; }  /* 6.4 -> 9.5  (8.3 -> 12.3 rendered) viral rail headlines */
.trsheet .social-num { font-size: 7.5px; }  /* 6.4 -> 7.5  (8.3 -> 9.8 rendered) social counts */
.trsheet .mini-count { font-size: 7.5px; }  /* 6.5 -> 7.5  (8.5 -> 9.8 rendered) mini-story counts */
.trsheet .read-link { font-size: 8px; }  /* 6.5 -> 8  (8.5 -> 10.4 rendered) Culture Watch READ links */
.trsheet .ticker-pill { font-size: 8px; }  /* 6.7 -> 8  (8.7 -> 10.4 rendered) the TRENDING NOW pill */
.trsheet .vibe-bottom { font-size: 8px; }  /* 6.7 -> 8  (8.7 -> 10.4 rendered) Explore All Trends */
.trsheet .score-button { font-size: 8px; }  /* 6.8 -> 8  (8.8 -> 10.4 rendered) See the Full Scoreboard */
.trsheet .panel-sub { font-size: 9px; }  /* 6.8 -> 9  (8.8 -> 11.7 rendered) panel deck lines */
.trsheet .search-row { font-size: 9px; }  /* 6.8 -> 9  (8.8 -> 11.7 rendered) search terms */
.trsheet .vibe-kicker { font-size: 8px; }  /* 7 -> 8  (9.1 -> 10.4 rendered) DAILY VIBE CHECK */
.trsheet .panel-action { font-size: 8px; }  /* 7 -> 8  (9.1 -> 10.4 rendered) panel footer links */
.trsheet .social-copy { font-size: 10px; }  /* 7.2 -> 10  (9.4 -> 13 rendered) Most Talked About headlines */
.trsheet .deep-head { font-size: 9px; }  /* 7.5 -> 9  (9.8 -> 11.7 rendered) TRENDING DEEP DIVES */
.trsheet .ticker-item { font-size: 9.5px; }  /* 7.6 -> 9.5  (9.9 -> 12.3 rendered) ticker headlines */
.trsheet .more-head { font-size: 9px; }  /* 8 -> 9  (10.4 -> 11.7 rendered) MORE TRENDING RIGHT NOW */
.trsheet .panel-title { font-size: 9px; }  /* 8 -> 9  (10.4 -> 11.7 rendered) panel titles */
.trsheet .culture-copy h3 { font-size: 11px; }  /* 8 -> 11  (10.4 -> 14.3 rendered) Culture Watch headlines */
.trsheet .mini-copy h3 { font-size: 11px; }  /* 8.4 -> 11  (10.9 -> 14.3 rendered) mini-story headlines */
.trsheet .news-copy p { font-size: 8.5px; }  /* 7 -> 8.5  (9.1 -> 11.1 rendered) newsletter deck */
.trsheet .score-row { font-size: 10px; }  /* 9 -> 10  (11.7 -> 13 rendered) scoreboard rows */
.trsheet .deep-copy h3 { font-size: 12px; }  /* 11 -> 12  (14.3 -> 15.6 rendered) deep-dive headlines */
.trsheet .network-icon { font-size: 8.5px; }  /* 7 -> 8.5  (9.1 -> 11.1 rendered) social platform glyphs */
.trsheet .network-mark { font-size: 10px; }  /* 9 -> 10  (11.7 -> 13 rendered) social platform marks */
.trsheet .subscribe-form input { font-size: 8.5px; }  /* 7 -> 8.5  (9.1 -> 11.1 rendered) the newsletter field */
.trsheet .subscribe-form button { font-size: 8px; }  /* 6.5 -> 8  (8.5 -> 10.4 rendered) the Subscribe button */

/* Leading follows the size up — his ratios, not new ones. */
.trsheet .byline { line-height: 1.5; }
.trsheet .mini-copy h3 { line-height: 1.22; }
.trsheet .viral-item h3 { line-height: 1.2; }
.trsheet .social-copy { line-height: 1.18; }
.trsheet .culture-copy h3 { line-height: 1.2; }
.trsheet .deep-copy h3 { line-height: 1.18; }

/* ---- ROOM. Twenty-two hard pixel heights, no clamp anywhere: two
   containers clipped with his own copy and eleven clipped the moment
   a real headline went in — silently, with no ellipsis, so a reader
   could not tell text was missing. Each box below keeps the height he
   drew as its MINIMUM and is allowed to grow past it. This is the row
   he offered: 'you can add a row if need be for more space'. */

/* The four insight panels. 10+18+31+174+37+8 = 278px of content in a
   269px box, which is why two footer links sat below their own
   border. As a four-row grid the list takes the slack and the footer
   pins to the bottom of all four — so they finally share a baseline,
   including Culture Watch, which he drew without a footer and which
   still has none. */
.trsheet .insight-grid { height: auto; align-items: stretch; }
.trsheet .panel { height: auto; min-height: 269px;
  display: grid; grid-template-rows: auto auto 1fr auto; }
.trsheet .search-list, .trsheet .social-list,
.trsheet .culture-list, .trsheet .viral-body { height: auto;
  min-height: 0; align-content: start; }
.trsheet .search-row { height: auto; min-height: 25px; }
.trsheet .panel-sub { height: auto; }
.trsheet .panel-title { height: auto; min-height: 18px; }

/* The trending band and its scoreboard, which must stay the same
   height as each other however tall the band gets. */
.trsheet .trending-layout { height: auto; align-items: stretch; }
.trsheet .trend-lower { height: auto; }
.trsheet .mini-grid { row-gap: 12px; }
.trsheet .vibe-card { height: auto; min-height: 130px;
  display: grid; grid-template-rows: auto auto 1fr auto; }
.trsheet .chips { height: auto; max-height: none; align-content: start; }
.trsheet .scoreboard { height: auto; min-height: 312px;
  display: grid; grid-template-rows: auto 1fr auto; }
.trsheet .score-row { height: auto; min-height: 31px; }

/* The deep dives, which clipped 31px of card one before any real
   content arrived — the byline was sitting on the cut line. */
.trsheet .deep-grid { height: auto; min-height: 109px;
  align-items: stretch; }
.trsheet .deep-card { min-height: 109px; }
.trsheet .deep-copy { padding: 11px 6px 8px 9px; }
.trsheet .more-head { height: auto; min-height: 24px; }
.trsheet .deep-head { height: auto; min-height: 17px; }
.trsheet .hero-intro h1 { line-height: normal; }
.trsheet .hero-intro .top-line { line-height: .9; }

/* And the clamp, so a headline longer than its slot ENDS somewhere a
   reader can see rather than being cut mid-word. Two lines where he
   drew two, three where he drew three. */
.trsheet .mini-copy h3, .trsheet .viral-item h4,
.trsheet .culture-copy h4, .trsheet .social-copy {
  display: -webkit-box; -webkit-box-orient: vertical;
  -webkit-line-clamp: 3; overflow: hidden; }
.trsheet .deep-copy h3 { display: -webkit-box;
  -webkit-box-orient: vertical; -webkit-line-clamp: 4;
  overflow: hidden; }

/* ---- BROKEN #1: the headline overran its own column. 'Right Now'
   in Oswald 700/32px measures 133.1px; its track is 121px. Minus the
   6px gap that is 6.1px of ink on top of hero card one — 8px once the
   page zooms. The track was sized to the drawing rather than measured
   against the string. Widening it 19px costs the five cards 2.4% of
   their width and clears the headline by 6.9px. The type does not
   shrink: this is the one place the page's voice lives. */
/* Gated at 801px ON PURPOSE. This rule first shipped unmediated and
   silently beat the mock's own `@media (max-width:800px)` one-column
   layout — equal specificity, later in the file — so on a phone the
   hero rail computed to a 34px column holding 962px of cards and the
   reader saw a vertical sliver of card one. A desktop fix has to say
   it is a desktop fix. */
@media (min-width: 801px) {
  .trsheet .hero-grid { grid-template-columns: 140px
    repeat(5, minmax(0,1fr)); height: auto; }
  .trsheet .hero-intro { min-width: 0; }
}

/* ---- BROKEN #2: the marquee never moved. computed animation was
   `none` and the track (880px) was NARROWER than its box, so there
   was nothing to scroll even in principle. Worse, on a phone the
   track painted out to x=780 inside a clipped 390px box — three of
   five headlines were dead content nobody could reach. The item list
   is now emitted twice (the copy aria-hidden) so -50% loops
   seamlessly. Pause on hover and on keyboard focus, because moving
   text with no pause control is an accessibility failure; and under
   reduced-motion it becomes a strip a thumb can drag instead. */
@keyframes tr-marquee { from { transform: translateX(0); }
                          to { transform: translateX(-50%); } }
.trsheet .ticker { overflow: hidden; gap: 10px;
  padding-left: calc((100% - 880px) / 2); }
.trsheet .ticker-pill { flex: 0 0 auto; z-index: 2; }
/* The track's own clipping window. Without it the strip
   scrolls a headline straight through the pill. */
.trsheet .ticker-view { flex: 1 1 auto; min-width: 0;
  overflow: hidden; height: 100%; display: flex;
  align-items: center; }
.trsheet .ticker-track { width: max-content; max-width: none;
  margin-inline: 0; padding-left: 20px; will-change: transform;
  animation: tr-marquee 46s linear infinite; }
.trsheet .ticker:hover .ticker-track,
.trsheet .ticker:focus-within .ticker-track { animation-play-state: paused; }

/* ---- BROKEN #3: the doodle is deleted (owner, 2026-08-16 — he
   could not tell what it was, which is the only test a
   decorative mark has to pass). These three rules close the
   space it held so nothing collapses behind it. */
.trsheet .hero-intro p { margin-top: 26px; }
.trsheet .newsletter { grid-template-columns: 1fr 386px 86px; }
.trsheet .more-head { gap: 9px; }
/* ---- BROKEN #4: the vibe-card divider was set on a <button>, which
   shrinks to its text, so the hairline stopped a third of the way
   across the card. */
.trsheet .vibe-bottom { width: 100%; }

/* ---- LEFT AS DRAWN: the mini-story rank. It sits 10px outside its
   own card, which the audit called ambiguous — but moving it inside
   costs the headline beside it a column of width, and he drew two of
   four ranked on purpose. His call, his numerals, his position. Only
   the size comes up, with everything else. */
.trsheet .mini-rank { font-size: 13px; }

/* ---- BROKEN #6: `object-fit: fill` on all 24 images stretches the
   bitmap to the box and ignores its aspect. Invisible while the art
   is pre-cut per slot; a 3:2 news photo in a hero card would render
   at a third of its correct width — a face one-third normal. */
.trsheet .hero-card img, .trsheet .trend-card img,
.trsheet .deep-image, .trsheet .media-img,
.trsheet .mini-story img, .trsheet .viral-item img,
.trsheet .culture-item img { object-fit: cover;
  object-position: 50% 35%; }
.trsheet .deep-card .deep-image { min-height: 0; }

/* ---- BROKEN #7: tapping. 'READ →' was a 34x13px target, under half
   the accessible minimum, and that is the ZOOMED size. The hit box
   grows; the ink does not move. */
.trsheet .read-link { padding: 7px 5px; margin: -7px -5px; }
.trsheet .panel-action, .trsheet .vibe-bottom,
.trsheet .score-button { min-height: 32px; }

/* ---- BROKEN #8: focus rings were sliced by the same overflow that
   clipped the labels — three sides drawn, the fourth outside the
   panel. A keyboard reader could not see where they were. */
.trsheet .panel-action:focus-visible, .trsheet .read-link:focus-visible,
.trsheet .vibe-bottom:focus-visible, .trsheet .score-button:focus-visible {
  outline: 2px solid #1b34c8; outline-offset: -2px; border-radius: 2px; }

/* ---- BROKEN #9: four inks failed contrast at their rendered size —
   the colophon at 2.82:1, Culture Watch's orange at 3.13, the two
   pinks at 3.62, against the 4.5 a reader is owed. Only the SMALL
   TEXT darkens. The discs, badges and every other painted surface
   keep his exact --pink and --orange, so the page's colour is his. */
.trsheet .panel-title.orange { color: #c44300; }   /* 3.13 -> 5.06 */
.trsheet .panel-title.pink,
.trsheet .network-mark.pink { color: #b21d8f; }    /* 3.62 -> 6.06 */
.trsheet .sheet-colophon { color: #6a6a66; }       /* 2.82 -> 5.43 */

/* ---- THE CARDS. Nine slots whose headline, badge, numeral,
   flag and counter used to be pixels inside a PNG. Same
   arrangement, same sizes, same colours — every field and ink
   below was sampled out of his own plates — but the words are
   words now, so swapping a story is editing a string. The art
   behind them is regenerated clean by
   scripts/gen_trending_plates.py. ---- */

.trsheet .hero-card, .trsheet .trend-card { position: relative;
  display: block; }
.trsheet .hero-art, .trsheet .trend-art { position: absolute;
  inset: 0; width: 100%; height: 100%; object-fit: cover; }
.trsheet .hero-card > :not(img), .trsheet .trend-card > :not(img)
  { position: absolute; }

/* The colour field his art carried behind the headline, as a wash
   over the plate: solid where he painted it solid (cards 1 and 2),
   fading into the photograph where he let it (3, 4, 5). One
   gradient, one custom property, five cards. */
.trsheet .hero-card { color: var(--ink); }
.trsheet .hero-wash { inset: 0; background: linear-gradient(180deg,
  var(--field) 0%, var(--field) 26%,
  color-mix(in srgb, var(--field) 55%, transparent) 40%,
  transparent 58%); }
@supports not (color: color-mix(in srgb, red, blue)) {
  .trsheet .hero-wash { background: linear-gradient(180deg,
    var(--field) 0%, var(--field) 28%, transparent 56%); }
}
.trsheet .hero-badge { top: 11px; left: 10px; border-radius: 3px;
  padding: 3px 6px 2px; background: var(--badge);
  color: var(--badge-ink); font: 900 8px/1 'Inter', Arial,
  sans-serif; letter-spacing: .04em; text-transform: uppercase; }
.trsheet .hero-hed { top: 30px; left: 10px; right: 9px; margin: 0;
  font: 700 11.5px/1.26 'Inter', Arial, sans-serif;
  letter-spacing: -.012em; }
.trsheet .hero-num { left: 3px; bottom: -7px; color: #fff;
  font: 800 82px/1 'Inter', Arial, sans-serif; letter-spacing: -.04em; }
.trsheet .hero-go { right: 9px; bottom: 11px; width: 19px;
  height: 19px; border: 1.4px solid #fff; border-radius: 50%;
  color: #fff; display: grid; place-items: center; }
.trsheet .hero-go svg { width: 10px; height: 10px; }

/* The trend cards read white on a dark foot, which his plates did
   with a painted gradient. Same gradient, drawn rather than baked,
   so any photograph dropped in behind it still reads. */
.trsheet .trend-card { color: #fff; }
.trsheet .trend-scrim { inset: 0; background: linear-gradient(180deg,
  rgba(0,0,0,.42) 0%, rgba(0,0,0,0) 26%, rgba(0,0,0,0) 34%,
  rgba(0,0,0,.82) 78%, rgba(0,0,0,.92) 100%); }
.trsheet .trend-rank { top: 7px; left: 7px; width: 13px;
  height: 13px; border-radius: 3px; background: #e6242c;
  color: #fff; display: grid; place-items: center;
  font: 900 8.5px/1 'Inter', Arial, sans-serif; }
.trsheet .trend-flag { top: 7px; right: 7px;
  font: 900 8px/1 'Inter', Arial, sans-serif; letter-spacing: .04em;
  text-transform: uppercase; }
.trsheet .trend-flag-pill { border-radius: 3px; padding: 4px 7px 3px;
  background: #ff5a00; color: #fff; }
/* His starburst, drawn: a yellow disc clipped to a twelve-point
   star, which is what the painted sticker was. */
.trsheet .trend-flag-burst { display: grid; place-items: center;
  width: 38px; height: 38px; top: 4px; right: 4px; background: #ffe11a;
  color: #0a0a0a; font-size: 8.5px; transform: rotate(-8deg);
  clip-path: polygon(50% 0%,61% 14%,78% 8%,80% 26%,96% 30%,88% 45%,
    100% 57%,85% 66%,90% 83%,72% 82%,66% 98%,50% 88%,34% 98%,28% 82%,
    10% 83%,15% 66%,0% 57%,12% 45%,4% 30%,20% 26%,22% 8%,39% 14%); }
.trsheet .trend-hed { left: 9px; right: 9px; bottom: 22px; margin: 0;
  font: 600 11px/1.24 'Oswald', Impact, sans-serif; }
.trsheet .trend-count { right: 9px; bottom: 7px;
  font: 800 8px/1 'Inter', Arial, sans-serif; }
.trsheet .trend-count svg { color: #ff4b00; margin-right: 3px; }

/* The play badge every clip thumbnail used to have painted on. */
.trsheet .tr-play { position: absolute; left: 50%; top: 50%;
  translate: -50% -50%; z-index: 2; width: 22px; height: 22px;
  border-radius: 50%; background: rgba(12,12,12,.62);
  color: #fff; display: grid; place-items: center;
  pointer-events: none; }
.trsheet .tr-play svg { width: 11px; height: 11px; }
.trsheet .viral-main, .trsheet .viral-item, .trsheet .mini-story,
.trsheet .culture-item, .trsheet .deep-card { position: relative; }
/* On the split cards the badge belongs over the picture, not over
   the middle of the card. */
.trsheet .viral-item .tr-play { left: 24px; }
.trsheet .mini-story .tr-play { left: 30px; width: 19px;
  height: 19px; }
.trsheet .culture-item .tr-play { left: 48px; }
.trsheet .deep-card .tr-play { left: auto; right: 25%; }

/* ---- The phone. Two responsive systems that never met: the zoom
   ladder bottoms out at min-width:1080px and his own block starts at
   max-width:800px, leaving 801-1079px — an iPad in portrait, a
   half-screen window — rendering a 1024px drawing unscaled in a
   narrower container, with overflows that happen on neither side of
   the gap. His block simply starts higher now, so his own layout
   covers the band. No new layout was invented for it.

   The band also gets the type help the zoom used to give it. Above
   1080 a label is 8px multiplied to 10.4 by --trz; here --trz is 1,
   so 8px is 8px. These sizes are the desktop floor carried across at
   1.2x — the same reading size, arrived at by the type instead of by
   the zoom. The layout stays exactly the drawing he made. */
@media (max-width: 1079px) {
  .trsheet .panel, .trsheet .vibe-card, .trsheet .scoreboard,
  .trsheet .deep-card { height: auto; }
  .trsheet .newsletter { height: auto; min-height: 55px;
    padding: 10px 22px 10px 28px; }
  .trsheet .search-row { grid-template-columns: minmax(0,1fr) 72px 40px;
    gap: 9px; }
  .trsheet .byline { font-size: 8.5px; }
  .trsheet .chip { font-size: 9.5px; }
  .trsheet .viral-views { font-size: 8.5px; }
  .trsheet .search-num { font-size: 9px; }
  .trsheet .viral-item h3 { font-size: 11.5px; }
  .trsheet .social-num { font-size: 9px; }
  .trsheet .mini-count { font-size: 9px; }
  .trsheet .read-link { font-size: 9.5px; }
  .trsheet .ticker-pill { font-size: 9.5px; }
  .trsheet .vibe-bottom { font-size: 9.5px; }
  .trsheet .score-button { font-size: 9.5px; }
  .trsheet .panel-sub { font-size: 11px; }
  .trsheet .search-row { font-size: 11px; }
  .trsheet .vibe-kicker { font-size: 9.5px; }
  .trsheet .panel-action { font-size: 9.5px; }
  .trsheet .social-copy { font-size: 12px; }
  .trsheet .deep-head { font-size: 11px; }
  .trsheet .ticker-item { font-size: 11.5px; }
  .trsheet .more-head { font-size: 11px; }
  .trsheet .panel-title { font-size: 11px; }
  .trsheet .culture-copy h3 { font-size: 13px; }
  .trsheet .mini-copy h3 { font-size: 13px; }
  .trsheet .news-copy p { font-size: 10px; }
  .trsheet .score-row { font-size: 12px; }
  .trsheet .deep-copy h3 { font-size: 14.5px; }
  .trsheet .network-icon { font-size: 10px; }
  .trsheet .network-mark { font-size: 12px; }
  .trsheet .subscribe-form input { font-size: 10px; }
  .trsheet .subscribe-form button { font-size: 9.5px; }
  .trsheet .hero-badge { font-size: 10px; }
  .trsheet .hero-hed { font-size: 13px; }
  .trsheet .hero-num { font-size: 82px; }
  .trsheet .trend-rank { font-size: 9px; }
  .trsheet .trend-flag { font-size: 9px; }
  .trsheet .trend-hed { font-size: 13px; }
  .trsheet .trend-count { font-size: 9px; }
  .trsheet .hero-intro p { font-size: 11px; }
}

/* Below 800 the zoom is 1 and cannot help — a rung under 1 would
   shrink a drawing that is already 1024px wide. So the phone carries
   its own scale. This is the one place the drawing stops being
   verbatim, and his own block already abandons the desktop layout
   here (one-column grids, a swipeable hero rail); the type follows. */
@media (max-width: 800px) {
  .trsheet .byline { font-size: 10px; }
  .trsheet .chip { font-size: 11px; }
  .trsheet .viral-views { font-size: 11px; }
  .trsheet .search-num { font-size: 11px; }
  .trsheet .social-num { font-size: 11px; }
  .trsheet .mini-count { font-size: 11px; }
  .trsheet .ticker-item { font-size: 13px; }
  .trsheet .ticker-pill { font-size: 11px; }
  .trsheet .search-row { font-size: 13px; }
  .trsheet .read-link { font-size: 12px; }
  .trsheet .panel-action { font-size: 12px; }
  .trsheet .panel-title { font-size: 12px; }
  .trsheet .panel-sub { font-size: 12px; }
  .trsheet .vibe-kicker { font-size: 11px; }
  .trsheet .score-row { font-size: 14px; }
  .trsheet .viral-item h3 { font-size: 13px; }
  .trsheet .social-copy { font-size: 14px; }
  .trsheet .mini-copy h3 { font-size: 15px; }
  .trsheet .culture-copy h3 { font-size: 15px; }
  .trsheet .deep-copy h3 { font-size: 18px; }
  .trsheet .more-head { font-size: 12px; }
  .trsheet .deep-head { font-size: 12px; }
  .trsheet .news-copy p { font-size: 12px; }
  .trsheet .hero-intro p { font-size: 14px; }
  .trsheet .network-icon { font-size: 12px; }
  .trsheet .network-mark { font-size: 13px; }
  .trsheet .subscribe-form input { font-size: 14px; }
  .trsheet .subscribe-form button { font-size: 12px; }
  .trsheet .hero-badge { font-size: 11px; }
  .trsheet .hero-hed { font-size: 18px; }
  .trsheet .hero-num { font-size: 74px; }
  .trsheet .trend-rank { font-size: 12px; }
  .trsheet .trend-flag { font-size: 11px; }
  .trsheet .trend-hed { font-size: 17px; }
  .trsheet .trend-count { font-size: 12px; }
  .trsheet .panel { min-height: 0; padding: 14px 14px 12px; }
  .trsheet .search-row { grid-template-columns: minmax(0,1fr) 92px 44px;
    min-height: 34px; gap: 10px; }
  .trsheet .social-row { grid-template-columns: 24px minmax(0,1fr) 22px 46px;
    min-height: 34px; }
  .trsheet .viral-body { grid-template-columns: 1fr; }
  .trsheet .culture-item { min-height: 0; }
  .trsheet .culture-list, .trsheet .social-list,
  .trsheet .viral-side { grid-template-rows: none;
    grid-auto-rows: auto; gap: 12px; }
  .trsheet .viral-item { grid-template-columns: 84px minmax(0,1fr); }
  .trsheet .viral-item img { width: 84px; height: 62px; }
  .trsheet .culture-item { grid-template-columns: 128px minmax(0,1fr); }
  .trsheet .culture-item img { width: 128px; height: 72px; }
  .trsheet .mini-story img { width: 78px; height: 74px; }
  .trsheet .mini-story { grid-template-columns: auto 78px minmax(0,1fr); }
  .trsheet .mini-story:not(:has(> .mini-rank)) {
    grid-template-columns: 78px minmax(0,1fr); }
  .trsheet .deep-card { grid-template-columns: 1fr; height: auto; }
  .trsheet .deep-card .deep-image { aspect-ratio: 16/9; height: auto; }
  .trsheet .deep-copy { padding: 14px 14px 16px; }
  .trsheet .vibe-card { min-height: 0; }
  .trsheet .scoreboard { min-height: 0; }
  .trsheet .chips { height: auto; }
  /* The hero rail is a swipeable row down here and the only hint that
     more cards exist is one being sliced by the screen edge. A fade
     off the right edge says 'keep going' without adding furniture. */
  .trsheet .hero-rail { scroll-padding-inline: 14px;
    -webkit-mask-image: linear-gradient(90deg, #000 0,
      #000 calc(100% - 26px), transparent 100%);
    mask-image: linear-gradient(90deg, #000 0,
      #000 calc(100% - 26px), transparent 100%); }
  .trsheet .hero-card { flex: 0 0 186px; }
  .trsheet .scribble { margin: -38px 0 0 174px; }
}

/* Reduced motion: the marquee stops and becomes draggable, and the
   card hovers stop moving. The house sheet does this globally; the
   sheet says it for itself so the rule cannot be lost. */
@media (prefers-reduced-motion: reduce) {
  .trsheet .ticker { overflow-x: auto; }
  .trsheet .ticker-track { animation: none; }
  .trsheet *, .trsheet-fx * { animation-duration: .001ms !important;
    transition-duration: .001ms !important; }
}

/* ---- sheet furniture the port added: the sample-art colophon,
   one quiet true sentence, in the mock's own measure. ---- */
.trsheet .sheet-colophon{width:calc(100% - 68px);max-width:954px;margin:10px auto 0;padding-bottom:8px;text-align:right;font:9.5px Inter,Arial,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:#6a6a66}

/* The house tail below the sheet: the desk's real stories, plate
   and switcher — standing site furniture, not the owner's design.
   It is NOT zoomed, so it tracks the sheet's rendered width by
   multiplying the drawing by the same --trz. */
.tr-tail { max-width: calc(1024px * var(--trz, 1)); margin: 0 auto; padding: 22px 16px 10px; }
.tr-tail-links { font: 700 9px 'Inter', Arial, sans-serif; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 10px; }
.tr-tail-links a { color: #444; text-decoration: none; }
.tr-tail-file { list-style: none; margin: 0 0 6px; padding: 0; columns: 2; column-gap: 40px; }
.tr-tail-file li { font: 11px/1.9 'Source Serif 4', Georgia, serif; break-inside: avoid; }
.tr-tail-file .file-date { font: 700 9.5px 'Inter', Arial, sans-serif; letter-spacing: .05em; color: #6a6a66; margin-right: 6px; text-transform: uppercase; }
.tr-tail-file a { color: #222; text-decoration: none; }
.tr-tail-file a:hover { text-decoration: underline; }
