/* Section-specific layout — each block below belongs to one page or
   feature and isn't reused elsewhere. Shared primitives live in
   base.css / components.css. */

/* ---------- hero ---------- */

.hero {
  position: relative;
  padding: 56px 0 90px;
  background: var(--ink);
  overflow: hidden;
}

@media (min-width: 640px) {
  .hero {
    padding: 80px 0 130px;
  }
}

/* Compact variant used at the top of each sport page. */
.hero.hero-compact {
  padding: 56px 0 70px;
}

.hero-bg {
  position: absolute;
  inset: 0;
  opacity: 0.5;
  background-size: cover;
  background-position: center;
}

.hero-fade {
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, rgba(var(--ink-rgb), 0.1), rgba(var(--ink-rgb), 0.5) 60%, var(--ink));
}

.hero-grid {
  position: relative;
  display: grid;
  gap: 44px;
  align-items: center;
}

@media (min-width: 1024px) {
  .hero-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.hero h1 {
  margin-top: 18px;
  font-size: 44px;
  line-height: 0.98;
  font-weight: 800;
  color: #fff;
}

@media (min-width: 640px) {
  .hero h1 {
    font-size: 60px;
  }
}

@media (min-width: 1024px) {
  .hero h1 {
    font-size: 68px;
  }
}

.hero h1 .gold {
  color: var(--gold);
}

.hero p.sub {
  max-width: 440px;
  margin-top: 22px;
  font-size: 17px;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.75);
}

.hero .cta-row {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 30px;
}

.hero .fine {
  margin-top: 18px;
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: rgba(255, 255, 255, 0.5);
}

.hero-media {
  position: relative;
}

.hero-media-inner {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  aspect-ratio: 5 / 6;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: var(--radius-xl);
  background: linear-gradient(135deg, var(--royal), var(--royal-dark), var(--ink));
  color: rgba(255, 255, 255, 0.5);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}

.hero-slide {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 1s ease;
}

.hero-slide.active {
  opacity: 1;
}

.hero-slide-fade {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(var(--ink-rgb), 0.65) 0%, rgba(var(--ink-rgb), 0) 45%);
  pointer-events: none;
}

.hero-dots {
  position: absolute;
  bottom: 16px;
  left: 50%;
  z-index: 2;
  display: flex;
  gap: 7px;
  transform: translateX(-50%);
}

.hero-dot {
  width: 7px;
  height: 7px;
  padding: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.4);
  transition: background 0.2s, width 0.2s;
}

.hero-dot.active {
  width: 20px;
  border-radius: 4px;
  background: var(--gold);
}

.hero-float {
  display: none;
  position: absolute;
  bottom: -24px;
  left: -24px;
  padding: 16px 20px;
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
  background: #fff;
  box-shadow: var(--shadow-sm);
}

@media (min-width: 640px) {
  .hero-float {
    display: block;
  }
}

.location-slideshow {
  position: relative;
  max-width: 900px;
  margin: 0 auto;
  aspect-ratio: 16 / 9;
  border: 1px solid var(--line);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}

.location-slideshow.compact {
  max-width: none;
  margin: 0;
  aspect-ratio: 4 / 3;
}

/* ---------- stat bar ---------- */

.statbar-wrap {
  position: relative;
  z-index: 10;
  margin-top: -56px;
}

@media (min-width: 640px) {
  .statbar-wrap {
    margin-top: -72px;
  }
}

.statbar {
  display: grid;
  grid-template-columns: 1fr 1fr;
  width: 92%;
  max-width: 920px;
  margin: 0 auto;
  border-radius: var(--radius-xl);
  background: var(--ink);
  box-shadow: var(--shadow-lg);
}

@media (min-width: 640px) {
  .statbar {
    grid-template-columns: repeat(4, 1fr);
    width: 100%;
  }
}

.stat-cell {
  padding: 26px 14px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  text-align: center;
}

.stat-cell:nth-child(odd) {
  border-right: 1px solid rgba(255, 255, 255, 0.08);
}

