/* =============================================================
   secondopinion.es — Sistema de diseño
   "High-End Editorial Tech" · Segunda opinión oncológica
   -------------------------------------------------------------
   1.  Tokens
   2.  Reset y base
   3.  Tipografía editorial
   4.  Utilidades de layout
   5.  Auras, ruido y texturas
   6.  Botones (magnéticos / luminosos)
   7.  Header y navegación
   8.  Hero
   9.  Bento grid y cristal esmerilado
   10. Proceso / línea de tiempo
   11. Consenso (grafo orgánico)
   12. Perfil del especialista
   13. Testimonios editoriales
   14. FAQ
   15. Formularios y páginas internas
   16. Barra fija de conversión
   17. Panel de solicitud (off-canvas)
   18. Footer
   19. Animaciones de revelado
   20. Responsive
   21. Accesibilidad / movimiento reducido
   ============================================================= */

/* ---------- 1. Tokens ---------- */
:root {
  /* Paleta orgánico-tech */
  --sand-50:  #FBF8F3;
  --sand-100: #F5EFE5;
  --sand-200: #EAE1D3;
  --sand-300: #D9CDB9;
  --sand-400: #BFAF97;

  --sage-900: #14211C;
  --sage-800: #1B2E27;
  --sage-700: #274036;
  --sage-600: #35564A;
  --sage-500: #517166;
  --sage-400: #7A968A;
  --sage-300: #A6BCAF;
  --sage-100: #DCE7DF;

  --clay-700: #8C4A2C;
  --clay-600: #A45733;
  --clay-500: #C0704A;
  --clay-400: #D18E6C;
  --clay-200: #EDCDB9;

  --olive-700: #566333;
  --olive-600: #6B7844;
  --olive-500: #869555;
  --olive-300: #B4BF8D;

  /* Roles */
  --paper:        var(--sand-50);
  --paper-warm:   var(--sand-100);
  --ink:          #14211C;
  --ink-soft:     #46554E;
  /* --ink-faint verificado en 4.5:1 mínimo sobre --sand-50 y --sand-100 (WCAG AA texto normal) */
  --ink-faint:    #5E6D66;
  --line:         rgba(20, 33, 28, .12);
  --line-soft:    rgba(20, 33, 28, .07);
  /* --accent en textos/botones sólidos siempre en la variante 600, que cumple 4.5:1;
     --clay-500 queda reservado para halos, glows y detalles decorativos no textuales */
  --accent:       var(--clay-600);
  --accent-deep:  var(--clay-700);

  /* Tipografía */
  --font-serif: "Fraunces", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
  --font-sans:  "Outfit", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  --step--2: clamp(.78rem, .76rem + .10vw, .85rem);
  --step--1: clamp(.94rem, .90rem + .18vw, 1.05rem);
  --step-0:  clamp(1.05rem, 1.01rem + .20vw, 1.15rem);
  --step-1:  clamp(1.24rem, 1.15rem + .40vw, 1.50rem);
  --step-2:  clamp(1.45rem, 1.30rem + .72vw, 2.05rem);
  --step-3:  clamp(1.80rem, 1.52rem + 1.30vw, 2.95rem);
  --step-4:  clamp(2.20rem, 1.70rem + 2.30vw, 4.20rem);
  --step-5:  clamp(2.60rem, 1.75rem + 3.80vw, 5.60rem);

  /* Ritmo y forma */
  --r-sm: 10px;
  --r-md: 18px;
  --r-lg: 28px;
  --r-xl: 40px;
  --r-pill: 999px;

  --gutter: clamp(1.15rem, 4vw, 2.75rem);
  --wrap: 1240px;
  --wrap-narrow: 780px;

  --section-y: clamp(4.5rem, 9vw, 9.5rem);

  /* Respiración: todas las transiciones son lentas y progresivas */
  --ease-breath: cubic-bezier(.22, .61, .36, 1);
  --ease-soft:   cubic-bezier(.33, 1, .68, 1);
  --t-fast: .35s;
  --t-med:  .7s;
  --t-slow: 1.25s;

  --shadow-soft: 0 2px 6px rgba(20, 33, 28, .04), 0 14px 40px -18px rgba(20, 33, 28, .22);
  --shadow-lift: 0 4px 12px rgba(20, 33, 28, .06), 0 30px 70px -30px rgba(20, 33, 28, .34);
  --glass-light: rgba(255, 253, 250, .62);
  --glass-dark:  rgba(255, 255, 255, .055);
}

/* ---------- 2. Reset y base ---------- */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 6.5rem;
  /* El panel off-canvas y otros elementos position:fixed quedan fuera del viewport
     mediante transform; sin este overflow-x en <html> (no solo en <body>), el
     navegador seguía permitiendo desplazar el documento hasta esa zona oculta. */
  overflow-x: hidden;
}

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: var(--step-0);
  line-height: 1.65;
  font-weight: 350;
  letter-spacing: .002em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

body.is-locked { overflow: hidden; }

img, svg, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; color: inherit; }
ul, ol { margin: 0; padding: 0; list-style: none; }
p { margin: 0 0 1.1em; }
p:last-child { margin-bottom: 0; }

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 4px;
}

::selection { background: var(--clay-200); color: var(--sage-900); }

.skip-link {
  position: absolute; left: 1rem; top: -100%;
  z-index: 200; background: var(--sage-900); color: var(--sand-50);
  padding: .7rem 1.1rem; border-radius: var(--r-sm);
  transition: top var(--t-fast) var(--ease-soft);
}
.skip-link:focus { top: 1rem; }

/* ---------- 3. Tipografía editorial ---------- */
h1, h2, h3, h4, .serif {
  font-family: var(--font-serif);
  font-weight: 380;
  font-variation-settings: "SOFT" 22, "WONK" 1, "opsz" 40;
  line-height: 1.06;
  letter-spacing: -.018em;
  margin: 0 0 .5em;
  color: var(--sage-900);
  text-wrap: balance;
}

h1 { font-size: var(--step-5); }
h2 { font-size: var(--step-4); }
h3 { font-size: var(--step-2); line-height: 1.14; }
h4 { font-size: var(--step-1); line-height: 1.2; }

.display-em {
  font-style: italic;
  font-variation-settings: "SOFT" 40, "WONK" 1, "opsz" 60;
  color: var(--sage-600);
}

/* Voz técnica: sans geométrica para datos, métricas y nomenclatura clínica */
.tech,
.eyebrow,
.metric__value,
.data-label {
  font-family: var(--font-sans);
  font-feature-settings: "tnum" 1, "ss01" 1;
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  font-size: var(--step--2);
  letter-spacing: .18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--sage-500);
  margin: 0 0 1.4rem;
}
.eyebrow::before {
  content: "";
  width: 26px; height: 1px;
  background: currentColor;
  opacity: .55;
}
.eyebrow--center::before { display: none; }

