/* ─────────────────────────────────────────────────────────────
   bowlingscoring.se — design tokens + komposition
   2026-stack: oklch, light-dark, @starting-style, container queries,
   view transitions, native popover. Inga ramverk, inga build-steg.
   ───────────────────────────────────────────────────────────── */

/* A11Y-utilities — visuellt dolt men kvar för skärmläsare, samt
   skip-link som visas vid tangentbordsfokus (WCAG 2.4.1, EN 301 549). */
.bs-sr-only {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0, 0, 0, 0);
  white-space: nowrap; border: 0;
}
.bs-skip-link {
  position: fixed;
  top: 0; left: 50%;
  transform: translate(-50%, -120%);
  z-index: 9999;
  padding: 0.7rem 1.1rem;
  background: oklch(0.22 0.028 270);
  color: oklch(0.98 0 0);
  border-radius: 0 0 12px 12px;
  font-weight: 700;
  text-decoration: none;
  box-shadow: 0 6px 18px oklch(0 0 0 / .35);
  transition: transform 180ms ease;
}
.bs-skip-link:focus,
.bs-skip-link:focus-visible {
  transform: translate(-50%, 0);
  outline: 2px solid oklch(0.78 0.18 195);
  outline-offset: 2px;
}

/* Global tangentbordsfokus — alltid synlig, lite generös offset så
   den syns på alla kontroller oavsett bakgrund. (WCAG 2.4.7) */
:focus-visible {
  outline: 2px solid oklch(0.78 0.18 195);
  outline-offset: 3px;
  border-radius: 4px;
}
/* Mus-klick döljer ringen (browsers gör :focus-visible bara vid kbd) */
:focus:not(:focus-visible) { outline: none; }
/* Main-region får inte synlig outline trots tabindex="-1" */
main[tabindex="-1"]:focus { outline: none; }

:root {
  color-scheme: dark light;

  /* Bas-palett i oklch — uppfattas mer enhetligt än hsl */
  --bs-bg:           light-dark(oklch(0.985 0.005 250), oklch(0.14 0.022 270));
  --bs-bg-elev:      light-dark(oklch(1    0     0  ), oklch(0.19 0.025 270));
  --bs-bg-card:      light-dark(oklch(1    0     0  ), oklch(0.22 0.028 270));
  --bs-bg-card-hover:light-dark(oklch(0.98 0.005 250), oklch(0.26 0.030 270));
  --bs-bg-pill:      light-dark(oklch(0.96 0.008 250), oklch(0.28 0.030 270));

  --bs-border:       light-dark(oklch(0.92 0.010 250), oklch(0.30 0.020 270));
  --bs-border-soft:  light-dark(oklch(0.95 0.008 250), oklch(0.25 0.020 270));

  --bs-text:         light-dark(oklch(0.20 0.020 270), oklch(0.96 0.008 250));
  --bs-text-soft:    light-dark(oklch(0.42 0.020 270), oklch(0.78 0.018 250));
  --bs-text-muted:   light-dark(oklch(0.50 0.015 270), oklch(0.68 0.018 250));

  /* Bowlingpin-accent (varm orange→röd) */
  --bs-accent:       oklch(0.72 0.20  40);
  --bs-accent-strong:oklch(0.66 0.22  30);
  --bs-accent-soft:  oklch(0.72 0.20  40 / 0.18);
  --bs-accent-grad:  linear-gradient(135deg, oklch(0.78 0.18 60), oklch(0.65 0.22 25));

  /* Status */
  --bs-live:         oklch(0.78 0.20 150);
  --bs-live-glow:    oklch(0.78 0.22 150 / 0.45);
  --bs-open:         oklch(0.80 0.18 150);
  --bs-closed:       light-dark(oklch(0.65 0.020 270), oklch(0.55 0.020 270));
  --bs-offline:      light-dark(oklch(0.70 0.020 270), oklch(0.50 0.020 270));

  /* Mått */
  --bs-radius-sm: 10px;
  --bs-radius:    18px;
  --bs-radius-lg: 26px;
  --bs-radius-xl: 32px;

  --bs-shadow:        0 1px 2px oklch(0 0 0 / .04), 0 8px 24px oklch(0 0 0 / .06);
  --bs-shadow-hover:  0 4px 14px oklch(0 0 0 / .10), 0 24px 64px oklch(0 0 0 / .18);
  --bs-shadow-glow:   0 0 0 1px var(--bs-border), 0 0 60px var(--bs-accent-soft);

  --bs-step-1: clamp(.78rem, .76rem + .1vw, .85rem);
  --bs-step-2: clamp(.92rem, .9rem  + .15vw, 1rem);
  --bs-step-3: clamp(1.05rem,1rem    + .3vw, 1.18rem);
  --bs-step-4: clamp(1.5rem, 1.3rem  + .8vw, 2rem);
  --bs-step-5: clamp(2.3rem, 1.8rem  + 2.5vw, 3.6rem);
  --bs-step-hero: clamp(2.7rem, 2rem + 4.5vw, 5.6rem);

  --bs-font:      'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --bs-font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, monospace;

  --bs-page-pad: clamp(1rem, 3vw, 2.5rem);
}

/* Tema-override om body får data-theme satt (vi kör dark som default men
   tillåter system) */
[data-theme="dark"] { color-scheme: dark; }
[data-theme="light"] { color-scheme: light; }

/* ─────────────────────────────────────────────────────────────
   Reset + bas
   ───────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body.bs {
  font-family: var(--bs-font);
  color: var(--bs-text);
  background: var(--bs-bg);
  font-size: var(--bs-step-2);
  line-height: 1.55;
  min-height: 100dvh;
  position: relative;
  overflow-x: clip;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; }
svg { display: block; }
[hidden] { display: none !important; }

::selection { background: var(--bs-accent); color: oklch(0.98 0 0); }

/* ─────────────────────────────────────────────────────────────
   Aurora (mjuk bakgrundsglöd, scroll-driven)
   PERFORMANCE: 80px blur + animering över hela viewporten är extremt
   GPU-tungt på mobil (faller ofta till mjukvaru-rendering). Vi gör
   därför en hård degradering på små skärmar: en enda statisk orb,
   mindre blur, ingen animation. På desktop får full upplevelsen.
   ───────────────────────────────────────────────────────────── */
.bs-aurora {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  /* Compositor-isolering — håller orbs ur huvud-renderingsträdet. */
  contain: strict;
}
.bs-aurora__orb {
  position: absolute;
  width: 60vmax;
  height: 60vmax;
  border-radius: 50%;
  filter: blur(80px);
  opacity: .45;
  mix-blend-mode: screen;
  will-change: transform;
  animation: bs-drift 28s ease-in-out infinite alternate;
  /* Tvinga compositor-layer, undvik re-layout vid animation. */
  transform: translateZ(0);
}
@media (prefers-color-scheme: light) {
  .bs-aurora__orb { opacity: .35; mix-blend-mode: multiply; }
}
.bs-aurora__orb--1 { top: -20vmax; left: -10vmax; background: radial-gradient(circle at 30% 30%, oklch(0.72 0.20 30 / .8), transparent 60%); }
.bs-aurora__orb--2 { top: 20vmax; right: -25vmax; background: radial-gradient(circle at 50% 50%, oklch(0.68 0.18 290 / .65), transparent 60%); animation-delay: -10s; }
.bs-aurora__orb--3 { bottom: -25vmax; left: 30vmax; background: radial-gradient(circle at 50% 50%, oklch(0.74 0.18 200 / .55), transparent 60%); animation-delay: -18s; }
@keyframes bs-drift {
  0%   { transform: translate3d(0, 0, 0) scale(1); }
  50%  { transform: translate3d(4vw, -3vh, 0) scale(1.08); }
  100% { transform: translate3d(-3vw, 4vh, 0) scale(.95); }
}

