/* ---- nagvuur (Nagvuur — Swartland night music festival 119) -----------------
   STRUCTURAL MOVE: the six lineup photographs are butted flush with a zero
   gutter and their captions are lifted ONTO the picture, so the wall reads as
   one solid dark rectangle instead of six cards. The page is charcoal from the
   first pixel to the last — there is no light band anywhere, so the zebra wash
   is repainted rather than tinted — and ember is rationed to the hero button,
   the ticket band and the hairline under every section heading. The partner row
   is the only gapped grid on the page and the only type knocked back to forty
   percent. Bands are reached by CLASS only; no :nth-of-type is used to pick a
   section, and the generic padding sits before the per-band exceptions so those
   still win. */
body.t-nagvuur.ws-body {
  --bg: #0e0e10; --fg: #cfcbc3; --heading: #f2efe9; --text: #cfcbc3; --muted: #8d8a83;
  --nv-ember: #e08a3c; --nv-line: rgba(242, 239, 233, .13); --nv-band: #131316;
  --hero-a: rgba(6, 6, 7, .38); --hero-b: rgba(6, 6, 7, .74);
}
body.t-nagvuur { background: var(--bg); }

/* the bar rides transparent on the photograph and never inverts to light */
body.t-nagvuur .ws-nav { background: transparent; backdrop-filter: blur(9px); border-bottom: 1px solid var(--nv-line); }
body.t-nagvuur .ws-brand { color: var(--heading); text-transform: uppercase; letter-spacing: .34em; font-size: 13px; font-weight: 700; }
body.t-nagvuur .ws-nav-links a { color: var(--heading); opacity: .68; text-transform: uppercase; letter-spacing: .19em; font-size: 10px; font-weight: 600; }
body.t-nagvuur .ws-nav-links a:hover, body.t-nagvuur .ws-nav-links a.on, body.t-nagvuur .ws-nav-links a:last-of-type { opacity: 1; color: var(--heading); border-bottom: 0; }
/* Tickets is the one action in the bar — a flat slab, never an outline */
body.t-nagvuur .ws-nav-links a:last-of-type { padding: 10px 18px; background: rgba(242, 239, 233, .12); }

/* hero — one whole viewport, place tracked out above a two-line name */
body.t-nagvuur .ws-hero { min-height: 100vh; }
body.t-nagvuur .ws-hero-inner::before { content: 'Grasvlei Farm · Koringberg · Swartland'; display: block; margin: 0 0 28px; color: rgba(242, 239, 233, .6); text-transform: uppercase; letter-spacing: .42em; font-size: 10.5px; font-weight: 600; }
body.t-nagvuur.ws-body .ws-hero h1 { color: var(--heading); white-space: pre-line; max-width: none; font-size: clamp(46px, 10.5vw, 128px); font-weight: 800; letter-spacing: -.05em; line-height: .9; text-shadow: none; }
body.t-nagvuur.ws-body .ws-hero p { color: #dcd7cd; font-size: 15px; line-height: 1.72; max-width: 48ch; margin: 26px auto 38px; }

/* every button is a flat slab; ember 1 of 3 is the hero ask */
body.t-nagvuur.ws-body .btn.brand { background: rgba(242, 239, 233, .12); color: var(--heading); border: 0; border-radius: 0; box-shadow: none; text-transform: uppercase; letter-spacing: .2em; font-size: 10.5px; font-weight: 700; padding: 18px 38px; }
body.t-nagvuur.ws-body .ws-hero-cta.btn.brand, body.t-nagvuur.ws-body .ws-cta .btn.brand, body.t-nagvuur.ws-body .ws-contact .btn.brand { background: var(--nv-ember); color: #14100b; box-shadow: none; }

/* rhythm first, then the zebra wash repainted charcoal — no light band exists */
body.t-nagvuur .ws-section, body.t-nagvuur.ws-body .ws-section:nth-child(even):not(.ws-cta):not(.ws-shoplink) { padding: 104px 0; background: var(--bg); }
body.t-nagvuur .ws-h2, body.t-nagvuur .ws-story-copy h2 { color: var(--heading); text-transform: uppercase; font-size: clamp(24px, 3.6vw, 40px); font-weight: 800; letter-spacing: -.035em; margin: 0 0 30px; }
/* ember 3 of 3 — a hairline under every section heading */
body.t-nagvuur .ws-h2::after { content: ''; display: block; width: 44px; height: 2px; margin: 18px auto 0; background: var(--nv-ember); }

/* THE WALL — three across, two down, no gutter, captions lifted onto the
   photograph so nothing can open a gap between the six frames */
body.t-nagvuur .ws-gallery-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; }
body.t-nagvuur .ws-gallery-item { position: relative; }
body.t-nagvuur .ws-gallery-item img, body.t-nagvuur .ws-story-media img { aspect-ratio: 4 / 5; border-radius: 0; filter: grayscale(.5) contrast(1.07) brightness(.86); }
body.t-nagvuur .ws-gallery-cap { position: absolute; inset: auto 0 0 0; padding: 60px 22px 20px; background: linear-gradient(rgba(9, 9, 11, 0), rgba(9, 9, 11, .88)); }
body.t-nagvuur .ws-gallery-cap strong { color: var(--heading); text-transform: uppercase; letter-spacing: .13em; font-size: 13px; font-weight: 700; }

/* every knocked-back run on the page reads at one size and one grey */
body.t-nagvuur .ws-gallery-cap span, body.t-nagvuur .ws-feature p, body.t-nagvuur .ws-video-caption, body.t-nagvuur .ws-field label, body.t-nagvuur .ws-contact .ws-sub { color: var(--muted); font-size: 11.5px; line-height: 1.6; }

/* ember 2 of 3 — the ticket band, ruled top and bottom, one button inside it */
body.t-nagvuur.ws-body .ws-cta { background: var(--nv-band); color: var(--text); border-top: 2px solid var(--nv-ember); border-bottom: 2px solid var(--nv-ember); padding: 76px 0; }

/* the quietest block — a bare film in a narrow column with wide empty ground */
body.t-nagvuur .ws-video { padding: 138px 0; }
body.t-nagvuur .ws-video .ws-narrow { max-width: 600px; }
body.t-nagvuur .ws-video-frame { border-radius: 0; box-shadow: none; }
body.t-nagvuur .ws-video-caption { text-transform: uppercase; letter-spacing: .26em; margin-top: 26px; }

/* the only gapped grid on the page — partner marks set as TYPE at 40% white */
body.t-nagvuur .ws-features-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 44px 38px; }
body.t-nagvuur .ws-feature h3 { color: rgba(242, 239, 233, .4); text-transform: uppercase; letter-spacing: .11em; font-size: 13px; font-weight: 700; margin: 0 0 8px; }