.lede {
  font-size: var(--step-1);
  line-height: 1.55;
  color: var(--ink-soft);
  font-weight: 300;
  max-width: 62ch;
  text-wrap: pretty;
}

.muted { color: var(--ink-faint); }
.small { font-size: var(--step--1); line-height: 1.6; }
.tiny  { font-size: var(--step--2); line-height: 1.55; letter-spacing: .01em; }

.rule {
  height: 1px; border: 0;
  background: var(--line);
  margin: 0;
}

/* ---------- 4. Utilidades de layout ---------- */
.wrap {
  width: 100%;
  max-width: var(--wrap);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.wrap--narrow { max-width: var(--wrap-narrow); }

.section { position: relative; padding-block: var(--section-y); }
.section--tight { padding-block: clamp(3rem, 6vw, 6rem); }

.section-head { max-width: 64ch; margin-bottom: clamp(2.5rem, 5vw, 4.5rem); }
.section-head--center { margin-inline: auto; text-align: center; }
.section-head--center .lede { margin-inline: auto; }
.section-head--center .eyebrow { justify-content: center; }

.stack > * + * { margin-top: var(--gap, 1.25rem); }
.center { text-align: center; }

/* Secciones "de autoridad": mismo peso visual que antes, pero en paleta clara
   (salvia muy suave) — nada de fondos oscuros, para transmitir calma y no frialdad. */
.section--deep {
  background: linear-gradient(175deg, var(--sage-100) 0%, var(--paper-warm) 78%);
  color: var(--ink);
  overflow: hidden;
}

.section--warm { background: var(--paper-warm); }

/* ---------- 5. Auras, ruido y texturas ---------- */
.aura {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
  opacity: .5;
  pointer-events: none;
  z-index: 0;
  will-change: transform;
  animation: drift 26s var(--ease-breath) infinite alternate;
}
.aura--sage  { background: radial-gradient(circle at 50% 50%, rgba(122, 150, 138, .85), transparent 68%); }
.aura--clay  { background: radial-gradient(circle at 50% 50%, rgba(209, 142, 108, .62), transparent 68%); }
.aura--olive { background: radial-gradient(circle at 50% 50%, rgba(180, 191, 141, .60), transparent 68%); }
.aura--glow  { background: radial-gradient(circle at 50% 50%, rgba(166, 188, 175, .40), transparent 70%); filter: blur(70px); }

.aura--a { width: 46vw; height: 46vw; top: -14vw; right: -10vw; }
.aura--b { width: 38vw; height: 38vw; bottom: -16vw; left: -12vw; animation-delay: -9s; }
.aura--c { width: 30vw; height: 30vw; top: 34%; left: 42%; opacity: .34; animation-delay: -16s; }

@keyframes drift {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to   { transform: translate3d(2.5vw, -3vw, 0) scale(1.14); }
}

/* Grano sutil: aleja el resultado del degradado plano y "digital" */
.grain::after {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  z-index: 1;
  opacity: .32;
  mix-blend-mode: soft-light;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

.section > .wrap { position: relative; z-index: 2; }

/* ---------- 6. Botones ---------- */
.btn {
  --btn-bg: var(--sage-900);
  --btn-fg: var(--sand-50);
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .7rem;
  padding: 1.02rem 1.75rem;
  border: 1px solid transparent;
  border-radius: var(--r-pill);
  background: var(--btn-bg);
  color: var(--btn-fg);
  font-size: var(--step--1);
  font-weight: 500;
  letter-spacing: .015em;
  text-align: center;
  max-width: 100%;
  flex-wrap: wrap;
  cursor: pointer;
  isolation: isolate;
  transition:
    transform var(--t-med) var(--ease-breath),
    box-shadow var(--t-med) var(--ease-breath),
    background-color var(--t-fast) var(--ease-soft),
    color var(--t-fast) var(--ease-soft),
    border-color var(--t-fast) var(--ease-soft);
  will-change: transform;
}
.btn:hover { box-shadow: 0 18px 40px -20px rgba(20, 33, 28, .55); }
.btn:active { transform: scale(.985); }

/* CTA luminoso, con un destello sutil al pasar el cursor (sin efecto magnético) */
.btn--primary {
  /* Degradado en la franja 600–700: el 500 se reserva al glow decorativo, así el texto blanco cumple 4.5:1 */
  --btn-bg: linear-gradient(135deg, var(--clay-600), var(--clay-700) 78%);
  background-image:
    linear-gradient(115deg, transparent 35%, rgba(255, 255, 255, .5) 50%, transparent 65%),
    var(--btn-bg);
  background-size: 220% 100%, 100% 100%;
  background-position: 160% 0, 0 0;
  background-repeat: no-repeat;
  color: #FFF9F4;
  padding: 1.12rem 2rem;
  box-shadow:
    0 1px 0 rgba(255, 255, 255, .22) inset,
    0 14px 34px -16px rgba(164, 87, 51, .62);
  transition:
    transform var(--t-med) var(--ease-breath),
    box-shadow var(--t-med) var(--ease-breath),
    background-color var(--t-fast) var(--ease-soft),
    background-position .8s var(--ease-breath),
    color var(--t-fast) var(--ease-soft),
    border-color var(--t-fast) var(--ease-soft);
}
.btn--primary::before {
  content: "";
  position: absolute; inset: -42%;
  z-index: -1;
  border-radius: inherit;
  background: radial-gradient(circle at 50% 50%, rgba(209, 142, 108, .70), transparent 62%);
  opacity: 0;
  transition: opacity var(--t-med) var(--ease-breath);
  filter: blur(18px);
}
.btn--primary:hover::before { opacity: 1; }
.btn--primary:hover { background-position: -40% 0, 0 0; }

.btn--ghost {
  background: transparent;
  color: var(--sage-900);
  border-color: var(--line);
}
.btn--ghost:hover { border-color: var(--sage-600); background: rgba(255, 255, 255, .5); }

.btn--sm { padding: .72rem 1.25rem; font-size: var(--step--2); }
.btn--block { width: 100%; }

.btn__arrow { transition: transform var(--t-med) var(--ease-breath); }
.btn:hover .btn__arrow { transform: translateX(4px); }

.link-underline {
  position: relative;
  font-size: var(--step--1);
  font-weight: 450;
  padding-bottom: 2px;
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 100% 1px;
  background-repeat: no-repeat;
  background-position: 0 100%;
  transition: background-size var(--t-med) var(--ease-breath), color var(--t-fast) var(--ease-soft);
}
.link-underline:hover { background-size: 0 1px; color: var(--accent); }

/* ---------- 7. Header ---------- */
.site-header {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 90;
  padding-block: clamp(.85rem, 1.6vw, 1.25rem);
  transition: background-color var(--t-med) var(--ease-breath),
              box-shadow var(--t-med) var(--ease-breath),
              backdrop-filter var(--t-med) var(--ease-breath),
              padding var(--t-med) var(--ease-breath);
}
.site-header.is-stuck {
  background: rgba(251, 248, 243, .86);
  -webkit-backdrop-filter: blur(20px) saturate(150%);
  backdrop-filter: blur(20px) saturate(150%);
  box-shadow: 0 1px 0 var(--line-soft), 0 18px 40px -34px rgba(20, 33, 28, .5);
  padding-block: .7rem;
}
.header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
}

.brand { display: inline-flex; align-items: center; gap: .7rem; }
.brand__mark { width: 34px; height: 34px; flex: none; }
.brand__text { display: flex; flex-direction: column; line-height: 1.05; }
.brand__name {
  font-family: var(--font-serif);
  font-size: 1.16rem;
  font-variation-settings: "SOFT" 30, "WONK" 1, "opsz" 30;
  color: var(--sage-900);
  letter-spacing: -.02em;
}
.brand__name b { font-weight: 500; }
.brand__tag {
  font-size: .58rem;
  letter-spacing: .26em;
  text-transform: uppercase;
  color: var(--sage-500);
  font-weight: 500;
}

.nav { display: flex; align-items: center; gap: clamp(1rem, 2.2vw, 2rem); }
.nav__link {
  font-size: var(--step--1);
  color: var(--ink-soft);
  font-weight: 400;
  position: relative;
  padding-block: .25rem;
  transition: color var(--t-fast) var(--ease-soft);
}
.nav__link::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 100%; height: 1px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--t-med) var(--ease-breath);
}
.nav__link:hover { color: var(--sage-900); }
.nav__link:hover::after,
.nav__link[aria-current="page"]::after { transform: scaleX(1); }
.nav__link[aria-current="page"] { color: var(--sage-900); }