/* MOBIL: 80px blur dödar GPU:n. Behåll EN orb, mindre blur, statisk. */
@media (max-width: 768px) {
  .bs-aurora__orb {
    filter: blur(40px);
    animation: none;
    opacity: .35;
  }
  .bs-aurora__orb--2,
  .bs-aurora__orb--3 { display: none; }

  /* backdrop-filter är notoriskt långsam på iOS Safari + LowEnd Android.
     Ersätt med opak bakgrund på dekorativa element. Modal/dialog behåller
     blur (kritisk UI, sker sällan). */
  .bs-nav {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    background: color-mix(in oklch, var(--bs-bg) 92%, transparent);
  }
  .bs-hall__live,
  .bs-hero__stat {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }
}

/* prefers-reduced-motion: ingen drift, mindre blur (förbättrar även
   accessibility + sparar batteri). */
@media (prefers-reduced-motion: reduce) {
  .bs-aurora__orb {
    animation: none;
    filter: blur(60px);
  }
}

/* ─────────────────────────────────────────────────────────────
   Nav
   ───────────────────────────────────────────────────────────── */
.bs-nav {
  position: sticky;
  top: 0;
  z-index: 30;
  backdrop-filter: blur(18px) saturate(180%);
  -webkit-backdrop-filter: blur(18px) saturate(180%);
  background: color-mix(in oklch, var(--bs-bg) 70%, transparent);
  border-bottom: 1px solid var(--bs-border-soft);
}
.bs-nav__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  max-width: 1320px;
  margin: 0 auto;
  padding: .9rem var(--bs-page-pad);
}
.bs-brand {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  font-weight: 700;
  letter-spacing: -.02em;
  font-size: var(--bs-step-3);
}
.bs-brand__mark { display: inline-flex; }
.bs-brand__wordmark { display: inline-flex; align-items: baseline; }
.bs-brand__accent {
  background: var(--bs-accent-grad);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.bs-brand__tld { color: var(--bs-text-muted); font-weight: 500; }

.bs-nav__meta { display: inline-flex; align-items: center; gap: .75rem; }
.bs-nav__pulse {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .45rem .85rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  border: 1px solid var(--bs-border);
  font-size: var(--bs-step-1);
  color: var(--bs-text-soft);
  font-feature-settings: "tnum";
  transition: all .4s ease;
}
.bs-nav__pulse[data-state="live"] {
  background: color-mix(in oklch, var(--bs-live) 14%, transparent);
  border-color: color-mix(in oklch, var(--bs-live) 35%, transparent);
  color: var(--bs-text);
}
.bs-nav__pulse-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--bs-offline);
}
.bs-nav__pulse[data-state="live"] .bs-nav__pulse-dot {
  background: var(--bs-live);
  box-shadow: 0 0 0 0 var(--bs-live-glow);
  animation: bs-pulse 1.8s ease-out infinite;
}
@keyframes bs-pulse {
  0%   { box-shadow: 0 0 0 0 var(--bs-live-glow); }
  70%  { box-shadow: 0 0 0 10px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* ─────────────────────────────────────────────────────────────
   Layout-shell
   ───────────────────────────────────────────────────────────── */
.bs-main {
  position: relative;
  z-index: 1;
  padding: 0 0 clamp(3rem, 6vw, 5rem);
}
/* Identisk bound-zon — exakt samma vänsterkant för alla sektioner */
.bs-main > :not(.bs-hero) {
  max-width: 1320px;
  margin-left: auto;
  margin-right: auto;
  padding-left: var(--bs-page-pad);
  padding-right: var(--bs-page-pad);
}

/* ─────────────────────────────────────────────────────────────
   Hero — full-bleed bakgrund, content linjerat med övrigt
   ───────────────────────────────────────────────────────────── */
.bs-hero {
  position: relative;
  width: 100%;
  margin: 0;
  padding-top: clamp(1.75rem, 4vw, 3.25rem);
  padding-bottom: clamp(1.75rem, 4vw, 3.25rem);
  padding-left: 0;
  padding-right: 0;
  border: 0;
  border-bottom: 1px solid var(--bs-border-soft);
  border-radius: 0;
  background:
    radial-gradient(ellipse at 80% 10%, var(--bs-accent-soft), transparent 55%),
    linear-gradient(180deg, var(--bs-bg-elev), color-mix(in oklch, var(--bs-bg) 92%, transparent));
  overflow: hidden;
  isolation: isolate;
}

.bs-hero__lanes {
  position: absolute;
  inset: 0;
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: clamp(.5rem, 1.5vw, 1.2rem);
  padding: 0 clamp(1rem, 3vw, 2.5rem);
  z-index: -1;
  opacity: .25;
  pointer-events: none;
  mask-image: linear-gradient(180deg, transparent 0%, black 35%, black 75%, transparent 100%);
}
.bs-hero__lane {
  position: relative;
  background: linear-gradient(180deg,
    transparent 0%,
    color-mix(in oklch, var(--bs-accent) 35%, transparent) 70%,
    transparent 100%);
  border-radius: 999px;
  transform: translateY(20%);
  animation: bs-lane-rise 6s cubic-bezier(.4, 0, .2, 1) infinite;
  animation-delay: calc(var(--i, 0) * -.7s);
}
.bs-hero__lane:nth-child(1) { --i: 1; }
.bs-hero__lane:nth-child(2) { --i: 3; }
.bs-hero__lane:nth-child(3) { --i: 5; }
.bs-hero__lane:nth-child(4) { --i: 2; }
.bs-hero__lane:nth-child(5) { --i: 7; }
.bs-hero__lane:nth-child(6) { --i: 4; }
.bs-hero__lane:nth-child(7) { --i: 6; }
.bs-hero__lane:nth-child(8) { --i: 0; }
@keyframes bs-lane-rise {
  0%   { opacity: 0; transform: translateY(40%); }
  35%  { opacity: 1; }
  100% { opacity: 0; transform: translateY(-30%); }
}
@media (prefers-reduced-motion: reduce) {
  .bs-hero__lane { animation: none; opacity: .35; }
  .bs-aurora__orb { animation: none; }
}

.bs-hero__inner {
  position: relative;
  z-index: 1;
  max-width: 1320px;
  margin: 0 auto;
  padding-left: var(--bs-page-pad);
  padding-right: var(--bs-page-pad);
}
.bs-hero__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  margin: 0 0 .9rem;
  padding: .3rem .75rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  border: 1px solid var(--bs-border);
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--bs-text-soft);
}
.bs-hero__title {
  margin: 0 0 .85rem;
  font-size: clamp(2rem, 1.6rem + 2.5vw, 3.4rem);
  line-height: 1;
  letter-spacing: -.04em;
  font-weight: 800;
  max-width: 22ch;
}
.bs-hero__title-accent {
  background: var(--bs-accent-grad);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  font-style: italic;
  font-weight: 900;
}
.bs-hero__lede {
  margin: 0 0 1.5rem;
  font-size: var(--bs-step-2);
  color: var(--bs-text-soft);
  max-width: 52ch;
}

.bs-hero__stats {
  display: flex;
  flex-wrap: wrap;
  gap: .6rem .9rem;
  margin: 0 0 1.25rem;
}
.bs-hero__stat {
  margin: 0;
  padding: .65rem 1rem;
  background: color-mix(in oklch, var(--bs-bg-card) 60%, transparent);
  border: 1px solid var(--bs-border-soft);
  border-radius: var(--bs-radius);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  min-width: 110px;
}
.bs-hero__stat dt {
  font-size: .68rem;
  color: var(--bs-text-muted);
  text-transform: uppercase;
  letter-spacing: .07em;
  font-weight: 600;
  margin: 0 0 .2rem;
}
.bs-hero__stat dd {
  margin: 0;
  display: flex;
  align-items: baseline;
  gap: .3rem;
}
.bs-hero__stat-value {
  font-family: var(--bs-font-mono);
  font-size: 1.85rem;
  font-weight: 700;
  line-height: 1;
  color: var(--bs-text);
  font-variant-numeric: tabular-nums;
  letter-spacing: -.03em;
  transition: color .3s ease;
}
/* XL-variant för "headline-siffran" (Strikear sedan vi öppnade) — den
   ska sticka ut visuellt så besökare faktiskt vill stoppa och läsa. */
