/* ==========================================================================
   FitMe 3070 — Bootstrap 4 Override Stylesheet
   Base: Bootstrap 4.3.1 (vendor/bootstrap/)
   Palette: Neon Moss (#C2D500) accent over a Void Black (#0B0B0D) → Charcoal
            Slate (#3D403E) dark ramp, with Ash Silver (#B8B9BE) + Arctic White
            (#F7F8FA) for light/secondary. Treat the green as a spotlight (~10%).
   ========================================================================== */

/* ── Design Tokens ─────────────────────────────────────────────────────────────
   Brand palette — "Neon Moss" on a Void-Black → Charcoal-Slate dark ramp, with
   an Ash-Silver / Arctic-White light toolkit. Darks carry a cool, greenish-
   neutral undertone so they sit flush with the vibrant green. */
:root {
  /* The Hero — Neon Moss. Spotlight only (≈10%): CTAs, active states, accents. */
  --fitme-accent: #C2D500;
  --fitme-accent-rgb: 194, 213, 0;
  --fitme-accent-dark: #A6B600;
  /* deeper moss for hover / active */

  /* The Anchor — Void Black, and a cool ramp lifting toward Charcoal Slate. */
  --fitme-dark: #0B0B0D;
  /* Void Black — primary dark canvas */
  --fitme-dark-2: #16181A;
  /* lifted void (sections / overlays) */
  --fitme-dark-3: #26292A;
  /* structural dark (frames, pills) */
  --fitme-mid: #3D403E;
  /* Charcoal Slate — cards / structure */
  --fitme-slate: #3D403E;
  /* Charcoal Slate (alias) */
  --fitme-dark-rgb: 11, 11, 13;

  /* Ash Silver — secondary text, borders, inactive UI on dark backgrounds. */
  --fitme-ash: #B8B9BE;
  --fitme-ash-rgb: 184, 185, 190;

  /* Arctic White light toolkit (cool, crisp). */
  --fitme-white: #ffffff;
  --fitme-surface: #F7F8FA;
  /* Arctic White — light section canvas */
  --fitme-surface-2: #ECEEF2;
  --fitme-surface-dark: #DDE0E6;

  /* Text on light surfaces. */
  --fitme-text: #0B0B0D;
  /* Void Black */
  --fitme-text-soft: #3D403E;
  /* Charcoal Slate */
  --fitme-text-muted: #6B6E73;
  /* readable muted gray */

  --fitme-nav-bg: rgba(247, 248, 250, 0.68);
  --fitme-shadow: 0 2px 20px rgba(11, 11, 13, .07);
  --fitme-shadow-lg: 0 8px 40px rgba(11, 11, 13, .13);
  --fitme-radius: 2px;
  --fitme-transition: 0.25s ease;
}

/* ── Bootstrap 4 Overrides ─────────────────────────────────────────────────── */

/* Make Bootstrap rows use our gutters */
.row {
  margin-left: 0;
  margin-right: 0;
}

.container>.row {
  margin-left: -15px;
  margin-right: -15px;
}

/* Remove default outlines, use our focus ring */
input:focus,
select:focus,
button:focus,
textarea:focus {
  outline: none;
}

a:hover,
a:focus {
  text-decoration: none;
  outline: none;
}

ul,
ol {
  padding: 0;
  margin: 0;
}

img {
  max-width: 100%;
}

/* ── Skip to content (accessibility) ───────────────────────────────────────── */
.skip-link {
  position: absolute;
  top: -100px;
  left: 16px;
  z-index: 9999;
  background: var(--fitme-accent);
  color: var(--fitme-dark);
  padding: 12px 20px;
  border-radius: var(--fitme-radius);
  font-weight: 700;
  font-size: .9rem;
  text-decoration: none;
  transition: top .2s;
}

.skip-link:focus {
  top: 8px;
}

/* ── Focus ring (accessibility) ────────────────────────────────────────────── */
:focus-visible {
  outline: 3px solid var(--fitme-accent) !important;
  outline-offset: 2px;
}

/* Reset for elements with their own focus styles */
.site-btn:focus-visible,
.cta-btn:focus-visible {
  outline-color: var(--fitme-dark) !important;
}

/* ── Touch target minimum (WCAG 2.5.5) ─────────────────────────────────────── */
@media (pointer: coarse) {

  .nav-link,
  .footer-menu li a,
  .contact-info-warp a,
  .footer-widget a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

/* ── Base & Typography ─────────────────────────────────────────────────────── */
html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

body {
  font-family: 'Roboto', 'PT Sans', -apple-system, BlinkMacSystemFont, sans-serif;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  color: var(--fitme-text);
  background: var(--fitme-white);
  overflow-x: hidden;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0 0 .5em;
  color: var(--fitme-text);
  font-weight: 700;
  line-height: 1.15;
  text-transform: uppercase;
  letter-spacing: -.02em;
}

h1 {
  font-size: 4.375rem;
}

/* 70px */
h2 {
  font-size: 2.25rem;
}

/* 36px */
h3 {
  font-size: 1.875rem;
}

/* 30px */
h4 {
  font-size: 1.5rem;
}

/* 24px */
h5 {
  font-size: 1.125rem;
}

/* 18px */
h6 {
  font-size: 1rem;
}

p {
  font-size: 1rem;
  color: var(--fitme-text-soft);
  line-height: 1.8;
  margin-bottom: 1rem;
}

/* ── Utility Classes ───────────────────────────────────────────────────────── */
.float_right {
  float: right;
}

.section-title {
  margin-bottom: 1.5rem;
}

.section-title h2 {
  font-size: 2.5rem;
  line-height: 1.2;
  margin-bottom: .5rem;
}

.section-title h2 span {
  color: var(--fitme-accent);
}

.section-title p {
  color: var(--fitme-text-muted);
}

.set-bg {
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
}

.text-white h1,
.text-white h2,
.text-white h3,
.text-white h4,
.text-white h5,
.text-white h6,
.text-white p,
.text-white span,
.text-white li,
.text-white a {
  color: #fff;
}

/* Section anchor offset for sticky nav */
section[id] {
  scroll-margin-top: 72px;
}

/* ── Fade-in animation (used by preloader + hero) ──────────────────────────── */
.fade-in {
  animation: fitmeFadeIn .8s ease forwards;
  opacity: 0;
}

/* Reveal on scroll (IntersectionObserver) */
.revealed {
  animation: fitmeReveal .6s ease forwards;
  opacity: 0;
}

@keyframes fitmeFadeIn {
  from {
    opacity: 0;
    transform: translateY(8px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fitmeReveal {
  from {
    opacity: 0;
    transform: translateY(16px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* ── Buttons ───────────────────────────────────────────────────────────────── */
.site-btn {
  display: inline-block;
  border: none;
  font-size: 1rem;
  font-weight: 700;
  min-width: 200px;
  padding: 16px 36px;
  background: var(--fitme-accent);
  color: var(--fitme-dark);
  text-align: center;
  cursor: pointer;
  border-radius: var(--fitme-radius);
  transition: background var(--fitme-transition), transform var(--fitme-transition);
  text-transform: uppercase;
  letter-spacing: .5px;
}

.site-btn:hover {
  background: var(--fitme-accent-dark);
  color: var(--fitme-dark);
  transform: translateY(-1px);
  box-shadow: 0 4px 16px rgba(var(--fitme-accent-rgb), .35);
}

.site-btn.sb-dark {
  background: var(--fitme-dark-2);
  color: var(--fitme-accent);
}

.site-btn.sb-dark:hover {
  background: var(--fitme-dark-3);
}

.site-btn.sb-line {
  background: transparent;
  border: 2px solid var(--fitme-dark-2);
  color: var(--fitme-dark-2);
  padding: 14px 36px;
}

.site-btn.sb-line:hover {
  background: var(--fitme-dark-2);
  color: var(--fitme-accent);
}

/* ── Bootstrap Nav Overrides ───────────────────────────────────────────────── */
.nav-link {
  font-weight: 700;
  color: var(--fitme-text);
  margin: 0 .6rem !important;
  transition: color var(--fitme-transition);
  position: relative;
}

.nav-link:after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--fitme-accent);
  transition: width var(--fitme-transition);
}

.nav-link:hover:after,
.nav-item.active .nav-link:after {
  width: 100%;
}

.nav-link:hover,
.nav-item.active .nav-link {
  color: var(--fitme-dark);
  background: transparent !important;
}

/* ── CrossFit nav pill ─────────────────────────────────────────────────────── */
.crossfit-nav-link {
  color: #b71c1c !important;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .5px;
  border: 2px solid #b71c1c;
  border-radius: var(--fitme-radius);
  padding: 6px 14px !important;
  transition: all var(--fitme-transition);
}

.crossfit-nav-link:after {
  display: none;
}

/* Hover and current-page state: filled pill, white text (must outrank the
   generic .nav-item.active .nav-link transparent-background rule above) */
.crossfit-nav-link:hover,
.nav-item.active .crossfit-nav-link {
  background: #b71c1c !important;
  color: #fff !important;
}

/* ── Sticky Navbar ─────────────────────────────────────────────────────────── */
.header-section {
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 1000;
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  backdrop-filter: blur(14px) saturate(140%);
  background: var(--fitme-nav-bg);
  border-bottom: 1px solid rgba(0, 0, 0, .04);
}

.site-logo {
  max-width: 150px;
  padding: 12px 0;
}

.header-right {
  float: right;
  padding: 0 !important;
  width: auto;
}

.header-right .hr-box {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: 0 1.2rem;
  height: 10vh;
  background: rgba(var(--fitme-accent-rgb), .12);
  color: var(--fitme-text);
  font-size: .85rem;
  border-radius: 0;
  transition: background var(--fitme-transition);
}

.header-right .hr-box:hover {
  background: rgba(var(--fitme-accent-rgb), .22);
}

.header-right .hr-box .icon {
  font-size: 1.5rem;
  color: var(--fitme-accent);
}

.header-right .hr-box h6 {
  margin: 0;
  font-size: .8rem;
  font-weight: 700;
  color: var(--fitme-text);
  overflow: hidden;
}

.header-right a {
  color: var(--fitme-text);
}

/* ── Hero ──────────────────────────────────────────────────────────────────── */
.hero-section {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  background-color: var(--fitme-dark);
  overflow: hidden;
}

/* Depth gradient — darkens top for nav readability, lifts mid-section */
.hero-section:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg,
      rgba(0, 0, 0, 0.65) 0%,
      rgba(0, 0, 0, 0.40) 25%,
      rgba(0, 0, 0, 0.15) 50%,
      rgba(0, 0, 0, 0.30) 75%,
      rgba(0, 0, 0, 0.55) 100%);
}

/* Neon-Moss grounding accent at the base of the hero. One clean diagonal edge
   (no jagged peak) echoes the brand's straight-line language; the colour fades
   upward and stays low-opacity so the green reads as a spotlight, not a wash. */
.hero-section:after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 72%;
  z-index: 1;
  pointer-events: none;
  background:
    /* soft glow grounding the base, slightly left of centre */
    radial-gradient(62% 62% at 30% 104%, rgba(var(--fitme-accent-rgb), 0.22) 0%, transparent 70%),
    /* gentle upward fade so only the lower hero is tinted */
    linear-gradient(180deg, transparent 46%, rgba(var(--fitme-accent-rgb), 0.13) 100%);
  /* single straight diagonal top edge, rising to the right */
  clip-path: polygon(0 28%, 100% 0, 100% 100%, 0 100%);
}

.hero-section .container {
  z-index: 2;
}

.hero-text {
  padding-top: 60px;
}

.hero-text h1 {
  font-size: 3.8rem;
  font-weight: 900;
  color: #fff;
  text-shadow: 0 2px 40px rgba(0, 0, 0, .5);
  line-height: 1.05;
  letter-spacing: -.5px;
}

.hero-text h1 span {
  color: var(--fitme-accent);
}

.hero-brand {
  display: inline-block;
  font-size: .95rem;
  font-weight: 700;
  letter-spacing: .35em;
  text-transform: uppercase;
  color: var(--fitme-accent);
  margin-bottom: 1rem;
  padding-left: .35em;
  text-shadow: 0 2px 16px rgba(0, 0, 0, .5);
}

.hero-text .site-btn {
  margin-top: 2.5rem;
}

.hero-text .hero-tagline {
  color: #fff;
  font-size: 1.3rem;
  font-weight: 500;
  max-width: 600px;
  margin: 1.25rem auto 0;
  text-shadow: 0 2px 24px rgba(0, 0, 0, .6);
}

.hero-cta-row {
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 2.5rem;
}

.hero-cta-row .site-btn {
  margin-top: 0;
}

.site-btn.sb-ghost {
  background: transparent;
  border: 2px solid #fff;
  color: #fff;
  padding: 14px 36px;
}

.site-btn.sb-ghost:hover {
  background: #fff;
  color: var(--fitme-dark);
  box-shadow: none;
}

/* ── CSS performance: skip rendering off-screen sections ──────────────────── */
.trainers-section,
.service-section,
.schedule-section,
.workhours-section,
.map-section,
.classes-section {
  content-visibility: auto;
  contain-intrinsic-size: 500px;
}

/* ── Section backgrounds (alternating) ─────────────────────────────────────── */
.feature-section {
  background: var(--fitme-white);
}

.trainers-section {
  background: var(--fitme-dark);
  position: relative;
}

.trainers-section:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90deg, transparent, var(--fitme-accent), transparent);
  opacity: .35;
}

