/* Stub (Page Lemon app template): Saltmarsh Sessions, a one-day folk festival on Old Ferry Green, Saturday 12 June 2027.
   Art direction 2026-10-25 (docs/templates/app-art-direction-2026-10-23.md, Family B): a screen-printed fabric wristband.
   Dark-first in both schemes: the device's light scheme is dusk (navy page), the dark scheme is night.
   Night, Dusk Navy, Foam, Coral (actions, the sun) and Marsh Ochre (grass, highlights); Bowlby One for poster billing,
   Martian Mono for times, refs, labels and text. Drawn screen-print SVG only, no photos.
   kit.css (never edited here) gives behaviour, layout and accessibility; every colour, font, radius and surface is set here. */
:root {
  --s-night: #0A1626;
  --s-dusk: #10243F;
  --s-deep: #16304F;
  --s-water: #1D3F66;
  --s-foam: #EAF4F2;
  --s-coral: #FF6B4A;
  --s-coral-hi: #FF8466;
  --s-ochre: #E8B04B;
  --s-mist: #B8CCD6;
  --s-display: "Bowlby One", Impact, "Arial Black", sans-serif;
  --s-mono: "Martian Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --s-page: var(--s-dusk);
  --s-surface: var(--s-deep);
  --s-raise: var(--s-water);
  --s-time: var(--s-ochre);
  --s-night-rgb: 10, 22, 38; --s-coral-rgb: 255, 107, 74; --s-ochre-rgb: 232, 176, 75;
  --s-foam-rgb: 234, 244, 242; --s-white-rgb: 255, 255, 255; --s-black-rgb: 0, 0, 0;
  --s-bead-light: #F6E3B8; --s-bead-dark: #9C7124; --s-note: #33475C; --s-placeholder: #8DA3B1; --s-qr: #FFFFFF;

  --k-brand: var(--s-coral);
  --k-brand-ink: var(--s-night);
  --k-brand-soft: rgba(var(--s-coral-rgb), .16);
  --k-hero: var(--s-night);
  --k-hero-ink: var(--s-foam);
  --k-gold: var(--s-ochre);
  --k-bg: var(--s-page);
  --k-surface: var(--s-surface);
  --k-surface-2: var(--s-raise);
  --k-line: rgba(var(--s-foam-rgb), .14);
  --k-line-strong: rgba(var(--s-foam-rgb), .32);
  --k-text: var(--s-foam);
  --k-muted: var(--s-mist);
  --k-faint: var(--s-mist);
  --k-ok: #7DDBB2;
  --k-ok-soft: rgba(125, 219, 178, .14);
  --k-warn: var(--s-ochre);
  --k-warn-soft: rgba(var(--s-ochre-rgb), .16);
  --k-danger: var(--s-coral-hi);
  --k-info: var(--s-coral-hi);
  --k-info-soft: rgba(var(--s-coral-rgb), .14);
  --k-font: var(--s-mono);
  --k-font-display: var(--s-display);
  --k-r-s: 4px; --k-r-m: 6px; --k-r-l: 8px; --k-r-xl: 10px; --k-r-pill: 6px;
  --k-shadow-1: none;
  --k-shadow-2: none;
  --k-shadow-3: 0 18px 48px rgba(var(--s-black-rgb), .5);
  color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
  :root {
    --s-page: var(--s-night);
    --s-surface: var(--s-dusk);
    --s-raise: var(--s-deep);
    --s-mist: #9FB6C4;
    --k-brand-soft: rgba(var(--s-coral-rgb), .14);
    --k-ok: #7DDBB2; --k-ok-soft: rgba(125, 219, 178, .12);
    --k-warn: var(--s-ochre); --k-warn-soft: rgba(var(--s-ochre-rgb), .14);
    --k-danger: var(--s-coral-hi);
    --k-info: var(--s-coral-hi); --k-info-soft: rgba(var(--s-coral-rgb), .14);
    --k-line: rgba(var(--s-foam-rgb), .12);
    --k-line-strong: rgba(var(--s-foam-rgb), .28);
    --k-shadow-1: none; --k-shadow-2: none;
  }
}

/* ---------- base ---------- */
body.k-app { font-family: var(--s-mono); font-stretch: 87.5%; font-size: .9375rem; line-height: 1.6; background: var(--s-page); color: var(--s-foam); }
.k-app :focus-visible { outline: 3px solid var(--s-ochre); outline-offset: 2px; border-radius: 4px; }
.k-app ::selection { background: var(--s-coral); color: var(--s-night); }
.k-app :is(h1, h2, h3) { font-family: var(--s-display); font-weight: 400; letter-spacing: .005em; }
.s-gap { margin-top: 24px; }
.s-gap-s { margin-top: 12px; }
.s-wrap { white-space: normal; }

/* Buttons: printed coral with an ochre plate a few pixels off */
.k-app .k-btn { border-radius: 6px; font: 700 .8125rem/1.1 var(--s-mono); font-stretch: 87.5%; text-transform: uppercase; letter-spacing: .06em; background: var(--s-coral); color: var(--s-night); box-shadow: 3px 3px 0 var(--s-ochre); transition: transform .12s ease, box-shadow .12s ease; }
.k-app .k-btn:hover { filter: none; background: var(--s-coral-hi); }
.k-app .k-btn:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--s-ochre); }
.k-app .k-btn-2 { background: var(--s-raise); color: var(--s-foam); box-shadow: inset 0 0 0 1.5px var(--k-line-strong); }
.k-app .k-btn-2:hover { background: var(--s-raise); box-shadow: inset 0 0 0 2px var(--s-foam); }
.k-app .k-btn-line { background: transparent; color: var(--s-foam); box-shadow: inset 0 0 0 2px var(--s-foam); }
.k-app .k-btn-line:hover { background: rgba(var(--s-foam-rgb), .08); }
.k-app .k-btn-line:active { box-shadow: inset 0 0 0 2px var(--s-foam); }

/* ---------- app shell ---------- */
.s-app .k-top { background: var(--s-night); border-bottom: 1px solid var(--k-line); backdrop-filter: none; -webkit-backdrop-filter: none; }
.k-app .k-brand { font: 400 1.0625rem/1 var(--s-display); text-transform: uppercase; letter-spacing: .01em; color: var(--s-foam); }
.k-app .k-brand img { border-radius: 8px; box-shadow: none; }
.k-app .k-top a.k-signin { border-radius: 6px; background: var(--s-coral); color: var(--s-night); font: 700 .8125rem/1 var(--s-mono); font-stretch: 87.5%; text-transform: uppercase; letter-spacing: .06em; }
.k-app .k-avatar { background: var(--s-coral); color: var(--s-night); font-family: var(--s-mono); font-weight: 800; }
/* Phone tab bar: a night strip with a woven selvedge on top */
.s-app .k-tabs { background: var(--s-night); backdrop-filter: none; -webkit-backdrop-filter: none; border-top: 0; box-shadow: inset 0 3px 0 var(--s-ochre), inset 0 5px 0 var(--s-night), inset 0 7px 0 var(--s-coral); padding-top: 10px; }
.s-app .k-tabs a { color: var(--s-mist); font: 700 .6875rem/1.1 var(--s-mono); font-stretch: 75%; text-transform: uppercase; letter-spacing: .04em; border-radius: 6px; }
.s-app .k-tabs a[aria-current="page"] { color: var(--s-coral); background: rgba(var(--s-coral-rgb), .1); }
@media (min-width: 1024px) {
  .s-app[data-k-nav="top"] .k-top { padding-top: 14px; padding-bottom: 14px; }
  .s-app[data-k-nav="top"] .k-top .k-brand { font-size: 1.375rem; }
  .s-app[data-k-nav="top"] .k-tabs { background: var(--s-night); border-bottom: 0; box-shadow: inset 0 -4px 0 var(--s-ochre), inset 0 -6px 0 var(--s-night), inset 0 -8px 0 var(--s-coral); padding-top: 0; padding-bottom: 8px; backdrop-filter: none; -webkit-backdrop-filter: none; }
  .s-app[data-k-nav="top"] .k-tabs a { min-height: 54px; padding: 0 20px; color: var(--s-mist); font-size: .8125rem; font-stretch: 87.5%; letter-spacing: .08em; background: none; }
  .s-app[data-k-nav="top"] .k-tabs a:hover { color: var(--s-foam); }
  .s-app[data-k-nav="top"] .k-tabs a[aria-current="page"] { color: var(--s-night); background: var(--s-coral); box-shadow: none; }
  .s-app[data-k-nav="top"] .k-tabs .k-tabs-foot { display: block; margin: 0 0 0 auto; align-self: center; padding: 0; background: none; border-radius: 0; color: var(--s-mist); font-size: .75rem; }
  .s-app[data-k-nav="top"] .k-tabs .k-tabs-foot b { display: inline; margin-right: 8px; color: var(--s-ochre); font-size: .75rem; }
  .s-app[data-k-nav="top"] .k-main { padding-top: 8px; }
}