.header__actions { display: flex; align-items: center; gap: .9rem; }
.header__actions .btn { white-space: nowrap; }
.hide-sm { display: inline; }
.header__phone { font-size: var(--step--1); color: var(--ink-soft); }

.nav-toggle {
  display: none;
  width: 44px; height: 44px;
  border: 1px solid var(--line);
  border-radius: var(--r-pill);
  background: rgba(255, 255, 255, .55);
  align-items: center; justify-content: center;
  cursor: pointer;
}
.nav-toggle span {
  display: block; width: 17px; height: 1.5px;
  background: var(--sage-900); border-radius: 2px;
  position: relative;
  transition: transform var(--t-fast) var(--ease-soft), background-color var(--t-fast);
}
.nav-toggle span::before, .nav-toggle span::after {
  content: ""; position: absolute; left: 0;
  width: 17px; height: 1.5px; background: inherit; border-radius: 2px;
  transition: transform var(--t-med) var(--ease-breath);
}
.nav-toggle span::before { top: -5.5px; }
.nav-toggle span::after  { top: 5.5px; }
.nav-toggle[aria-expanded="true"] span { background: transparent; }
.nav-toggle[aria-expanded="true"] span::before { transform: translateY(5.5px) rotate(45deg); background: var(--sage-900); }
.nav-toggle[aria-expanded="true"] span::after  { transform: translateY(-5.5px) rotate(-45deg); background: var(--sage-900); }

/* ---------- 8. Hero ---------- */
.hero {
  position: relative;
  padding-top: clamp(8.5rem, 16vh, 12rem);
  padding-bottom: clamp(3.5rem, 7vw, 6rem);
  overflow: hidden;
  background:
    radial-gradient(120% 90% at 78% 8%, rgba(237, 205, 185, .48), transparent 58%),
    radial-gradient(100% 80% at 8% 30%, rgba(220, 231, 223, .72), transparent 60%),
    linear-gradient(180deg, var(--sand-50), var(--sand-100));
}
.hero__grid {
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: minmax(0, 1.06fr) minmax(0, .94fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: center;
}

.hero h1 { margin-bottom: .38em; }
.hero__sub { max-width: 46ch; }
.hero__sub strong { font-weight: 500; color: var(--sage-700); }

.hero__cta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
  margin-top: 2.2rem;
}

.hero__reassure {
  display: flex; flex-wrap: wrap; gap: 1.1rem 1.6rem;
  margin-top: 1.7rem;
  font-size: var(--step--2);
  color: var(--ink-faint);
}
.hero__reassure li { display: inline-flex; align-items: center; gap: .45rem; }
.hero__reassure svg { flex: none; color: var(--olive-600); }

/* Retrato editorial con recorte orgánico */
.portrait { position: relative; }
.portrait__shape {
  position: relative;
  aspect-ratio: 4 / 4.7;
  width: 100%;
  max-width: 460px;
  margin-inline: auto;
  clip-path: url(#organicMask);
  background:
    radial-gradient(80% 60% at 30% 12%, rgba(237, 205, 185, .95), transparent 60%),
    linear-gradient(168deg, var(--sage-300), var(--sage-600) 60%, var(--sage-800));
  overflow: hidden;
  isolation: isolate;
}
.portrait__shape img {
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 50% 22%;
  filter: saturate(.94) contrast(1.02);
}
.portrait__shape::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(190deg, transparent 42%, rgba(20, 33, 28, .48));
  pointer-events: none;
}
.portrait__halo {
  position: absolute;
  inset: -8% -6% -4% -6%;
  z-index: -1;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 45%, rgba(209, 142, 108, .40), transparent 62%);
  filter: blur(46px);
  animation: breathe 9s var(--ease-breath) infinite alternate;
}
@keyframes breathe {
  from { transform: scale(1); opacity: .8; }
  to   { transform: scale(1.07); opacity: 1; }
}

.portrait__caption {
  position: absolute;
  left: 50%;
  bottom: 1.15rem;
  transform: translateX(-50%);
  z-index: 3;
  text-align: center;
  color: #FFF9F4;
  width: max-content;
  max-width: 88%;
}
.portrait__caption .name {
  font-family: var(--font-serif);
  font-size: var(--step-1);
  font-variation-settings: "SOFT" 30, "WONK" 1, "opsz" 36;
}
.portrait__caption .role {
  font-size: var(--step--2);
  letter-spacing: .12em;
  text-transform: uppercase;
  opacity: .82;
}