.service-section {
  background: var(--fitme-white);
}

.schedule-section {
  background: var(--fitme-surface);
  position: relative;
}

.schedule-section:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90deg, transparent, var(--fitme-accent), transparent);
  opacity: .35;
}

.contact-section {
  background: var(--fitme-dark-2);
}

.workhours-section {
  background: var(--fitme-white);
}

.map-section {
  background: var(--fitme-surface);
  position: relative;
}

.map-section:before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90deg, transparent, var(--fitme-accent), transparent);
  opacity: .35;
}

/* ── Center orphans in flex grids ──────────────────────────────────────────── */
.row.auto-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.row.auto-grid>[class*="col-"] {
  flex: 0 0 auto;
}

.row.auto-grid>.col-6 {
  width: calc(50% - .75rem);
}

@media (min-width: 768px) {
  .row.auto-grid>.col-md-4 {
    width: calc(33.333% - 1rem);
  }
}

@media (min-width: 992px) {
  .row.auto-grid>.col-lg-3 {
    width: calc(25% - 1rem);
  }
}

/* ── Feature / Offer section ───────────────────────────────────────────────── */
.feature-section {
  padding: 100px 0 60px;
}

.icon-box-item {
  text-align: center;
  margin-bottom: 3rem;
}

.icon-box-item .ib-icon {
  width: 72px;
  height: 72px;
  border-radius: var(--fitme-radius);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--fitme-surface);
  margin: 0 auto 1.5rem;
  font-size: 2.5rem;
  color: var(--fitme-accent);
  transition: all var(--fitme-transition);
}

.icon-box-item .ib-icon img {
  max-width: 44px;
  max-height: 44px;
  mix-blend-mode: multiply;
}

.icon-box-item h4 {
  margin-bottom: .75rem;
  font-size: 1.15rem;
}

.icon-box-item p {
  font-size: .9rem;
  color: var(--fitme-text-muted);
}

.icon-box-item:hover .ib-icon {
  background: var(--fitme-accent);
  transform: scale(1.06);
}

.icon-box-item {
  transition: transform var(--fitme-transition);
}

.icon-box-item:hover {
  transform: translateY(-3px);
}

.icon-box-item .ib-icon img {
  transition: filter var(--fitme-transition);
}

.icon-box-item:hover .ib-icon img {
  filter: brightness(0) invert(0);
  /* darken icon on accent bg */
}

/* ── Trainers / Team ───────────────────────────────────────────────────────── */
.trainers-section {
  padding: 100px 0 60px;
}

/* Homepage: sit the team section right under the gallery (no big gap) */
#equipa.trainers-section {
  padding-top: 48px;
}

.trainers-section>h2 {
  margin-bottom: 3rem;
}

.trainer-item {
  text-align: center;
  padding: 0 5px;
  margin-bottom: 2.5rem;
}

.trainer-item .trainer-pic {
  width: 200px;
  height: 200px;
  border-radius: var(--fitme-radius);
  margin: 0 auto 1.5rem;
  overflow: hidden;
  position: relative;
  border: 4px solid var(--fitme-accent);
  box-shadow: var(--fitme-shadow-lg);
  transform: rotate(-3deg);
  /* Springy curve so the square "snaps" upright + lifts on hover */
  transition: transform .4s cubic-bezier(.34, 1.56, .64, 1),
    box-shadow var(--fitme-transition);
}

/* CSS overlay replaces the old small_overlay_white.svg — one less HTTP request */
.trainer-item .trainer-pic:after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: var(--fitme-radius);
  background:
    radial-gradient(ellipse at 30% 20%, rgba(255, 255, 255, 0.25) 0%, transparent 50%),
    radial-gradient(ellipse at 70% 80%, rgba(255, 255, 255, 0.08) 0%, transparent 45%),
    linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, transparent 40%, rgba(0, 0, 0, 0.1) 100%);
  pointer-events: none;
  z-index: 1;
}

.trainer-item .trainer-pic:hover {
  transform: rotate(0deg) translateY(-8px) scale(1.05);
  box-shadow: 0 18px 44px rgba(0, 0, 0, .22);
}

/* Alternate the tilt direction across the grid for a livelier team wall;
   #powerRotation wraps the homepage team cards (the col-* siblings). */
#powerRotation>div:nth-child(even) .trainer-pic {
  transform: rotate(3deg);
}

#powerRotation>div:nth-child(even) .trainer-pic:hover {
  transform: rotate(0deg) translateY(-8px) scale(1.05);
}

.trainer-item .trainer-pic:hover:after {
  background:
    radial-gradient(ellipse at 30% 20%, rgba(255, 255, 255, 0.32) 0%, transparent 50%),
    radial-gradient(ellipse at 70% 80%, rgba(255, 255, 255, 0.10) 0%, transparent 45%),
    linear-gradient(135deg, rgba(255, 255, 255, 0.18) 0%, transparent 40%, rgba(0, 0, 0, 0.08) 100%);
}

.trainer-item .trainer-pic img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: relative;
  z-index: 0;
  background: var(--fitme-surface-2);
  object-position: top;
}

/* Graceful fallback when image src is empty or 404 */
.trainer-item .trainer-pic img[src=""]:after,
.trainer-item .trainer-pic img:not([src]),
.trainer-item .trainer-pic img[src=""] {
  /* Hide broken image icon — parent .trainer-pic already has :after overlay */
  visibility: hidden;
}

.trainer-item h4 {
  margin-bottom: .3rem;
}

.trainer-item>*:last-child {
  font-size: .9rem;
  color: var(--fitme-text-muted);
}

/* Team runs on the dark (Void Black) canvas: light text so names read and the
   accent photo frames pop — the photos' own dark backgrounds now blend in. */
.trainers-section {
  color: var(--fitme-ash);
}

.trainers-section .section-title h2,
.trainers-section .trainer-item h4,
.trainers-section .trainer-item>*:last-child {
  color: #fff;
}

.trainers-section .section-subtitle {
  color: var(--fitme-ash);
}

/* ── Classes / Modalidades ─────────────────────────────────────────────────── */
.service-section {
  padding: 100px 0 60px;
}

.service-section>.container>.row:first-child {
  margin-bottom: 2rem;
}

/* ── Schedule / Horário ────────────────────────────────────────────────────── */
.schedule_container {
  margin-top: 2rem;
  /* Scroll sideways rather than crush columns on narrow desktops/tablets. */
  overflow-x: auto;
}

/* Time-aligned weekly grid: columns are days, rows are start times. Each cell is
   placed by inline `grid-column` (day) + `grid-row` (time) from the PHP, so every
   class lines up on the row of its start time across the whole week. */
