/* ==========================================================================
   DorkClips - restyled to match sportclips.com
   Values measured from the live reference on 2026-10-27
   (evidence/ref-design-tokens.json, evidence/ref-components.json).
   Palette, type scale and component metrics are copied deliberately.
   ========================================================================== */

:root {
  /* Reference palette (exact). --red-deep is ours: #DB2526 is 4.83:1 on white
     but only 4.40:1 on the #F4F4F4 band, which fails for small text. */
  --red: #db2526;
  --red-hover: #dd3131;
  --red-deep: #c11f20;
  --ink: #000000;
  --panel: #2e2e2e;
  --panel-2: #3a3a3a;
  --body: #000000;
  --muted: #525252;
  --muted-2: #767676;
  --page: #ffffff;
  --band: #f4f4f4;
  --band-2: #fafafa;
  --border: #cccccc;
  --border-2: #707070;
  --focus: #0586ff;

  /* The reference's own families: Open Sans + Roboto Condensed (Apache-2.0). */
  --font-display: "Roboto Condensed", "Arial Narrow", Arial, sans-serif;
  --font-text: "Open Sans", Roboto, "Segoe UI", sans-serif;

  --wrap: 1200px;
  --gutter: 20px;
  --radius: 4px;
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  background: var(--page);
  color: var(--body);
  font-family: var(--font-text);
  font-size: 16px;
  font-weight: 300;
  line-height: 1.625;
}

/* Reference: h1 48/48, h2 36/54 red, h3 22/26. None are uppercase. */
h1, h2, h3, h4, .brand__text, .stat__v, .ref {
  font-family: var(--font-display);
  font-weight: 700;
  letter-spacing: normal;
  text-wrap: balance;
}
h1 { font-size: 48px; line-height: 1; margin: 0 0 16px; }
h2 { font-size: 36px; line-height: 1.5; margin: 0 0 8px; color: var(--red); }
h3 { font-size: 22px; line-height: 1.18; margin: 0 0 8px; }
h4 { font-size: 18px; line-height: 1.4; margin: 0 0 6px; }
p { margin: 0 0 16px; max-width: 74ch; }
a { color: var(--red-deep); text-underline-offset: 0.18em; }
a:hover { color: var(--red-hover); }
strong, b { font-weight: 700; }
code { font-size: 0.92em; background: var(--band); padding: 1px 4px; }
address { font-style: normal; }

/* Browsers honour the width="" attribute, so <img width="667"> renders 667px wide on a
   375px screen unless this exists. This was the cause of the mobile page overflow. */
img { max-width: 100%; height: auto; }

@media (max-width: 46rem) {
  h1 { font-size: 32px; }
  h2 { font-size: 26px; line-height: 1.25; }
}