/* Chips de credenciales flotantes en cristal */
.chip {
  position: absolute;
  z-index: 4;
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .62rem 1rem;
  border-radius: var(--r-pill);
  background: var(--glass-light);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  border: 1px solid rgba(255, 255, 255, .7);
  box-shadow: var(--shadow-soft);
  font-size: var(--step--2);
  font-weight: 450;
  color: var(--sage-800);
  white-space: nowrap;
  animation: float 11s var(--ease-breath) infinite alternate;
}
.chip b { font-weight: 600; }
.chip--1 { top: 11%; left: -4%; }
.chip--2 { top: 47%; right: -6%; animation-delay: -4s; }
.chip--3 { bottom: 13%; left: -7%; animation-delay: -7.5s; }
@keyframes float {
  from { transform: translateY(0); }
  to   { transform: translateY(-11px); }
}

.trust-strip {
  position: relative;
  z-index: 2;
  margin-top: clamp(3rem, 6vw, 5rem);
  padding-top: 1.9rem;
  border-top: 1px solid var(--line-soft);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem clamp(1.5rem, 4vw, 3.4rem);
}
.trust-strip__label {
  font-size: var(--step--2);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-faint);
}
.trust-strip ul { display: flex; flex-wrap: wrap; gap: .9rem clamp(1.2rem, 3vw, 2.6rem); }
.trust-strip li {
  font-size: var(--step--1);
  color: var(--sage-600);
  font-weight: 450;
  letter-spacing: .01em;
}

/* ---------- 9. Bento grid + cristal ---------- */
.bento {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: clamp(.85rem, 1.5vw, 1.25rem);
}
.card {
  /* Tarjeta clara por defecto: cristal esmerilado sobre fondos claros en toda la web */
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: clamp(1.5rem, 2.6vw, 2.35rem);
  border-radius: var(--r-lg);
  background: rgba(255, 255, 255, .70);
  -webkit-backdrop-filter: blur(22px) saturate(150%);
  backdrop-filter: blur(22px) saturate(150%);
  border: 1px solid rgba(255, 255, 255, .9);
  box-shadow: var(--shadow-soft);
  color: var(--ink);
  overflow: hidden;
  transition: transform var(--t-slow) var(--ease-breath),
              border-color var(--t-med) var(--ease-breath),
              background-color var(--t-med) var(--ease-breath),
              box-shadow var(--t-med) var(--ease-breath);
}
.card:hover {
  transform: translateY(-5px);
  background: rgba(255, 255, 255, .86);
  box-shadow: var(--shadow-lift);
}
.card::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: inherit;
  background: linear-gradient(150deg, rgba(255, 255, 255, .55), transparent 46%);
  pointer-events: none;
}
.card > * { position: relative; z-index: 1; }

/* Alias retrocompatible: el estilo claro es ya el predeterminado */
.card--light { background: rgba(255, 255, 255, .70); }
.card--light:hover { background: rgba(255, 255, 255, .86); }

.card--accent {
  background: linear-gradient(155deg, rgba(192, 112, 74, .16), rgba(192, 112, 74, .05));
  border-color: rgba(237, 205, 185, .5);
}

.card__title {
  font-family: var(--font-serif);
  font-size: var(--step-2);
  line-height: 1.14;
  margin: 0;
  color: var(--sage-900);
}
.card__text {
  font-size: var(--step--1);
  line-height: 1.62;
  color: var(--ink-soft);
  margin: 0;
}

.card__kicker {
  font-size: var(--step--2);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--sage-500);
  font-weight: 500;
}

.card__visual {
  margin-top: auto;
  padding-top: 1.2rem;
}

.card__list { display: grid; gap: .62rem; font-size: var(--step--1); }
.card__list li {
  display: grid;
  grid-template-columns: 16px 1fr;
  gap: .7rem;
  align-items: start;
  color: var(--ink-soft);
}
.card__list svg { margin-top: .42em; color: var(--olive-600); }

/* Fila interna: contenido a la izquierda, visual (p. ej. el reloj) a la derecha */
.card__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.2rem;
  margin-top: auto;
}
.card__row .card__visual { margin-top: 0; padding-top: 0; flex: none; }
.card__row .metric { flex: 1 1 auto; min-width: 0; }

/* Colocación bento */
.bento__a { grid-column: span 3; min-height: 340px; }
.bento__b { grid-column: span 3; }
.bento__c { grid-column: span 2; }
.bento__d { grid-column: span 2; }
.bento__e { grid-column: span 2; }
.bento__f { grid-column: span 6; }

/* Métricas */
.metric { display: flex; flex-direction: column; gap: .1rem; }
.metric__value {
  font-size: var(--step-3);
  font-weight: 300;
  letter-spacing: -.03em;
  line-height: 1;
  color: var(--sage-900);
}
.metric__label {
  font-size: var(--step--2);
  color: var(--ink-faint);
  letter-spacing: .04em;
}

.metric-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 1.6rem;
}

/* Reloj mínimo animado (48 h) */
.clock { width: 84px; height: 84px; flex: none; }
.clock__ring {
  fill: none; stroke-width: 1.5;
  stroke: var(--line);
}
.clock__arc {
  fill: none; stroke-width: 2.5;
  stroke: var(--accent);
  stroke-linecap: round;
  stroke-dasharray: 226;
  stroke-dashoffset: 226;
  transform-origin: 50% 50%;
  transform: rotate(-90deg);
  transition: stroke-dashoffset 2.6s var(--ease-breath);
}
.is-inview .clock__arc { stroke-dashoffset: 62; }
.clock__hand {
  stroke: var(--sage-500);
  stroke-width: 1.5; stroke-linecap: round;
  transform-origin: 50% 50%;
  animation: sweep 12s linear infinite;
}
@keyframes sweep { to { transform: rotate(360deg); } }

/* ---------- 10. Proceso / línea de tiempo ---------- */
.timeline { position: relative; display: grid; gap: clamp(1.6rem, 3vw, 2.4rem); }
.timeline::before {
  content: "";
  position: absolute;
  left: 21px; top: 12px; bottom: 12px;
  width: 1px;
  background: var(--line);
}
.timeline__progress {
  position: absolute;
  left: 21px; top: 12px;
  width: 1px;
  background: linear-gradient(180deg, var(--clay-500), var(--olive-500));
  height: 0;
  transition: height 1.8s var(--ease-breath);
}
.is-inview .timeline__progress { height: calc(100% - 24px); }