/* the page's one paragraph of body copy — a hairline above, photograph at 2/5 */
body.t-nagvuur .ws-story { padding: 138px 0; border-top: 1px solid var(--nv-line); }
body.t-nagvuur .ws-story-grid { grid-template-columns: 2fr 3fr; gap: 72px; align-items: start; }
body.t-nagvuur .ws-story-copy p { color: var(--text); font-size: 15px; line-height: 1.9; }

/* the closing band — three fields on one line, the plain detail ordered last */
body.t-nagvuur.ws-body .ws-contact { background: var(--nv-band); padding: 94px 0 106px; }
body.t-nagvuur .ws-contact .ws-narrow { display: flex; flex-direction: column; max-width: 880px; }
body.t-nagvuur .ws-contact .ws-sub { order: 1; margin: 44px auto 0; text-transform: uppercase; letter-spacing: .16em; }
body.t-nagvuur .ws-contact .ws-form { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; max-width: none; width: 100%; align-items: start; }
body.t-nagvuur .ws-contact .ws-form .btn.brand { grid-column: 1 / -1; justify-self: center; margin-top: 14px; }
body.t-nagvuur .ws-field label { text-transform: uppercase; letter-spacing: .16em; font-size: 9.5px; font-weight: 700; }
body.t-nagvuur .ws-field input, body.t-nagvuur .ws-field textarea { height: 46px; background: transparent; border: 0; border-bottom: 1px solid var(--nv-line); border-radius: 0; color: var(--heading); padding: 12px 2px; resize: vertical; }

/* mobile: both walls halve, the split block stacks, the fields become a column */
@media (max-width: 760px) {
  body.t-nagvuur .ws-gallery-grid, body.t-nagvuur .ws-features-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  body.t-nagvuur .ws-story-grid { grid-template-columns: 1fr; gap: 30px; }
  body.t-nagvuur .ws-contact .ws-form { grid-template-columns: 1fr; }
  body.t-nagvuur.ws-body .ws-hero h1 { font-size: clamp(38px, 13vw, 62px); }
}

/* night — the same charcoal taken deeper, ember one stop hotter */
html[data-theme="dark"] body.t-nagvuur.ws-body {
  --bg: #08080a; --fg: #c6c2ba; --heading: #faf7f1; --text: #c6c2ba; --muted: #85827c;
  --nv-ember: #ef9a45; --nv-line: rgba(250, 247, 241, .12); --nv-band: #0e0e11;
  --hero-a: rgba(4, 4, 5, .42); --hero-b: rgba(4, 4, 5, .78);
}
html[data-theme="dark"] body.t-nagvuur { background: var(--bg); }
