/* ---- yster (Yster — Strength & conditioning gym 177) -----------------------
   THE STRUCTURAL MOVE: the week and the staff are welded into one block. The
   timetable breaks out of the narrow column and runs six hairline-ruled day
   lines, each headed by an oxidised-iron left rule, and the four coach tiles
   land directly under it with their gutters at zero so the photographs meet
   edge to edge — the only ungapped thing on a page that gaps everything else.
   Galvanised grey-white ground and graphite type the whole way down, exactly
   two near-black photographic bleeds (the full-viewport hero and the membership
   band), and iron orange spent only on the buttons, the day rules and the four
   icon strokes. No second accent, no gradient, no tinted card. */
body.t-yster.ws-body {
  --bg: #f2f1ee; --fg: #3a3c3f; --heading: #121315; --text: #3a3c3f; --muted: #7e8085;
  --ys-iron: #c2521f; --ys-line: #d9d7d1; --ys-ink: #16171a;
  --hero-a: rgba(10, 11, 12, .34); --hero-b: rgba(10, 11, 12, .66);
}

/* slim graphite bar — wordmark hard left, five plain words hard right */
body.t-yster .ws-nav { background: var(--ys-ink); backdrop-filter: none; border-bottom: 1px solid rgba(244, 243, 239, .14); }
body.t-yster .ws-brand { color: #f4f3ef; text-transform: uppercase; letter-spacing: .3em; font-size: 12.5px; font-weight: 800; }
body.t-yster .ws-nav-links a { color: #f4f3ef; text-transform: uppercase; letter-spacing: .16em; font-size: 10.5px; font-weight: 700; opacity: .72; }

/* bleed 1 of 2 — one still frame, the whole viewport, copy dead centre */
body.t-yster .ws-hero { min-height: 100vh; }
body.t-yster .ws-hero h1 { font-size: clamp(38px, 7.4vw, 92px); font-weight: 800; text-transform: uppercase; letter-spacing: -.03em; line-height: .94; text-shadow: none; }
body.t-yster.ws-body .btn.brand { background: var(--ys-iron); color: #fbf9f5; border: 0; border-radius: 0; box-shadow: none; text-transform: uppercase; letter-spacing: .2em; font-size: 10.5px; font-weight: 800; padding: 17px 34px; }

/* one unbroken ground — the shared zebra wash off so nothing tints */
body.t-yster .ws-section { padding: 96px 0; }
body.t-yster.ws-body .ws-section:nth-child(even):not(.ws-cta):not(.ws-shoplink) { background: transparent; }
body.t-yster .ws-h2, body.t-yster .ws-story-copy h2, body.t-yster .ws-cta-inner h2 { color: var(--heading); text-transform: uppercase; font-size: clamp(22px, 3.2vw, 36px); font-weight: 800; letter-spacing: -.012em; line-height: 1.06; margin: 0 0 30px; }
body.t-yster .ws-sub, body.t-yster .ws-feature p, body.t-yster .ws-member p, body.t-yster .ws-gallery-cap span { color: var(--muted); font-size: 13.5px; line-height: 1.72; }
body.t-yster .ws-gallery-item img, body.t-yster .ws-story-media img, body.t-yster .ws-member-photo img { width: 100%; height: auto; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 0; margin: 0 0 14px; }

/* three programme tiles, gapped — photograph over heading over one line */
body.t-yster .ws-gallery-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 34px; }

/* the only photograph-free row: four tiles under hairlines, iron strokes */
body.t-yster .ws-features-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 40px 32px; }
body.t-yster .ws-feature { text-align: left; padding: 20px 0 0; border-top: 1px solid var(--ys-line); color: var(--ys-iron); }
body.t-yster .ws-feature h3, body.t-yster .ws-member strong, body.t-yster .ws-gallery-cap strong { color: var(--heading); text-transform: uppercase; letter-spacing: .13em; font-size: 11px; font-weight: 800; }

/* THE MOVE, part one — the week leaves the narrow column and gets ruled */
body.t-yster .ws-listblock { padding: 96px 0 0; }
body.t-yster .ws-listblock .ws-container { max-width: 1160px; }
body.t-yster .ws-list { list-style: none; padding-left: 0; border-top: 2px solid var(--heading); }
body.t-yster .ws-list li { margin: 0; padding: 17px 0 17px 16px; border-bottom: 1px solid var(--ys-line); border-left: 3px solid var(--ys-iron); font-size: 13.5px; line-height: 1.6; color: var(--text); font-variant-numeric: tabular-nums; }

/* THE MOVE, part two — the coach wall lands on it with the gutters at zero */
body.t-yster .ws-team { padding: 44px 0 96px; }
body.t-yster .ws-team-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; }
body.t-yster .ws-member strong, body.t-yster .ws-member .muted, body.t-yster .ws-member p { display: block; text-align: left; padding: 0 16px; }

/* bleed 2 of 2 — the membership band; --heading flips light inside it, which
   is what turns the shared heading rule above white without a second rule */
body.t-yster .ws-cta { --heading: #f6f5f1; background-color: var(--ys-ink); background-image: linear-gradient(rgba(12, 13, 15, .74), rgba(12, 13, 15, .86)), url("/media/samples/ys_band.jpg"); background-size: cover; background-position: center; }

/* it closes quietly: three short lines, four ruled fields, one iron slab */
body.t-yster .ws-contact .ws-sub { white-space: pre-line; }
body.t-yster .ws-field input, body.t-yster .ws-field textarea, body.t-yster .ws-field select { background: transparent; border: 0; border-bottom: 1px solid var(--ys-line); border-radius: 0; color: var(--heading); padding: 12px 2px; }

@media (max-width: 780px) {
  body.t-yster .ws-features-grid, body.t-yster .ws-team-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.t-yster .ws-gallery-grid { grid-template-columns: minmax(0, 1fr); }
  body.t-yster .ws-hero h1 { font-size: clamp(32px, 11vw, 54px); }
  body.t-yster .ws-list li { font-size: 12.5px; }
}

/* night — the ground drops to iron black, both bleeds deepen, orange lifts one
   stop, and the band's scrim thins so the photograph still reads against it */
html[data-theme="dark"] body.t-yster.ws-body {
  --bg: #131416; --fg: #a3a5a9; --heading: #f3f2ee; --text: #a3a5a9; --muted: #7a7c81;
  --ys-iron: #e26a30; --ys-line: #2b2c2f; --ys-ink: #0d0e10;
  --hero-a: rgba(6, 6, 7, .38); --hero-b: rgba(6, 6, 7, .70);
}
html[data-theme="dark"] body.t-yster .ws-cta { background-image: linear-gradient(rgba(6, 7, 8, .58), rgba(6, 7, 8, .76)), url("/media/samples/ys_band.jpg"); }