.step {
  position: relative;
  display: grid;
  grid-template-columns: 44px 1fr;
  gap: clamp(1rem, 2vw, 1.8rem);
  align-items: start;
}
.step__dot {
  position: relative;
  width: 44px; height: 44px;
  border-radius: 50%;
  display: grid; place-items: center;
  background: var(--paper);
  border: 1px solid var(--line);
  font-size: var(--step--2);
  font-weight: 500;
  color: var(--sage-600);
  z-index: 1;
  transition: border-color var(--t-med) var(--ease-breath),
              background-color var(--t-med) var(--ease-breath),
              color var(--t-med) var(--ease-breath);
}
.step:hover .step__dot { border-color: var(--clay-400); color: var(--accent); }

.step__body { padding-top: .35rem; }
.step__title { font-size: var(--step-1); margin-bottom: .3em; }
.step__text { font-size: var(--step--1); color: var(--ink-soft); max-width: 56ch; margin: 0; }
.step__meta {
  display: inline-block;
  margin-top: .7rem;
  font-size: var(--step--2);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--accent);
}

/* La columna editorial acompaña al lector en pantallas amplias */
@media (min-width: 901px) {
  .sticky-col { position: sticky; top: 7.5rem; }
}

.process-grid {
  display: grid;
  grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
}

/* ---------- 11. Consenso (grafo orgánico) ---------- */
.consensus {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 5vw, 4rem);
  align-items: center;
}
.graph { width: 100%; height: auto; overflow: visible; }
.graph__link {
  stroke: rgba(166, 188, 175, .38);
  stroke-width: 1;
  fill: none;
  stroke-dasharray: 300;
  stroke-dashoffset: 300;
  transition: stroke-dashoffset 2.4s var(--ease-breath);
}
.is-inview .graph__link { stroke-dashoffset: 0; }
.graph__node {
  fill: var(--sage-400);
  opacity: 0;
  transition: opacity 1.4s var(--ease-breath), transform 1.4s var(--ease-breath);
  transform-box: fill-box;
  transform-origin: center;
}
.is-inview .graph__node { opacity: 1; }
.graph__node--core { fill: var(--clay-400); }
.graph__pulse {
  fill: none;
  stroke: rgba(209, 142, 108, .5);
  stroke-width: 1;
  transform-box: fill-box;
  transform-origin: center;
  animation: pulse 6s var(--ease-breath) infinite;
}
@keyframes pulse {
  0%   { transform: scale(.6); opacity: 0; }
  35%  { opacity: .75; }
  100% { transform: scale(2.4); opacity: 0; }
}

/* ---------- 12. Perfil del especialista ---------- */
.profile {
  display: grid;
  grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
}
/* Versión breve (teaser en home): retrato más pequeño, columna de texto centrada verticalmente */
.profile--compact { grid-template-columns: minmax(0, .56fr) minmax(0, 1.44fr); align-items: center; }
.profile--compact .profile__frame { max-width: 320px; }
.profile__media { position: relative; }
.profile__frame {
  position: relative;
  border-radius: var(--r-xl);
  overflow: hidden;
  aspect-ratio: 4 / 5;
  background: linear-gradient(168deg, var(--sage-400), var(--sage-700) 62%, var(--sage-900));
  box-shadow: var(--shadow-lift);
}
.profile__frame img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 20%; }

/* Hover de autoridad: la ficha despliega acreditaciones */
.profile__reveal {
  position: absolute;
  inset: auto 0 0 0;
  padding: clamp(1.2rem, 2.4vw, 1.9rem);
  background: linear-gradient(180deg, rgba(20, 33, 28, 0), rgba(20, 33, 28, .88) 38%);
  color: var(--sand-50);
  display: grid;
  gap: .55rem;
}
.profile__reveal-list {
  display: grid;
  gap: .45rem;
  font-size: var(--step--2);
  color: rgba(245, 239, 229, .78);
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  transition: max-height var(--t-slow) var(--ease-breath), opacity var(--t-slow) var(--ease-breath);
}
.profile__frame:hover .profile__reveal-list,
.profile__frame:focus-within .profile__reveal-list { max-height: 260px; opacity: 1; }
.profile__reveal-list li { display: flex; gap: .5rem; align-items: baseline; }
.profile__reveal-list span { color: var(--clay-400); }

.credentials { display: grid; gap: 0; margin-top: 2rem; }
.credential {
  display: grid;
  grid-template-columns: minmax(90px, 132px) 1fr;
  gap: clamp(.8rem, 2vw, 2rem);
  padding-block: 1.15rem;
  border-top: 1px solid var(--line);
  align-items: baseline;
}
.credential:last-child { border-bottom: 1px solid var(--line); }
.credential__key {
  font-size: var(--step--2);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-faint);
}
.credential__val { font-size: var(--step--1); color: var(--ink-soft); }
.credential__val strong { color: var(--sage-900); font-weight: 500; }

/* ---------- 13. Testimonios: carrusel 3D infinito ---------- */
.testi-slider {
  --testi-x: 300px;
  --testi-rot: 20deg;
  --testi-scale-step: .12;
  --testi-blur-step: 2.4px;
  --testi-op-step: .3;
  position: relative;
  perspective: 1700px;
}
.testi-track { touch-action: pan-y; }

/* Sin JavaScript: lista vertical simple y totalmente legible (mejora progresiva).
   El carrusel 3D con posicionamiento absoluto solo se activa cuando main.js
   añade la clase .js-ready — así nunca dependemos de JS para que el contenido
   se vea correctamente. */
.testi-slide {
  width: min(520px, 82vw);
  margin: 0 auto clamp(1.2rem, 3vw, 1.8rem);
  padding: clamp(1.8rem, 3vw, 2.6rem);
  border-radius: var(--r-lg);
  background: rgba(255, 255, 255, .74);
  border: 1px solid rgba(255, 255, 255, .9);
  box-shadow: var(--shadow-soft);
  -webkit-backdrop-filter: blur(16px);
  backdrop-filter: blur(16px);
}