/* Page heads: poster billing */
.k-app .k-pagehead { align-items: flex-end; }
.k-app .k-kicker { color: var(--s-ochre); font: 700 .75rem/1.3 var(--s-mono); font-stretch: 87.5%; text-transform: uppercase; letter-spacing: .14em; margin-bottom: 8px; }
.k-app .k-pagehead h1 { font: 400 clamp(2.1rem, 8.4vw, 4.25rem)/.92 var(--s-display); text-transform: uppercase; letter-spacing: 0; text-shadow: 3px 3px 0 rgba(var(--s-coral-rgb), .55); }
.k-app .k-help { color: var(--s-mist); font-size: .8125rem; }
.k-app .k-help a, .k-app .s-paper p a { color: var(--s-ochre); }

/* ---------- the wristband ---------- */
.s-band { --s-gut: 16px; position: relative; display: grid; grid-template-columns: minmax(0, 1fr); margin: 4px calc(-1 * var(--s-gut)) 0; }
.s-band-strip, .p-signin, .p-tik::before {
  background-color: var(--s-coral);
  background-image:
    linear-gradient(180deg, var(--s-ochre) 0 9px, var(--s-night) 9px 11px, transparent 11px calc(100% - 11px), var(--s-night) calc(100% - 11px) calc(100% - 9px), var(--s-ochre) calc(100% - 9px)),
    repeating-linear-gradient(90deg, rgba(var(--s-night-rgb), .1) 0 1px, transparent 1px 4px),
    repeating-linear-gradient(0deg, rgba(var(--s-white-rgb), .1) 0 1px, transparent 1px 3px),
    repeating-linear-gradient(-45deg, rgba(var(--s-night-rgb), .07) 0 2px, transparent 2px 7px);
}
.s-band-strip { position: relative; overflow: hidden; color: var(--s-night); padding: 36px var(--s-gut) 28px; display: grid; gap: 18px; align-items: end; animation: s-slide .7s cubic-bezier(.2, .8, .3, 1) both; }
.s-band-print { position: absolute; top: 14px; left: 0; display: flex; white-space: nowrap; font: 700 .625rem/1 var(--s-mono); text-transform: uppercase; letter-spacing: .22em; color: var(--s-night); }
.s-band-print span { flex: none; padding-right: .3em; }
.s-band-print span + span { padding-left: 0; }
.s-band-who { min-width: 0; }
.s-band-type { font: 800 .75rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .14em; }
.s-band-name { margin-top: 6px; font: 400 clamp(2.1rem, 10vw, 4rem)/.92 var(--s-display); text-transform: uppercase; overflow-wrap: anywhere; text-shadow: 3px 3px 0 var(--s-ochre); }
.s-band-name:empty::before { content: "Ticket holder"; }
.s-band-meta { margin-top: 10px; font: 700 .8125rem/1.35 var(--s-mono); }
/* Tide-chart countdown */
.s-tide { min-width: 0; }
.s-tide-count { font: 400 1.5rem/1 var(--s-display); text-transform: uppercase; }
.s-tide-plot { position: relative; height: 64px; margin-top: 8px; }
.s-tide-chart { display: block; width: 100%; height: 100%; overflow: visible; }
.s-tide-chart polyline { fill: none; vector-effect: non-scaling-stroke; stroke-linecap: round; stroke-linejoin: round; }
.s-tide-all { stroke: var(--s-night); stroke-width: 2; stroke-dasharray: 3 6; opacity: .6; }
.s-tide-done { stroke: var(--s-night); stroke-width: 4; stroke-dasharray: 1400; stroke-dashoffset: 0; animation: s-draw 1.6s ease-out .3s both; }
.s-tide-mark { position: absolute; left: 35.6%; top: 78.4%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border-radius: 50%; background: var(--s-foam); box-shadow: 0 0 0 4px var(--s-night); animation: s-bob 3.2s ease-in-out 2s infinite; }
.s-tide-plot::after { content: ""; position: absolute; right: -2px; top: 4px; bottom: 4px; width: 4px; border-radius: 2px; background: var(--s-night); }
.s-tide-ends { display: flex; justify-content: space-between; gap: 12px; margin-top: 8px; font: 800 .6875rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .1em; }
.s-tide-plot[data-s-p="0"] .s-tide-mark { left: 2.00%; top: 58.33%; }
.s-tide-plot[data-s-p="1"] .s-tide-mark { left: 6.80%; top: 36.67%; }
.s-tide-plot[data-s-p="2"] .s-tide-mark { left: 11.60%; top: 22.23%; }
.s-tide-plot[data-s-p="3"] .s-tide-mark { left: 16.40%; top: 22.85%; }
.s-tide-plot[data-s-p="4"] .s-tide-mark { left: 21.20%; top: 38.18%; }
.s-tide-plot[data-s-p="5"] .s-tide-mark { left: 26.00%; top: 59.92%; }
.s-tide-plot[data-s-p="6"] .s-tide-mark { left: 30.80%; top: 76.28%; }
.s-tide-plot[data-s-p="7"] .s-tide-mark { left: 35.60%; top: 78.40%; }
.s-tide-plot[data-s-p="8"] .s-tide-mark { left: 40.40%; top: 65.12%; }
.s-tide-plot[data-s-p="9"] .s-tide-mark { left: 45.20%; top: 43.64%; }
.s-tide-plot[data-s-p="10"] .s-tide-mark { left: 50.00%; top: 25.62%; }
.s-tide-plot[data-s-p="11"] .s-tide-mark { left: 54.80%; top: 20.80%; }
.s-tide-plot[data-s-p="12"] .s-tide-mark { left: 59.60%; top: 31.82%; }
.s-tide-plot[data-s-p="13"] .s-tide-mark { left: 64.40%; top: 52.69%; }
.s-tide-plot[data-s-p="14"] .s-tide-mark { left: 69.20%; top: 72.10%; }
.s-tide-plot[data-s-p="15"] .s-tide-mark { left: 74.00%; top: 79.53%; }
.s-tide-plot[data-s-p="16"] .s-tide-mark { left: 78.80%; top: 70.96%; }
.s-tide-plot[data-s-p="17"] .s-tide-mark { left: 83.60%; top: 51.02%; }
.s-tide-plot[data-s-p="18"] .s-tide-mark { left: 88.40%; top: 30.53%; }
.s-tide-plot[data-s-p="19"] .s-tide-mark { left: 93.20%; top: 20.59%; }
.s-tide-plot[data-s-p="20"] .s-tide-mark { left: 98.00%; top: 26.60%; }
/* The clear tab with the crimp bead: it holds the scan block */
.s-band-tab { position: relative; z-index: 1; margin: -6px 14px 0; padding: 24px 18px 18px; border-radius: 0 0 14px 14px; background: var(--s-foam); color: var(--s-night); box-shadow: inset 0 0 0 2px rgba(var(--s-night-rgb), .18), 0 10px 0 -4px rgba(var(--s-black-rgb), .25); }
.s-band-tab::before { content: ""; position: absolute; inset: 8px; border: 1.5px dashed rgba(var(--s-night-rgb), .22); border-radius: 0 0 9px 9px; pointer-events: none; }
.s-bead { position: absolute; top: -9px; left: 50%; width: 30px; height: 18px; margin-left: -15px; border-radius: 9px; background: linear-gradient(180deg, var(--s-bead-light) 0, var(--s-ochre) 45%, var(--s-bead-dark) 100%); box-shadow: 0 0 0 2px var(--s-night); }
.s-tab-label { position: relative; text-align: center; font: 800 .75rem/1.3 var(--s-mono); text-transform: uppercase; letter-spacing: .1em; }
.s-tab-note { position: relative; margin-top: 10px; text-align: center; font-size: .75rem; color: var(--s-note); }
.s-band-tab .k-scan { position: relative; color: var(--s-night); }
.s-band-tab .k-scan [data-pl-scan-show] { margin-top: 12px; border-radius: 6px; background: transparent; color: var(--s-night); font: 700 .8125rem/1 var(--s-mono); font-stretch: 87.5%; text-transform: uppercase; letter-spacing: .06em; box-shadow: inset 0 0 0 1.5px rgba(var(--s-night-rgb), .45); }
.s-band-tab .k-scan [data-pl-scan-show]:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--s-night); }
.s-band-tab .k-scan [data-pl-scan-demo] { border-radius: 6px; color: var(--s-night); font-family: var(--s-mono); font-weight: 700; }
.s-band-tab .k-scan [data-pl-scan-code]:not([hidden]) { border: 2px solid var(--s-night); border-radius: 8px; }
.s-band-tab .k-scan [data-pl-scan-status] { color: var(--s-night); }
.s-band-tab .k-scan [data-pl-wallet] button { border-radius: 8px; border-color: transparent; font-family: var(--s-mono); }
/* On the day */
.s-live .s-tab-label { padding: 8px; border-radius: 6px; background: var(--s-night); color: var(--s-ochre); animation: s-pulse 1.6s ease-in-out infinite; }
@media (min-width: 1024px) {
  .s-app[data-k-nav="top"] .s-band { --s-gut: max(40px, calc((100vw - 1320px) / 2 + 40px)); }
  .s-app[data-k-nav="top"] .k-main { overflow-x: clip; }
  .s-band { grid-template-columns: minmax(0, 1fr) calc(340px + var(--s-gut)); margin-top: 8px; }
  .s-band-strip { grid-column: 1 / -1; grid-row: 1; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); align-items: end; gap: 40px; padding: 48px calc(340px + var(--s-gut) + 40px) 36px var(--s-gut); min-height: 236px; }
  .s-band-name { font-size: clamp(2.6rem, 4.2vw, 4.25rem); }
  .s-tide-count { font-size: 2rem; }
  .s-band-tab { grid-column: 2; grid-row: 1; align-self: center; margin: -26px var(--s-gut) 0 0; border-radius: 14px; padding: 26px 22px 20px; }
  .s-band-tab::before { border-radius: 9px; }
  .s-band-xl .s-band-strip { min-height: 240px; padding-top: 44px; padding-bottom: 40px; align-items: center; }
  .s-band-xl .s-band-strip { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); }
  .s-band-xl .s-band-name { font-size: clamp(2.6rem, 4.3vw, 4.25rem); }
}