.bs-hero__stat-value--xl {
  font-size: clamp(2.1rem, 1.5rem + 2.5vw, 3.2rem);
  background: var(--bs-accent-grad);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  letter-spacing: -.04em;
}
.bs-hero__stat:has([data-stat="halls_live"][data-target]:not([data-target="0"])) .bs-hero__stat-value,
.bs-hero__stat:has([data-stat="lanes_in_use"][data-target]:not([data-target="0"])) .bs-hero__stat-value {
  color: var(--bs-live);
}
/* Feature-stat: ger lite mer luft åt headline-kortet. */
.bs-hero__stat--feature {
  padding: .85rem 1.15rem .9rem;
  background: color-mix(in oklch, var(--bs-bg-card) 78%, transparent);
  border-color: color-mix(in oklch, var(--bs-accent) 25%, var(--bs-border));
}
/* Live-stat: subtil färgmarkering + pulserande prick. */
.bs-hero__stat--live {
  border-color: color-mix(in oklch, var(--bs-live) 40%, transparent);
  background: color-mix(in oklch, var(--bs-live) 6%, var(--bs-bg-card));
}
.bs-hero__stat--live dt {
  color: color-mix(in oklch, var(--bs-live) 70%, var(--bs-text));
  display: inline-flex;
  align-items: center;
  gap: .4rem;
}
.bs-hero__stat--live .bs-hero__stat-value {
  color: var(--bs-live);
}
.bs-hero__stat-pulse {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bs-live);
  box-shadow: 0 0 0 0 var(--bs-live-glow);
  animation: bs-pulse 1.8s ease-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  .bs-hero__stat-pulse { animation: none; }
}
.bs-hero__stat-of {
  font-size: .85rem;
  color: var(--bs-text-muted);
  font-feature-settings: "tnum";
}

.bs-hero__cta {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .7rem 1.2rem;
  border-radius: 999px;
  background: var(--bs-accent-grad);
  color: oklch(0.98 0 0);
  font-weight: 600;
  font-size: var(--bs-step-2);
  box-shadow: 0 10px 30px color-mix(in oklch, var(--bs-accent) 35%, transparent);
  transition: transform .2s ease, box-shadow .25s ease;
}
.bs-hero__cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 16px 40px color-mix(in oklch, var(--bs-accent) 50%, transparent);
}
.bs-hero__cta svg {
  transition: transform .25s ease;
}
.bs-hero__cta:hover svg { transform: translateY(3px); }

/* ─────────────────────────────────────────────────────────────
   Sticky filter
   ───────────────────────────────────────────────────────────── */
.bs-filters {
  position: relative;
  z-index: 5;
  margin: clamp(1.5rem, 3vw, 2.5rem) 0 1.25rem;
}
.bs-filters__inner {
  display: flex;
  flex-wrap: wrap;
  gap: .75rem;
  align-items: center;
  padding: .75rem .9rem;
  background: color-mix(in oklch, var(--bs-bg) 78%, transparent);
  backdrop-filter: blur(16px) saturate(160%);
  -webkit-backdrop-filter: blur(16px) saturate(160%);
  border: 1px solid var(--bs-border-soft);
  border-radius: var(--bs-radius-lg);
  box-shadow: var(--bs-shadow);
}

.bs-search {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  flex: 1 1 240px;
  min-width: 0;
  padding: .55rem .85rem;
  background: var(--bs-bg-pill);
  border-radius: 999px;
  border: 1px solid transparent;
  color: var(--bs-text-soft);
  transition: border-color .2s ease, background .2s ease;
}
.bs-search:focus-within {
  border-color: var(--bs-accent);
  background: var(--bs-bg-card);
  color: var(--bs-text);
}
.bs-search input {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: 0;
  outline: none;
  color: var(--bs-text);
  font-size: var(--bs-step-2);
  padding: .1rem;
}

.bs-filters__group {
  display: inline-flex;
  flex-wrap: wrap;
  gap: .4rem;
  /* Nollställa default fieldset-styling — vi har egen layout */
  border: 0;
  margin: 0;
  padding: 0;
  min-inline-size: 0;
}

.bs-filters__cities {
  display: flex;
  gap: .4rem;
  flex: 1 1 100%;
  overflow-x: auto;
  scrollbar-width: thin;
  padding: .1rem 0 .35rem;
  scroll-snap-type: x proximity;
  /* Nollställa default fieldset-styling */
  border: 0;
  margin: 0;
  min-inline-size: 0;
}
.bs-filters__cities::-webkit-scrollbar { height: 6px; }
.bs-filters__cities::-webkit-scrollbar-thumb { background: var(--bs-border); border-radius: 3px; }

.bs-chip {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .5rem .9rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  border: 1px solid transparent;
  color: var(--bs-text-soft);
  font-size: var(--bs-step-1);
  font-weight: 600;
  white-space: nowrap;
  transition: all .18s ease;
  scroll-snap-align: start;
}
.bs-chip:hover {
  color: var(--bs-text);
  background: var(--bs-bg-card-hover);
}
.bs-chip[aria-pressed="true"], .bs-chip.is-active {
  background: var(--bs-text);
  color: var(--bs-bg);
  border-color: var(--bs-text);
}
.bs-chip__dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: currentColor;
  opacity: .6;
}
.bs-chip__dot--live   { background: var(--bs-live); opacity: 1; }
.bs-chip__dot--open   { background: var(--bs-open); opacity: 1; }
.bs-chip--toggle[aria-pressed="true"] .bs-chip__dot--live,
.bs-chip--toggle[aria-pressed="true"] .bs-chip__dot--open { box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 22%, transparent); }

/* ─────────────────────────────────────────────────────────────
   Bento-grid med hallar
   ───────────────────────────────────────────────────────────── */
.bs-grid-section { container-type: inline-size; }

.bs-grid {
  display: grid;
  gap: clamp(.9rem, 2vw, 1.4rem);
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
}
@container (min-width: 760px) {
  .bs-card--featured { grid-column: span 2; }
}

.bs-empty {
  margin: 3rem auto;
  text-align: center;
  color: var(--bs-text-soft);
  max-width: 48ch;
}
.bs-empty h2 {
  font-size: var(--bs-step-4);
  margin: 0 0 .5rem;
  color: var(--bs-text);
}
.bs-empty a { color: var(--bs-accent); text-decoration: underline; text-decoration-thickness: 1.5px; text-underline-offset: 3px; }

.bs-link {
  background: none;
  border: 0;
  color: var(--bs-accent);
  text-decoration: underline;
  font-weight: 600;
  padding: 0 .15rem;
}

/* ─────────────────────────────────────────────────────────────
   Hallkort
   ───────────────────────────────────────────────────────────── */
.bs-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 1.4rem 1.4rem 1.1rem;
  background: var(--bs-bg-card);
  border: 1px solid var(--bs-border-soft);
  border-radius: var(--bs-radius-lg);
  overflow: hidden;
  isolation: isolate;
  box-shadow: var(--bs-shadow);
  transition: transform .25s ease, box-shadow .3s ease, border-color .25s ease;
  container-type: inline-size;
}

/* Subtila glöd-kanter på live-kort */
.bs-card--live::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(135deg,
    color-mix(in oklch, var(--bs-live) 60%, transparent),
    color-mix(in oklch, var(--bs-accent) 30%, transparent));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}