.schedule_panel {
  margin-top: 1rem;
  display: grid;
  grid-template-columns: repeat(var(--sched-days, 6), minmax(150px, 1fr));
  /* Explicit rows (day header + Manhã/Tarde dividers + one per start time) so
     the day stripes can span the whole grid with grid-row: 1 / -1. */
  grid-template-rows: repeat(var(--sched-rows, 14), auto);
  align-items: start;          /* cells hug the top of their time row */
  column-gap: 14px;
  row-gap: 14px;
  min-width: 760px;            /* keep columns legible; the container scrolls if narrower */
}

/* Per-day vertical band, painted behind the cards (emitted first in the DOM) so
   each weekday column reads as its own stripe. A faint wash of the brand accent
   green; alternating columns get a deeper tint and the light column gaps act as
   the separators between them. */
.schedule_stripe {
  align-self: stretch;         /* fill every row (panel sets align-items:start) */
  grid-row: 1 / -1;
  border-radius: 8px;
  background: rgba(var(--fitme-accent-rgb), .06);
  pointer-events: none;
}

.schedule_stripe.is-alt {
  background: rgba(var(--fitme-accent-rgb), .13);
}

/* Manhã / Tarde divider spanning the whole week above each block of times. */
.schedule_section_label {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin: .35rem 0 .1rem;
  text-align: center;
}

.schedule_section_label span {
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .18em;
  font-size: .8rem;
  color: var(--fitme-text-muted);
}

.schedule_section_label::before,
.schedule_section_label::after {
  content: '';
  flex: 1 1 0;
  height: 2px;
  border-radius: 2px;
  background: rgba(var(--fitme-accent-rgb), .5);
}

/* Day header (grid row 1). Class cards carry their own time label, so the grid
   needs no separate time gutter — rows align purely by placement. */
.schedule_dayhead {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  margin-bottom: .25rem;
}

/* One (day, time) slot. Concurrent classes (same day + time, different rooms)
   sit SIDE BY SIDE so the overlap reads at a glance; a lone class fills the
   column. They share the column width equally and shrink to fit. */
.schedule_cell {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 8px;
  min-width: 0;
}

.schedule_cell > .schedule_box {
  flex: 1 1 0;
  min-width: 0;        /* allow equal shrink instead of overflowing the column */
}

.rounded_frame {
  background: var(--fitme-dark-3);
  color: #fff;
  border-radius: var(--fitme-radius);
  height: 40px;
  width: 140px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  font-weight: 700;
}

.rounded_frame_grey {
  margin: auto;
  text-align: center;
  background: var(--fitme-surface-2);
  border-radius: var(--fitme-radius);
  height: 44px;
  width: 210px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.rounded_frame_grey p {
  margin: 0;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
}

.rounded_frame_medium {
  margin: auto;
  text-align: center;
  background: var(--fitme-dark-3);
  border-radius: var(--fitme-radius);
  height: 42px;
  width: 250px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.schedule_frame {
  min-width: 230px;
  font-size: 1.1rem;
  font-weight: 700;
  color: #fff !important;
  text-decoration: none;
}

.schedule_box {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: center;
  width: 100%;
  padding: 8px 4px;
  border-radius: var(--fitme-radius);
  text-align: center;
  transition: transform var(--fitme-transition), box-shadow var(--fitme-transition);
}

/* Reserve up to two lines for the class name so 1- and 2-line names produce the
   same card height. */
.schedule_box a {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 2.5em;
  line-height: 1.15;
  text-align: center;
}

.schedule_box a {
  font-size: 11px;
  color: #fff;
}

/* Fixed-height logo slot so every card's icon lines up regardless of the source
   image's aspect ratio. */
.schedule_box img {
  height: 30px;
  width: auto;
  max-width: 84%;
  object-fit: contain;
  margin-bottom: 4px;
  mix-blend-mode: multiply;
  filter: brightness(1.3) contrast(1.1);
}

.schedule_box>div:first-of-type {
  font-size: 16px;
  color: #fff;
}

.schedule_box>div:last-of-type {
  font-size: 13px;
  color: rgba(255, 255, 255, .85);
}

.schedule_box {
  transition: transform .2s ease, box-shadow .2s ease, filter .2s ease;
}

.schedule_box:hover {
  transform: scale(1.08);
  z-index: 100;
  box-shadow: 0 8px 32px rgba(0, 0, 0, .22);
  filter: brightness(1.1);
}

.schedule_info {
  /* Full-bleed footer band the full width of the card. The box is a centered
     flex column, so the strip must align-self:stretch (otherwise it shrinks to
     its text); negative margins then cancel the .schedule_box padding (8px
     top/bottom, 4px sides) so it reaches the card edges. The time sits on its
     own line with the classroom stacked beneath it — consistent at every card
     width (no side-by-side / wrapping differences between wide and narrow). */
  align-self: stretch;
  width: auto;
  margin: auto -4px -8px;       /* margin-top:auto pins the strip to the card foot */
  padding: 6px 8px;
  background: rgba(0, 0, 0, .25);
  border-radius: 0 0 var(--fitme-radius) var(--fitme-radius);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1px;
  min-height: 2.6em;           /* same strip height whether or not a room is set */
  line-height: 1.25;
  font-weight: 700;            /* time — the primary line */
}

/* Classroom — the secondary line under the time. */
.schedule_info b {
  font-weight: 500;
  font-size: .88em;
  opacity: .9;
}

/* Some classes have no room set (<b></b>); don't reserve a blank second line. */
.schedule_info b:empty {
  display: none;
}

/* ── Contact section ───────────────────────────────────────────────────────── */
.contact-section {
  padding: 100px 0 80px;
  color: var(--fitme-ash);
  position: relative;
  overflow: hidden;
  background-color: var(--fitme-dark-2);
}

/* Strong overlay to keep text readable over the background image */
.contact-section:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    linear-gradient(180deg,
      rgba(10, 10, 10, 0.88) 0%,
      rgba(10, 10, 10, 0.78) 40%,
      rgba(10, 10, 10, 0.82) 100%);
}

.contact-section .container {
  z-index: 1;
  position: relative;
}

.contact-section h1,
.contact-section h2,
.contact-section h3,
.contact-section h4,
.contact-section h5,
.contact-section h6 {
  color: #fff;
}

.contact-title {
  margin-bottom: 2.5rem;
}

.contact-info-warp {
  margin-bottom: 2rem;
}

.contact-info-warp h4 {
  color: var(--fitme-accent);
  margin-bottom: .5rem;
  font-size: 1rem;
}

.contact-info .fas,
.contact-info .fab {
  float: left;
  margin-right: 12px;
  padding-top: 4px;
  font-size: 1.2rem;
  color: var(--fitme-accent);
}

.contact-info .cf-text {
  overflow: hidden;
}

.contact-info .cf-text p {
  color: rgba(255, 255, 255, .7);
  line-height: 1.8;
  margin: 0;
}

.contact-info-warp a {
  color: rgba(255, 255, 255, .7);
}

.contact-info-warp a:hover {
  color: var(--fitme-accent);
}

.contact-form input[type=text],
.contact-form input[type=email],
.contact-form textarea {
  width: 100%;
  padding: 14px 20px;
  border: 1px solid rgba(255, 255, 255, .1);
  background: rgba(255, 255, 255, .06);
  color: #fff;
  font-size: .95rem;
  border-radius: var(--fitme-radius);
  margin-bottom: 16px;
  transition: border-color var(--fitme-transition), background var(--fitme-transition);
}

.contact-form input::placeholder,
.contact-form textarea::placeholder {
  color: rgba(255, 255, 255, .35);
}

.contact-form input:focus,
.contact-form textarea:focus {
  border-color: var(--fitme-accent);
  background: rgba(255, 255, 255, .1);
}

.contact-form textarea {
  resize: vertical;
  min-height: 150px;
}

.contact-form .site-btn {
  float: right;
}

/* The Nome/Telemóvel row sits in Bootstrap columns (15px padding); cancel that
   with negative margins so those inputs line up flush with the full-width Razão
   and Mensagem fields below them. */
.contact-form .row {
  margin-left: -15px;
  margin-right: -15px;
}

@media (min-width: 992px) {
  /* Natural column heights — the textarea is stretched by JS to meet the map's
     bottom (see main.js), and the consent + submit button follow just below. */
  #contactos > .container > .row { align-items: flex-start; }
}

/* ── Newsletter ────────────────────────────────────────────────────────────── */
.newsletter-section {
  padding: 80px 0;
  background-color: var(--fitme-dark-3);   /* not shorthand → keeps .set-bg cover */
  position: relative;
  overflow: hidden;
}

.newsletter-section:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    linear-gradient(180deg,
      rgba(31, 31, 31, 0.92) 0%,
      rgba(31, 31, 31, 0.85) 50%,
      rgba(31, 31, 31, 0.92) 100%);
}

.newsletter-section .container {
  z-index: 1;
  position: relative;
}

.newsletter-section .section-title {
  padding-top: .5rem;
}

.newsletter-form {
  margin-left: -55px;
}

.newsletter-form input {
  width: calc(100% - 210px);
  height: 58px;
  padding: 10px 28px;
  float: left;
  border: none;
  border-radius: var(--fitme-radius) 0 0 var(--fitme-radius);
  font-size: .95rem;
}

.newsletter-form .site-btn {
  min-width: 180px;
  border-radius: 0 var(--fitme-radius) var(--fitme-radius) 0;
  height: 58px;
  padding: 0 28px;
}

/* ── Map ───────────────────────────────────────────────────────────────────── */
.map {
  position: relative;
  height: 480px;
  background: var(--fitme-surface-dark);
  border-radius: var(--fitme-radius);
  overflow: hidden;
}

/* Compact map shown in the contacts info column (beside the form). */
.map-side {
  height: 220px;
  margin-top: 1.5rem;
}

.map iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