@media (min-width: 640px) {
  .stat-cell {
    border-right: 1px solid rgba(255, 255, 255, 0.08);
    border-bottom: none;
  }

  .stat-cell:last-child {
    border-right: none;
  }
}

.stat-value {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 38px;
  color: #fff;
  font-variant-numeric: tabular-nums;
}

@media (min-width: 640px) {
  .stat-value {
    font-size: 44px;
  }
}

.stat-value .suffix {
  color: var(--gold);
}

.stat-label {
  margin-top: 4px;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: rgba(255, 255, 255, 0.6);
}

/* ---------- sport picker (home + sport-page nav) ---------- */

.sport-grid {
  display: grid;
  gap: 22px;
  grid-template-columns: 1fr;
  margin-top: 52px;
}

@media (min-width: 640px) {
  .sport-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.sport-card {
  display: block;
  overflow: hidden;
}

.sport-card-media {
  display: flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 16 / 10;
}

.sport-card-body {
  padding: 24px;
}

.sport-card-body h3 {
  margin-top: 8px;
  font-size: 24px;
}

.sport-card-body p {
  margin-top: 8px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--ink-60);
}

.sport-card-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 18px;
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.sport-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 28px;
}

.sport-pill-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 16px;
  border-radius: var(--radius-pill);
  border: 1px solid rgba(255, 255, 255, 0.2);
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: rgba(255, 255, 255, 0.7);
}

.sport-pill-link.active {
  border-color: transparent;
  color: var(--ink);
}

.sport-pill-link:hover:not(.active) {
  border-color: rgba(255, 255, 255, 0.4);
  color: #fff;
}

.sport-cross {
  display: flex;
  flex-direction: column;
  gap: 14px;
  max-width: 420px;
  margin: 36px auto 0;
}

.sport-cross-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 18px 20px;
}

.sport-cross-item .left {
  display: flex;
  align-items: center;
  gap: 12px;
}

.sport-cross-icon {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
}

.sport-cross-item h4 {
  font-size: 18px;
  text-transform: none;
  letter-spacing: 0;
}

/* ---------- "why Ball IQ" values grid ---------- */

.why-grid {
  display: grid;
  gap: 56px;
  align-items: center;
}

@media (min-width: 1024px) {
  .why-grid {
    grid-template-columns: 0.9fr 1.1fr;
  }
}

.values-grid {
  display: grid;
  gap: 18px;
  grid-template-columns: 1fr;
}

@media (min-width: 640px) {
  .values-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.value-card {
  padding: 24px;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.value-card:hover {
  transform: translateY(-6px) scale(1.03);
  box-shadow: var(--shadow-lift);
}

.icon-box {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: rgba(var(--royal-rgb), 0.1);
  color: var(--royal);
  transition: transform 0.25s ease, background 0.25s ease;
}

.value-card:hover .icon-box {
  transform: scale(1.1);
  background: rgba(var(--royal-rgb), 0.16);
}

.value-card h3 {
  margin-top: 16px;
  font-size: 20px;
}

.value-card p {
  margin-top: 8px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--ink-60);
}

/* ---------- how it works ---------- */

.steps {
  position: relative;
  display: grid;
  gap: 36px;
  grid-template-columns: 1fr;
  margin-top: 56px;
}

@media (min-width: 640px) {
  .steps {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 1024px) {
  .steps {
    grid-template-columns: repeat(4, 1fr);
  }
}

.step {
  text-align: center;
}

@media (min-width: 1024px) {
  .step {
    text-align: left;
  }
}

.step-num {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  margin: 0 auto;
  border-radius: 50%;
  background: var(--royal);
  color: #fff;
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 18px;
}

@media (min-width: 1024px) {
  .step-num {
    margin: 0;
  }
}

.step h3 {
  margin-top: 18px;
  font-size: 20px;
}

.step p {
  margin-top: 8px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--ink-60);
}

/* ---------- pricing ---------- */

.pricing-grid {
  display: grid;
  gap: 24px;
  grid-template-columns: 1fr;
  align-items: start;
}

@media (min-width: 1024px) {
  .pricing-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

.plan {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 32px;
  border-radius: var(--radius-xl);
}

.plan.regular {
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: var(--shadow-card);
}

.plan.premium {
  background: var(--ink);
  color: #fff;
  border: 2px solid var(--gold);
  box-shadow: var(--shadow-lg);
}

@media (min-width: 1024px) {
  .plan.premium {
    margin-top: -18px;
    margin-bottom: -18px;
    padding: 44px 32px;
  }
}

.plan.coming-soon {
  position: relative;
  border: 2px dashed rgba(var(--royal-rgb), 0.3);
  background: linear-gradient(180deg, rgba(var(--royal-rgb), 0.035), transparent 60%);
}

.plan.coming-soon::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: var(--radius-xl);
  background: repeating-linear-gradient(135deg, rgba(var(--royal-rgb), 0.025) 0 14px, transparent 14px 28px);
  pointer-events: none;
  overflow: hidden;
}

.plan.coming-soon .price-row,
.plan.coming-soon .feature-list,
.plan.coming-soon h3,
.plan.coming-soon .plan-desc {
  position: relative;
  z-index: 1;
}

.badges {
  position: absolute;
  top: -16px;
  left: 50%;
  display: flex;
  gap: 8px;
  transform: translateX(-50%);
}

.notify-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}