/* ---------- festival paperwork panels ---------- */
.s-paper { position: relative; background: var(--k-surface); border-radius: 8px; padding: 18px 20px 20px; box-shadow: inset 0 4px 0 var(--s-ochre); }
.s-paper > * + * { margin-top: 12px; }
.s-paper-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 12px; padding-bottom: 10px; border-bottom: 1.5px dashed var(--k-line-strong); }
.s-paper-head h2 { font: 400 1.25rem/1.05 var(--s-display); text-transform: uppercase; }
.s-paper-head a { color: var(--s-ochre); font: 700 .75rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .08em; text-underline-offset: 4px; }
.s-paper p { color: var(--k-text); overflow-wrap: anywhere; }
.p-two > * { min-width: 0; }
@media (max-width: 600px) { .k-app .k-kv { grid-template-columns: minmax(0, 40%) minmax(0, 1fr); } }
.k-app .s-paper .k-list, .k-app .s-help .k-list { background: transparent; border-radius: 0; box-shadow: none; overflow: visible; }
.k-app .k-list { background: var(--k-surface); border-radius: 8px; box-shadow: none; }
.k-app .k-row { padding: 12px 0; min-height: 60px; }
.k-app .k-list:not(.s-paper .k-list) .k-row { padding: 12px 16px; }
.k-app .k-row + .k-row::before { left: 0; border-top: 1px dashed var(--k-line-strong); }
.k-app .k-row-title { font: 700 .9375rem/1.3 var(--s-mono); font-stretch: 87.5%; }
.k-app .k-row-sub { color: var(--s-mist); font-size: .8125rem; line-height: 1.45; }
.k-app .k-row-title, .k-app .k-row-sub { display: block; white-space: normal; overflow: visible; text-overflow: clip; -webkit-line-clamp: unset; overflow-wrap: anywhere; }
.k-app .k-row-end b { font-family: var(--s-display); font-weight: 400; font-size: 1.25rem; color: var(--s-ochre); }
.k-app .k-tile { border-radius: 6px; background: var(--s-night); color: var(--s-ochre); }
.k-app .k-tile-ok { background: var(--s-night); color: var(--k-ok); }
.k-app .k-tile-gold { background: var(--s-night); color: var(--s-coral); }
.k-app .k-chev { color: var(--s-mist); }
.k-app .k-kv { font-size: .875rem; grid-template-columns: minmax(0, 9.5rem) minmax(0, 1fr); }
.k-app .k-kv dt { color: var(--s-mist); text-transform: uppercase; font-size: .75rem; letter-spacing: .06em; padding-top: 2px; }
.k-app .k-kv dd { font-weight: 700; }
.k-app .k-metrics b { font: 400 1.625rem/1.05 var(--s-display); color: var(--s-time); letter-spacing: 0; }
.k-app .k-metrics span { color: var(--s-mist); font-size: .6875rem; text-transform: uppercase; letter-spacing: .1em; }
.s-checks { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; font-size: .875rem; }
.s-checks li { display: flex; gap: 10px; align-items: flex-start; }
.s-checks .k-i { color: var(--k-ok); margin-top: 3px; stroke-width: 2.4; }
.s-checks .s-no .k-i { color: var(--s-coral); }
.k-app .k-empty { color: var(--s-mist); }
.k-app .k-empty .k-empty-art { border-radius: 50%; background: var(--s-ochre); color: var(--s-night); }
.k-app .k-empty h3 { font: 400 1.25rem/1.1 var(--s-display); text-transform: uppercase; }
.k-app .k-foot { margin-top: 56px; border-top: 1.5px dashed var(--k-line-strong); color: var(--s-mist); font-size: .75rem; }
.k-app .k-foot a { color: var(--s-foam); }