/* ── Footer ────────────────────────────────────────────────────────────────── */
.footer-section {
  padding: 60px 0 30px;
  background-color: var(--fitme-dark);   /* not shorthand → keeps .set-bg cover */
  color: rgba(255, 255, 255, .6);
  position: relative;
  overflow: hidden;
}

.footer-section:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    linear-gradient(180deg,
      rgba(10, 10, 10, 0.94) 0%,
      rgba(10, 10, 10, 0.88) 50%,
      rgba(10, 10, 10, 0.94) 100%);
}

.footer-section .container {
  z-index: 1;
  position: relative;
}

.footer-widget {
  margin-bottom: 2.5rem;
}

.footer-widget h4 {
  color: #fff;
  margin-bottom: 1.2rem;
  font-size: 1rem;
}

.footer-widget .fw-info-box {
  display: flex;
  align-items: flex-start;
  gap: .8rem;
  margin-bottom: .75rem;
}

.footer-widget .fw-info-box .fas {
  color: var(--fitme-accent);
  font-size: 1.1rem;
  margin-top: 3px;
}

.footer-widget .fw-info-box p {
  color: rgba(255, 255, 255, .55);
  line-height: 1.7;
  margin: 0;
  font-size: .88rem;
}

.footer-widget a {
  color: rgba(255, 255, 255, .55);
}

.footer-widget a:hover {
  color: var(--fitme-accent);
}

.footer-widget .social-links {
  display: flex;
  gap: .5rem;
}

.footer-widget .social-links a {
  font-size: 1.4rem;
  color: rgba(255, 255, 255, .45);
  transition: color var(--fitme-transition), transform var(--fitme-transition);
}

.footer-widget .social-links a:hover {
  color: var(--fitme-accent);
  transform: translateY(-2px);
}

/* Slimmed, centred footer: social row, site menu, legal links. */
.footer-social {
  display: flex;
  justify-content: center;
  gap: .9rem;
  font-size: 1.6rem;
  margin-bottom: 1.5rem;
}
.footer-social a {
  color: rgba(255, 255, 255, .6);
  transition: color var(--fitme-transition), transform var(--fitme-transition);
}
.footer-social a:hover {
  color: var(--fitme-accent);
  transform: translateY(-2px);
}

.footer-menu {
  list-style: none;
  text-align: center;
  padding-top: 0;
  margin: 0 0 1rem;
}

.footer-menu li {
  display: inline-block;
}

.footer-menu li a {
  color: rgba(255, 255, 255, .6);
  font-size: .82rem;
  font-weight: 700;
  padding: 5px 10px;
  margin: 0 .35rem;
  transition: color var(--fitme-transition);
}

.footer-menu li a:hover {
  color: var(--fitme-accent);
}

.footer-legal {
  color: rgba(255, 255, 255, .5);
  margin: .25rem 0;
}
.footer-legal a {
  color: rgba(255, 255, 255, .7);
}
.footer-legal a:hover {
  color: var(--fitme-accent);
}
/* Discreet backoffice link — faint until hovered. */
.footer-legal-sep {
  color: rgba(255, 255, 255, .25);
  margin: 0 .35rem;
}
.footer-admin-link {
  opacity: .35;
  transition: opacity .2s ease;
}
.footer-admin-link:hover {
  opacity: 1;
}

/* ── Page-top header (CrossFit page) ───────────────────────────────────────── */
.page-top-section {
  height: 340px;
  text-align: center;
  padding-top: 140px;
  position: relative;
  overflow: hidden;
  background-color: var(--fitme-dark);
}

/* Depth gradient overlay */
.page-top-section:before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    linear-gradient(180deg,
      rgba(0, 0, 0, 0.55) 0%,
      rgba(0, 0, 0, 0.30) 50%,
      rgba(0, 0, 0, 0.50) 100%);
}

.page-top-section .container {
  z-index: 2;
  position: relative;
}

.page-top-section h1 {
  display: inline-block;
  position: relative;
  font-size: 4rem;
  color: #fff;
  padding-bottom: 16px;
  text-shadow: 0 2px 30px rgba(0, 0, 0, .7);
}

.page-top-section h1:after {
  position: absolute;
  content: "";
  width: 100%;
  height: 5px;
  bottom: 0;
  left: 0;
  background: var(--fitme-accent);
}

/* ── CrossFit video header ─────────────────────────────────────────────────── */
.video {
  position: relative;
  background: #000;
  height: 75vh;
  min-height: 20rem;
  width: 100%;
  overflow: hidden;
}

.video video {
  position: absolute;
  top: 50%;
  left: 50%;
  min-width: 100%;
  min-height: 100%;
  width: auto;
  height: auto;
  z-index: 0;
  transform: translate(-50%, -50%);
}

.video .container {
  position: relative;
  z-index: 2;
}

.video .overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg,
      rgba(0, 0, 0, 0.45) 0%,
      rgba(0, 0, 0, 0.25) 35%,
      rgba(0, 0, 0, 0.35) 65%,
      rgba(0, 0, 0, 0.60) 100%);
}

@media (pointer: coarse) and (hover: none) {
  .video {
    background: url('../img/crossfit.jpg') #000 center/cover no-repeat;
  }

  .video video {
    display: none;
  }
}

/* ── Classes / CrossFit section ────────────────────────────────────────────── */
.classes-section {
  padding: 80px 0;
  /* background-color (not the `background` shorthand) so a .set-bg image keeps
     the cover/no-repeat from .set-bg instead of tiling at natural size. */
  background-color: var(--fitme-white);
}

.classes-section .section-title h2 span {
  color: var(--fitme-accent);
}

/* Variant with a background image (e.g. the CrossFit "O que é o CrossFit?"
   banner): dark gradient overlay for legible white text over the photo. */
.classes-section.has-bg {
  position: relative;
  background-color: var(--fitme-dark);
}
.classes-section.has-bg::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background: linear-gradient(90deg, rgba(11,11,13,.82) 0%, rgba(11,11,13,.62) 55%, rgba(11,11,13,.40) 100%);
}
.classes-section.has-bg .container {
  position: relative;
  z-index: 1;
}
.classes-section.has-bg h2,
.classes-section.has-bg .classes-text p {
  color: #fff;
  text-shadow: 0 2px 12px rgba(0,0,0,.5);
}

.classes-text p {
  color: var(--fitme-text-soft);
  margin-bottom: 2.5rem;
}

/* ── Gallery (Splide overrides) ────────────────────────────────────────────── */
.splide__slide {
  background-size: cover;
}

/* Brand the arrows + pagination (the sea-green theme ships them blue). Loaded
   after the Splide theme CSS, so plain selectors win — no !important needed. */
.splide__arrow {
  background: var(--fitme-accent);
  opacity: 1;
  width: 2.4em;
  height: 2.4em;
  border-radius: var(--fitme-radius);
  transition: background var(--fitme-transition), transform var(--fitme-transition);
}

.splide__arrow svg,
.splide__arrow:hover svg,
.splide__arrow:focus svg {
  fill: var(--fitme-dark);
  width: 1.1em;
  height: 1.1em;
}

.splide__arrow:hover {
  background: var(--fitme-accent-dark);
}

.splide__arrow:disabled {
  opacity: .35;
}

.splide__arrow--prev {
  left: 1em;
}

.splide__arrow--next {
  right: 1em;
}

.splide__pagination__page {
  background: var(--fitme-ash);
  opacity: .6;
}

.splide__pagination__page.is-active {
  background: var(--fitme-accent);
  opacity: 1;
  transform: scale(1.3);
}

/* ── 404 / Error pages ─────────────────────────────────────────────────────── */
.page-top-section h1:after {
  background: var(--fitme-accent);
}

/* ── Modal / Pop-up ────────────────────────────────────────────────────────── */
.modal-content {
  border: none;
  background: transparent !important;
}

/* ── Sticky mobile CTA bar ─────────────────────────────────────────────────── */
.mobile-cta-bar {
  display: none;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 999;
  background: rgba(10, 10, 10, 0.94);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  padding: 8px 12px;
  gap: 10px;
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

.mobile-cta-bar .cta-btn {
  flex: 1;
  text-align: center;
  padding: 12px 8px;
  border-radius: var(--fitme-radius);
  font-weight: 700;
  font-size: .9rem;
  text-decoration: none;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  transition: background var(--fitme-transition);
}

.mobile-cta-bar .cta-btn-call {
  background: transparent;
  color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.25);
}

.mobile-cta-bar .cta-btn-call:active {
  background: rgba(255, 255, 255, 0.1);
}

.mobile-cta-bar .cta-btn-cta {
  background: var(--fitme-accent);
  color: var(--fitme-dark);
}

.mobile-cta-bar .cta-btn-cta:active {
  background: var(--fitme-accent-dark);
}

/* ── Back to top button ────────────────────────────────────────────────────── */
.back-to-top {
  position: fixed;
  bottom: 80px;
  right: 16px;
  z-index: 998;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--fitme-accent);
  color: var(--fitme-dark);
  border: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.2rem;
  font-weight: 700;
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity .25s, visibility .25s, transform .25s;
  box-shadow: 0 2px 12px rgba(0, 0, 0, .25);
}

.back-to-top.visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.back-to-top:active {
  transform: scale(0.95);
}

/* ── Consent checkbox (RGPD, contact + newsletter forms on dark sections) ──── */
.consent-check {
  display: flex;
  gap: 8px;
  align-items: flex-start;
  clear: both;
  padding-top: 12px;
  font-size: .8rem;
  line-height: 1.5;
  font-weight: 400;
  color: rgba(255, 255, 255, .75);
  cursor: pointer;
}

.consent-check input[type=checkbox] {
  width: 16px;
  height: 16px;
  margin-top: 2px;
  flex-shrink: 0;
  accent-color: var(--fitme-accent);
  cursor: pointer;
}

.consent-check a {
  color: #fff;
  text-decoration: underline;
}

.consent-check a:hover {
  color: var(--fitme-accent);
}