.testi-slider.js-ready .testi-track {
  position: relative;
  height: clamp(300px, 34vw, 360px);
}
.testi-slider.js-ready .testi-slide {
  position: absolute;
  inset: 50% auto auto 50%;
  /* Mitad exacta del ancho real (min(520px,82vw)); un min() de los dos negativos
     por separado se descentraba en pantallas anchas, siempre hacia la izquierda. */
  margin-left: calc(min(520px, 82vw) / -2);
  cursor: pointer;
  transform-style: preserve-3d;
  transform:
    translate3d(calc(var(--offset, 0) * var(--testi-x)), -50%, calc(min(abs(var(--offset, 0)), 3) * -120px))
    rotateY(calc(var(--offset, 0) * -1 * var(--testi-rot)))
    scale(calc(1 - min(abs(var(--offset, 0)), 3) * var(--testi-scale-step)));
  opacity: calc(1 - min(abs(var(--offset, 0)), 3) * var(--testi-op-step));
  filter: blur(calc(min(abs(var(--offset, 0)), 3) * var(--testi-blur-step)));
  z-index: calc(10 - abs(var(--offset, 0)));
  pointer-events: auto;
  transition: transform var(--t-slow) var(--ease-breath),
              opacity var(--t-slow) var(--ease-breath),
              filter var(--t-slow) var(--ease-breath),
              box-shadow var(--t-med) var(--ease-breath);
}
.testi-slider.js-ready .testi-slide[aria-hidden="true"] { pointer-events: none; }
.testi-slider.js-ready .testi-slide.is-active {
  cursor: default;
  box-shadow: var(--shadow-lift);
  pointer-events: none;
}
/* Sin JS, la navegación no hace nada: se oculta para no confundir */
.testi-slider:not(.js-ready) .testi-nav { display: none; }
.testi-slide blockquote {
  margin: 0;
  font-family: var(--font-serif);
  font-size: var(--step-2);
  line-height: 1.22;
  font-variation-settings: "SOFT" 34, "WONK" 1, "opsz" 50;
  color: var(--sage-900);
  letter-spacing: -.02em;
}
.testi-slide blockquote::before { content: "“"; }
.testi-slide blockquote::after  { content: "”"; }
.testi-slide figcaption {
  margin-top: 1.3rem;
  font-size: var(--step--2);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-faint);
}

.testi-nav {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.4rem;
  margin-top: clamp(2rem, 4vw, 3rem);
}
.testi-arrow {
  width: 46px; height: 46px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: rgba(255, 255, 255, .6);
  color: var(--sage-800);
  display: grid; place-items: center;
  cursor: pointer;
  transition: background-color var(--t-fast) var(--ease-soft),
              border-color var(--t-fast) var(--ease-soft),
              transform var(--t-med) var(--ease-breath);
}
.testi-arrow:hover { background: #fff; border-color: var(--sage-400); transform: scale(1.06); }
.testi-dots { display: flex; align-items: center; gap: .55rem; }
.testi-dot {
  width: 8px; height: 8px;
  padding: 0;
  border-radius: 50%;
  border: 0;
  background: var(--sand-400);
  cursor: pointer;
  transition: background-color var(--t-med) var(--ease-breath), transform var(--t-med) var(--ease-breath);
}
.testi-dot:hover { background: var(--sage-400); }
.testi-dot.is-active { background: var(--accent); transform: scale(1.3); }

@media (max-width: 640px) {
  .testi-slider {
    --testi-x: 168px;
    --testi-rot: 14deg;
    --testi-scale-step: .16;
    --testi-op-step: .45;
  }
  .testi-slide { width: min(320px, 78vw); }
  .testi-slide blockquote { font-size: var(--step-1); }
  .testi-slider.js-ready .testi-track { height: clamp(300px, 78vw, 380px); }
  .testi-slider.js-ready .testi-slide { margin-left: calc(min(320px, 78vw) / -2); }
}

/* ---------- 14. FAQ ---------- */
.faq { border-top: 1px solid var(--line); }
.faq__item { border-bottom: 1px solid var(--line); }
.faq__q {
  width: 100%;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 2rem;
  padding: clamp(1.15rem, 2.2vw, 1.7rem) 0;
  background: none;
  border: 0;
  cursor: pointer;
  text-align: left;
  font-family: var(--font-serif);
  font-size: var(--step-1);
  line-height: 1.25;
  color: var(--sage-900);
  transition: color var(--t-fast) var(--ease-soft);
}
.faq__q:hover { color: var(--accent); }
.faq__icon {
  flex: none;
  width: 22px; height: 22px;
  position: relative;
  align-self: center;
}
.faq__icon::before, .faq__icon::after {
  content: "";
  position: absolute; top: 50%; left: 50%;
  width: 13px; height: 1.5px;
  background: currentColor;
  transform: translate(-50%, -50%);
  transition: transform var(--t-med) var(--ease-breath), opacity var(--t-med) var(--ease-breath);
}
.faq__icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.faq__q[aria-expanded="true"] .faq__icon::after { transform: translate(-50%, -50%) rotate(0deg); opacity: 0; }
.faq__a {
  overflow: hidden;
  height: 0;
  transition: height var(--t-med) var(--ease-breath);
}
.faq__a-inner {
  padding-bottom: clamp(1.2rem, 2.2vw, 1.8rem);
  max-width: 66ch;
  color: var(--ink-soft);
  font-size: var(--step--1);
}

/* ---------- 15. Formularios y páginas internas ---------- */
.page-hero {
  position: relative;
  padding-top: clamp(8.5rem, 15vh, 11.5rem);
  padding-bottom: clamp(2.5rem, 5vw, 4.5rem);
  overflow: hidden;
  background:
    radial-gradient(110% 80% at 82% 0%, rgba(237, 205, 185, .40), transparent 58%),
    linear-gradient(180deg, var(--sand-50), var(--sand-100));
}
.page-hero h1 { font-size: var(--step-4); }

.prose { max-width: 72ch; }
.prose h2 { font-size: var(--step-2); margin-top: 2.6em; }
.prose h3 { font-size: var(--step-1); margin-top: 2em; }
.prose h2:first-child, .prose h3:first-child { margin-top: 0; }
.prose p, .prose li { color: var(--ink-soft); }
.prose ul { margin: 0 0 1.2em; display: grid; gap: .5rem; }
.prose ul li { position: relative; padding-left: 1.3rem; }
.prose ul li::before {
  content: "";
  position: absolute; left: 0; top: .72em;
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--clay-400);
}
.prose ol { counter-reset: n; display: grid; gap: .5rem; margin: 0 0 1.2em; }
.prose ol li { counter-increment: n; position: relative; padding-left: 1.9rem; }
.prose ol li::before {
  content: counter(n, decimal-leading-zero);
  position: absolute; left: 0; top: 0;
  font-size: var(--step--2); color: var(--accent); font-weight: 500;
}
.prose a { color: var(--accent-deep); text-decoration: underline; text-underline-offset: 3px; }
.prose strong { color: var(--sage-900); font-weight: 500; }

.field { display: grid; gap: .5rem; }
.field > label,
.field-label {
  font-size: var(--step--2);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-faint);
  font-weight: 500;
}
.input, .textarea, .select {
  width: 100%;
  padding: .95rem 1.1rem;
  border-radius: var(--r-md);
  border: 1px solid var(--line);
  background: rgba(255, 255, 255, .75);
  font-size: var(--step--1);
  transition: border-color var(--t-fast) var(--ease-soft),
              background-color var(--t-fast) var(--ease-soft),
              box-shadow var(--t-fast) var(--ease-soft);
}
.input::placeholder, .textarea::placeholder { color: var(--ink-faint); opacity: .75; }
.input:focus, .textarea:focus, .select:focus {
  outline: none;
  border-color: var(--sage-400);
  background: #fff;
  box-shadow: 0 0 0 4px rgba(166, 188, 175, .28);
}
.textarea { min-height: 132px; resize: vertical; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }

.checkbox {
  display: grid;
  grid-template-columns: 20px 1fr;
  gap: .75rem;
  align-items: start;
  font-size: var(--step--2);
  color: var(--ink-soft);
  line-height: 1.5;
  cursor: pointer;
}
.checkbox input {
  appearance: none;
  width: 20px; height: 20px;
  border: 1px solid var(--sand-400);
  border-radius: 6px;
  background: #fff;
  display: grid; place-items: center;
  cursor: pointer;
  transition: background-color var(--t-fast), border-color var(--t-fast);
}
.checkbox input::after {
  content: "";
  width: 9px; height: 5px;
  border-left: 1.8px solid #fff; border-bottom: 1.8px solid #fff;
  transform: rotate(-45deg) scale(0);
  transition: transform var(--t-fast) var(--ease-soft);
}
.checkbox input:checked { background: var(--sage-600); border-color: var(--sage-600); }
.checkbox input:checked::after { transform: rotate(-45deg) scale(1); }

.note {
  padding: 1.15rem 1.3rem;
  border-radius: var(--r-md);
  background: rgba(180, 191, 141, .16);
  border: 1px solid rgba(134, 149, 85, .25);
  font-size: var(--step--2);
  color: var(--ink-soft);
  line-height: 1.6;
}
.note--warn { background: rgba(192, 112, 74, .10); border-color: rgba(192, 112, 74, .24); }

.pricing {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
  gap: clamp(1.5rem, 3vw, 2.5rem);
  align-items: stretch;
}
.price-card {
  padding: clamp(1.8rem, 3vw, 2.8rem);
  border-radius: var(--r-lg);
  background: rgba(255, 255, 255, .72);
  border: 1px solid rgba(255, 255, 255, .9);
  box-shadow: var(--shadow-soft);
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
  display: flex; flex-direction: column; gap: 1.3rem;
}
.price-card__amount {
  font-family: var(--font-serif);
  font-size: var(--step-4);
  line-height: 1;
  color: var(--sage-900);
  display: flex; align-items: baseline; gap: .5rem;
}
.price-card__amount span { font-family: var(--font-sans); font-size: var(--step--1); color: var(--ink-faint); letter-spacing: .04em; }

/* ---------- 16. Barra fija de conversión ---------- */
.sticky-bar {
  position: fixed;
  left: 50%;
  bottom: clamp(.75rem, 2vw, 1.4rem);
  transform: translate(-50%, 160%);
  z-index: 80;
  width: min(var(--wrap), calc(100% - 2 * var(--gutter)));
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  padding: .8rem .8rem .8rem 1.6rem;
  border-radius: var(--r-pill);
  background: rgba(251, 248, 243, .88);
  -webkit-backdrop-filter: blur(22px) saturate(160%);
  backdrop-filter: blur(22px) saturate(160%);
  border: 1px solid rgba(255, 255, 255, .9);
  box-shadow: var(--shadow-lift);
  color: var(--ink);
  opacity: 0;
  transition: transform 1s var(--ease-breath), opacity .8s var(--ease-breath);
}
.sticky-bar.is-visible { transform: translate(-50%, 0); opacity: 1; }
.sticky-bar__info { display: flex; align-items: center; gap: 1.4rem; min-width: 0; }
.sticky-bar__price {
  display: flex; flex-direction: column; line-height: 1.15;
}
.sticky-bar__price b {
  font-family: var(--font-serif);
  font-size: var(--step-1);
  font-weight: 400;
  color: var(--sage-900);
}
.sticky-bar__price span { font-size: var(--step--2); color: var(--ink-faint); }
.sticky-bar__sep { width: 1px; height: 34px; background: var(--line); }
.sticky-bar__claim { font-size: var(--step--1); color: var(--ink-soft); }

/* ---------- 17. Panel de solicitud (off-canvas) ---------- */
.overlay {
  position: fixed; inset: 0;
  z-index: 100;
  background: rgba(14, 24, 20, .55);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--t-med) var(--ease-breath), visibility var(--t-med);
}
.overlay.is-open { opacity: 1; visibility: visible; }

.panel {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  z-index: 101;
  width: min(560px, 100%);
  display: flex;
  flex-direction: column;
  background: linear-gradient(180deg, rgba(251, 248, 243, .96), rgba(245, 239, 229, .97));
  -webkit-backdrop-filter: blur(28px) saturate(160%);
  backdrop-filter: blur(28px) saturate(160%);
  border-left: 1px solid rgba(255, 255, 255, .5);
  box-shadow: -40px 0 90px -40px rgba(20, 33, 28, .6);
  transform: translateX(100%);
  transition: transform 1s var(--ease-breath);
  overflow: hidden;
}
.panel.is-open { transform: translateX(0); }

.panel__progress {
  position: relative;
  height: 2px;
  background: var(--line-soft);
  flex: none;
}
.panel__progress-bar {
  position: absolute; inset: 0 auto 0 0;
  width: 33.33%;
  background: linear-gradient(90deg, var(--clay-500), var(--olive-500));
  transition: width 1s var(--ease-breath);
}

.panel__head {
  flex: none;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1.5rem;
  padding: clamp(1.4rem, 3vw, 2rem) clamp(1.4rem, 3vw, 2.2rem) 1rem;
}
.panel__steps { display: flex; gap: 1.1rem; font-size: var(--step--2); color: var(--ink-faint); flex-wrap: wrap; }
.panel__steps li { display: flex; align-items: center; gap: .4rem; transition: color var(--t-med) var(--ease-soft); }
.panel__steps li b { font-weight: 500; }
.panel__steps li.is-active { color: var(--sage-900); }
.panel__steps li.is-done { color: var(--olive-600); }

.panel__close {
  flex: none;
  width: 40px; height: 40px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: rgba(255, 255, 255, .6);
  cursor: pointer;
  display: grid; place-items: center;
  color: var(--sage-800);
  transition: background-color var(--t-fast), transform var(--t-med) var(--ease-breath);
}
.panel__close:hover { background: #fff; transform: rotate(90deg); }

.panel__body {
  flex: 1 1 auto;
  overflow-y: auto;
  padding: .5rem clamp(1.4rem, 3vw, 2.2rem) 1.5rem;
  scrollbar-width: thin;
}
.panel__foot {
  flex: none;
  padding: 1.1rem clamp(1.4rem, 3vw, 2.2rem) clamp(1.3rem, 3vw, 1.8rem);
  border-top: 1px solid var(--line-soft);
  background: rgba(255, 255, 255, .5);
  display: grid;
  gap: .8rem;
}
.panel__foot-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }

.panel-step { display: none; }
.panel-step.is-active { display: grid; gap: 1.3rem; animation: stepIn .9s var(--ease-breath) both; }
@keyframes stepIn {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: none; }
}
.panel-step h3 { font-size: var(--step-2); margin-bottom: .2em; }

.summary {
  display: grid; gap: .8rem;
  padding: 1.3rem 1.4rem;
  border-radius: var(--r-lg);
  background: rgba(255, 255, 255, .68);
  border: 1px solid var(--line-soft);
}
.summary__row { display: flex; justify-content: space-between; gap: 1rem; font-size: var(--step--1); }
.summary__row span { color: var(--ink-faint); }
.summary__row b { font-weight: 500; }
.summary__total {
  border-top: 1px solid var(--line);
  padding-top: .8rem;
  font-family: var(--font-serif);
  font-size: var(--step-1);
}

.panel-done {
  display: grid;
  place-items: center;
  gap: 1rem;
  text-align: center;
  padding: clamp(2rem, 6vw, 3.5rem) 0;
}
.panel-done__mark {
  width: 78px; height: 78px;
  border-radius: 50%;
  display: grid; place-items: center;
  background: radial-gradient(circle at 50% 40%, rgba(180, 191, 141, .5), rgba(180, 191, 141, .12));
  color: var(--olive-600);
  animation: breathe 4.5s var(--ease-breath) infinite alternate;
}

/* ---------- 18. Footer ---------- */
.site-footer {
  position: relative;
  background: linear-gradient(175deg, var(--sage-100) 0%, var(--paper-warm) 82%);
  color: var(--ink-soft);
  padding-block: clamp(3.5rem, 7vw, 6rem) clamp(6.5rem, 9vw, 7.5rem);
  overflow: hidden;
}
.footer__grid {
  position: relative; z-index: 2;
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) repeat(3, minmax(0, 1fr));
  gap: clamp(2rem, 4vw, 3.5rem);
}
.site-footer h4 {
  font-family: var(--font-sans);
  font-size: var(--step--2);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--sage-600);
  font-weight: 500;
  margin-bottom: 1.1rem;
}
.footer__links { display: grid; gap: .6rem; font-size: var(--step--1); }
.footer__links a { color: var(--ink-soft); transition: color var(--t-fast) var(--ease-soft); }
.footer__links a:hover { color: var(--accent); }
.footer__brand .brand__name { color: var(--sage-900); }
.footer__brand .brand__tag { color: var(--sage-600); }
.footer__note { font-size: var(--step--2); line-height: 1.65; color: var(--ink-faint); max-width: 42ch; margin-top: 1.2rem; }
.footer__bottom {
  position: relative; z-index: 2;
  margin-top: clamp(2.5rem, 5vw, 4rem);
  padding-top: 1.6rem;
  border-top: 1px solid var(--line);
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem;
  font-size: var(--step--2);
  color: var(--ink-faint);
}

/* ---------- 19. Animaciones de revelado ---------- */
[data-reveal] {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 1.15s var(--ease-breath), transform 1.15s var(--ease-breath);
  transition-delay: var(--reveal-delay, 0ms);
}
[data-reveal].is-revealed { opacity: 1; transform: none; }

[data-reveal="fade"] { transform: none; }
[data-reveal="left"]  { transform: translateX(-24px); }
[data-reveal="right"] { transform: translateX(24px); }
[data-reveal="scale"] { transform: scale(.97); }

/* Titular cinético: aparición por palabras, sin saltos bruscos */
.kinetic > span {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
}
.kinetic > span > i {
  display: inline-block;
  font-style: inherit;
  transform: translateY(105%);
  opacity: 0;
  transition: transform 1.35s var(--ease-breath), opacity 1.1s var(--ease-breath);
  transition-delay: calc(var(--i, 0) * 85ms);
}
.kinetic.is-revealed > span > i { transform: none; opacity: 1; }

/* ---------- 20. Responsive ---------- */
@media (max-width: 1080px) {
  .bento__a, .bento__b { grid-column: span 6; }
  .bento__c, .bento__d, .bento__e { grid-column: span 2; }
  .footer__grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 900px) {
  .hero__grid { grid-template-columns: 1fr; gap: 3rem; }
  .hero { padding-top: clamp(7rem, 14vh, 9rem); }
  .portrait__shape { max-width: 380px; }
  .chip--1 { left: 0; }
  .chip--3 { left: 0; }
  .chip--2 { right: 0; }
  .process-grid, .consensus, .profile, .pricing { grid-template-columns: 1fr; }
  .bento__c, .bento__d, .bento__e { grid-column: span 3; }
  .bento__e { grid-column: span 6; }
  .quote, .quote blockquote { max-width: 28ch; }

  .nav-toggle { display: inline-flex; }
  .header__phone { display: none; }
  .header__actions .btn--primary { padding: .68rem 1.05rem; }
  .nav {
    position: fixed;
    inset: 0 0 auto 0;
    flex-direction: column;
    align-items: flex-start;
    gap: .25rem;
    padding: 6rem var(--gutter) 2.5rem;
    background: rgba(251, 248, 243, .94);
    -webkit-backdrop-filter: blur(24px);
    backdrop-filter: blur(24px);
    box-shadow: 0 30px 60px -40px rgba(20, 33, 28, .6);
    transform: translateY(-101%);
    transition: transform .9s var(--ease-breath);
    z-index: -1;
  }
  .nav.is-open { transform: translateY(0); }
  .nav__link { font-family: var(--font-serif); font-size: var(--step-2); padding-block: .5rem; }
}

@media (max-width: 640px) {
  .hide-sm { display: none; }
  .bento { grid-template-columns: repeat(2, 1fr); }
  .bento__a, .bento__b, .bento__c, .bento__d, .bento__e, .bento__f { grid-column: span 2; }
  .field-row { grid-template-columns: 1fr; }
  .footer__grid { grid-template-columns: 1fr; }
  .sticky-bar { padding-left: 1.2rem; }
  .sticky-bar__claim, .sticky-bar__sep { display: none; }
  .quote--right { text-align: left; margin-left: 0; }
  .quote--right blockquote { margin-left: 0; }
  .credential { grid-template-columns: 1fr; gap: .3rem; }
  .metric-row { grid-template-columns: 1fr 1fr; }
}

/* ---------- 21. Movimiento reducido ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
  [data-reveal] { opacity: 1; transform: none; }
  .kinetic > span > i { transform: none; opacity: 1; }
}