.plan-fine.soon {
  font-weight: 800;
  color: var(--royal);
}

.plan h3 {
  font-size: 24px;
}

.plan .plan-desc {
  margin-top: 8px;
  font-size: 13.5px;
  line-height: 1.6;
}

.plan.regular .plan-desc {
  color: var(--ink-55);
}

.plan.premium .plan-desc {
  color: rgba(255, 255, 255, 0.65);
}

.price-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-top: 22px;
}

.price {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 44px;
  font-variant-numeric: tabular-nums;
}

.plan.regular .price {
  color: var(--royal);
}

.plan.premium .price {
  color: var(--gold);
}

.price.price-tbd {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 26px;
  text-transform: uppercase;
  letter-spacing: 0.01em;
}

.price.price-tbd::before {
  content: "";
  flex-shrink: 0;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.55;
}

.price-unit {
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 13px;
}

.plan.regular .price-unit {
  color: var(--ink-50);
}

.plan.premium .price-unit {
  color: rgba(255, 255, 255, 0.55);
}

.pkg-note {
  margin-top: 4px;
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--gold);
}

.per-session-note {
  display: inline-flex;
  margin-top: 8px;
  padding: 4px 12px;
  border-radius: var(--radius-pill);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 11.5px;
}

.plan.regular .per-session-note {
  background: var(--mist);
  color: var(--ink-55);
}

.plan.premium .per-session-note {
  background: rgba(255, 255, 255, 0.1);
  color: rgba(255, 255, 255, 0.75);
}

.billing-note {
  margin-top: 6px;
  font-size: 11.5px;
}

.plan.regular .billing-note {
  color: var(--ink-40);
}

.plan.premium .billing-note {
  color: rgba(255, 255, 255, 0.45);
}

.save-callout {
  margin-top: 12px;
  padding: 10px 12px;
  border-radius: var(--radius-md);
  background: rgba(var(--gold-rgb), 0.12);
  font-size: 12px;
  font-weight: 600;
  color: var(--gold-deep);
}

.feature-list {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 26px;
}

.feature {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 14px;
}

.feature svg {
  flex-shrink: 0;
  margin-top: 1px;
}

.feature.excluded {
  text-decoration: line-through;
}

.plan.regular .feature.excluded {
  color: var(--ink-35);
}

.plan.premium .feature.excluded {
  color: rgba(255, 255, 255, 0.35);
}

.plan.regular .feature.included {
  color: var(--ink-75);
}

.plan.premium .feature.included {
  color: rgba(255, 255, 255, 0.85);
}

.plan-cta {
  margin-top: 28px;
}

.plan-fine {
  margin-top: 12px;
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  text-align: center;
}

.plan.regular .plan-fine {
  color: var(--ink-40);
}