/* ── WhatsApp floating button ──────────────────────────────────────────────── */
.whatsapp-float {
  position: fixed;
  bottom: 20px;
  right: 16px;
  z-index: 998;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: #25d366;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.5rem;
  box-shadow: 0 2px 12px rgba(0, 0, 0, .25);
}

.whatsapp-float:hover,
.whatsapp-float:focus {
  background: #1ebe5d;
  color: #fff;
  text-decoration: none;
}

/* ── Mobile schedule: horizontal scroll ────────────────────────────────────── */
.schedule-scroll-hint {
  display: none;
  text-align: center;
  font-size: .75rem;
  color: var(--fitme-text-muted);
  margin-top: .5rem;
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

/* ── ≥ 1200px ──────────────────────────────────────────────────────────────── */
@media (min-width: 1200px) {
  .container {
    max-width: 1176px;
  }
}

/* ── 992px–1199px ──────────────────────────────────────────────────────────── */
@media only screen and (min-width: 992px) and (max-width: 1199px) {
  .hero-text h1 {
    font-size: 3.2rem;
  }

  .header-right .hr-box {
    display: none !important;
  }

  .newsletter-form {
    margin-left: 0;
  }
}

/* ── 768px–991px ───────────────────────────────────────────────────────────── */
@media only screen and (min-width: 768px) and (max-width: 991px) {
  .hero-text h1 {
    font-size: 2.7rem;
  }

  .header-right .hr-box {
    display: none;
  }

  .section-title h2 {
    font-size: 2rem;
  }

  /* Schedule keeps the time-aligned grid here; .schedule_container scrolls it
     sideways when six columns don't fit. */

  .newsletter-section {
    text-align: center;
  }

  .newsletter-form {
    margin-top: 2rem;
    margin-left: 0;
  }

  .newsletter-form input {
    width: 100%;
    margin-bottom: 1rem;
    border-radius: var(--fitme-radius);
  }

  .newsletter-form .site-btn {
    border-radius: var(--fitme-radius);
    width: 100%;
  }

  .footer-menu {
    text-align: center;
  }

  .footer-menu li a {
    margin-left: .5rem;
  }

  .contact-form .site-btn {
    float: none;
    width: 100%;
  }

  .navbar-collapse {
    background: #fff;
    padding: 1rem;
  }

  .nav-link {
    text-align: center;
  }

  .navbar-toggler {
    margin-right: 1rem;
  }

  .trainer-item .trainer-pic {
    width: 150px;
    height: 150px;
  }

  .map {
    height: 320px;
  }
}

/* ── ≤ 767px ───────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 767px) {

  /* Hero */
  .hero-section {
    min-height: max(100svh, 500px);
    min-height: max(100vh, 500px);
  }

  .hero-text {
    padding-top: 120px;
    padding-bottom: 100px;
  }

  .hero-text h1 {
    font-size: 2.1rem;
  }

  .hero-brand {
    font-size: .8rem;
    letter-spacing: .28em;
    margin-bottom: .6rem;
  }

  .hero-text .site-btn {
    min-width: 180px;
    padding: 14px 28px;
    font-size: .95rem;
  }

  /* General */
  .section-title h2 {
    font-size: 1.6rem;
  }

  html {
    scroll-padding-top: 60px;
  }

  /* Sticky mobile bar */
  .mobile-cta-bar {
    display: flex;
  }

  /* The dark footer clears the fixed CTA bar itself, so there's no blank strip
     after it (the old body padding-bottom showed a white gap below the footer). */
  .footer-section {
    padding-top: 44px;
    padding-bottom: 92px;
  }

  /* Glass bar on mobile too, just a touch more opaque for legibility. The open
     dropdown stays solid (.navbar-collapse below) so menu text never competes
     with the page content showing through the blur. */
  .header-section {
    background: rgba(247, 248, 250, 0.85);
  }

  .site-logo {
    padding-left: 12px;
    max-width: 130px;
  }

  .header-right {
    display: none !important;
  }

  .navbar-collapse {
    background: #fff;
    padding: 1rem;
  }

  .navbar-toggler {
    margin-right: .75rem;
  }

  /* The single-day layout + day picker now apply at every width (see the
     "Schedule day filter" block); only small-screen card sizing lives here. */
  .schedule:not(.schedule-export) .schedule_panel {
    max-width: none;          /* use the full phone width */
  }

  .schedule_box {
    padding: 8px 6px;
    gap: 3px;
  }

  .rounded_frame {
    margin: 0 auto .75rem;
    width: 130px;
    height: 36px;
    font-size: 1rem;
  }

  .schedule_box img {
    height: 26px;
  }

  .schedule_box a {
    font-size: 11px;
  }

  .schedule_box>div:first-of-type {
    font-size: 14px;
  }

  .schedule_box>div:last-of-type {
    font-size: 12px;
  }

  .schedule-scroll-hint {
    display: block;
    padding: 0 16px;
  }

  /* Work hours */
  .rounded_frame_grey {
    width: 160px;
  }

  .rounded_frame_medium {
    width: 180px;
  }

  .schedule_frame {
    min-width: auto;
    font-size: .95rem;
  }

  /* Team grid */
  .trainer-item .trainer-pic {
    width: 140px;
    height: 140px;
  }

  /* Gallery */
  #primary-slider .splide__slide {
    height: 280px !important;
  }

  /* Contact form */
  .contact-form input[type=text],
  .contact-form input[type=email],
  .contact-form textarea {
    font-size: 1rem;
    padding: 14px 16px;
    height: 50px;
  }

  .contact-form textarea {
    height: 130px;
  }

  .contact-form .site-btn {
    float: none;
    width: 100%;
    margin-top: .5rem;
  }

  .contact-form input:focus,
  .contact-form textarea:focus {
    box-shadow: 0 0 0 3px rgba(var(--fitme-accent-rgb), 0.35);
    outline: none;
  }

  /* Map */
  .map {
    height: 220px;
  }

  .map-section {
    padding-bottom: 0 !important;
  }

  /* Newsletter */
  .newsletter-section {
    text-align: center;
  }

  .newsletter-form {
    margin-top: 2rem;
    margin-left: 0;
  }

  .newsletter-form input {
    width: 100%;
    margin-bottom: .75rem;
    border-radius: var(--fitme-radius);
    height: 50px;
    font-size: 1rem;
  }

  .newsletter-form .site-btn {
    border-radius: var(--fitme-radius);
    width: 100%;
    height: 50px;
  }

  /* Footer */
  .footer-menu {
    text-align: center;
  }

  .footer-menu li a {
    margin-left: .3rem;
    font-size: .75rem;
    padding: 8px 6px;
  }

  /* Floating buttons: stack above the sticky CTA bar */
  .whatsapp-float {
    bottom: 80px;
  }

  .back-to-top {
    bottom: 140px;
  }

  /* CrossFit page */
  .page-top-section h1 {
    font-size: 2.5rem;
  }
}

/* ── ≤ 479px ───────────────────────────────────────────────────────────────── */
@media only screen and (max-width: 479px) {
  .hero-text h1 {
    font-size: 1.75rem;
  }

  .hero-text {
    padding-top: 100px;
    padding-bottom: 80px;
  }

  .section-title h2 {
    font-size: 1.4rem;
  }

  .trainer-item .trainer-pic {
    width: 120px;
    height: 120px;
  }

  .site-btn {
    min-width: 150px;
    padding: 13px 22px;
    font-size: .88rem;
  }

  /* Contact: stack name + phone */
  .contact-form .col-md-6 {
    width: 100%;
  }

  /* Offer + modalidades: compact icons */
  .icon-box-item .ib-icon {
    width: 56px;
    height: 56px;
  }

  .icon-box-item .ib-icon img {
    max-width: 34px;
    max-height: 34px;
  }

  .icon-box-item h4 {
    font-size: .95rem;
  }


  .rounded_frame {
    width: 100px;
    height: 30px;
    font-size: .85rem;
  }
}

/* ── Reduced motion ────────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  .fade-in {
    animation: none;
    opacity: 1;
  }

  *,
  *:before,
  *:after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
  }

  /* Exempt the modalidades marquee: the .01ms nuke turns its infinite loop
     into a strobing blur (reduced-motion is on by default over Remote Desktop
     and with Windows "animation effects" off). Keep its gentle glide instead;
     JS re-asserts the measured duration inline with !important. */
  .mod-track {
    animation-duration: 220s !important;
  }
}

/* ── Decorated section title (eyebrow + accent underline + subtitle) ────────── */
/* Reusable heading style — add `.deco` to a `.section-title` and optionally an
   `.section-eyebrow` above the h2 and an `.section-subtitle` below it. */
.section-eyebrow {
  display: inline-block;
  font-size: .8rem;
  font-weight: 700;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--fitme-accent);
  margin-bottom: .5rem;
}

/* Short titles (e.g. "Modalidades") would otherwise sit on the eyebrow's line. */
.section-title.deco .section-eyebrow {
  display: block;
}

.section-title.deco h2 {
  position: relative;
  display: inline-block;
  padding-bottom: .7rem;
}

.section-title.deco h2:after {
  content: '';
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 64px;
  height: 3px;
  border-radius: 2px;
  background: var(--fitme-accent);
}

.section-subtitle {
  color: var(--fitme-text-muted);
  margin-top: .9rem;
  margin-bottom: 0;
  font-size: 1rem;
}

/* ── Modalidades: tap card to reveal its description ───────────────────────── */
/* No separate icon — the whole card (icon + name) is the trigger. The
   description reveals as a clean panel laid over the card footprint, so the
   grid never reflows. Click-only (no hover), per request. */
.mod-card {
  position: relative;
}

.mod-card.has-info {
  cursor: pointer;
  outline: none;
}

.mod-card.has-info .ib-icon,
.mod-card.has-info h4 {
  transition: opacity var(--fitme-transition);
}

.mod-card.has-info:hover h4 {
  color: var(--fitme-accent-dark);
}

.mod-card.has-info:focus-visible {
  box-shadow: 0 0 0 3px rgba(var(--fitme-accent-rgb), .35);
  border-radius: var(--fitme-radius);
}

