/* GuardaTutti UI kit styles */
@import url("colors_and_type.css");

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  background: var(--bg-page);
  color: var(--fg-1);
  font-family: var(--font-sans);
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; }

/* ─────────────────────────────────────────────────────────────
   Polish base — reset + a11y + mobile UX
   (Sprint post-auditoría — mayo 2026. Ver
   uploads/27_auditoria_polish_fixes_unificado.md)
   ───────────────────────────────────────────────────────────── */

/* A2 · Sin flash gris al tap en mobile. Aplicado global para que cualquier
   elemento interactivo se sienta premium tier. */
* { -webkit-tap-highlight-color: transparent; }

/* B2 · Anti tap-delay 300ms en mobile. `manipulation` deshabilita
   double-tap-to-zoom sobre estos targets — gain: respuesta instantánea. */
button,
a,
[role="button"],
input[type="submit"],
input[type="button"],
.btn,
.js-lightbox {
  touch-action: manipulation;
}

/* C1 · Focus visible — outline solo cuando se navega con teclado.
   Mouse/touch users no ven outline molesto. */
*:focus { outline: none; }
*:focus-visible {
  outline: 2px solid var(--gt-green);
  outline-offset: 3px;
  border-radius: 2px;
}
/* Sobre fondos verdes (CTAs primary), el outline blanco se nota más. */
.btn-primary:focus-visible,
.gt-btn--primary:focus-visible,
button.primary:focus-visible {
  outline-color: var(--gt-ink);
  outline-offset: 4px;
}

/* C3 · Helpers de tamaño de texto cuando hace falta achicar. La base de
   <body> ya está en 16px (colors_and_type.css). Mobile mantiene 16px para
   evitar el auto-zoom de iOS Safari sobre <input> cercanos. */
.text-sm { font-size: 14px; line-height: 1.5; }
.text-xs { font-size: 12px; line-height: 1.45; }

/* C2/C4 · sr-only — label visualmente oculto pero leído por screen readers.
   Patrón estándar WCAG (label inline + input sin label visible). */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* C4 · Skip link — primer elemento focuseable de la página para teclado /
   screen readers. Invisible hasta que recibe focus. */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 9999;
  font-family: var(--font-sans);
  font-weight: 600;
}
.skip-link:focus {
  left: 1rem;
  top: 1rem;
  padding: 12px 20px;
  background: var(--gt-green);
  color: #fff;
  text-decoration: none;
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,.15);
}

/* B1 · Touch targets ≥ 44×44 px en mobile. Aplicado a interactivos
   chicos que la auditoría detectó por debajo del threshold:
     - carrito del header (40×40)
     - swatches/chips de color del Product Picker (.gt-chip ≈ 41 alto)
     - chips de tamaño S/M/L (.gt-sizechip ≈ 43 alto)
     - link a WhatsApp (CTA flotante / inline)
   `:where()` con specificity 0 — no compite con reglas del componente
   que pongan padding propio. `min-height` actúa como piso. */
@media (max-width: 768px) {
  :where(
    .gt-header__cart,
    .gt-cart-trigger,
    [aria-label*="carrito" i],
    .gt-finish__btn,
    .gt-finish-picker__swatch,
    .gt-color-swatch,
    .gt-size__btn,
    .gt-qty button,
    .gt-product-picker button,
    a[href*="wa.me"],
    .gt-chip,
    .gt-sizechip
  ) {
    min-width: 44px;
    min-height: 44px;
  }

  /* BrandMenu del header: el visual sigue siendo 36px (logo 28 + 8 padding)
     para no engordar la barra. Expandimos el área táctil a 44×44 con un
     ::before invisible — WCAG 2.5.5 mide hit area, no visible size.
     Sólo en mobile (en desktop el target ya es opcional). */
  .gt-brandmenu__trigger { position: relative; }
  .gt-brandmenu__trigger::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 100%;
    min-width: 44px;
    height: 44px;
    transform: translate(-50%, -50%);
    /* sin background — sólo extiende el hit area. */
  }
}

/* D2 · Section paddings consistentes. Baseline aplicado con :where() para
   especificidad cero — cualquier regla específica del componente gana,
   así no rompemos paddings ya elegidos a propósito (ej: bandas tight). */
:where(section.gt-section, .gt-section) {
  padding-block: 64px;
}
@media (max-width: 768px) {
  :where(section.gt-section, .gt-section) {
    padding-block: 48px;
  }
}

/* D1 · Hover lift premium para cards interactivas. Las cards ya usan
   var(--shadow-1) (multicapa post-auditoría); este bloque añade el lift
   en hover sin tocar cada componente. */
a.gt-card:hover,
.gt-card.is-interactive:hover,
.gt-sobre__card.is-link:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-2);
}
:where(.gt-card, .gt-sobre__card, .gt-trustband__card, .gt-testi__card) {
  transition: box-shadow 200ms var(--ease-out), transform 200ms var(--ease-out);
}

/* Reduced motion — desactivamos el lift y transitions polish. */
@media (prefers-reduced-motion: reduce) {
  :where(.gt-card, .gt-sobre__card, .gt-trustband__card, .gt-testi__card) {
    transition: none !important;
  }
  a.gt-card:hover,
  .gt-card.is-interactive:hover,
  .gt-sobre__card.is-link:hover {
    transform: none !important;
  }
}

.gt-app {
  max-width: 1120px;
  margin: 0 auto;
  padding-bottom: 110px; /* sticky bar */
}

/* ── Header ─────────────────────────────────────────────── */
.gt-header {
  position: sticky; top: 0; z-index: 30;
  background: rgba(255,255,255,.92);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--gt-line);
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 16px; height: 56px;
}
.gt-header__brand img { height: 26px; }
.gt-header__nav { display: none; gap: 24px; }
.gt-header__nav a { font-weight: 500; font-size: 14px; color: var(--fg-2); }
.gt-header__nav a:hover { color: var(--gt-ink); }
.gt-header__cart {
  position: relative; width: 40px; height: 40px; border-radius: 999px;
  border: 0; background: var(--gt-green-50); color: var(--gt-green-700);
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}
.gt-header__cart i { width: 18px; height: 18px; }
.gt-badge {
  position: absolute; top: -2px; right: -2px;
  background: var(--gt-green); color: #fff; font-size: 10px; font-weight: 700;
  border-radius: 999px; padding: 2px 6px;
}
@media (min-width: 900px) {
  .gt-header { height: 80px; padding: 14px 32px; }
  .gt-header__brand img { height: 32px; }
  .gt-header__nav { display: flex; }
}

/* ── Hero ───────────────────────────────────────────────── */
.gt-hero {
  background: var(--bg-wash);
  display: flex; flex-direction: column;
}
.gt-hero__photo {
  position: relative;
  aspect-ratio: 4/3;
  overflow: hidden;
}
.gt-hero__photo img { width: 100%; height: 100%; object-fit: cover; object-position: center bottom; }
.gt-hero__tag {
  position: absolute; top: 14px; left: 14px;
  background: rgba(255,255,255,.92); backdrop-filter: blur(8px);
  padding: 6px 12px; border-radius: 999px;
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--gt-green-700);
}
.gt-hero__copy { padding: 24px 16px 32px; }
.gt-hero__title {
  font-size: 36px; line-height: 1.05; letter-spacing: -.02em;
  margin: 8px 0 12px; font-weight: 700;}
.gt-hero .lead { margin: 0 0 20px; }
.gt-cta-lg { padding: 16px 24px; font-size: 17px; width: 100%; justify-content: center; }
.gt-cta-lg i { width: 18px; height: 18px; }
.gt-hero__note { margin-top: 12px; text-align: center; }

/* Sprint 33.20 · QW-C Hormozi Perceived Likelihood — testimonio inline
   al fold entre TrustRow y BonosStack. Carolina F. (Nordelta · Familia+pileta)
   matchea avatar premium AMBA target. Mini card clickeable que linkea
   a la sección completa de testimonios. */