.plan.premium .plan-fine {
  color: rgba(255, 255, 255, 0.4);
}

.savings-box {
  max-width: 760px;
  margin: 56px auto 0;
  padding: 40px 32px;
  border: 1px solid rgba(var(--gold-rgb), 0.3);
  border-radius: var(--radius-xl);
  background: rgba(var(--gold-rgb), 0.1);
  text-align: center;
}

.savings-box .tag {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--gold-deep);
}

.savings-box .big {
  margin-top: 10px;
  font-size: 26px;
  font-weight: 800;
}

.savings-box .big span {
  color: var(--gold-deep);
}

.savings-box .fine {
  margin-top: 10px;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--ink-60);
}

.savings-points {
  display: grid;
  gap: 20px 28px;
  grid-template-columns: 1fr;
  margin-top: 28px;
  text-align: left;
}

@media (min-width: 640px) {
  .savings-points {
    grid-template-columns: 1fr 1fr;
  }
}

.savings-point {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}

.sp-icon {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #fff;
  color: var(--gold-deep);
  box-shadow: 0 8px 18px -8px rgba(217, 143, 31, 0.4);
}

.sp-title {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 13.5px;
  color: var(--ink);
}

.sp-desc {
  margin-top: 3px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--ink-60);
}

/* ---------- testimonials ---------- */

.test-grid {
  display: grid;
  gap: 20px;
  grid-template-columns: 1fr;
  margin-top: 52px;
}

@media (min-width: 640px) {
  .test-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 1024px) {
  .test-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* Single-column layout used on sport pages, which show fewer, longer quotes. */
.test-grid.test-grid-single {
  grid-template-columns: 1fr;
}

.test-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 24px;
}

.stars {
  display: flex;
  gap: 2px;
  color: var(--gold);
}

.test-quote {
  flex: 1;
  margin-top: 14px;
  font-size: 13.5px;
  line-height: 1.6;
  color: var(--ink-70);
}

.test-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 18px;
}

.avatar {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(var(--royal-rgb), 0.1);
  color: var(--royal);
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 13px;
}

.test-foot .pname {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 13.5px;
}

.test-foot .cname {
  font-size: 11.5px;
  color: var(--ink-50);
}

.review-summary {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 18px;
  max-width: 640px;
  margin: 0 auto;
}

.review-summary .score {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 32px;
  color: var(--royal);
}

.review-summary .score-sub {
  font-size: 12.5px;
  color: var(--ink-55);
}

.review-error {
  display: none;
  font-size: 12.5px;
  color: var(--error);
}

.review-error.show {
  display: block;
}

/* Booking submission failure. Heavier than .review-error on purpose: this one
   means the request never reached Ball IQ, so it has to be hard to skim past. */
.submit-error {
  display: none;
  margin: 0 0 4px;
  padding: 12px 14px;
  border: 1px solid var(--error-border);
  border-radius: var(--radius-sm);
  background: var(--error-soft);
  color: var(--error);
  font-size: 13px;
  line-height: 1.5;
}

.submit-error.show {
  display: block;
}

.submit-error a {
  color: inherit;
  font-weight: 700;
  text-decoration: underline;
}

/* ---------- CTA banner ---------- */

.cta-banner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  text-align: center;
}

.cta-banner h2 {
  max-width: 600px;
  font-size: 28px;
}

@media (min-width: 640px) {
  .cta-banner h2 {
    font-size: 36px;
  }
}

.cta-banner p {
  max-width: 520px;
  color: rgba(255, 255, 255, 0.75);
}

/* ---------- programs ---------- */

.program-row {
  display: grid;
  gap: 36px;
  align-items: center;
  grid-template-columns: 1fr;
  margin-bottom: 56px;
}

@media (min-width: 1024px) {
  .program-row {
    grid-template-columns: 1fr 1fr;
  }
}

.program-row.flip .p-media {
  order: 2;
}

.focus-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 22px;
}