/* Subtle "tap for more" affordance under the name */
.mod-card.has-info h4:after {
  content: 'Saber mais';
  display: block;
  margin-top: .35rem;
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--fitme-accent-dark);
  opacity: .85;
}

.mod-tooltip {
  position: absolute;
  inset: -10px -6px auto -6px;
  z-index: 6;
  min-height: calc(100% + 20px);
  display: flex;
  align-items: center;
  justify-content: center;
  background: #fff;
  color: var(--fitme-text-soft);
  border: 1px solid var(--fitme-surface-2);
  border-top: 3px solid var(--fitme-accent);
  border-radius: var(--fitme-radius);
  box-shadow: var(--fitme-shadow-lg);
  padding: 1rem 1.1rem;
  font-size: .85rem;
  line-height: 1.5;
  text-align: center;
  opacity: 0;
  visibility: hidden;
  transform: scale(.96);
  transition: opacity var(--fitme-transition), transform var(--fitme-transition);
}

.mod-tooltip span {
  display: block;
}

.mod-card.is-open .mod-tooltip {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
}

.mod-card.is-open .ib-icon,
.mod-card.is-open h4 {
  opacity: 0;
}

/* Full-width auto-scrolling modalidade marquee */
.mod-scroll {
  overflow: hidden;
  padding: 8px 0 10px;
}

.mod-track {
  display: flex;
  width: max-content;
  animation: modMarquee 220s linear infinite;
  /* slow fallback; JS tunes it to ~18px/s */
  will-change: transform;
}

/* Pause while hovering, focusing inside, or reading an open card */
.mod-scroll:hover .mod-track,
.mod-scroll:focus-within .mod-track,
.mod-scroll.is-paused .mod-track {
  animation-play-state: paused;
}

/* Trailing margin (not flex gap) keeps every copy the same width, so a
   translateX(-50%) of the duplicated track loops perfectly seamlessly. */
.mod-scroll .mod-card {
  flex: 0 0 auto;
  width: 180px;
  min-height: 200px;
  margin: 0 1rem 0 0;
}

@keyframes modMarquee {
  from {
    transform: translateX(0);
  }

  to {
    transform: translateX(-50%);
  }
}

/* Keep the reveal panel inside the card footprint so it isn't clipped by the
   scroller's overflow (which can't be visible on one axis only). Top-align +
   scroll so long descriptions don't get their first lines hidden by vertical
   centering (you can't scroll back above a centered overflowing flex item). */
.mod-scroll .mod-tooltip {
  inset: 0;
  min-height: 0;
  overflow-y: auto;
  align-items: flex-start;
}

/* ── Horário "save as JPG" button + capture-clone export board ─────────────── */
.schedule-dl-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: none;
  cursor: pointer;
  background: var(--fitme-accent);
  color: var(--fitme-dark);
  font-weight: 700;
  font-size: .85rem;
  letter-spacing: .3px;
  padding: 10px 18px;
  border-radius: var(--fitme-radius);
  transition: background var(--fitme-transition), transform var(--fitme-transition);
}

.schedule-dl-btn:hover {
  background: var(--fitme-accent-dark);
  transform: translateY(-1px);
}

.schedule-dl-btn:disabled {
  opacity: .6;
  cursor: default;
  transform: none;
}

/* Applied (via html2canvas onclone) to the schedule clone inside the capture
   iframe — never visible on the live page. */
.schedule-export {
  width: 1920px;
  padding: 48px 40px 32px;
  box-sizing: border-box;
  background: var(--fitme-surface);
}

/* html2canvas snapshots the page inside a hidden iframe where the .fade-in /
   .revealed entry animations restart from their opacity:0 keyframe — freeze
   every node at its final visible state or the JPG exports blank white. */
.schedule-export,
.schedule-export * {
  animation: none !important;
  transition: none !important;
  opacity: 1 !important;
}

.schedule-stamp {
  text-align: center;
  margin: 22px 0 0;
  font-size: .9rem;
  font-weight: 700;
  letter-spacing: .3px;
  color: var(--fitme-text-soft);
}

/* Force the full desktop time-grid inside the export board, independent of the
   real viewport's media queries (otherwise a phone renders the clone with the
   mobile single-column layout → a tall, mostly-empty image). */
.schedule-export .container {
  max-width: none !important;
  width: 100% !important;
}

.schedule-export .schedule-day-filter,
.schedule-export .schedule-scroll-hint {
  display: none !important;
}

.schedule-export .schedule_container {
  overflow: visible !important;
}

.schedule-export .schedule_panel {
  display: grid !important;
  grid-template-columns: repeat(var(--sched-days, 6), minmax(0, 1fr)) !important;
  align-items: start !important;
  column-gap: 14px !important;
  row-gap: 14px !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  -webkit-mask-image: none !important;
  mask-image: none !important;
}

/* Cells keep their inline grid-row/grid-column placement: the capture iframe is
   1920px wide so the ≤767px single-column override never applies, and inline
   styles outrank these stylesheet rules anyway. */
.schedule-export .schedule_box {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
}

/* ── Schedule day filter — one day on screen, picker bar to switch ─────────────
   On screen the schedule shows a single day with a clickable day-picker bar (the
   same behaviour the phone had, now at every width). The JPG export ignores all
   of this — it re-enables the full-week grid via .schedule-export — so the
   downloaded image is always the complete week. */
.schedule-day-filter {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
  margin: 0 0 1.75rem;
}

.sdf-btn {
  border: 1px solid var(--fitme-surface-2);
  background: #fff;
  color: var(--fitme-text-soft);
  font-weight: 700;
  font-size: .9rem;
  padding: 9px 20px;
  border-radius: var(--fitme-radius);
  cursor: pointer;
  transition: all var(--fitme-transition);
}

.sdf-btn:hover {
  border-color: var(--fitme-accent);
  color: var(--fitme-text);
}

.sdf-btn.active {
  background: var(--fitme-accent);
  border-color: var(--fitme-accent);
  color: var(--fitme-dark);
}

/* On-screen single-day layout — one centred column showing the chosen day's
   classes in time order, keeping the Manhã / Tarde dividers as section breaks.
   Scoped to :not(.schedule-export) so the capture clone keeps the full week. */
.schedule:not(.schedule-export) .schedule_container {
  overflow-x: visible;
}

.schedule:not(.schedule-export) .schedule_panel {
  grid-template-columns: minmax(0, 720px);   /* single, comfortably wide column */
  justify-content: center;                    /* …centred in the section */
  column-gap: 0;
  row-gap: 0;
  min-width: 0;
  margin: 1rem auto 0;
  -webkit-mask-image: none;
  mask-image: none;
}

/* Day stripes are a week-only device; drop them. Keep the Manhã/Tarde labels. */
.schedule:not(.schedule-export) .schedule_stripe {
  display: none;
}
.schedule:not(.schedule-export) .schedule_section_label {
  grid-column: 1;
  margin: .9rem 0 1.1rem;
}

/* Pull the selected day's header + cells into the single column (override the
   inline grid-column that otherwise places them under their weekday). */
.schedule:not(.schedule-export) .schedule_dayhead {
  grid-column: 1 !important;
  margin-bottom: 1.1rem;
}
.schedule:not(.schedule-export) .schedule_cell {
  grid-column: 1 !important;
  justify-content: center;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
/* A lone class stays a tidy card instead of stretching the whole column. */
.schedule:not(.schedule-export) .schedule_cell > .schedule_box {
  flex: 0 1 220px;
}

/* Hide every day but the selected one, plus any empty Manhã/Tarde divider
   (JS toggles .sched-hide by data-day / by section). */
.schedule:not(.schedule-export) .schedule_cell.sched-hide,
.schedule:not(.schedule-export) .schedule_dayhead.sched-hide,
.schedule:not(.schedule-export) .schedule_section_label.sched-hide {
  display: none !important;
}

.schedule-scroll-hint {
  display: none !important;
}

/* ── Aula experimental modal ───────────────────────────────────────────────── */
.modal-content.trial-modal {
  background: #fff !important;
  border-radius: var(--fitme-radius);
  overflow: hidden;
  box-shadow: var(--fitme-shadow-lg);
}

.trial-modal-head {
  position: relative;
  background: var(--fitme-dark-2);
  color: #fff;
  padding: 1.75rem 1.75rem 1.5rem;
}

.trial-modal-head h3 {
  margin: 0 0 .4rem;
  font-weight: 900;
  font-size: 1.5rem;
  color: #fff;   /* override the global dark h1–h6 colour (black-on-dark otherwise) */
}

.trial-modal-head p {
  margin: 0;
  color: var(--fitme-ash);
  font-size: .92rem;
}

.trial-close {
  position: absolute;
  top: 12px;
  right: 16px;
  background: transparent;
  border: none;
  color: #fff;
  font-size: 1.8rem;
  line-height: 1;
  cursor: pointer;
  opacity: .8;
  transition: opacity var(--fitme-transition);
}

.trial-close:hover {
  opacity: 1;
}

.trial-form {
  padding: 1.5rem 1.75rem 1.75rem;
}

.trial-form input,
.trial-form select,
.trial-form textarea {
  width: 100%;
  border: 1px solid var(--fitme-surface-2);
  border-radius: var(--fitme-radius);
  padding: 12px 14px;
  font-size: .95rem;
  color: var(--fitme-text);
  background: #fff;
  transition: box-shadow var(--fitme-transition), border-color var(--fitme-transition);
}

.trial-form input:focus,
.trial-form select:focus,
.trial-form textarea:focus {
  border-color: var(--fitme-accent);
  box-shadow: 0 0 0 3px rgba(var(--fitme-accent-rgb), .25);
}

.trial-form textarea {
  resize: vertical;
}

.trial-form .consent-check {
  margin-bottom: 1rem;
  color: var(--fitme-text-soft);
}

.trial-form .consent-check a {
  color: var(--fitme-text);
}

.trial-form .consent-check a:hover {
  color: var(--fitme-accent-dark);
}

.trial-form .site-btn {
  border: none;
}

/* ══════════════════════════════════════════════════════════════════════════
   Events — homepage banner + landing page (/evento/<slug>)
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Active events — featured inside the hero/header ───────────────────────── */
.event-live-dot {
  width: 9px; height: 9px;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--fitme-accent);
  box-shadow: 0 0 0 0 rgba(var(--fitme-accent-rgb), .7);
  animation: event-pulse 1.8s infinite;
}
@keyframes event-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(var(--fitme-accent-rgb), .7); }
  70%  { box-shadow: 0 0 0 10px rgba(var(--fitme-accent-rgb), 0); }
  100% { box-shadow: 0 0 0 0 rgba(var(--fitme-accent-rgb), 0); }
}