.bs-card:hover {
  transform: translateY(-4px);
  border-color: color-mix(in oklch, var(--bs-accent) 30%, var(--bs-border));
  box-shadow: var(--bs-shadow-hover);
}
.bs-card:focus-within {
  outline: 2px solid var(--bs-accent);
  outline-offset: 2px;
}

/* Hela kortet klickbart: overlay-länk täcker hela kortet, content
   ligger visuellt ovanpå men låter klick passera igenom via
   pointer-events. Interaktiva element (a, button) får sin egen
   pointer-events tillbaka så de fungerar normalt. */
.bs-card__link {
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: inherit;
}
.bs-card__sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

.bs-card > :not(.bs-card__link) {
  position: relative;
  z-index: 2;
  pointer-events: none;
}
.bs-card a,
.bs-card button,
.bs-card input,
.bs-card [tabindex] {
  pointer-events: auto;
}

/* Head ─────────────────────────────────────── */
.bs-card__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: .9rem;
}
.bs-card__identity {
  display: flex;
  align-items: center;
  gap: .85rem;
  min-width: 0;
}
.bs-card__avatar {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  border-radius: 14px;
  color: oklch(0.98 0 0);
  font-weight: 800;
  font-size: 1.4rem;
  letter-spacing: -.02em;
  text-shadow: 0 1px 2px oklch(0 0 0 / .25);
  box-shadow: inset 0 1px 0 oklch(1 0 0 / .25), 0 6px 16px oklch(0 0 0 / .15);
  overflow: hidden;
}
/* Logo-läge:
   - Auto-tuned bakgrund baserat på logotypens medel-luminans (beräknat
     vid upload av HallMediaService::computeDominantLuminance):
       - mörk logo → ljus bakgrund (--logo-light)
       - ljus logo → mörk bakgrund (--logo-dark)
   - Logon behåller alla sina egna färger och detaljer — ingen filter. */
.bs-card__avatar--logo img {
  width: 84%;
  height: 84%;
  object-fit: contain;
  pointer-events: none;
}
.bs-card__avatar--logo-light {
  background: oklch(0.97 0.005 260) !important;
  box-shadow:
    inset 0 0 0 1px oklch(0 0 0 / .08),
    0 6px 16px oklch(0 0 0 / .22);
}
.bs-card__avatar--logo-dark {
  background: oklch(0.18 0.01 260) !important;
  box-shadow:
    inset 0 0 0 1px oklch(1 0 0 / .12),
    0 6px 16px oklch(0 0 0 / .35);
}
.bs-card__title-wrap { min-width: 0; }
.bs-card__title {
  margin: 0;
  font-size: var(--bs-step-4);
  font-weight: 700;
  letter-spacing: -.02em;
  line-height: 1.15;
  color: var(--bs-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bs-card__city {
  margin: .15rem 0 0;
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  font-size: var(--bs-step-1);
  color: var(--bs-text-muted);
}

/* Status-badge ─────────────────────────────── */
.bs-status {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .35rem .7rem;
  border-radius: 999px;
  font-size: .78rem;
  font-weight: 600;
  background: var(--bs-bg-pill);
  border: 1px solid var(--bs-border);
  color: var(--bs-text-muted);
  letter-spacing: .01em;
}
.bs-status[data-state="live"] {
  background: color-mix(in oklch, var(--bs-live) 18%, transparent);
  border-color: color-mix(in oklch, var(--bs-live) 40%, transparent);
  color: color-mix(in oklch, var(--bs-live) 75%, var(--bs-text));
}
.bs-status[data-state="offline"] { opacity: .7; }
.bs-status__dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--bs-offline);
}
.bs-status[data-state="idle"] .bs-status__dot { background: var(--bs-text-muted); }
.bs-status[data-state="live"] .bs-status__dot {
  background: var(--bs-live);
  box-shadow: 0 0 0 0 var(--bs-live-glow);
  animation: bs-pulse 1.6s ease-out infinite;
}

/* Live-sektion ─────────────────────────────── */
.bs-card__live {
  padding: .9rem 1rem;
  background: color-mix(in oklch, var(--bs-live) 8%, var(--bs-bg-elev));
  border: 1px solid color-mix(in oklch, var(--bs-live) 25%, transparent);
  border-radius: var(--bs-radius);
}
.bs-card__live-row {
  display: flex;
  align-items: baseline;
  gap: .55rem;
  margin-bottom: .55rem;
}
.bs-card__live-num {
  font-family: var(--bs-font-mono);
  font-size: 1.85rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--bs-live);
  letter-spacing: -.03em;
  line-height: 1;
}
.bs-card__live-label {
  font-size: var(--bs-step-1);
  color: var(--bs-text-soft);
}
.bs-card__meter {
  position: relative;
  height: 6px;
  border-radius: 999px;
  background: color-mix(in oklch, var(--bs-live) 12%, transparent);
  overflow: hidden;
}
.bs-card__meter-fill {
  display: block;
  height: 100%;
  width: var(--bs-meter, 0%);
  background: linear-gradient(90deg, var(--bs-live), oklch(0.8 0.18 100));
  border-radius: inherit;
  transition: width .8s cubic-bezier(.4, 0, .2, 1);
  box-shadow: 0 0 12px var(--bs-live-glow);
}

/* Öppen-status ─────────────────────────────── */
.bs-card__open {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .55rem .85rem;
  font-size: var(--bs-step-1);
}
.bs-card__open-pill {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .35rem .7rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  font-weight: 600;
  color: var(--bs-text-soft);
  font-size: .82rem;
}
.bs-card__open-pill--open {
  background: color-mix(in oklch, var(--bs-open) 18%, transparent);
  color: color-mix(in oklch, var(--bs-open) 75%, var(--bs-text));
}
.bs-card__open-pill--closed {
  color: var(--bs-text-muted);
}
.bs-card__open-bullet {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--bs-text-muted);
}
.bs-card__open-pill--open .bs-card__open-bullet { background: var(--bs-open); box-shadow: 0 0 8px var(--bs-open); }
.bs-card__open-sub { font-weight: 500; color: inherit; opacity: .9; }
.bs-card__open-today {
  margin: 0;
  font-size: .8rem;
  color: var(--bs-text-muted);
  font-feature-settings: "tnum";
  font-family: var(--bs-font-mono);
}

/* Meta ─────────────────────────────────────── */
.bs-card__meta {
  display: flex;
  flex-direction: column;
  gap: .4rem;
  padding-top: .15rem;
  font-size: var(--bs-step-1);
  color: var(--bs-text-soft);
}
.bs-card__meta-row {
  margin: 0;
  display: inline-flex;
  align-items: flex-start;
  gap: .45rem;
}
.bs-card__meta-row svg { flex: 0 0 auto; margin-top: 2px; color: var(--bs-text-muted); }

.bs-card__contact {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: .4rem .9rem;
  padding-top: .15rem;
}
.bs-card__contact-link {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  font-size: .82rem;
  color: var(--bs-text-soft);
  border-bottom: 1px dashed transparent;
  padding: .15rem 0;
  transition: color .15s ease, border-color .15s ease;
}
.bs-card__contact-link:hover {
  color: var(--bs-accent);
  border-color: color-mix(in oklch, var(--bs-accent) 50%, transparent);
}
.bs-card__contact-link svg { color: var(--bs-text-muted); }