.focus-tag {
  padding: 7px 16px;
  border: 1px solid rgba(var(--royal-rgb), 0.2);
  border-radius: var(--radius-pill);
  background: rgba(var(--royal-rgb), 0.05);
  color: var(--royal);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.p-age {
  margin-top: 10px;
}

.program-row h2 {
  margin-top: 8px;
  font-size: 28px;
}

@media (min-width: 640px) {
  .program-row h2 {
    font-size: 34px;
  }
}

.program-row p.desc {
  margin-top: 14px;
  font-size: 15px;
  line-height: 1.65;
  color: var(--ink-60);
}

/* ---------- about ---------- */

.about-grid {
  display: grid;
  gap: 44px;
  align-items: center;
  grid-template-columns: 1fr;
}

@media (min-width: 1024px) {
  .about-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.about-grid p {
  margin-top: 16px;
  font-size: 15px;
  line-height: 1.7;
  color: var(--ink-65);
}

.about-grid p + p {
  margin-top: 16px;
}

.format-grid {
  display: grid;
  gap: 22px;
  grid-template-columns: 1fr;
  margin-top: 48px;
}

@media (min-width: 640px) {
  .format-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.format-card {
  padding: 30px;
}

.format-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

/* ---------- coaches ---------- */

.coach-grid {
  display: grid;
  gap: 22px;
  grid-template-columns: 1fr;
  margin-top: 52px;
}

@media (min-width: 640px) {
  .coach-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 1024px) {
  .coach-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

.coach-card {
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.coach-card:hover {
  transform: translateY(-6px) scale(1.03);
  box-shadow: var(--shadow-lift);
}

.coach-photo {
  aspect-ratio: 4 / 5;
  border-bottom: 1px solid var(--line);
  border-radius: 0;
}

.coach-body {
  padding: 22px;
}

.coach-body h3 {
  font-size: 20px;
}

.coach-role {
  margin-top: 2px;
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--royal);
}

.coach-exp {
  margin-top: 10px;
  font-size: 13px;
  color: var(--ink-60);
}

.coach-quote {
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
  font-size: 13px;
  font-style: italic;
  line-height: 1.6;
  color: var(--ink-55);
}

/* ---------- contact ---------- */

.contact-grid {
  display: grid;
  gap: 44px;
  grid-template-columns: 1fr;
}

@media (min-width: 1024px) {
  .contact-grid {
    grid-template-columns: 1.1fr 0.9fr;
  }
}

.form-card {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 32px;
}

.field-row {
  display: grid;
  gap: 20px;
  grid-template-columns: 1fr;
}

@media (min-width: 640px) {
  .field-row {
    grid-template-columns: 1fr 1fr;
  }
}

.success-box {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding: 44px 32px;
  text-align: center;
}

.success-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: rgba(var(--royal-rgb), 0.1);
  color: var(--royal);
}

/* The date the parent asked for, repeated back on the confirmation. A booking
   they can't see restated is one they have to take on trust. */
.success-session {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin: 4px 0 0;
  padding: 12px 20px;
  border-radius: var(--radius-md);
  background: rgba(var(--royal-rgb), 0.07);
}

.success-session span {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--royal);
}

.success-session strong {
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 16px;
  color: var(--ink);
}

.success-session.none {
  background: var(--gold-pale);
  font-size: 13px;
  color: var(--ink-70);
  text-align: center;
}

/* ---------- coach portal (internal) ---------- */

.coach-select-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 22px;
}

.coach-select-btn {
  padding: 10px 18px;
  border: 1.5px solid var(--line);
  border-radius: var(--radius-pill);
  font-family: var(--font-ui);
  font-weight: 700;
  font-size: 12.5px;
  color: var(--ink-60);
  transition: 0.15s;
}

.coach-select-btn.active {
  border-color: var(--ink);
  background: var(--ink);
  color: #fff;
}

/* Who is signed in, above the staff tabs. */
.staff-session-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 12px;
  margin-bottom: 16px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-60);
}

.coach-save-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px;
  margin-top: 22px;
}

.coach-save-status {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--royal);
  opacity: 0;
  transition: opacity 0.2s;
}

.coach-save-status.show {
  opacity: 1;
}