.gt-inline-testi {
  display: block;
  margin: 28px 16px;
  padding: 20px 22px;
  background: #fff;
  border: 1px solid var(--gt-line, #e8e8e8);
  border-radius: 16px;
  text-decoration: none;
  color: inherit;
  box-shadow: 0 2px 12px rgba(16, 24, 30, 0.04);
  transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
}
.gt-inline-testi:hover {
  border-color: var(--gt-green-200, #A8DCC4);
  transform: translateY(-1px);
  box-shadow: 0 4px 18px rgba(16, 24, 30, 0.06);
}
.gt-inline-testi__quote {
  display: flex; gap: 12px; align-items: flex-start;
  margin-bottom: 14px;
}
.gt-inline-testi__quote :where(i, svg) {
  width: 20px; height: 20px;
  color: var(--gt-green-700, #2A7A4B);
  flex-shrink: 0;
  margin-top: 2px;
}
.gt-inline-testi__quote p {
  margin: 0;
  font-size: 16px;
  font-style: italic;
  color: var(--gt-ink, #10181E);
  line-height: 1.45;
  font-weight: 500;
}
.gt-inline-testi__quote strong {
  color: var(--gt-green-800, #1F5D39);
  font-style: normal;
  font-weight: 700;
}
.gt-inline-testi__author {
  display: flex; align-items: center; gap: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--gt-line-2, #f0f0f0);
}
.gt-inline-testi__author img {
  width: 40px; height: 40px; border-radius: 50%; object-fit: cover;
  flex-shrink: 0;
}
.gt-inline-testi__meta { flex: 1; min-width: 0; }
.gt-inline-testi__name {
  display: flex; align-items: center; gap: 6px;
  font-weight: 700; font-size: 14px; color: var(--gt-ink);
  line-height: 1.2;
}
.gt-inline-testi__verified :where(i, svg) {
  width: 14px; height: 14px;
  color: var(--gt-green-700, #2A7A4B);
}
.gt-inline-testi__where {
  font-size: 12px; color: var(--fg-3, #6b6b6b);
  margin-top: 2px;
}
.gt-inline-testi__stars {
  display: flex; gap: 1px;
  flex-shrink: 0;
}
.gt-inline-testi__stars :where(i, svg) {
  width: 14px; height: 14px;
  color: #F5A623;
  fill: #F5A623;
}
@media (max-width: 559px) {
  .gt-inline-testi { padding: 16px 18px; }
  .gt-inline-testi__quote p { font-size: 15px; }
}

/* Sprint 33.19B · QW Voss accusation audit — labeling pre-emptivo arriba
   del PriceBlock. Estilo "aside" quote para que no compita con el precio
   ni con el CTA, pero esté visible cuando el cliente evalúa el costo. */
.gt-hero__voss-frame {
  margin: 14px 0 4px;
  padding-left: 12px;
  border-left: 2px solid var(--gt-green-200, #A8DCC4);
  font-size: 13.5px;
  line-height: 1.55;
  color: rgba(16, 24, 30, 0.72);
}
.gt-hero__voss-frame em {
  font-style: italic;
  color: var(--gt-ink, #10181E);
  font-weight: 500;
}

/* Sprint 33.15.2 · QW-A2 Hormozi Risk Reversal — banda fina al nivel del
   precio, entre PriceBlock y CTA. Premium subtle, no compite con el CTA
   pero está visible cuando el cliente evalúa el precio (momento de dudar). */
.gt-hero__guarantee-band {
  display: flex; align-items: center; gap: 10px;
  width: 100%;
  margin: 14px 0 10px;
  padding: 12px 16px;
  background: var(--gt-green-soft, #F4FBF7);
  border: 1px solid var(--gt-green-100, #D2ECDF);
  border-radius: 12px;
  color: var(--gt-ink, #10181E);
  font-size: 13.5px;
  text-decoration: none;
  transition: background .2s ease, border-color .2s ease, transform .15s ease;
}
.gt-hero__guarantee-band:hover {
  background: #EDF8F2;
  border-color: var(--gt-green-200, #A8DCC4);
  transform: translateY(-1px);
}
.gt-hero__guarantee-icon {
  width: 20px; height: 20px;
  color: var(--gt-green-700, #2A7A4B);
  flex-shrink: 0;
}
.gt-hero__guarantee-text {
  flex: 1;
  line-height: 1.4;
}
.gt-hero__guarantee-text strong {
  color: var(--gt-green-800, #1F5D39);
  font-weight: 700;
}
.gt-hero__guarantee-arrow {
  width: 16px; height: 16px;
  color: var(--gt-green-700, #2A7A4B);
  flex-shrink: 0;
  transition: transform .2s ease;
}
.gt-hero__guarantee-band:hover .gt-hero__guarantee-arrow {
  transform: translateX(2px);
}
/* Lucide SVG fallback (sobrescribe los attrs width/height de los SVGs
   que reemplaza MutationObserver). */
.gt-hero__guarantee-band :where(i, svg) {
  width: 20px; height: 20px;
}
.gt-hero__guarantee-band .gt-hero__guarantee-arrow:is(i, svg) {
  width: 16px; height: 16px;
}

/* Prueba social pre-precio: estrellas + reseñas + ventas del último mes.
   Vive entre el eyebrow (categoría) y el H1. Tipografía pequeña, sin gradientes,
   sin emoji de fuego (lee a producto barato). El punto verde con pulse es el único
   acento visual: dice "negocio activo" sin gritar. */
.gt-hero__social {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 8px 10px;
  margin: 6px 0 14px;
  font-size: 13px; color: var(--fg-2);
  line-height: 1.2;
}
.gt-hero__stars { display: inline-flex; gap: 1px; }
.gt-hero__star { width: 14px; height: 14px; color: #d97706; fill: #d97706; }
.gt-hero__star.is-on { color: #f59e0b; }
.gt-hero__rating { font-size: 13px; color: var(--gt-ink); }
.gt-hero__rating strong { font-weight: 700; }
.gt-hero__sep { color: var(--gt-mute); }
/* Sprint 33.2 · Quick Win Hormozi #3 — info inline del cohort en la línea
   de delivery del Hero. Patrón premium artesanal made-to-order (estilo
   Made.com / Floyd / Crate&Barrel custom): info real del producto que
   genera urgencia sin parecer venta. Ícono Lucide calendar + nombre del
   lote + days_left. Auto-actualizado por src/lib/cohort.js. */
.gt-hero__cohort-info {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--gt-ink, #10181E);
  font-weight: 600;
}
.gt-hero__cohort-icon {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
  /* Pequeño lift visual para alinear con el baseline del texto */
  transform: translateY(-0.5px);
}

/* Sprint 33.1 · Reemplazo de .gt-hero__live (era "18 vendidos el último mes")
   por .gt-hero__scarcity ("🔥 Producción artesanal limitada · 16 galpones por mes").
   Razón: scarcity defensible (cap real de producción artesanal) > momentum.
   Color coral coherente con el anchor del Sprint 33 y el sombreado del CTA. */
.gt-hero__scarcity {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; color: var(--fg-2);
  font-weight: 500;
}
/* Sprint 33.2 · Lucide sparkles icon premium (reemplaza emoji 🔥).
   Color verde brand oscuro coherente con el anchor del Sprint 33.
   Pequeño "lift" visual para alinear con el baseline del texto.
   Secondary (la copia en la 2da clause) solo se muestra en mobile cuando
   el badge wrappea — sin el sparkles, la 2da línea quedaría suelta sin
   prefijo visual. */
.gt-hero__scarcity-licon {
  width: 13px; height: 13px;
  flex-shrink: 0;
  color: #1E5C3E;
  transform: translateY(-0.5px);
}
.gt-hero__scarcity-licon--secondary {
  display: none;
}
@media (max-width: 768px) {
  .gt-hero__scarcity-licon--secondary {
    display: inline-block;
    margin-right: 6px;
  }
}
.gt-hero__scarcity-icon {
  font-size: 14px;
  line-height: 1;
  /* Pequeño "lift" visual del emoji para que se alinee bien con el texto */
  transform: translateY(-1px);
}
/* Sprint 33.1 · Las clauses NO se pueden romper internamente (wrap como
   unidad). En desktop entran inline separadas por `·`. En mobile, donde
   la línea es angosta y el texto se parte fea, escondemos el `·` y forzamos
   que la segunda clause caiga en línea propia debajo de la primera. */
.gt-hero__scarcity-clause {
  white-space: nowrap;
}
/* Sprint 33.1 · 🔥 secundario para la 2da línea — solo aparece en mobile.
   Desktop usa el separador `·` y el 🔥 secundario queda oculto. */
.gt-hero__scarcity-icon-secondary {
  display: none;
}
@media (max-width: 768px) {
  .gt-hero__scarcity-sep { display: none; }
  .gt-hero__scarcity-clause:last-of-type {
    display: block;
    width: 100%;
    /* Sin padding-left — el 🔥 secundario hace de prefijo visual de la línea. */
  }
  .gt-hero__scarcity-icon-secondary {
    display: inline-block;
    font-size: 14px;
    line-height: 1;
    transform: translateY(-1px);
    margin-right: 6px;
  }
  /* La social proof line ya es flex-wrap, así que la 2da clause como
     block fuerza un nuevo "row" dentro del flex. */
  .gt-hero__scarcity { flex-wrap: wrap; }
}
/* Legacy classes mantenidas por compat con eventuales referencias en otras
   secciones (Header dot, FAB pulse, etc.). El Hero ya no las usa. */
.gt-hero__live {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; color: var(--fg-2);
}
.gt-hero__dot {
  width: 7px; height: 7px; border-radius: 999px;
  background: var(--gt-green-700);
  box-shadow: 0 0 0 0 rgba(34, 139, 89, .55);
  animation: gt-hero-dot-pulse 2.4s ease-out infinite;
}
@keyframes gt-hero-dot-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(34, 139, 89, .55); }
  70%  { box-shadow: 0 0 0 8px rgba(34, 139, 89, 0); }
  100% { box-shadow: 0 0 0 0 rgba(34, 139, 89, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .gt-hero__dot { animation: none; }
}

/* Lead del Hero: más chico que `.lead` global para no robarle peso al título. */
.gt-hero__lead {
  font-size: 14.5px; line-height: 1.5;
  color: var(--fg-2);
  margin: 0 0 16px;
  max-width: 36ch;
}

/* Sprint 33.3 · Quick Win Hormozi #7 — MAGIC naming "Sistema Patio Premium".
   Va ARRIBA del eyebrow técnico del Hero como sub-eyebrow categórico.
   Estilo: small caps + letter-spacing premium + color verde brand oscuro
   con barrita izquierda como acento (estilo Apple "Pro" / Linear). */
.gt-hero__system-naming {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #1E5C3E;
  margin: 0 0 6px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  position: relative;
}
.gt-hero__system-naming::before {
  content: "";
  display: inline-block;
  width: 18px;
  height: 1.5px;
  background: #1E5C3E;
  border-radius: 1px;
}

/* Sprint 33 · TÍTULO Opción B — 3 beats punchy.
   Ritmo periodístico premium (Apple / Linear). Period en cada línea
   crea pause natural. Tamaño levemente más chico que el "Ordená tu
   patio" original porque ahora hay 3 líneas, no 2 — necesitamos espacio.
   Sprint 33.1 · margin-bottom reducido 24 → 18 (–6px) como parte del
   ajuste de spacing del col derecho para compensar el badge scarcity que
   wrappea a 2 líneas y empuja el CTA hacia abajo. */
.gt-hero__title--beats {
  font-size: clamp(28px, 5vw, 44px);
  line-height: 1.05;
  letter-spacing: -0.02em;
  margin: 4px 0 18px;
}

/* ─────────────────────────────────────────────────────────────
   Sprint 33 · Anchor Hormozi del problema — Patrón "Inline italic"
   Estilo Stripe / Linear / Vercel. Sin caja, sin border, sin bg
   coral. Números en italic + verde brand oscuro + leve aumento
   de peso → lee como editorial premium, no como banner de venta.
   Las cifras destacadas ($5K / $15K / 4 veces) son los puntos
   que el ojo escanea aunque no lea todo el párrafo. */
.gt-hero__anchor--v1 {
  /* Sprint 33.1 · margin-bottom reducido 22 → 8 (–14px) para acercar el
     anchor a las tabs Tarjeta/Transferencia y absorber el shift del
     badge scarcity en 2 líneas. Junto con el title (–6px), suman –20px. */
  margin: 4px 0 8px;
  padding: 0;
  background: none;
  border: none;
  font-size: 15px;
  line-height: 1.6;
  color: var(--fg-2, #4A5862);
  max-width: 44ch;
  font-weight: 400;
}
.gt-hero__anchor--v1 em {
  font-style: italic;
  font-weight: 600;
  color: #1E5C3E; /* Verde brand oscuro, premium */
  font-size: 1.02em;
}

@media (max-width: 768px) {
  .gt-hero__anchor--v1 {
    font-size: 14px;
    margin: 4px 0 18px;
  }
}

/* Sprint 33 · COLOR + TAMAÑO ambos en la columna izquierda — el TAMAÑO
   ya no vive en la columna derecha, ya no necesitamos el "--desktop" slot. */

@media (min-width: 900px) {
  .gt-hero { flex-direction: row; align-items: flex-start; gap: 48px; padding: 32px; }
  .gt-hero__left { flex: 1; display: flex; flex-direction: column; gap: 14px; }
  .gt-hero__photo { aspect-ratio: 4/5; border-radius: 22px; }
  /* Nota de entrega: visible solo en desktop, debajo de la imagen.
     Antes llenaba un hueco gracias a margin-top:auto en los pickers.
     Ahora los pickers van directo abajo de la nota — sin huecos. */
  .gt-hero__delivery-note {
    display: block;
    margin: 4px 0 0;
    font-size: 13.5px; color: var(--fg-2);
    text-align: center;
    line-height: 1.5;
  }
  /* Sprint 33 · Unified picker card en desktop — COLOR + TAMAÑO en
     UNA sola card blanca con divider sutil entre ambos (no dos cards
     separadas como antes). Razón:
       a) Más premium visualmente (Linear / Stripe usan cards unificadas)
       b) Permite que el bottom de la card del LEFT termine alineado
          con el bottom del CTA del RIGHT — sin huecos verticales.
     Paddings internos ajustados para match al pixel del CTA bottom. */
  .gt-hero__pickers {
    background: #fff;
    border-radius: 16px;
    overflow: hidden;
    /* Sprint 33 · Shadow sutil para emparejar peso visual con el CTA del
       RIGHT (que tiene box-shadow verde). Sin shadow, la card de pickers
       parecía "flotar menos" que el CTA y se percibía desalineada aunque
       los bounding boxes coincidieran. */
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.05);
  }
  .gt-hero__size-slot {
    margin-top: 0;
    background: transparent;
    border-radius: 0;
    border-top: 1px solid rgba(0, 0, 0, 0.06);
  }
  /* Override desktop-only de paddings internos de los pickers, para
     que el card unificado termine alineado con el CTA del RIGHT (2px
     más de padding-bottom para cerrar el gap exacto de 2.06px medido). */
  .gt-hero__pickers .gt-finish {
    padding: 18px 18px 10px; /* mobile original: 24 16 8 */
  }
  .gt-hero__pickers .gt-sizepick {
    /* Sprint 33.3 · padding-bottom 19 → 41 (+22px) para compensar la altura
       del nuevo sub-eyebrow "Sistema Patio Premium" agregado en el right col
       por QW#7. Mantiene alignment CTA = picker bottom (sin esto, CTA queda
       22px abajo del picker). Heavy padding pero único punto de ajuste sin
       romper rítmica del right col. */
    padding: 12px 18px 18px;  /* Sprint 34.6.1 v7: 41 → 18 — picker card simétrico (12 top / 18 bottom). Ya no necesitamos los 41 de Sprint 33.3 porque el alignment ahora lo maneja flex stretch + CTA margin-top: auto en .gt-hero. */
  }
  .gt-hero__copy { flex: 1; padding: 0; display: flex; flex-direction: column; }
  .gt-hero__title { font-size: 56px; }
  .gt-cta-lg { width: auto; }
  /* En desktop ocultamos la nota bajo el CTA — ya está arriba a la izquierda. */
  .gt-hero__note { display: none; }
}
/* Mobile: la nota arriba se oculta (ya aparece bajo el CTA). */
@media (max-width: 899px) {
  .gt-hero__delivery-note { display: none; }
}

/* ── Price ──────────────────────────────────────────────── */
.gt-price { margin: 14px 0 18px; }

.gt-price__tabs {
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px;
  margin-bottom: 18px;
}
.gt-price__tab {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: 2px; padding: 12px 14px;
  background: #fff; border: 1.5px solid var(--gt-line);
  border-radius: 12px; cursor: pointer;
  font-family: inherit; text-align: left;
  transition: border-color .15s, background .15s;
  position: relative; min-width: 0;
}
.gt-price__tab:hover { border-color: var(--gt-green-100); }
.gt-price__tab.is-active {
  border-color: var(--gt-green); background: var(--gt-green-50);
}
/* N1: icon a la izquierda del label en flujo grid.
   El botón pasa a 2 cols (icon | label+sub) en lugar de absoluto. */
.gt-price__tab {
  display: grid;
  grid-template-columns: 18px 1fr;
  align-items: center;
  gap: 4px 10px;
}
.gt-price__tab i {
  width: 18px; height: 18px; color: var(--gt-ink-3);
  position: static;
  grid-row: 1 / span 2; align-self: center;
}
.gt-price__tab.is-active i { color: var(--gt-green-700); }
.gt-price__tab > span:nth-child(2) {
  font-size: 14px; font-weight: 700; color: var(--gt-ink);
  white-space: nowrap;
}
.gt-price__tab-sub {
  font-size: 11.5px; color: var(--fg-3); font-weight: 500;
  line-height: 1.25;
  /* En anchos chicos el sub salta a una fila propia que ocupa todo el botón
     (de col 1 a -1) — así "12 cuotas sin interés" fluye horizontal y wrappea
     palabras enteras solo si no entra, en lugar de romper letra por letra. */
  grid-column: 1 / -1;
  margin-top: 2px;
}
.gt-price__tab-badge {
  display: inline-block; padding: 2px 8px; border-radius: 999px;
  background: var(--gt-green); color: #fff;
  font-size: 11px; font-weight: 700; letter-spacing: .02em;
  white-space: nowrap;
  justify-self: start;
  width: fit-content;
}
@media (max-width: 380px) {
  .gt-price__tab > span:nth-child(2) { font-size: 13px; }
  .gt-price__tab-sub { font-size: 11px; }
}

.gt-price__main {
  display: flex; align-items: baseline; gap: 8px;
  /* Sprint 33.1 · Lock min-height para que tarjeta ("12 × $X" con 2 font-sizes
     mezclados → line-box 64px) y transferencia ("$X" font único → line-box 61px)
     produzcan la MISMA altura visible. Sin este lock, alternar tabs movía
     todos los elementos siguientes 3px (incluso el CTA), rompiendo el alignment
     pickers-CTA del Sprint 33. Mide igual en desktop y mobile. */
  min-height: 64px;
}
.gt-price__num {
  font-weight: 700; font-size: 52px; color: var(--gt-green-700);
  letter-spacing: -.02em; line-height: .95;
  font-variant-numeric: tabular-nums;
}
.gt-price__per { font-weight: 600; font-size: 20px; color: var(--fg-2); }
/* A1: prefijo "12 ×" antes del monto — elimina la ambigüedad con "/mes" */
.gt-price__per--lead {
  font-weight: 700; font-size: 28px; color: var(--gt-ink-3);
  letter-spacing: -.01em;
}
.gt-price__terms { font-size: 15px; color: var(--fg-2); margin-top: 6px; }
.gt-price__terms strong { color: var(--gt-ink); font-weight: 700; }
.gt-price__total { font-size: 13px; color: var(--fg-3); margin-top: 4px; }
.gt-price__total--strike {
  text-decoration: line-through; text-decoration-color: var(--gt-mute);
}
.gt-price__note {
  display: flex; align-items: flex-start; gap: 8px;
  margin-top: 12px; padding: 10px 12px; border-radius: 10px;
  background: #F1F5F3; color: var(--gt-ink); font-size: 13px; line-height: 1.45;
  border: 1px solid rgba(16, 24, 30, .06);
}
.gt-price__note i { width: 14px; height: 14px; color: var(--gt-green-700); flex-shrink: 0; margin-top: 2px; }

/* Pista cruzada hacia el otro método de pago — clickable, hace switch */
/* A2: bajamos peso visual para que NO compita con el CTA principal.
   Pasa de bloque verde a info clickeable: fondo blanco, borde delgado,
   sin flecha animada. */
.gt-price__hint {
  display: flex; align-items: center; gap: 10px;
  width: 100%; margin-top: 12px;
  padding: 10px 12px; border-radius: 10px;
  background: #fff; border: 1px solid var(--gt-line);
  color: var(--fg-2); font-size: 13px; line-height: 1.4;
  font-family: inherit; text-align: left;
  cursor: pointer; transition: border-color .15s;
}
.gt-price__hint:hover {
  border-color: var(--gt-green-100);
}
.gt-price__hint > i:first-child,
.gt-price__hint > svg:first-child {
  width: 16px; height: 16px; color: var(--gt-ink-3); flex-shrink: 0;
}
/* Solo el span del texto debe crecer. El span del arrow (.gt-price__hint-arrow)
   tiene flex-shrink:0 + tamaño propio — si le damos flex:1 también, los dos
   spans dividen el ancho 50/50 y la flecha queda flotando lejos del borde. */
.gt-price__hint > span:not(.gt-price__hint-arrow) { flex: 1; min-width: 0; }
.gt-price__hint strong { color: var(--gt-ink); font-weight: 700; }
.gt-price__hint-arrow {
  width: 14px; height: 14px; color: var(--gt-ink-3);
  flex-shrink: 0;
}

/* legacy (kept for preview cards that still use it) */
.gt-price__transfer {
  display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-top: 12px; padding: 8px 12px; border-radius: 12px;
  background: var(--gt-green-50);
  font-size: 14px; color: var(--gt-green-800); font-weight: 600;
}
.gt-price__transfer i { width: 16px; height: 16px; color: var(--gt-green-700); }
.gt-price__transfer-amt { color: var(--gt-green-800); font-weight: 700; }
.gt-price__badge {
  display: inline-block; padding: 3px 9px; border-radius: 999px;
  background: var(--gt-green); color: #fff;
  font-size: 11px; font-weight: 700; letter-spacing: .04em;
}

@media (min-width: 900px) {
  .gt-price__num { font-size: 64px; }
}
.gt-price--compact .gt-price__num { font-size: 22px; }
.gt-price--compact .gt-price__transfer { display: none; }
.gt-price--compact .gt-price__tabs { display: none; }
.gt-price--compact .gt-price__note { display: none; }

/* ── Urgency bar ────────────────────────────────────────── */
.gt-urgency {
  margin: 0 0 16px;
  padding: 12px 14px; border-radius: 12px;
  background: #FFF6E5; border: 1px solid #F4D9A0;
  color: #6B4A0F; font-size: 13.5px; line-height: 1.35;
}
.gt-urgency__row {
  display: flex; align-items: center; gap: 10px;
}
.gt-urgency__icon { width: 18px; height: 18px; flex-shrink: 0; color: #B47B12; }
.gt-urgency__text { flex: 1; min-width: 0; }
.gt-urgency__text strong { color: #4A3208; font-weight: 700; }
.gt-urgency__num {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  font-size: 12px; letter-spacing: .04em;
  color: #4A3208;
  background: rgba(180,123,18,.12);
  padding: 3px 8px; border-radius: 999px;
}
/* A5 + N2: barra más alta (6px) para que la escasez sea más tangible */
.gt-urgency__bar {
  height: 6px; border-radius: 999px;
  background: rgba(180,123,18,.18);
  overflow: hidden; margin-top: 8px;
}
.gt-urgency__bar-fill {
  height: 100%; background: #B47B12;
  transition: width .4s ease;
  border-radius: 999px;
}
.gt-urgency__legend {
  font-size: 11.5px; color: #6B4A0F; margin-top: 6px;
  letter-spacing: .02em;
}
.gt-urgency__legend strong { color: #4A3208; }

/* hot variant: ≤ 1 lugar restante */
.gt-urgency--hot {
  background: #FFEDED; border-color: #F4B0B0; color: #6B1414;
}
.gt-urgency--hot .gt-urgency__icon { color: var(--gt-danger); }
.gt-urgency--hot .gt-urgency__text strong { color: #4A0808; }
.gt-urgency--hot .gt-urgency__num {
  color: #fff; background: var(--gt-danger);
}
.gt-urgency--hot .gt-urgency__bar { background: rgba(184,28,28,.18); }
.gt-urgency--hot .gt-urgency__bar-fill { background: var(--gt-danger); }
.gt-urgency--hot .gt-urgency__legend { color: #6B1414; }
.gt-urgency--hot .gt-urgency__legend strong { color: #4A0808; }

.gt-urgency--out {
  background: #F4F4F5; border-color: var(--gt-line);
  color: var(--fg-2);
}
.gt-urgency--out .gt-urgency__icon { color: var(--gt-mute); }
.gt-urgency--out .gt-urgency__text strong { color: var(--gt-ink); }

/* ── Armado upsell (desplegable) ────────────────────────── */
.gt-armado {
  margin: 28px 16px;
  border-radius: 18px;
  border: 1px solid var(--gt-line);
  background: #fff;
  overflow: hidden;
  transition: border-color .2s, box-shadow .2s;
}
.gt-armado.is-open {
  border-color: rgba(47, 138, 111,.35);
  box-shadow: 0 6px 22px rgba(47, 138, 111,.08);
}
.gt-armado__toggle {
  width: 100%;
  display: flex; align-items: center; gap: 12px;
  padding: 18px 20px;
  background: transparent; border: 0;
  font-family: inherit; text-align: left; cursor: pointer;
  transition: background .15s;
}
.gt-armado__toggle:hover { background: rgba(0,0,0,.02); }
.gt-armado__toggle-icon {
  flex-shrink: 0;
  width: 38px; height: 38px; border-radius: 10px;
  background: var(--bg-wash); color: var(--gt-green-700);
  display: grid; place-items: center;
}
.gt-armado__toggle-icon i { width: 20px; height: 20px; }
.gt-armado__toggle-body { flex: 1; min-width: 0; }
.gt-armado__toggle-eyebrow {
  font-size: 11px; font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--gt-green-700);
  margin-bottom: 2px;
}
.gt-armado__toggle-title {
  font-size: 15px; font-weight: 700; color: var(--gt-ink);
  line-height: 1.3;
}
.gt-armado__toggle-chev {
  width: 18px; height: 18px; color: var(--fg-3); flex-shrink: 0;
  transition: color .2s, transform .35s cubic-bezier(.2,.7,.2,1);
}
.gt-armado.is-open .gt-armado__toggle-chev {
  color: var(--gt-green); transform: rotate(180deg);
}
.gt-armado__panel {
  padding: 4px 22px 22px;
  border-top: 1px dashed var(--gt-line);
}
.gt-armado__panel-inner { padding-top: 18px; }

/* legacy box-style (sin colapso) — fallback si se reusa la versión vieja */
.gt-armado--card {
  padding: 22px;
  background: #fff;
  border: 1.5px solid var(--gt-green-100);
  border-radius: 18px;
  box-shadow: var(--shadow-1);
}
.gt-armado__head { margin-bottom: 10px; }
.gt-armado__title {
  font-size: 22px; font-weight: 700; color: var(--gt-ink);
  margin: 4px 0 0; line-height: 1.2; letter-spacing: -.01em;
}
.gt-armado__desc {
  margin: 0 0 16px; font-size: 14.5px; color: var(--fg-2); line-height: 1.5;
}
.gt-armado__option {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 14px; border-radius: 14px;
  border: 1.5px solid var(--gt-line); background: var(--bg-soft);
  cursor: pointer; transition: border-color .15s, background .15s, box-shadow .15s;
}
.gt-armado__option input { position: absolute; opacity: 0; pointer-events: none; }
.gt-armado__option:hover { border-color: var(--gt-green); }
.gt-armado__option.is-on {
  border-color: var(--gt-green); background: var(--bg-wash);
  box-shadow: 0 0 0 3px rgba(47, 138, 111,.15);
}
.gt-armado__option.is-disabled { opacity: .55; cursor: not-allowed; }
.gt-armado__check {
  flex-shrink: 0; width: 22px; height: 22px; border-radius: 6px;
  border: 1.5px solid var(--gt-line); background: #fff;
  display: flex; align-items: center; justify-content: center;
  color: transparent; transition: all .15s;
  margin-top: 2px;
}
.gt-armado__check i { width: 14px; height: 14px; }
.gt-armado__option.is-on .gt-armado__check {
  background: var(--gt-green); border-color: var(--gt-green); color: #fff;
}
.gt-armado__option-body { flex: 1; min-width: 0; }
.gt-armado__option-row {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 10px; margin-bottom: 4px; flex-wrap: wrap;
}
.gt-armado__option-name {
  font-weight: 700; font-size: 15.5px; color: var(--gt-ink);
}
.gt-armado__price-stack {
  display: flex; align-items: baseline; gap: 8px;
  font-variant-numeric: tabular-nums;
}
.gt-armado__price-mkt {
  font-size: 13px; color: var(--gt-mute);
  text-decoration: line-through; text-decoration-color: var(--gt-danger);
  text-decoration-thickness: 1.5px;
}
.gt-armado__price-ours {
  font-size: 18px; font-weight: 700; color: var(--gt-green-700);
}
.gt-armado__savings {
  display: block; font-size: 13px; color: var(--gt-green-800); font-weight: 600;
}
/* M3: nota de fuente debajo del ahorro — hace defendible la cifra */
.gt-armado__source {
  display: block; font-size: 11.5px; color: var(--fg-3);
  margin-top: 2px; line-height: 1.4;
  font-style: italic;
}
.gt-armado__bullets {
  list-style: none; padding: 0; margin: 14px 0 0;
  display: flex; flex-wrap: wrap; gap: 16px;
}
.gt-armado__bullets li {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; color: var(--fg-2); font-weight: 600;
}
.gt-armado__bullets i { width: 14px; height: 14px; color: var(--gt-green-700); }

/* ── Bonos stack (desplegable) ──────────────────────────── */
.gt-bonos {
  margin: 32px 16px;
  padding: 0;
  overflow: hidden;
}
.gt-bonos__inner { padding: 0; }
.gt-bonos__toggle {
  display: flex; align-items: center; gap: 14px;
  width: 100%; text-align: left;
  /* Sprint 33.10.1 (rev2) · match con --gt-green brand primary (#38A183)
     — mismo color que usa la card de Calculadora (consistencia visual). */
  background: var(--gt-green, #38A183); color: #fff;
  border: 0; border-radius: 22px;
  padding: 24px 22px;
  cursor: pointer;
  /* Sprint 33.10.1 · border-radius transition para acompañar el collapse.
     Sprint 33.12.6 · subió a 1.2s para matchear el collapse expandido del wrap. */
  transition: border-radius 1.2s cubic-bezier(.16, 1, .3, 1), background .15s ease;
  font: inherit;
}
.gt-bonos__toggle:hover { background: #45B194; }
.gt-bonos__toggle.is-open {
  border-radius: 22px 22px 0 0;
}
.gt-bonos__toggle-text { flex: 1; min-width: 0; }
.gt-bonos__toggle-title {
  color: #fff;
  font-size: 22px; line-height: 1.18; letter-spacing: -.015em; font-weight: 700;
  margin-top: 6px;
}
.gt-bonos__toggle-teaser {
  margin-top: 10px;
  font-size: 13.5px; line-height: 1.45;
  color: rgba(255,255,255,.78);
}
.gt-bonos__toggle-teaser strong {
  color: var(--gt-green-200); font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.gt-bonos__chev {
  width: 22px; height: 22px; flex-shrink: 0;
  color: rgba(255,255,255,.55);
  /* Sprint 33.12.6 · subió de .65s a 1.2s. El outer toggle tiene MUCHO
     más contenido a revelar que las accordions internas (.65s sigue OK
     para esas porque su contenido es chico). A misma duración, más
     contenido = más velocidad px/s = feel "snap". 1.2s balancea. */
  transition: transform 1.2s cubic-bezier(.16, 1, .3, 1), color .15s ease;
}
.gt-bonos__toggle.is-open .gt-bonos__chev {
  transform: rotate(180deg); color: var(--gt-green-200);
}
.gt-bonos__panel {
  background: var(--gt-green-900, #14241B);
  color: #fff;
  border-radius: 0 0 22px 22px;
  padding: 4px 22px 24px;
}
.gt-bonos__panel { max-width: 720px; margin: 0 auto; }
.gt-bonos .eyebrow { color: var(--gt-green-200); }
/* Sprint 33.10.1 · letter-spacing tight + tamaño un click menor para que
   "SISTEMA PATIO PREMIUM · ¿QUÉ INCLUYE?" entre en 1 línea en mobile
   (390px viewport). Default .eyebrow tiene .12em letter-spacing y 12px. */
.gt-bonos__toggle .eyebrow {
  letter-spacing: 0;
  font-size: 11px;
}
.gt-bonos__list {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-direction: column; gap: 1px;
  background: rgba(255,255,255,.08);
  border-radius: 14px; overflow: hidden;
}
.gt-bonos__item {
  display: grid;
  grid-template-columns: 36px 1fr;
  grid-template-areas:
    "icon body"
    ".    val";
  gap: 6px 14px;
  padding: 16px 14px;
  /* Sprint 33.10.1 (rev2) · match con --gt-green brand primary (#38A183)
     — mismo color que la card de Calculadora (consistencia visual). */
  background: var(--gt-green, #38A183);
  align-items: flex-start;
  /* Sprint 33.10 · QW#8 — Apple-style scroll reveal.
     Sprint 33.10.1 · timings 2x más lentos + easing cubic-bezier expo-out
     para feel cinematográfico premium ("luxury reveal" vs "snappy").
     Total: ~2.2s de despliegue completo (5 items × 220ms stagger). */
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity .9s cubic-bezier(.16, 1, .3, 1),
    transform 1.1s cubic-bezier(.16, 1, .3, 1);
}
.gt-bonos.is-revealed .gt-bonos__item {
  opacity: 1;
  transform: translateY(0);
  transition-delay: calc(var(--idx, 0) * 220ms);
}
/* Sprint 33.13 · QW-S6 Hormozi Regla 6 — bono killer al final, destacado.
   "Línea directa con el equipo" es el único bono que ningún competidor
   puede replicar (Status real, SPCL). Tratamiento: glow border interno
   + badge "Exclusivo" arriba derecha. NO cambia el bg para mantener
   continuidad visual con el resto del stack — solo enmarca. */
.gt-bonos__item--killer {
  position: relative;
  box-shadow:
    inset 0 0 0 1.5px rgba(255, 255, 255, 0.45),
    0 4px 18px rgba(0, 0, 0, 0.12);
}
.gt-bonos__killer-badge {
  position: absolute;
  top: -10px;
  right: 14px;
  background: var(--gt-ink, #10181E);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 4px 10px;
  border-radius: 999px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
  z-index: 1;
}
/* Respeta el preference de los usuarios que reducen movimiento (a11y) */
@media (prefers-reduced-motion: reduce) {
  .gt-bonos__item {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .gt-bonos.is-revealed .gt-bonos__item {
    transition-delay: 0ms;
  }
}
.gt-bonos__icon { grid-area: icon; }
.gt-bonos__body { grid-area: body; }
.gt-bonos__val  { grid-area: val; }
.gt-bonos__icon {
  width: 36px; height: 36px; border-radius: 10px;
  /* Sprint 33.11 · frosted glass (Apple-style) sobre el fondo verde-brand.
     Antes: var(--gt-green-800) que sobre var(--gt-green) generaba feel
     "verde pantano". Aprobado Damián. */
  background: rgba(255, 255, 255, 0.16);
  border: 1px solid rgba(255, 255, 255, 0.10);
  color: #fff;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  display: flex; align-items: center; justify-content: center;
}
.gt-bonos__icon i { width: 18px; height: 18px; }
.gt-bonos__body { min-width: 0; }
.gt-bonos__t { font-weight: 700; font-size: 15px; color: #fff; }
.gt-bonos__s { font-size: 13.5px; color: rgba(255,255,255,.72); margin-top: 4px; line-height: 1.55; }
/* Sprint 33.12 · QW-S4 Hormozi Regla 5 — "razón por la que existe" cada bono.
   Tratamiento "aside" (quote-style) con border-left subtle + italic + opacity
   reducida, para que NO compita con título/subtítulo pero sume autoridad.
   Sprint 33.12.1 · ahora va colapsado por default, con trigger "¿Por qué te
   lo regalamos?" + chevron. Click expande con grid-rows transition smooth. */
.gt-bonos__why {
  padding-left: 10px;
  border-left: 2px solid rgba(255, 255, 255, 0.20);
  font-size: 12.5px;
  font-style: italic;
  color: rgba(255, 255, 255, 0.62);
  line-height: 1.5;
  padding-top: 6px;
}
/* Trigger inline tipo link — intriga ("¿Por qué?") sin revelar la respuesta */
.gt-bonos__why-trigger {
  appearance: none;
  background: transparent;
  border: 0;
  /* Sprint 33.19A · hit-area expandida 24px → 40px+ (WCAG/Apple HIG mínimo).
     Antes padding:0 daba ~14px tap target, dificultaba el tap mobile. */
  padding: 12px 8px 12px 0;
  margin: 4px 0 0 -8px;
  border-radius: 4px;
  cursor: pointer;
  font: inherit;
  font-size: 12.5px;
  font-style: italic;
  color: rgba(255, 255, 255, 0.65);
  letter-spacing: 0;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: color .15s ease;
}
.gt-bonos__why-trigger:hover { color: rgba(255, 255, 255, 0.95); }
.gt-bonos__why-trigger i {
  width: 14px;
  height: 14px;
  /* Sprint 33.12.2 · chevron más suave (.35s → .55s + expo-out) */
  transition: transform .55s cubic-bezier(.16, 1, .3, 1);
}
.gt-bonos__why-trigger.is-open i { transform: rotate(180deg); }
/* Wrap colapsable usando grid-template-rows 0fr → 1fr (smooth height anim).
   Sprint 33.12.2 · timing más suave (.4s → .65s + expo-out) y fade-in del
   contenido para que aparezca/desaparezca con elegancia, no con brusquedad. */
.gt-bonos__why-wrap {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows .65s cubic-bezier(.16, 1, .3, 1);
}
.gt-bonos__why-wrap.is-open { grid-template-rows: 1fr; }
.gt-bonos__why-wrap > .gt-bonos__why {
  overflow: hidden;
  min-height: 0;
  opacity: 0;
  transform: translateY(-4px);
  /* Sprint 33.12.4 · duración del contenido = duración del wrap (.65s)
     para que abrir y cerrar se sientan SIMÉTRICOS. Antes el opacity era
     .45s vs height .65s → al cerrar el contenido desaparecía antes que
     el wrap terminara de colapsar → feel brusco. */
  transition: opacity .65s cubic-bezier(.16, 1, .3, 1),
              transform .65s cubic-bezier(.16, 1, .3, 1);
}
.gt-bonos__why-wrap.is-open > .gt-bonos__why {
  opacity: 1;
  transform: translateY(0);
  /* Sin transition-delay para mantener simetría perfecta abrir↔cerrar. */
}
.gt-bonos__foot { font-size: 11.5px; color: rgba(255,255,255,.5); margin-top: 6px; font-style: italic; }
.gt-bonos__val {
  text-align: left; display: flex; flex-direction: row; align-items: baseline; gap: 8px; flex-wrap: wrap;
}
.gt-bonos__val-num {
  /* Sprint 33.11 · blanco puro vs var(--gt-green-200) (mint washed).
     Más legible y más premium sobre el fondo verde-brand. */
  font-weight: 700; font-size: 17px; color: #fff;
  font-variant-numeric: tabular-nums;
}
.gt-bonos__val-tag {
  font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase;
  /* Sprint 33.11 · subido de .55 a .65 para mejor jerarquía secundaria. */
  color: rgba(255,255,255,.65); font-weight: 600;
}
.gt-bonos__val-tag--lg { font-size: 11px; }
.gt-bonos__total {
  display: flex; align-items: baseline; justify-content: space-between;
  margin-top: 16px; padding: 16px 14px;
  background: var(--gt-green); color: #fff; border-radius: 14px;
}
.gt-bonos__total-label { font-weight: 700; font-size: 14px; letter-spacing: .04em; text-transform: uppercase; }
.gt-bonos__total-num { font-weight: 700; font-size: 22px; font-variant-numeric: tabular-nums; }

/* Cierre Hormozi: total recibido / tu inversión / ahorrás */
.gt-bonos__cierre {
  margin-top: 22px;
  padding: 22px;
  background: #fff;
  border-radius: 16px;
  display: flex; flex-direction: column; gap: 4px;
  box-shadow: 0 0 0 1px rgba(255,255,255,.08), 0 8px 30px rgba(0,0,0,.18);
}
.gt-bonos__cierre-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--gt-line);
}
.gt-bonos__cierre-row:nth-child(2) { border-bottom-color: var(--gt-line-2); }
.gt-bonos__cierre-row--ahorro {
  border-bottom: 0;
  margin-top: 6px;
  padding: 14px 16px;
  background: var(--gt-green-soft);
  border-radius: 12px;
  border: 1.5px solid var(--gt-green-100);
}
.gt-bonos__cierre-label {
  font-weight: 600; font-size: 14px; color: var(--fg-2);
  display: flex; align-items: center; gap: 8px;
}
/* Sprint 33.12.3 · BUG FIX: Lucide reemplaza el <i data-lucide> con
   un <svg> directo via MutationObserver. El selector `i` solo dejaba
   el SVG en su tamaño default (24×24) → ícono enorme al lado del label.
   Solución: targetear AMBOS (i + svg) con flex-shrink:0 también. */
.gt-bonos__cierre-label :where(i, svg) {
  width: 16px; height: 16px;
  color: var(--gt-green-700);
  flex-shrink: 0;
}
.gt-bonos__cierre-row--ahorro .gt-bonos__cierre-label {
  color: var(--gt-green-800); font-weight: 700; font-size: 15px;
}
.gt-bonos__cierre-num {
  font-weight: 700; font-size: 18px; color: var(--gt-ink);
  font-variant-numeric: tabular-nums;
  letter-spacing: -.01em;
}
.gt-bonos__cierre-num--ours { color: var(--gt-ink); font-size: 22px; }
.gt-bonos__cierre-num--save {
  color: var(--gt-green-700); font-size: 26px;
}
@media (min-width: 700px) {
  .gt-bonos__cierre-num--save { font-size: 32px; }
  .gt-bonos__cierre-num--ours { font-size: 26px; }
}
/* M2(b): desglose chico debajo del valor recibido */
.gt-bonos__cierre-breakdown {
  font-size: 12px; color: var(--fg-3); line-height: 1.4;
  margin-top: -2px; margin-bottom: 4px;
  font-variant-numeric: tabular-nums;
}
/* A4: estilos para la línea "Incluye X de descuento por pago contado" */
.gt-bonos__cierre-sub {
  font-size: 12.5px; color: var(--fg-3); line-height: 1.4;
  margin-top: -4px; padding-left: 0;
  font-style: italic;
  font-variant-numeric: tabular-nums;
}
@media (min-width: 700px) {
  .gt-bonos__title { font-size: 32px; }
  .gt-bonos__t { font-size: 16px; }
  .gt-bonos__item {
    grid-template-columns: 36px 1fr auto;
    grid-template-areas: "icon body val";
    gap: 14px;
    align-items: flex-start;
  }
  .gt-bonos__val {
    text-align: right; flex-direction: column; align-items: flex-end; gap: 2px;
    flex-wrap: nowrap;
  }
  .gt-bonos__val-num { white-space: nowrap; }
}

/* ── Garantía hero ──────────────────────────────────────── */
.gt-garantia {
  margin: 0;
  padding: 56px 16px;
  background: linear-gradient(180deg, var(--gt-green-soft) 0%, #fff 100%);
}
.gt-garantia__inner { max-width: 920px; margin: 0 auto; }
.gt-garantia__title {
  /* Sprint 33.19A · H2 unificado a 32px mobile baseline (era 30). */
  font-size: 32px; line-height: 1.1; letter-spacing: -.02em;
  margin: 8px 0 12px; color: var(--gt-ink); font-weight: 700;
}
.gt-garantia__lead {
  font-size: 16px; color: var(--fg-2); margin: 0 0 24px; max-width: 640px;
}
.gt-garantia__table {
  background: #fff; border: 1px solid var(--gt-line);
  border-radius: 14px; overflow: hidden;
  box-shadow: var(--shadow-1);
}
.gt-garantia__row {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1.4fr 1.4fr;
  gap: 8px;
  padding: 14px 16px;
  border-top: 1px solid var(--gt-line-2);
  font-size: 13px;
  align-items: center;
}
.gt-garantia__row:first-child { border-top: 0; }
.gt-garantia__row--head {
  background: var(--bg-soft);
  font-weight: 700; font-size: 11.5px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--fg-3);
}
.gt-garantia__row--hl {
  background: var(--gt-green-soft);
  border-top: 2px solid var(--gt-green);
  border-bottom: 2px solid var(--gt-green);
}
.gt-garantia__row--hl .gt-garantia__mat { color: var(--gt-green-800); }
.gt-garantia__mat { font-weight: 700; color: var(--gt-ink); }
.gt-garantia__source {
  font-size: 12px; color: var(--fg-3); margin: 14px 0 0;
}

/* ── Garantía promesa (accionable) ──────────────────────── */
.gt-promesa {
  margin: 0;
  padding: 56px 16px;
  background: var(--gt-green-soft);
}
.gt-promesa__inner { max-width: 920px; margin: 0 auto; }
.gt-promesa__title {
  /* Sprint 33.19A · H2 unificado a 32px mobile baseline (era 30). */
  font-size: 32px; line-height: 1.1; letter-spacing: -.02em;
  margin: 8px 0 12px; color: var(--gt-ink); font-weight: 700;
}
.gt-promesa__lead {
  font-size: 16px; color: var(--fg-2); margin: 0 0 28px; max-width: 640px; line-height: 1.55;
}
.gt-promesa__sub {
  font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--gt-ink); margin-bottom: 14px;
  display: flex; align-items: center; gap: 8px;
}
.gt-promesa__sub i { width: 14px; height: 14px; }
.gt-promesa__sub--ok { color: var(--gt-green-700); }
.gt-promesa__sub--no { color: var(--gt-ink-3); }

/* Steps card (3 pasos en horizontal) */
.gt-promesa__steps-card {
  list-style: none; padding: 22px;
  margin: 0 0 20px;
  background: #fff; border-radius: 16px;
  border: 1px solid var(--gt-line); box-shadow: var(--shadow-1);
  display: grid; grid-template-columns: 1fr; gap: 18px;
}
.gt-promesa__step {
  display: flex; gap: 14px; align-items: flex-start;
}
/* M4: números de paso más grandes para subir el peso visual de la sección */
.gt-promesa__num {
  flex-shrink: 0; width: 44px; height: 44px; border-radius: 50%;
  background: var(--gt-green); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 18px;
  box-shadow: 0 4px 12px rgba(47, 138, 111,.25);
}
.gt-promesa__step-body { min-width: 0; flex: 1; }
.gt-promesa__step-t {
  font-weight: 700; font-size: 15.5px; color: var(--gt-ink);
  display: flex; align-items: center; gap: 8px;
}
.gt-promesa__step-t i { width: 16px; height: 16px; color: var(--gt-green-700); }
.gt-promesa__step-s { font-size: 13.5px; color: var(--fg-2); margin-top: 4px; line-height: 1.5; }

.gt-promesa__cover {
  display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
  background: #fff; border-radius: 16px; padding: 22px;
  border: 1px solid var(--gt-line); box-shadow: var(--shadow-1);
}
.gt-promesa__col { min-width: 0; }
.gt-promesa__bullets {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-direction: column; gap: 8px;
  font-size: 13.5px; color: var(--fg-2); line-height: 1.4;
}
.gt-promesa__bullets li {
  position: relative; padding-left: 18px;
}
.gt-promesa__bullets li::before {
  content: "✓"; position: absolute; left: 0; top: 0;
  color: var(--gt-green-700); font-weight: 700;
}
.gt-promesa__bullets--no li::before { content: "·"; color: var(--gt-mute); font-size: 18px; line-height: 1; }
.gt-promesa__condition {
  display: flex; gap: 14px; align-items: flex-start;
  background: #FFF8EC;
  border: 1px solid #F5D899;
  border-radius: 14px;
  padding: 16px 18px;
  margin: 18px 0 0;
}
.gt-promesa__condition-icon {
  flex-shrink: 0;
  width: 36px; height: 36px;
  display: inline-flex; align-items: center; justify-content: center;
  background: #F59E0B;
  color: #fff;
  border-radius: 10px;
}
.gt-promesa__condition-icon i { width: 20px; height: 20px; }
.gt-promesa__condition-body { flex: 1; min-width: 0; }
.gt-promesa__condition-t {
  font-family: var(--ff-display);
  font-size: 15px; font-weight: 600; color: var(--gt-ink);
  margin-bottom: 4px;
}
.gt-promesa__condition-s {
  font-size: 13.5px; line-height: 1.55; color: var(--fg-2);
}
.gt-promesa__condition-s strong { color: var(--gt-ink); font-weight: 700; }

.gt-mantreal {
  margin: 14px 0 0;
  background: #F7FBF9;
  border: 1px solid #DDEBE4;
  border-radius: 14px;
  padding: 16px 18px;
}
.gt-mantreal__head {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--ff-display);
  font-size: 13px; font-weight: 700; letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--gt-ink);
  margin-bottom: 10px;
}
.gt-mantreal__head i { width: 16px; height: 16px; color: var(--gt-green); }
.gt-mantreal__head em { font-style: normal; font-weight: 500; color: var(--fg-2); letter-spacing: 0.02em; }
.gt-mantreal__list {
  list-style: none; padding: 0; margin: 0;
  display: flex; flex-direction: column; gap: 6px;
  font-size: 14px; line-height: 1.5; color: var(--fg-1);
}
.gt-mantreal__list li {
  position: relative; padding-left: 22px;
}
.gt-mantreal__list li::before {
  content: "✓"; position: absolute; left: 0; top: 0;
  color: var(--gt-green); font-weight: 700;
}
.gt-mantreal__src {
  margin: 12px 0 0; padding-top: 10px;
  border-top: 1px dashed #DDEBE4;
  font-size: 12.5px; line-height: 1.5; color: var(--fg-3);
}
.gt-mantreal__src strong { color: var(--fg-2); font-weight: 600; }

.gt-promesa__foot {
  margin: 14px 0 0; font-size: 12.5px; color: var(--fg-3); line-height: 1.5;
}
.gt-promesa__foot strong { color: var(--gt-ink); font-weight: 700; }
@media (max-width: 600px) {
  .gt-promesa__cover { grid-template-columns: 1fr; gap: 24px; }
}
@media (min-width: 800px) {
  .gt-promesa__title { font-size: 36px; }
  .gt-promesa__steps-card { grid-template-columns: repeat(3, 1fr); gap: 24px; padding: 28px; }
}

/* ── Comparativa GT vs galpón típico ────────────────────── */
.gt-cmp {
  margin: 0;
  padding: 56px 16px;
  background: #fff;
}
.gt-cmp__inner { max-width: 1140px; margin: 0 auto; }
.gt-cmp__title {
  /* Sprint 33.19A · H2 unificado a 32px mobile baseline (era 30). */
  font-size: 32px; line-height: 1.1; letter-spacing: -.02em;
  margin: 8px 0 12px; color: var(--gt-ink); font-weight: 700;
}
.gt-cmp__title-em { color: var(--gt-green-700); }
.gt-cmp__lead {
  font-size: 16px; color: var(--fg-2); margin: 0 0 24px; max-width: 640px; line-height: 1.55;
}
.gt-cmp__foot {
  margin: 14px 0 0; font-size: 12.5px; color: var(--fg-3); line-height: 1.5;
}
.gt-cmp__table {
  border: 1px solid var(--gt-line); border-radius: 16px; overflow: hidden;
  background: #fff; box-shadow: var(--shadow-1);
}
.gt-cmp__row {
  display: grid;
  grid-template-columns: 1.25fr 1fr 1fr 1.05fr;
  border-top: 1px solid var(--gt-line-2);
  font-size: 13px;
}
.gt-cmp__row:first-child { border-top: 0; }
.gt-cmp__cell {
  padding: 14px 12px;
  display: flex; align-items: center; gap: 6px;
  color: var(--fg-2); line-height: 1.35;
  white-space: normal;
}
.gt-cmp__cell--tema {
  background: var(--bg-soft);
  font-weight: 700; color: var(--gt-ink); font-size: 13px;
}
.gt-cmp__cell--gt {
  background: var(--gt-green-soft);
  color: var(--gt-green-800); font-weight: 600;
}
.gt-cmp__check { width: 16px; height: 16px; color: var(--gt-green-700); flex-shrink: 0; }
.gt-cmp__row--head .gt-cmp__cell {
  background: var(--gt-ink); color: #fff;
  font-size: 12px; letter-spacing: .08em; text-transform: uppercase; font-weight: 700;
}
.gt-cmp__row--head .gt-cmp__cell--tema { background: var(--gt-ink); color: rgba(255,255,255,.5); }
.gt-cmp__row--head .gt-cmp__cell--gt {
  background: var(--gt-green); color: #fff;
}

/* Sprint 33.3 · Quick Win Hormozi #6 — filas cuantitativas + total destacado.
   Las 3 últimas filas de la tabla (cuantitativas) reciben tratamiento
   visual distinto del resto:
     - .gt-cmp__row--num: filas con números grandes (galpón + daño equipo)
     - .gt-cmp__row--total: fila final con TOTAL REAL destacada (cierre Hormozi) */
.gt-cmp__row--num .gt-cmp__cell--num {
  font-size: 18px;
  font-weight: 700;
  line-height: 1.2;
  align-items: flex-start;
  flex-direction: column;
  gap: 2px;
}
.gt-cmp__row--num .gt-cmp__cell--num.gt-cmp__cell--gt {
  flex-direction: row;
  align-items: center;
  gap: 6px;
}
.gt-cmp__row--num .gt-cmp__cell--gt .gt-cmp__check + span {
  font-size: 18px;
  font-weight: 700;
}
.gt-cmp__num-sub {
  font-size: 11px;
  font-weight: 400;
  color: var(--fg-3);
  letter-spacing: 0;
  line-height: 1.3;
  margin-top: 2px;
}
/* Sprint 33.4 · ARS subscript debajo del USD principal en la fila de
   daño al equipo. Estilo más compacto y discreto para no competir con
   el USD que es el anchor primario consistente con el Hero. */
.gt-cmp__num-ars {
  display: block;
  font-size: 12px;
  font-weight: 500;
  color: var(--fg-2);
  line-height: 1.3;
  margin-top: 2px;
  letter-spacing: 0;
}
.gt-cmp__cell--gt .gt-cmp__num-sub {
  color: rgba(0, 0, 0, 0.55);
  display: block;
  flex-basis: 100%;
  margin-left: 24px;
  margin-top: 4px;
}
.gt-cmp__na {
  font-size: 13px;
  font-style: italic;
  color: var(--fg-3);
  font-weight: 500;
}

/* Fila TOTAL — la más destacada, cierre Hormozi.
   Sprint 33.18 · fondo blanco para que solo la cell GuardaTutti destaque
   con su verde-soft (en vez de gradiente verde en toda la fila). */
.gt-cmp__row--total {
  background: #fff;
  border-top: 2px solid var(--gt-green) !important;
}
.gt-cmp__row--total .gt-cmp__cell {
  padding: 18px 12px;
}
.gt-cmp__cell--total-label {
  font-size: 15px !important;
  color: var(--gt-ink) !important;
}
.gt-cmp__total-sub {
  display: block;
  font-size: 11px;
  font-weight: 400;
  color: var(--fg-3);
  margin-top: 2px;
}
.gt-cmp__cell--total {
  font-size: 22px !important;
  font-weight: 700 !important;
  align-items: flex-start !important;
  flex-direction: column !important;
}
.gt-cmp__cell--winner {
  background: var(--gt-green-soft);
  border-left: 3px solid var(--gt-green);
}
.gt-cmp__total-amount {
  font-size: 26px;
  font-weight: 800;
  color: var(--gt-green-800);
  line-height: 1.05;
  letter-spacing: -0.01em;
}
.gt-cmp__total-savings {
  font-size: 11px;
  font-weight: 600;
  color: #FF6450;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  margin-top: 4px;
}
@media (max-width: 720px) {
  /* Sprint 33.19A · mobile H2 unificado a 28px (era 26) — premium tier
     consistente entre Comparativa, Garantía, Bonos. */
  .gt-cmp__title { font-size: 28px; }
  .gt-cmp__row {
    grid-template-columns: 1fr;
    padding: 16px 14px; gap: 6px;
    border-top: 1px solid var(--gt-line);
  }
  .gt-cmp__row--head { display: none; }
  .gt-cmp__cell {
    padding: 4px 0;
    background: transparent !important;
  }
  .gt-cmp__cell--tema {
    font-size: 11px; letter-spacing: .08em; text-transform: uppercase;
    color: var(--gt-mute); font-weight: 700;
    padding-bottom: 2px;
  }
  .gt-cmp__cell--gt {
    background: var(--gt-green-soft) !important;
    border-radius: 8px; padding: 10px 12px;
    /* Margin negativo a izq/der para que el texto interno arranque al mismo X
       que las filas "Madera —" / "Chapa —" (las cuales no tienen padding horiz.).
       También amplía el ancho útil para que "GuardaTutti —" entre en una sola línea. */
    margin: 4px -12px 0;
  }
  .gt-cmp__cell::before {
    color: var(--gt-mute); font-size: 11px; font-weight: 700;
    text-transform: uppercase; letter-spacing: .08em;
    margin-right: 6px;
    white-space: nowrap; flex-shrink: 0;
  }
  .gt-cmp__row > .gt-cmp__cell:nth-child(2)::before { content: "Madera —"; }
  .gt-cmp__row > .gt-cmp__cell:nth-child(3)::before { content: "Chapa —"; }
  .gt-cmp__row > .gt-cmp__cell--gt::before { content: "GuardaTutti —"; color: var(--gt-green-800); }

  /* Sprint 33.10.2 · matchear el hilo conductor "1 línea por elemento"
     del resto del sitio (cards envío, armado, bonos). Antes en mobile:
     "MADERA —" iba en una línea y "$3.320.000" debajo. Ahora: inline.
     Las subs (ARS conversion + descripción breve) wrappean a línea propia. */
  .gt-cmp__row--num .gt-cmp__cell--num {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: baseline;
    column-gap: 8px;
    row-gap: 2px;
  }
  /* Solo el sub-texto descriptivo ("humedad + termitas") va en línea propia.
     El ARS sigue inline al lado del USD (Damián 33.10.3). */
  .gt-cmp__row--num .gt-cmp__cell--num .gt-cmp__num-sub {
    flex-basis: 100%;
  }
  /* Aliño con el USD en baseline pero sin forzar wrap */
  .gt-cmp__row--num .gt-cmp__cell--num .gt-cmp__num-ars {
    display: inline;
  }
  /* Mismo patrón para la fila TOTAL: label + monto inline, "te ahorrás" abajo */
  .gt-cmp__cell--total {
    flex-direction: row !important;
    flex-wrap: wrap;
    align-items: baseline !important;
    column-gap: 8px;
  }
  .gt-cmp__cell--total .gt-cmp__total-savings {
    flex-basis: 100%;
  }
  /* Sprint 33.14 · BUG FIX 1: el sub-texto "ACM + sellado + ventilación" de
     la cell GT tenía margin-left: 24px (alineación al ícono check en desktop)
     que en mobile rompía la alineación con chapa/madera sub. Override a 0. */
  .gt-cmp__cell--gt .gt-cmp__num-sub {
    margin-left: 0;
  }
  /* Sprint 33.14 · BUG FIX 2: la fila TOTAL tenía padding-bottom 16px que
     sobraba debajo del .winner cell, haciendo que el border-left verde
     terminara antes que el card. Quitar padding-bottom solo del row total. */
  .gt-cmp__row--total {
    padding-bottom: 0;
  }
  /* Sprint 33.18 · forzar que el label total "TOTAL REAL A 15 AÑOS" y su
     sub "(GALPÓN + DAÑO AL EQUIPO)" queden en líneas separadas en lugar
     de wrap mid-text. Aplico flex-direction column sobre la cell label. */
  .gt-cmp__cell--total-label {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 2px;
  }
}
@media (max-width: 640px) {
  .gt-garantia__title { font-size: 28px; /* Sprint 33.19A · 26→28 unif */ }
  .gt-garantia__row {
    grid-template-columns: 1fr;
    gap: 4px; padding: 14px 16px;
  }
  .gt-garantia__row--head { display: none; }
  .gt-garantia__row span:not(.gt-garantia__mat)::before {
    content: attr(role) ": ";
  }
  .gt-garantia__row span:nth-child(2)::before { content: "Vida útil: "; color: var(--fg-3); font-weight: 600; }
  .gt-garantia__row span:nth-child(3)::before { content: "Color: "; color: var(--fg-3); font-weight: 600; }
  .gt-garantia__row span:nth-child(4)::before { content: "Mantenimiento: "; color: var(--fg-3); font-weight: 600; }
  .gt-garantia__mat { font-size: 15px; margin-bottom: 4px; }
}

/* ── Finish picker ──────────────────────────────────────── */
.gt-finish { padding: 24px 16px 8px; background: #fff; }
.gt-finish__label { margin-bottom: 10px; }
.gt-finish__chips { display: flex; gap: 8px; flex-wrap: wrap; }
.gt-chip {
  position: relative; /* contiene a .gt-chip__badge (top:-8px) — sin esto, el badge se posiciona contra el viewport */
  display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 14px 8px 8px; border-radius: 999px;
  border: 1.5px solid var(--gt-line); background: #fff;
  font-weight: 600; font-size: 13px; color: var(--gt-ink); cursor: pointer;
  transition: border-color .15s, transform .12s, box-shadow .15s;
}
.gt-chip:hover { transform: translateY(-1px); }
.gt-chip:active { transform: translateY(0); }
.gt-chip__dot { width: 22px; height: 22px; border-radius: 50%; box-shadow: inset 0 -6px 10px rgba(0,0,0,.18); border: 1px solid rgba(0,0,0,.08); }
.gt-chip.is-active { border-color: var(--gt-green); box-shadow: 0 0 0 2px rgba(47, 138, 111,.18) inset; }

/* ── Pre-compra: badges en chips de color ── */
.gt-chip--precompra { border-color: #d4a017; background: #fef9ec; }
.gt-chip--precompra.is-active { border-color: #d4a017; box-shadow: 0 0 0 2px rgba(212,160,23,.20) inset; }
.gt-chip__badge {
  position: absolute; top: -8px; right: -6px;
  background: #d4a017; color: #fff; font-size: 10px; font-weight: 700;
  padding: 2px 6px; border-radius: 999px; letter-spacing: .02em;
  text-transform: uppercase;
}
.gt-chip--low .gt-chip__pulse {
  position: absolute; top: 4px; right: 4px;
  width: 8px; height: 8px; border-radius: 50%; background: #f59e0b;
  box-shadow: 0 0 0 0 rgba(245,158,11,.5);
  animation: gt-pulse 1.6s infinite;
}
@keyframes gt-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(245,158,11,.5); }
  70%  { box-shadow: 0 0 0 8px rgba(245,158,11,0); }
  100% { box-shadow: 0 0 0 0 rgba(245,158,11,0); }
}

/* ── Size picker (inline pills, hermano del FinishPicker) ── */
.gt-sizepick { padding: 16px 16px 18px; background: #fff; }
.gt-sizepick__label { margin-bottom: 10px; }
.gt-sizepick__chips { display: flex; gap: 6px; flex-wrap: nowrap; }
/* Mobile: 3 chips en una línea — achicamos padding y tipografía para que entren. */
.gt-sizepick__chips .gt-sizechip {
  flex: 1 1 0; min-width: 0; padding: 9px 8px; gap: 6px; justify-content: center;
}
.gt-sizepick__chips .gt-sizechip__short { width: 22px; height: 22px; font-size: 11px; flex-shrink: 0; }
.gt-sizepick__chips .gt-sizechip__dim { font-size: 12px; white-space: nowrap; }
.gt-sizechip {
  position: relative;
  display: inline-flex; align-items: center; gap: 10px;
  padding: 9px 14px; border-radius: 999px;
  border: 1.5px solid var(--gt-line); background: #fff;
  font-family: inherit; color: var(--gt-ink); cursor: pointer;
  transition: border-color .15s, transform .12s, box-shadow .15s;
}
.gt-sizechip:hover { transform: translateY(-1px); }
.gt-sizechip:active { transform: translateY(0); }
.gt-sizechip__short {
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%;
  background: var(--gt-cream, #F4EFE6); color: var(--gt-ink);
  font-weight: 700; font-size: 12px; letter-spacing: .02em;
}
.gt-sizechip__dim { font-weight: 600; font-size: 13px; }
.gt-sizechip__badge {
  position: absolute;
  top: -10px;
  right: -4px;
  display: inline-flex; align-items: center; gap: 2px;
  font-size: 8.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;
  color: #fff; background: var(--gt-green);
  padding: 2px 6px 2px 5px;
  border-radius: 999px;
  white-space: nowrap;
  box-shadow: 0 2px 6px rgba(47, 138, 111, .35);
  border: 2px solid #fff;
  z-index: 1;
  pointer-events: none;
}
.gt-sizechip__badge::before {
  content: "★";
  font-size: 8px;
  line-height: 1;
}
.gt-sizechip.is-active {
  border-color: var(--gt-green);
  box-shadow: 0 0 0 2px rgba(47, 138, 111,.18) inset;
}
.gt-sizechip.is-active .gt-sizechip__short {
  background: var(--gt-green); color: #fff;
}

/* ── Envío estimator (desplegable con CP) ─────────────────── */
.gt-envio {
  margin: 14px 16px 4px;
  border: 1px solid var(--gt-line);
  border-radius: 14px;
  background: #fff;
  overflow: hidden;
  transition: border-color .2s, box-shadow .2s;
}
.gt-envio.is-open { border-color: rgba(47, 138, 111,.35); box-shadow: 0 4px 18px rgba(47, 138, 111,.06); }

.gt-envio__toggle {
  width: 100%;
  display: flex; align-items: center; gap: 10px;
  padding: 13px 14px;
  background: transparent; border: 0;
  font-family: inherit; font-size: 14px; font-weight: 600;
  color: var(--gt-ink); text-align: left; cursor: pointer;
  transition: background .15s;
}
.gt-envio__toggle:hover { background: rgba(0,0,0,.02); }
.gt-envio__toggle > i { width: 18px; height: 18px; color: var(--gt-green); flex-shrink: 0; }
.gt-envio__toggle-lbl { flex: 1; }
.gt-envio__chev {
  width: 16px; height: 16px; color: var(--fg-3);
  transition: color .2s, transform .35s cubic-bezier(.2,.7,.2,1);
}
.gt-envio.is-open .gt-envio__chev { color: var(--gt-green); }

/* ── Collapse genérico (grid-template-rows hack: anima altura variable suavemente) ── */
.gt-collapse {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows .35s cubic-bezier(.2,.7,.2,1);
}
.gt-collapse > .gt-collapse__inner {
  overflow: hidden;
  min-height: 0;
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity .25s ease .05s, transform .35s cubic-bezier(.2,.7,.2,1);
}
/* Sprint 33.10.1 · BonosStack collapse más lento (.35s → .65s) con expo-out
   para feel "luxury reveal". Solo afecta al BonosStack, no a EnvioEstimator
   / ArmadoUpsell (que siguen snappy). */
.gt-bonos .gt-collapse {
  /* Sprint 33.12.6 · 1.2s para el outer (más contenido = necesita más
     tiempo para no sentirse brusco). Inner accordions quedan en .65s. */
  transition: grid-template-rows 1.2s cubic-bezier(.16, 1, .3, 1);
}
.gt-bonos .gt-collapse > .gt-collapse__inner {
  /* opacity/transform también a 1.2s expo-out SIN delay para que el
     outer toggle abra/cierre con simetría perfecta. */
  transition: opacity 1.2s cubic-bezier(.16, 1, .3, 1),
              transform 1.2s cubic-bezier(.16, 1, .3, 1);
}
.gt-collapse.is-open { grid-template-rows: 1fr; }
.gt-collapse.is-open > .gt-collapse__inner {
  opacity: 1;
  transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
  .gt-collapse, .gt-collapse > .gt-collapse__inner { transition: none; }
}

.gt-envio__panel {
  padding: 4px 14px 16px;
  border-top: 1px dashed var(--gt-line);
}
.gt-envio__row {
  display: flex; flex-direction: column; gap: 6px;
  margin-top: 12px;
}
.gt-envio__lbl {
  font-size: 11px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--fg-3);
}
.gt-envio__input {
  width: 100%; max-width: 140px;
  padding: 10px 14px;
  border: 1.5px solid var(--gt-line); border-radius: 10px;
  font-family: inherit; font-size: 16px; font-weight: 600;
  font-variant-numeric: tabular-nums; letter-spacing: .04em;
  color: var(--gt-ink); background: #fff;
  transition: border-color .15s, box-shadow .15s;
}
.gt-envio__input:focus {
  outline: none;
  border-color: var(--gt-green);
  box-shadow: 0 0 0 3px rgba(47, 138, 111,.12);
}
.gt-envio__wa {
  display: inline-flex; align-items: center; gap: 8px;
  margin-top: 10px; padding: 8px 14px;
  background: #25D366; color: #fff; border-radius: 999px;
  text-decoration: none; font-weight: 600; font-size: 13.5px;
}
.gt-envio__wa i { width: 14px; height: 14px; }
.gt-envio__wa:hover { background: #1faa54; }
.gt-envio__hint {
  margin: 10px 0 0;
  font-size: 13px; color: var(--fg-3); line-height: 1.5;
}
.gt-envio__hint--err { color: var(--gt-danger, #c4453b); }

/* Result wrapper colapsable: el margin-top vive en el wrapper "is-open"
   para que aparezca/desaparezca con la animación, no de golpe. */
.gt-envio__result-collapse.is-open { margin-top: 14px; }

.gt-envio__result {
  padding: 12px 14px;
  background: var(--gt-cream, #F4EFE6);
  border-radius: 10px;
}
.gt-envio__result-row {
  display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  padding: 6px 0;
  border-bottom: 1px solid rgba(0,0,0,.06);
}
.gt-envio__result-row:last-of-type { border-bottom: 0; }
.gt-envio__result-lbl { font-size: 12.5px; color: var(--fg-3); }
.gt-envio__result-val {
  font-size: 13.5px; font-weight: 700; color: var(--gt-ink);
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.gt-envio__result-val--cost { font-size: 16px; }
.gt-envio__result-val--cost.is-free { color: var(--gt-green); letter-spacing: .04em; }
.gt-envio__note {
  margin: 10px 0 0;
  font-size: 12.5px; color: var(--fg-3); line-height: 1.5;
}
.gt-envio__note--good { color: var(--gt-green); font-weight: 600; }

/* Smooth-scroll global — los anchors del nav (#faq, etc.) navegan suave.
   scroll-margin-top compensa el header sticky (~80px) para que el target
   no quede tapado al llegar. */
html { scroll-behavior: smooth; }
#faq,
#producto,
#calculadora,
#garantia { scroll-margin-top: 100px; }
/* #producto es la sección hero — restamos un poco para que el título quede
   visible debajo del header sticky pero sin demasiado espacio en blanco arriba. */
#producto { scroll-margin-top: 80px; }

/* ── TrustBand ────────────────────────────────────────────
   Banda full-width con 5 números concretos + zonas. Inserta entre Hero
   y Comparativa. Cream sutil para que respire del white del Hero
   sin gritar como un cambio de sección. */
.gt-trustband {
  background: #FAF8F4;
  padding: 36px 16px;
  border-top: 1px solid var(--gt-line-2, #ece8de);
  border-bottom: 1px solid var(--gt-line-2, #ece8de);
  /* Mobile: full-width sin radius. El radius se aplica solo en desktop
     porque la banda toma todo el ancho en mobile y no necesita redondeo. */
}
.gt-trustband__inner {
  max-width: 1180px;
  margin: 0 auto;
}
.gt-trustband__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 28px 16px;
}
.gt-trustband__card {
  text-align: center;
  padding: 16px 12px;
  background: #fff;
  border-radius: 18px;
  border: 1px solid var(--gt-line-2, #ece8de);
}
.gt-trustband__emoji {
  font-size: 30px;
  line-height: 1;
  margin-bottom: 10px;
}
.gt-trustband__num {
  font-weight: 700;
  font-size: 26px;
  line-height: 1.05;
  letter-spacing: -0.01em;
  color: var(--gt-ink, #10181E);
  margin-bottom: 4px;
  font-variant-numeric: tabular-nums;
}
.gt-trustband__lbl {
  font-size: 13.5px;
  line-height: 1.4;
  color: var(--fg-2, #4d5560);
  max-width: 220px;
  margin: 0 auto;
}
.gt-trustband__locations {
  margin-top: 18px;
  padding-top: 18px;
  border-top: 1px dashed var(--gt-line-2, #ece8de);
  text-align: center;
  font-size: 14px;
  line-height: 1.5;
  color: var(--fg-2, #4d5560);
}
.gt-trustband__pin { margin-right: 6px; }
.gt-trustband__loc-text strong {
  color: var(--gt-ink, #10181E);
  font-weight: 600;
}

@media (min-width: 720px) {
  .gt-trustband {
    padding: 52px 32px;
    /* Desktop: la banda se vuelve una "tarjeta gigante" que contiene las
       4 cards. border-radius mayor (24px) que el de las cards (18px) para
       que el contenedor las "abrace" visualmente sin competir. */
    border-radius: 24px;
    margin: 0 24px;
    border-top: 0;
    border-bottom: 0;
    border: 1px solid var(--gt-line-2, #ece8de);
  }
  .gt-trustband__grid {
    grid-template-columns: repeat(4, 1fr);
    gap: 24px;
  }
  .gt-trustband__emoji { font-size: 36px; margin-bottom: 14px; }
  .gt-trustband__num { font-size: 36px; }
  .gt-trustband__lbl { font-size: 14.5px; }
  .gt-trustband__locations { margin-top: 20px; font-size: 15px; }
}


.gt-trust {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px;
  padding: 16px;
  background: #fff;
}
.gt-trust__item {
  background: #fff; border: 1px solid var(--gt-line); border-radius: 14px;
  padding: 16px 12px 14px; text-align: center;
  display: flex; flex-direction: column; align-items: center; gap: 8px;
}
/* Brand icons: PNG en verde de marca (#38A183) sobre círculo cream.
   Manual de marca: NO re-colorear, el verde es parte del asset. */
.gt-trust__icon {
  width: 56px; height: 56px; border-radius: 50%;
  background: var(--gt-cream, #F4EFE6);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 2px;
}
.gt-trust__icon img {
  /* Mantenemos aspect ratio: width fijo, height auto, max-height para que no
     desborde el círculo. Cada PNG del set tiene proporción distinta
     (shipping es 1.58:1, others ~cuadrados). */
  width: 36px; height: auto; max-height: 36px;
  object-fit: contain;
  /* sin filter — respetamos el verde de marca del icon set */
}
.gt-trust__item img { width: 36px; height: 36px; }
.gt-trust__t { font-weight: 700; font-size: 13px; color: var(--gt-ink); }
.gt-trust__s { font-size: 11px; color: var(--fg-3); }
@media (min-width: 700px) {
  .gt-trust { grid-template-columns: repeat(4, 1fr); padding: 24px 16px; }
  .gt-trust__icon { width: 64px; height: 64px; }
  .gt-trust__icon img { width: 42px; height: auto; max-height: 42px; }
}

/* ── Specs band ─────────────────────────────────────────── */
.gt-specs { background: var(--bg-soft); padding: 48px 16px 56px; }
.gt-specs__inner { max-width: 920px; margin: 0 auto; }
.gt-specs h2 { margin: 8px 0 24px; }
.gt-specs__grid { display: grid; grid-template-columns: 1fr; gap: 14px; }
.gt-specs__item {
  display: flex; gap: 14px; align-items: flex-start;
  padding: 14px; background: #fff; border-radius: 14px; border: 1px solid var(--gt-line);
  box-shadow: var(--shadow-1);
}
.gt-specs__item img { width: 40px; height: auto; max-height: 40px; object-fit: contain; flex-shrink: 0; }
.gt-specs__t { font-weight: 700; font-size: 15px; color: var(--gt-ink); }
.gt-specs__s { font-size: 13px; color: var(--fg-2); margin-top: 2px; }
@media (min-width: 700px) {
  .gt-specs__grid { grid-template-columns: 1fr 1fr; gap: 16px; }
}
@media (min-width: 1000px) {
  .gt-specs__grid { grid-template-columns: 1fr 1fr 1fr; }
}

/* ── Gallery ────────────────────────────────────────────── */
.gt-gallery { padding: 24px 16px; }
.gt-gallery__main {
  border-radius: 16px; overflow: hidden; aspect-ratio: 4/3;
  background: var(--bg-wash); margin-bottom: 12px;
}
.gt-gallery__main img { width: 100%; height: 100%; object-fit: cover; }
.gt-gallery__strip { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; }
.gt-gallery__thumb {
  flex: 0 0 72px; height: 72px; border-radius: 12px; overflow: hidden;
  border: 2px solid transparent; padding: 0; cursor: pointer; background: var(--bg-wash);
  transition: border-color .15s;
}
.gt-gallery__thumb img { width: 100%; height: 100%; object-fit: cover; }
.gt-gallery__thumb.is-active { border-color: var(--gt-green); }

/* ── Calculadora teaser ─────────────────────────────────── */
.gt-calc {
  position: relative;
  background: var(--gt-green);
  color: #fff;
  border-radius: 22px;
  margin: 24px 16px;
  padding: 32px 24px;
  overflow: hidden;
}
.gt-calc__symbol {
  position: absolute; right: -40px; bottom: -40px; width: 220px; opacity: .14; pointer-events: none;
}
.gt-calc__inner { position: relative; z-index: 1; }
.gt-calc__eyebrow { color: rgba(255,255,255,.85); }
.gt-calc__h { color: #fff; margin: 8px 0 8px; font-size: 32px; line-height: 1.1; letter-spacing: -.015em; }
.gt-calc p { color: rgba(255,255,255,.9); margin: 0 0 16px; }
.gt-calc__chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.gt-calc__cta { background: #fff; color: var(--gt-ink); }
.gt-calc__cta:hover { background: #fff; color: var(--gt-green-700); }

/* ── Garantía teaser (mirror CalculadoraTeaser) ─────────── */
.gt-gar-teaser {
  position: relative;
  background: var(--gt-ink);
  color: #fff;
  border-radius: 22px;
  margin: 24px 16px;
  padding: 32px 24px;
  overflow: hidden;
}
.gt-gar-teaser__symbol {
  position: absolute; right: -40px; bottom: -40px; width: 220px; opacity: .10; pointer-events: none;
}
.gt-gar-teaser__inner { position: relative; z-index: 1; }
.gt-gar-teaser__eyebrow { color: rgba(255,255,255,.85); }
.gt-gar-teaser__h { color: #fff; margin: 8px 0 8px; font-size: 32px; line-height: 1.1; letter-spacing: -.015em; }
.gt-gar-teaser p { color: rgba(255,255,255,.9); margin: 0 0 16px; }
.gt-gar-teaser__chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.gt-gar-teaser__chips .gt-pill { display: inline-flex; align-items: center; gap: 6px; }
.gt-gar-teaser__chips .gt-pill i { width: 14px; height: 14px; }
.gt-gar-teaser__cta { background: #fff; color: var(--gt-ink); }
.gt-gar-teaser__cta:hover { background: #fff; color: var(--gt-green-700); }

.gt-pill { display: inline-block; padding: 6px 12px; border-radius: 999px; font-size: 13px; font-weight: 600; }
.gt-pill--green { background: var(--gt-green-50); color: var(--gt-green-700); }
.gt-pill--white { background: rgba(255,255,255,.18); color: #fff; backdrop-filter: blur(6px); }

/* ── FAQ ────────────────────────────────────────────────── */
.gt-faq { padding: 56px 16px; }
.gt-faq__inner { max-width: 1100px; margin: 0 auto; }
.gt-faq__h { margin: 8px 0 28px; }
.gt-faq__cols {
  display: grid; grid-template-columns: 1fr; gap: 28px;
}
.gt-faq__group-label {
  font-size: 11.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--gt-green-700); margin-bottom: 12px;
}
.gt-faq__list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.gt-faq__item { background: #fff; border: 1px solid var(--gt-line); border-radius: 14px; overflow: hidden; }
.gt-faq__q {
  width: 100%; background: transparent; border: 0; padding: 14px 16px;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  font-size: 15px; font-weight: 600; color: var(--gt-ink); text-align: left; cursor: pointer;
}
.gt-faq__q i { width: 16px; height: 16px; color: var(--gt-green-700); flex-shrink: 0; }
.gt-faq__a { padding: 0 16px 14px; color: var(--fg-2); font-size: 14px; line-height: 1.55; }
.gt-faq__item.is-open { box-shadow: var(--shadow-1); border-color: var(--gt-green-100); }
.gt-faq__cta {
  margin-top: 36px; text-align: center;
  display: flex; flex-direction: column; align-items: center; gap: 10px;
}
.gt-faq__cta p { margin: 0; color: var(--fg-2); font-size: 14px; }
.gt-faq__cta .btn i { width: 18px; height: 18px; }
@media (min-width: 820px) {
  .gt-faq__cols {
    grid-template-columns: 1fr 1fr; gap: 28px 32px;
  }
}

/* ── Testimonios grid ───────────────────────────────────── */
.gt-testi {
  padding: 56px 16px;
  background: var(--bg-soft);
}
.gt-testi__inner { max-width: 1120px; margin: 0 auto; }
.gt-testi__h {
  font-size: 30px; line-height: 1.1; letter-spacing: -.02em;
  margin: 8px 0 16px; color: var(--gt-ink); font-weight: 700;
}
.gt-testi__h-em { color: var(--gt-green-700); }
.gt-testi__agg {
  display: flex; align-items: center; gap: 12px;
  margin: 0 0 28px; flex-wrap: wrap;
}
.gt-testi__agg-stars { display: flex; gap: 2px; }
.gt-testi__agg-stars .gt-testi__star { width: 18px; height: 18px; }
.gt-testi__agg-text { font-size: 14.5px; color: var(--fg-2); }
.gt-testi__agg-text strong { color: var(--gt-ink); font-weight: 700; font-size: 16px; }

.gt-testi__grid {
  list-style: none; padding: 0; margin: 0;
  display: grid; grid-template-columns: 1fr; gap: 14px;
}
.gt-testi__card {
  background: #fff; border: 1px solid var(--gt-line); border-radius: 16px;
  padding: 20px;
  display: flex; flex-direction: column; gap: 12px;
  box-shadow: var(--shadow-1);
}
.gt-testi__card-head { display: flex; gap: 12px; align-items: center; }
.gt-testi__avatar {
  width: 48px; height: 48px; border-radius: 50%; flex-shrink: 0;
  object-fit: cover;
  overflow: hidden; position: relative;
}
.gt-testi__avatar--initial {
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 20px; color: var(--gt-ink);
  letter-spacing: -.01em;
}
.gt-testi__avatar--initial > span {
  position: absolute; inset: 0; z-index: 0;
  display: flex; align-items: center; justify-content: center;
}
.gt-testi__avatar--initial > img {
  position: relative; z-index: 1;
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.gt-testi__who { min-width: 0; flex: 1; }
.gt-testi__nombre-row {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.gt-testi__nombre { font-weight: 700; font-size: 15px; color: var(--gt-ink); }
.gt-testi__verified {
  display: inline-flex; align-items: center; gap: 3px;
  font-size: 11px; font-weight: 600; color: var(--gt-green-700);
  background: #E8F3EE; padding: 2px 8px 2px 6px; border-radius: 999px;
  line-height: 1; white-space: nowrap;
}
.gt-testi__verified i { width: 12px; height: 12px; flex-shrink: 0; }
.gt-testi__meta {
  font-size: 12.5px; color: var(--fg-3);
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin-top: 2px;
}
.gt-testi__dot { color: var(--gt-mute); }
/* Sprint 33.14 · QW-S1 Hormozi (Perceived Likelihood) — sub-avatar tag
   inline en la meta line del testimonio. Variante B aprobada por Damián.
   Tratamiento: soft pill verde con tipografía consistente con la meta.
   No compite con el badge ✓ Verificado, se lee como info biográfica más. */
.gt-testi__subavatar {
  background: rgba(47, 138, 111, 0.10);
  color: var(--gt-green-800, #1F5D39);
  font-size: 11.5px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 4px;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.gt-testi__stars { display: flex; gap: 2px; }
.gt-testi__star {
  width: 14px; height: 14px; color: var(--gt-mute);
  fill: transparent;
}
.gt-testi__star--filled {
  color: #F5B544; fill: #F5B544;
}
.gt-testi__texto {
  margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--fg-1);
  text-wrap: pretty;
}
.gt-testi__uso {
  display: flex; align-items: center; gap: 6px;
  font-size: 12.5px; color: var(--fg-2); font-weight: 600;
  padding-top: 10px; border-top: 1px dashed var(--gt-line);
  margin-top: auto;
}
.gt-testi__uso i { width: 14px; height: 14px; color: var(--gt-green-700); flex-shrink: 0; }
.gt-testi__foot {
  margin: 22px 0 0; font-size: 12.5px; color: var(--fg-3); text-align: center;
}
@media (min-width: 720px) {
  .gt-testi__grid { grid-template-columns: 1fr 1fr; gap: 16px; }
  .gt-testi__h { font-size: 36px; }
}
@media (min-width: 1040px) {
  .gt-testi__grid:has(:nth-child(6)) { grid-template-columns: repeat(3, 1fr); }
}

/* ── Sticky CTA ─────────────────────────────────────────── */
.gt-sticky {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
  background: rgba(255,255,255,.92); backdrop-filter: blur(12px);
  border-top: 1px solid var(--gt-line);
  padding: 10px 12px;
  display: grid; grid-template-columns: 1fr auto; gap: 8px;
  box-shadow: 0 -8px 24px rgba(16,24,30,.08);
  align-items: center;
  /* Visibilidad controlada por StickyCTA.jsx con IntersectionObserver
     sobre el CTA del Hero. Por default oculto (translateY abajo + opacity 0). */
  transform: translateY(120%);
  opacity: 0;
  pointer-events: none;
  transition: transform .28s var(--ease-out, cubic-bezier(.2,.8,.2,1)),
              opacity .2s var(--ease-out, cubic-bezier(.2,.8,.2,1));
}
.gt-sticky.is-visible {
  transform: translateY(0);
  opacity: 1;
  pointer-events: auto;
}
.gt-sticky__pick {
  background: var(--bg-soft); border: 1px solid var(--gt-line); border-radius: 12px;
  padding: 8px 12px; cursor: pointer; text-align: left; grid-column: 1 / 2; grid-row: 1; min-width: 0;
}
.gt-sticky__size { display: block; font-size: 13px; font-weight: 700; color: var(--gt-ink); }
.gt-sticky__finish { display: block; font-size: 11px; color: var(--fg-3); }
/* Sprint 33.2 · Mobile layout reorganizado:
   - Row 1: [pick card] [CTA] (CTA alineado con la card resumen, no spanning)
   - Row 2: [precio verde · sin interés · total $X] (todo inline, full width)
   Antes el precio + total iban apilados verticalmente en col 1 y el CTA
   spanneaba 2 filas a la derecha (visualmente desbalanceado). */
.gt-sticky__price {
  grid-column: 1 / 3;
  grid-row: 2;
  padding: 0 4px;
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
}
.gt-sticky__cuota { font-weight: 700; font-size: 18px; color: var(--gt-green-700); line-height: 1; }
.gt-sticky__total {
  font-size: 11px; color: var(--fg-3);
  display: inline-flex; align-items: center; gap: 4px;
  /* Sin margin-top — ahora va inline al lado del cuota, no debajo */
  margin-top: 0;
}
.gt-sticky__total i { width: 11px; height: 11px; }
.gt-sticky__price.is-transfer .gt-sticky__cuota { color: var(--gt-green-700); }
.gt-sticky__price.is-transfer .gt-sticky__total { color: var(--gt-green-800); font-weight: 600; }
/* CTA: solo row 1, alineado con la pick card. Ya no spanea verticalmente. */
.gt-sticky__cta { grid-column: 2 / 3; grid-row: 1; padding: 14px 20px; font-size: 15px; }
@media (min-width: 700px) {
  /* PC: pick (izq) · spacer · CTA · price (a la derecha del botón).
     Antes el price quedaba a la izquierda del CTA y el "sin interés · total $X"
     se apilaba debajo. Ahora el precio + total van inline en una columna a la
     derecha del CTA, alineados a la izquierda para que se lean como un bloque. */
  .gt-sticky { grid-template-columns: auto 1fr auto auto; gap: 20px; padding: 14px 24px; }
  .gt-sticky__pick { grid-column: 1; grid-row: 1; }
  .gt-sticky__cta { grid-column: 3; grid-row: 1; }
  .gt-sticky__price { grid-column: 4; grid-row: 1; padding: 0; text-align: left; min-width: 160px; }
  .gt-sticky__price .gt-sticky__cuota { font-size: 22px; }
  .gt-sticky__price .gt-sticky__total { font-size: 12px; margin-top: 4px; }

  /* Sprint 33.9 · Desktop: sticky bar centrada al mismo rail que el contenido
     (max-width 1100px), glued al borde inferior (sin float, sin radius bottom).
     Mantiene la animación translateY combinada con el centrado translateX. */
  .gt-sticky {
    left: 50%;
    right: auto;
    max-width: 1100px;
    width: calc(100% - 32px);
    border-radius: 16px 16px 0 0;
    border-left: 1px solid var(--gt-line);
    border-right: 1px solid var(--gt-line);
    transform: translateX(-50%) translateY(120%);
  }
  .gt-sticky.is-visible {
    transform: translateX(-50%) translateY(0);
  }
}

/* ── Modal ──────────────────────────────────────────────── */
.gt-modal {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(16,24,30,.55); backdrop-filter: blur(2px);
  display: flex; align-items: flex-end; justify-content: center;
  animation: fadein .2s var(--ease-out);
}
@keyframes fadein { from { opacity: 0; } to { opacity: 1; } }
.gt-modal__sheet {
  background: #fff; width: 100%; max-width: 520px;
  border-radius: 22px 22px 0 0;
  padding: 20px 16px 24px;
  max-height: 90vh; overflow-y: auto;
  animation: sheetup .25s var(--ease-out);
}
@keyframes sheetup { from { transform: translateY(40px); opacity: .6; } to { transform: none; opacity: 1; } }
.gt-modal__head { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 16px; gap: 12px; flex-wrap: wrap; }
.gt-modal__head h3 { margin: 6px 0 0; }
.gt-icon-btn {
  width: 36px; height: 36px; border-radius: 999px; border: 0;
  background: var(--bg-soft); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.gt-icon-btn i { width: 18px; height: 18px; }
.gt-modal__help { width: 100%; justify-content: center; margin-top: 12px; }

/* Sprint 33.9 · Color dots compactos en el header del modal SizeSelector.
   Solo círculos, sin labels — minimiza espacio. Activo lleva ring verde.
   Tamaño 28px (touch target ~44px con padding del botón). */
.gt-modal__colors {
  display: flex; align-items: center; gap: 8px;
  margin-top: 4px;
  flex-wrap: wrap;
  flex-shrink: 0;
}
.gt-color-dot {
  /* Sprint 33.19A · hit-area expandida a 44px (Apple HIG mínimo) vía
     box-sizing + padding transparente, manteniendo dot visible de 28px. */
  width: 44px; height: 44px;
  padding: 8px;
  box-sizing: border-box;
  background-clip: content-box;
  border-radius: 999px;
  border: 1.5px solid transparent;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(16,24,30,.06);
  transition: transform .15s var(--ease-out, cubic-bezier(.2,.8,.2,1)),
              box-shadow .15s var(--ease-out, cubic-bezier(.2,.8,.2,1));
}
.gt-color-dot:hover { transform: scale(1.08); }
.gt-color-dot.is-active {
  box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--gt-green-700, #2a8053);
  transform: scale(1.05);
}
.gt-color-dot:focus-visible {
  outline: 2px solid var(--gt-green-700, #2a8053);
  outline-offset: 3px;
}

/* Sprint 33.9 · Mobile (<560px): color dots a su propia fila debajo del título
   para que "¿Qué te alcanza?" no se parta en 2 líneas por falta de espacio.
   Desktop sigue con dots inline al lado del título. */
@media (max-width: 559px) {
  .gt-modal__colors {
    order: 3;
    width: 100%;
    justify-content: flex-start;
    margin-top: 8px;
    padding-top: 12px;
    border-top: 1px solid var(--gt-line);
  }
}

.gt-sizes { display: flex; flex-direction: column; gap: 14px; }
.gt-size {
  text-align: left; background: #fff; border: 1.5px solid var(--gt-line); border-radius: 16px;
  padding: 16px; cursor: pointer; transition: border-color .15s, box-shadow .15s;
  position: relative;
}
.gt-size:hover { border-color: var(--gt-ink-3); }
.gt-size.is-active { border-color: var(--gt-green); box-shadow: 0 0 0 3px rgba(47, 138, 111,.15); }
.gt-size__head { display: flex; align-items: center; justify-content: space-between; }
.gt-size__name { font-weight: 700; font-size: 16px; color: var(--gt-ink); }
.gt-size__dim { color: var(--fg-3); font-size: 13px; margin-top: 2px; }

/* Pill "Más vendido" como globo flotante en la esquina superior derecha,
   superpuesto al borde del card M para que NO empuje el layout interno. */
.gt-size__featured {
  position: absolute;
  top: -10px;
  right: 14px;
  display: inline-flex; align-items: center; gap: 4px;
  background: var(--gt-green);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .02em;
  padding: 5px 10px 5px 9px;
  border-radius: 999px;
  box-shadow: 0 2px 8px rgba(47, 138, 111, .35);
  white-space: nowrap;
  z-index: 1;
  text-transform: uppercase;
}
.gt-size__featured::before {
  content: "★";
  font-size: 10px;
  line-height: 1;
}
.gt-size__price { margin-top: 8px; }
.gt-size__cuota { font-weight: 700; color: var(--gt-green-700); font-size: 18px; }
.gt-size__total { display: block; font-size: 12px; color: var(--fg-3); margin-top: 2px; }
.gt-size__note { font-size: 12px; color: var(--fg-2); margin-top: 6px; font-style: italic; }

/* ── Final banda pre-footer ─────────────────────────────── */
/* M8: última oportunidad antes del footer. Foto a un lado, CTA del otro.
   Repite la promesa de garantía/devolución en chico al pie. */
.gt-final {
  background: var(--gt-cream);
  padding: 56px 16px;
  border-top: 1px solid var(--gt-line);
}
.gt-final__inner {
  max-width: 1100px; margin: 0 auto;
  display: grid; grid-template-columns: 1fr; gap: 32px;
  align-items: center;
}
.gt-final__photo {
  border-radius: 22px; overflow: hidden;
  aspect-ratio: 4/3; background: var(--bg-wash);
  box-shadow: var(--shadow-2);
}
.gt-final__photo img { width: 100%; height: 100%; object-fit: cover; object-position: center bottom; }
.gt-final__copy { min-width: 0; }
.gt-final__title {
  font-size: 30px; line-height: 1.1; letter-spacing: -.02em;
  margin: 8px 0 14px; color: var(--gt-ink); font-weight: 700;
}
.gt-final__title-em { color: var(--gt-green-700); }
.gt-final__lead {
  font-size: 16px; color: var(--fg-2); margin: 0 0 22px; line-height: 1.55;
  max-width: 520px;
}
.gt-final__ctas {
  display: flex; gap: 12px; flex-wrap: wrap;
  margin-bottom: 14px;
}
.gt-final__ctas .gt-cta-lg { width: 100%; justify-content: center; }
.gt-final__ctas .btn-ghost { width: 100%; justify-content: center; }
.gt-final__note {
  margin: 0; color: var(--fg-3); font-size: 12.5px;
}
@media (min-width: 820px) {
  .gt-final__inner {
    grid-template-columns: 1fr 1.1fr; gap: 48px;
  }
  .gt-final__title { font-size: 40px; }
  .gt-final__ctas .gt-cta-lg { width: auto; }
  .gt-final__ctas .btn-ghost { width: auto; }
}

/* ── Footer ─────────────────────────────────────────────── */
.gt-footer {
  background: var(--gt-ink); color: #fff;
  padding: 40px 16px 24px;
}
.gt-footer__top img { height: 36px; margin-bottom: 12px; }
.gt-footer__top p { color: rgba(255,255,255,.7); font-size: 14px; line-height: 1.5; margin: 0 0 28px; }
.gt-footer__cols { display: grid; grid-template-columns: 1fr 1fr; gap: 28px 16px; }
.gt-footer__h { font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--gt-green); margin-bottom: 12px; font-weight: 700; }
.gt-footer__cols a { display: block; padding: 4px 0; font-size: 14px; color: rgba(255,255,255,.78); }
.gt-footer__cols a:hover { color: #fff; }
/* Items de Contacto con etiqueta+valor: el cliente debe entender que "Deán Funes 5187"
   es la dirección y "Sourdeaux" la localidad, no datos sueltos sin contexto. */
.gt-footer__item { padding: 4px 0; font-size: 14px; line-height: 1.45; }
.gt-footer__lbl {
  display: block;
  font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em;
  color: rgba(255,255,255,.45);
  margin-bottom: 1px;
}
.gt-footer__val { display: block; color: rgba(255,255,255,.85); }
a.gt-footer__val:hover { color: #fff; }

/* WhatsApp FAB — botón flotante global. Verde WA, sombra elevada,
   z-index por debajo del modal de checkout pero arriba del sticky CTA. */
.gt-wa-fab {
  position: fixed; right: 20px; bottom: 24px;
  width: 56px; height: 56px; border-radius: 999px;
  background: #25d366; color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 10px 24px rgba(37, 211, 102, .35), 0 4px 10px rgba(0,0,0,.12);
  z-index: 60;
  transition: transform .15s ease, box-shadow .15s ease;
}
.gt-wa-fab:hover {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 14px 28px rgba(37, 211, 102, .45), 0 6px 12px rgba(0,0,0,.14);
  color: #fff;
}
.gt-wa-fab:active { transform: translateY(0) scale(.98); }
@media (min-width: 700px) {
  .gt-wa-fab { right: 28px; bottom: 28px; width: 60px; height: 60px; }
}
.gt-footer__item { padding: 4px 0; font-size: 14px; line-height: 1.45; }
.gt-footer__lbl {
  display: block;
  font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em;
  color: rgba(255,255,255,.45);
  margin-bottom: 1px;
}
.gt-footer__val { display: block; color: rgba(255,255,255,.85); }
a.gt-footer__val:hover { color: #fff; }
.gt-footer__legal {
  margin-top: 32px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.12);
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px;
  font-size: 12px; color: rgba(255,255,255,.5);
}
@media (min-width: 700px) {
  .gt-footer { padding: 56px 32px 32px; }
  .gt-footer__cols { grid-template-columns: repeat(3, 1fr); }
}


/* ═════════════════════════════════════════════════════════════
   PRE-COMPRA — sin stock, compra anticipada con −5% off extra
   ═════════════════════════════════════════════════════════════ */

/* Tamaño pill — badge "Pre-compra" en lugar de "Más vendido" */
.gt-sizechip--precompra {
  border-color: #d4a017;
  background: #fef9ec;
}
.gt-sizechip--precompra.is-active {
  border-color: #d4a017;
  box-shadow: 0 0 0 2px rgba(212,160,23,.20) inset;
}
.gt-sizechip__badge--pre {
  background: #d4a017 !important;
  color: #fff !important;
}

/* Color picker — etiqueta cuando la combo es pre-compra */
.gt-finish__pre-tag {
  color: #b8860b; font-weight: 600;
}

/* Hero — badge sobre la foto cuando la variante es pre-compra */
.gt-hero__precompra-badge {
  position: absolute; left: 16px; bottom: 16px;
  display: inline-flex; align-items: center; gap: 6px;
  background: rgba(212,160,23,.95); color: #fff;
  padding: 6px 12px; border-radius: 999px;
  font-size: 12px; font-weight: 700; letter-spacing: .02em;
  text-transform: uppercase;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.gt-hero__precompra-badge i { width: 14px; height: 14px; }

/* PriceBlock — banner ámbar arriba cuando hay pre-compra */
.gt-price--precompra { border-color: #f0d896; }
.gt-price__precompra-banner {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 10px 14px;
  background: #fef9ec; border-bottom: 1px solid #f0d896;
  color: #6b4d0c; font-size: 13px;
  border-radius: 8px 8px 0 0;
}
.gt-price__precompra-banner i {
  width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px;
}
.gt-price__cumdisc { color: #b8860b; font-weight: 600; font-size: 12px; }
.gt-price__strike-inline { color: var(--muted, #888); font-size: 12px; text-decoration: line-through; margin-left: 6px; }

/* Sticky CTA — variante pre-compra */
.gt-sticky--precompra {
  border-top-color: #d4a017;
}
.gt-sticky__pre {
  color: #b8860b; font-weight: 600;
}

/* ───── Stock state en checkout (Step1 producto) ───── */
.co-stock {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 600; margin-top: 4px;
}
.co-stock__dot {
  width: 8px; height: 8px; border-radius: 50%; background: currentColor;
}
.co-stock--ok       { color: #15803d; }
.co-stock--warn     { color: #b45309; }
.co-stock--precompra{ color: #b8860b; }
.co-stock__note { color: var(--muted, #666); font-weight: 400; }

/* ───── Bloque ámbar de pre-compra (Step1, Step3, Gracias) ───── */
.co-precompra {
  background: linear-gradient(180deg, #fef9ec 0%, #fdf3d4 100%);
  border: 1.5px solid #f0d896;
  border-radius: 14px;
  padding: 18px 20px;
  margin: 12px 0;
}
.co-precompra__head {
  display: flex; align-items: center; gap: 10px; margin-bottom: 8px;
}
.co-precompra__head i { color: #b8860b; width: 22px; height: 22px; }
.co-precompra__head h3 {
  font-size: 16px; font-weight: 700; color: #6b4d0c; margin: 0;
}
.co-precompra__body {
  font-size: 14px; line-height: 1.5; color: #6b4d0c; margin: 0 0 12px;
}
.co-precompra__perk {
  display: flex; align-items: center; gap: 8px;
  background: rgba(212,160,23,.12);
  padding: 10px 12px; border-radius: 10px;
  font-size: 13px; color: #6b4d0c;
}
.co-precompra__perk i { color: #b8860b; width: 16px; height: 16px; flex-shrink: 0; }
.co-precompra__cta {
  display: inline-flex; align-items: center; gap: 8px;
  margin-top: 12px;
  padding: 10px 16px;
  background: #25D366; color: #fff;
  border: none; border-radius: 999px;
  font-weight: 700; font-size: 14px; cursor: pointer;
  text-decoration: none;
  transition: background .15s;
}
.co-precompra__cta:hover { background: #1fb358; }
.co-precompra__cta i { width: 16px; height: 16px; }

.co-precompra--compact {
  padding: 14px 16px;
}
.co-precompra--compact .co-precompra__head h3 { font-size: 14px; }
.co-precompra--compact .co-precompra__body { font-size: 13px; margin-bottom: 0; }

/* ───── Gracias — banner pre-compra debajo del subtítulo ───── */
.thx-precompra-banner {
  display: inline-flex; align-items: flex-start; gap: 10px;
  margin-top: 16px;
  padding: 12px 16px;
  background: #fef9ec; border: 1.5px solid #f0d896; border-radius: 12px;
  font-size: 14px; color: #6b4d0c; line-height: 1.5;
  text-align: left;
}
.thx-precompra-banner i {
  color: #b8860b; width: 18px; height: 18px; flex-shrink: 0; margin-top: 2px;
}

/* Total con efectivePct (mostrar % ahorrado acumulado) */
.co-summary__cuota { color: var(--muted, #666); font-size: 13px; margin-top: 4px; }

/* ── Cart Drawer (mini-popover desde el ícono del Header) ───── */
.gt-cart__backdrop {
  position: fixed; inset: 0; z-index: 80;
  background: rgba(16,24,30,.38);
  backdrop-filter: blur(0px);
  -webkit-backdrop-filter: blur(0px);
  opacity: 0;
  transition:
    opacity .42s cubic-bezier(.2,.7,.2,1),
    backdrop-filter .42s cubic-bezier(.2,.7,.2,1),
    -webkit-backdrop-filter .42s cubic-bezier(.2,.7,.2,1);
}
.gt-cart__backdrop.is-open {
  opacity: 1;
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
}

.gt-cart {
  position: fixed; z-index: 81;
  background: #fff;
  transition:
    transform .42s cubic-bezier(.2,.7,.2,1),
    opacity .42s cubic-bezier(.2,.7,.2,1);
  border-radius: 16px;
  box-shadow: 0 24px 60px rgba(16,24,30,.22), 0 4px 14px rgba(16,24,30,.08);
  display: flex; flex-direction: column;
  overflow: hidden;
  /* Mobile: full-width bottom sheet — entra deslizando desde abajo */
  left: 12px; right: 12px; bottom: 12px;
  transform: translateY(28px);
  opacity: 0;
}
.gt-cart.is-open { transform: translateY(0); opacity: 1; }

@media (min-width: 700px) {
  .gt-cart {
    left: auto; bottom: auto;
    top: 76px; right: 20px;
    width: 380px;
    transform: translateY(-10px) scale(.96);
    opacity: 0;
    transform-origin: top right;
  }
  .gt-cart.is-open { transform: translateY(0) scale(1); opacity: 1; }
  /* Pequeña flechita apuntando al ícono del Header */
  .gt-cart::before {
    content: ""; position: absolute; top: -6px; right: 28px;
    width: 12px; height: 12px; background: #fff;
    transform: rotate(45deg);
    box-shadow: -2px -2px 4px rgba(16,24,30,.04);
  }
}

.gt-cart__head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px;
  border-bottom: 1px solid var(--gt-line, #ECE9E2);
}
.gt-cart__title { display: flex; align-items: center; gap: 8px; font-weight: 700; color: var(--gt-ink, #10181E); font-size: 15px; }
.gt-cart__title i { width: 18px; height: 18px; }
.gt-cart__count {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 20px; height: 20px; padding: 0 6px;
  background: var(--gt-green-700, #1F8A5B); color: #fff;
  border-radius: 999px; font-size: 11px; font-weight: 700;
}
.gt-cart__close {
  border: 0; background: transparent; padding: 6px;
  border-radius: 8px; cursor: pointer; color: var(--fg-3, #6b6b6b);
}
.gt-cart__close:hover { background: var(--gt-line, #ECE9E2); color: var(--gt-ink, #10181E); }
.gt-cart__close i { width: 18px; height: 18px; }

.gt-cart__item {
  display: grid; grid-template-columns: 80px 1fr; gap: 14px;
  padding: 16px;
}
.gt-cart__photo {
  width: 80px; height: 80px;
  background: var(--gt-bone, #F6F4EF);
  border-radius: 12px; overflow: hidden;
  display: flex; align-items: center; justify-content: center;
}
.gt-cart__photo img { width: 100%; height: 100%; object-fit: cover; }
.gt-cart__info { min-width: 0; }
.gt-cart__name { font-weight: 700; font-size: 15px; color: var(--gt-ink, #10181E); }
.gt-cart__attrs { font-size: 12px; color: var(--fg-3, #6b6b6b); margin-top: 2px; }
.gt-cart__chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.gt-cart__chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 8px; border-radius: 999px;
  background: var(--gt-bone, #F6F4EF);
  color: var(--fg-3, #6b6b6b);
  font-size: 11px; font-weight: 600;
}
.gt-cart__chip i { width: 11px; height: 11px; }
.gt-cart__chip--on { background: rgba(31,138,91,.12); color: var(--gt-green-700, #1F8A5B); }
.gt-cart__chip--pre { background: #fef3d4; color: #6b4d0c; }
.gt-cart__price {
  display: flex; align-items: baseline; gap: 8px;
  margin-top: 8px;
  font-size: 17px; font-weight: 700; color: var(--gt-ink, #10181E);
}
.gt-cart__price-tag { font-size: 11px; font-weight: 500; color: var(--fg-3, #6b6b6b); }

.gt-cart__perks {
  display: flex; gap: 8px;
  padding: 10px 16px;
  background: var(--gt-bone, #F6F4EF);
  border-top: 1px solid var(--gt-line, #ECE9E2);
  border-bottom: 1px solid var(--gt-line, #ECE9E2);
}
.gt-cart__perk {
  flex: 1; min-width: 0;
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  font-size: 10.5px; font-weight: 600; color: var(--fg-3, #6b6b6b);
  text-align: center; line-height: 1.2;
}
.gt-cart__perk i { width: 16px; height: 16px; color: var(--gt-green-700, #1F8A5B); }

.gt-cart__foot {
  display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px;
  padding: 12px 16px;
}
.gt-cart__back { font-size: 13px; padding: 10px 12px; }
.gt-cart__cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: 14px; padding: 12px 14px;
}
.gt-cart__cta i { width: 16px; height: 16px; }


/* ── BrandMenu (logo plegable del Header) ──────────────────── */
.gt-brandmenu { position: relative; display: flex; align-items: center; }
.gt-brandmenu__trigger {
  display: inline-flex; align-items: center; gap: 6px;
  background: transparent; border: 0; padding: 4px 8px 4px 0;
  border-radius: 8px; cursor: pointer;
  transition: background .15s ease;
}
.gt-brandmenu__trigger:hover { background: var(--gt-bone, #F6F4EF); }
.gt-brandmenu__trigger img { display: block; height: 28px; width: auto; }
.gt-brandmenu__chev {
  width: 14px; height: 14px; color: var(--fg-3, #6b6b6b);
  transition: transform .25s cubic-bezier(.2,.7,.2,1);
}
.gt-brandmenu__trigger.is-open .gt-brandmenu__chev { transform: rotate(180deg); }

.gt-brandmenu__panel-wrap {
  position: absolute; top: calc(100% + 6px); left: 0;
  z-index: 90;
  width: 280px; max-width: calc(100vw - 24px);
}
.gt-brandmenu__panel {
  background: #fff;
  border: 1px solid var(--gt-line, #ECE9E2);
  border-radius: 14px;
  box-shadow: 0 16px 40px rgba(16,24,30,.14), 0 4px 12px rgba(16,24,30,.06);
  padding: 8px;
  overflow: hidden;
}
.gt-brandmenu__sec { padding: 6px 0; }
.gt-brandmenu__sec + .gt-brandmenu__sec { border-top: 1px solid var(--gt-line, #ECE9E2); }
.gt-brandmenu__sec-title {
  padding: 6px 12px 4px;
  font-size: 11px; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--fg-3, #6b6b6b);
}
.gt-brandmenu__list { list-style: none; margin: 0; padding: 0; }
.gt-brandmenu__link {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; border-radius: 8px;
  color: var(--gt-ink, #10181E); text-decoration: none;
  font-size: 14px; font-weight: 500;
  transition: background .12s ease;
}
.gt-brandmenu__link:hover { background: var(--gt-bone, #F6F4EF); }
.gt-brandmenu__link i { width: 16px; height: 16px; color: var(--gt-green-700, #1F8A5B); flex-shrink: 0; }

@media (min-width: 700px) {
  .gt-brandmenu__trigger img { height: 32px; }
  .gt-brandmenu__panel-wrap { width: 320px; }
}


/* ── Sobre Nosotros ─────────────────────────────────────── */
.gt-sobre {
  background: var(--bg-page);
  color: var(--fg-1);
}

/* Hero */
.gt-sobre__hero {
  padding: 64px 16px 56px;
  background: linear-gradient(180deg, #fff 0%, var(--bg-page) 100%);
}
.gt-sobre__hero-inner {
  max-width: 820px; margin: 0 auto; text-align: center;
}
.gt-sobre__title {
  font-family: var(--font-display);
  font-size: clamp(32px, 5vw, 52px);
  line-height: 1.05;
  letter-spacing: -0.02em;
  font-weight: 700;
  color: var(--gt-green-900, #102b21);
  margin: 14px 0 18px;
  text-wrap: balance;
}
.gt-sobre__lead {
  font-size: 17px; line-height: 1.6;
  color: var(--fg-2);
  max-width: 640px; margin: 0 auto;
  text-wrap: pretty;
}

/* Sección genérica */
.gt-sobre__section { padding: 56px 16px; }
.gt-sobre__section-inner { max-width: 1100px; margin: 0 auto; }
.gt-sobre__h2 {
  font-family: var(--font-display);
  font-size: clamp(26px, 3.5vw, 36px);
  line-height: 1.15;
  font-weight: 700;
  color: var(--gt-green-900, #102b21);
  margin: 0 0 32px;
  text-align: center;
  letter-spacing: -0.01em;
}
.gt-sobre__h2--light { color: #fff; }

/* Cards de historia */
.gt-sobre__cards {
  display: grid; gap: 18px;
  grid-template-columns: 1fr;
  margin-bottom: 36px;
}
@media (min-width: 760px) {
  .gt-sobre__cards { grid-template-columns: 1fr 1fr; gap: 22px; }
}
.gt-sobre__card {
  background: #fff;
  border: 1px solid var(--gt-line);
  border-radius: 16px;
  padding: 26px 24px;
  box-shadow: var(--shadow-1);
}
.gt-sobre__card-title {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 700;
  color: var(--gt-green-700);
  margin: 0 0 12px;
  letter-spacing: -0.005em;
}
.gt-sobre__card p {
  margin: 0;
  font-size: 15.5px; line-height: 1.65;
  color: var(--fg-2);
  text-wrap: pretty;
}

/* Quote */
.gt-sobre__quote {
  margin: 0 auto;
  max-width: 760px;
  background: var(--gt-green-soft, #eaf4ee);
  border-left: 4px solid var(--gt-green);
  padding: 28px 30px;
  border-radius: 0 14px 14px 0;
}
.gt-sobre__quote p {
  font-family: var(--font-display);
  font-size: clamp(19px, 2.4vw, 24px);
  line-height: 1.4;
  font-weight: 600;
  color: var(--gt-green-900, #102b21);
  margin: 0 0 10px;
  text-wrap: balance;
  font-style: italic;
}
.gt-sobre__quote-foot {
  font-size: 13px;
  font-weight: 600;
  color: var(--gt-green-700);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* Stats — banda verde rendida como card grande redondeada */
.gt-sobre__stats-band {
  background: transparent;
  padding: 24px 16px 48px;
  color: #fff;
}
.gt-sobre__stats-band > .gt-sobre__section-inner {
  background: var(--gt-green, #38A183);
  border-radius: 24px;
  padding: 56px 28px 60px;
  box-shadow: 0 18px 40px -22px rgba(47, 138, 111,0.55);
}
@media (min-width: 760px) {
  .gt-sobre__stats-band > .gt-sobre__section-inner {
    padding: 64px 48px 68px;
  }
}
.gt-sobre__stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 28px 18px;
}
@media (min-width: 760px) {
  .gt-sobre__stats { grid-template-columns: repeat(4, 1fr); gap: 24px; }
}
.gt-sobre__stat { text-align: center; padding: 0 4px; }
.gt-sobre__stat-n {
  font-family: var(--font-display);
  font-size: clamp(48px, 7vw, 72px);
  line-height: 1;
  font-weight: 700;
  color: #fff;
  letter-spacing: -0.03em;
}
.gt-sobre__stat-label {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: rgba(255,255,255,.95);
  margin: 10px 0 6px;
}
.gt-sobre__stat-sub {
  font-size: 13px;
  color: rgba(255,255,255,.7);
  line-height: 1.45;
}

/* Valores */
.gt-sobre__valores {
  display: grid; gap: 18px;
  grid-template-columns: 1fr;
}
@media (min-width: 760px) {
  .gt-sobre__valores { grid-template-columns: repeat(2, 1fr); gap: 22px; }
}
.gt-sobre__valor {
  background: #fff;
  border: 1px solid var(--gt-line);
  border-radius: 16px;
  padding: 26px 24px;
  box-shadow: var(--shadow-1);
}
.gt-sobre__valor-icon {
  width: 48px; height: 48px;
  border-radius: 12px;
  background: var(--gt-green-soft, #eaf4ee);
  color: var(--gt-green-700);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 16px;
}
.gt-sobre__valor-icon i { width: 24px; height: 24px; }
.gt-sobre__valor-title {
  font-family: var(--font-display);
  font-size: 19px;
  font-weight: 700;
  color: var(--gt-green-900, #102b21);
  margin: 0 0 10px;
  letter-spacing: -0.005em;
}
.gt-sobre__valor-text {
  margin: 0;
  font-size: 15px; line-height: 1.6;
  color: var(--fg-2);
  text-wrap: pretty;
}

/* CTA */
.gt-sobre__cta {
  background: var(--gt-green-900, #102b21);
  padding: 56px 16px 64px;
  color: #fff;
  text-align: center;
}
.gt-sobre__cta-inner { max-width: 640px; margin: 0 auto; }
.gt-sobre__cta-title {
  font-family: var(--font-display);
  font-size: clamp(24px, 3.5vw, 34px);
  font-weight: 700;
  margin: 0 0 12px;
  color: #fff;
  letter-spacing: -0.01em;
  text-wrap: balance;
}
.gt-sobre__cta-lead {
  font-size: 16px; line-height: 1.55;
  color: rgba(255,255,255,.78);
  margin: 0 0 24px;
}
.gt-sobre__cta-btn {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 16px; font-weight: 700;
  padding: 14px 26px;
}
.gt-sobre__cta-btn i { width: 18px; height: 18px; }


/* ─────────────────────────────────────────────────────────────
   Sobre Nosotros v2 — fotos reales del taller
   Aditivo sobre los .gt-sobre__ existentes. No tocar nada arriba.
   ───────────────────────────────────────────────────────────── */

/* Hero split: texto izq, foto der. Reemplaza al center-aligned al usar
   .gt-sobre__hero--split. La regla base de .gt-sobre__hero queda intacta. */
.gt-sobre__hero--split {
  padding: 56px 16px 48px;
}
.gt-sobre__hero--split .gt-sobre__hero-inner {
  max-width: 1100px;
  margin: 0 auto;
  text-align: left;
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
  align-items: center;
}
@media (min-width: 860px) {
  .gt-sobre__hero--split {
    padding: 72px 16px 64px;
  }
  .gt-sobre__hero--split .gt-sobre__hero-inner {
    grid-template-columns: 1.05fr 1fr;
    gap: 56px;
  }
}
.gt-sobre__hero-text { order: 1; }
.gt-sobre__title--left { text-align: left; }
.gt-sobre__lead--left {
  text-align: left;
  max-width: 520px;
  margin: 12px 0 0;
}
.gt-sobre__hero-figure {
  order: 0;
  margin: 0;
  border-radius: 18px;
  overflow: hidden;
  background: var(--gt-line-2, #EFF1F4);
  box-shadow: 0 18px 40px -18px rgba(16,24,30,0.22);
}
.gt-sobre__hero-figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  /* cursor / tap-highlight gestionados por .js-lightbox */
}
.gt-sobre__hero-figure figcaption {
  font-size: 13px;
  color: var(--fg-3, #6B7480);
  padding: 12px 16px;
  background: #fff;
  border-top: 1px solid var(--gt-line, #E4E7EB);
}
@media (min-width: 860px) {
  /* En desktop la foto va a la derecha (orden visual normal) */
  .gt-sobre__hero-text { order: 0; }
  .gt-sobre__hero-figure { order: 1; }
}

/* Variante "soft" — fondo crema rendido como card grande redondeada
   (en vez de banda full-bleed) para crear ritmo entre secciones. */
.gt-sobre__section--soft {
  background: transparent;
  padding-left: 16px;
  padding-right: 16px;
}
.gt-sobre__section--soft > .gt-sobre__section-inner {
  background: var(--bg-soft, #FAF8F4);
  border-radius: 24px;
  padding: 48px 28px;
}
@media (min-width: 760px) {
  .gt-sobre__section--soft > .gt-sobre__section-inner {
    padding: 56px 48px;
  }
}

/* Subtítulo bajo un h2 */
.gt-sobre__h2-sub {
  font-size: 16px;
  line-height: 1.55;
  color: var(--fg-2, #4D5660);
  margin: -6px 0 28px;
  max-width: 720px;
}

/* Historia — texto en un par de párrafos a 2 columnas anchas */
.gt-sobre__story { max-width: 880px; }
.gt-sobre__story-body p {
  font-size: 16.5px;
  line-height: 1.7;
  color: var(--fg-2, #4D5660);
  margin: 0 0 14px;
}
.gt-sobre__story-body p:last-child { margin-bottom: 0; }
@media (min-width: 860px) {
  .gt-sobre__story-body {
    column-count: 2;
    column-gap: 40px;
  }
  .gt-sobre__story-body p { break-inside: avoid; }
}

/* Equipo — 3 columnas en desktop, stack en mobile. Centrado como bloque
   dentro del container (con margin auto), pero el texto interno de cada
   miembro queda alineado a la izquierda. */
.gt-sobre__team {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
  max-width: 880px;
  margin: 0 auto;
  justify-content: center;
}
@media (min-width: 760px) {
  .gt-sobre__team {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 32px;
  }
}
.gt-sobre__member {
  text-align: left;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.gt-sobre__member-avatar {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display, "Poppins", sans-serif);
  font-weight: 700;
  font-size: 26px;
  color: #fff;
  letter-spacing: 0;
  /* Misma sombra suave que el avatar del email #5 para consistencia */
  box-shadow: 0 6px 14px -6px rgba(16,24,30,0.25);
}
.gt-sobre__member-name {
  font-family: var(--font-display, "Poppins", sans-serif);
  font-size: 20px;
  font-weight: 600;
  color: var(--gt-ink, #10181E);
  margin: 0;
}
.gt-sobre__member-role {
  margin: 0;
  font-size: 15px;
  line-height: 1.55;
  color: var(--fg-2, #4D5660);
}

/* En mobile, centramos los miembros del equipo (avatar + nombre + bio).
   En desktop la grilla tiene 3 columnas y el alineado izquierdo dentro
   de cada columna queda bien — esto solo aplica al stack vertical. */
@media (max-width: 759px) {
  .gt-sobre__member {
    text-align: center;
    align-items: center;
  }
}

/* Galería del taller — grid 3×2 en desktop, 1 col en mobile */
.gt-sobre__gallery {
  display: grid;
  grid-template-columns: 1fr;
  gap: 14px;
}
@media (min-width: 640px) {
  .gt-sobre__gallery {
    grid-template-columns: repeat(2, 1fr);
    gap: 16px;
  }
}
@media (min-width: 960px) {
  .gt-sobre__gallery {
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
  }
}
.gt-sobre__shot {
  margin: 0;
  border-radius: 16px;
  overflow: hidden;
  background: var(--gt-line-2, #EFF1F4);
  box-shadow: var(--shadow-1, 0 1px 2px rgba(16,24,30,.06));
  transition: transform 240ms cubic-bezier(.2,.7,.2,1),
              box-shadow 240ms cubic-bezier(.2,.7,.2,1);
}
.gt-sobre__shot:hover {
  transform: scale(1.02);
  box-shadow: 0 18px 32px -16px rgba(16,24,30,0.25);
}
.gt-sobre__shot img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 4;
  object-fit: cover;
  /* cursor / tap-highlight gestionados por .js-lightbox */
}
.gt-sobre__shot figcaption {
  font-size: 13.5px;
  line-height: 1.4;
  color: var(--fg-2, #4D5660);
  padding: 12px 14px 14px;
  background: #fff;
  /* Sin border-top — daba una línea gris inconsistente sobre fotos con
     fondos oscuros vs claros. El cambio de fondo (foto → white) y la curva
     redondeada del border ya separan visualmente caption de imagen. */
}
/* En mobile, centramos el caption — hace match con la caption del lightbox
   (que también está centrada) y se siente más coherente con el resto del
   layout vertical centrado. */
@media (max-width: 759px) {
  .gt-sobre__shot figcaption { text-align: center; }
}

/* Cierre — blockquote firmado por el equipo */
.gt-sobre__section--closing {
  padding-top: 24px;
  padding-bottom: 32px;
}
.gt-sobre__closing {
  max-width: 700px;
  margin: 0 auto;
  background: #F9FAFB;
  border-left: 4px solid var(--gt-green, #38A183);
  border-radius: 0 16px 16px 0;
  padding: 32px 36px;
}
.gt-sobre__closing p {
  margin: 0 0 14px;
  font-family: var(--font-display, "Poppins", sans-serif);
  font-size: 19px;
  line-height: 1.55;
  font-style: italic;
  color: var(--gt-ink, #10181E);
  letter-spacing: -0.005em;
}
@media (min-width: 760px) {
  .gt-sobre__closing { padding: 36px 44px; }
  .gt-sobre__closing p { font-size: 20px; }
}
.gt-sobre__closing-sig {
  font-size: 14px;
  font-weight: 700;
  color: var(--fg-3, #6B7480);
  letter-spacing: 0.01em;
}

/* CTA dual — 2 botones lado a lado, stack en mobile */
.gt-sobre__cta-dual {
  padding: 48px 16px 72px;
  text-align: center;
}
.gt-sobre__cta-dual-inner {
  max-width: 720px;
  margin: 0 auto;
}
.gt-sobre__cta-dual-title {
  font-family: var(--font-display, "Poppins", sans-serif);
  font-size: clamp(22px, 3vw, 30px);
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.2;
  color: var(--gt-ink, #10181E);
  margin: 0 0 22px;
  text-wrap: balance;
}
.gt-sobre__cta-dual-actions {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: stretch;
  justify-content: center;
}
@media (min-width: 560px) {
  .gt-sobre__cta-dual-actions {
    flex-direction: row;
    align-items: center;
    gap: 14px;
  }
}
.gt-sobre__cta-dual-btn {
  justify-content: center;
  padding: 14px 26px;
  font-size: 16px;
  font-weight: 600;
}
.gt-sobre__cta-dual-btn i { width: 18px; height: 18px; }
/* Ghost variant con tono verde para diferenciar del primary */
.gt-sobre__cta-dual-btn--wa {
  color: var(--gt-green-700, #2A7A4B);
  border-color: var(--gt-green-200, #A8DCC4);
}
.gt-sobre__cta-dual-btn--wa:hover {
  border-color: var(--gt-green, #38A183);
  background: var(--gt-green-50, #EAF6F0);
}

/* ─────────────────────────────────────────────────────────────
   Lightbox — click-to-zoom global, sobre PhotoSwipe v5
   Opt-in: <img class="js-lightbox">. PhotoSwipe se monta al
   primer click desde lightbox.js. Su CSS base se inyecta como
   <link rel="stylesheet"> al cargar lightbox.js — acá viven
   solo nuestros overrides de marca + el caption custom.
   (Reemplaza el .gt-lb* legacy basado en panzoom — mayo 2026.)
   ───────────────────────────────────────────────────────────── */

/* Reset visual para los <img> opt-in en la página: cursor default
   (decisión estética del cliente — premium minimalism: la animación
   zoom-from-thumbnail de PhotoSwipe ya comunica la affordance sin
   cursor explícito) + sin flash azul en mobile + sin selección de
   texto. PhotoSwipe agrega el resto cuando lo abre. */
.js-lightbox {
  cursor: default;
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
  user-select: none;
}

/* Overrides de marca encima de los CSS variables que expone PhotoSwipe.
   Doc oficial: https://photoswipe.com/styling/ */
.pswp {
  --pswp-bg:                    rgba(8, 11, 19, 0.96);   /* ink brand, opaco premium */
  --pswp-placeholder-bg:        #10181E;                 /* gt-ink */
  --pswp-icon-color:            #FFFFFF;
  --pswp-icon-color-secondary:  #38A183;                 /* gt-green hover */
  --pswp-icon-stroke-color:     #10181E;
  --pswp-icon-stroke-width:     2px;
}

/* Cursor default sobre la imagen abierta (no zoom-in: ya está abierta). */
.pswp__img { cursor: default; }

/* Easing de entrada/salida del backdrop alineado a nuestro out-quint
   (variables --motion-* viven en colors_and_type.css). */
.pswp__bg {
  transition: opacity 280ms cubic-bezier(0.2, 0.7, 0.2, 1);
}

/* Caption custom — la registramos en lightbox.js como elemento "caption"
   del UI. PhotoSwipe le da position: absolute por defecto en sus elementos
   appendTo:'root'; lo dejamos anclado abajo, centrado, con tipografía
   discreta. */
.pswp .gt-pswp__caption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 16px;
  margin: 0 auto;
  max-width: 720px;
  padding: 0 24px;
  font: 400 14px/1.45 Poppins, system-ui, sans-serif;
  color: rgba(255, 255, 255, 0.82);
  text-align: center;
  pointer-events: none;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.pswp .gt-pswp__caption[hidden] { display: none; }

/* Para galerías de UNA sola imagen: PhotoSwipe esconde las flechas solas
   cuando dataSource tiene length 1, pero por las dudas dejamos esta clase
   condicional (set en JS) que también las apaga si alguna versión vuelve
   a mostrarlas. */
.pswp.gt-pswp--single .pswp__button--arrow {
  display: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .pswp__bg { transition: none !important; }
}



/* ─────────────────────────────────────────────────────────────
   Header — flecha "Volver" en páginas internas (opción B)
   ───────────────────────────────────────────────────────────── */
/* En páginas internas (calculadora, garantía, legales) reemplazamos el nav
   por una flecha centrada que lleva al producto. El BrandMenu sigue a la
   izquierda para que el usuario pueda saltar a otra página sin pasar por home. */
.gt-header__back {
  display: inline-flex; align-items: center; gap: 8px;
  text-decoration: none;
  color: var(--fg-2);
  font-weight: 600; font-size: 14px;
  padding: 8px 14px;
  border-radius: 999px;
  transition: background .15s, color .15s;
}
.gt-header__back:hover {
  background: var(--bg-soft);
  color: var(--gt-ink);
}
.gt-header__back i {
  width: 18px; height: 18px;
  stroke-width: 2;
}
@media (max-width: 699px) {
  /* En mobile mostramos solo la flecha (sin texto) para no competir con el logo */
  .gt-header__back span { display: none; }
  .gt-header__back { padding: 8px; }
}

/* ─────────────────────────────────────────────────────────────
   Esquinas redondeadas de secciones — solo PC (≥1024px)
   ───────────────────────────────────────────────────────────── */
/* En desktop el sitio queda más estético con las secciones contenidas
   en "tarjetas" con esquinas redondeadas en lugar de bandas full-bleed.
   Aplicamos margen lateral + border-radius solo a las secciones que tienen
   color de fondo distinto al body, para que el corte sea visible. */
@media (min-width: 1024px) {
  .gt-hero,
  .gt-specs,
  .gt-testi,
  .gt-bonos,
  .gt-garantia,
  .gt-promesa,
  .gt-cmp,
  .gt-final,
  .gt-trust,
  .gt-envio,
  .gt-armado,
  .gt-footer {
    border-radius: 24px;
    margin-left: 24px;
    margin-right: 24px;
    overflow: hidden;
  }
  .gt-footer { margin-bottom: 24px; }
  /* Espaciado vertical entre secciones para que se note la separación.
     Sprint 33.1 · agregamos .gt-envio y .gt-armado porque originalmente
     usaban margin lateral de 16px (default), 8px MENOS que el resto del
     stack — sobresalían visualmente a la izquierda del TrustBand y del
     resto de cards (left=88 vs left=96 standard). */
  .gt-hero + *,
  .gt-specs,
  .gt-testi,
  .gt-bonos,
  .gt-garantia,
  .gt-promesa,
  .gt-cmp,
  .gt-final,
  .gt-envio,
  .gt-armado {
    margin-top: 16px;
  }
}


/* ─────────────────────────────────────────────────────────────
   D2 follow-up · Section paddings consistentes en home
   (Sprint Polish 28 — fix de selector. El `:where(.gt-section)` del
   Sprint 27 no matcheaba ningún componente real; estos selectores son
   los nombres reales medidos por Playwright en producción.)

   Criterio aplicado:
     - Secciones contenedoras de bloques distintos → 48 mobile / 64 desktop
     - Cards colapsables con margin entre vecinos (.gt-armado, .gt-bonos,
       .gt-gar-teaser) → flush intencional, el margin ya da aire
     - Hero (.gt-hero) → flush intencional, la foto bleed al top
   ───────────────────────────────────────────────────────────── */

/* Secciones débiles en mobile (< 48px) — bump base a 48, desktop a 64. */
.gt-trustband { padding-block: 48px; }
.gt-trust     { padding-block: 48px; }

/* Borderline en desktop (56 < 64) — bump sólo en desktop. */
@media (min-width: 768px) {
  .gt-trustband { padding-block: 64px; }
  .gt-trust     { padding-block: 40px; } /* Sprint 33.7: supporting section, reduced from 64 — UX premium pattern (Apple/Linear: trust badges 48-72px) */
  .gt-cmp       { padding-block: 64px; }
  .gt-testi     { padding-block: 64px; }
}

/* ============================================================
   Sprint 34.6 — Visual Rhyming galpón motif (from Tim Gabe video)
   El símbolo de marca (silueta de casa con puerta-cutout) se rima
   como divider entre secciones. Inline SVG = cero requests, currentColor
   = hereda color del padre para variantes light/dark cuando se necesite.
   ============================================================ */
.gt-divider-galpon {
  display: flex;
  align-items: center;
  gap: 18px;
  width: 100%;
  max-width: 360px;
  margin: 24px auto 16px;   /* DEFAULT fallback — override por modifier per-placement */
  padding: 0 24px;
  pointer-events: none;
}

/* Sprint 34.6 polish v2 — modifiers per-placement.
   Las secciones adyacentes tienen paddings distintos (Hero pb 32, TrustBand pt 64,
   BonosStack pb 0, Comparativa pt 64, FAQ pb 56, FinalBanda pt 56). Los margins
   default crean gaps asimétricos. Cada modifier compensa con la matemática:
   target_gap = section_padding + divider_margin  →  divider_margin = target - padding.
   Negative margins donde la sección padding excede el target — el divider se
   "mete" visualmente dentro del padding zone de la sección vecina. */

/* Post-Hero · Hero pb 32 (green wash) + TrustBand pt 64 (cream wash).
   Polish v3: positive-only margins para evitar overlap visual con cream bg
   de TrustBand. Target: ~24px visible white a cada lado del divider.
   Above visible white = margin-top 24. Below visible white = margin-bottom 24
   (luego cream TrustBand 64 hasta su contenido). */
.gt-divider-galpon--after-hero {
  margin: 24px auto 24px;
}

/* Post-FAQ · FAQ pb 56 (white) + FinalBanda pt 56 (cream wash).
   Polish v3: negative top suficiente para reducir el "mucho superior" (FAQ pb
   absorbe parte) + positive bottom para que cream de FinalBanda no toque el
   divider. Target: ~24px visible white a cada lado. */
.gt-divider-galpon--after-faq {
  margin: -32px auto 24px;
}

/* Mini post-Bonos · BonosStack pb 0 + Comparativa pt 64. Target 24/24 simétrico.
   Positive margin-top porque BonosStack no tiene padding-bottom propio. */
.gt-divider-galpon--mini.gt-divider-galpon--after-bonos {
  margin: 24px auto -40px;
}
.gt-divider-galpon::before,
.gt-divider-galpon::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(
    to right,
    transparent 0%,
    var(--gt-line) 28%,
    var(--gt-line) 72%,
    transparent 100%
  );
}
.gt-divider-galpon__icon {
  width: 26px;
  height: 24px;
  color: var(--gt-green);
  flex-shrink: 0;
  opacity: 0.55;
  transition: opacity var(--t-base) var(--ease-out);
}
.gt-divider-galpon:hover .gt-divider-galpon__icon {
  opacity: 0.85;
}

/* Variante sutil reducida para usar entre BonosStack y Comparativa
   (zona de alta densidad informativa, divider más livianito) */
.gt-divider-galpon--mini {
  margin: 16px auto 12px;   /* Sprint 34.6 polish: idem — tighter */
  max-width: 220px;
}
.gt-divider-galpon--mini .gt-divider-galpon__icon {
  width: 20px;
  height: 18px;
  opacity: 0.40;
}

/* ============================================================
   Sprint 34.6.1 polish · Garantía pill duplicada en LEFT column para desktop.
   El right column (gt-hero__copy) tiene Voss frame + anchor + price + etc,
   queda mucho más largo que el left column (que solo tiene foto + picker).
   Movemos visualmente la Garantía pill al left column SOLO en desktop para
   balancear alturas. Mobile mantiene el orden conversion-optimizado original.
   ============================================================ */

/* Mobile (default): la pill duplicada está oculta. La original arriba del CTA
   es la que se muestra. */
.gt-hero__guarantee-band--in-left {
  display: none;
}

@media (min-width: 820px) {
  /* Desktop: mostrar la pill duplicada en left column */
  .gt-hero__guarantee-band--in-left {
    display: flex;
    margin-top: 4px;  /* spacing más tight con el picker arriba */
  }

  /* Desktop: ocultar la pill original en right column (la del CTA) para
     evitar duplicado visual. Selector compuesto = mayor especificidad
     que el .gt-hero__guarantee-band { display: flex } base. */
  .gt-hero__copy > .gt-hero__guarantee-band:not(.gt-hero__guarantee-band--in-left) {
    display: none;
  }
}

/* ============================================================
   Sprint 34.6.1 polish v4 · Hero columns alignment (desktop only).
   Garantizar que el bottom del CTA = bottom del size/color picker card,
   independientemente de qué columna sea naturalmente más alta.
   ============================================================ */
@media (min-width: 820px) {
  /* Override align-items: flex-start de la regla base → stretch para que
     ambas columnas tengan la misma altura (max de las dos naturales). */
  .gt-hero {
    align-items: stretch;
  }

  /* margin-top: auto empuja el CTA al BOTTOM del right column.
     Como right col se estiró al alto del left col, el CTA bottom queda
     alineado con el bottom del left col (que termina con el picker card). */
  .gt-hero__cta {
    margin-top: auto;
  }
}

/* ============================================================
   Sprint 34.6.1 polish v5 · Balance vertical gaps en PriceBlock (desktop).
   Antes: gap chico (12px) entre cuotas→transfer y entre transfer→visa;
   gap grande (~32px) entre visa→CTA (creado por margin-top: auto del v4).
   Ahora: redistribuir el espacio para que TODOS los gaps queden similares
   (~22px) y la columna right respire de manera uniforme.
   ============================================================ */
@media (min-width: 820px) {
  /* Aumentar el gap interno entre subbloques de PriceBlock (Envío→Transfer
     y Transfer→Visa) de 12px → 22px para acercarse al gap visual del
     CTA debajo. */
  .gt-price__hint,
  .gt-price__note {
    margin-top: 15px;
  }

  /* Aumentar también el gap entre PriceBlock y CTA (cuando la columna
     natural ya está más alta, el auto del CTA absorbe lo que sobre). */
  .gt-price {
    margin-bottom: 15px;
  }
}

/* Sprint 34.6.1 polish v7 · Push picker card al BOTTOM del LEFT column.
   Combinado con padding-bottom 18px reducido del picker, esto mantiene
   alineación perfecta CTA↔picker bottom Y reduce el whitespace interno
   del card. El gap visual que aparece entre la pill y el picker (~12px)
   actúa como separador intencional entre trust signal y selector. */
@media (min-width: 820px) {
  .gt-hero__pickers {
    margin-top: auto;
  }
}

/* ============================================================
   Sprint 35 · Testimonios Card Stack (Swiper.js)
   ------------------------------------------------------------
   Reemplaza al grid 2x2 estatico. Card stack swipeable con
   Mariano centrado (5to testimonio - obra-anchor $9M).

   Clever variant Damian: cards traseras con texto fadeado pero
   sub-avatar PILL siempre legible al 100% para "ese soy yo".
   ============================================================ */

.gt-testi-stack__wrap {
  margin-top: 28px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  /* Sprint 35.2 · Permite que las cards laterales del abanico se
     extiendan hacia afuera sin que el ancestor las clipee. */
  width: 100%;
  overflow: visible;
}

.gt-testi-stack {
  width: 100%;
  /* Sprint 35.2 · Card ancho 480px desktop. El fan extiende los slides
     LATERALES hacia afuera vía perSlideOffset alto, así las 5 cards se
     ven con sus nombres/pills sin que la card active sea gigante. */
  max-width: 480px;
  height: 480px;
  overflow: visible !important;
}

.gt-testi-stack__slide {
  border-radius: 20px;
  overflow: hidden;
  background: #fff;
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.04),
    0 12px 32px rgba(16, 24, 30, 0.10);
  transition: box-shadow .35s cubic-bezier(.4,0,.2,1);
}

.gt-testi-stack__slide.swiper-slide-active {
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.06),
    0 24px 48px rgba(16, 24, 30, 0.16);
}

.gt-testi-stack__card {
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 24px;
  background: #fff;
  border: 1px solid #ECECE6;
}

.gt-testi-stack__card-head {
  display: flex;
  align-items: center;
  gap: 14px;
}

.gt-testi-stack__avatar-btn {
  appearance: none;
  border: none;
  background: transparent;
  padding: 0;
  cursor: zoom-in;
  position: relative;
  flex-shrink: 0;
  border-radius: 50%;
  transition: transform .25s cubic-bezier(.4,0,.2,1);
}

.gt-testi-stack__avatar-btn:hover,
.gt-testi-stack__avatar-btn:focus-visible {
  transform: scale(1.05);
  outline: none;
}

.gt-testi-stack__avatar-btn:focus-visible {
  box-shadow: 0 0 0 3px rgba(56, 161, 131, 0.35);
}

.gt-testi-stack__avatar {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  overflow: hidden;
  position: relative;
  font-weight: 600;
  color: #10181E;
  font-size: 18px;
}

.gt-testi-stack__avatar img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.gt-testi-stack__avatar-zoom {
  position: absolute;
  right: -4px;
  bottom: -4px;
  width: 22px;
  height: 22px;
  padding: 4px;
  background: #fff;
  border-radius: 50%;
  color: #38A183;
  box-shadow: 0 2px 6px rgba(16, 24, 30, 0.20);
  stroke-width: 2.5;
}

.gt-testi-stack__who {
  flex: 1;
  min-width: 0;
}

.gt-testi-stack__nombre-row {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.gt-testi-stack__nombre {
  font-weight: 600;
  font-size: 15px;
  color: #10181E;
}

.gt-testi-stack__verified {
  display: inline-flex;
  align-items: center;
  color: #38A183;
}

.gt-testi-stack__verified i {
  width: 16px;
  height: 16px;
}

.gt-testi-stack__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  margin-top: 2px;
  font-size: 12px;
  color: #475569;
}

.gt-testi-stack__dot {
  opacity: 0.5;
}

.gt-testi-stack__subavatar {
  display: inline-flex;
  align-self: flex-start;
  padding: 4px 10px;
  border-radius: 999px;
  background: #E8F3EE;
  color: #2A6F57;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.01em;
  white-space: nowrap;
  transition: opacity .35s ease;
}

.gt-testi-stack__stars {
  display: flex;
  gap: 2px;
  color: #F59E0B;
}

.gt-testi-stack__star {
  width: 16px;
  height: 16px;
  fill: none;
}

.gt-testi-stack__star.is-filled {
  fill: currentColor;
}

.gt-testi-stack__quote {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.55;
  color: #10181E;
  flex: 1;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 7;
  transition: opacity .35s ease;
}

.gt-testi-stack__uso {
  display: flex;
  gap: 8px;
  align-items: center;
  padding-top: 12px;
  border-top: 1px solid #ECECE6;
  font-size: 12px;
  color: #475569;
  transition: opacity .35s ease;
}

.gt-testi-stack__uso i {
  width: 14px;
  height: 14px;
  color: #38A183;
  flex-shrink: 0;
}

/* Cards traseras: texto fadeado pero sub-avatar al 100% */
.gt-testi-stack__slide:not(.swiper-slide-active) .gt-testi-stack__quote,
.gt-testi-stack__slide:not(.swiper-slide-active) .gt-testi-stack__uso,
.gt-testi-stack__slide:not(.swiper-slide-active) .gt-testi-stack__stars {
  opacity: 0.35;
}

.gt-testi-stack__slide:not(.swiper-slide-active) .gt-testi-stack__subavatar {
  opacity: 1 !important;
  box-shadow: 0 2px 6px rgba(16, 24, 30, 0.10);
}

.gt-testi-stack__slide:not(.swiper-slide-active) .gt-testi-stack__nombre {
  opacity: 0.7;
}

.gt-testi-stack__hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(16, 24, 30, 0.08);
  color: #475569;
  font-size: 12px;
  font-weight: 500;
}

.gt-testi-stack__hint i {
  width: 14px;
  height: 14px;
}

/* Sprint 35.1 · Hint adaptativo — el span "o usá flechas del teclado"
   se oculta en mobile porque no hay teclado físico (pedido Damián). */
.gt-testi-stack__hint-kbd {
  display: inline;
}

@media (max-width: 480px) {
  .gt-testi-stack {
    /* Sprint 35.1 · Cards más chicas en mobile → se ven los laterales
       con sus pills, y el visitante intuye que es un stack swipeable. */
    max-width: 260px;
    height: 460px;
  }
  .gt-testi-stack__card {
    padding: 18px;
    gap: 12px;
  }
  .gt-testi-stack__quote {
    font-size: 13.5px;
    -webkit-line-clamp: 7;
  }
  /* Sprint 35.1 · No mostrar mención del teclado en mobile */
  .gt-testi-stack__hint-kbd {
    display: none;
  }
  .gt-testi-stack__hint {
    padding: 6px 12px;
    font-size: 11.5px;
  }
}

/* ============================================================
   Sprint 35 - Testimonios Avatar Lightbox
   ============================================================ */

.gt-avatar-lightbox {
  position: fixed;
  inset: 0;
  z-index: 100;
  background: rgba(16, 24, 30, 0.72);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  animation: gt-avatar-lightbox-fade-in .25s cubic-bezier(.4,0,.2,1);
}

@keyframes gt-avatar-lightbox-fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

.gt-avatar-lightbox__dialog {
  background: #FAF8F4;
  border-radius: 24px;
  width: 100%;
  max-width: 480px;
  max-height: calc(100vh - 40px);
  overflow-y: auto;
  position: relative;
  display: flex;
  flex-direction: column;
  box-shadow: 0 24px 64px rgba(16, 24, 30, 0.4);
  animation: gt-avatar-lightbox-pop .35s cubic-bezier(.34,1.56,.64,1);
}

@keyframes gt-avatar-lightbox-pop {
  from { transform: scale(0.92); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}

/* Sprint 35.1 · Animación de cierre suave (pedido Damián). El componente
   agrega la clase .is-closing y espera 280ms antes de unmount. */
.gt-avatar-lightbox.is-closing {
  animation: gt-avatar-lightbox-fade-out .28s cubic-bezier(.4,0,.2,1) forwards;
}
.gt-avatar-lightbox.is-closing .gt-avatar-lightbox__dialog {
  animation: gt-avatar-lightbox-pop-out .28s cubic-bezier(.4,0,.2,1) forwards;
}
@keyframes gt-avatar-lightbox-fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}
@keyframes gt-avatar-lightbox-pop-out {
  from { transform: scale(1); opacity: 1; }
  to { transform: scale(0.94); opacity: 0; }
}

.gt-avatar-lightbox__close {
  position: absolute;
  top: 12px;
  right: 12px;
  appearance: none;
  border: none;
  background: rgba(255, 255, 255, 0.9);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
  color: #10181E;
  box-shadow: 0 2px 8px rgba(16, 24, 30, 0.15);
  transition: transform .2s ease, background .2s ease;
}

.gt-avatar-lightbox__close:hover,
.gt-avatar-lightbox__close:focus-visible {
  background: #fff;
  transform: scale(1.05);
  outline: none;
}

.gt-avatar-lightbox__close:focus-visible {
  box-shadow: 0 0 0 3px rgba(56, 161, 131, 0.4);
}

.gt-avatar-lightbox__close i {
  width: 20px;
  height: 20px;
}

.gt-avatar-lightbox__photo-wrap {
  width: 100%;
  aspect-ratio: 1 / 1;
  background: #ECECE6;
  border-radius: 24px 24px 0 0;
  overflow: hidden;
}

.gt-avatar-lightbox__photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.gt-avatar-lightbox__body {
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.gt-avatar-lightbox__head {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.gt-avatar-lightbox__name {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 18px;
  font-weight: 600;
  color: #10181E;
  flex-wrap: wrap;
}

.gt-avatar-lightbox__verified {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 10px;
  border-radius: 999px;
  background: #E8F3EE;
  color: #38A183;
  font-size: 11px;
  font-weight: 600;
}

.gt-avatar-lightbox__verified i {
  width: 13px;
  height: 13px;
}

.gt-avatar-lightbox__meta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 13px;
  color: #475569;
}

.gt-avatar-lightbox__dot {
  opacity: 0.5;
}

.gt-avatar-lightbox__subavatar {
  display: inline-flex;
  padding: 3px 10px;
  border-radius: 999px;
  background: #E8F3EE;
  color: #2A6F57;
  font-size: 12px;
  font-weight: 600;
  margin-left: 4px;
}

.gt-avatar-lightbox__stars {
  display: flex;
  gap: 3px;
  color: #F59E0B;
}

.gt-avatar-lightbox__star {
  width: 18px;
  height: 18px;
  fill: none;
}

.gt-avatar-lightbox__star.is-filled {
  fill: currentColor;
}

.gt-avatar-lightbox__quote {
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
  color: #10181E;
}

.gt-avatar-lightbox__uso {
  display: flex;
  gap: 8px;
  align-items: center;
  padding-top: 12px;
  border-top: 1px solid #ECECE6;
  font-size: 13px;
  color: #475569;
}

.gt-avatar-lightbox__uso i {
  width: 16px;
  height: 16px;
  color: #38A183;
  flex-shrink: 0;
}

@media (max-width: 480px) {
  .gt-avatar-lightbox {
    padding: 12px;
  }
  .gt-avatar-lightbox__body {
    padding: 20px;
  }
  .gt-avatar-lightbox__name {
    font-size: 17px;
  }
  .gt-avatar-lightbox__quote {
    font-size: 14px;
  }
}

/* ============================================================
   Sprint 35.3 · Custom Card Stack (sin Swiper)
   ------------------------------------------------------------
   Rebuild manual para que las 5 cards sean VISIBLES y legibles
   en el abanico (Damián: experiencia premium + volumen Hormozi).
   Sobrescribe el CSS Sprint 35 anterior por cascade order.
   ============================================================ */

/* Override wrap del stack viejo (Sprint 35) */
.gt-testi-stack__wrap {
  margin-top: 32px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  width: 100%;
  overflow: visible;
  /* Sprint 35.3 · Sin overflow horizontal de la sección
     a costa de las cards laterales. Padding adicional. */
  padding: 0 16px;
}

/* Container del stack — relative para position absolute children */
.gt-testi-stack {
  position: relative;
  width: 100%;
  max-width: 380px;
  /* Sprint 35.3 · Altura intrínseca según contenido — no fixed
     height para que ajuste a la card central. */
  height: 460px;
  margin: 0 auto;
  /* Z-index isolation para que las cards no salpiquen otras secciones */
  isolation: isolate;
  /* perspective sutil para dar 3D feel */
  perspective: 1600px;
  perspective-origin: 50% 50%;
}

/* Cards individuales — position absolute, transformación calculada en JSX */
.gt-testi-stack .gt-testi-stack__card {
  position: absolute;
  top: 0;
  left: 50%;
  width: 100%;
  max-width: 320px;
  height: 100%;
  /* Reset del transform-origin para que rotación quede en el centro */
  transform-origin: 50% 50%;
  /* Reset margins y override del card antiguo */
  margin: 0;
  background: #fff;
  border: 1px solid #ECECE6;
  border-radius: 20px;
  padding: 22px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.04),
    0 8px 24px rgba(16, 24, 30, 0.08);
  cursor: pointer;
  /* Sprint 35.3 · Curva de easing premium (Apple-like) + duración suave */
  transition:
    transform .55s cubic-bezier(.4, 0, .2, 1),
    box-shadow .35s cubic-bezier(.4, 0, .2, 1),
    opacity .35s ease;
  /* will-change para GPU acceleration */
  will-change: transform, opacity;
}

/* Active card · destacada con shadow más fuerte + sin cursor pointer */
.gt-testi-stack .gt-testi-stack__card.is-active {
  cursor: default;
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.06),
    0 24px 56px rgba(16, 24, 30, 0.18);
  border-color: #DCDCD2;
}

/* Hover sutil en las laterales para affordance */
.gt-testi-stack .gt-testi-stack__card:not(.is-active):hover {
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.06),
    0 16px 32px rgba(16, 24, 30, 0.14);
}

/* Avatar btn (sin lupa — descubrible por intuición) */
.gt-testi-stack__avatar-btn {
  appearance: none;
  border: none;
  background: transparent;
  padding: 0;
  cursor: pointer;
  position: relative;
  flex-shrink: 0;
  border-radius: 50%;
  transition: transform .25s cubic-bezier(.4, 0, .2, 1);
}

.gt-testi-stack__card.is-active .gt-testi-stack__avatar-btn {
  cursor: zoom-in;
}

.gt-testi-stack__avatar-btn:hover,
.gt-testi-stack__avatar-btn:focus-visible {
  transform: scale(1.05);
  outline: none;
}
.gt-testi-stack__avatar-btn:focus-visible {
  box-shadow: 0 0 0 3px rgba(56, 161, 131, 0.35);
}

/* Card head */
.gt-testi-stack__card-head {
  display: flex;
  align-items: center;
  gap: 12px;
}

/* Sub-avatar pill — siempre 100% legible incluso en cards no-active */
.gt-testi-stack .gt-testi-stack__card .gt-testi-stack__subavatar {
  display: inline-flex;
  align-self: flex-start;
  padding: 4px 10px;
  border-radius: 999px;
  background: #E8F3EE;
  color: #2A6F57;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.01em;
  white-space: nowrap;
  opacity: 1 !important;
  transition: none;
}

/* Cards laterales: fade del contenido secundario pero NO de la pill */
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__quote,
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__uso,
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__stars {
  opacity: 0.42;
}
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__nombre {
  opacity: 0.78;
}
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__meta {
  opacity: 0.6;
}

/* Sombra extra sutil en pill de cards no-active para que se destaque */
.gt-testi-stack .gt-testi-stack__card:not(.is-active) .gt-testi-stack__subavatar {
  box-shadow: 0 2px 6px rgba(16, 24, 30, 0.10);
}

/* Quote */
.gt-testi-stack .gt-testi-stack__card .gt-testi-stack__quote {
  margin: 0;
  font-size: 14px;
  line-height: 1.55;
  color: #10181E;
  flex: 1;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 7;
}

/* Uso */
.gt-testi-stack .gt-testi-stack__card .gt-testi-stack__uso {
  display: flex;
  gap: 8px;
  align-items: center;
  padding-top: 12px;
  border-top: 1px solid #ECECE6;
  font-size: 12px;
  color: #475569;
}
.gt-testi-stack .gt-testi-stack__card .gt-testi-stack__uso i {
  width: 14px;
  height: 14px;
  color: #38A183;
  flex-shrink: 0;
}

/* Sprint 35.3 · Dots indicador de posición — feedback claro */
.gt-testi-stack__dots {
  display: flex;
  gap: 8px;
  margin: 0;
  padding: 0;
  align-items: center;
  justify-content: center;
}
.gt-testi-stack__dot-btn {
  appearance: none;
  border: none;
  background: rgba(16, 24, 30, 0.20);
  width: 7px;
  height: 7px;
  border-radius: 50%;
  padding: 0;
  cursor: pointer;
  transition:
    background .3s ease,
    width .3s cubic-bezier(.4, 0, .2, 1),
    transform .3s cubic-bezier(.4, 0, .2, 1);
}
.gt-testi-stack__dot-btn:hover {
  background: rgba(16, 24, 30, 0.35);
}
.gt-testi-stack__dot-btn.is-active {
  background: #38A183;
  width: 24px;
  border-radius: 999px;
}

/* Hint — reusamos selector existente */
.gt-testi-stack__hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(16, 24, 30, 0.08);
  color: #475569;
  font-size: 12px;
  font-weight: 500;
}
.gt-testi-stack__hint i {
  width: 14px;
  height: 14px;
}

/* Hint adaptativo mobile vs desktop */
.gt-testi-stack__hint-kbd {
  display: inline;
}

/* ============================================================
   DESKTOP layout (≥821px) · fan amplio con 5 cards visibles
   ============================================================ */
@media (min-width: 821px) {
  .gt-testi-stack__wrap {
    padding: 0;
  }
  .gt-testi-stack {
    /* Container relative — solo importa para position absolute children.
       El ancho real del fan viene de los translateX del JSX (stepX=260,
       las far quedan en ±520 del centro). */
    max-width: 380px;
    height: 520px;
    margin: 0 auto;
  }
  .gt-testi-stack .gt-testi-stack__card {
    max-width: 380px;
  }
}

/* ============================================================
   MOBILE layout (<480px) · fan compacto
   ============================================================ */
@media (max-width: 480px) {
  .gt-testi-stack__wrap {
    padding: 0 8px;
    gap: 20px;
  }
  .gt-testi-stack {
    max-width: 260px;
    height: 470px;
  }
  .gt-testi-stack .gt-testi-stack__card {
    max-width: 260px;
    padding: 18px;
    gap: 10px;
  }
  .gt-testi-stack .gt-testi-stack__card .gt-testi-stack__quote {
    font-size: 13.5px;
    -webkit-line-clamp: 7;
  }
  .gt-testi-stack__hint-kbd {
    display: none;
  }
  .gt-testi-stack__hint {
    padding: 6px 12px;
    font-size: 11.5px;
  }
}

/* Sprint 35.4 · Pointer drag affordance — el wrap es agarrable. */
.gt-testi-stack__wrap {
  cursor: grab;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
.gt-testi-stack__wrap:active {
  cursor: grabbing;
}
/* Las cards individuales no heredan grab — mantienen pointer normal
   para que el avatar btn y el click conserven feel propio. */
.gt-testi-stack__wrap .gt-testi-stack__card.is-active {
  cursor: grab;
}
.gt-testi-stack__wrap:active .gt-testi-stack__card.is-active {
  cursor: grabbing;
}

/* ============================================================
   Sprint 35.6 · Testimonios Card Stack (Swiper.js — vuelta al feel original)
   ------------------------------------------------------------
   Damián pidió el feel "de fábrica" del drag (Swiper effect cards).
   Selectores nuevos .gt-testi-swiper__* para evitar conflicto con
   el CSS Sprint 35.3 (.gt-testi-stack__* con position absolute).
   ============================================================ */

.gt-testi-swiper__wrap {
  margin-top: 28px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  width: 100%;
  overflow: visible;
}

.gt-testi-swiper {
  width: 100%;
  max-width: 420px;
  height: 480px;
  overflow: visible !important;
}

.gt-testi-swiper__slide {
  border-radius: 20px;
  overflow: hidden;
  background: #fff;
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.04),
    0 12px 32px rgba(16, 24, 30, 0.10);
  transition: box-shadow .35s cubic-bezier(.4,0,.2,1);
}

.gt-testi-swiper__slide.swiper-slide-active {
  box-shadow:
    0 1px 2px rgba(16, 24, 30, 0.06),
    0 24px 48px rgba(16, 24, 30, 0.16);
}

.gt-testi-swiper__card {
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 24px;
  background: #fff;
  border: 1px solid #ECECE6;
}

.gt-testi-swiper__card-head {
  display: flex;
  align-items: center;
  gap: 14px;
}

.gt-testi-swiper__avatar-btn {
  appearance: none;
  border: none;
  background: transparent;
  padding: 0;
  cursor: pointer;
  position: relative;
  flex-shrink: 0;
  border-radius: 50%;
  transition: transform .25s cubic-bezier(.4,0,.2,1);
}

.gt-testi-swiper__slide.swiper-slide-active .gt-testi-swiper__avatar-btn {
  cursor: zoom-in;
}

.gt-testi-swiper__avatar-btn:hover,
.gt-testi-swiper__avatar-btn:focus-visible {
  transform: scale(1.05);
  outline: none;
}
.gt-testi-swiper__avatar-btn:focus-visible {
  box-shadow: 0 0 0 3px rgba(56, 161, 131, 0.35);
}

.gt-testi-swiper__avatar {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  overflow: hidden;
  position: relative;
  font-weight: 600;
  color: #10181E;
  font-size: 18px;
}
.gt-testi-swiper__avatar img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.gt-testi-swiper__who {
  flex: 1;
  min-width: 0;
}

.gt-testi-swiper__nombre-row {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.gt-testi-swiper__nombre {
  font-weight: 600;
  font-size: 15px;
  color: #10181E;
}

.gt-testi-swiper__verified {
  display: inline-flex;
  align-items: center;
  color: #38A183;
}
.gt-testi-swiper__verified i {
  width: 16px;
  height: 16px;
}

.gt-testi-swiper__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  margin-top: 2px;
  font-size: 12px;
  color: #475569;
}
.gt-testi-swiper__dot {
  opacity: 0.5;
}

/* Sub-avatar pill — siempre 100% legible (clever variant) */
.gt-testi-swiper__subavatar {
  display: inline-flex;
  align-self: flex-start;
  padding: 4px 10px;
  border-radius: 999px;
  background: #E8F3EE;
  color: #2A6F57;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.01em;
  white-space: nowrap;
  transition: opacity .35s ease;
}

.gt-testi-swiper__stars {
  display: flex;
  gap: 2px;
  color: #F59E0B;
}
.gt-testi-swiper__star {
  width: 16px;
  height: 16px;
  fill: none;
}
.gt-testi-swiper__star.is-filled {
  fill: currentColor;
}

.gt-testi-swiper__quote {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.55;
  color: #10181E;
  flex: 1;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 7;
  transition: opacity .35s ease;
}

.gt-testi-swiper__uso {
  display: flex;
  gap: 8px;
  align-items: center;
  padding-top: 12px;
  border-top: 1px solid #ECECE6;
  font-size: 12px;
  color: #475569;
  transition: opacity .35s ease;
}
.gt-testi-swiper__uso i {
  width: 14px;
  height: 14px;
  color: #38A183;
  flex-shrink: 0;
}

/* Cards traseras — texto fadeado pero sub-avatar pill al 100% */
.gt-testi-swiper__slide:not(.swiper-slide-active) .gt-testi-swiper__quote,
.gt-testi-swiper__slide:not(.swiper-slide-active) .gt-testi-swiper__uso,
.gt-testi-swiper__slide:not(.swiper-slide-active) .gt-testi-swiper__stars {
  opacity: 0.35;
}
.gt-testi-swiper__slide:not(.swiper-slide-active) .gt-testi-swiper__subavatar {
  opacity: 1 !important;
  box-shadow: 0 2px 6px rgba(16, 24, 30, 0.10);
}
.gt-testi-swiper__slide:not(.swiper-slide-active) .gt-testi-swiper__nombre {
  opacity: 0.7;
}

/* Dots de navegación */
.gt-testi-swiper__dots {
  display: flex;
  gap: 8px;
  margin: 0;
  padding: 0;
  align-items: center;
  justify-content: center;
}
.gt-testi-swiper__dot-btn {
  appearance: none;
  border: none;
  background: rgba(16, 24, 30, 0.20);
  width: 7px;
  height: 7px;
  border-radius: 50%;
  padding: 0;
  cursor: pointer;
  transition:
    background .3s ease,
    width .3s cubic-bezier(.4, 0, .2, 1),
    transform .3s cubic-bezier(.4, 0, .2, 1);
}
.gt-testi-swiper__dot-btn:hover {
  background: rgba(16, 24, 30, 0.35);
}
.gt-testi-swiper__dot-btn.is-active {
  background: #38A183;
  width: 24px;
  border-radius: 999px;
}

/* Hint */
.gt-testi-swiper__hint {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid rgba(16, 24, 30, 0.08);
  color: #475569;
  font-size: 12px;
  font-weight: 500;
}
.gt-testi-swiper__hint i {
  width: 14px;
  height: 14px;
}
.gt-testi-swiper__hint-kbd {
  display: inline;
}

/* Mobile */
@media (max-width: 480px) {
  .gt-testi-swiper {
    max-width: 340px;
    height: 460px;
  }
  .gt-testi-swiper__card {
    padding: 20px;
    gap: 12px;
  }
  .gt-testi-swiper__quote {
    font-size: 14px;
    -webkit-line-clamp: 8;
  }
  .gt-testi-swiper__hint-kbd {
    display: none;
  }
  .gt-testi-swiper__hint {
    padding: 6px 12px;
    font-size: 11.5px;
  }
}

/* Sprint 35.7 · Desktop fan amplio + aprovechar espacio lateral.
   El container más ancho da margen para que las cards prev/next
   se muestren con sus pills/contenido visible sin clipearse. */
@media (min-width: 821px) {
  .gt-testi-swiper {
    max-width: 480px;
    height: 500px;
  }
}

/* Sprint 35.8 · Mobile -25% para que se vean MÁS testimonios laterales.
   Container más chico + padding/font reducidos. */
@media (max-width: 480px) {
  .gt-testi-swiper {
    max-width: 255px;
    height: 360px;
  }
  .gt-testi-swiper__card {
    padding: 15px;
    gap: 9px;
  }
  .gt-testi-swiper__avatar {
    width: 44px;
    height: 44px;
    font-size: 15px;
  }
  .gt-testi-swiper__nombre {
    font-size: 13px;
  }
  .gt-testi-swiper__meta {
    font-size: 10px;
  }
  .gt-testi-swiper__subavatar {
    font-size: 10px;
    padding: 3px 8px;
  }
  .gt-testi-swiper__star {
    width: 12px;
    height: 12px;
  }
  .gt-testi-swiper__quote {
    font-size: 11.5px;
    -webkit-line-clamp: 7;
  }
  .gt-testi-swiper__uso {
    font-size: 10px;
    padding-top: 9px;
  }
  .gt-testi-swiper__uso i {
    width: 12px;
    height: 12px;
  }
}

/* ============================================================
   Sprint 35.10 · Comparativa desplegable en mobile
   ------------------------------------------------------------
   Damián: "en mobile ocupa MUCHO espacio, los visitantes no llegan
   a testimonios/calculadora". Toggle button + collapse animado.
   Desktop: siempre expandida, button hidden.
   ============================================================ */

/* Toggle button — invisible en desktop por default */
.gt-cmp__toggle {
  display: none;
}

.gt-cmp__toggle-icon {
  width: 18px;
  height: 18px;
  transition: transform .3s cubic-bezier(.4,0,.2,1);
}

@media (max-width: 820px) {
  .gt-cmp__toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin: 16px auto 0;
    padding: 12px 22px;
    border-radius: 999px;
    border: 1.5px solid #38A183;
    background: rgba(56, 161, 131, 0.06);
    color: #2A6F57;
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition:
      background .25s ease,
      transform .15s ease,
      box-shadow .25s ease;
    min-height: 44px;
  }

  .gt-cmp__toggle:hover,
  .gt-cmp__toggle:focus-visible {
    background: rgba(56, 161, 131, 0.12);
    outline: none;
  }
  .gt-cmp__toggle:focus-visible {
    box-shadow: 0 0 0 3px rgba(56, 161, 131, 0.30);
  }
  .gt-cmp__toggle:active {
    transform: scale(0.98);
  }

  /* Collapse del body — max-height transition.
     COLAPSADO: muestra ~120px de la tabla con fade (sneak peek),
     dejando claro al visitante que HAY más adentro. */
  .gt-cmp--collapsed .gt-cmp__body {
    max-height: 120px;
    overflow: hidden;
    position: relative;
    transition: max-height .55s cubic-bezier(.4,0,.2,1);
    /* Fade-out al final para que se vea "hay más debajo" */
    mask-image: linear-gradient(to bottom, #000 0%, #000 60%, transparent 100%);
    -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 60%, transparent 100%);
  }

  /* Expanded: max-height alta para que la transition funcione.
     Usamos un valor grande pero finito (vh + buffer) para que CSS
     pueda animar el max-height. */
  .gt-cmp .gt-cmp__body {
    max-height: 5000px;
    overflow: hidden;
    transition: max-height .65s cubic-bezier(.4,0,.2,1);
  }

  /* Wrap del section: padding-bottom reducido cuando colapsado para
     no dejar espacio vacío feo. */
  .gt-cmp--collapsed {
    padding-bottom: 24px;
  }
}

/* Sprint 35.10 fix · Specificity correcta — .gt-cmp.gt-cmp--collapsed
   gana sobre .gt-cmp__body genérico (mismo orden de cascade, 2 classes
   en el mismo elemento + descendant). */
@media (max-width: 820px) {
  .gt-cmp.gt-cmp--collapsed .gt-cmp__body {
    max-height: 120px !important;
  }
}

/* Sprint 35.11 · Damián: "abrir más lento, cerrar más rápido" para feel
   premium. CSS trick: la transition rule del estado DESTINO se aplica.
   - Expandir (target = .gt-cmp sin collapsed) → 1100ms
   - Colapsar (target = .gt-cmp--collapsed) → 700ms */
@media (max-width: 820px) {
  .gt-cmp .gt-cmp__body {
    transition: max-height 1.1s cubic-bezier(.22, 1, .36, 1) !important;
  }
  .gt-cmp.gt-cmp--collapsed .gt-cmp__body {
    transition: max-height .7s cubic-bezier(.4, 0, .2, 1) !important;
  }
}

/* Sprint 35.11.1 · El !important de max-height bloqueaba al JS de
   setear el scrollHeight exacto. Lo elimino dejando solo specificity. */
@media (max-width: 820px) {
  .gt-cmp.gt-cmp--collapsed .gt-cmp__body {
    max-height: 120px;
  }
}

/* Sprint 35.11.2 · Reserva permanente del espacio del scrollbar →
   cuando el modal aplica overflow:hidden el viewport NO cambia →
   los elementos position:fixed (sticky bar + WhatsApp FAB) no se mueven.
   Soporta Chrome 94+ / Firefox 97+ / Safari 16+ / Edge 94+ (>95% users). */
html {
  scrollbar-gutter: stable;
}

/* Sprint 35.11.3 · FIX: scrollbar-gutter SOLO en desktop. En Chrome
   DevTools mobile mode reservaba el gutter aunque mobile real no
   tenga scrollbar visible (Safari iOS overlay), causando shift
   horizontal. El bug que arreglaba (shift de sticky bar al abrir
   modal) solo ocurre en desktop, así que limitamos a ≥821px. */
@media (max-width: 820px) {
  html {
    scrollbar-gutter: auto !important;
  }
}

/* Sprint 35.11.4 · No scroll horizontal innecesario + scrollbars
   visualmente ocultas (mobile experience nativa premium).
   El scroll vertical sigue funcionando con touch/wheel. */
html, body {
  overflow-x: hidden;
}

/* Mobile: ocultar scrollbars visuales (Chrome / Safari / Firefox).
   El scroll sigue funcionando, solo se ocultan las barras. */
@media (max-width: 820px) {
  html, body {
    scrollbar-width: none;     /* Firefox */
    -ms-overflow-style: none;  /* IE/Edge legacy */
  }
  html::-webkit-scrollbar,
  body::-webkit-scrollbar {
    width: 0;
    height: 0;
    display: none;             /* Chrome/Safari/Edge */
  }
}

/* Sprint 35.11.6 · Fallback si el JS no aplica por cache — max-height
   más cerca del contenido real (~2400px). El visible portion cubre
   95% de la animación de 1.1s incluso si el setProperty del JS falla. */
@media (max-width: 820px) {
  .gt-cmp .gt-cmp__body {
    max-height: 2800px !important;
  }
}

/* Sprint 35.11.7 · TEST DIAGNÓSTICO — animación de expand en 3 SEGUNDOS
   para verificar si tu browser tiene cache. Si seguís viéndola instantánea,
   tu browser tiene el CSS cacheado. Si la ves DURAR 3 segundos enteros,
   el CSS se aplica y solo hay que afinar la duración. */
@media (max-width: 820px) {
  .gt-cmp .gt-cmp__body {
    transition: max-height 3s cubic-bezier(.22, 1, .36, 1) !important;
  }
}

/* Sprint 35.11.8 · Vuelta a 1.1s premium (3s era diagnóstico). Esta
   regla viene DESPUÉS del test 3s y la sobreescribe. */
@media (max-width: 820px) {
  .gt-cmp .gt-cmp__body {
    transition: max-height 1.1s cubic-bezier(.22, 1, .36, 1) !important;
  }
}

/* Sprint 35.11.9 · La curva ease-out anterior llegaba al 95% en 500ms
   → percepción "rapidísima" aunque la duración real fuera 1.1s.
   Cambio a ease-in-out (Material Design easing standard) que distribuye
   el crecimiento parejo: lento al arranque, rapido al medio, lento al
   final → percepción cinematográfica real. */
@media (max-width: 820px) {
  .gt-cmp .gt-cmp__body {
    transition: max-height 1.2s cubic-bezier(0.4, 0, 0.2, 1) !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36 + 37 · PRICING PSYCHOLOGY FRAMEWORK (Wave 1 + Wave 2)
   Aplicación del PRICING_PSYCHOLOGY_FRAMEWORK.md (curso Uxpeak+).
   Implementado por Damián 2026-06-03.

   Quick wins activos:
     QW-1A · Banda Hero — copy específico ("Transferible si vendés la casa")
     QW-2  · PriceBlock — cost-per-year (Mission 1 + 8)
     QW-4  · Comparativa — visual weight en fila TOTAL (Mission 3)
     QW-6  · BonosStack — strikethrough en valor anchor (Mission 7)
     QW-7  · Rule of 100 — 3 variantes (Mission 4)
              · A (expensas): comentada en PriceBlock, activable
              · B (default): "12 meses · luego 14 años gratis"
              · C (sticky):  "≈ $X/día"
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   QW-2 · Cost-per-year microcopy (PriceBlock)
   Mission 1 (Fractional unit) + Mission 8 (Patagonia case).
   Convierte precio one-shot en proyección anual durante los
   15 años de garantía. Discreto, color secundario.
   ───────────────────────────────────────────────────────────── */
.gt-price__per-year {
  margin-top: 6px;
  font-size: 0.82rem;
  line-height: 1.4;
  color: var(--fg-3, #6B7280);
  font-style: italic;
  letter-spacing: 0.01em;
}

/* ─────────────────────────────────────────────────────────────
   QW-7B · Finitud pill (PriceBlock · variante default)
   Mission 4 (Loss aversion + finitud). El reframe de
   "12 cuotas durante 1 año → luego 14 años gratis" convierte
   la cuota recurrente en inversión finita. El pill verde
   acentúa el "12 meses" como ancla temporal cerrada.
   ───────────────────────────────────────────────────────────── */
.gt-price__finitud {
  margin-top: 8px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.85rem;
  color: var(--fg-2, #475569);
  flex-wrap: wrap;
}
.gt-price__finitud-pill {
  display: inline-flex;
  align-items: center;
  padding: 3px 10px;
  background: rgba(56, 161, 131, 0.08);
  color: var(--gt-green-pantano, #2F8A6F);
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.gt-price__finitud strong {
  color: var(--gt-green-pantano, #2F8A6F);
  font-weight: 700;
}

/* ─────────────────────────────────────────────────────────────
   QW-7A · Expensas variant (PriceBlock · pending A/B test)
   Activable via descomentar en JSX. Mantenida en CSS por si
   se prefiere alternar sin tocar JSX.
   ───────────────────────────────────────────────────────────── */
.gt-price__expensas {
  margin-top: 8px;
  padding: 10px 12px;
  background: rgba(56, 161, 131, 0.06);
  border-left: 3px solid var(--gt-green-pantano, #2F8A6F);
  border-radius: 6px;
  font-size: 0.88rem;
  color: var(--fg-1);
  line-height: 1.45;
}
.gt-price__expensas-sub {
  display: block;
  margin-top: 2px;
  font-size: 0.78rem;
  color: var(--fg-3, #6B7280);
  font-style: italic;
}

/* ─────────────────────────────────────────────────────────────
   QW-6 · Strikethrough en BonosStack cierre
   Mission 7 (Strikethrough). El "Valor de mercado" ahora va
   tachado en gris medio — el cerebro hace la resta inconsciente
   y siente la ganancia ANTES de leer el final. La inversión
   gana peso visual (más grande, verde brand).
   ───────────────────────────────────────────────────────────── */
.gt-bonos__cierre-row--anchor .gt-bonos__cierre-label {
  opacity: 0.78;
}
.gt-bonos__cierre-num--anchor {
  text-decoration: line-through;
  text-decoration-color: rgba(239, 68, 68, 0.55);
  text-decoration-thickness: 2px;
  color: #94A3B8 !important;
  font-weight: 600;
}
.gt-bonos__cierre-row--final .gt-bonos__cierre-num--ours {
  font-size: 1.45em;
  letter-spacing: -0.01em;
  font-weight: 800;
}
@media (min-width: 821px) {
  .gt-bonos__cierre-row--final .gt-bonos__cierre-num--ours {
    font-size: 1.6em;
  }
}

/* ─────────────────────────────────────────────────────────────
   QW-4 · Visual Weight en fila TOTAL Comparativa
   Mission 3 (Size + weight control magnitude). El cell winner
   GuardaTutti gana en peso visual (más grande, verde fuerte).
   Las cells competidoras se achican y se tachan — dejan de
   competir psicológicamente con el precio GT.
   ───────────────────────────────────────────────────────────── */
.gt-cmp__row--total .gt-cmp__cell--total:not(.gt-cmp__cell--gt) {
  font-size: 0.92em;
  color: #94A3B8;
  font-weight: 500;
  position: relative;
}
.gt-cmp__row--total .gt-cmp__cell--total:not(.gt-cmp__cell--gt)::before {
  content: "";
  position: absolute;
  left: 8%;
  right: 8%;
  top: 50%;
  height: 2px;
  background: rgba(239, 68, 68, 0.55);
  transform: rotate(-3deg);
  pointer-events: none;
}
.gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-amount {
  font-size: 1.18em;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--gt-green-pantano, #2F8A6F);
  line-height: 1.1;
}
.gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-savings {
  display: block;
  margin-top: 4px;
  font-size: 0.92em;
  font-weight: 700;
  color: var(--gt-green-pantano, #2F8A6F);
  line-height: 1.35;
}
.gt-cmp__total-savings-suffix {
  display: inline;
  font-weight: 500;
  color: var(--fg-2, #475569);
  font-size: 0.9em;
}
@media (max-width: 820px) {
  .gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-amount {
    font-size: 1.08em;
  }
  .gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-savings {
    font-size: 0.78em;
  }
  .gt-cmp__total-savings-suffix {
    display: block;
    margin-top: 2px;
    font-size: 0.95em;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36 + 37 — Pricing Psychology Framework
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.1 · FIXES POST-PREVIEW DAMIÁN (2026-06-03)
   8 ajustes reportados después de revisar localhost del Sprint 36+37.
   Este bloque OVERRIDE los estilos que vienen arriba (mayor specificity
   donde hace falta + última declaración gana).
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   FIX 1 · Header sticky reforzado
   El header ya tenía position:sticky pero quizás z-index 30 lo
   tapaba algo. Lo bumpeo a 90 — por debajo del lightbox PhotoSwipe
   (100000) y del cart drawer pero por arriba de todo lo demás del flow.
   ───────────────────────────────────────────────────────────── */
.gt-header {
  z-index: 90 !important;
  position: sticky !important;
  top: 0 !important;
}

/* ─────────────────────────────────────────────────────────────
   FIX 2 · Color Blanco más visible en FinishPicker
   El dot blanco se confundía con el background blanco/wash de la
   card. Borde interno sutil = legibilidad sin sacrificar el "color real".
   ───────────────────────────────────────────────────────────── */
.gt-chip__dot--white {
  box-shadow: inset 0 0 0 1.5px rgba(0, 0, 0, 0.18);
}
.gt-chip.is-active .gt-chip__dot--white {
  box-shadow: inset 0 0 0 1.5px rgba(0, 0, 0, 0.25);
}

/* ─────────────────────────────────────────────────────────────
   FIX 5 · Comparativa: fix tachado madera/chapa
   Reemplazo el ::before diagonal por text-decoration nativo
   line-through. Se ve nítido y atraviesa el número exacto.
   Anulo el ::before viejo y agrego el text-decoration al cell.
   ───────────────────────────────────────────────────────────── */
.gt-cmp__row--total .gt-cmp__cell--total:not(.gt-cmp__cell--gt) {
  text-decoration: line-through;
  text-decoration-color: rgba(239, 68, 68, 0.7);
  text-decoration-thickness: 2px;
  text-decoration-skip-ink: none;
  color: #94A3B8 !important;
}
.gt-cmp__row--total .gt-cmp__cell--total:not(.gt-cmp__cell--gt)::before {
  content: none !important;
  display: none !important;
}

/* ─────────────────────────────────────────────────────────────
   FIX 6 · Comparativa: savings fuera del cell, en footer con asterisco
   El cell winner ahora solo muestra el precio + un asterisco.
   El texto "Te ahorrás hasta $X" vive en el footer (.gt-cmp__foot).
   Esto baja la altura visual de la fila TOTAL en PC dramáticamente.
   ───────────────────────────────────────────────────────────── */
.gt-cmp__total-aster {
  font-size: 0.6em;
  color: var(--gt-green-pantano, #2F8A6F);
  margin-left: 2px;
  font-weight: 700;
  vertical-align: super;
  line-height: 0;
}
.gt-cmp__foot-savings {
  display: block;
  font-size: 0.95em;
  color: var(--gt-green-pantano, #2F8A6F);
  font-weight: 600;
  margin-bottom: 6px;
}
.gt-cmp__foot-savings strong {
  font-weight: 800;
}
/* Cancelar los estilos del savings-cell viejos */
.gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-amount {
  font-size: 1.18em;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--gt-green-pantano, #2F8A6F);
  line-height: 1.1;
}
@media (max-width: 820px) {
  .gt-cmp__row--total .gt-cmp__cell--winner .gt-cmp__total-amount {
    font-size: 1.08em;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX 7 · PriceBlock: badge inline "sin interés" y "-25%"
   El badge va al lado del valor — antes ocupaba una línea entera
   y eso hacía que las dos pestañas tuvieran alturas distintas.
   Ahora ambas tabs tienen la misma cantidad de "líneas conceptuales"
   → cero shift del CTA al togglear método de pago.
   ───────────────────────────────────────────────────────────── */
.gt-price__badge-inline {
  display: inline-flex;
  align-items: center;
  margin-left: 8px;
  padding: 3px 9px;
  background: rgba(56, 161, 131, 0.10);
  color: var(--gt-green-pantano, #2F8A6F);
  border-radius: 999px;
  font-size: 0.62em;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  vertical-align: middle;
  white-space: nowrap;
  line-height: 1.4;
}

/* ─────────────────────────────────────────────────────────────
   FIX 7 · Expensas styling refinado (reemplaza cost-per-year)
   La Variante A (research-validated) ahora es el copy default.
   Estilo cleaner que la primera versión: sin border-left, más
   compacto, mejor jerarquía con el sub-text.
   ───────────────────────────────────────────────────────────── */
.gt-price__expensas {
  margin-top: 10px;
  padding: 8px 0 0 0;
  border-top: 1px dashed rgba(56, 161, 131, 0.25);
  font-size: 0.88rem;
  color: var(--fg-1);
  line-height: 1.45;
  font-weight: 500;
}
.gt-price__expensas-sub {
  display: block;
  margin-top: 2px;
  font-size: 0.78rem;
  color: var(--fg-3, #6B7280);
  font-style: italic;
  font-weight: 400;
}

/* Limpieza: ocultar restos del cost-per-year y la pill 12 meses
   (los selectores quedan vacíos pero por si acaso quedó un span). */
.gt-price__per-year,
.gt-price__finitud,
.gt-price__finitud-pill {
  display: none !important;
}

/* ─────────────────────────────────────────────────────────────
   FIX 9 · Reducir hueco entre card selectora y pill garantía (PC)
   El margin-top de la pill in-left era 4px pero quedaba mucho
   espacio visual por el padding-bottom de la card de pickers.
   Subimos la pill con margin-top negativo en desktop.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 820px) {
  .gt-hero__guarantee-band--in-left {
    margin-top: -6px;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX 4 · Comparativa default cerrada Mobile — reforzar
   La lógica de useState/useEffect ya está bien, pero por si acaso
   bajo el max-height inicial de 120px a 80px (solo título visible).
   Sin mask para que se vea más claro que está cerrada.
   ───────────────────────────────────────────────────────────── */
@media (max-width: 820px) {
  .gt-cmp.gt-cmp--collapsed .gt-cmp__body {
    max-height: 0 !important;
    overflow: hidden;
    /* Sin mask cuando está totalmente cerrada — el toggle button
       de abajo deja claro que hay contenido. */
    mask-image: none;
    -webkit-mask-image: none;
  }
  .gt-cmp.gt-cmp--collapsed {
    padding-bottom: 0;
  }
}

/* ─────────────────────────────────────────────────────────────
   Limpieza: cancelar suffix viejo del cell winner (ya está en footer).
   ───────────────────────────────────────────────────────────── */
.gt-cmp__total-savings,
.gt-cmp__total-savings-suffix {
  display: none !important;
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.1 — Fixes post-preview Damián
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.2 · FIXES Round 2 post-preview Damián (2026-06-03)
   3 ajustes nuevos:
     1. "Envío gratis en AMBA" se tachaba por error en pestaña Transferencia
     2. Hint "O pagá $X por transferencia · ahorrás $Y" rompía a 2 líneas mobile
     3. Header NO se mantenía sticky — cambio a position: fixed (más confiable)
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   FIX 1 · Strike solo en "Antes $X", NO en "Envío gratis en AMBA"
   Quitamos la clase --strike del contenedor y usamos un <s> nativo
   alrededor del precio anterior. El envío queda legible.
   ───────────────────────────────────────────────────────────── */
.gt-price__strike-bef {
  color: var(--fg-3, #9CA3AF);
  text-decoration: line-through;
  text-decoration-color: rgba(148, 163, 184, 0.6);
}

/* ─────────────────────────────────────────────────────────────
   FIX 2 · Hint responsivo desktop/mobile
   Desktop: copy completo con monto + ahorrás (2 montos).
   Mobile: copy corto "O pagás por transferencia · ahorrás $X" (1 línea).
   ───────────────────────────────────────────────────────────── */
.gt-price__hint-text--mobile {
  display: none;
}
.gt-price__hint-text--desktop {
  display: inline;
}
@media (max-width: 820px) {
  .gt-price__hint-text--desktop {
    display: none;
  }
  .gt-price__hint-text--mobile {
    display: inline;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX 3 · Header FIXED (no sticky)
   sticky depende de que ningún ancestro tenga overflow:hidden o
   transform — y eso es frágil. fixed funciona siempre. Compenso
   el espacio con padding-top en body.

   IMPORTANTE: este override viene DESPUÉS del Sprint 36.1, así
   que gana al !important sticky de arriba.
   ───────────────────────────────────────────────────────────── */
.gt-header {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  width: 100% !important;
  z-index: 90 !important;
}
/* Compensar el espacio que el header ya no ocupa en el flow */
body {
  padding-top: 56px;
}
@media (min-width: 900px) {
  body {
    padding-top: 80px;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.2 — Fixes Round 2 Damián
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.3 · FIXES Round 3 post-preview Damián (2026-06-03)
   3 ajustes nuevos:
     1. Expensas movido a debajo del CTA (solo Tarjeta · evita CTA shift)
     2. Card Stack: slideTo con speed 900ms (era instant)
     3. Hueco column izquierda PC: anular margin-top:auto del picker card
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   FIX 1 · Estilo del nuevo expensas debajo del CTA
   Vive en gt-hero__expensas (no más gt-price__expensas).
   Conditional render via JSX (payMethod === "card").
   ───────────────────────────────────────────────────────────── */
.gt-hero__expensas {
  margin-top: 12px;
  padding: 10px 14px;
  background: rgba(56, 161, 131, 0.06);
  border-left: 3px solid var(--gt-green-pantano, #2F8A6F);
  border-radius: 6px;
  font-size: 0.92rem;
  color: var(--fg-1);
  line-height: 1.4;
  font-weight: 600;
}
.gt-hero__expensas-sub {
  display: block;
  margin-top: 2px;
  font-size: 0.82rem;
  color: var(--fg-3, #6B7280);
  font-style: italic;
  font-weight: 400;
}

/* Ocultar el viejo gt-price__expensas por si algún Edge case lo renderea */
.gt-price__expensas {
  display: none !important;
}

/* ─────────────────────────────────────────────────────────────
   FIX 3 · Hueco column izquierda PC
   El .gt-hero__pickers tenía margin-top:auto (Sprint 34.6.1 v7)
   que lo empujaba al BOTTOM del column izquierdo — eso causaba
   el gran hueco entre la pill garantía y la card de selectores
   cuando la column derecha era más alta.

   Lo anulamos para que la card quede pegada a la pill (gap de
   14px del padre flex). El espacio extra queda DEBAJO de la
   card (no entre pill y card), lo que ya no rompe la lectura.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 820px) {
  .gt-hero__left .gt-hero__pickers,
  .gt-hero__pickers {
    margin-top: 0 !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.3 — Fixes Round 3 Damián
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.4 · FIXES Round 4 post-preview Damián (2026-06-03)
   - PC: alinear CTA y card selectora (bottom) + alargar fondo verde +
     reservar espacio para el expensas (no push de cohort-note)
   - Mobile: expensas en 1 línea (hyphen + font menor) + reservar espacio
   - Quitar sub-text "Tu galpón ACM premium..."
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   FIX · Revert margin-top:0 del Sprint 36.3 — volvemos a margin-top:auto
   en el picker card para alinear el bottom con el CTA. Damián prefiere
   esa alineación (con leve hueco arriba) sobre el "card pegada arriba"
   del Sprint 36.3.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 820px) {
  .gt-hero__left .gt-hero__pickers,
  .gt-hero__pickers {
    margin-top: auto !important;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX · Reservar espacio fijo del expensas (visibility:hidden)
   El bloque siempre se renderea — cuando no es Tarjeta queda
   invisible pero el espacio se conserva. Así el toggle de método
   de pago NO desplaza la cohort-note ("Lote julio · cierra en X
   días · entrega en hasta 30 días").
   ───────────────────────────────────────────────────────────── */
.gt-hero__expensas.is-hidden {
  visibility: hidden;
}

/* ─────────────────────────────────────────────────────────────
   FIX · Alargar fondo verde del Hero (PC) + bajar cohort-note
   Más padding-bottom en el .gt-hero__copy para dar aire al bloque
   expensas + CTA + cohort-note. Cohort-note pegada al bottom del
   wash verde.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 820px) {
  .gt-hero__copy {
    padding-bottom: 28px;
  }
  .gt-hero__expensas {
    /* Estilo refinado sin sub-text: bloque single-line, compacto */
    margin-top: 14px;
    padding: 9px 14px;
    font-size: 0.92rem;
    line-height: 1.4;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX · Mobile: expensas en 1 línea + cohort-note pegada al bottom
   font-size reducido un poco + line-height tight. Si aun no entra
   con el hyphen "-" en mobile chico, el balance entre tamaños es
   aceptable y queda en 2 líneas solo bajo 360px.
   ───────────────────────────────────────────────────────────── */
@media (max-width: 820px) {
  .gt-hero__expensas {
    margin-top: 12px;
    padding: 9px 12px;
    font-size: 0.86rem;
    line-height: 1.35;
    /* Conservar peso y color del border-left del Sprint 36.3 */
  }
  /* La cohort-note ya tenía margin-top — la dejamos pegada al
     bottom del hero para que el espacio reservado del expensas
     no se "desperdicie" cuando es Transferencia. */
  .gt-hero__note {
    margin-top: 14px;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.4 — Fixes Round 4 Damián
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.5 · FIXES Round 5 post-preview Damián (2026-06-03)
   - Mobile: quitar espacio sobrante debajo del "Lote julio · cierra..."
   - PC: alinear bottom CTA con bottom Card selectora (eliminar espacio
     verde sobrante debajo del bloque expensas)
   ═══════════════════════════════════════════════════════════════════════ */

/* ─────────────────────────────────────────────────────────────
   FIX · PC: comprimir el padding-bottom del Hero copy
   El bottom del Hero estaba con 28px (Sprint 36.4) que dejaba
   mucho espacio verde debajo del bloque expensas. Lo bajamos a
   4px para que el bloque expensas quede pegado al fin del wash
   y el bottom del CTA quede a la altura del bottom de la card.
   ───────────────────────────────────────────────────────────── */
@media (min-width: 820px) {
  .gt-hero__copy {
    padding-bottom: 4px !important;
  }
  /* El bloque expensas con margin-top:14px del Sprint 36.4 está bien;
     reducimos su padding interno para que ocupe menos vertical. */
  .gt-hero__expensas {
    margin-top: 10px;
    padding: 7px 14px;
  }
}

/* ─────────────────────────────────────────────────────────────
   FIX · Mobile: quitar espacio sobrante debajo de la cohort-note
   El padding-bottom default de .gt-hero__copy era 32px. Lo
   bajamos a 14px para que el bottom del Hero esté pegado a la
   cohort-note ("Lote julio · cierra en X días · entrega en
   hasta 30 días"), sin verde sobrante.
   ───────────────────────────────────────────────────────────── */
@media (max-width: 819px) {
  .gt-hero__copy {
    padding-bottom: 14px !important;
  }
  .gt-hero__note {
    margin-bottom: 0;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.5 — Fixes Round 5 Damián
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.6 · Card Stack testimonios — easing cinematográfico
   El cambio "instantáneo" que reportó Damián después del swipe era el
   easing default linear+cubic-bezier(0.25,0.46,0.45,0.94) de Swiper
   Cards Effect. Override con cubic-bezier(0.22,1,0.36,1) — curva
   "ease-out cinema" que arranca rápido y termina muy lento (el cerebro
   percibe el final como una desaceleración suave, no como un snap).
   Combinado con speed 1200ms ahora la transición se siente premium.
   ═══════════════════════════════════════════════════════════════════════ */
.gt-testi-swiper .swiper-slide,
.gt-testi-swiper .swiper-slide-active,
.gt-testi-swiper .swiper-slide-prev,
.gt-testi-swiper .swiper-slide-next {
  transition-timing-function: cubic-bezier(0.22, 1, 0.36, 1) !important;
}
/* Aseguramos que las propiedades animadas incluyan transform + opacity
   (Swiper Cards Effect mueve ambas). Algunas versiones de Swiper solo
   ponen transform por default. */
.gt-testi-swiper .swiper-slide {
  transition-property: transform, opacity !important;
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.6 — Easing cinematográfico testimonios
   ═══════════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════════
   SPRINT 36.7 · PC: bottom CTA alineado con bottom Card selectora
   El problema: el bloque expensas vivía DENTRO del column copy. Eso
   estiraba la altura del column derecha hasta su bottom — y el column
   izquierda (stretch) llegaba al mismo nivel, dejando la card más abajo
   que el CTA.

   Solución: en desktop, sacamos el bloque expensas del flow del column
   copy con position:absolute. El column copy termina exactamente en
   el CTA. La column izquierda (stretch flex) llega justo al CTA →
   la card con margin-top:auto queda alineada con el bottom del CTA.

   El espacio del expensas se reserva en el padding-bottom del .gt-hero
   (el wash verde). Mobile NO se toca — vive en el flow normal.
   ═══════════════════════════════════════════════════════════════════════ */
@media (min-width: 820px) {
  /* El hero deja espacio en su padding-bottom para acomodar el
     bloque expensas absoluto (que cae fuera del column copy). */
  .gt-hero {
    padding-bottom: 56px;
  }
  .gt-hero__copy {
    position: relative;
    padding-bottom: 0 !important;
  }
  /* El bloque expensas pasa a position absolute justo bajo el column copy.
     Como el column copy termina en el CTA, este bloque aparece debajo del
     CTA, dentro del padding-bottom del .gt-hero. */
  .gt-hero__expensas {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    margin: 12px 0 0 0 !important;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
   FIN SPRINT 36.7 — Alineación CTA↔Card desktop
   ═══════════════════════════════════════════════════════════════════════ */