/* Foot CTA ─────────────────────────────────── */
.bs-card__foot {
  margin-top: auto;
  padding-top: .85rem;
  border-top: 1px solid var(--bs-border-soft);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
}
.bs-card__cta-text {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  font-size: var(--bs-step-2);
  font-weight: 600;
  color: var(--bs-text);
}
.bs-card__cta-arrow {
  margin-right: auto;
  margin-left: .15rem;
  color: var(--bs-text-muted);
  transition: transform .25s ease, color .25s ease;
}
.bs-card:hover .bs-card__cta-arrow {
  color: var(--bs-accent);
  transform: translateX(4px);
}
.bs-card__book {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .55rem 1rem;
  border-radius: 999px;
  background: var(--bs-text);
  color: var(--bs-bg);
  font-size: var(--bs-step-1);
  font-weight: 600;
  transition: background .2s ease, transform .2s ease;
}
.bs-card__book:hover {
  background: var(--bs-accent);
  color: oklch(0.98 0 0);
  transform: translateY(-1px);
}

/* Filter-state hiding */
.bs-card[hidden] { display: none !important; }

/* Container responsive: kompaktare kort när containern smal */
@container (max-width: 380px) {
  .bs-card { padding: 1.1rem 1.1rem .95rem; }
  .bs-card__title { font-size: var(--bs-step-3); }
  .bs-card__avatar { width: 42px; height: 42px; font-size: 1.2rem; }
  .bs-card__live-num { font-size: 1.55rem; }
}

/* ─────────────────────────────────────────────────────────────
   Entry-animations: @starting-style för smooth first paint
   ───────────────────────────────────────────────────────────── */
@supports (transition-behavior: allow-discrete) {
  .bs-card {
    transition: transform .25s ease, box-shadow .3s ease, border-color .25s ease,
                opacity .5s ease, translate .5s ease;
  }
  @starting-style {
    .bs-card { opacity: 0; translate: 0 16px; }
  }
  @starting-style {
    .bs-hero__title { opacity: 0; translate: 0 -20px; }
    .bs-hero__lede { opacity: 0; translate: 0 12px; }
    .bs-hero__stats { opacity: 0; translate: 0 12px; }
    .bs-hero__cta { opacity: 0; translate: 0 8px; }
  }
  .bs-hero__title, .bs-hero__lede, .bs-hero__stats, .bs-hero__cta {
    transition: opacity .6s ease, translate .6s cubic-bezier(.34,1.36,.64,1);
  }
  .bs-hero__lede  { transition-delay: .08s; }
  .bs-hero__stats { transition-delay: .14s; }
  .bs-hero__cta   { transition-delay: .2s; }
}

/* ─────────────────────────────────────────────────────────────
   View-transitions för kort → scoring
   ───────────────────────────────────────────────────────────── */
@view-transition { navigation: auto; }
::view-transition-old(root), ::view-transition-new(root) {
  animation-duration: .35s;
}

/* ─────────────────────────────────────────────────────────────
   Subdomän-scoring (<slug>.bowlingscoring.se)
   ───────────────────────────────────────────────────────────── */

/* Override: hall-scoring.css + tournament-public.css använder ljusa
   --ko-tokens. Vi sätter om dem på subdomäner så all scoring-rendering
   följer mörkt tema utan att vi behöver target:a varje regel. */
body.bs-scoring.hall-scoring {
  --ko-bg: transparent;
  --ko-surface: var(--bs-bg-card);
  --ko-text: oklch(0.96 0.008 250);
  --ko-muted: oklch(0.62 0.018 250);
  --ko-line: var(--bs-border-soft);
  background: var(--bs-bg) !important;
  color: var(--bs-text) !important;
  font-family: var(--bs-font) !important;
}

body.bs-scoring .hall-scoring__main {
  max-width: 1320px;
  margin: 0 auto;
  padding: clamp(1rem, 3vw, 2rem) var(--bs-page-pad) clamp(2.5rem, 5vw, 4rem);
  position: relative;
  z-index: 1;
}

/* ÅTERSTÄLL .ko-live-frames bakgrundsstilar — JS-koden lägger denna
   klass på lanes-containern (jämte .hall-scoring__lanes) för bakåt-
   kompatibilitet med tournament-public.css. Den filen sätter
   `padding: 1rem 1.1rem; margin: 1.25rem 0 1.5rem; background; border;
   border-radius` på `.ko-live-frames` — vilket på subdomänen gjorde att
   lane-griden sköts in 17.6 px från toolbar-kanten OCH fick en osynlig
   ljus-tema-bakgrund. Nolla allt så lanes-containern blir transparent
   och flush med toolbar-rutan. */
body.bs-scoring .hall-scoring__lanes.ko-live-frames,
body.bs-scoring .hall-scoring__lanes {
  padding: 0;
  margin: 0;
  background: transparent;
  border: none;
  border-radius: 0;
  gap: 1rem;
}

/* Bana-grupp: visuellt tydligt kort runt varje bana. Border-radius
   matchar POÄNGKORT-toolbarn (samma --bs-radius) så de två primära
   ytorna på sidan känns visuellt konsekventa. */
body.bs-scoring .hall-scoring__lane {
  background: color-mix(in oklch, var(--bs-bg-elev) 80%, transparent);
  border: 1px solid var(--bs-border-soft);
  border-radius: var(--bs-radius);
  padding: 1rem 1.15rem 1.2rem;
}
body.bs-scoring .hall-scoring__lane--ad { padding: 0; }
body.bs-scoring .hall-scoring__lane-title {
  color: var(--bs-text);
  font-weight: 700;
  letter-spacing: -.01em;
}
body.bs-scoring .hall-scoring__lane-count {
  background: var(--bs-bg-pill);
  color: var(--bs-text-soft);
  border: 1px solid var(--bs-border-soft);
}

/* Layout/poängkort-kontrollbar — gör matchande mörk. Border-radius
   matchar lane-rutorna nedanför (samma --bs-radius) för visuell
   konsekvens. */
body.bs-scoring .hall-scoring__toolbar {
  background: var(--bs-bg-elev);
  border-color: var(--bs-border-soft);
  border-radius: var(--bs-radius);
  box-shadow: none;
}
body.bs-scoring .hall-scoring__toolbar-label {
  color: var(--bs-text-muted);
}
body.bs-scoring .hall-scoring__view-toggle {
  background: var(--bs-bg-pill);
}
body.bs-scoring .hall-scoring__view-btn {
  color: var(--bs-text-soft);
}
body.bs-scoring .hall-scoring__view-btn:hover {
  color: var(--bs-text);
}
body.bs-scoring .hall-scoring__view-btn.is-active {
  background: var(--bs-bg-card);
  color: var(--bs-text);
  box-shadow: 0 1px 4px oklch(0 0 0 / .25);
}

/* Spelar-kort (en kassett per spelare) — vita som default → mörk */
body.bs-scoring .ko-live-frame-card,
body.bs-scoring .hall-scoring .ko-live-frame-card {
  background: var(--bs-bg-card);
  border: 1px solid var(--bs-border-soft);
  color: var(--bs-text);
  box-shadow: 0 2px 8px oklch(0 0 0 / .25);
}
body.bs-scoring .ko-live-frame-card.is-lane-active,
body.bs-scoring .hall-scoring .ko-live-frame-card.is-lane-active {
  border-color: color-mix(in oklch, var(--bs-live) 45%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in oklch, var(--bs-live) 35%, transparent),
    0 6px 18px var(--bs-live-glow);
}

/* Lane placeholder ("Inget spel just nu") + lediga banor */
body.bs-scoring .hall-scoring__lane-placeholder {
  background: color-mix(in oklch, var(--bs-bg-card) 60%, transparent);
  border-color: var(--bs-border);
  color: var(--bs-text-muted);
}

/* Spelar-stats-bar (Strikes/Spärrar/Totalpoäng) — översvämmar mörkt med ljusa pills */
body.bs-scoring .hall-scoring__player-stats {
  background: color-mix(in oklch, var(--bs-bg-elev) 70%, transparent);
  border-radius: var(--bs-radius);
}
body.bs-scoring .hall-scoring__player-stat-value {
  color: var(--bs-text);
}
body.bs-scoring .hall-scoring__player-stat-label {
  color: var(--bs-text-muted);
}