/* ---------- bookings admin (internal) ---------- */

.booking-card {
  margin-bottom: 16px;
  padding: 22px 24px;
}

.booking-top {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.booking-name {
  font-family: var(--font-display);
  font-size: 19px;
  text-transform: uppercase;
  color: var(--ink);
}

.booking-date {
  margin-top: 2px;
  font-size: 11.5px;
  color: var(--ink-45);
}

.booking-type-badge {
  padding: 5px 12px;
  border-radius: var(--radius-pill);
  background: rgba(var(--royal-rgb), 0.1);
  color: var(--royal);
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  white-space: nowrap;
}

/* The session the family asked for. Sits directly under the name because it
   is the first thing a coach needs from the card. */
.booking-session {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin: 14px 0 0;
  padding: 9px 13px;
  border-left: 3px solid var(--royal);
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  background: rgba(var(--royal-rgb), 0.06);
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 14px;
  color: var(--ink);
}

.booking-session.none {
  border-left-color: var(--gold);
  background: var(--gold-pale);
  font-weight: 700;
  font-size: 13px;
  color: var(--ink-70);
}

.booking-flexible {
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  background: rgba(var(--ink-rgb), 0.08);
  font-weight: 700;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ink-60);
}

.booking-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 20px;
  margin-top: 14px;
  font-size: 13px;
  color: var(--ink-70);
}

.booking-grid strong {
  color: var(--ink);
}

.booking-msg {
  margin-top: 14px;
  padding: 12px 14px;
  border-radius: var(--radius-md);
  background: var(--mist);
  font-size: 13px;
  font-style: italic;
  color: var(--ink-75);
}

/* Payment state. Replaces `.booking-payment-flag`, which styled a regex guess
   at what the parent had typed into the message box; this one styles a fact
   from a verified Stripe webhook (DD-017). Colour carries meaning here, so the
   label always spells it out too. */
.booking-payment {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  padding: 5px 12px;
  border-radius: var(--radius-pill);
  font-family: var(--font-ui);
  font-weight: 800;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.booking-payment.is-paid {
  background: rgba(46, 148, 92, 0.14);
  color: #1f6b42;
}

.booking-payment.is-pending {
  background: rgba(var(--gold-rgb), 0.14);
  color: var(--gold-deep);
}

.booking-payment.is-unpaid {
  background: rgba(var(--ink-rgb), 0.08);
  color: var(--ink-60);
}

.booking-payment.is-refunded {
  background: var(--error-soft);
  color: var(--error);
}

/* A package: the first date reads large, the rest as a compact list under it. */
.booking-session-more {
  margin-left: 8px;
  font-family: var(--font-ui);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ink-50);
}

.booking-session-list {
  margin: 8px 0 0;
  padding: 8px 0 0;
  border-top: 1px solid var(--line);
  list-style: none;
  columns: 2;
  column-gap: 18px;
}

.booking-session-list li {
  display: flex;
  gap: 7px;
  padding: 2px 0;
  break-inside: avoid;
  font-size: 12.5px;
  color: var(--ink-70);
}

.booking-session-list span {
  min-width: 14px;
  font-weight: 800;
  color: var(--ink-40);
}

.bookings-empty {
  padding: 60px 20px;
  color: var(--ink-50);
  text-align: center;
}

.match-panel {
  margin-top: 16px;
  padding: 18px 20px;
  border-radius: 14px;
  text-align: left;
}

.match-panel.found {
  border: 1px solid rgba(var(--royal-rgb), 0.2);
  background: rgba(var(--royal-rgb), 0.08);
}

.match-panel.none {
  border: 1px solid var(--line);
  background: var(--mist);
}

.match-panel h4 {
  font-family: var(--font-display);
  font-size: 16px;
  text-transform: uppercase;
  color: var(--ink);
}

.match-panel .match-desc {
  margin-top: 6px;
  font-size: 13px;
  color: var(--ink-60);
}

.match-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 13px;
  color: var(--ink-75);
}

.match-row .dot {
  flex-shrink: 0;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--royal);
}