.hero-events {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  margin-bottom: 1.75rem;
}
.hero-event {
  --ev-accent: var(--fitme-accent);
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  gap: 16px;
  width: min(640px, 92vw);
  padding: 12px 14px 12px 18px;
  background: rgba(11, 11, 13, .55);
  border: 1.5px solid rgba(var(--fitme-accent-rgb), .55);
  border-radius: 999px;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  text-decoration: none;
  text-align: left;
  animation: hero-event-glow 2.8s ease-in-out infinite;
  transition: transform var(--fitme-transition), box-shadow var(--fitme-transition), border-color var(--fitme-transition);
}
/* The event's own image as a frosted (blurred + darkened) backdrop inside the
   pill — only when --ev-img is set; otherwise the translucent dark bg shows. */
.hero-event.has-img::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: var(--ev-img);
  background-size: cover;
  background-position: center;
  filter: blur(6px) saturate(1.15) brightness(.5);
  transform: scale(1.18);   /* hide the blur's transparent edges */
  transition: transform var(--fitme-transition);
}
.hero-event.has-img:hover::before { transform: scale(1.24); }
/* Keep the content above the image layer. */
.hero-event > * { position: relative; z-index: 1; }
@keyframes hero-event-glow {
  0%, 100% { box-shadow: 0 10px 34px rgba(0,0,0,.45), 0 0 18px rgba(var(--fitme-accent-rgb), .14); }
  50%      { box-shadow: 0 10px 34px rgba(0,0,0,.45), 0 0 30px rgba(var(--fitme-accent-rgb), .32); }
}
.hero-event:hover {
  transform: translateY(-2px);
  border-color: var(--ev-accent);
  box-shadow: 0 16px 44px rgba(0, 0, 0, .55), 0 0 34px rgba(var(--fitme-accent-rgb), .38);
}
.hero-event-badge {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 13px;
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: var(--fitme-accent);
  background: rgba(var(--fitme-accent-rgb), .14);
  border-radius: 999px;
}
.hero-event-text {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.22;
}
.hero-event-title {
  font-size: 1.12rem;
  font-weight: 800;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hero-event-sub {
  font-size: .9rem;
  color: rgba(255, 255, 255, .72);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.hero-event-go {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 11px 20px;
  font-size: .92rem;
  font-weight: 700;
  white-space: nowrap;
  color: var(--fitme-dark);
  background: var(--ev-accent);
  border-radius: 999px;
}
.hero-event-go i { transition: transform var(--fitme-transition); }
.hero-event:hover .hero-event-go i { transform: translateX(4px); }

@media (max-width: 575px) {
  .hero-event {
    flex-wrap: wrap;
    justify-content: center;
    text-align: center;
    border-radius: 18px;
    gap: 10px;
    padding: 14px;
  }
  .hero-event-text { flex-basis: 100%; align-items: center; }
  .hero-event-title, .hero-event-sub { white-space: normal; }
  .hero-event-go { flex-basis: 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .hero-event { animation: none; }
  .event-live-dot { animation: none; }
}

/* ── Staff preview ribbon ──────────────────────────────────────────────────── */
.event-preview-bar {
  position: sticky;
  top: 0;
  z-index: 1080;
  padding: 8px 16px;
  text-align: center;
  font-size: .85rem;
  font-weight: 600;
  color: #0B0B0D;
  background: #ffd84d;
}

/* ── Landing hero ──────────────────────────────────────────────────────────── */
.event-hero {
  position: relative;
  display: flex;
  align-items: center;
  min-height: 70vh;
  padding: 160px 0 90px;
  background-size: cover;
  background-position: center;
  color: #fff;
}
.event-hero--plain {
  background: linear-gradient(135deg, var(--fitme-dark) 0%, var(--fitme-dark-2) 100%);
}
.event-hero-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11,11,13,.35) 0%, rgba(11,11,13,.78) 100%);
}
.event-hero .container { position: relative; z-index: 2; }
.event-hero-inner { max-width: 760px; }
.event-hero-eyebrow {
  display: inline-block;
  font-size: .8rem;
  font-weight: 700;
  letter-spacing: 3px;
  text-transform: uppercase;
  margin-bottom: 14px;
}
.event-hero-inner h1 {
  font-size: clamp(2.2rem, 5vw, 3.6rem);
  line-height: 1.08;
  margin: 0 0 14px;
  color: #fff;
}
.event-hero-sub {
  font-size: 1.2rem;
  color: rgba(255,255,255,.85);
  margin-bottom: 20px;
}
.event-hero-meta {
  list-style: none;
  padding: 0;
  margin: 0 0 26px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 26px;
}
.event-hero-meta li {
  font-size: 1rem;
  color: rgba(255,255,255,.9);
}
.event-hero-meta i { margin-right: 8px; opacity: .85; }
.event-hero-cta { border: none; color: var(--fitme-dark) !important; }

/* ── Landing body (admin HTML) ─────────────────────────────────────────────── */
.event-body { padding: 70px 0; background: var(--fitme-white); }
.event-body p { font-size: 1.05rem; line-height: 1.7; color: var(--fitme-text-soft); }
.event-body h2, .event-body h3, .event-body h4 { margin-top: 1.6rem; }
.event-body img { max-width: 100%; height: auto; border-radius: var(--fitme-radius); }

/* ── Lead form ─────────────────────────────────────────────────────────────── */
.event-leadform { padding: 70px 0; background: var(--fitme-surface); }
.event-form { margin-top: 26px; }
.event-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.event-field--full { grid-column: 1 / -1; }
.event-field label {
  display: block;
  font-size: .85rem;
  font-weight: 600;
  margin-bottom: 6px;
  color: var(--fitme-text-soft);
}
.event-field input,
.event-field textarea {
  width: 100%;
  padding: 12px 14px;
  font-size: 1rem;
  background: var(--fitme-white);
  border: 1px solid var(--fitme-surface-dark);
  border-radius: var(--fitme-radius);
  color: var(--fitme-text);
}
.event-field input:focus,
.event-field textarea:focus {
  outline: none;
  border-color: var(--fitme-accent);
  box-shadow: 0 0 0 3px rgba(var(--fitme-accent-rgb), .2);
}
/* honeypot — visually hidden, kept in the layout flow for bots */
.event-hp {
  position: absolute !important;
  left: -9999px;
  width: 1px;
  height: 1px;
  opacity: 0;
}
.event-alert {
  padding: 12px 16px;
  margin-bottom: 16px;
  border-radius: var(--fitme-radius);
  font-size: .95rem;
}
.event-alert--ok  { background: #e6f6ea; color: #1c6b34; border: 1px solid #9fdcb0; }
.event-alert--err { background: #fdecec; color: #a32424; border: 1px solid #f1b5b5; }
.event-consent {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  margin-top: 16px;
  font-size: .88rem;
  color: var(--fitme-text-soft);
  cursor: pointer;
}
.event-consent input { margin-top: 3px; flex: 0 0 auto; }
.event-consent a { color: var(--fitme-accent-dark); text-decoration: underline; }
@media (max-width: 575px) {
  .event-form-grid { grid-template-columns: 1fr; }
}

/* ══════════════════════════════════════════════════════════════════════════
   Equipa — título + cartão de detalhe horizontal
   Default card = photo + name + title. The detail card is laid OVER the grid
   (absolute), so opening it never reflows the team wall. Desktop (fine pointer)
   opens it on hover / keyboard focus; touch opens it on tap (.is-open, main.js),
   where it becomes a centred fixed card with its own close button.
   ══════════════════════════════════════════════════════════════════════════ */
/* content-visibility:auto implies paint containment, which would clip the
   overlay at the section edge and trap position:fixed inside the section. */
#equipa.trainers-section {
  content-visibility: visible;
  contain: none;
  position: relative;
  z-index: 3;             /* hover card may overhang the next section */
}

/* While a card is open on touch, lift the whole section over the navbar and
   the mobile CTA bar so the dimmed backdrop covers everything. */
#equipa.trainers-section.has-open-detail {
  z-index: 1100;
}

/* The global scroll-reveal keeps transform:translateY(0) applied (fill
   forwards), and any transform makes an element the containing block for
   position:fixed descendants — which would pin the mobile detail card inside
   its own tile. Reveal the team with opacity only. */
#equipa.revealed,
#equipa .trainer-item.revealed {
  animation-name: fitmeFadeOnly;
}

@keyframes fitmeFadeOnly {
  from { opacity: 0; }
  to   { opacity: 1; }
}

.trainer-item {
  position: relative;
}

/* The name used to be the tile's last child and got its size from the
   `.trainer-item>*:last-child` rule; pin it so it stays the same whether or
   not a title / "Saber mais" follows it. */
.trainers-section .trainer-item h4 {
  font-size: .9rem;
}

/* …and keep that same rule (white, .9rem) off the detail card when it is the
   last child. */
.trainers-section .trainer-item>.trainer-detail {
  color: var(--fitme-text);
  font-size: 1rem;
}

.trainers-section .trainer-item p.trainer-title {
  margin: 0;
  font-size: .85rem;
  font-weight: 600;
  letter-spacing: .04em;
  color: var(--fitme-accent);
}

.trainer-item.has-detail {
  cursor: pointer;
  outline: none;
}

.trainer-more {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: .55rem;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--fitme-ash);
  transition: color var(--fitme-transition);
}

.trainer-more i { font-size: .65rem; }