/* Övriga ljusa pill/badge-bg:er som hårdkodar #f1f5f9, #f8fafc, #fff */
body.bs-scoring [style*="background"],
body.bs-scoring .hall-scoring__player-head-row {
  /* lämna inline-styles orörda */
}
body.bs-scoring .hall-scoring [class*="badge"],
body.bs-scoring .hall-scoring [class*="chip"]:not(.bs-chip):not(.bs-card__open-pill) {
  color: inherit;
}

/* "SPELAR NU"-badge döljs helt på bowlingscoring-temat — den gröna
   ramen + glow:n på själva spelar-kortet räcker som visuell signal.
   OBS: body har BÅDA klasserna direkt (.bs-scoring.hall-scoring), så
   selektorn får INTE ha space mellan dem (tidigare bugg: ` .hall-
   scoring ` letade efter `.hall-scoring` som ÄTTLING till body och
   matchade aldrig). Påverkar bara bowlingscoring.se-subdomänen —
   gamla `/h/{slug}/scoring`-URL:en behåller sin badge. */
body.bs-scoring .ko-live-frame-card__now-badge {
  display: none !important;
}

/* Slot-numret (t.ex. "1 · Johnny") fick ärva färg från någon förälder
   och blev mörk-på-mörk på det mörka temat — sätt explicit ljus färg
   med subtil cyan-accent så det syns men inte stjäl fokus från namnet. */
body.bs-scoring .ko-live-frame-card__slot {
  color: oklch(0.78 0.12 195);
  font-weight: 600;
  opacity: 0.95;
}

/* Mildare dimning av spelare som inte är på tur — tidigare 0.55 i
   tournament-public.css kändes som "avgråad". Räcker att markera den
   aktiva spelaren med grön ram. */
body.bs-scoring .ko-live-frame-card.is-lane-waiting {
  opacity: 0.92;
}

/* ───────────────────────────────────────────────────────────
   Bowlingruta-grid (.ko-bowling-card__*) — 10 frame-boxar per serie
   Default i tournament-public.css är vita; här i mörkt tema vill vi
   ha mörka rutor med subtil border och tydlig aktiv-state.
   ─────────────────────────────────────────────────────────── */
body.bs-scoring .ko-bowling-card__frame {
  background: color-mix(in oklch, var(--bs-bg-elev) 78%, transparent);
  border: 1px solid var(--bs-border);
  color: var(--bs-text);
}
body.bs-scoring .ko-bowling-card__frame-label {
  background: color-mix(in oklch, var(--bs-bg) 60%, transparent);
  color: var(--bs-text-muted);
  border-bottom: 1px solid var(--bs-border-soft);
}
body.bs-scoring .ko-bowling-card__cell {
  color: var(--bs-text);
  border-right-color: var(--bs-border-soft);
}
body.bs-scoring .ko-bowling-card__frame .ko-bowling-card__cum {
  background: color-mix(in oklch, var(--bs-bg) 55%, transparent);
  color: var(--bs-text);
  border-top: 1px solid var(--bs-border-soft);
}

/* Aktiv ruta (där spelaren är just nu) — accentgrön i mörk variant */
body.bs-scoring .ko-bowling-card__frame.is-active {
  background: color-mix(in oklch, var(--bs-live) 22%, var(--bs-bg-elev));
  border-color: color-mix(in oklch, var(--bs-live) 55%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--bs-live) 35%, transparent);
}
body.bs-scoring .ko-bowling-card__cum.is-active {
  background: color-mix(in oklch, var(--bs-live) 32%, var(--bs-bg-elev));
  color: color-mix(in oklch, var(--bs-live) 78%, var(--bs-text));
}

/* "Max" i 10:e rutan / personbästa-highlight */
body.bs-scoring .ko-bowling-card__cum.is-max-result {
  background: color-mix(in oklch, oklch(72% .14 180) 22%, var(--bs-bg-elev));
  color: color-mix(in oklch, oklch(82% .12 180) 80%, var(--bs-text));
}

/* Waiting/idle-spelare: rutorna i tournament-public.css läggs som
   "is-lane-waiting" — där har frame.is-active fortfarande grön. Vi vill
   istället dämpa hela kortet, men låt aktiv-rutan dämpas extra. */
body.bs-scoring .ko-live-frame-card.is-lane-waiting .ko-bowling-card__frame,
body.bs-scoring .ko-live-frame-card.is-lane-waiting .ko-bowling-card__cum {
  background: color-mix(in oklch, var(--bs-bg) 70%, transparent);
  border-color: var(--bs-border-soft);
  color: var(--bs-text-soft);
}
body.bs-scoring .ko-live-frame-card.is-lane-waiting .ko-bowling-card__frame.is-active,
body.bs-scoring .ko-live-frame-card.is-lane-waiting .ko-bowling-card__cum.is-active {
  background: color-mix(in oklch, var(--bs-bg) 70%, transparent);
  color: var(--bs-text-muted);
  box-shadow: none;
  border-color: var(--bs-border-soft);
}

/* ───────────────────────────────────────────────────────────
   Modal ("Visa alla serier") — mörkt tema för subdomäner.
   Modalen läggs på <body> (utanför .hall-scoring-roten) så vi
   matchar via body.hall-scoring-modal-open som JS:en sätter
   när modalen är öppen.
   ─────────────────────────────────────────────────────────── */
body.bs-scoring .hall-scoring__modal-backdrop {
  background: oklch(0.08 0.015 250 / .72);
  backdrop-filter: blur(10px) saturate(140%);
}

body.bs-scoring .hall-scoring__modal-panel {
  background: var(--bs-bg-elev);
  color: var(--bs-text);
  border: 1px solid var(--bs-border);
  box-shadow:
    0 -10px 60px oklch(0 0 0 / .55),
    0 24px 80px oklch(0 0 0 / .55);
}

body.bs-scoring .hall-scoring__modal-close {
  background: var(--bs-bg-pill);
  color: var(--bs-text-soft);
  border: 1px solid var(--bs-border-soft);
  transition: color .18s ease, background .18s ease, border-color .18s ease;
}
body.bs-scoring .hall-scoring__modal-close:hover {
  color: var(--bs-text);
  background: var(--bs-bg-card-hover);
  border-color: var(--bs-border);
}

body.bs-scoring .hall-scoring__modal-title,
body.bs-scoring .hall-scoring__modal-player-name {
  color: var(--bs-text);
}

body.bs-scoring .hall-scoring__modal-lane,
body.bs-scoring .hall-scoring__modal-player-meta,
body.bs-scoring .hall-scoring__modal-session-summary,
body.bs-scoring .hall-scoring__modal-slot,
body.bs-scoring .hall-scoring__modal-serie-stats,
body.bs-scoring .hall-scoring__modal-serie-fallback {
  color: var(--bs-text-soft);
}
body.bs-scoring .hall-scoring__modal-session-summary strong,
body.bs-scoring .hall-scoring__modal-serie-stat-num {
  color: var(--bs-text);
}

body.bs-scoring .hall-scoring__modal-player-head {
  border-bottom-color: var(--bs-border-soft);
}

body.bs-scoring .hall-scoring__modal-lane-badge {
  background: var(--bs-bg-pill);
  color: var(--bs-text);
  border: 1px solid var(--bs-border-soft);
}

/* Varje serie-rad i listan: kort med subtil bakgrund */
body.bs-scoring .hall-scoring__modal-serie {
  background: color-mix(in oklch, var(--bs-bg-card) 75%, transparent);
  border-color: var(--bs-border-soft);
}

body.bs-scoring .hall-scoring__modal-serie--live {
  background: color-mix(in oklch, var(--bs-live) 8%, var(--bs-bg-card));
  border-color: color-mix(in oklch, var(--bs-live) 40%, transparent);
  box-shadow: 0 0 0 1px color-mix(in oklch, var(--bs-live) 22%, transparent);
}