/* Home: the next things beside the band */
.s-next { margin-top: 44px; align-items: stretch; }
@media (min-width: 1024px) { .s-next { margin-top: 56px; } .k-board.s-next > .k-span-4 { grid-column: span 4; } }
@media (min-width: 1024px) and (max-width: 1279px) { .k-board.s-next > .k-span-4 { grid-column: span 6; } .k-board.s-next > .s-sets { grid-column: 1 / -1; } }
.s-head-btn { display: none; }
@media (min-width: 1024px) { .s-head-btn { display: inline-flex; } }
.s-mini { list-style: none; margin: 0; padding: 0 0 0 22px; position: relative; }
.s-mini::before { content: ""; position: absolute; left: 6px; top: 10px; bottom: 10px; border-left: 2px dotted var(--s-ochre); }
.s-mini > li { position: relative; }
.s-mini > li + li { margin-top: 4px; }
.s-mini > li > a { display: block; padding: 8px 0; text-decoration: none; }
.s-mini > li > a::before { content: ""; position: absolute; left: -21px; top: 14px; width: 12px; height: 12px; border-radius: 50%; background: var(--s-coral); box-shadow: 0 0 0 3px var(--k-surface); }
.s-mini b { display: block; font: 700 .875rem/1.35 var(--s-mono); }
.s-mini a:hover b { color: var(--s-ochre); }
.s-mini span { display: block; margin-top: 2px; color: var(--s-mist); font-size: .8125rem; line-height: 1.4; }
.s-mini span:empty { display: none; }
.s-mini > li.k-empty { padding: 16px 0 4px; margin-left: -22px; }
.s-mini:has(> li.k-empty)::before, .s-mini:has(> .s-mini-empty)::before { display: none; }
.s-mini-empty p { color: var(--s-mist); }
.s-mini-empty a { color: var(--s-ochre); }
@media (min-width: 1024px) {
  .s-mini-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; padding: 0; }
  .s-mini-row::before { left: 0; right: 0; top: 14px; bottom: auto; border-left: 0; border-top: 2px dotted var(--s-ochre); }
  .s-mini-row > li + li { margin-top: 0; }
  .s-mini-row > li > a { padding: 26px 0 0; }
  .s-mini-row > li > a::before { left: 0; top: 8px; }
  .s-mini-row > .s-mini-empty { grid-column: 1 / -1; }
}
.s-entry { display: flex; gap: 14px; align-items: center; }
.s-entry b { display: block; font: 400 1.125rem/1.1 var(--s-display); text-transform: uppercase; }
.s-entry span { display: block; color: var(--s-mist); font-size: .8125rem; }
.s-entry-in b { color: var(--k-ok); }
.s-times { padding: 14px 0; border-block: 1.5px dashed var(--k-line-strong); }
.k-app .s-times > * { min-width: 5rem; }

/* Ticket page */
.s-tip { display: flex; align-items: center; gap: 12px; padding: 14px 0 0; border-top: 1.5px dashed var(--k-line-strong); text-decoration: none; }
.s-tip > .k-i:first-child { color: var(--s-coral); }
.s-tip > span { flex: 1; min-width: 0; }
.s-tip b { display: block; font: 400 1.0625rem/1.1 var(--s-display); text-transform: uppercase; }
.s-tip span span { display: block; color: var(--s-mist); font-size: .8125rem; }