.vh {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.skip {
  position: absolute; left: 8px; top: -48px; z-index: 40;
  background: var(--ink); color: #fff; padding: 10px 16px; font-weight: 700;
  text-decoration: none; transition: top 0.16s var(--ease);
}
.skip:focus { top: 8px; color: #fff; }
.skip::after { content: none; }

:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; }
main:focus { outline: none; }

/* ------------------------------------------------------------------ layout */
.shell { width: 100%; max-width: var(--wrap); margin-inline: auto; padding-inline: var(--gutter); }
.shell--wide, .shell--medium { max-width: var(--wrap); }
.band { padding-block: 40px; }
.band--tight { padding-block: 24px 40px; }
.band--alt { background: var(--band); }
.band--ink { background: var(--panel); color: #fff; }
.band--ink h2 { color: #fff; }
.band--ink a { color: #fff; }

.two-col { display: grid; gap: 40px; align-items: start; }
@media (min-width: 56rem) { .two-col { grid-template-columns: 1fr 1fr; } }
@media (min-width: 76rem) { .two-col--wide { grid-template-columns: 1.35fr 1fr; } }

/* --------------------------------------------------------------- typography */
/* The reference centres its section headings and intros. */
.sec-head { text-align: center; max-width: 900px; margin: 0 auto 28px; }
.sec-head .lede { margin-inline: auto; }
.ordinal { display: none; }

.kicker {
  font-family: var(--font-display); font-size: 14px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted);
  margin: 0 0 4px;
}
.kicker--signal { color: var(--red-deep); }
.lede { font-size: 18px; line-height: 1.55; color: var(--muted); max-width: 68ch; margin-bottom: 16px; }
.lede--big { font-size: 20px; max-width: 60ch; color: #fff; }
.note { font-size: 14px; color: var(--muted); max-width: 74ch; }
.muted { color: var(--muted); }
.sub { font-family: var(--font-display); font-size: 20px; font-weight: 700; }
.center { text-align: center; }
.center p { margin-inline: auto; }

/* ------------------------------------------------------------------ header */
.site-head { background: #fff; border-bottom: 1px solid var(--band); position: relative; z-index: 20; }
.head-inner { display: flex; align-items: center; gap: 16px; min-height: 95px; }
.brand { display: flex; align-items: center; text-decoration: none; color: var(--ink); flex: none; }
.brand img { width: 196px; height: 52px; display: block; }
.brand__text { font-size: 22px; text-transform: none; display: grid; line-height: 1; }
.brand__text em {
  font-family: var(--font-text); font-style: normal; font-weight: 400;
  font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
}
.brand__mark { display: none; }

.site-nav { margin-inline-start: auto; }
.site-nav ul { display: flex; gap: 22px; list-style: none; margin: 0; padding: 0; }
.site-nav a {
  color: var(--ink); text-decoration: none; font-size: 16px; font-weight: 300;
  text-transform: none; letter-spacing: normal; padding-block: 6px;
}
.site-nav a:hover { color: var(--red); }
.site-nav a[aria-current="page"] { color: var(--red); }
.head-cta { flex: none; }

/* Mobile: the reference header is 167px tall with a hamburger drawer. */
.burger { display: none; margin-inline-start: auto; position: relative; }
.burger summary {
  list-style: none; cursor: pointer; width: 44px; height: 44px;
  display: grid; align-content: center; justify-items: center; gap: 5px; padding: 8px;
}
.burger summary::-webkit-details-marker { display: none; }
.burger summary span { display: block; width: 24px; height: 3px; background: var(--ink); }
.burger summary .vh { position: absolute; }
.burger nav { position: absolute; inset-inline: -20px; top: 100%; background: #fff; border-bottom: 1px solid var(--border); padding: 8px 20px 16px; }
.burger nav ul { list-style: none; margin: 0; padding: 0; display: grid; }
.burger nav a { display: block; padding: 12px 0; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--band); font-size: 17px; }

@media (max-width: 60rem) {
  .site-nav { display: none; }
  .burger { display: block; }
  .head-inner { min-height: 88px; }
  .head-cta--dark { display: none; }
}
@media (max-width: 30rem) { .brand__text em { display: none; } }

/* ----------------------------------------------------------------- buttons */
/* Reference: 9px 20px, radius 4px, 1px solid matching border, uppercase 16/26. */
.btn {
  --btn-bg: var(--red); --btn-fg: #fff; --btn-bd: var(--red);
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 46px; padding: 9px 20px;
  background: var(--btn-bg); color: var(--btn-fg); border: 1px solid var(--btn-bd);
  border-radius: var(--radius); cursor: pointer; text-decoration: none;
  font-family: var(--font-display); font-size: 16px; font-weight: 700; line-height: 26px;
  text-transform: uppercase; letter-spacing: normal;
  transition: background-color 0.15s var(--ease), color 0.15s var(--ease);
}
.btn::after { content: "\2702"; font-size: 15px; line-height: 1; }
.btn--no-scissors::after { content: none; }
.btn:hover { background: var(--red-hover); border-color: var(--red-hover); color: #fff; }
.btn--dark { --btn-bg: var(--ink); --btn-bd: var(--ink); --btn-fg: #fff; }
.btn--dark:hover { background: var(--panel); border-color: var(--panel); }
.btn--ghost { --btn-bg: #fff; --btn-fg: var(--ink); --btn-bd: var(--border); }
.btn--ghost:hover { background: var(--band); border-color: var(--border-2); color: var(--ink); }
.btn--big { min-height: 52px; padding: 12px 26px; font-size: 17px; }
.btn--block { width: 100%; }
.btn[disabled], .btn[aria-busy="true"] { opacity: 0.65; pointer-events: none; }
.spinner { display: none; width: 14px; height: 14px; border: 2px solid currentColor;
  border-top-color: transparent; border-radius: 50%; }
[aria-busy="true"] .spinner, form[data-pending] .spinner { display: inline-block; animation: spin 0.6s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

.link-arrow { font-weight: 700; color: var(--red-deep); text-decoration: underline; }
.more { margin: 20px 0 0; text-align: center; }

/* ------------------------------------------------------------------- chips */
.chip {
  display: inline-block; padding: 2px 10px; font-size: 13px; font-weight: 600;
  background: var(--band); border: 1px solid #e2e2e2; color: var(--muted); border-radius: 999px;
}
.chip--open { background: #e9f4ec; border-color: #bcd9c5; color: #1c6b3f; }
.chip--shut { background: var(--band); color: var(--muted); }
.chip--muted { background: #fff; }

.boundary {
  display: flex; gap: 8px; align-items: baseline; font-size: 14px; color: var(--muted);
  border-top: 1px solid var(--band); padding-top: 12px; margin-top: 24px; max-width: 90ch;
}
.boundary__dot { width: 7px; height: 7px; background: var(--muted-2); border-radius: 50%; flex: none; }

/* -------------------------------------------------------------------- hero */
/* Reference: full-bleed banner image (1440x700) with a black panel over the right. */
/* Hero uses a real <img> rather than a CSS background so CSP can stay strict
   (style-src 'self' blocks inline style attributes) and so it gets alt text. */
.hero { position: relative; background-color: var(--panel); color: #fff; overflow: hidden; }
.hero__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; }
.hero__inner { position: relative; z-index: 1; display: flex; align-items: center; min-height: 620px; padding-block: 48px; }
.hero__panel { background: rgba(0,0,0,0.82); padding: 36px 32px; max-width: 620px; margin-inline-start: auto; }
.hero h1 { font-size: 48px; color: #fff; margin-bottom: 12px; }
.hero .kicker { color: #fff; }
.hero .lede { color: #fff; }
.hero__act { display: flex; flex-wrap: wrap; gap: 12px; margin: 20px 0 0; }
.hero .btn--ghost { --btn-bg: transparent; --btn-fg: #fff; --btn-bd: #fff; }
.hero .btn--ghost:hover { background: #fff; color: var(--ink); }
.hero__caption { background: #fff; color: var(--muted); text-align: center; padding: 10px 20px; font-size: 14px; }
.hero__caption p { margin: 0 auto; max-width: 900px; }
@media (max-width: 60rem) {
  /* Same order as the reference on a phone: headline card first, then the whole photo. */
  .hero { display: flex; flex-direction: column; }
  .hero__inner { order: 1; }
  .hero__bg { order: 2; position: static; display: block; height: auto; aspect-ratio: 1440 / 700; }
  .hero__caption { order: 3; }
  .hero__inner { min-height: 0; padding: 0; }
  .hero__panel { margin: 0; max-width: none; padding: 28px 20px; background: #000; }
  .hero h1 { font-size: 32px; }
}
/* Foldables unfolded (about 600-900px wide) and small tablets: two-up buttons, bigger type. */
@media (min-width: 37.5rem) and (max-width: 60rem) {
  .hero__panel { padding: 36px 32px; }
  .hero h1 { font-size: 40px; }
  .hero__act .btn { flex: 1 1 0; justify-content: center; }
}
/* Very narrow covers (folded Z Fold outer screen is about 344px, some are 280px). */
@media (max-width: 22rem) {
  .hero h1 { font-size: 28px; }
  .hero__act .btn { flex: 1 1 100%; justify-content: center; }
  .brand img { width: 140px; height: auto; }
}
/* Notches and rounded corners in landscape. */
.shell { padding-left: max(var(--gutter), env(safe-area-inset-left)); padding-right: max(var(--gutter), env(safe-area-inset-right)); }
/* Comfortable touch targets on touch screens. */
@media (pointer: coarse) {
  .btn, .site-nav a, .burger summary, .field input, .field select { min-height: 44px; }
}

/* ------------------------------------------------------------------ search */
/* Reference: bold label left, input centre (radius 4, #FAFAFA, 40px icon inset). */
.searchband { background: #fff; border-bottom: 1px solid var(--band); padding-block: 20px; }
.searchband__inner { display: grid; gap: 12px 20px; align-items: center; }
@media (min-width: 60rem) { .searchband__inner { grid-template-columns: auto 1fr auto; } }
.searchband__label { font-family: var(--font-display); font-size: 19px; font-weight: 700; margin: 0; }
.searchband__aside { grid-column: 1 / -1; margin: 0; font-size: 14px; }
@media (min-width: 60rem) { .searchband__aside { grid-column: 3; text-align: right; } }

.search { display: grid; gap: 12px; grid-template-columns: 1fr auto; align-items: end; }
.search--with-state { grid-template-columns: 1fr 1fr auto; }
@media (max-width: 48rem) { .search, .search--with-state { grid-template-columns: 1fr; } }

input, select, textarea {
  font-family: var(--font-text); font-size: 16px; font-weight: 300; color: var(--ink); background: var(--band-2);
  border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 20px 10px 40px;
  min-height: 42px; width: 100%;
}
select { padding-left: 12px; }
textarea { padding-left: 12px; min-height: 96px; resize: vertical; }
input::placeholder { color: var(--muted-2); }
input[aria-invalid="true"], select[aria-invalid="true"], textarea[aria-invalid="true"] {
  border-color: var(--red-deep); box-shadow: inset 3px 0 0 var(--red-deep);
}
.field { display: grid; gap: 4px; }
.field label { font-family: var(--font-display); font-size: 15px; font-weight: 700; color: var(--ink); }
.field--short { max-width: 160px; }
.hint { font-size: 14px; color: var(--muted); margin: 2px 0 0; max-width: 66ch; }
.hint--inline { font-weight: 400; }
.err { font-size: 14px; font-weight: 600; color: var(--red-deep); margin: 2px 0 0; }
.search__status { font-size: 14px; color: var(--muted); margin: 8px 0 0; }
form[data-pending] .search__status { display: block; }

.notice { border-left: 4px solid var(--red); background: var(--band-2); padding: 12px 16px; margin-bottom: 20px; }
.notice--ok { border-color: #1c6b3f; }
.errsummary { border: 1px solid var(--red); background: #fff; padding: 16px 20px; margin-bottom: 24px; }
.errsummary h2 { font-size: 22px; margin-bottom: 6px; }
.errsummary ul { margin: 0; padding-inline-start: 20px; }

/* --------------------------------------------------------------- text grids */
.copyblock { text-align: center; }
.copyblock p { margin-inline: auto; color: var(--muted); font-size: 17px; }

.steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 24px; }
@media (min-width: 48rem) { .steps { grid-template-columns: repeat(3, 1fr); } }
.steps li { text-align: center; }
.steps__n { display: none; }

/* 4-up photo card grid (reference images are 270x180). */
.grid4 { display: grid; gap: 28px 24px; }
@media (min-width: 40rem) { .grid4 { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 64rem) { .grid4 { grid-template-columns: repeat(4, 1fr); } }
.fcard { text-align: center; }
.fcard img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; display: block; margin-bottom: 14px; }
.fcard h3 { font-size: 22px; margin-bottom: 6px; }
.fcard p { color: var(--muted); font-size: 16px; margin: 0; }

/* Two-up alternating text/image rows (reference images are 675x450). */
.media-row { display: grid; gap: 32px; align-items: center; padding-block: 32px; }
@media (min-width: 56rem) {
  .media-row { grid-template-columns: 1fr 1fr; gap: 60px; }
  .media-row--flip img { order: -1; }
}
.media-row img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; display: block; }
.media-row .ticks { margin-top: 12px; }

.trio { display: grid; gap: 24px; }
@media (min-width: 52rem) { .trio { grid-template-columns: repeat(3, 1fr); } }
.svc { background: #fff; border: 1px solid var(--band); padding: 24px 20px; text-align: center; }
.svc__kicker { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin: 0 0 4px; }
.svc h3 { font-size: 22px; }
.svc__price { display: flex; justify-content: center; gap: 12px; align-items: baseline;
  font-family: var(--font-display); font-weight: 700; font-size: 20px; color: var(--red-deep); margin: 0 0 10px; }
.svc__min { font-family: var(--font-text); font-weight: 400; font-size: 14px; color: var(--muted); }
.svc p { color: var(--muted); }
.svc .ticks { text-align: left; }

.ticks { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.ticks li { position: relative; padding-inline-start: 20px; font-size: 15px; }
.ticks li::before { content: "\2713"; position: absolute; inset-inline-start: 0; color: #1c6b3f; font-weight: 700; }
.ticks--sm li { font-size: 14px; }
.crosses { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.crosses li { position: relative; padding-inline-start: 18px; font-size: 14px; color: var(--muted); }
.crosses li::before { content: "\2014"; position: absolute; inset-inline-start: 0; }

/* ------------------------------------------------- campaign / quotes / promos */
.campaign { background: var(--panel); color: #fff; }
.campaign__inner { display: grid; gap: 28px; align-items: center; padding-block: 40px; }
@media (min-width: 56rem) { .campaign__inner { grid-template-columns: 1fr 1fr; } }
.campaign h2 { color: #fff; }
.campaign p { color: #e8e8e8; }
.campaign img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; display: block; }

.promos { padding-block: 40px; }
.promos__grid { display: grid; gap: 24px; }
@media (min-width: 48rem) { .promos__grid { grid-template-columns: 1fr 1fr; } }
.promo { background: var(--band); padding: 24px 20px; }
.promo--ink { background: var(--panel); color: #fff; }
.promo--ink h3, .promo--signal h3 { color: #fff; }
.promo--ink p { color: #e8e8e8; }
.promo--signal { background: var(--red); color: #fff; }
.promo--signal p { color: #fff; }
.promo h3 { font-size: 22px; }
.promo .chip { background: transparent; border-color: rgba(255,255,255,0.75); color: #fff; }

.quotes { background: var(--band); text-align: center; padding-block: 40px; }
.quote { max-width: 900px; margin: 0 auto 20px; border: 0; }
.quote blockquote { margin: 0 0 12px; font-size: 18px; line-height: 1.7; color: var(--muted); }
.quote blockquote em { color: var(--red-deep); font-style: normal; }
.quote figcaption { font-size: 14px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink); }

/* ------------------------------------------------------------------ footer */
.site-foot { background: var(--panel); color: #fff; padding-top: 40px; font-size: 15px; }
.foot-inner { display: grid; gap: 28px; }
@media (min-width: 60rem) { .foot-inner { grid-template-columns: 1.4fr 1fr 1fr 1.2fr; } }
.site-foot a { color: #fff; text-decoration: none; }
.site-foot a:hover { color: #fff; text-decoration: underline; }
.foot-brand { font-family: var(--font-display); font-size: 22px; font-weight: 700; margin: 0 0 10px; }
.foot-note { font-size: 14px; color: #d8d8d8; max-width: 46ch; margin-bottom: 12px; }
.foot-note strong { color: #fff; }
.foot-note--muted { color: #b8b8b8; }
.site-foot nav ul, .foot-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.foot-h { font-family: var(--font-display); font-size: 17px; font-weight: 700; margin: 0 0 10px; color: #fff; }
.socials { list-style: none; display: flex; gap: 10px; padding: 0; margin: 0 0 16px; }
.socials a, .socials span {
  width: 36px; height: 36px; border-radius: 50%; background: var(--panel-2); color: #fff;
  display: grid; place-items: center; font-size: 13px; font-weight: 700;
}
.badges { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.badges img { height: 44px; width: auto; display: block; }
.foot-legal { border-top: 1px solid var(--panel-2); margin-top: 32px; padding-block: 16px 24px; }
.foot-legal__inner { display: flex; flex-wrap: wrap; gap: 8px 24px; justify-content: space-between; font-size: 13px; color: #c8c8c8; }
.foot-legal__inner p { margin: 0; max-width: none; }
.foot-legal a { text-decoration: underline; }

/* ------------------------------------------------------------------ roster */
.roster { list-style: none; margin: 24px 0 0; padding: 0; display: grid; gap: 16px; }
.row { display: grid; gap: 16px; padding: 20px; border: 1px solid var(--band); background: #fff; align-items: start; }
@media (min-width: 56rem) { .row { grid-template-columns: 1fr auto; } }
.row__num { display: none; }
.row__title { font-size: 22px; margin: 0 0 4px; text-transform: none; }
.row__title a { text-decoration: none; color: var(--ink); }
.row__title a:hover { color: var(--red); text-decoration: underline; }
.row__meta { margin: 0 0 2px; font-size: 15px; color: var(--muted); }
.row__meta--muted { color: var(--muted-2); font-size: 14px; }
.row__tags { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0; padding: 0; }
.row__act { display: grid; gap: 8px; justify-items: start; }
@media (min-width: 56rem) { .row__act { justify-items: end; } }
.row__tel { font-size: 14px; }

.results-head { text-align: center; border-bottom: 1px solid var(--band); padding-bottom: 16px; }
.results-count { font-size: 30px; margin: 0; }
.results-filter { margin: 4px 0 0; font-size: 15px; color: var(--muted); }

.empty { border: 1px solid var(--band); background: var(--band-2); padding: 32px 24px; margin-top: 24px; text-align: center; }
.empty h3 { font-size: 24px; }
.empty p { margin-inline: auto; }
.empty__act { list-style: none; display: flex; flex-wrap: wrap; gap: 12px; padding: 0; margin: 20px 0 12px; justify-content: center; }
.empty__hint { font-size: 14px; color: var(--muted); margin: 0; }

/* ------------------------------------------------------------------- tables */
.table-wrap { overflow-x: auto; max-width: 100%; min-width: 0; border: 1px solid var(--band); }
table { border-collapse: collapse; width: 100%; font-size: 15px; font-weight: 300; }
thead th { background: var(--panel); color: #fff; text-align: start; padding: 12px;
  font-family: var(--font-display); font-size: 15px; font-weight: 700; }
tbody th, tbody td { padding: 12px; border-top: 1px solid var(--band); vertical-align: top; text-align: start; }
/* .vh is position:absolute; without a positioned ancestor it resolves against the
   initial containing block and escapes the table's own scroll container, which made
   the whole page scroll sideways at 375px. Anchoring it to the cell contains it. */
th, td { position: relative; }
tbody tr:nth-child(even) { background: var(--band-2); }
.matrix__name { display: block; font-family: var(--font-display); font-weight: 700; font-size: 17px; }
.matrix__kick { display: block; font-size: 13px; color: var(--muted); }
.avail td { text-align: center; font-family: var(--font-display); font-weight: 700; }
.avail td.yes { color: #1c6b3f; }
.avail td.no { color: var(--muted-2); }
.avail td.part { color: var(--red-deep); }
.legend { list-style: none; display: flex; flex-wrap: wrap; gap: 16px; padding: 0; margin: 12px 0; font-size: 14px; justify-content: center; }
.legend__k { font-family: var(--font-display); font-weight: 700; margin-inline-end: 4px; }
.legend__k.yes { color: #1c6b3f; } .legend__k.part { color: var(--red-deep); } .legend__k.no { color: var(--muted-2); }
.note-stack { display: grid; gap: 10px; margin-top: 16px; max-width: 90ch; margin-inline: auto; }
.hours { max-width: 420px; margin-inline: auto; }
.hours th[scope="row"] { font-weight: 400; }
.hours .is-today { background: var(--band); font-weight: 700; }
.hours .is-today th[scope="row"]::after { content: "today"; margin-inline-start: 6px; font-size: 11px;
  text-transform: uppercase; letter-spacing: 0.08em; color: var(--red-deep); }
.sr-only-note { color: var(--muted); font-size: 0.85em; }

.dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 20px; margin: 0 0 16px; }
.dl dt { font-family: var(--font-display); font-weight: 700; font-size: 15px; }
.dl dd { margin: 0; }

/* ------------------------------------------------------------ detail / pages */
.page-head { padding-block: 32px 0; text-align: center; }
.page-head--error { padding-block: 56px; }
.page-head .lede { margin-inline: auto; }
.crumbs { font-size: 14px; color: var(--muted); margin-bottom: 8px; }
.crumbs a { color: var(--muted); }

.detail-head { background: var(--band-2); border-bottom: 1px solid var(--band); padding-block: 28px 32px; }
.detail-head__grid { display: grid; gap: 32px; align-items: start; }
@media (min-width: 62rem) { .detail-head__grid { grid-template-columns: 1.5fr 1fr; } }
.detail-status { font-family: var(--font-display); font-weight: 700; font-size: 16px; margin: 0 0 10px; }
.detail-status .dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; display: inline-block; margin-inline-end: 6px; }
.detail-status.is-open { color: #1c6b3f; }
.detail-status.is-shut { color: var(--muted); }
.detail-status__d { color: var(--muted); font-family: var(--font-text); font-weight: 400; }
.addr { font-size: 18px; margin-bottom: 4px; }
.addr__land { color: var(--muted); font-size: 15px; }
.detail-act { list-style: none; display: flex; flex-wrap: wrap; gap: 12px; padding: 0; margin: 16px 0 0; }
.detail-cta { background: var(--panel); color: #fff; padding: 28px 24px; border-top: 5px solid var(--red); }
.detail-cta__h { font-size: 24px; margin-bottom: 8px; color: #fff; }
.detail-cta p { color: #e0e0e0; }
.detail-cta__facts { list-style: none; padding: 0; margin: 0 0 18px; border-top: 1px solid var(--panel-2); }
.detail-cta__facts li { display: flex; justify-content: space-between; gap: 16px; padding: 8px 0;
  border-bottom: 1px solid var(--panel-2); font-size: 15px; }
.detail-cta__facts span { color: #c0c0c0; }
.detail-cta__facts strong { font-family: var(--font-display); }
.detail-cta__note { font-size: 14px; color: #c8c8c8; margin: 12px 0 0; }

.detail-photo { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; object-position: 100% 50%; display: block; }
/* Schematic map: streets, a road crossing, a park and a water patch, so the card reads
   as a map without a tile provider, a network request or an API key. */
.mapcard { position: relative; height: 300px; overflow: hidden; border: 1px solid var(--border); background-color: #f3f0e9; }
.mapcard__grid { position: absolute; inset: -12%;
  background-image:
    linear-gradient(90deg, transparent 0 44%, #ffffff 44% 50%, #ece5d6 50% 51%, transparent 51%),
    linear-gradient(0deg, transparent 0 58%, #ffffff 58% 64%, #ece5d6 64% 65%, transparent 65%),
    radial-gradient(circle at 76% 24%, #cfe0c4 0 16%, transparent 16.5%),
    radial-gradient(circle at 16% 74%, #c9dbe9 0 13%, transparent 13.5%),
    repeating-linear-gradient(0deg, #e6e1d5 0 2px, transparent 2px 46px),
    repeating-linear-gradient(90deg, #e6e1d5 0 2px, transparent 2px 64px);
}
.mapcard__pin {
  position: absolute; left: 50%; top: 44%; width: 24px; height: 24px; margin: 0;
  background: var(--red); border: 2px solid #fff; border-radius: 50% 50% 50% 0;
  transform: translate(-50%, -50%) rotate(-45deg);
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
}
.mapcard__label { position: absolute; inset-inline: 0; bottom: 0; margin: 0; background: #fff;
  border-top: 1px solid var(--border); padding: 8px 12px; font-size: 14px; color: var(--muted); }

.svc-list { list-style: none; margin: 12px 0 0; padding: 0; }
.svc-list li { display: grid; gap: 4px; padding: 14px 0; border-bottom: 1px solid var(--band); }
@media (min-width: 40rem) { .svc-list li { grid-template-columns: 1fr auto; align-items: baseline; } }
.svc-list__n { font-family: var(--font-display); font-weight: 700; font-size: 18px; margin: 0; }
.svc-list__d { font-size: 14px; color: var(--muted); margin: 0; }
.svc-list__p { margin: 0; font-family: var(--font-display); font-weight: 700; color: var(--red-deep); }
.svc-list--off li { opacity: 0.7; }
.note--limit { border-left: 3px solid var(--red); background: var(--band); padding: 10px 14px; color: var(--ink); }

/* -------------------------------------------------------------- join/status */
.join { display: grid; gap: 18px; max-width: 900px; margin-inline: auto; }
@media (min-width: 52rem) { .join { grid-template-columns: 1fr 1fr; } .join .field:nth-child(n+4) { grid-column: 1 / -1; } }
.join__foot { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 16px; align-items: center;
  border-top: 1px solid var(--band); padding-top: 20px; }
.join__note { font-size: 14px; color: var(--muted); max-width: 44ch; margin: 0; }
.demo-tools { margin: 32px auto 0; border: 1px dashed var(--border); padding: 14px 18px; max-width: 900px; }
.demo-tools summary { font-family: var(--font-display); font-weight: 700; font-size: 16px; cursor: pointer; }
.demo-tools__list { margin: 10px 0 0; padding-inline-start: 20px; font-size: 14px; }

.status-head { background: var(--panel); color: #fff; padding-block: 40px; text-align: center; }
.status-head .lede { color: #e0e0e0; margin-inline: auto; }
.status-head .crumbs, .status-head .crumbs a { color: #c8c8c8; }
.status-head .kicker { color: #fff; }
.status-head .btn--ghost { --btn-bg: transparent; --btn-fg: #fff; --btn-bd: #fff; }
.status-head .btn--ghost:hover { background: #fff; color: var(--ink); }
.ref { font-size: 48px; letter-spacing: 0.04em; margin: 0 0 8px; color: #fff; }
.copy-out { font-size: 14px; color: #d0d0d0; margin-inline-start: 10px; }
.stat-row { display: grid; gap: 1px; background: var(--border); border: 1px solid var(--border); }
@media (min-width: 40rem) { .stat-row { grid-template-columns: repeat(3, 1fr); } }
.stat { background: #fff; padding: 24px; text-align: center; }
.stat__k { font-size: 13px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin: 0; }
.stat__v { font-size: 36px; margin: 4px 0; }
.stat__v span { font-size: 20px; }
.stat__n { font-size: 14px; color: var(--muted); margin: 0; }
.status-act { list-style: none; display: flex; flex-wrap: wrap; gap: 12px; padding: 0; margin-top: 16px; justify-content: center; }

.status-head .btn--ghost { --btn-bd: #fff; }
.status-head p { margin-inline: auto; }

/* ------------------------------------------------------------------ motion */
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; }
  .btn, .skip, .row, .fcard img, .media-row img, .svc img { transition: none; }
  [aria-busy="true"] .spinner, form[data-pending] .spinner { animation: none; }
}
html.js .reveal { opacity: 0; transition: opacity 0.45s var(--ease); }
html.js .reveal.is-in { opacity: 1; }

/* Salon detail on narrow screens keeps the primary action in reach. */
@media (max-width: 46rem) {
  .detail-cta { position: sticky; bottom: 0; z-index: 6; padding: 12px 16px;
    box-shadow: 0 -8px 18px rgba(0,0,0,0.25); }
  .detail-cta__h { font-size: 18px; margin: 0 0 8px; }
  .detail-cta > p, .detail-cta__facts { display: none; }
  .detail-cta__note { margin: 8px 0 0; font-size: 12px; }
  .dl { grid-template-columns: 1fr; gap: 2px 0; }
  .dl dd { margin-bottom: 10px; }
  .field--short { max-width: 100%; }
  .join__note { max-width: none; }
}

@media print { .site-head, .site-foot, .promos, .skip, .burger { display: none; } body { background: #fff; } }

/* Red MVP panel on the services page, mirroring the reference's "Ask About The MVP." block. */
.redpanel { background: var(--red); color: #fff; padding-block: 40px; }
.redpanel h2, .redpanel h3 { color: #fff; }
.redpanel p, .redpanel li { color: #fff; }
.redpanel .two-col { align-items: center; }
.redpanel .media-row { padding-block: 0; }
.redpanel img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; display: block; }
.redpanel .ticks li::before { color: #fff; }

/* Small layout utilities, so markup needs no inline style attributes. */
.mt-1 { margin-top: 8px; }
.mt-2 { margin-top: 16px; }
.mt-3 { margin-top: 32px; }
.on-dark { color: #fff; }
/* Full-width red action band on salon detail, matching the reference. */
.redband { background: var(--red); color: #fff; text-align: center; padding-block: 18px; }
.redband__act {
  font-family: var(--font-display); font-size: 26px; font-weight: 700; text-transform: uppercase;
  color: #fff; text-decoration: none; display: inline-flex; align-items: center; gap: 10px;
}
.redband__act:hover { color: #fff; text-decoration: underline; }
.redband__note { margin: 4px 0 0; font-size: 14px; color: #fff; }
.redband__note a { color: #fff; }

/* Mobile header: the inline CTA is replaced by a red bar under the header, which is
   what the reference does and what stops the 375px header from overflowing. */
.headbar { display: none; background: var(--red); }
.headbar a {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 46px; padding: 9px 20px; color: #fff; text-decoration: none;
  font-family: var(--font-display); font-size: 16px; font-weight: 700; text-transform: uppercase;
}
@media (max-width: 60rem) {
  /* Reference: a darker-red check tile on the left and a white button on the right. */
  .headbar { display: flex; align-items: stretch; gap: 10px; padding: 8px 10px 8px 0; }
  .headbar::before {
    content: "\2713"; flex: 0 0 48px; display: grid; place-items: center;
    background: var(--red-deep, #b71c1c); color: #fff; font-size: 22px; font-weight: 700;
  }
  .headbar a { flex: 1; background: #fff; color: var(--red); border-radius: 3px; min-height: 48px; padding: 8px 14px; }
  .head-inner .head-cta { display: none; }
}
@media (max-width: 40rem) {
  .brand img { width: 158px; height: 42px; }
}
/* The reference insets its search input by 40px to leave room for a magnifier.
   Without the icon that inset just looks like a gap. */
input[type="search"] {
  background-image: url("/img/search.svg");
  background-repeat: no-repeat;
  background-position: 14px center;
  background-size: 16px 16px;
}

/* DorkClips wordmark: plain version in the header, tagline version in the footer. */
.foot-logo { width: 240px; height: auto; display: block; margin-bottom: 14px; }

/* ---------------------------------------------------------------- polish --- */
.socials a svg, .socials span svg { width: 17px; height: 17px; display: block; }

/* Accordion FAQ, matching the reference's services-page pattern. */
.faq { max-width: 880px; margin-inline: auto; border-top: 1px solid var(--band); }
.faq details { border-bottom: 1px solid var(--band); }
.faq summary {
  position: relative; cursor: pointer; list-style: none; padding: 16px 36px 16px 0;
  font-family: var(--font-display); font-size: 20px; font-weight: 700; color: var(--ink);
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
  content: "+"; position: absolute; right: 6px; top: 12px;
  font-family: var(--font-display); font-size: 26px; font-weight: 700; color: var(--red);
}
.faq details[open] summary::after { content: "\2013"; }
.faq details[open] summary { color: var(--red-deep); }
.faq details p { margin: 0; padding: 0 44px 18px 0; color: var(--muted); }

/* Hover feedback. Transform-free, so nothing needs an extra clipping wrapper. */
.row { transition: border-color 0.2s var(--ease), box-shadow 0.2s var(--ease); }
.row:hover { border-color: var(--border); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07); }
.fcard img, .media-row img, .svc img { transition: filter 0.25s var(--ease); }
.fcard:hover img, .media-row:hover img, .svc:hover img { filter: brightness(1.05) saturate(1.03); }
.promo, .svc { transition: background-color 0.2s var(--ease); }
/* This must be the LAST word on transitions. The earlier reduce block sits above the
   reveal rules and the polish block, so on its own it was overridden by both: same
   specificity, and source order decides. The verifier checks .row, which is a reveal
   target, so a stray transition here fails the check. */
@media (prefers-reduced-motion: reduce) {
  html.js .reveal, .reveal { opacity: 1; transition: none; }
  .btn, .skip, .row, .promo, .svc,
  .fcard img, .media-row img, .svc img { transition: none; }
}

/* ----------------------------------------------------------------- location map */
.map-embed { display: block; width: 100%; height: 320px; border: 1px solid var(--band); border-radius: 4px; background: var(--band); }
.map-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; margin: 12px 0; }
@media (max-width: 40rem) { .map-embed { height: 260px; } }

/* Red star callout for the salons that offer happy endings. */
.row__star { margin: 6px 0 4px; font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--red-deep, #b71c1c); }
.row__star span { color: var(--red); font-size: 20px; margin-right: 4px; vertical-align: -1px; }