body.bs-scoring .hall-scoring__modal-serie--missing {
  background: color-mix(in oklch, var(--bs-bg) 60%, transparent);
  opacity: 0.72;
}

body.bs-scoring .hall-scoring__modal-serie-label {
  color: var(--bs-text);
}

body.bs-scoring .hall-scoring__modal-serie-badge {
  background: color-mix(in oklch, var(--bs-live) 80%, oklch(0.18 0.05 60));
  color: oklch(0.98 0 0);
}
body.bs-scoring .hall-scoring__modal-serie-badge--missing {
  background: color-mix(in oklch, var(--bs-bg-pill) 80%, var(--bs-border));
  color: var(--bs-text-muted);
}

/* Lås kropps-scroll utan att ändra body-bakgrunden */
body.bs-scoring.hall-scoring-modal-open {
  overflow: hidden;
}

/* Hero-variant för scoring: kortare, med tillbaka-länk och hall-info */
.bs-hero--scoring {
  padding-top: clamp(1rem, 3vw, 2rem);
  padding-bottom: clamp(1.25rem, 3vw, 2.25rem);
}
.bs-hero--scoring .bs-hero__inner {
  display: grid;
  gap: .75rem;
}

.bs-hero__back {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  width: fit-content;
  padding: .35rem .75rem .35rem .55rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  border: 1px solid var(--bs-border-soft);
  color: var(--bs-text-soft);
  font-size: .78rem;
  font-weight: 600;
  letter-spacing: .01em;
  transition: color .18s ease, border-color .18s ease, background .18s ease, transform .18s ease;
  margin-bottom: .35rem;
}
.bs-hero__back:hover {
  color: var(--bs-text);
  border-color: var(--bs-border);
  background: var(--bs-bg-card-hover);
  transform: translateX(-2px);
}
.bs-hero__back svg { transition: transform .2s ease; }
.bs-hero__back:hover svg { transform: translateX(-2px); }

/* Hall-identitet */
.bs-hall {
  display: flex;
  align-items: center;
  gap: .9rem;
  flex-wrap: wrap;
}
.bs-hall__avatar {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: clamp(48px, 8vw, 64px);
  height: clamp(48px, 8vw, 64px);
  border-radius: 16px;
  color: oklch(0.98 0 0);
  font-weight: 800;
  font-size: clamp(1.4rem, 3vw, 1.85rem);
  letter-spacing: -.02em;
  text-shadow: 0 1px 2px oklch(0 0 0 / .25);
  box-shadow: inset 0 1px 0 oklch(1 0 0 / .25), 0 8px 22px oklch(0 0 0 / .2);
  overflow: hidden;
}
.bs-hall__avatar--logo img {
  width: 84%;
  height: 84%;
  object-fit: contain;
  pointer-events: none;
}
.bs-hall__avatar--logo-light {
  background: oklch(0.97 0.005 260) !important;
  box-shadow:
    inset 0 0 0 1px oklch(0 0 0 / .08),
    0 8px 22px oklch(0 0 0 / .25);
}
.bs-hall__avatar--logo-dark {
  background: oklch(0.18 0.01 260) !important;
  box-shadow:
    inset 0 0 0 1px oklch(1 0 0 / .12),
    0 8px 22px oklch(0 0 0 / .35);
}
.bs-hall__title-wrap { min-width: 0; flex: 1 1 auto; }
.bs-hall__title {
  margin: 0;
  font-size: clamp(1.6rem, 1.3rem + 2vw, 2.6rem);
  font-weight: 800;
  letter-spacing: -.035em;
  line-height: 1.05;
  color: var(--bs-text);
}
.bs-hall__city {
  margin: .2rem 0 0;
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  color: var(--bs-text-soft);
  font-size: var(--bs-step-2);
}
.bs-hall__status {
  flex: 0 0 auto;
  align-self: flex-start;
}

/* Öppet-block: pill + ranges på en rad */
.bs-hall__open {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .55rem .85rem;
}

/* Live-banor: stor mono-siffra + meter */
.bs-hall__live {
  display: grid;
  gap: .45rem;
  padding: .85rem 1.1rem;
  background: color-mix(in oklch, var(--bs-live) 8%, var(--bs-bg-elev));
  border: 1px solid color-mix(in oklch, var(--bs-live) 25%, transparent);
  border-radius: var(--bs-radius);
  max-width: 32rem;
}
.bs-hall__live-row {
  display: flex;
  align-items: baseline;
  gap: .5rem;
}
.bs-hall__live-num {
  font-family: var(--bs-font-mono);
  font-size: clamp(1.6rem, 3vw, 2.1rem);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--bs-live);
  letter-spacing: -.03em;
  line-height: 1;
}
.bs-hall__live-label { color: var(--bs-text-soft); font-size: var(--bs-step-1); }
.bs-hall__meter {
  position: relative;
  height: 6px;
  border-radius: 999px;
  background: color-mix(in oklch, var(--bs-live) 12%, transparent);
  overflow: hidden;
}
.bs-hall__meter-fill {
  display: block;
  height: 100%;
  width: var(--bs-meter, 0%);
  background: linear-gradient(90deg, var(--bs-live), oklch(0.8 0.18 100));
  border-radius: inherit;
  transition: width .8s cubic-bezier(.4, 0, .2, 1);
  box-shadow: 0 0 12px var(--bs-live-glow);
}

/* Actions: boka-CTA + sekundära länkar */
.bs-hall__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem .65rem;
  margin-top: .35rem;
}
.bs-hall__cta {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .65rem 1.1rem;
  border: 0;
  border-radius: 999px;
  background: var(--bs-accent-grad);
  color: oklch(0.98 0 0);
  font-weight: 600;
  font-size: var(--bs-step-2);
  cursor: pointer;
  box-shadow: 0 10px 26px color-mix(in oklch, var(--bs-accent) 35%, transparent);
  transition: transform .2s ease, box-shadow .25s ease;
}
.bs-hall__cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 14px 34px color-mix(in oklch, var(--bs-accent) 50%, transparent);
}
.bs-hall__action {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  padding: .5rem .9rem;
  border-radius: 999px;
  background: var(--bs-bg-pill);
  border: 1px solid var(--bs-border-soft);
  color: var(--bs-text-soft);
  font-size: var(--bs-step-1);
  font-weight: 500;
  transition: color .18s ease, border-color .18s ease, background .18s ease;
}
.bs-hall__action:hover {
  color: var(--bs-text);
  border-color: var(--bs-border);
  background: var(--bs-bg-card-hover);
}
.bs-hall__action--static {
  cursor: default;
}
.bs-hall__action--static:hover {
  color: var(--bs-text-soft);
  border-color: var(--bs-border-soft);
  background: var(--bs-bg-pill);
}
.bs-hall__action svg { color: var(--bs-text-muted); }

/* Scoring-footer: tona ner ovanför footern, brand-länk klickbar */
.bs-footer--scoring { margin-top: clamp(2rem, 4vw, 3rem); }
.bs-footer__brand a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px dashed transparent;
  transition: color .15s ease, border-color .15s ease;
}
.bs-footer__brand a:hover {
  color: var(--bs-accent);
  border-color: color-mix(in oklch, var(--bs-accent) 50%, transparent);
}

/* ─────────────────────────────────────────────────────────────
   Booking-modal (native <dialog>)
   ───────────────────────────────────────────────────────────── */