/* ---------- line-up: a poster stack per stage, billed by size ---------- */
.s-mine { margin-top: 4px; padding: 14px 18px 16px; border-radius: 8px; background: var(--k-surface); box-shadow: inset 4px 0 0 var(--s-coral); }
.s-mine .s-paper-head { border-bottom: 0; padding-bottom: 6px; }
.s-minelist { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.s-minelist li:not(.k-help) { padding: 6px 12px; border-radius: 6px; background: var(--s-night); box-shadow: inset 0 0 0 1.5px var(--s-coral); }
.s-minelist b { font: 700 .8125rem/1.3 var(--s-mono); }
.s-minelist span { display: none; }
.s-stage { display: flex; flex-direction: column; background: var(--s-night); border-radius: 10px; overflow: hidden; box-shadow: inset 0 0 0 1.5px var(--k-line-strong); }
.s-stage > .k-list { flex: 1 1 auto; }
@media (prefers-color-scheme: dark) { .s-stage { background: var(--s-dusk); box-shadow: none; } }
.s-stage-head { padding: 22px 20px 18px; color: var(--s-night); background-color: var(--s-coral); background-image: repeating-linear-gradient(90deg, rgba(var(--s-night-rgb), .08) 0 1px, transparent 1px 4px), repeating-linear-gradient(-45deg, rgba(var(--s-night-rgb), .06) 0 2px, transparent 2px 7px); }
.s-samphire .s-stage-head { background-color: var(--s-ochre); }
.s-stage-head h2 { font: 400 clamp(1.75rem, 6vw, 2.5rem)/.95 var(--s-display); text-transform: uppercase; }
.s-stage-head p { margin-top: 6px; font: 700 .75rem/1.3 var(--s-mono); text-transform: uppercase; letter-spacing: .1em; }
.k-app .s-stage .k-list { background: transparent; padding: 6px 20px 14px; }
.k-app .s-stage .k-list .k-row.s-set { display: grid; grid-template-columns: 3.5rem minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 14px 0; }
.s-time { font: 800 .875rem/1 var(--s-mono); color: var(--s-time); font-variant-numeric: tabular-nums; align-self: start; padding-top: .35em; }
.k-app .s-set .k-row-title { display: block; -webkit-line-clamp: unset; font: 400 1.0625rem/1 var(--s-display); text-transform: uppercase; letter-spacing: .01em; overflow-wrap: anywhere; }
.k-app .s-set .k-row-sub { white-space: normal; margin-top: 6px; }
.k-app .s-bill-1 .k-row-title { font-size: clamp(2.1rem, 9vw, 3.4rem); line-height: .9; color: var(--s-foam); text-shadow: 3px 3px 0 var(--s-coral); }
.k-app .s-bill-2 .k-row-title { font-size: clamp(1.6rem, 6.4vw, 2.3rem); line-height: .92; color: var(--s-ochre); }
.k-app .s-bill-3 .k-row-title { font-size: clamp(1.3rem, 4.8vw, 1.65rem); }
.k-app .s-bill-4 .k-row-title { font-size: 1.0625rem; }
.s-bill-1 .s-time { font-size: 1rem; }
.k-app .s-set .s-add { min-height: 44px; padding: 0 12px; box-shadow: inset 0 0 0 1.5px var(--k-line-strong); background: transparent; }
.k-app .s-set .s-add.s-added { background: var(--s-coral); color: var(--s-night); box-shadow: 2px 2px 0 var(--s-ochre); }
.k-app .s-set.s-picked .s-time::after { content: "In my day"; display: block; margin-top: 8px; font-size: .625rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; line-height: 1.2; color: var(--s-coral-hi); }
.s-side { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 16px; align-items: start; }
.s-side > * { margin-top: 0 !important; }
.s-side .k-tile { grid-row: span 2; width: 48px; height: 48px; }
.s-side h2 { font: 400 1.375rem/1.05 var(--s-display); text-transform: uppercase; }
.s-side p { color: var(--s-mist); font-size: .875rem; }
@media (max-width: 420px) {
  .k-app .s-stage .k-list .k-row.s-set { grid-template-columns: 3rem minmax(0, 1fr); }
  .k-app .s-set .s-add { grid-column: 2; justify-self: start; }
}

/* ---------- my day: a tide-chart running order ---------- */
.s-daymark { display: flex; align-items: baseline; gap: 14px; padding-left: 4px; }
.s-daymark b { font: 400 1.75rem/1 var(--s-display); color: var(--s-ochre); }
.s-daymark span { font: 700 .75rem/1.3 var(--s-mono); text-transform: uppercase; letter-spacing: .1em; color: var(--s-mist); }
.s-timeline { list-style: none; position: relative; margin: 14px 0; padding: 10px 0 10px 64px; }
.s-timeline::before { content: ""; position: absolute; left: 6px; top: 0; bottom: 0; width: 36px; background: var(--s-ochre); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 80'%3E%3Cpath d='M18 0 C34 20 34 20 18 40 C2 60 2 60 18 80' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") center top / 36px 80px repeat-y; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 80'%3E%3Cpath d='M18 0 C34 20 34 20 18 40 C2 60 2 60 18 80' fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") center top / 36px 80px repeat-y; }
.s-timeline > li { position: relative; }
.s-timeline > li + li { margin-top: 16px; }
.s-dot { position: absolute; left: -51px; top: 18px; width: 22px; height: 22px; border-radius: 50%; background: var(--s-coral); box-shadow: 0 0 0 4px var(--s-page), 0 0 0 6px var(--s-coral); }
.s-pick { padding: 16px 18px; border-radius: 8px; background: var(--k-surface); box-shadow: inset 4px 0 0 var(--s-coral); }
.s-pick b { display: block; font: 400 clamp(1.2rem, 4.6vw, 1.6rem)/1.05 var(--s-display); text-transform: uppercase; overflow-wrap: anywhere; }
.s-pick p { margin-top: 8px; color: var(--s-mist); font-size: .875rem; }
.s-pick p:empty { display: none; }
.s-timeline > li.k-empty { margin-left: -64px; padding: 32px 20px; border-radius: 8px; background: var(--k-surface); }
.s-timeline:has(> li.k-empty)::before { display: none; }
.k-app .k-sheet.s-form { border-radius: 8px; box-shadow: inset 0 5px 0 var(--s-coral); padding: 24px 22px; }
.k-app .k-sheet h2 { font: 400 1.75rem/1 var(--s-display); text-transform: uppercase; }
.k-app .k-field > label, .k-app .k-label { color: var(--s-foam); font: 700 .75rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .08em; }
.k-app .k-field :is(input, select, textarea), .k-app .k-account :is(input[type="text"], input[type="email"], select, textarea) { background: var(--s-page); color: var(--s-foam); border: 1.5px solid var(--k-line-strong); border-radius: 6px; font-family: var(--s-mono); font-stretch: 87.5%; }
.k-app .k-field :is(input, select, textarea):focus { border-color: var(--s-ochre); }
.k-app .k-field ::placeholder { color: var(--s-placeholder); }
.k-app .k-sticky-cta { border-radius: 8px; background: var(--s-night); color: var(--s-foam); box-shadow: inset 0 0 0 2px var(--s-coral), 0 10px 30px rgba(var(--s-black-rgb), .4); font-family: var(--s-mono); }
.k-app .k-sticky-cta b { border-radius: 6px; background: var(--s-coral); color: var(--s-night); text-transform: uppercase; font-size: .8125rem; }

/* ---------- info ---------- */
.s-gatetimes { padding: 16px 20px; border-radius: 8px; background: var(--k-surface); box-shadow: inset 0 -4px 0 var(--s-coral); }
.k-app .s-gatetimes b { color: var(--s-coral-hi); font-size: 1.875rem; }
.s-map { margin: 0; padding: 12px; border-radius: 10px; background: var(--s-night); box-shadow: inset 0 0 0 1.5px var(--s-ochre); }
.s-map img { width: 100%; border-radius: 6px; }
.s-map figcaption { margin-top: 10px; color: var(--s-mist); font-size: .75rem; text-transform: uppercase; letter-spacing: .06em; }

/* ---------- account: festival paperwork ---------- */
.s-me { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 14px 18px; align-items: center; padding: 22px; border-radius: 10px; background: var(--s-ochre); color: var(--s-night); }
.s-me::before { content: ""; position: absolute; inset: 8px; border: 1.5px dashed rgba(var(--s-night-rgb), .4); border-radius: 6px; pointer-events: none; }
.s-me > div { display: grid; gap: 4px; min-width: 0; }
.s-me-label { font: 800 .6875rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .14em; }
.s-me b { font: 400 clamp(2rem, 8vw, 3.25rem)/.95 var(--s-display); text-transform: uppercase; overflow-wrap: anywhere; }
.s-me > div > span:last-child { font-size: .8125rem; }
.k-app .s-me .k-avatar { background: var(--s-night); color: var(--s-ochre); }
.k-app .s-me .s-me-btn { position: relative; grid-column: 1 / -1; justify-self: start; background: var(--s-night); color: var(--s-foam); box-shadow: 3px 3px 0 var(--s-coral); }
@media (min-width: 720px) { .s-me { grid-template-columns: auto minmax(0, 1fr) auto; padding: 26px 30px; } .k-app .s-me .s-me-btn { grid-column: auto; } }
.k-app .k-account > p:first-child, .k-app .k-account ul, .k-app .k-account form:has(input[type="text"], select, textarea), .k-app .k-account form:last-of-type:has(input[type="checkbox"]) { background: var(--k-surface); border-radius: 8px; box-shadow: inset 0 4px 0 var(--s-ochre); }
.k-app .k-account > form:not(:has(input:not([type="hidden"]), select, textarea)) > button { background: var(--k-surface); border-radius: 8px; box-shadow: inset 4px 0 0 var(--s-ochre); font-family: var(--s-mono); font-weight: 700; color: var(--s-foam); }
.k-app .k-account h3 { margin-top: 18px; font: 400 1.125rem/1.1 var(--s-display); text-transform: uppercase; color: var(--s-foam); }
.k-app .k-account button { border-radius: 6px; font-family: var(--s-mono); }
.k-app .k-account form:has(input[type="text"], select, textarea) button { background: var(--s-coral); color: var(--s-night); text-transform: uppercase; font-weight: 800; letter-spacing: .06em; }
.k-app .k-account form:has(input[type="text"], select, textarea) label, .k-app .k-account small { color: var(--s-mist); }

/* ---------- signed out: the welcome as a poster ---------- */
.k-app .k-welcome h1 { font: 400 clamp(2.5rem, 8vw, 4.75rem)/.92 var(--s-display); text-transform: uppercase; text-shadow: 3px 3px 0 rgba(var(--s-coral-rgb), .6); }
.k-app .k-welcome .k-lead { color: var(--s-mist); font-size: 1rem; }
.k-app .k-welcome-art { border-radius: 10px; background: var(--s-night); box-shadow: inset 0 0 0 1.5px var(--s-ochre); }
.k-app .k-welcome-art::after { display: none; }
.k-app .k-welcome-art figcaption { left: 16px; right: auto; bottom: 16px; padding: 8px 12px; border-radius: 6px; background: var(--s-ochre); color: var(--s-night); font: 700 .75rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .06em; }
.k-app .k-welcome-art figcaption b { font: 400 1.125rem/1 var(--s-display); margin-right: 4px; }
.k-app .k-perks li { font-size: .875rem; font-weight: 600; }
.k-app .k-perks .k-tile { background: var(--s-coral); color: var(--s-night); }

/* Staff side (the gallery preview and the scan page) */
.k-app .k-staff-bar { background: var(--s-coral); color: var(--s-night); font-family: var(--s-mono); }
.k-app .k-staff-bar .k-badge, .k-app .k-staff-bar button { background: var(--s-night); color: var(--s-foam); }

/* ---------- public page: the screen-printed poster ---------- */
.s-pub { --k-max: 1240px; }
.p-wrap { max-width: 1240px; margin: 0 auto; padding: 0 16px; }
@media (min-width: 900px) { .p-wrap { padding: 0 40px; } }
.s-pub .p-bar { background: var(--s-night); border-bottom: 1px solid var(--k-line); backdrop-filter: none; -webkit-backdrop-filter: none; }
.s-pub .p-links a { color: var(--s-mist); font: 700 .75rem/1 var(--s-mono); text-transform: uppercase; letter-spacing: .08em; border-radius: 6px; }
.s-pub .p-links a:hover { background: rgba(var(--s-foam-rgb), .08); color: var(--s-foam); }
.p-main { display: block; }
.p-poster { position: relative; display: grid; grid-template-columns: 16px minmax(0, 1fr) 16px; padding-top: 26px; overflow: hidden; background-color: var(--s-night); }
.p-poster > * { grid-column: 2; min-width: 0; }
.p-kick { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 20px; font: 700 .6875rem/1.4 var(--s-mono); text-transform: uppercase; letter-spacing: .16em; color: var(--s-ochre); }
.p-title { margin: 14px 0 0; text-transform: uppercase; }
.p-name { display: block; font: 400 clamp(1.9rem, 8.6vw, 4.25rem)/.92 var(--s-display); color: var(--s-foam); }
.p-date { display: block; margin-top: 4px; font: 400 clamp(4.4rem, 20.5vw, 15.5rem)/.86 var(--s-display); color: var(--s-coral); text-shadow: .045em .03em 0 var(--s-ochre); white-space: nowrap; letter-spacing: -.01em; }
.p-marsh { grid-column: 1 / -1; width: 100%; height: clamp(150px, 36vw, 470px); object-fit: cover; object-position: 62% 100%; margin-top: 8px; }
.p-act { padding: 4px 0 8px; }
.p-when { font: 600 .875rem/1.5 var(--s-mono); color: var(--s-mist); }
.p-when b { color: var(--s-ochre); font-weight: 800; text-transform: uppercase; letter-spacing: .06em; }
.p-cta { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 18px; }
.p-cta .k-btn { flex: 1 1 12rem; }
.p-from { margin-top: 14px; font: 700 .75rem/1.4 var(--s-mono); text-transform: uppercase; letter-spacing: .08em; color: var(--s-mist); }
.p-bill { list-style: none; margin: 28px 0 32px; padding: 22px 0 0; border-top: 1.5px dashed rgba(var(--s-foam-rgb), .3); text-align: center; text-transform: uppercase; display: grid; gap: 10px; }
.p-bill span + span::before { content: "· "; }
.p-b1 { font: 400 clamp(2.6rem, 12vw, 5.5rem)/.9 var(--s-display); color: var(--s-foam); text-shadow: .05em .04em 0 var(--s-coral); }
.p-b2 { font: 400 clamp(1.4rem, 2.4vw, 2.25rem)/1 var(--s-display); color: var(--s-ochre); }
.p-b3 { font: 400 clamp(1.05rem, 4vw, 1.45rem)/1.15 var(--s-display); color: var(--s-foam); }
.p-b4 { font: 800 .8125rem/1.5 var(--s-mono); letter-spacing: .08em; color: var(--s-mist); }
.p-b5 { font: 700 .6875rem/1.5 var(--s-mono); letter-spacing: .14em; color: var(--s-coral-hi); }
@media (min-width: 900px) {
  .p-poster { grid-template-columns: minmax(40px, 1fr) minmax(0, 580px) minmax(0, 580px) minmax(40px, 1fr); column-gap: 0; padding-top: 34px; }
  .p-top { grid-column: 2 / 4; grid-row: 1; }
  .p-act { grid-column: 2; grid-row: 2; align-self: start; padding: 18px 40px 0 0; }
  .p-bill { grid-column: 3; grid-row: 2; margin: 14px 0 0; padding: 0 0 0 40px; border-top: 0; border-left: 1.5px dashed rgba(var(--s-foam-rgb), .3); text-align: left; align-self: start; }
  .p-marsh { grid-row: 3; margin-top: -10px; }
  .p-cta .k-btn { flex: 0 1 auto; }
  .p-name { font-size: min(5.2vw, 4.5rem); }
  .p-date { font-size: min(17.6vw, 15.5rem); }
  .p-b1 { font-size: clamp(3rem, 5.4vw, 5rem); }
}
.p-tide { line-height: 0; background: var(--s-page); }
.p-tide svg { display: block; width: 100%; height: 44px; }
.p-tide polyline { fill: none; stroke: var(--s-ochre); stroke-width: 3; vector-effect: non-scaling-stroke; stroke-linecap: round; }
.p-sec { padding: 56px 0; }
@media (min-width: 900px) { .p-sec { padding: 96px 0; } .p-band-sec { padding-bottom: 48px; } }
.p-eyebrow { font: 700 .75rem/1.3 var(--s-mono); text-transform: uppercase; letter-spacing: .16em; color: var(--s-ochre); }
.p-h2 { margin-top: 10px; font: 400 clamp(2.2rem, 8vw, 4.75rem)/.92 var(--s-display); text-transform: uppercase; }
.p-sec-head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px 32px; }
.p-note { max-width: 40ch; color: var(--s-mist); font-size: .8125rem; }
.p-band { margin: 32px 0 0; }
@media (min-width: 900px) { .s-pub .p-band { --s-gut: max(40px, calc((100vw - 1160px) / 2)); grid-template-columns: minmax(0, 1fr) calc(340px + var(--s-gut)); } }
@media (min-width: 900px) and (max-width: 1023px) {
  .s-pub .p-band .s-band-strip { grid-column: 1 / -1; grid-row: 1; grid-template-columns: minmax(0, 1fr); padding: 44px calc(340px + var(--s-gut) + 32px) 34px var(--s-gut); }
  .s-pub .p-band .s-band-tab { grid-column: 2; grid-row: 1; align-self: center; margin: -20px var(--s-gut) -20px 0; border-radius: 14px; }
}
.k-app .p-tab-btn { margin-top: 14px; box-shadow: 3px 3px 0 var(--s-night); }
.p-steps { list-style: none; margin: 48px 0 0; padding: 0; display: grid; gap: 28px; }
.p-steps b { font: 400 clamp(2.75rem, 6vw, 4rem)/1 var(--s-display); color: var(--s-coral); letter-spacing: 0; }
.p-steps h3 { margin-top: 10px; font-size: 1.625rem; line-height: 1; text-transform: uppercase; }
.p-steps p { margin-top: 8px; color: var(--s-mist); max-width: 36ch; font-size: .875rem; }
@media (min-width: 900px) { .p-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 40px; } .p-steps li { padding-top: 18px; border-top: 1.5px dashed var(--k-line-strong); } }
.p-tix { margin-top: 36px; display: grid; gap: 20px; }
@media (min-width: 900px) { .p-tix { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; } }
.p-tik { position: relative; display: grid; align-content: start; gap: 10px; padding: 70px 22px 22px 40px; border-radius: 10px; background: radial-gradient(circle at 0 14px, var(--s-page) 5px, transparent 5.5px) 0 0 / 100% 28px repeat, var(--k-surface); overflow: hidden; }
.p-tik::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 48px; }
.p-tik-eve::before { background-color: var(--s-ochre); }
.p-tik-con::before { background-color: var(--s-foam); }
.p-tik-flag { position: absolute; top: 14px; right: 14px; z-index: 1; padding: 4px 8px; border-radius: 4px; background: var(--s-night); color: var(--s-ochre); font: 800 .625rem/1.2 var(--s-mono); text-transform: uppercase; letter-spacing: .1em; }
.p-tik h3 { font-size: 2rem; line-height: 1; text-transform: uppercase; }
.p-price { font: 400 clamp(3.5rem, 16vw, 5rem)/1 var(--s-display); color: var(--s-coral-hi); }
.p-tik-what { color: var(--s-mist); font-size: .875rem; min-height: 3.2em; }
.p-tik .k-btn { margin-top: 8px; }
.p-sec-dark { background: var(--s-night); }
@media (prefers-color-scheme: dark) { .p-sec-dark { background: var(--s-dusk); } }
.p-stages { margin-top: 36px; display: grid; gap: 28px; }
@media (min-width: 900px) { .p-stages { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 40px; } }
.p-stages h3 { font-size: 1.5rem; line-height: 1; text-transform: uppercase; color: var(--s-ochre); padding-bottom: 12px; border-bottom: 3px solid var(--s-ochre); }
.p-times { list-style: none; margin: 0; padding: 0; }
.p-times li { display: flex; gap: 14px; align-items: baseline; padding: 12px 0; border-bottom: 1px dashed var(--k-line-strong); font-weight: 600; }
.p-times b { flex: none; width: 3.4rem; color: var(--s-coral-hi); font-weight: 800; font-variant-numeric: tabular-nums; }
.p-times .p-head-act { font: 400 1.375rem/1 var(--s-display); text-transform: uppercase; }
.p-times .p-head-act b { font: 800 .9375rem/1 var(--s-mono); }
.p-two { display: grid; gap: 20px; }
@media (min-width: 900px) { .p-two { grid-template-columns: 1fr 1fr; gap: 24px; } }
.p-signin { margin-top: 40px; display: grid; gap: 20px; align-items: center; padding: 40px 22px; border-radius: 10px; color: var(--s-night); }
.p-signin .p-eyebrow { color: var(--s-night); }
.p-signin p:not(.p-eyebrow) { margin-top: 10px; max-width: 46ch; font-weight: 600; }
.k-app .p-signin .k-btn { background: var(--s-night); color: var(--s-foam); box-shadow: 3px 3px 0 var(--s-ochre); justify-self: start; }
@media (min-width: 900px) { .p-signin { grid-template-columns: minmax(0, 1fr) auto; padding: 48px 44px; } }
.s-pub .k-foot { margin-top: 0; padding-top: 22px; padding-bottom: 40px; border-top: 1.5px dashed var(--k-line-strong); }