.trainer-item.has-detail:hover .trainer-more,
.trainer-item.has-detail:focus-visible .trainer-more,
.trainer-item.has-detail.is-open .trainer-more {
  color: var(--fitme-accent);
}

.trainer-detail {
  position: absolute;
  z-index: 30;
  top: -10px;
  left: 50%;
  width: min(560px, calc(100vw - 32px));
  transform: translateX(calc(-50% + var(--td-shift, 0px))) translateY(8px);
  display: flex;
  text-align: left;
  background: #fff;
  color: var(--fitme-text);
  border-radius: 6px;
  border-left: 4px solid var(--fitme-accent);
  box-shadow: 0 24px 60px rgba(0, 0, 0, .45);
  overflow: hidden;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .2s ease, transform .2s ease, visibility 0s linear .2s;
}

.trainer-item.is-open .trainer-detail {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateX(calc(-50% + var(--td-shift, 0px))) translateY(0);
  transition: opacity .2s ease, transform .2s ease, visibility 0s;
}

@media (hover: hover) and (pointer: fine) {
  .trainer-item.has-detail:hover .trainer-detail,
  .trainer-item.has-detail:focus-within .trainer-detail {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translateX(calc(-50% + var(--td-shift, 0px))) translateY(0);
    transition: opacity .2s ease .12s, transform .2s ease .12s, visibility 0s .12s;
  }
  .trainer-item.has-detail:hover { z-index: 31; }
}

.trainer-item.is-open { z-index: 31; }

.td-photo {
  flex: 0 0 38%;
  max-width: 210px;
  background: var(--fitme-dark-2);
}

.td-photo img {
  width: 100%;
  height: 100%;
  min-height: 220px;
  object-fit: cover;
  object-position: top;
  display: block;
}

.td-body {
  flex: 1 1 auto;
  padding: 18px 22px 18px 20px;
  max-height: 340px;
  overflow-y: auto;
}

.td-name {
  display: block;
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--fitme-dark);
  padding-right: 20px;
}

.td-title {
  display: block;
  font-size: .82rem;
  font-weight: 700;
  color: var(--fitme-accent-dark);
  margin-bottom: .6rem;
}

.td-bio {
  font-size: .88rem;
  color: var(--fitme-text-soft);
  margin-bottom: .6rem;
}

.td-bio p:last-child { margin-bottom: 0; }

.td-block + .td-block { margin-top: .55rem; }

.td-label {
  display: block;
  font-size: .68rem;
  font-weight: 800;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--fitme-text-muted);
  margin-bottom: .25rem;
}

.td-block ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.td-block li {
  position: relative;
  padding-left: 14px;
  font-size: .87rem;
  line-height: 1.45;
  color: var(--fitme-text);
}

.td-block li:before {
  content: '';
  position: absolute;
  left: 0;
  top: .55em;
  width: 6px;
  height: 6px;
  border-radius: 1px;
  background: var(--fitme-accent);
}

.td-close {
  position: absolute;
  top: 6px;
  right: 10px;
  z-index: 2;
  background: transparent;
  border: 0;
  font-size: 1.6rem;
  line-height: 1;
  color: var(--fitme-text-muted);
  cursor: pointer;
  display: none;
}

/* Touch / small screens: a centred fixed card over a dimmed page. */
@media (max-width: 767px), (hover: none) {
  .trainer-detail {
    position: fixed;
    top: 50%;
    left: 16px;
    right: 16px;
    width: auto;
    max-width: 560px;
    margin: 0 auto;
    transform: translateY(-46%);
    max-height: calc(100vh - 48px);
  }
  .trainer-item.is-open .trainer-detail { transform: translateY(-50%); }
  .trainer-item.is-open:after {
    content: '';
    position: fixed;
    inset: 0;
    z-index: 29;
    background: rgba(0, 0, 0, .55);
  }
  .td-close { display: block; }
  .td-photo { flex-basis: 34%; }
  .td-photo img { min-height: 180px; }
  .td-body { max-height: calc(100vh - 48px); padding: 16px 16px 16px 14px; }
}

@media (max-width: 339px) {
  .trainer-detail { flex-direction: column; }
  .td-photo { max-width: none; flex-basis: auto; }
  .td-photo img { min-height: 0; height: 160px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   Mensalidades — cartões de preço
   ══════════════════════════════════════════════════════════════════════════ */
.pricing-section {
  padding: 90px 0 70px;
  background: var(--fitme-surface);
}

.pricing-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: stretch;
  gap: 24px;
}

.price-card {
  position: relative;
  flex: 0 1 270px;
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--fitme-surface-2);
  border-radius: 6px;
  padding: 30px 26px 26px;
  box-shadow: var(--fitme-shadow);
  transition: transform var(--fitme-transition), box-shadow var(--fitme-transition);
}

.price-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--fitme-shadow-lg);
}

.price-card.is-featured {
  background: var(--fitme-dark-2);
  border: 2px solid var(--fitme-accent);
  color: var(--fitme-ash);
  box-shadow: 0 18px 50px rgba(var(--fitme-dark-rgb), .28);
}

@media (min-width: 992px) {
  .price-card.is-featured { transform: scale(1.04); }
  .price-card.is-featured:hover { transform: scale(1.04) translateY(-4px); }
}

.pc-badge {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
  white-space: nowrap;
  background: var(--fitme-accent);
  color: var(--fitme-dark);
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: 6px 14px;
  border-radius: 999px;
}

.pc-badge i { font-size: .65rem; }

.price-card .pc-name {
  font-size: 1.35rem;
  font-weight: 900;
  margin: 0 0 .35rem;
  color: var(--fitme-dark);
}

.price-card.is-featured .pc-name { color: #fff; }

.pc-sub {
  font-size: .9rem;
  line-height: 1.45;
  color: var(--fitme-text-muted);
  margin: 0 0 1rem;
}

.price-card.is-featured .pc-sub { color: var(--fitme-ash); }

.pc-price {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 8px;
  padding: .9rem 0 1rem;
  border-top: 1px solid var(--fitme-surface-2);
  border-bottom: 1px solid var(--fitme-surface-2);
  margin-bottom: 1rem;
}

.price-card.is-featured .pc-price { border-color: rgba(255, 255, 255, .12); }

.pc-amount {
  font-size: 2.3rem;
  font-weight: 900;
  line-height: 1;
  color: var(--fitme-dark);
}

.pc-amount.is-text { font-size: 1.35rem; }

.price-card.is-featured .pc-amount { color: var(--fitme-accent); }

.pc-suffix {
  font-size: .88rem;
  color: var(--fitme-text-muted);
}

.price-card.is-featured .pc-suffix { color: var(--fitme-ash); }

.pc-features {
  list-style: none;
  padding: 0;
  margin: 0 0 1.4rem;
  flex: 1 1 auto;
}

.pc-features li {
  display: flex;
  gap: 10px;
  font-size: .92rem;
  line-height: 1.4;
  padding: 4px 0;
  color: var(--fitme-text-soft);
}

.price-card.is-featured .pc-features li { color: #fff; }

.pc-features i {
  color: var(--fitme-accent-dark);
  margin-top: 3px;
  font-size: .8rem;
}

.price-card.is-featured .pc-features i { color: var(--fitme-accent); }

.price-card .pc-cta {
  width: 100%;
  border: none;
  margin-top: auto;
}

.price-card:not(.is-featured) .pc-cta {
  background: var(--fitme-dark-2);
  color: var(--fitme-accent);
}

.price-card:not(.is-featured) .pc-cta:hover {
  background: var(--fitme-dark-3);
  box-shadow: none;
}

@media (max-width: 575px) {
  .pricing-section { padding: 60px 0 50px; }
  .price-card { flex-basis: 100%; }
}

/* ══════════════════════════════════════════════════════════════════════════
   Reviews Google
   ══════════════════════════════════════════════════════════════════════════ */
.reviews-section {
  padding: 90px 0 60px;
  background: var(--fitme-dark);
  color: var(--fitme-ash);
}

.reviews-section .section-title h2 { color: #fff; }

.reviews-summary {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 6px 12px;
  margin: 1rem 0 0;
  color: var(--fitme-ash);
}

.reviews-summary strong {
  font-size: 1.8rem;
  font-weight: 900;
  color: #fff;
  line-height: 1;
}

.rv-stars {
  color: #FBBC04;
  letter-spacing: 2px;
  font-size: .95rem;
}

.reviews-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 22px;
}

.review-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  margin: 0;
  background: var(--fitme-dark-2);
  border: 1px solid var(--fitme-dark-3);
  border-radius: 6px;
  padding: 28px 24px 24px;
}

.rv-avatar {
  width: 84px;
  height: 84px;
  border-radius: 50%;
  overflow: hidden;
  border: 3px solid var(--fitme-accent);
  background: var(--fitme-dark-3);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: .8rem;
  flex: 0 0 auto;
}

.rv-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.rv-avatar span {
  font-size: 2rem;
  font-weight: 900;
  color: var(--fitme-accent);
}

.rv-author {
  display: flex;
  flex-direction: column;
  font-size: 1.05rem;
  font-weight: 800;
  color: #fff;
}

.rv-author a { color: #fff; }
.rv-author a:hover { color: var(--fitme-accent); }

.rv-author small {
  font-size: .78rem;
  font-weight: 400;
  color: var(--fitme-ash);
  margin-top: 2px;
}

.rv-stars-lg {
  font-size: 1.3rem;
  letter-spacing: 3px;
  margin: .6rem 0 .2rem;
}

.rv-text {
  margin: .6rem 0 0;
  font-size: .85rem;
  line-height: 1.55;
  color: var(--fitme-ash);
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.reviews-actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 2rem;
}

.reviews-section .site-btn.sb-line {
  border-color: #fff;
  color: #fff;
}

.reviews-section .site-btn.sb-line:hover {
  background: #fff;
  color: var(--fitme-dark);
}

.reviews-attribution {
  margin: 1.2rem 0 0;
  text-align: center;
  font-size: .75rem;
  color: var(--fitme-ash);
  opacity: .8;
}