.bs-modal {
  width: min(960px, 96vw);
  height: min(820px, 92dvh);
  max-width: none;
  max-height: none;
  padding: 0;
  border: 1px solid var(--bs-border);
  border-radius: var(--bs-radius-xl);
  background: var(--bs-bg-elev);
  color: var(--bs-text);
  box-shadow: 0 30px 80px oklch(0 0 0 / .35), 0 0 0 1px var(--bs-border-soft);
  overflow: hidden;
}
.bs-modal::backdrop {
  background: color-mix(in oklch, oklch(0.08 0.02 270) 70%, transparent);
  backdrop-filter: blur(8px) saturate(140%);
  -webkit-backdrop-filter: blur(8px) saturate(140%);
}
.bs-modal[open] {
  display: flex;
  flex-direction: column;
}

/* Fade + scale-in animation */
@supports (transition-behavior: allow-discrete) {
  .bs-modal {
    transition: opacity .22s ease, scale .22s cubic-bezier(.34,1.36,.64,1),
                translate .22s cubic-bezier(.34,1.36,.64,1),
                overlay .22s allow-discrete, display .22s allow-discrete;
    opacity: 0;
    scale: .96;
    translate: 0 8px;
  }
  .bs-modal[open] { opacity: 1; scale: 1; translate: 0 0; }
  @starting-style {
    .bs-modal[open] { opacity: 0; scale: .96; translate: 0 8px; }
  }
  .bs-modal::backdrop {
    transition: opacity .22s ease, overlay .22s allow-discrete, display .22s allow-discrete;
    opacity: 0;
  }
  .bs-modal[open]::backdrop { opacity: 1; }
  @starting-style {
    .bs-modal[open]::backdrop { opacity: 0; }
  }
}

.bs-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: .9rem 1rem .9rem 1.4rem;
  border-bottom: 1px solid var(--bs-border-soft);
  background: color-mix(in oklch, var(--bs-bg-card) 80%, transparent);
}
.bs-modal__title {
  font-weight: 700;
  font-size: var(--bs-step-3);
  letter-spacing: -.01em;
  color: var(--bs-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bs-modal__close {
  display: inline-grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border-radius: 12px;
  background: var(--bs-bg-pill);
  border: 1px solid transparent;
  color: var(--bs-text-soft);
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.bs-modal__close:hover {
  background: var(--bs-bg-card-hover);
  color: var(--bs-text);
  border-color: var(--bs-border);
}
.bs-modal__close:focus-visible {
  outline: 2px solid var(--bs-accent);
  outline-offset: 2px;
}

.bs-modal__body {
  position: relative;
  flex: 1 1 auto;
  background: var(--bs-bg-elev);
  overflow-y: auto;
  overflow-x: hidden;
  min-height: 0;
  /* Stack iframen + kontakt-sektionen tätt utan luft */
  display: flex;
  flex-direction: column;
}
.bs-modal__frame {
  display: block;
  width: 100%;
  /* JS sätter exakt höjd via postMessage från embed-shellet.
     Fallback medan höjden ännu inte rapporterats — väldigt liten så
     vit yta blir minimal om postMessage av någon anledning inte når fram. */
  height: 320px;
  border: 0;
  background: transparent;
  color-scheme: light;
  flex: 0 0 auto;
}
.bs-modal__loader {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  gap: .75rem;
  color: var(--bs-text-muted);
  font-size: var(--bs-step-1);
  background: var(--bs-bg);
  transition: opacity .25s ease;
}
.bs-modal__loader[hidden] {
  display: grid !important;
  opacity: 0;
  pointer-events: none;
}
.bs-modal__loader-inner { display: inline-flex; align-items: center; gap: .55rem; }
.bs-modal__spinner {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 2.5px solid var(--bs-border);
  border-top-color: var(--bs-accent);
  animation: bs-spin .9s linear infinite;
}
@keyframes bs-spin { to { transform: rotate(360deg); } }

/* ─── Kontakt + plats + karta — limmar direkt under iframen ─ */
.bs-modal__contact {
  display: grid;
  gap: 1.1rem;
  padding: 1.25rem clamp(1rem, 4vw, 1.75rem) 1.5rem;
  background: var(--bs-bg-elev);
  border-top: 1px solid var(--bs-border);
  flex: 0 0 auto;
  margin-top: 0;
}
.bs-modal__contact[hidden] { display: none; }

.bs-modal__contact-head {
  display: flex;
  flex-direction: column;
  gap: .15rem;
}
.bs-modal__contact-eyebrow {
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--bs-text-muted);
}
.bs-modal__contact-title {
  margin: 0;
  font-size: var(--bs-step-1);
  font-weight: 700;
  color: var(--bs-text);
}

.bs-modal__contact-actions {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: .6rem;
}

.bs-modal__contact-btn {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .75rem .9rem;
  border-radius: 14px;
  background: var(--bs-bg-card);
  border: 1px solid var(--bs-border);
  color: var(--bs-text);
  text-decoration: none;
  font-weight: 600;
  font-size: .92rem;
  line-height: 1.2;
  min-width: 0;
  transition: background .15s ease, border-color .15s ease, transform .15s ease, color .15s ease;
}
.bs-modal__contact-btn > svg {
  flex: 0 0 auto;
  color: var(--bs-accent);
}
.bs-modal__contact-btn > span {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bs-modal__contact-btn:hover {
  background: var(--bs-bg-card-hover);
  border-color: var(--bs-border-strong, var(--bs-accent));
  transform: translateY(-1px);
}
.bs-modal__contact-btn:focus-visible {
  outline: 2px solid var(--bs-accent);
  outline-offset: 2px;
}
.bs-modal__contact-btn--wide {
  grid-column: 1 / -1;
  background: linear-gradient(135deg, color-mix(in oklch, var(--bs-accent) 12%, var(--bs-bg-card)) 0%, var(--bs-bg-card) 70%);
}

.bs-modal__map {
  border-radius: 16px;
  overflow: hidden;
  border: 1px solid var(--bs-border);
  background: var(--bs-bg-card);
  aspect-ratio: 16 / 9;
  max-height: 260px;
}
.bs-modal__map[hidden] { display: none; }
.bs-modal__map-frame {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
  /* Förhindra ljus OSM-bakgrund att blixa innan den laddas */
  background: var(--bs-bg-card);
}

@media (max-width: 600px) {
  .bs-modal {
    width: 100vw;
    height: 100dvh;
    max-width: 100vw;
    max-height: 100dvh;
    border-radius: 0;
    border: 0;
    margin: 0;
  }
  .bs-modal__contact-actions {
    grid-template-columns: 1fr;
  }
}

/* När modalen är öppen — lås page-scroll */
body:has(.bs-modal[open]) { overflow: hidden; }

/* ─────────────────────────────────────────────────────────────
   Footer
   ───────────────────────────────────────────────────────────── */
.bs-footer {
  position: relative;
  z-index: 1;
  border-top: 1px solid var(--bs-border-soft);
  margin-top: clamp(3rem, 6vw, 5rem);
  padding: 2rem var(--bs-page-pad);
  background: color-mix(in oklch, var(--bs-bg) 95%, transparent);
}
.bs-footer__inner {
  max-width: 1320px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: .35rem;
  font-size: var(--bs-step-1);
  color: var(--bs-text-muted);
}
.bs-footer__inner p { margin: 0; }
.bs-footer__copyright { color: var(--bs-text-muted); }
.bs-footer__copyright strong { color: var(--bs-text); font-weight: 700; }
.bs-footer__copyright a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px dashed transparent;
  transition: color .15s ease, border-color .15s ease;
}
.bs-footer__copyright a:hover {
  color: var(--bs-accent);
  border-color: color-mix(in oklch, var(--bs-accent) 50%, transparent);
}
.bs-footer__copyright a:hover strong { color: var(--bs-accent); }
.bs-footer__meta a { color: var(--bs-text-soft); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.bs-footer__meta a:hover { color: var(--bs-accent); }

/* ─────────────────────────────────────────────────────────────
   Tillgänglighet: reduce-motion override
   ───────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01s !important; animation-iteration-count: 1 !important; transition-duration: .01s !important; }
}