/* Privacy notice */
.p-priv-main { max-width: 1240px; margin: 0 auto; padding: 40px 16px 24px; }
@media (min-width: 900px) { .p-priv-main { padding: 64px 40px 32px; } }
.s-priv .k-prose h1 { font: 400 clamp(2.6rem, 10vw, 5.5rem)/.9 var(--s-display); text-transform: uppercase; text-shadow: 3px 3px 0 rgba(var(--s-coral-rgb), .6); }
.s-priv .k-prose h2 { margin-top: 36px; font: 400 1.5rem/1.05 var(--s-display); text-transform: uppercase; color: var(--s-ochre); }
.s-priv .k-prose p, .s-priv .k-prose li { font-size: .9375rem; }
.s-priv .k-prose a { color: var(--s-coral-hi); }
.s-priv .k-prose .tip { margin-top: 20px; background: var(--s-ochre); color: var(--s-night); font-weight: 700; border-radius: 6px; }
.s-priv .blank { background: rgba(var(--s-ochre-rgb), .2); color: var(--s-foam); box-shadow: inset 0 -2px 0 var(--s-ochre); }
.s-priv .k-prose a.blank { color: var(--s-foam); }
.s-priv .k-foot { margin-top: 48px; }

/* ---------- motion ---------- */
@keyframes s-slide { from { transform: translateX(-24px); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes s-draw { from { stroke-dashoffset: 1400; } to { stroke-dashoffset: 0; } }
@keyframes s-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
@keyframes s-pulse { 50% { box-shadow: 0 0 0 4px rgba(var(--s-coral-rgb), .55); } }
@media (prefers-reduced-motion: reduce) {
  .k-app *, .k-app *::before, .k-app *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
  .s-band-strip, .s-tide-done, .s-tide-mark, .s-live .s-tab-label { animation: none !important; }
  .k-app .k-btn { transition: none; }
}
@media (max-width: 480px) { .s-pub .p-brand { font-size: .9375rem; } .s-pub .p-brand span { white-space: normal; line-height: 1; } }
.s-paper-head a { display: inline-flex; align-items: center; min-height: 32px; }
.s-priv .k-prose, .s-pub .k-foot { overflow-wrap: anywhere; }
.s-home .k-pagehead h1 { font-size: clamp(2.1rem, 8.4vw, 3.75rem); }

/* ---------- round 1 review fixes ---------- */
/* Long values wrap instead of disappearing; the gate code scales inside its tab */
.s-band-meta { overflow-wrap: anywhere; }
.s-band-tab .k-scan [data-pl-scan-code] :is(svg, img) { max-width: 100%; height: auto; }
.s-pick p, .s-mini b, .s-mini span, .s-minelist li { overflow-wrap: anywhere; min-width: 0; max-width: 100%; }
.s-app .k-top .k-brand span { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
.k-app [data-pl-part="leave"] button { width: 100%; padding: 14px 18px; }
.k-app .s-me-label { overflow-wrap: anywhere; }

.s-band-tab > .k-scan { margin-top: 0; }
@media (min-width: 1024px) {
  .s-band-xl { grid-template-columns: minmax(0, 1fr) calc(380px + var(--s-gut)); }
  .s-band-xl .s-band-strip { min-height: 240px; padding-top: 44px; padding-bottom: 40px; align-items: center; padding-right: calc(380px + var(--s-gut) + 40px); }
  .s-band-xl .s-band-name { font-size: clamp(2.6rem, 5vw, 4.5rem); overflow-wrap: anywhere; }
  .s-band-xl .s-band-tab { padding-top: 28px; }
}

/* Ticket: gate scans as one compact row */
.s-scans .k-empty { display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 2px 14px; align-items: center; min-height: 72px; padding: 12px 0; text-align: left; }
.s-scans .k-empty .k-empty-art { grid-row: span 2; width: 40px; height: 40px; margin: 0; }
.s-scans .k-empty .k-empty-art .k-i { width: 20px; height: 20px; }
.s-scans .k-empty h3 { margin: 0; font-size: 1rem; }
.s-scans .k-empty p { margin: 0; max-width: none; font-size: .8125rem; }

/* Home: gate times as an ochre strip, the running order as a tide line across two columns */
.s-gatestrip { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 14px 12px; margin-top: 44px; padding: 20px; border-radius: 8px; background: var(--s-ochre); color: var(--s-night); box-shadow: inset 0 -5px 0 var(--s-coral); }
.s-gatestrip > div { display: grid; gap: 4px; min-width: 0; }
.k-app .s-gatestrip b { font: 400 clamp(1.5rem, 7.4vw, 4rem)/1 var(--s-display); color: var(--s-night); letter-spacing: 0; }
.k-app .s-gatestrip span { color: var(--s-night); font-size: .6875rem; font-weight: 800; text-transform: uppercase; letter-spacing: .1em; }
@media (min-width: 1024px) { .s-gatestrip { padding: 26px 40px; } }
.s-next { margin-top: 24px; }
.k-board.s-next > .s-sets { grid-column: 1 / -1; }
.k-board.s-next > .s-gate { grid-column: 1 / -1; }
.s-mini-row > li.k-empty { grid-column: 1 / -1; margin-left: 0; }
@media (min-width: 1024px) {
  .k-board.s-next > .s-sets { grid-column: span 8; }
  .k-board.s-next > .k-span-4 { grid-column: span 4; }
  .s-sets .s-mini-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 24px; }
}

/* Day: the set select keeps its label and shows a chevron */
.k-app .k-field select { -webkit-appearance: none; appearance: none; padding-right: 2.75rem; font-size: .8125rem; text-overflow: ellipsis; }

/* Line-up: "In your day" as equal chips */
.s-minelist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.s-minelist li.k-help { grid-column: 1 / -1; }
@media (min-width: 900px) { .s-minelist { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* Public page: the poster's left column carries the marsh on desktop; the bill runs beside both */
@media (min-width: 900px) {
  .p-bill { grid-row: 2; }
  .p-marsh { grid-column: 1 / -1; grid-row: 3; height: 320px; aspect-ratio: auto; margin: 32px 0 0; }
}

/* Round 2 review fixes */
@media (max-width: 600px) { .s-pub .k-foot a[href^="mailto:"] { flex-basis: 100%; font-size: .85rem; } }
.s-pub a[href^="mailto:"] { overflow-wrap: anywhere; }
[data-s-selected-act] { overflow-wrap: anywhere; }
[data-s-selected-act]:empty { display: none; }
/* look 12: the name plate is the band's owner label: woven, with the wristband edge */
.s-me { background-color: var(--s-ochre); background-image: linear-gradient(180deg, var(--s-night) 0 2px, transparent 2px calc(100% - 2px), var(--s-night) calc(100% - 2px)), repeating-linear-gradient(90deg, rgba(var(--s-night-rgb), .1) 0 1px, transparent 1px 4px), repeating-linear-gradient(0deg, rgba(var(--s-white-rgb), .14) 0 1px, transparent 1px 3px); }
/* codex 6: the set chevron is a masked mark in the palette, not a literal colour in a data URI */
.k-app .k-field:has(> select) { position: relative; }
.k-app .k-field:has(> select)::after { content: ""; position: absolute; right: 14px; bottom: 14px; width: 16px; height: 16px; pointer-events: none; background: var(--s-coral); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 6l5 5 5-5' fill='none' stroke='currentColor' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 16px 16px no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 6l5 5 5-5' fill='none' stroke='currentColor' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 16px 16px no-repeat; }

/* ---------- round 3 review fixes ---------- */
/* The public price line is three small tags that wrap as whole tags */
.p-from { display: flex; flex-wrap: wrap; gap: 8px; }
.p-from span { white-space: nowrap; padding: 5px 9px; border-radius: 4px; box-shadow: inset 0 0 0 1.5px var(--k-line-strong); }
/* The line-up's right column: Samphire, then the Barn Tent card */
.s-stack { display: grid; gap: 28px; align-content: start; min-width: 0; }
/* In your day: one line of text, no chips */
.s-mine { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 12px 18px; }
.s-mine .s-paper-head { flex: none; padding-bottom: 0; border-bottom: 0; }
.s-mine .s-minelist { display: flex; flex-wrap: wrap; gap: 4px 18px; }
.s-mine .s-minelist li:not(.k-help) { padding: 0; border-radius: 0; background: none; box-shadow: none; }
.s-mine .s-minelist b { color: var(--s-foam); font-size: .8125rem; }
.s-mine .s-minelist li.k-help { font-size: .8125rem; }
/* Info: gate times as a 2x2 grid on a phone, one row of four from 600px */
.k-app .s-gatetimes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 0; }
.k-app .s-gatetimes > * { min-width: 0; padding: 0 16px; border-left: 0; }
.k-app .s-gatetimes > :nth-child(odd) { padding-left: 0; }
.k-app .s-gatetimes > :nth-child(even) { border-left: 1px solid var(--k-line-strong); }
@media (min-width: 600px) {
  .k-app .s-gatetimes { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; }
  .k-app .s-gatetimes > :nth-child(odd) { padding-left: 16px; }
  .k-app .s-gatetimes > :first-child { padding-left: 0; }
  .k-app .s-gatetimes > :nth-child(n+2) { border-left: 1px solid var(--k-line-strong); }
}
/* Home: the running order is one tide line with four stops across the card */
@media (min-width: 1024px) {
  .s-sets .s-mini-row { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 16px; }
  .s-home .s-head-btn { margin-right: 400px; }
}
/* Ticket: the day's four sets sit on one row */
@media (min-width: 1024px) { .s-dayrow .s-mini-row { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
/* Home: "At the gate" is an ochre strip like the gate times above it */
.s-gate { background: var(--s-ochre); color: var(--s-night); box-shadow: inset 0 -5px 0 var(--s-coral); }
.k-app .s-gate .s-paper-head { border-bottom-color: rgba(var(--s-night-rgb), .45); }
.k-app .s-gate .s-paper-head h2, .k-app .s-gate .s-paper-head a, .k-app .s-gate .k-help, .k-app .s-gate .k-help a { color: var(--s-night); }
.k-app .s-gate .s-entry b, .k-app .s-gate .s-entry-in b, .k-app .s-gate .s-entry > div > span { color: var(--s-night); }
.k-app .s-gate .s-entry .k-tile { background: var(--s-night); }
.k-app .s-gate .s-entry .k-tile-ok { color: var(--k-ok); }
.k-app .s-gate .s-entry .k-tile:not(.k-tile-ok) { color: var(--s-ochre); }
/* Account: Ticket help is plain rows on the night ground */
.s-help { background: none; box-shadow: none; padding: 0; }
/* Account: sign-out and the device rows are one card */
.k-app .k-account[data-pl-part="signin"] { background: var(--k-surface); border-radius: 8px; box-shadow: inset 0 4px 0 var(--s-ochre); overflow: hidden; }
.k-app .k-account[data-pl-part="signin"] > p:first-child, .k-app .k-account[data-pl-part="signin"] > ul, .k-app .k-account[data-pl-part="signin"] > form { background: transparent; box-shadow: none; border-radius: 0; }
.k-app .k-account[data-pl-part="signin"] > form > button { background: transparent; box-shadow: none; }
/* Account: Save profile is set in the mono caps of the other buttons */
.k-app .k-account form:has(input[type="text"], select, textarea) button { font-family: var(--s-mono); font-stretch: 87.5%; text-transform: uppercase; letter-spacing: .06em; font-weight: 800; }
/* Wristband: the scan block's Show my code is a visible coral action; wallet badges are night with a foam edge */
.s-band-tab .k-scan [data-pl-scan-show] { background: var(--s-coral); color: var(--s-night); box-shadow: 3px 3px 0 var(--s-ochre); }
.s-band-tab .k-scan [data-pl-scan-show]:hover { background: var(--s-coral-hi); }
.s-band-tab .k-scan [data-pl-wallet] { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.s-band-tab .k-scan [data-pl-wallet] button { background: var(--s-night); color: var(--s-foam); border: 1px solid var(--s-foam); box-shadow: none; min-height: 44px; padding: 0 8px; font-size: .6875rem; letter-spacing: .04em; text-transform: uppercase; }
/* Sticky CTA: the sentence wraps instead of truncating on a phone */
.k-app .k-sticky-cta > span:first-child { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
.k-app .k-sticky-cta { padding-block: 8px; }
/* Public poster: the ticket buttons sit at the foot of the act column, level with the bill */
@media (min-width: 900px) { .p-act { align-self: stretch; display: flex; flex-direction: column; } .p-cta { margin-top: auto; } }
.s-band-tab .k-scan [data-pl-wallet] button { white-space: normal; line-height: 1.2; padding: 6px 8px; }

/* ---------- round 4 final fixes ---------- */
/* look 1: the hero's CTAs sit under the date line, the chips under the CTAs, the landscape under the line-up */
.p-from { margin-top: 12px; }
@media (min-width: 900px) { .p-act { align-self: start; } .p-cta { margin-top: 32px; } .p-marsh { margin-top: 40px; } }
/* look 5: the home running order is a 2x2 grid on desktop */
@media (min-width: 1024px) { .s-sets .s-mini-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 24px; } }
/* look 7: "In your day" runs as four columns on desktop, sets in mono 14px */
.s-mine .s-minelist b { font-size: .875rem; }
@media (min-width: 900px) { .s-mine .s-minelist { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px 18px; } }
/* look 8: Add and Added share one width, so the button edge does not jump */
.k-app .s-set .s-add { min-width: 112px; justify-content: center; }
/* look 9: the sign-in card's rows and headings sit on one 20px inset */
.k-app .k-account[data-pl-part="signin"] > * { padding-inline: 20px; }
.k-app .k-account[data-pl-part="signin"] > ul { padding-inline: 0; }
.k-app .k-account[data-pl-part="signin"] li { padding-inline: 20px; }
.k-app .k-account[data-pl-part="signin"] h3 { margin-inline: 0; }
/* look 9: Profile and Leaving are headed like Ticket help: a display heading over a dashed rule */
.k-app .k-account[data-pl-part="profile"] h3, .k-app .k-account[data-pl-part="leave"] h3 { margin: 0 0 14px; padding: 0 0 10px; border-bottom: 1.5px dashed var(--k-line-strong); }
/* look 11: the empty-state icon aligns to the top of its text */
.s-scans .k-empty { align-items: start; }
/* codex 2: the nested gate span keeps the night text on ochre */
.k-app .s-gate .s-entry span { color: var(--s-night); }
/* codex 3: long account emails wrap inside the sign-in card */
.k-app .k-account[data-pl-part="signin"] > p:first-child b { min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
