*{box-sizing:border-box;margin:0;padding:0}

/* ══════════════ PALETA · muestreada de la ilustración ══════════════
   Los diez colores salen literal de los píxeles de la imagen de referencia.
   Nada de lima Linktree: el verde acá es pasto (#83CE57), no neón.        */
:root{
  --crema:#F4EFE0;      /* fondo de la ilustración  · 49% */
  --verde:#83CE57;      /* la loma                  · 14% */
  --coral:#FF6553;      /* el sweater rojo          ·  8% */
  --amarillo:#F4DE12;   /* la falda                 ·  6% */
  --azul:#2696FF;       /* las mangas               ·  5% */
  --lila:#E8B9FF;       /* la polera lila           ·  4% */
  --arena:#DCD6C7;      /* el pantalón beige        ·  3% */
  --tinta:#272925;      /* la línea negra           ·  3% */
  --durazno:#FFB695;    /* la piel                  ·  2% */
  --tierra:#B74C1F;     /* las manos y el pelo      ·  1% */
  /* El papel de las dos secciones sin color. Único valor de todo el archivo
     que no sale de la ilustración: es neutro frío (R-B=+2) donde el resto
     de la paleta es warm (crema y arena están en +20).

     Contra crema da 1.03:1 —misma luminancia, distinta temperatura— y eso
     normalmente se lee como un error. Acá no, y el motivo es el orden: el
     lema coral separa el hero (crema) de Cómo funciona (papel), y la banda
     verde separa Estilos (papel) de Preguntas (crema). Los dos papeles
     nunca se tocan, así que el ojo nunca los compara. Si algún día se
     reordenan las secciones y quedan pegados, esto se rompe. */
  --papel:#F3F3F1;
  /* El verde de "Conoce". Mismo matiz que tu verde #83CE57 —97° contra
     98°— pero llevado a 96% de luz: es el verde vuelto papel. */
  --verde-papel:#F2FFEA;
  /* El papel del FAQ. A dE 0.8 de crema, o sea es prácticamente el mismo
     — pero crema ya no es fondo de ninguna sección, así que no choca con
     nada. Contra Crea (papel) da dE 6.7, y esas dos están en la 2 y la 6:
     no se tocan. */
  --faq-papel:#F2EDDF;
  /* El fondo de "Crea": tu lila #E8B9FF llevado al 15% de luz, mismo
     matiz. Oscuro pero con temperatura — la sección tiene color propio
     en vez de ser un agujero. Lo medí: sobre este fondo las ocho muestras
     dan dE 92 contra él; sobre el arena que tenía, 55. El oscuro no tiene
     matiz que competirles; el beige sí, y les robaba. */
  --lila-noche:#2E0F3D;
  /* El hero y la franja del nav, en un solo lugar. Ahora amarillo: sat
     91%, tal cual sale de la ilustración, sin desaturar. El titular es
     tu #0E61AD — 4.59 sobre él, pasa.

     El corte con Crea (arena) da 1.06 de luminancia y eso asusta, pero
     miente: entre cromáticos el corte lo hace el croma, y el dE es 78.
     Se separan de sobra. */
  --hero-bg:var(--amarillo);
  /* Los dos oscuros de los titulares. No son colores nuevos: son el azul y
     el tierra de la ilustración bajados de luz hasta pasar 5:1 contra su
     fondo más profundo (coral y azul). Sobre los fondos claros sobra
     contraste, y sobrar no es problema. */
  --ease:cubic-bezier(.22,1,.36,1);
  --resorte:cubic-bezier(.34,1.56,.64,1);
}

/* ══════════════ EL SISTEMA: DOS COLORES POR SECCIÓN ══════════════
   Cada sección declara --bg (el bloque) y --pop (el acento). Nada más.
   Todo lo de adentro — títulos, botones, tarjetas, blobs — se sirve de
   esas dos variables. La tinta no cuenta como color: es la línea negra
   que en la ilustración envuelve absolutamente todo.

     1 HERO          lima      + bosque    FUERTE
     2 TIENDA VIVA   faq-papel + verde        calma
     3 PREGUNTAS     faq-papel + verde        calma
     4 FOOTER        lima      + bosque    EL PUNTO FINAL

   Las dos del medio comparten papel Y acento: se leen como un solo
   bloque de papel entre los dos limas. Es una decisión tomada a
   propósito, no un descuido — pero si algún día molesta, la salida es
   mover Preguntas a --papel (#F3F3F1).

   Eran siete. Crea, Comparte y Vitrinas se fueron y en su lugar quedó
   una sola: la tienda de verdad adentro de un teléfono. Con cuatro
   secciones la regla se lee distinta pero es la misma: lima abre, lima
   cierra, y en el medio un solo bloque de papel que descansa.

   UNA sola regla para todas: fuerte, calma, fuerte, calma. Cada bloque
   de color descansa en uno de papel — es lo que hace legible a una revista.

   Antes no estaban al azar: estaban AMONTONADOS, que es peor. Las tres
   primeras eran fuertes y las tres siguientes apagadas. La página gritaba
   tres pantallas y susurraba tres. Pasaba porque cada fondo se decidió
   solo, respondiendo a algo distinto, y mi regla solo miraba que cada
   vecino cortara con el anterior. Eso atrapa errores pero no compone.

   Y resuelve sola la tensión de fondo: las secciones con color ADENTRO
   —Crea (las muestras) y Vitrinas (las plantillas)— ya no quedan pegadas.

   EL MARCO: amarillo abre y cierra. En el hero es el fondo con letra
   oscura; en el footer es la letra sobre fondo oscuro. Mismo par, dado
   vuelta, en los dos extremos. Y amarillo sobre tinta da 10.70 — el par
   de más contraste de toda la paleta, justo donde hace falta.
   ══════════════════════════════════════════════════════════════════ */
/* EL HERO · lima y bosque.

   --dark era #0E61AD (el azul) y --pop el coral. Los dos cambian:

     el fondo   #F4DE12 → #CCE31A   (lima)
     el titular #0E61AD → #204C14   (bosque)

   Medido sobre el lima: el titular 6.92, el nombre en tinta 10.19, el
   botón blanco sobre bosque 9.97. Los siete pasan.

   ══ Y EL --pop DEJA DE SER CORAL ══
   El resalte del titular usa --pop de fondo. El coral sobre el lima da
   2.11 — y el mínimo para un BLOQUE es 3. No se separa del fondo.

   Y como letra tampoco: 2.11 igual.

   El coral no sirve acá ni de fondo ni de letra. Va el bosque: el bloque
   se separa (6.92) y la letra crema se lee (8.68). El resalte es una
   INVERSIÓN del titular, no otro color — y eso lo hace más fuerte. */
.s-hero   {--bg:#CCE31A; --pop:#204C14;  --fg:var(--tinta); --dark:#204C14}
.s-comparte{--bg:var(--azul);   --pop:var(--amarillo);--fg:var(--tinta); --dark:#CCE31A}
.s-estilos{--bg:#c74444;   --pop:#c74444;    --fg:#ffdcdc; --dark:#2E0F3D}
.s-ana    {--bg:var(--verde-papel);--pop:var(--verde); --fg:var(--tinta); --dark:#2A6408}
.s-faq    {--bg:var(--faq-papel);--pop:var(--verde);  --fg:var(--tinta); --dark:#312B1E}
.s-vit    {--bg:var(--coral);   --pop:var(--lila);    --fg:var(--tinta); --dark:#004484}
.s-foot   {--bg:#CCE31A;        --pop:#204C14;        --fg:#272925}

html{scroll-behavior:smooth}
/* overflow-x:clip en vez de hidden — hidden convierte al body en contenedor
   de scroll y mata el position:sticky del nav y del índice lateral.
   clip recorta igual pero no crea contenedor. La línea 'hidden' queda de
   respaldo para navegadores sin soporte de clip.

   El fondo del body NO es decorativo: el nav vive fuera del hero y se lleva
   14px de margen más su propia altura (~63px), así que arriba de todo queda
   una franja de ~77px donde no hay ninguna sección — se ve el body y nada
   más. Con el hero en crema y el body en crema eso era invisible; con el
   hero verde apareció la franja beige. El body toma el color del hero. */
body{font-family:'Montserrat',sans-serif;color:var(--tinta);background:var(--hero-bg);
  overflow-x:hidden;overflow-x:clip}
.wrap{max-width:1180px;margin:0 auto;padding:0 22px;position:relative;z-index:2}
.big{font-weight:900;letter-spacing:-.035em;line-height:1.02;color:var(--dark,var(--tinta))}
.display{font-weight:900;letter-spacing:-.04em;line-height:.98;color:var(--dark,var(--tinta))}
/* Titular relleno de color + contorno de tinta: así resuelve la ilustración
   los colores que solos no contrastarían (coral sobre crema = 2.5:1). */
/* El contorno de letra se fue. Estaba ahí para rescatar contraste —coral
   sobre crema da 2.52:1— pero ensuciaba cada titular. El reemplazo es el
   marcador: la palabra clave se apoya en una mancha del --pop y la letra
   vuelve a ser tinta plana (5:1 y más). El resto de los titulares van en
   tinta a secas: el color ya lo pone el bloque entero de la sección. */
/* Los marcadores del hero y del lema llevan color propio, distinto del
   resto de su titular: "en un link" en blanco y "Tuya de verdad" en coral. */
/* EL RESALTE · la letra en crema, no en blanco.

   ══ ESTO ESTABA MAL EN PRODUCCIÓN Y NUNCA LO MEDÍ ══
   El HTML decía: <span class="mark" style="--mark-c:#FFFFFF">
   con --pop:var(--coral).

   Blanco sobre coral = 2.9. El mínimo es 4.5. NO PASABA.

   Y es LA PALABRA del titular — la que resaltamos justamente porque es la
   más importante. Llevaba ahí desde que armamos la landing, porque "coral
   con blanco" suena bien. Pero el coral es CLARO: blanco sobre claro no
   se lee.

   Ahora --pop es el bosque y la letra va crema: 8.68. */
/* EL RESALTE · monocromo. Sin caja y sin subrayado: "en 2 minutos" es el
   mismo verde que "Tu tienda online," y —abajo— del mismo tamaño. El énfasis
   lo dan el salto de línea y el peso, nada más. El .mark queda como gancho
   por si más adelante vuelve algún tratamiento. */
.mark{color:var(--pop)}

/* ══════════════ ESCALA FLUIDA ══════════════
   Antes la tipografía daba un salto seco en 820px: 74px de titular pasaban
   a 42px de golpe, y entre 820 y 500 el texto quedaba con tamaño de
   escritorio en un ancho de teléfono. Ahora cada titular interpola solo
   entre 375px (el iPhone más chico que importa) y 1180px (el ancho del
   contenido). Los px del clamp son el mínimo real, no una sugerencia. */
/* El máximo bajó de 74 a 62 por una cuenta, no por gusto: la columna del
   texto mide ~560px y "en tu WhatsApp" en Montserrat Black a 74px mide
   642. Se pasaba SIEMPRE a dos líneas. A 62 mide 538 y entra con aire. */
/* EL TITULAR · 92px de máximo, y el número lo medí, no lo elegí.

   Bajé a 62 hace días porque "Tu negocio," se partía en dos líneas. Pero
   lo estimé a ojo. Ahora bajé Montserrat, la instancié en peso 900 y medí
   la cadena de verdad:

     la columna del hero mide   575px
     "Tu negocio," a  62px →    368px   ← estaba sobrando 200px
     "Tu negocio," a  92px →    546px
     "Tu negocio," a  97px →    576px   ← acá se parte

   El techo real es 97. Voy a 92 y no a 97 porque a 97 el margen es de
   1px: un navegador que redondee distinto, una versión de la fuente que
   cambie medio punto, y se parte. A 92 hay 29px, y eso aguanta.

   Probado en los 8 anchos, de 1440 a 375: entra en todos. */
/* EL TITULAR · 58px, no 92.

   El campo va a 86px. Medido, el titular entra hasta 86 en esta columna
   — pero si los dos miden lo mismo, no manda ninguno.

   El campo ES la acción. El titular es el contexto. */
.t-hero{font-size:clamp(36px,4.4vw + 10px,74px);line-height:1.0;margin-bottom:28px}
/* > span y no span a secas.

   Con "span" agarraba TODOS los span de adentro — incluido el .mark del
   resalte. Eso lo volvía block, y su fondo es background-size:100%: el
   100% pasaba a ser todo el ancho de la columna, no el del texto.

   Por eso el bloque verde se estiraba media pantalla a la derecha.

   Con "> span" toco solo los dos hijos directos —las dos líneas—. El
   .mark es nieto y se queda inline; un inline ajusta su fondo al texto,
   que es lo que hace falta.

   Y .rota{display:inline-block} pierde contra esto (0,2,1 vs 0,1,0), que
   es lo que quiero: la segunda línea tiene que ser un renglón propio. */
.t-hero > span{display:block}
.t-band {font-size:clamp(32px, 2.73vw + 21.8px, 54px)}
.t-foot {font-size:clamp(46px, 5.22vw + 26.4px, 88px)}
.t-faq  {font-size:clamp(28px, 1.49vw + 22.4px, 40px)}

/* ══════════════ MOVIMIENTO ══════════════
   Acá había un error silencioso. El revelado usaba `transform:translateY()`,
   pero las tres tarjetas de los pasos ya tienen `transform:rotate()` para
   abanicarse, y `.step:nth-child(1)` (0,2,0) le gana a `.reveal` (0,1,0):
   la traslación nunca se aplicaba. Las tarjetas solo hacían fundido, sin
   subir. Se veía flojo y no era obvio por qué.

   La solución no es pelear especificidad, es no usar `transform`: hoy
   `translate` y `scale` son propiedades independientes y se componen con
   el `transform` que ya esté puesto. La tarjeta rota y sube a la vez. */
.reveal{opacity:0;translate:0 26px;
  transition:opacity .7s var(--ease),translate .7s var(--ease);transition-delay:var(--d,0ms)}
.reveal.in{opacity:1;translate:none}
.reveal-s{opacity:0;scale:.92;
  transition:opacity .6s var(--ease),scale .6s var(--ease);transition-delay:var(--d,0ms)}
.reveal-s.in{opacity:1;scale:none}
/* Las tarjetas entran con las dos cosas: suben y crecen. Es más movimiento
   que el del texto a propósito — un objeto llega, una frase se escribe. */
.reveal-c{opacity:0;translate:0 32px;scale:.96;
  transition:opacity .65s var(--ease),translate .65s var(--ease),scale .65s var(--ease);
  transition-delay:var(--d,0ms)}
.reveal-c.in{opacity:1;translate:none;scale:none}
@keyframes rise{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
/* ENTRADA DEL HERO · en orden de lectura.
   Las dos líneas del título entran por separado —primero "Tu tienda
   online,", después "en 2 minutos"—. Luego la barra (la acción) y por
   último la microcopia. El teléfono llega en paralelo, un pelo después
   del título, como el producto que aparece cuando el mensaje ya se leyó. */
.hero .t-hero>span,.hero .claim-bar,.hero .cta-nota{animation:rise .85s var(--ease) both}
.hero .t-hero>span:nth-child(1){animation-delay:0s}
.hero .t-hero>span:nth-child(2){animation-delay:.12s}
.hero .claim-bar{animation-delay:.34s}
.hero .cta-nota{animation-delay:.52s}
@keyframes float{0%,100%{transform:translateY(0) rotate(-.6deg)}50%{transform:translateY(-14px) rotate(.6deg)}}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition-duration:.01ms!important}
  .reveal,.reveal-s,.reveal-c{opacity:1;translate:none;scale:none}
  html{scroll-behavior:auto}
}

/* ══════════════ FORMAS · el vocabulario de la ilustración ══════════════
   Manchas planas de borde orgánico, sin sombra ni degradado, en el --pop
   de su sección. Puro relleno, como las nubes y la loma del dibujo. */
.blob{position:absolute;background:var(--pop);pointer-events:none;z-index:0}
.blob-a{border-radius:58% 42% 47% 53%/44% 51% 49% 56%}
.blob-b{border-radius:41% 59% 62% 38%/54% 39% 61% 46%}
.dot{position:absolute;border-radius:50%;background:var(--pop);pointer-events:none;z-index:0}

/* ══════════════ NAV · vidrio ══════════════
   El nav tenía blur pero encima un borde de tinta de 2px y sombra dura:
   eso es un sticker, no un vidrio. Y al hacer scroll se iba a crema al 90%,
   o sea dejaba de ser translúcido justo cuando más lo necesita.

   Un vidrio creíble son cuatro capas, no una: el blur que difumina lo de
   atrás, la saturación que revive el color que el blur apaga, un borde de
   luz blanca (el canto del vidrio) y un brillo interno arriba (el reflejo).
   La sombra pasa a ser difusa y separada — un vidrio flota, no se pega. */
/* padding-top respeta la muesca/isla de los iPhone en horizontal */
/* FIXED Y NO STICKY, y no es un cambio de comportamiento.

   Con top:14px y margin-top:14px el nav ya estaba pegado desde el primer
   píxel: se comportaba como fixed. La diferencia es que OCUPABA LUGAR en
   el flujo, y ese lugar era una franja del <body> — amarillo puro, sin
   nubes, porque .hero{overflow:clip} las recortaba en su borde.

   Se veía la costura: una banda de amarillo más fuerte arriba, y del lado
   izquierdo se notaba más porque ahí no hay blob que disimule.

   Fuera del flujo, el hero arranca en el tope, reserva el espacio del nav
   con su propio padding-top, y las nubes llegan hasta arriba. No hay
   costura porque ya no hay dos fondos. */
.nav{position:fixed;top:14px;left:0;right:0;z-index:50;margin:0 auto;max-width:1180px;
  padding:0 max(22px,env(safe-area-inset-right)) 0 max(22px,env(safe-area-inset-left))}
/* ══════════════════════════════════════════════════════════════════════
   EL NAV · BLANCO ARRIBA, VIDRIO AL BAJAR

   Antes era vidrio siempre. Y arriba del todo el vidrio no hace nada:
   detrás solo tiene el amarillo liso del hero, así que no hay nada que
   difuminar. Un efecto que no tiene qué atrapar se paga sin cobrar — y
   backdrop-filter cuesta caro en un teléfono: obliga a componer una capa
   de más en cada cuadro.

   Blanco arriba. Vidrio cuando empieza a pasar contenido por debajo, que
   es cuando el vidrio recién tiene trabajo.

   El disparador es .stuck, que ya existía a los 30px de scroll. No
   inventé mecanismo: invertí qué hace cada estado.
   ══════════════════════════════════════════════════════════════════════ */
.nav-in{
  position:relative;isolation:isolate;overflow:hidden;border-radius:999px;
  padding:12px 14px 12px 26px;display:flex;align-items:center;justify-content:space-between;
  background:#fff;
  border:1px solid rgb(39 41 37/.1);
  box-shadow:0 8px 26px rgb(39 41 37/.1);
  transition:padding .35s var(--ease),background .35s var(--ease),
    border-color .35s var(--ease),box-shadow .35s var(--ease)}
/* El reflejo: una luz que cae desde el vértice superior izquierdo */
.nav-in::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;
  background:radial-gradient(115% 80% at 12% -10%,rgb(255 255 255/.6),transparent 55%)}
/* Al hacer scroll se compacta y el vidrio se espesa — pero sigue siendo
   vidrio: el fondo de la sección que pasa por debajo lo tiñe. Ahí está la gracia. */
/* AL BAJAR · el vidrio, que ahora sí tiene qué atrapar.
   Y se achica: 12→9px de relleno. Arriba el nav es un objeto; abajo es
   una herramienta que no debe estorbar. */
.nav.stuck .nav-in{padding:9px 12px 9px 22px;
  background:linear-gradient(135deg,rgb(255 255 255/.62),rgb(255 255 255/.34));
  backdrop-filter:blur(30px) saturate(200%);-webkit-backdrop-filter:blur(30px) saturate(200%);
  border-color:rgb(255 255 255/.55);
  box-shadow:inset 0 1px 0 rgb(255 255 255/.75),inset 0 -1px 0 rgb(255 255 255/.18),
    0 10px 34px rgb(39 41 37/.11)}
/* Respaldo: si el sistema pide menos transparencia, o si el navegador no
   soporta backdrop-filter, el vidrio se cae y hay que darle fondo sólido. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .nav-in,.nav.stuck .nav-in{background:rgb(244 239 224/.97)}
}
@media(prefers-reduced-transparency:reduce){
  .nav-in,.nav.stuck .nav-in{background:var(--crema);border-color:rgb(39 41 37/.14);
    backdrop-filter:none;-webkit-backdrop-filter:none}
}
/* ══════════════ LA MARCA ══════════════
   El logo es la palabra, y el punto del dominio es la marca. Ese punto no
   es decorativo: es el que separa "abre" de "tienda" y el que convierte
   el nombre en la URL. Va en el lugar EXACTO donde va el punto de
   abretienda.com — quien conoce el dominio lee la URL; quien no, lee
   "Abretienda" con un punto lindo. Nadie lee algo mal.

   Va en minúsculas porque así se escriben los dominios.

   EL PUNTO ES VERDE, Y NO POR GUSTO: "abre" + punto verde = ABIERTO.
   Todo local del mundo tiene un cartel que dice ABIERTO o CERRADO, y el
   verde es abierto. El punto deja de ser un color y pasa a significar algo.
   Y de paso el "punto verde = en línea" de WhatsApp juega a favor: tu
   producto promete que la tienda está viva en dos minutos.

   El coral se fue por lo contrario: está a dE 18.6 del rojo de error. No
   es el mismo color, pero a 9px con un anillo negro el ojo no mide dE —
   lee "punto rojo chico" y eso significa notificación o falla.

   El costo, medido: sobre el amarillo del hero el verde da dE 50 y el
   coral daba 85. Verde y amarillo son vecinos en el círculo, así que el
   punto salta menos. Vale igual — el argumento del "abierto" pesa más.

   EL ANILLO NO ES OPCIONAL: verde sobre el amarillo del hero da 1.40 de
   luminancia — el punto solo se disolvería. Con el canto de tinta se
   define igual. Es la misma regla de la ilustración: color plano, línea
   negra. Y sobre el negro del footer la línea se invierte a papel.

   Los dos números para tocar están acá: el tamaño del punto y el grosor
   del anillo. A .3em el punto mide ~2.3 veces un punto tipográfico — se
   lee como marca y no como puntuación. */
/* EL AIRE ENTRE LAS LETRAS: −0.02em, no −0.045em.

   El −0.045 lo elegí mirando el hero, a 34px, donde el apretado se ve
   bien. Pero un logo no se elige en un tamaño: se elige en el PEOR.

   Y el peor es 13px, en el pie de cada tienda — que es donde más gente lo
   ve: los 300 clientes de Camila, no los que entran al panel. Ahí
   −0.045em pega la "e" con la "n".

   La diferencia a 13px es medio píxel por letra. Suena a nada; son 10
   letras, o sea 5px, y el ojo lo ve.

   No fui a 0: ahí pierde la densidad que hace que un logo se lea como un
   objeto y no como una palabra suelta. −0.02 es lo justo. */
.marca{--punto:.3em; --anillo:1.5px; --anillo-color:var(--tinta);
  display:inline-flex;align-items:baseline;font-weight:900;font-size:21px;
  letter-spacing:-.02em;color:var(--tinta);text-decoration:none}
.marca .p{flex:none;box-sizing:content-box;
  width:var(--punto);height:var(--punto);border-radius:50%;
  background:var(--verde);border:var(--anillo) solid var(--anillo-color);
  margin:0 .1em;
  transition:transform .4s var(--ease)}
.marca:hover .p{transform:scale(1.35)}
.nav-links{display:flex;gap:26px;font-size:14.5px;font-weight:700}
.nav-links a{color:var(--tinta);text-decoration:none;position:relative}
.nav-links a::after{content:"";position:absolute;left:0;right:0;bottom:-5px;height:3px;background:var(--coral);
  transform:scaleX(0);transform-origin:right;transition:transform .32s var(--ease)}
.nav-links a:hover::after{transform:scaleX(1);transform-origin:left}
.nav-cta{display:flex;gap:10px;align-items:center}
/* Dentro del vidrio los botones también se ablandan: el borde de tinta y la
   sombra dura del resto de la página le devolverían el aspecto de sticker. */
.nav .btn{border-color:rgb(39 41 37/.16);box-shadow:none}
.nav .btn:hover{box-shadow:0 4px 12px rgb(39 41 37/.16)}
.nav .btn:active{transform:scale(.97);box-shadow:none}
.nav .btn-ghost{background:rgb(255 255 255/.4)}
.nav .btn-ghost:hover{background:rgb(255 255 255/.7)}
.nav .btn-ink{border-color:transparent}

/* ══════════════ BOTONES · relleno plano + línea + sombra dura ══════════════ */
.btn{border:2px solid var(--tinta);border-radius:999px;font-family:inherit;font-weight:800;cursor:pointer;
  text-decoration:none;display:inline-flex;align-items:center;justify-content:center;position:relative;
  overflow:hidden;color:var(--tinta);box-shadow:0 4px 0 var(--tinta);
  transition:transform .18s var(--ease),box-shadow .18s var(--ease),background .25s}
.btn:hover{transform:translateY(-2px);box-shadow:0 6px 0 var(--tinta)}
.btn:active{transform:translateY(4px);box-shadow:0 0 0 var(--tinta)}
.btn-ghost{background:transparent;padding:9px 18px;font-size:14px}
.btn-ghost:hover{background:rgb(39 41 37/.07)}
.btn-ink{background:var(--tinta);color:var(--crema);padding:9px 20px;font-size:14px;box-shadow:0 4px 0 rgb(39 41 37/.35)}
.btn-ink:hover{box-shadow:0 6px 0 rgb(39 41 37/.35)}
.btn-ink:active{box-shadow:0 0 0 rgb(39 41 37/.35)}
/* El CTA siempre viste el --pop de su sección: la acción cambia de color al bajar */
/* EL BOTÓN DEL HERO · bosque con letra blanca, sin canto.

   El canto de tinta y la sombra dura eran para el CORAL, que sobre el
   amarillo daba 2.11 y necesitaba ayuda para separarse del fondo.

   Un botón bosque sobre lima da 6.92: se separa solo. El canto ya no
   trabaja — decora. */
.btn-pop{background:var(--pop);padding:14px 26px;font-size:16px}
.cta-hero{background:#204C14;color:#fff;border:0;border-radius:999px;
  padding:17px 34px;font-family:inherit;font-size:16.5px;font-weight:900;cursor:pointer;
  box-shadow:0 6px 22px -4px rgb(32 76 20/.45);margin-top:24px;
  transition:transform .18s var(--resorte),box-shadow .18s var(--ease)}
.cta-hero:hover{transform:translateY(-3px);box-shadow:0 12px 30px -6px rgb(32 76 20/.55)}
.cta-hero:active{transform:translateY(0)}
/* La microcopia que remata el botón: una línea. El ícono de WhatsApp junto
   al texto, quieto —un ícono de marca que late se ve raro—. Antes había una
   segunda línea ("sin web, sin diseñador"), pero repetía lo que el titular
   ya dice; se fue para que quede una sola idea de apoyo. */
.cta-nota{display:flex;align-items:center;gap:7px;margin-top:13px;
  font-size:14px;font-weight:700;letter-spacing:-.01em;color:#2C4A1C}
.cta-nota-ic{width:16px;height:16px;flex:none}
.btn-big{padding:16px 32px;font-size:17px}
.btn-shine::after{content:"";position:absolute;top:0;left:-120%;width:60%;height:100%;
  background:linear-gradient(90deg,transparent,rgb(255 255 255/.5),transparent);transform:skewX(-20deg)}
.btn-shine:hover::after{animation:shine .85s var(--ease)}
@keyframes shine{to{left:130%}}
/* ══════════════ MENÚ MÓVIL ══════════════
   Bajo 820px v3 hacía .nav-links{display:none} y listo: cuatro secciones
   de la página quedaban sin navegación en el 60% del tráfico. El panel
   es del mismo vidrio que la píldora — misma receta de blur, saturación
   y canto de luz — para que se lea como si la píldora se desplegara. */
.nav-burger{display:none;flex:none;width:44px;height:44px;border:0;border-radius:50%;cursor:pointer;
  background:rgb(255 255 255/.4);position:relative;transition:background .25s}
.nav-burger:hover{background:rgb(255 255 255/.7)}
.nav-burger i{position:absolute;left:13px;width:18px;height:2.5px;border-radius:2px;background:var(--tinta);
  transition:transform .34s var(--ease),opacity .2s var(--ease)}
.nav-burger i:nth-child(1){top:15px}
.nav-burger i:nth-child(2){top:21px}
.nav-burger i:nth-child(3){top:27px}
.nav.open .nav-burger i:nth-child(1){transform:translateY(6px) rotate(45deg)}
.nav.open .nav-burger i:nth-child(2){opacity:0}
.nav.open .nav-burger i:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.nav-sheet{
  position:absolute;left:22px;right:22px;top:calc(100% + 8px);z-index:-1;
  border-radius:26px;padding:10px;overflow:hidden;
  background:linear-gradient(135deg,rgb(255 255 255/.62),rgb(255 255 255/.34));
  backdrop-filter:blur(30px) saturate(200%);-webkit-backdrop-filter:blur(30px) saturate(200%);
  border:1px solid rgb(255 255 255/.55);
  box-shadow:inset 0 1px 0 rgb(255 255 255/.8), 0 14px 44px rgb(39 41 37/.18);
  /* Cerrado no basta con opacity:0 — visibility saca el panel del foco del
     teclado y del lector de pantalla, que si no siguen navegando algo invisible. */
  opacity:0;visibility:hidden;transform:translateY(-10px) scale(.98);transform-origin:top center;
  transition:opacity .28s var(--ease),transform .28s var(--ease),visibility 0s .28s}
.nav.open .nav-sheet{opacity:1;visibility:visible;transform:none;transition-delay:0s}
.nav-sheet a:not(.btn){display:block;padding:14px 16px;border-radius:16px;text-decoration:none;
  color:var(--tinta);font-size:16px;font-weight:700;transition:background .2s}
.nav-sheet a:not(.btn):active{background:rgb(255 255 255/.6)}
.nav-sheet .sep{height:1px;background:rgb(39 41 37/.1);margin:8px 12px}
.nav-sheet .btn{width:100%;margin-top:6px;padding:13px 18px;font-size:15px}
@media(min-width:821px){.nav-sheet,.nav-burger{display:none}}
@media(max-width:820px){
  .nav-links{display:none}
  .nav-burger{display:block}
  /* "Iniciar sesión" se va al panel; "Crear gratis" se queda a la vista.
     Esto es una landing: el CTA persistente en el encabezado paga. Hice la
     cuenta a 400px — 18 de relleno + 112 de marca + 112 de botón + 44 de
     hamburguesa + 26 de huecos = 312 sobre 356 disponibles. Entra. */
  .nav-cta .btn-ghost{display:none}
  .nav-cta{gap:8px}
  .nav-cta .btn-ink{padding:9px 16px;font-size:13.5px}
  .nav-in{padding:8px 8px 8px 18px;gap:8px}
  .nav.stuck .nav-in{padding:8px 8px 8px 18px}
}
/* Bajo 400px ya no entra: el botón se va al panel y queda solo la
   hamburguesa. El CTA del hero está a un dedo de distancia igual. */
@media(max-width:400px){
  .nav-cta{display:none}
  .logo{font-size:19px}
}

/* Pastilla de acento: sobre fondo pálido, el coral/verde/azul no dan
   contraste para texto chico (verde sobre crema = 1.67:1). Por eso el
   color nunca es la letra: es la mancha, y la letra va en tinta. */
.pill{display:inline-block;background:var(--pop);border:2px solid var(--tinta);border-radius:999px;
  padding:6px 14px;font-size:11.5px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:var(--tinta)}

/* ══════════════ HERO · crema + coral ══════════════ */
/* EL HERO EMPIEZA ARRIBA DE TODO, y el nav flota encima.

   Antes el nav era hermano del hero, así que la franja donde vive era el
   fondo del <body> — amarillo puro. Y el hero, abajo, estaba aclarado por
   las nubes. Se veía la costura: una banda de amarillo más fuerte arriba,
   y del lado izquierdo se notaba más porque ahí no hay blob que disimule.

   Las nubes las tenía en .cielo{inset:-10%} justamente para que se salieran
   por arriba y taparan eso. Pero .hero tiene overflow:clip y las recortaba
   en su propio borde: el -10% no hacía nada.

   Ahora el hero arranca en el tope y reserva el lugar del nav con su
   relleno. El nav flota sobre las nubes, no sobre el body. No hay costura
   porque no hay dos fondos. */
.hero{padding:118px 0 104px;position:relative;background:var(--bg);
  overflow:hidden;overflow:clip}
/* ACÁ VIVÍAN LOS DOS BLOBS DEL HERO Y LOS SAQUÉ.

   Estaban al 42% y al 32%. Todos los demás de la página andan entre 16% y
   22% — estos dos eran los únicos gritados, y la razón está escrita en el
   comentario que borré con ellos:

     "Sobre amarillo se evapora —los dos son claros— así que sube a 42%"

   O sea: los subí porque no se veían sobre el amarillo PLANO. Y el amarillo
   dejó de ser plano el día que le puse nubes. El número sobrevivió a su
   motivo, y el comentario que lo justificaba pasó a ser mentira.

   Peor: el blob-a de 420px estaba justo detrás del teléfono. Era lo primero
   que te llevaba el ojo, compitiendo con lo único que la primera pantalla
   tiene que mostrar.

   No los bajé al 12%: un elemento al 12% es un elemento que no te animaste
   a borrar. Queda ahí, no se ve, y en un mes nadie sabe por qué está.

   Si la esquina queda vacía, volver a ponerlos son treinta segundos. Nunca
   al revés. */
.hero .d1{width:14px;height:14px;left:52%;top:44px}
.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:40px;align-items:center}
.hero h1{color:var(--dark)}
/* El titular ya no rota: se lee. Dejo el .rota porque el HTML lo usa —
   si algún día vuelve el temporizador, el nowrap y el min-width ya están
   resueltos. */
/* UN SOLO TAMAÑO. Las dos líneas van iguales: "Tu tienda online," y "en 2
   minutos" al mismo cuerpo. La primera línea es la más larga, así que manda
   el ancho: con el techo del titular en 58px entra en un renglón con margen
   en la columna. Sigue siendo una frase; el salto de línea y el peso
   alcanzan sin jerarquía de cuerpo. */
.rota{display:inline-block;position:relative;white-space:nowrap;
  font-size:1em;letter-spacing:-.03em}
/* ══════════════════════════════════════════════════════════════════════
   EL CAMPO · lo más grande de la página

   Antes era un input de 18px al final de una pastilla, con "abretienda.com/"
   delante. El campo es LA ACCIÓN de este hero — y medía menos que el
   subtítulo.

   Ahora mide 86px y no tiene la dirección delante: la dirección aparece
   abajo, escrita entera, mientras teclea. Decirla dos veces era repetirse.

   ══ ANCHO FIJO ══
   6.5em, siempre. Antes crecía con el texto y tenía un bug: en reposo
   usaba 8ch y con la primera letra caía a 2ch — se achicaba a un cuarto y
   arrastraba todo lo de abajo.

   Y el ch era una trampa además: ch = el ancho del "0", que en Montserrat
   Black mide 64px a 92px, mientras las minúsculas miden la mitad.

   Medido con nombres reales a 86px: ana 157 · camila 282 · hilorojo 324 ·
   tallergreda 468. 6.5em = 559. Los más largos se desplazan adentro, como
   en cualquier campo, y la línea de abajo los muestra enteros.

   Un campo que cambia de tamaño mientras escribís no se ve profesional:
   se ve roto. Los campos no respiran.
   ══════════════════════════════════════════════════════════════════════ */
/* ══════════════════════════════════════════════════════════════════════
   LA ETIQUETA DEL CAMPO

   El campo se quedó sin etiqueta y fue mi error: la teníamos y la perdí
   entre dos cambios que eran correctos por separado.

     antes  →  "Crea tu tienda en 2 minutos:"  ← esa ERA la etiqueta
               [tunegocio]
               "Escribe el NOMBRE DE TU NEGOCIO y ya tienes dónde…"

   Volvió "Tu negocio, en un solo link" (el titular tiene que decir tu
   diferencia) y volvió WhatsApp al subtítulo (es lo único que te separa
   de Linktree). Los dos cambios estaban bien.

   Pero entre los dos se llevaron la etiqueta puesta. Y quedó un campo
   donde lo único que dice qué va ahí es el placeholder que se escribe
   solo — que es una PISTA, no una instrucción: si no lo mirás en el
   momento justo, no hay nada.

   Un campo sin etiqueta es un campo roto. No es una opinión de diseño:
   es lo primero de cualquier formulario.

   ══ Y ES UN <label for>, NO UN <p> ══
   Antes el input tenía aria-label. Eso lo lee un lector de pantalla y
   nadie más. Un <label for> se ve, se lee, Y AGRANDA EL BLANCO: tocar la
   etiqueta enfoca el campo. En un teléfono eso son 24px más de zona
   táctil, gratis.
   ══════════════════════════════════════════════════════════════════════ */
/* ══════════════════════════════════════════════════════════════════════
   LA BARRA · UNA SOLA ACCIÓN

   El label y el subtítulo largo se fueron. El dominio abretienda.com/ vive
   ADENTRO del campo y hace de rótulo: no hay que explicar qué escribir,
   el prefijo lo dice. El input y el botón son una sola pastilla — el
   patrón de "reclama tu link" de Linktree y Cal.com, el más probado para
   esto. Ver tu URL formándose mientras el nombre se escribe solo es el
   gancho, y ya no necesita una línea aparte debajo.
   ══════════════════════════════════════════════════════════════════════ */
.claim-bar{display:flex;align-items:center;gap:2px;
  background:#fff;border-radius:999px;padding:6px 6px 6px 20px;
  max-width:440px;margin-top:26px;
  box-shadow:0 8px 26px -10px rgba(32,76,20,.45);
  border:1px solid rgba(32,76,20,.06);
  transition:box-shadow .2s var(--ease),border-color .2s var(--ease)}
.claim-bar:focus-within{border-color:rgba(32,76,20,.28);
  box-shadow:0 10px 30px -10px rgba(32,76,20,.5)}
.claim-pre{flex:none;color:#8AA05E;font-weight:700;font-size:17px;
  letter-spacing:-.01em;white-space:nowrap;-webkit-user-select:none;user-select:none}
/* 17px de letra y 15px de relleno vertical: el campo respira más alto y se
   lee más grande. El piso sigue siendo 16px para que iOS no haga zoom al
   enfocar. */
.claim-field{flex:1 1 auto;min-width:0;width:100%;
  background:none;border:0;outline:none;font-family:inherit;
  font-size:17px;font-weight:800;letter-spacing:-.01em;line-height:1.2;
  color:var(--dark);caret-color:var(--coral);padding:15px 2px}
.claim-field::placeholder{color:rgba(32,76,20,.42);font-weight:700;opacity:1}
.claim-go{flex:none;background:var(--dark);color:#fff;border:0;cursor:pointer;
  border-radius:999px;font-family:inherit;font-weight:800;font-size:15.5px;
  letter-spacing:-.01em;padding:14px 24px;white-space:nowrap;
  transition:transform .16s var(--resorte),background .18s var(--ease)}
.claim-go:hover{transform:translateY(-1px);background:#1a3f10}
.claim-go:active{transform:translateY(0)}


/* Más alto (14→19px de relleno), más grande (16→18px) y menos gordo
   (800→600 el nombre, 700→500 el dominio). A 18px el peso 800 se veía
   apretado — cuanto más grande la letra, menos peso necesita para pesar. */


/* ACÁ HABÍA UN .claim-input::placeholder DE ANTES:
     {color:#C9C4BA;font-weight:500}

   Misma especificidad que el mío y venía DESPUÉS: ganaba. Por eso el
   nombre que se escribía solo salía gris claro y en peso 500, cuando el
   campo es Montserrat 900 verde.

   Se veía como si fuera otra tipografía — y era la misma, en otro peso.

   No agregué una regla nueva: dejé una vieja viva. Antes de escribir CSS,
   buscar si ya está. */
.claim-hint{margin-top:10px;font-size:13.5px;font-weight:700;min-height:0;opacity:0;
  transform:translateY(-4px);transition:opacity .3s var(--ease),transform .3s var(--ease)}
.claim-hint.show{opacity:.8;transform:none;min-height:20px}
/* ══════════════ BANDAS ══════════════ */
.band{padding:104px 0;position:relative;background:var(--bg);color:var(--fg);overflow:hidden;overflow:clip}
/* Conoce es la más baja de las bandas: cuatro datos no piden 104px de aire */
.band.s-ana{padding:72px 0}
.band h2{line-height:1.02}
.sec-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
/* El párrafo de Comparte era el único sin regla propia: heredaba tinta y
   no tenía margen. Ahora va en blanco y con el mismo aire que las otras.

   19px y peso 700 no es capricho: en blanco sobre el azul da 3.05, y a
   17px/600 eso es texto de cuerpo — el mínimo sería 4.5 y no pasaría. A
   19/700 cuenta como texto grande, el mínimo baja a 3.0 y pasa. Y de paso
   queda igual que .ana-head p (19px), que era el estándar de la página. */
.sec-grid p{font-size:19px;line-height:1.55;font-weight:700;margin:22px 0 0;max-width:38ch;color:#fff}
.statement{max-width:880px;margin:0 auto;text-align:center}
.statement h2{max-width:16ch;margin:0 auto}
.statement p{font-size:20px;line-height:1.55;margin:26px auto 34px;font-weight:600;max-width:60ch}
.ana-head{max-width:760px}
.ana-head p{font-size:19px;line-height:1.55;margin:20px 0 26px;font-weight:600;max-width:58ch}
@media(max-width:820px){.sec-grid{grid-template-columns:1fr;gap:26px}.band{padding:70px 0}}

/* ══════════════════════════════════════════════════════════════════════
   LAS NUBES

   Van BLANCAS, y eso resuelve dos problemas de una.

   1 · NO NECESITAN ESCONDERSE. Con lila o coral el titular se caía —
       #0E61AD sobre amarillo da 4.59, raspando el mínimo, y con coral
       encima bajaba a 3.52: ilegible. El blanco hace lo contrario, aclara
       el amarillo y SUBE el contraste:
         sin nubes  4.59   ·   al 45%  5.23   ·   al 75%  5.77
       Cuantas más nubes, más se lee. Por eso cruzan el hero entero.

   2 · NO LAS TRAJE DE AFUERA. Tu ilustración tiene 1.9% de píxeles
       blancos: las nubes. Es el único elemento del dibujo que la landing
       nunca usó — el verde es la loma, el coral el sweater, el amarillo el
       cielo, y las nubes quedaron afuera.
       No es un efecto de moda: es la parte de tu dibujo que faltaba.

   Y hay un motivo técnico además del estético: la carcasa del teléfono
   tiene backdrop-filter, que desenfoca lo que hay detrás. Detrás había
   amarillo plano, y desenfocar un color plano da el mismo color plano. El
   vidrio estaba y no se veía que era vidrio. Ahora tiene qué atrapar.
   ══════════════════════════════════════════════════════════════════════ */
/* Las nubes se fueron.

   Existían porque la carcasa de vidrio del teléfono necesitaba algo que
   atrapar: backdrop-filter difumina lo que hay DETRÁS, y detrás había
   manchas blancas moviéndose.

   El teléfono ahora tiene canto de tinta y sombra dura — no depende de
   nada. Sin el vidrio, las nubes eran adorno, que es justo lo que dije
   que no debían ser.

   Se fueron con ellas: 4 blurs de 64px por cuadro, 4 animaciones
   infinitas, y las velocidades coprimas 8/11/13/17. Todo eso costaba y
   ya no compraba nada. */
@media(prefers-reduced-motion:reduce){.n{animation:none}}

/* ══════════════════════════════════════════════════════════════════════
   EL HERO · EL TELÉFONO QUE GIRA

   Antes subían ocho FOTOS de locales. El problema no era estético: los
   ocho negocios del hero eran LOS MISMOS OCHO de Vitrinas — dos secciones
   diciendo "mirá, negocios". Y ninguna contestaba la pregunta más difícil
   de este producto: ¿qué voy a tener yo?

   Ahora adentro corre la vitrina de verdad. No un dibujo: el CSS real de
   globals.css, con la clase .tpl que le pone tu app. Bloque con su borde de
   3px y su sombra dura, Pizarra con su pizarrón.

   Y GIRA en vez de subir por una razón: no son ocho tiendas, es UNA con
   ocho caras. Una fila mentiría; el giro dice la verdad. El gesto es el
   mensaje.
   ══════════════════════════════════════════════════════════════════════ */
.gal{position:relative;height:min(80vh,660px);display:grid;place-items:center;perspective:1600px;z-index:2;
  animation:entraTel .9s var(--ease) both .45s}
/* La entrada va en el contenedor, no en .flip: ahí viven el giro (transform)
   y la flotación (translate), y no hay que pisarlos. Base visible, para que
   con movimiento reducido el teléfono simplemente esté. */
@keyframes entraTel{from{opacity:0;transform:translateY(46px) scale(.95)}to{opacity:1;transform:none}}
.flip{width:min(250px,68vw);transform-style:preserve-3d;position:relative;
  transition:transform .9s cubic-bezier(.5,0,.25,1);
  animation:flotaTel 7s ease-in-out infinite}
@keyframes flotaTel{0%,100%{translate:0 0}50%{translate:0 -12px}}
.cara{backface-visibility:hidden;-webkit-backface-visibility:hidden}
.cara.b{position:absolute;inset:0;transform:rotateY(180deg)}




/* EL CANTO DE TINTA · reemplaza a la carcasa.

   No depende de nada detrás: es el mismo idioma de las tarjetas, los
   botones y el pie de cada tienda. Y la sombra dura —0 16px 0— es la
   misma de todo lo demás. */
.tel{position:relative;aspect-ratio:9/18.5;border:3px solid var(--tinta);border-radius:36px;
  overflow:hidden;background:var(--tinta);
  box-shadow:0 16px 0 var(--tinta),0 28px 46px -14px rgb(39 41 37/.42)}
/* La muesca: sin esto es una tarjeta, no un teléfono */
.tel::after{content:"";position:absolute;top:0;left:50%;translate:-50% 0;width:88px;height:20px;
  background:var(--tinta);border-radius:0 0 13px 13px;z-index:9;pointer-events:none}
.pant-in{position:absolute;inset:0;overflow:hidden;padding-top:34px;display:flex;flex-direction:column}

/* LOS PRODUCTOS ENTRAN ESCALONADOS cuando la cara aterriza.
   Una tienda que aparece de golpe es una captura de pantalla. Una que se
   arma delante tuyo es un producto. */
.cara .card{opacity:0}
.cara.viva .card{animation:cae .5s var(--resorte) both}
.cara.viva .card:nth-child(1){animation-delay:.62s}
.cara.viva .card:nth-child(2){animation-delay:.68s}
.cara.viva .card:nth-child(3){animation-delay:.74s}
.cara.viva .card:nth-child(4){animation-delay:.80s}
@keyframes cae{from{opacity:0;translate:0 14px;scale:.94}to{opacity:1;translate:0 0;scale:1}}

.sello-tpl{position:absolute;left:50%;bottom:26px;translate:-50% 0;z-index:12;
  background:#fff;border:2.5px solid var(--tinta);border-radius:999px;padding:8px 16px;
  box-shadow:0 4px 0 var(--tinta);font-weight:900;font-size:12.5px;letter-spacing:-.02em;
  white-space:nowrap;display:flex;align-items:center;gap:7px}
.sello-tpl .k{color:#8A857A;font-weight:800;font-size:9px;letter-spacing:.1em}
.puntos{position:absolute;right:2px;top:50%;translate:0 -50%;z-index:20;display:flex;
  flex-direction:column;gap:8px}
.puntos b{width:8px;height:8px;border-radius:50%;background:var(--tinta);opacity:.2;display:block;
  cursor:pointer;transition:opacity .3s var(--ease),transform .3s var(--resorte)}
.puntos b.on{opacity:1;background:var(--verde);transform:scale(1.45);box-shadow:0 0 0 1.5px var(--tinta)}
@media(max-width:900px){
  .gal{height:min(62vh,480px);order:-1}
  .flip{width:min(212px,58vw)}
  .puntos{right:-4px}
}
@media(prefers-reduced-motion:reduce){
  .flip,.pant-in .card{animation:none!important;transition:none!important}
}

/* ══════════════════════════════════════════════════════════════════════
   EL CSS DE TU VITRINA, SACADO DE globals.css

   214 reglas del archivo de verdad: las 17 plantillas con CSS propio, y
   las de hd-* y bt-* que la primera vez se me escaparon.

   ══ DOS BUGS QUE TENÍA ESTO Y NO SE VEÍAN ══

   1 · LA ESPECIFICIDAD, INVERTIDA

     en globals.css   #vitrinaScope.tpl2 .price   (1,2,0)
                      #vitrinaScope .price        (1,1,0)
                      → gana la plantilla, y la base es el respaldo

     con .pant-in     .pant-in .price             (0,2,0)
     a secas          .pant-in .tpl2 .price       (0,3,0)
                      → parecido, pero el resto de los pares se invertía

     #vitrinaScope pesa como ID y le gana a cualquier cantidad de clases.
     Al cambiarlo por una clase suelta, todo el orden se recalcula.
     Repitiendo .pant-in tres veces recupero el orden relativo, que es lo
     único que importa: una clase nunca le va a ganar a un ID, pero no
     hace falta.

   2 · LOS COMENTARIOS CON COMA

     Tus comentarios tienen comas adentro:
       /* Precio usa --price si está definido,si no --accent */
                                            ↑ acá partía

     Mi extractor partía los selectores por coma, el pedazo suelto quedaba
     como selector, y la regla entera se volvía inválida. El navegador la
     tiraba sin avisar. 39 reglas perdidas — entre ellas la del color del
     precio.

     Ahora los comentarios se sacan ANTES de tocar nada.

   Y va encapsulado porque tu vitrina usa .card y .photo, y la landing
   también. Sin el prefijo se pisan.
   ══════════════════════════════════════════════════════════════════════ */
.pant-in.pant-in.pant-in{flex:1 0 auto}.pant-in .imgico{stroke:rgba(255,255,255,.9);fill:none;stroke-width:1.4}.pant-in .cover{display:none}.pant-in .pad{padding:0 16px}.pant-in .sec{display:flex;align-items:center;justify-content:space-between;margin:20px 4px 12px}.pant-in .sec h2{font-family:var(--ft);font-size:16px;font-weight:800;margin:0}.pant-in .sec .c{font-size:12px;color:var(--muted)}.pant-in .v-head{background:none;margin:34px 16px 0;padding:0;text-align:center}.pant-in .v-av{width:92px;height:92px;border-radius:50%;margin:0 auto 12px;border:0;box-shadow:0 0 0 3px var(--avring,var(--hd)),0 10px 26px rgba(0,0,0,.16);background-size:cover;background-position:center;background-color:var(--avc);display:flex;align-items:center;justify-content:center;color:#fff;font-family:var(--fd);font-size:34px;font-weight:600}.pant-in .v-name{font-family:var(--fd);font-size:24px;font-weight:700;margin:0;color:var(--hd,var(--ink));letter-spacing:-.01em}.pant-in .v-tag{color:var(--hd,var(--ink));opacity:.72;font-size:14px;margin:5px 0 0}.pant-in .chip{width:42px;height:42px;border-radius:50%;background:var(--accent-soft);display:flex;align-items:center;justify-content:center;text-decoration:none}.pant-in .chip svg{width:19px;height:19px}.pant-in .grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:0 16px}.pant-in .card{background:var(--card);border-radius:var(--rad);overflow:hidden;box-shadow:0 4px 16px rgba(42,37,33,.06);display:flex;flex-direction:column}.pant-in .photo{aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center}.pant-in .photo svg{width:32px;height:32px}.pant-in .info{padding:11px 12px 13px;display:flex;flex-direction:column;flex:1}.pant-in .pname{font-size:13.5px;font-weight:500}.pant-in .price{font-family:var(--fd);font-size:17px;font-weight:600;color:var(--accent);margin-top:2px}.pant-in .viralfoot{margin:30px 16px 22px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:16px;border-top:1px solid var(--line);padding-top:26px}.pant-in .viralfoot a{color:var(--accent);font-weight:700;text-decoration:none}.pant-in .photoRow{display:flex;justify-content:center;margin-bottom:18px}.pant-in .photoPick{width:78px;height:78px;border-radius:50%;background:var(--accent-soft);cursor:pointer;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--accent);background-size:cover;background-position:center}.pant-in .photoPick svg{width:22px;height:22px;stroke:var(--accent);fill:none;stroke-width:1.7}.pant-in .photoPick .pt{font-size:9px;font-weight:600}.pant-in .photoPick input{display:none}.pant-in .photoPick .badge{position:absolute;bottom:0;right:0;width:26px;height:26px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);display:flex;align-items:center;justify-content:center}.pant-in .photoPick .badge svg{width:13px;height:13px;stroke:#fff}.pant-in .report{display:block;text-align:center;margin:14px auto 24px;font-size:11.5px;color:var(--muted);text-decoration:underline;cursor:pointer;background:none;border:0;width:100%}.pant-in .social-body{border:1.5px solid var(--line);border-top:0;border-radius:0 0 13px 13px;padding:14px 14px 2px;margin-bottom:14px}.pant-in .pcount{position:absolute;top:8px;right:8px;background:rgba(20,20,20,.6);color:#fff;font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:999px;display:flex;align-items:center;gap:4px}.pant-in .pcount svg{width:12px;height:12px}.pant-in .photo{position:relative}.pant-in .pactions{display:flex;gap:7px;margin-top:auto}.pant-in .pactions .pico{flex:1;display:flex;align-items:center;justify-content:center;padding:8px 0;border-radius:10px;border:1.5px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;text-decoration:none;font:inherit;min-width:0}.pant-in .pactions .pico svg{width:17px;height:17px}.pant-in .pactions .pico.pwa{background:var(--wa);border-color:var(--wa);color:#fff;flex:1.5}.pant-in .pactions .pico.pwa svg{fill:#fff;width:18px;height:18px}.pant-in .pactions .pico:not(.pwa):hover{border-color:var(--ink)}.pant-in .card.phl{outline:2px solid var(--accent);outline-offset:2px}
@.pant-in media(min-width:1000px){.pant-in body.inapp .deskeditor .sec h2{display:none}.pant-in body.inapp .deskeditor .sec{justify-content:flex-end;margin-top:2px}}.pant-in .pactions .pico.pwa{flex:1}.pant-in .pactions .pico:not(.pwa){flex:0 0 36px;width:36px;padding:8px 0}.pant-in .pactions .pico.pdots{border-radius:50%;margin-left:auto}.pant-in .pactions .pico.pdots{border:0;background:transparent;transition:background .12s}.pant-in .pactions .pico.pdots:hover{background:var(--accent-soft)}.pant-in.pant-in.pant-in .sec h2{color:var(--hd,var(--ink))}.pant-in.pant-in.pant-in .sec .c{color:var(--hd,var(--muted));opacity:.62}.pant-in.pant-in.pant-in .viralfoot{border-top:1px solid var(--line);gap:0}.pant-in .vf-cta{font-family:'Mona Sans',sans-serif;font-size:12px;font-weight:500;
  color:var(--ink);text-decoration:none;
  
  opacity:.85;transition:opacity .18s;
  display:inline-flex;align-items:baseline;gap:0;flex-wrap:wrap;
  justify-content:center}.pant-in .vf-cta:hover{opacity:1}.pant-in .vf-mk{font-family:'Montserrat',sans-serif;font-weight:900;font-size:13px;
  letter-spacing:-.02em;display:inline-flex;align-items:baseline;
  margin-left:.32em;color:inherit}.pant-in .vf-mk i{flex:none;box-sizing:content-box;width:.3em;height:.3em;border-radius:50%;
  background:#83CE57;border:1.5px solid currentColor;margin:0 .1em}.pant-in .vf-report{font-size:11px;color:var(--hd);opacity:.85;text-decoration:none;font-family:'Mona Sans',sans-serif;margin-top:14px}.pant-in .vf-report:hover{opacity:1;text-decoration:underline}.pant-in.pant-in.pant-in .report{color:var(--hd);opacity:.5}.pant-in.pant-in.pant-in .empty{color:var(--hd);opacity:.7}.pant-in.pant-in.pant-in .photo{position:relative}.pant-in .pbadge{display:none;position:absolute;top:8px;left:8px;background:var(--accent);color:#fff;font-size:11px;font-weight:800;padding:4px 9px;border-radius:999px;transform:rotate(-6deg);z-index:2;font-family:var(--fb)}.pant-in.pant-in.pant-in.tpl0 .v-av{border-radius:18px;border:3px solid #111;box-shadow:5px 5px 0 #111;color:#111;font-weight:400}.pant-in.pant-in.pant-in.tpl0 .v-name{font-weight:400;text-shadow:3px 3px 0 #111;letter-spacing:.01em}.pant-in.pant-in.pant-in.tpl0 .card{border:3px solid #111;box-shadow:5px 5px 0 #111}.pant-in.pant-in.pant-in.tpl0 .photo{border-bottom:3px solid #111}.pant-in.pant-in.pant-in.tpl0 .price{font-family:var(--fd);font-weight:400}.pant-in.pant-in.pant-in.tpl0 .pactions .pico.pwa{border:2.5px solid #111;box-shadow:3px 3px 0 #111;color:#111;border-radius:9px}.pant-in.pant-in.pant-in.tpl0 .pactions .pico.pwa svg{fill:#111}.pant-in.pant-in.pant-in.tpl0 .chip{border:2px solid #111;box-shadow:3px 3px 0 #111}.pant-in.pant-in.pant-in.tpl1 .v-av{display:none}.pant-in.pant-in.pant-in.tpl1 .v-head::before{content:'CATÁLOGO';display:block;font-family:var(--fb);font-size:10px;letter-spacing:.28em;color:var(--muted);margin-bottom:10px}.pant-in.pant-in.pant-in.tpl1 .v-name{font-size:34px;line-height:1.05;font-weight:600}.pant-in.pant-in.pant-in.tpl1 .v-tag{font-family:var(--fd);font-style:italic;opacity:.66}.pant-in.pant-in.pant-in.tpl1 .grid{display:flex;flex-direction:column;gap:0;counter-reset:prod;border-top:1.5px solid var(--ink);margin-top:6px}.pant-in.pant-in.pant-in.tpl1 .card{display:flex;flex-direction:row;align-items:center;gap:14px;background:none;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:16px 2px;overflow:visible;box-shadow:none}.pant-in.pant-in.pant-in.tpl1 .card::before{counter-increment:prod;content:counter(prod,decimal-leading-zero);font-family:var(--fb);font-size:11px;color:var(--muted);align-self:flex-start;padding-top:3px}.pant-in.pant-in.pant-in.tpl1 .photo{width:64px;height:80px;aspect-ratio:auto;flex:none;border-radius:0}.pant-in.pant-in.pant-in.tpl1 .info{flex:1;padding:0}.pant-in.pant-in.pant-in.tpl1 .pname{font-family:var(--fd);font-size:16.5px;font-weight:600}.pant-in.pant-in.pant-in.tpl1 .price{font-family:var(--fb);font-size:12.5px;color:var(--muted);letter-spacing:.06em;font-weight:500}.pant-in.pant-in.pant-in.tpl1 .pactions{margin-top:8px}.pant-in.pant-in.pant-in.tpl1 .pactions .pico.pwa{background:none;border:1px solid var(--ink);color:var(--ink);border-radius:50%;flex:0 0 38px;width:38px;height:38px;padding:0}.pant-in.pant-in.pant-in.tpl1 .pactions .pico.pwa svg{fill:var(--ink)}.pant-in.pant-in.pant-in.tpl2 .card{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.pant-in.pant-in.pant-in.tpl2 .v-av{border:1px solid rgba(124,255,178,.5);box-shadow:0 0 26px rgba(124,255,178,.35);color:var(--accent)}.pant-in.pant-in.pant-in.tpl2 .v-name{font-size:20px;letter-spacing:.02em}.pant-in.pant-in.pant-in.tpl2 .price{color:var(--accent)}.pant-in.pant-in.pant-in.tpl2 .pactions .pico.pwa{background:rgba(124,255,178,.08);border:1px solid var(--accent);color:var(--accent);box-shadow:0 0 14px rgba(124,255,178,.18)}.pant-in.pant-in.pant-in.tpl2 .pactions .pico.pwa svg{fill:var(--accent)}.pant-in.pant-in.pant-in.tpl3 .v-av{border-radius:46% 54% 52% 48%/48% 46% 54% 52%;box-shadow:none;color:var(--accent)}.pant-in.pant-in.pant-in.tpl3 .grid{display:flex;flex-direction:column;gap:12px}.pant-in.pant-in.pant-in.tpl3 .card{display:flex;flex-direction:row;align-items:center;gap:12px;background:transparent;border:1.5px solid var(--line);border-radius:999px;padding:9px 12px 9px 9px;overflow:visible;position:relative;box-shadow:none}.pant-in.pant-in.pant-in.tpl3 .photo{width:52px;height:52px;aspect-ratio:1;border-radius:50%;flex:none}.pant-in.pant-in.pant-in.tpl3 .info{flex:1;padding:0 118px 0 0}.pant-in.pant-in.pant-in.tpl3 .pname{font-weight:700}.pant-in.pant-in.pant-in.tpl3 .price{font-size:12px;color:var(--muted);font-weight:600}.pant-in.pant-in.pant-in.tpl3 .pactions{position:absolute;right:9px;top:50%;transform:translateY(-50%);margin:0;gap:6px}.pant-in.pant-in.pant-in.tpl3 .pactions .pico.pwa{width:40px;height:40px;flex:0 0 40px;border-radius:50%;padding:0}.pant-in.pant-in.pant-in.tpl3 .pactions .pico:not(.pwa){width:32px;height:32px;flex:0 0 32px;padding:0;border-radius:50%}.pant-in.pant-in.pant-in.tpl3 .pbadge{display:none}.pant-in.pant-in.pant-in.tpl4 .v-head{margin:0;padding:230px 20px 16px;text-align:left;border-radius:0;background:linear-gradient(rgba(8,8,12,.15),rgba(8,8,12,.85) 60%,#08080C 94%),var(--heroimg,var(--cover));background-size:cover;background-position:center top}.pant-in.pant-in.pant-in.tpl4 .v-av{display:none}.pant-in.pant-in.pant-in.tpl4 .v-name{font-size:26px;font-weight:800;letter-spacing:-.02em;text-shadow:0 2px 14px rgba(0,0,0,.4)}.pant-in.pant-in.pant-in.tpl4 .v-tag{opacity:.78}.pant-in.pant-in.pant-in.tpl4 .v-links{justify-content:flex-start;margin-top:10px}.pant-in.pant-in.pant-in.tpl4 .sec{margin-top:14px}.pant-in.pant-in.pant-in.tpl5{background-image:radial-gradient(#F0E4CE 1.3px,transparent 1.3px) !important;background-size:16px 16px !important;background-color:#FFF9EF !important}.pant-in.pant-in.pant-in.tpl5 .v-av{border:3px solid #D98E32;box-shadow:none;color:var(--ink);position:relative;overflow:visible}.pant-in.pant-in.pant-in.tpl5 .v-av::after{content:'¡ABIERTO!';position:absolute;right:-34px;top:-8px;background:var(--accent);color:#fff;font-size:10px;font-weight:800;padding:5px 9px;border-radius:999px;transform:rotate(12deg);font-family:var(--fb);letter-spacing:.04em}.pant-in.pant-in.pant-in.tpl5 .v-name{font-weight:800}.pant-in.pant-in.pant-in.tpl5 .card{border:0;box-shadow:0 4px 0 var(--line)}.pant-in.pant-in.pant-in.tpl5 .pbadge{display:inline-block}.pant-in.pant-in.pant-in.tpl5 .price{display:none}.pant-in.pant-in.pant-in.tpl5 .pactions .pico.pwa{border-radius:999px}.pant-in.pant-in.pant-in.tpl6 .v-av{border-radius:4px;border:6px solid #fff;box-shadow:0 6px 16px rgba(60,50,30,.25);transform:rotate(-3deg);color:#fff}.pant-in.pant-in.pant-in.tpl6 .v-name{font-family:var(--fd);font-size:31px;font-weight:700}.pant-in.pant-in.pant-in.tpl6 .v-tag{font-family:var(--fb)}.pant-in.pant-in.pant-in.tpl6 .grid{gap:20px 14px;padding-top:8px}.pant-in.pant-in.pant-in.tpl6 .card{position:relative;background:#fff;border:0;border-radius:4px;box-shadow:0 6px 16px rgba(60,50,30,.18);padding:8px 8px 0;overflow:visible;transform:rotate(-2deg)}.pant-in.pant-in.pant-in.tpl6 .card:nth-child(2n){transform:rotate(2deg)}.pant-in.pant-in.pant-in.tpl6 .card::before{content:'';position:absolute;top:-9px;left:50%;transform:translateX(-50%) rotate(-4deg);width:56px;height:18px;background:rgba(228,213,172,.9);box-shadow:0 1px 2px rgba(0,0,0,.1);z-index:3}.pant-in.pant-in.pant-in.tpl6 .photo{border-radius:2px}.pant-in.pant-in.pant-in.tpl6 .info{padding:9px 4px 12px}.pant-in.pant-in.pant-in.tpl6 .pname{font-family:var(--fd);font-size:17.5px;font-weight:700;line-height:1}.pant-in.pant-in.pant-in.tpl6 .price{font-family:var(--fd);font-size:15.5px;color:var(--accent);font-weight:600}.pant-in.pant-in.pant-in.tpl6 .pbadge{display:none}.pant-in.pant-in.pant-in.tpl7 .v-av{border:2px solid var(--line);box-shadow:none;background-color:transparent;color:var(--ink)}.pant-in.pant-in.pant-in.tpl7 .v-name{font-size:30px;font-weight:400;letter-spacing:.01em}.pant-in.pant-in.pant-in.tpl7 .card{background:transparent;border:2px solid var(--line);box-shadow:none;overflow:hidden}.pant-in.pant-in.pant-in.tpl7 .photo{border-bottom:2px solid var(--line);opacity:.94}.pant-in.pant-in.pant-in.tpl7 .pname{font-size:16px;color:#F3F7F2}.pant-in.pant-in.pant-in.tpl7 .price{display:inline-block;border:2px solid var(--line);border-radius:999px;padding:0 10px 1px;transform:rotate(-2deg);font-size:14px;margin-top:2px;align-self:flex-start}.pant-in.pant-in.pant-in.tpl7 .pactions .pico.pwa{background:transparent;border:2px solid #7CD6A0;color:#BFEBD2;box-shadow:none}.pant-in.pant-in.pant-in.tpl7 .pactions .pico.pwa svg{fill:#BFEBD2}.pant-in.pant-in.pant-in.tpl7 .pactions .pico:not(.pwa){border:0;color:var(--ink)}.pant-in.pant-in.pant-in.tpl7 .chip{border:2px solid var(--line);background:transparent}.pant-in.pant-in.pant-in.tpl7 .pbadge{display:none}.pant-in.pant-in.pant-in.tpl8 .card{border:1px solid var(--line);box-shadow:none}.pant-in.pant-in.pant-in.tpl8 .v-av{box-shadow:0 0 0 2px var(--ink),0 8px 20px rgba(0,0,0,.1)}.pant-in.pant-in.pant-in.tpl9 .card{border:1px solid var(--line);box-shadow:none}.pant-in.pant-in.pant-in.tpl9 .v-av{color:#111;box-shadow:0 0 0 2px #F5F5F7,0 8px 22px rgba(0,0,0,.4)}.pant-in .pname{overflow-wrap:anywhere;word-break:break-word;line-height:1.25}.pant-in .price{overflow-wrap:anywhere;word-break:break-word}.pant-in.pant-in.pant-in .info{min-width:0}.pant-in.pant-in.pant-in .card{min-width:0}.pant-in .pbadge{max-width:calc(100% - 16px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pant-in .pactions .pico.pwa{gap:7px;flex:1.6;font-weight:700;font-size:13.5px}.pant-in .pwa-t{font-family:'Mona Sans',sans-serif}.pant-in .pactions .pico:not(.pwa){flex:0 0 42px}.pant-in .photoDel{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;background:#F1F1F2;border:0;color:#6B6B6B;border-radius:50%;padding:0;cursor:pointer;transition:background .14s,color .14s}.pant-in .photoDel:hover{background:#E7E7E9;color:#D6604A}.pant-in .photoDel svg{width:17px;height:17px}.pant-in.pant-in.pant-in.bt-solid .pactions .pico.pwa{background:var(--btnc,var(--wa))!important;border:0!important;color:#fff!important}.pant-in.pant-in.pant-in.bt-solid .pactions .pico.pwa svg{fill:#fff!important}.pant-in.pant-in.pant-in.bt-glass .pactions .pico.pwa{background:rgba(255,255,255,.22)!important;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.55)!important;color:var(--ink)!important}.pant-in.pant-in.pant-in.bt-glass .pactions .pico.pwa svg{fill:var(--ink)!important}.pant-in.pant-in.pant-in.bt-outline .pactions .pico.pwa{background:transparent!important;border:1.6px solid var(--btnc,var(--ink))!important;color:var(--btnc,var(--ink))!important}.pant-in.pant-in.pant-in.bt-outline .pactions .pico.pwa svg{fill:var(--btnc,var(--ink))!important}.pant-in.pant-in.pant-in.hd-hero .v-head{position:relative;padding-top:120px}.pant-in.pant-in.pant-in.hd-hero .v-av{width:100%;height:180px;border-radius:16px;position:absolute;top:0;left:0;background-size:cover;background-position:center}.pant-in.pant-in.pant-in.hd-shape .cover{display:none}.pant-in.pant-in.pant-in.hd-shape .v-head{position:relative;padding-top:24px}.pant-in.pant-in.pant-in.hd-shape .v-av{position:relative;z-index:2}.pant-in.pant-in.pant-in.hd-shape .v-av::before{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:150px;height:150px;background:var(--avc,var(--accent));border-radius:42% 58% 63% 37%/45% 45% 55% 55%;z-index:-1;opacity:.9}.pant-in.pant-in.pant-in{background:var(--bg)}.pant-in.pant-in.pant-in .price{color:var(--price,var(--accent))}.pant-in.pant-in.pant-in .pactions .pico.pwa{background:var(--btnc,var(--wa));border-color:var(--btnc,var(--wa))}.pant-in.pant-in.pant-in .pactions .pico.pdots{color:var(--dots,#9a9a9a)}.pant-in.pant-in.pant-in.bt-rad .pactions .pico.pwa{border-radius:var(--btnrad)}.pant-in.pant-in.pant-in .pname{color:var(--ink)}.pant-in.pant-in.pant-in .v-name{color:var(--hd,var(--ink))}.pant-in.pant-in.pant-in .v-tag{color:var(--tag,var(--muted))}.pant-in.pant-in.pant-in.av-off .v-av{display:none!important}.pant-in.pant-in.pant-in.av-on.tpl1 .v-av{display:flex!important}.pant-in .photo-clk{cursor:pointer}.pant-in.pant-in.pant-in.tpl14 .v-name{letter-spacing:-.01em;font-size:22px}.pant-in.pant-in.pant-in.tpl14 .v-av{box-shadow:0 0 0 3px #FF3DB8,0 0 30px rgba(255,61,184,.4)}.pant-in.pant-in.pant-in.tpl14 .price{color:#FF3DB8}.pant-in.pant-in.pant-in.tpl14 .card{border:1px solid rgba(255,255,255,.12)}.pant-in.pant-in.pant-in.tpl14 .pactions .pico.pwa{background:#FF3DB8;border-color:#FF3DB8;color:#fff}.pant-in.pant-in.pant-in.tpl14 .pactions .pico.pwa svg{fill:#fff}.pant-in.pant-in.pant-in.tpl15 .v-name{font-family:var(--fd);font-size:27px;font-weight:800;color:#C6E84A;letter-spacing:-.01em}.pant-in.pant-in.pant-in.tpl15 .v-av{box-shadow:0 0 0 3px #C6E84A,0 8px 22px rgba(0,0,0,.25)}.pant-in.pant-in.pant-in.tpl15 .card{border-radius:20px}.pant-in.pant-in.pant-in.tpl15 .price{color:#C6E84A}.pant-in.pant-in.pant-in.tpl15 .pactions .pico.pwa{background:#C6E84A;border-color:#C6E84A;color:#3D471B}.pant-in.pant-in.pant-in.tpl15 .pactions .pico.pwa svg{fill:#3D471B}.pant-in.pant-in.pant-in.tpl16 .v-name{font-family:var(--fd);font-size:26px;font-weight:800;color:#FFC9A8;text-shadow:0 0 18px rgba(255,150,110,.55);letter-spacing:-.02em}.pant-in.pant-in.pant-in.tpl16 .v-av{box-shadow:0 0 0 3px #FFB38A,0 0 26px rgba(255,140,100,.4)}.pant-in.pant-in.pant-in.tpl16 .price{color:#FFB38A}.pant-in.pant-in.pant-in.tpl16 .card{border:1px solid rgba(255,179,138,.18)}.pant-in.pant-in.pant-in.tpl16 .pactions .pico.pwa{background:#FFB38A;border-color:#FFB38A;color:#7A0D0D}.pant-in.pant-in.pant-in.tpl16 .pactions .pico.pwa svg{fill:#7A0D0D}.pant-in.pant-in.pant-in.tpl17 .v-name{font-family:var(--fd);font-size:28px;font-weight:500;color:#2E1C2E;letter-spacing:-.01em}.pant-in.pant-in.pant-in.tpl17 .card{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.6);box-shadow:0 8px 26px rgba(140,90,150,.14)}.pant-in.pant-in.pant-in.tpl17 .v-av{box-shadow:0 0 0 3px rgba(255,255,255,.7),0 10px 26px rgba(140,90,150,.2)}.pant-in.pant-in.pant-in.tpl17 .price{color:#8A3D9E}.pant-in.pant-in.pant-in.tpl17 .pactions .pico.pwa{background:rgba(255,255,255,.5);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.7);color:#3A2438}.pant-in.pant-in.pant-in.tpl17 .pactions .pico.pwa svg{fill:#3A2438}.pant-in.pant-in.pant-in.tpl18 .v-name{font-family:var(--fd);font-size:28px;font-weight:500;color:#141414;letter-spacing:-.01em}.pant-in.pant-in.pant-in.tpl18 .v-av{box-shadow:0 0 0 2px #E8EAE8,0 8px 22px rgba(0,0,0,.18)}.pant-in.pant-in.pant-in.tpl18 .card{border:1px solid var(--line);box-shadow:0 4px 14px rgba(0,0,0,.06)}.pant-in.pant-in.pant-in.tpl18 .price{color:#1E1E1E;font-weight:600}.pant-in.pant-in.pant-in.tpl18 .pactions .pico.pwa{background:#1E1E1E;border-color:#1E1E1E;color:#fff}.pant-in.pant-in.pant-in.tpl18 .pactions .pico.pwa svg{fill:#fff}
@.pant-in media(max-width:999px){.pant-in body.inapp .pad>.sec>h2{display:none}.pant-in body.inapp .pad>.sec{justify-content:flex-end}}.pant-in.pant-in.pant-in.tpl13{background-image:linear-gradient(#DCE6F2 1px,transparent 1px),linear-gradient(90deg,#DCE6F2 1px,transparent 1px) !important;background-size:22px 22px !important}.pant-in.pant-in.pant-in.tpl13 .v-name{font-family:var(--fd);font-size:30px;font-weight:400}.pant-in.pant-in.pant-in.tpl13 .v-av{border:2px solid var(--line);box-shadow:3px 3px 0 var(--line);color:var(--ink)}.pant-in.pant-in.pant-in.tpl13 .card{border:1.5px solid var(--line);box-shadow:3px 3px 0 var(--line)}.pant-in.pant-in.pant-in.tpl13 .pname{font-family:var(--fd);font-size:15px}.pant-in.pant-in.pant-in.tpl13 .sec h2{font-family:var(--fd)}.pant-in.pant-in.pant-in.tpl12 .vf-report{opacity:1}

/* ── 1 · CREA Y PERSONALIZA · lila-noche + lila ──
   La segunda zona oscura de la página, y se la gana: es la única sección
   cuyo contenido ES el color, así que le toca el fondo que más lo deja
   hablar. El footer (tinta) sigue siendo el negro puro y sigue queriendo
   decir "acá se terminó" — este es lila profundo, no negro, y por eso esa
   señal no se diluye. */
/* La sección ahora es un rojo sólido (#c74444). Las manchas y puntos eran
   del acento lila viejo: sobre el rojo desentonan —o dejan un punto negro
   suelto—, así que se ocultan y el bloque queda limpio y plano. */
.s-estilos .blob,.s-estilos .dot{display:none}
/* La frase va en blanco puro para separarse del texto en rosa del resto. */
.s-estilos .statement p{color:#fff}
/* El título en rosa claro, sobre el rojo. */
.s-estilos .statement h2{color:#ffdcdc}
/* El botón: fondo rosa claro (#ffdcdc) y letra negra. Con el canto y la
   sombra negros del .btn se recorta nítido sobre el rojo. */
.s-estilos .btn-pop{background:#ffdcdc;color:#000}
/* Comparte y Vitrinas: el botón toma el color de su título, con letra blanca. */
.s-comparte .btn-pop{background:#CCE31A;color:#000}
.s-vit .btn-pop{background:#004484;color:#fff}

/* ── EL MUESTRARIO ──
   Ya no son siete chips fijos: son siete vitrinas que CAMBIAN de estilo
   solas. Hay 20 pares reales de la paleta y cada muestra va sacando de
   ahí, así que se ven los veinte sin carrusel. Eso dice "20 estilos"
   mostrándolos en vez de escribirlo — y dice lo otro que promete el
   párrafo, "deja que Abretienda adapte el diseño", porque el diseño se
   adapta solo delante tuyo.

   Los colores van por variable y los interpola el CSS: el JS solo escribe
   --a y --b. Un repintado por cambio, no uno por cuadro. */
.swatches{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:44px}
.sw{--a:var(--coral);--b:var(--amarillo);
  width:82px;height:104px;border-radius:14px;overflow:hidden;position:relative;
  display:flex;flex-direction:column;cursor:pointer;background:var(--a);
  border:2.5px solid var(--tinta);box-shadow:0 8px 0 var(--tinta);
  transition:background 1.1s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease);
  animation:respira var(--t) ease-in-out infinite;animation-delay:var(--ad)}
@keyframes respira{0%,100%{translate:0 0}50%{translate:0 -9px}}
/* El mini perfil adentro: sin esto son cuadraditos de color y no se leen
   como vitrinas. Con el avatar y las dos rayas, sí. */
.sw .av{width:22px;height:22px;border-radius:50%;background:var(--b);margin:11px auto 7px;
  transition:background 1.1s var(--ease)}
.sw .ln{padding:0 13px}
.sw .ln i{display:block;height:3px;border-radius:2px;background:var(--b);margin-bottom:4px;
  opacity:.85;transition:background 1.1s var(--ease)}
.sw .ln i:first-child{width:100%} .sw .ln i:nth-child(2){width:62%;margin-left:19%}
.sw u{margin-top:auto;height:22px;background:var(--b);transition:background 1.1s var(--ease)}
/* Al pasar el mouse se para de mutar y crece: si querés mirar una, tiene
   que dejarse mirar. */
.sw:hover{transform:scale(1.14) translateY(-6px);box-shadow:0 16px 0 var(--tinta);
  animation-play-state:paused;z-index:5}
@media(max-width:820px){.sw{width:64px;height:82px}.swatches{gap:9px}}
@media(max-width:400px){.sw{width:56px;height:72px}.swatches{gap:7px}}

/* ── 2 · COMPARTE · azul + amarillo ──
   La única sección con color de fondo entre sus dos vecinas de papel, y
   se sostiene: su contenido son tarjetas de color plano, no color suelto.
   El marco puede hablar porque el contenido son objetos.

   El QR se fue de acá: era un objeto quieto explicando algo que se mueve.
   Ahora hay seis tarjetas —las cinco plataformas y la vitrina— y el QR
   quedó como una de ellas, que es su tamaño real. */
.band.s-comparte{min-height:88vh;display:flex;align-items:center;padding:70px 0}
.s-comparte .blob-a{width:340px;height:310px;left:-130px;bottom:-90px;opacity:.4}
.s-comparte .blob-b{width:190px;height:180px;right:-70px;top:-60px;opacity:.32}

.esc{position:relative;height:min(58vh,440px);perspective:1500px}
/* Se inclina el MAZO, no cada tarjeta: como están a distinta profundidad,
   la perspectiva del contenedor le da a cada una su parallax gratis.
   Inclinar tarjeta por tarjeta daría un tilt plano y falso. */
.mazo{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .7s var(--ease)}
.tj{position:absolute;left:50%;top:50%;width:min(23vw,230px);aspect-ratio:1/.92;
  border:2.5px solid var(--tinta);border-radius:22px;padding:14px;
  box-shadow:0 10px 0 var(--tinta);will-change:transform;
  transition:transform .9s var(--ease),opacity .9s var(--ease),box-shadow .3s var(--ease)}
.tj .av{width:38px;height:38px;border-radius:50%;background:var(--tinta);overflow:hidden;border:2px solid var(--tinta)}
.tj .av img{width:100%;height:100%;object-fit:cover}
/* El nombre al centro. inset:0 con place-items:center lo centra en la
   tarjeta entera, no en el hueco que queda: el avatar y el logo están
   absolutos, así que no le compiten por el espacio. */
.tj .nom{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none;
  font-size:clamp(15px,1.6vw,21px);font-weight:900;letter-spacing:-.035em;color:var(--tinta)}
.tj .ico{position:absolute;top:13px;right:13px;width:34px;height:34px;border-radius:9px;
  background:var(--tinta);display:grid;place-items:center}
.tj .ico svg{width:19px;height:19px;fill:#fff}

/* El mazo en reposo, y la que sale volando */
.tj[data-z="0"]{transform:translate(-50%,-50%) translate3d(0,0,0) rotate(-2deg);z-index:6}
.tj[data-z="1"]{transform:translate(-50%,-50%) translate3d(26px,-16px,-50px) rotate(1.5deg);z-index:5}
.tj[data-z="2"]{transform:translate(-50%,-50%) translate3d(52px,-32px,-100px) rotate(5deg);z-index:4}
.tj[data-z="3"]{transform:translate(-50%,-50%) translate3d(78px,-48px,-150px) rotate(8.5deg);z-index:3}
.tj[data-z="4"]{transform:translate(-50%,-50%) translate3d(104px,-64px,-200px) rotate(12deg);z-index:2}
.tj[data-z="5"]{transform:translate(-50%,-50%) translate3d(130px,-80px,-250px) rotate(15.5deg);opacity:.55;z-index:1}
/* Cada una se va para su lado. --fuga lo escribe el JS por tarjeta: antes
   las seis salían a la izquierda y el mazo parecía tener una fuga de agua.
   Con seis salidas distintas se lee como que se reparten. */
.tj.vuela{transform:translate(-50%,-50%) var(--fuga);opacity:0;z-index:9}

/* ── EL ABANICO MAGNÉTICO ──
   --arc lo escribe el JS: la posición de cada una en el arco. Con .abre
   puesto le gana a la del mazo, en un solo selector para las seis. */
.esc.abre .tj{transform:translate(-50%,-50%) var(--arc)!important;opacity:1!important;
  transition:transform .75s var(--ease),opacity .4s;cursor:pointer}
.esc.abre .tj:hover{transform:translate(-50%,-50%) var(--arc) translateZ(90px) scale(1.06)!important;
  box-shadow:0 22px 0 var(--tinta);z-index:20}

/* La pastilla migra a la tarjeta que mirás. Ese es el truco: la sección
   promete "un link en todas partes" y el hover te deja comprobarlo — el
   MISMO link saltando de Instagram a WhatsApp a tu vitrina. */
/* Se centra con translate y no con un margen negativo calculado a mano:
   el margen suponía 200px de ancho, y el ancho cambia con el texto. */
.pastilla{position:absolute;left:50%;top:50%;z-index:25;pointer-events:none;
  background:#fff;border:2.5px solid var(--tinta);border-radius:999px;
  padding:11px 20px 11px 12px;display:flex;align-items:center;gap:9px;
  box-shadow:0 5px 0 var(--tinta);font-size:14px;font-weight:900;letter-spacing:-.02em;white-space:nowrap;
  transition:translate .55s var(--ease)}
/* El punto va EN el lugar del punto del dominio —abre●tienda/camila— y no
   suelto al costado. Antes había dos: el mío de adorno y el real. */
.pastilla .m{width:.3em;height:.3em;border-radius:50%;background:var(--verde);
  border:1.5px solid var(--tinta);flex:none;box-sizing:content-box;margin:0 .1em;
  align-self:baseline}
.pastilla{align-items:baseline;gap:0}

@media(max-width:900px){
  .band.s-comparte{min-height:auto;padding:60px 0}
  .esc{height:min(46vh,340px)}
  .tj{width:min(44vw,190px)}
}

/* ── ANALÍTICA · verde + crema ── */
.s-ana .blob-b{width:360px;height:330px;right:-130px;top:-90px;opacity:.22}
/* Más chico: la fila mínima baja de 180 a 148 y el margen de arriba de 56
   a 40. Tenía altura de dashboard y muestra cuatro números. */
/* EL BENTO · DOS FILAS, no una L.

   Estaba armado para CUATRO tarjetas: .b2 tenía grid-row:span 2 y .b3
   estaba declarada dos veces, una en la columna 3 y otra en la 1. Restos
   de la versión vieja.

   Con tres tarjetas eso dejaba el 86 estirado a la derecha ocupando dos
   filas, y "7 de cada 100" caído abajo a la izquierda, solo. Una L.

   Ahora:
     fila 1   las visitas, con las barras, a lo ancho
     fila 2   los pedidos  |  la proporción

   Y ese orden es el que cuenta la historia: entraron → te escribieron →
   de cada cien. Lo grande arriba porque es la pregunta que trae Camila. */
.bento{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:40px}
/* La grande cruza las dos columnas: las barras necesitan ancho o siete
   días entran apretados. */
.b1{grid-column:1 / -1;min-height:250px}
/* La de pedidos, invertida: fondo claro sobre la sección verde. Un pedido
   vale más que una visita y el color lo dice sin escribirlo. */
.b2{background:var(--bg)}
.bx{border:2.5px solid var(--tinta);border-radius:24px;padding:26px;background:var(--pop);
  display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;
  box-shadow:0 8px 0 var(--tinta);transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.bx:hover{transform:translateY(-6px);box-shadow:0 14px 0 var(--tinta)}
.bx .v{font-size:clamp(34px, 2.24vw + 25.6px, 52px);font-weight:900;letter-spacing:-.04em;line-height:1;
  color:var(--tinta)}
.bx .l{font-size:15.5px;font-weight:800;margin-top:7px;color:var(--tinta)}
/* El bento, con TRES tarjetas. Antes eran cuatro: la grande, los
   pedidos, "sin cookies" y "2 min". Las dos últimas no eran números —una
   era una política y la otra una promesa— y por eso la sección no
   cerraba: el ojo buscaba cuatro datos y encontraba dos.

   Ahora los tres SON datos: views, orders, y la división entre los dos. */

/* ══ LAS BARRAS ══
   Son LAS MISMAS que Camila ve en su pestaña Visitas: mismo hueco, mismo
   radio, el mismo día de hoy destacado. La landing le muestra lo que va a
   recibir, no una versión bonita.

   Y ahora son ciertas: cuando decidimos esta sección, views era un
   contador sin fechas y cualquier gráfico era un dibujo inventado. Por
   eso saqué el de línea. Después construimos stats_diarias — ahora la app
   guarda día por día. */
.barras{display:flex;align-items:flex-end;gap:8px;height:96px;margin:20px 0 0}
.barras i{flex:1;background:var(--tinta);border-radius:6px 6px 2px 2px;
  transform-origin:bottom;display:block;min-height:4px;
  /* min-height:4px para que un día en cero sea una rayita y no la nada.
     Sin esto, una semana con tres días vacíos parece de cuatro días. */
  height:var(--h);transform:scaleY(0)}
/* La barra de hoy: relleno claro CON canto de tinta.

   En el panel es verde sobre blanco y se ve sola. Acá la tarjeta ya es
   verde, así que el truco no se puede repetir: medí toda tu paleta sobre
   el #83CE57 y lo único que pasa el mínimo de 3.0 es la tinta —que ya
   usan las otras barras— y el verde oscuro del titular. El relleno claro
   solo da 1.85: invisible.

   Con el canto se define. Es el mismo recurso del punto del logo: el
   anillo hace el trabajo que el color no puede. */
.barras i.hoy{background:var(--bg);box-shadow:inset 0 0 0 2.5px var(--tinta)}
/* Las barras suben cuando la tarjeta entra en pantalla, no al cargar.
   Si subieran al cargar, para cuando Camila llegue scrolleando ya
   terminaron y no vio nada. */
.reveal-c.in .barras i{animation:barsube .55s cubic-bezier(.22,1,.36,1) var(--d) both}
@keyframes barsube{from{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}
.dias{display:flex;gap:8px;margin-top:9px}
.dias span{flex:1;text-align:center;font-size:12px;font-weight:800;color:var(--tinta);opacity:.5}
.dias span.hoy{opacity:1}
@media(prefers-reduced-motion:reduce){
  .barras i{transform:none!important;animation:none!important}
}
.b1 .v{font-size:clamp(44px, 3.73vw + 30.0px, 74px)}
/* La celda invertida rompe el ritmo: el dato importante viste el fondo */
.b2 .v{font-size:clamp(42px, 4.72vw + 24.3px, 80px)}
.b2 .ring{position:absolute;top:30px;right:30px;width:48px;height:48px;border-radius:50%;
  border:4px solid rgb(39 41 37/.25);border-top-color:var(--tinta);animation:spin 2.6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:820px){
  .bento{grid-template-columns:repeat(2,1fr);gap:12px;margin-top:34px;grid-auto-rows:minmax(140px,auto)}
  .bx{padding:22px;border-radius:22px}
  .bx .l{font-size:14px}
  .b1{grid-column:span 2;min-height:210px}
  .b2{grid-column:1;grid-row:auto;min-height:150px;justify-content:space-between}
  .b3{grid-column:2}  .b2 .ring{width:34px;height:34px;top:20px;right:20px;border-width:3px}
  .statement p,.ana-head p{font-size:17px}
}

/* ── PREGUNTAS · arena + verde ── (propuesta C · índice lateral)
   Sección de papel: 80px de alto en vez de 104, titular a 40px en vez
   de 78, pregunta a 17px en vez de 22. El título y el CTA se quedan
   pegados a la izquierda mientras el acordeón corre a la derecha: el
   botón nunca se va de pantalla. El verde solo destaca la pregunta
   abierta, como marcador sobre papel. */
.band.s-faq{padding:80px 0}
.s-faq .blob-a{width:300px;height:280px;left:-150px;top:12%;opacity:.42}
.faq-grid{display:grid;grid-template-columns:.7fr 1fr;gap:60px;align-items:start}
.faq-side{position:sticky;top:96px}
.s-faq h2{margin:16px 0 12px}
/* La pastilla del FAQ toma el --dark de su sección (azul noche, 7.63:1
   sobre el verde). Si algún día el FAQ cambia de titular, revisar acá. */
.faq-side .pill{color:var(--dark)}
.faq-sub{font-size:15px;font-weight:600;opacity:.62;margin-bottom:24px;max-width:32ch}
.faq{border-top:1.5px solid rgb(39 41 37/.16)}
/* El enlace al centro de ayuda, al pie de las 6 preguntas: para quien quiere
   más detalle sin cargar la landing con 16. */
.faq-more{display:inline-block;margin-top:22px;font-size:15px;font-weight:800;
  letter-spacing:-.01em;color:var(--dark);text-decoration:none;
  border-bottom:2px solid var(--pop);padding-bottom:2px;
  transition:opacity .2s var(--ease)}
.faq-more:hover{opacity:.7}
.qitem{border-bottom:1.5px solid rgb(39 41 37/.16)}
.qhead{display:flex;gap:20px;align-items:flex-start;padding:18px 0;cursor:pointer;
  font-size:17px;font-weight:800;letter-spacing:-.01em;line-height:1.35;color:var(--tinta)}
.qhead .qt{flex:1}
/* El marcador: la franja verde se pinta de izquierda a derecha */
.qhead .qt span{background:linear-gradient(var(--pop),var(--pop)) no-repeat left center/0% 82%;
  box-decoration-break:clone;-webkit-box-decoration-break:clone;padding:1px 3px;margin:0 -3px;
  transition:background-size .42s var(--ease)}
.qitem.open .qhead .qt span{background-size:100% 82%}
/* Signo +/− en tinta: es un control, tiene que leerse (12.7:1) */
.pm{position:relative;flex:none;width:15px;height:15px;margin-top:5px}
.pm::before,.pm::after{content:"";position:absolute;background:var(--tinta);border-radius:2px;
  transition:transform .34s var(--ease),opacity .34s var(--ease)}
.pm::before{left:0;top:6.5px;width:15px;height:2.5px}
.pm::after{left:6.25px;top:0;width:2.5px;height:15px}
.qitem.open .pm::after{transform:rotate(90deg);opacity:0}
.qbody{max-height:0;overflow:hidden;transition:max-height .38s var(--ease),padding .38s var(--ease)}
.qitem.open .qbody{max-height:280px;padding-bottom:20px}
.qbody p{font-size:15px;line-height:1.62;font-weight:500;opacity:.82;max-width:56ch}
@media(max-width:820px){
  .band.s-faq{padding:56px 0}
  .faq-grid{grid-template-columns:1fr;gap:28px}
  .faq-side{position:static}
  .qhead{font-size:16px}
}

/* ── 5 · VITRINAS · coral + lila ──
   La sección que faltaba desde el principio: negocios de verdad. Es lo que
   más convierte en este producto y estuvo pendiente toda la conversación.

   La pared es coral y los cuadros van ENMARCADOS: cada vitrina lleva su
   canto de tinta y su sombra dura, así que la foto nunca toca el coral.
   Sin el marco sería barro — dos cosas de color peleando. Con marco es una
   galería. Coral y tierra quedaron fuera como estilo de tarjeta: a dE 24 y
   0 de la pared, esas vitrinas desaparecerían. */
.s-vit{padding:clamp(70px,9vw,110px) 0 clamp(80px,10vw,130px)}
.s-vit .blob-a{width:360px;height:330px;left:-130px;top:-90px;opacity:.22}
.s-vit .blob-b{width:220px;height:200px;right:-80px;bottom:-70px;opacity:.18}
.vit-cab{max-width:660px;margin:0 auto clamp(44px,5vw,66px);text-align:center}
.vit-cab h2{max-width:15ch;margin:0 auto}
/* 19px y no 17: es el mismo tamaño que .ana-head p y .sec-grid p.
   Vitrinas era el único a 17 — no había motivo, quedó de otro día. Un
   párrafo más chico que sus hermanos se lee como menos importante, y esta
   sección es la que más convierte. */
.vit-cab p{margin:20px auto 0;max-width:46ch;font-size:19px;line-height:1.55;font-weight:600;opacity:.85}
/* Las dos cintas corren en sentidos opuestos: el contramovimiento es lo que
   las lee como plano inclinado y no como carrusel. */
.plano{perspective:1500px;overflow:hidden;margin:0 -7vw;position:relative;z-index:2;
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.plano-in{transform:rotateX(15deg) rotateZ(-3.5deg);transform-style:preserve-3d}
.cinta{display:flex;gap:20px;width:max-content;margin-bottom:20px}
/* Cada tarjeta de la cinta es un marco fijo con una vitrina REAL adentro
   (.pant-in, tu plantilla). El marco recorta la parte de arriba, como una
   captura del teléfono. Sello de marca: canto de tinta y sombra dura. */
.viti-real{width:236px;height:372px;flex:none;position:relative;overflow:hidden;
  background:#fff;border:2.5px solid var(--tinta);border-radius:26px;
  box-shadow:0 6px 0 var(--tinta)}
.viti-real .pant-in{padding-top:6px}
.cinta.izq{animation:corre 48s linear infinite}
.cinta.der{animation:corre 56s linear infinite reverse}
/* Sin pausa al hover: la galería no se toca. Frenarla obligaba a que el
   que pasa el mouse por ahí de casualidad rompiera el movimiento sin
   quererlo — y no hay nada que mirar de cerca, es una cinta. */
@keyframes corre{to{transform:translateX(-50%)}}
/* La vitrina no es una foto con etiqueta: es la app, en uno de los 20
   estilos. --a es el fondo del estilo y --b su acento — los mismos pares
   que mutan en la sección Crea. Las dos secciones se dan la mano: allá ves
   los estilos, acá los ves puestos en negocios. */
.viti{width:206px;flex:none;border:2.5px solid var(--tinta);border-radius:20px;overflow:hidden;
  background:var(--a);box-shadow:0 10px 0 var(--tinta);
  transition:transform .4s var(--ease),box-shadow .4s var(--ease)}
.viti:hover{transform:translateZ(50px) translateY(-6px);box-shadow:0 18px 0 var(--tinta)}
.viti .foto{height:150px;border-bottom:2.5px solid var(--tinta);position:relative}
.viti .foto img{width:100%;height:100%;object-fit:cover;display:block}
.viti .cuerpo{padding:12px 13px 14px}
.viti b{display:block;font-size:13px;font-weight:900;letter-spacing:-.03em;line-height:1.1;color:var(--t)}
.viti span{display:block;font-size:9px;font-weight:700;margin-top:3px;color:var(--t);opacity:.62}
.viti .pedir{margin-top:11px;background:var(--b);color:var(--tb);border:2px solid var(--tinta);
  border-radius:999px;padding:7px;text-align:center;font-size:8.5px;font-weight:900;letter-spacing:.08em}
/* El sello dice cuál de los 20 estás viendo. Sin esto son diez negocios
   lindos; con esto, diez estilos aplicados. */
/* EL SELLO DE VITRINAS.

   Había DOS .sello en este archivo: este y el del teléfono del hero. El
   del hero decía left:50%; translate:-50% 0 — y ese translate no lo
   pisaba nadie, porque acá nunca lo declaré.

   Resultado: el sello arrancaba en left:9px y después se corría la mitad
   de su propio ancho a la izquierda. "Bloque" mide ~46px → se corría 23px
   → arrancaba en −14px → se salía de la foto → el overflow lo recortaba y
   quedaba "loque".

   Por eso parecían las plantillas viejas: los nombres no se leían. Los
   colores estaban bien desde el principio.

   El arreglo no fue poner translate:none. Fue renombrar el del hero a
   .sello-tpl: le metía SIETE propiedades más —display:flex, gap,
   box-shadow, z-index, white-space— que también se colaban. Dos objetos
   distintos con el mismo nombre es el problema; el translate era el
   síntoma. */
.viti .sello{position:absolute;top:9px;left:9px;background:var(--b);color:var(--tb);
  border:2px solid var(--tinta);border-radius:999px;padding:4px 9px;font-size:7.5px;
  font-weight:900;letter-spacing:.08em}
@media(max-width:820px){
  .viti{width:150px}.viti .foto{height:104px}
  .viti-real{width:196px;height:312px;border-radius:22px}
  .plano{margin:0 -16vw}.vit-cab p{font-size:15.5px}
}

/* ── 7 · FOOTER · tinta + amarillo ──
   El amarillo no es decoración: sobre tinta da 10.70, el par de más
   contraste de toda la paleta. Y este es el único lugar de la página donde
   "lo más fuerte posible" es exactamente lo que hace falta — es la última
   pregunta que le hacés al que llegó hasta abajo.

   Antes era lila, y el lila no lo elegimos: fue el que sobró cuando armamos
   el par. Era el color más suave de la paleta en el momento más fuerte.

   Y cierra el marco: la página abre en amarillo con letra oscura y cierra
   en oscuro con letra amarilla. Mismo par, dado vuelta, en los dos extremos.

   Se fueron "Empecemos" —una palabra de relleno con tamaño de titular— y
   el garabato, que venía de v2 y nunca dijo nada. El lema ocupa el lugar. */
.foot{background:var(--bg);color:var(--fg);padding:clamp(70px,9vw,104px) 0 30px;
  position:relative;overflow:hidden;overflow:clip}
.foot .blob-b{width:380px;height:350px;right:-120px;top:-110px;opacity:.22}
.foot-top{display:flex;justify-content:space-between;flex-wrap:wrap;gap:44px;margin-bottom:52px}
.foot-say{flex:1;min-width:300px}
.foot-h{color:var(--pop);font-size:clamp(30px,2.98vw + 18.8px,54px);line-height:1.06}
.foot-h .beat{display:block}
.foot-sub{font-size:17px;font-weight:600;opacity:.7;margin:22px 0 26px;max-width:34ch}

/* EL GANCHO. Esto no es de color y es lo que más cambia: el que llegó al
   fondo ya decidió. Mandarlo de vuelta al hero con un botón es hacerle
   perder el impulso. Acá escribe el nombre y arranca. Y cierra el círculo:
   la página abre con el gancho y termina con el gancho. */
.foot-gancho{display:inline-flex;align-items:center;background:#fff;border:2px solid var(--fg);
  border-radius:999px;padding:0 6px 0 20px;box-shadow:0 4px 0 var(--fg);max-width:100%;
  transition:box-shadow .18s var(--ease),transform .18s var(--ease)}
.foot-gancho:focus-within{transform:translateY(-2px);box-shadow:0 6px 0 var(--fg)}
.foot-gancho .pre{font-size:15px;font-weight:700;color:#A9A49B;white-space:nowrap;flex:none}
.foot-gancho input{border:0;background:none;outline:none;font-family:inherit;font-size:16px;
  font-weight:800;color:var(--tinta);width:9ch;min-width:0;padding:14px 4px;letter-spacing:-.01em}
.foot-gancho input::placeholder{color:#C9C4BA;font-weight:700}
/* Adentro del gancho blanco el botón ya tiene el canto del gancho, así que
   no lleva borde ni sombra propia: se los comería el blanco. */
.foot-gancho .btn{margin:5px 0;padding:12px 22px;font-size:14px;color:#fff;box-shadow:none;border:0;flex:none}
.foot-gancho .btn:hover{transform:none;box-shadow:none;filter:brightness(1.08)}
.foot-gancho .btn:active{transform:scale(.97)}
.foot-libre{margin-top:16px;font-size:12.5px;font-weight:700;opacity:.55;min-height:19px}
/* La inversión de la línea: en toda la página es tinta sobre color, pero
   acá el fondo ES la tinta. Pasa a ser el papel. Mismo objeto, en negativo. */
.foot .btn{border-color:var(--fg);box-shadow:0 4px 0 var(--fg)}
.foot .btn:hover{box-shadow:0 6px 0 var(--fg)}
.foot .btn:active{box-shadow:0 0 0 var(--fg)}
/* En el footer el fondo ES la tinta, así que el anillo pasa a ser el papel */
.foot .marca{font-size:17px;color:var(--fg);--anillo-color:var(--tinta)}
.foot-links{display:flex;gap:48px;flex-wrap:wrap}
.foot-col b{display:block;font-size:13px;opacity:.5;margin-bottom:12px;font-weight:800}
.foot-col a{display:block;color:var(--fg);text-decoration:none;font-size:14.5px;margin-bottom:9px;
  font-weight:600;transition:transform .25s var(--ease),opacity .2s;opacity:.85}
.foot-col a:hover{opacity:1;transform:translateX(4px)}
.foot-bottom{border-top:1.5px solid rgb(39 41 37/.16);padding-top:22px;font-size:13px;
  font-weight:600;display:flex;justify-content:space-between;align-items:center;gap:16px;
  flex-wrap:wrap;opacity:.7}
@media(max-width:820px){
  .foot{padding:56px 0 26px}
  .foot-top{gap:34px;flex-direction:column}
  /* Tres columnas a 375px dejaban 90px cada una y los nombres se partían
     en tres líneas. En rejilla de dos respiran. */
  .foot-links{display:grid;grid-template-columns:1fr 1fr;gap:24px 20px}
  /* 14.5px con 9px de margen daban un blanco táctil de 31px. Apple pide 44. */
  .foot-col a{padding:7px 0;margin-bottom:2px}
  .foot-bottom{padding-bottom:max(0px,env(safe-area-inset-bottom))}
}
@media(max-width:560px){
  .foot-gancho{padding:0 5px 0 14px}
  .foot-gancho .pre{font-size:12.5px}
  .foot-gancho input{font-size:16px;width:7ch}   /* 16px o iOS hace zoom */
  .foot-gancho .btn{padding:11px 16px;font-size:13px}
}


/* ══════════════════════════════════════════════════════════════════════
   EL HERO EN UN TELÉFONO · medido, no supuesto

     iPhone SE   375×667  →  Safari come 110  →  quedan 557px
     iPhone 15   393×852                      →         742px
     Pro Max     430×932                      →         822px

   El texto y la acción ocupan 482px. Lo que sobra para el teléfono:
     iPhone SE   →  75px  →  un teléfono de  36px de ancho
     iPhone 15   → 260px  →                 126px
     Pro Max     → 340px  →                 165px

   El piso para que una vitrina se LEA es 171px (12.5px de letra × 0.72).
   NINGUNO llega. Ni el Pro Max.

   → El teléfono va DEBAJO de la acción. No oculto: es la prueba, y está
     a un scroll corto.

   Y eso además es lo correcto. En un teléfono la acción va primero: el
   campo tiene que estar arriba del pliegue. El teléfono contesta "¿cómo
   se ve?", que es la cuarta pregunta, no la primera.
   ══════════════════════════════════════════════════════════════════════ */
@media(max-width:900px){
  /* El nav va fijo a 14px del borde y mide ~60px, así que su canto inferior
     cae cerca de los 74px. Con solo 26px de relleno el título quedaba debajo
     del nav; 88px lo bajan lo justo para que respire sin tocarlo. */
  .hero{padding:88px 0 40px}
  .hero-grid{grid-template-columns:1fr;gap:0;align-items:start}
  .gal{order:2;margin-top:30px;padding-bottom:14px;height:auto}
  .flip{width:min(200px,56vw)}
  .t-hero{font-size:clamp(34px,9.5vw,56px);margin-bottom:22px}
  /* La barra ocupa el ancho y el botón sigue a la derecha del campo. El
     prefijo y el campo se mantienen en 16px (el piso que evita el zoom de
     iOS). Si el nombre es largo, el campo tiene overflow oculto y el botón
     no se mueve. */
  .claim-bar{width:100%;max-width:none;margin-top:22px;padding-left:18px}
  /* 15px y no 16: "abretienda.com/" son tres caracteres más que el
     "abre.tienda/" de antes, y en 360px de pantalla esos tres se los
     quitaba al nombre. El piso de 16px es del INPUT —es el que dispara el
     zoom de iOS al enfocarlo—; este es un span y puede achicarse. */
  .claim-pre{font-size:15px}
  .claim-field{font-size:16px;padding:15px 2px}
  .claim-go{padding:14px 20px;font-size:15px}
  .cta-nota{justify-content:center;font-size:14.5px;margin-top:14px;text-align:center}
  .puntos{right:-16px}
  /* El punto mide 8px y su zona táctil 28: el punto es lo que se ve, el
     dedo necesita lo otro. */
  .puntos b{position:relative}
  .puntos b::after{content:"";position:absolute;inset:-10px}
}
/* ══════════════════════════════════════════════════════════════════════
   CENTRO DE AYUDA (/ayuda)

   Reusa nav, footer, botones y el acordeón (.qitem/.qhead/.qbody) de la
   landing; acá solo va lo propio de la página. Defino --pop y --dark, que
   en la landing los pone cada sección pero acá no existen. Y subo el tope
   de altura del acordeón: algunas respuestas (países, monedas) son largas
   y el 280px de la landing las cortaría. */
.ay-page{background:#F7F4EA;color:var(--tinta);min-height:100vh;
  --pop:#CCE31A; --dark:#204C14}
.ay-hero{max-width:760px;margin:0 auto;text-align:center;
  padding:clamp(96px,13vw,150px) 24px clamp(28px,4vw,40px)}
.ay-hero .pill{color:var(--dark)}
.ay-hero h1{font-size:clamp(32px,5vw,52px);font-weight:900;letter-spacing:-.03em;
  line-height:1.05;margin:14px 0 0;color:var(--tinta)}
.ay-hero p{font-size:clamp(16px,2vw,19px);font-weight:600;opacity:.66;
  margin:16px auto 0;max-width:44ch;line-height:1.5}
.ay-search-wrap{max-width:520px;margin:30px auto 0;position:relative}
.ay-search-wrap svg{position:absolute;left:18px;top:50%;transform:translateY(-50%);
  width:20px;height:20px;color:var(--tinta);opacity:.4;pointer-events:none}
.ay-search{width:100%;background:#fff;border:1.5px solid rgb(39 41 37/.14);
  border-radius:999px;padding:15px 20px 15px 48px;font-family:inherit;font-size:16px;
  font-weight:600;color:var(--tinta);outline:none;
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease)}
.ay-search::placeholder{color:rgb(39 41 37/.4);font-weight:600}
.ay-search:focus{border-color:var(--dark);box-shadow:0 8px 24px -12px rgba(32,76,20,.4)}
.ay-body{max-width:760px;margin:0 auto;padding:0 24px clamp(80px,12vw,130px)}
.ay-cat{margin-top:clamp(38px,5vw,54px)}
.ay-cat-h{font-size:clamp(19px,2.4vw,23px);font-weight:900;letter-spacing:-.02em;
  color:var(--tinta);margin:0 0 2px}
/* Respuestas largas sin recorte solo en el centro de ayuda. */
.ay-page .qitem.open .qbody{max-height:1200px}
.ay-empty{display:none;text-align:center;opacity:.6;font-weight:700;padding:44px 0}
.ay-cta{margin-top:clamp(56px,7vw,80px);text-align:center;
  background:#204C14;color:#fff;border-radius:22px;padding:clamp(36px,5vw,52px) 28px}
.ay-cta h2{font-size:clamp(24px,3vw,32px);font-weight:900;letter-spacing:-.02em;
  line-height:1.1;margin:0;color:#fff}
.ay-cta p{font-size:15.5px;font-weight:500;opacity:.85;margin:12px 0 22px}
.ay-cta .btn-pop{background:#CCE31A;color:#204C14}
@media(max-width:640px){
  .ay-cta{border-radius:18px}
}

/* ══════════════════════════════════════════════════════════════════════
   MODAL DE CONTACTO

   La abre el enlace "Contacto" del footer. Card centrada sobre un velo
   oscuro, con el sello de la marca (borde y sombra dura en tinta). El
   honeypot (.hp) va fuera de pantalla: invisible para personas, cebo para
   bots. Respeta "movimiento reducido". */
.modal[hidden]{display:none}
.modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;
  justify-content:center;padding:20px}
.modal-back{position:absolute;inset:0;background:rgb(20 20 16/.55);
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:mfade .2s var(--ease)}
.modal-card{position:relative;z-index:1;width:100%;max-width:420px;background:var(--crema);
  border:2px solid var(--tinta);border-radius:22px;box-shadow:0 12px 0 var(--tinta);
  padding:30px 26px;animation:mrise .28s var(--ease)}
.modal-x{position:absolute;top:12px;right:12px;width:34px;height:34px;border:0;background:none;
  cursor:pointer;font-size:24px;line-height:1;color:var(--tinta);opacity:.55;border-radius:50%;
  transition:opacity .15s,background .15s}
.modal-x:hover{opacity:1;background:rgb(39 41 37/.08)}
.modal-card h2{font-size:23px;font-weight:900;letter-spacing:-.02em;color:var(--tinta);margin:0}
.modal-sub{font-size:14px;font-weight:600;color:rgb(39 41 37/.66);margin:8px 0 20px;line-height:1.45}
#contactoForm{display:flex;flex-direction:column;gap:12px}
.modal-field{width:100%;box-sizing:border-box;background:#fff;border:1.5px solid rgb(39 41 37/.2);
  border-radius:14px;padding:13px 15px;font-family:inherit;font-size:16px;font-weight:600;
  color:var(--tinta);outline:none;transition:border-color .18s var(--ease)}
.modal-field::placeholder{color:rgb(39 41 37/.42);font-weight:600}
.modal-field:focus{border-color:var(--tinta)}
textarea.modal-field{resize:vertical;min-height:96px;line-height:1.45}
.hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;opacity:0}
.modal-send{margin-top:4px;background:#204C14;color:#fff;border:2px solid var(--tinta);
  box-shadow:0 4px 0 var(--tinta);border-radius:999px;padding:13px 22px;font-family:inherit;
  font-weight:800;font-size:15.5px;cursor:pointer;transition:transform .16s var(--resorte),background .2s}
.modal-send:hover{background:#1a3f10}
.modal-send:active{transform:translateY(2px);box-shadow:0 2px 0 var(--tinta)}
.modal-send:disabled{opacity:.6;cursor:default}
.modal-estado{font-size:13.5px;font-weight:700;margin:2px 0 0;line-height:1.4;min-height:1px}
.modal-estado.ok{color:#1a7a2e}
.modal-estado.err{color:#c0392b}
@keyframes mfade{from{opacity:0}to{opacity:1}}
@keyframes mrise{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.modal-back,.modal-card{animation:none}}

/* ══════════════════════════════════════════════════════════════════════
   HERO CENTRADO + "CREA Y PERSONALIZA" EN DOS COLUMNAS

   El teléfono salió del hero y bajó a la sección de personalizar. Así el
   hero queda 100% enfocado en el registro (centrado y a pantalla), y el
   teléfono aparece justo donde se habla de armar la tienda, como prueba de
   la promesa ("muestra tus productos… personaliza cada detalle"). */
.s-hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center}
.hero-centro{max-width:780px;margin:0 auto;text-align:center;
  display:flex;flex-direction:column;align-items:center}
.hero-centro .claim-bar{width:min(580px,100%);max-width:none;padding:7px 7px 7px 26px}
.hero-centro .claim-pre{font-size:19.5px}
.hero-centro .claim-field{font-size:19.5px;padding:18px 3px}
.hero-centro .claim-go{font-size:17px;padding:17px 30px}
.hero-centro .cta-nota{justify-content:center}
.hero-centro .claim-hint{text-align:center}

.estilos-grid{max-width:1100px;margin:0 auto;display:grid;
  grid-template-columns:1.15fr .85fr;gap:48px;align-items:center}
.estilos-grid .statement{max-width:none;margin:0;text-align:left}
.estilos-grid .statement h2{max-width:15ch;margin:0}
.estilos-grid .statement p{margin:22px 0 0;max-width:44ch}
.estilos-grid .swatches{justify-content:flex-start;margin-top:32px;flex-wrap:nowrap;gap:7px}
/* Plantillas más chicas para que quepan en UNA sola fila junto al texto. */
.estilos-grid .sw{width:52px;height:66px;border-radius:11px;box-shadow:0 6px 0 var(--tinta)}
.estilos-grid .sw .av{width:16px;height:16px;margin:6px auto 5px}
.estilos-grid .sw .ln{padding:0 8px}
.estilos-grid .sw u{height:15px}
.gal-estilos{height:min(66vh,540px)}
/* Sin la sombra dura de abajo (el "borde gordo"): en esta sección el teléfono
   va más limpio, solo con una sombra suave. */
.gal-estilos .tel{box-shadow:0 26px 44px -16px rgb(39 41 37/.42)}

@media(max-width:900px){
  .s-hero{min-height:auto}
  .estilos-grid{grid-template-columns:1fr;gap:34px;text-align:center}
  .estilos-grid .statement{text-align:center}
  .estilos-grid .statement h2,.estilos-grid .statement p{margin-left:auto;margin-right:auto}
  .estilos-grid .swatches{justify-content:center;flex-wrap:wrap}
  .estilos-grid .gal-estilos{order:0;height:min(56vh,420px)}
}

/* ── Subtítulo del hero + 3 beneficios con iconos (reemplazan la nota) ── */
.hero-sub{font-weight:600;font-size:clamp(15px,1vw + 9px,18px);line-height:1.45;
  color:var(--dark,var(--tinta));opacity:.82;max-width:44ch;margin:-12px auto 0}
.hero-feats{display:flex;flex-direction:column;gap:13px;margin-top:26px}
.hero-feat{display:flex;align-items:center;gap:12px;font-weight:700;font-size:16px;
  color:var(--dark,var(--tinta))}
.hero-feat .fi{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.6);
  display:flex;align-items:center;justify-content:center;flex:none}
.hero-feat .fi svg{width:16px;height:16px}
.hero .hero-sub,.hero .hero-feats{animation:rise .85s var(--ease) both}
.hero .hero-sub{animation-delay:.3s}
.hero .hero-feats{animation-delay:.58s}

/* ── MÓVIL (≤640px): barra apilada (input arriba, botón abajo) + más aire ── */
@media(max-width:640px){
  .s-hero{min-height:auto;padding:104px 0 74px}
  .hero-centro{padding:0 22px}
  .t-hero{margin-bottom:16px}
  .hero-sub{font-size:15.5px;line-height:1.5;margin-top:0}

  /* Registro: input en su línea, "Crear gratis" full-width debajo */
  .hero-centro .claim-bar{flex-wrap:wrap;border-radius:22px;padding:13px 16px 13px 20px;gap:0;margin-top:30px}
  .hero-centro .claim-pre{font-size:15.5px}
  .hero-centro .claim-field{font-size:17px;padding:13px 2px;width:auto;flex:1 1 0;min-width:0}
  .hero-centro .claim-go{flex:0 0 100%;width:100%;margin-top:11px;padding:16px;font-size:16px;text-align:center;border-radius:999px}

  /* Beneficios con más separación */
  .hero-feats{margin-top:30px;gap:18px}
  .hero-feat{font-size:15px}
}

/* Beneficios: en móvil salen del hero y aparecen al inicio de la sección roja
   (blancos sobre rojo). En escritorio/tablet: ocultos aquí, visibles en el hero. */
.feats-mobile{display:none}
.feats-mobile .fm-it{display:flex;align-items:center;gap:12px;font-weight:700;font-size:15px;color:#fff;line-height:1.35}
.feats-mobile .fi{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;flex:none;color:#fff}
.feats-mobile .fi svg{width:16px;height:16px}
@media(max-width:640px){
  .hero-feats{display:none}
  .feats-mobile{display:flex;flex-direction:column;gap:15px;margin-bottom:28px}
}

/* ══════════════════════════════════════════════════════════════════════
   TIENDA EN VIVO · papel arena + verde

   EL COLOR
   Arrancó coral + lila —herencia de "Negocios que ya venden así", que ya
   no existe— y pasó por tinta + lima. Hoy es #F2EDDF con verde: el papel
   arena de la página, con el mismo acento que usa Preguntas.

   OJO CON EL ORDEN: este papel es el MISMO que el de Preguntas, que va
   justo abajo. Las dos secciones se leen como un solo bloque de papel —
   es lo que advierte el comentario de --papel. Si algún día molesta, la
   salida es una línea: mover Preguntas a --papel (#F3F3F1) o a crema.

   TODO LO DE ADENTRO VUELVE AL IDIOMA DE LA PÁGINA
   Sobre papel, el canto de tinta y la sombra dura funcionan otra vez, así
   que acá no hay ni una excepción: el teléfono, el chip de la URL y los
   dos botones usan las mismas reglas que el resto de la landing.

   Medido sobre #F2EDDF: el titular #312B1E da 12.01 y el párrafo en tinta
   12.55. El chip de la URL es tinta sobre blanco, 14.68. La tinta sobre
   el verde del botón y de la píldora, 7.64; el punto bosque adentro de la
   píldora verde, 5.19. Los cinco pasan 4.5 de sobra.

   En móvil el iframe va sin pointer-events: un marco scrolleable adentro
   de una página scrolleable se come el dedo y la persona queda atrapada.
   Ahí la tienda se abre con el botón, en su propia pestaña.
   ══════════════════════════════════════════════════════════════════════ */
.s-viva   {--bg:#F2EDDF;  --pop:var(--verde);  --fg:var(--tinta); --dark:#312B1E}
.s-viva .blob-a{width:340px;height:310px;left:-150px;bottom:-100px;opacity:.34}
.s-viva .blob-b{width:200px;height:190px;right:-80px;top:-70px;opacity:.26}

.viva-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:52px;align-items:center}
.viva-say h2{max-width:15ch}
.viva-say p{font-size:19px;line-height:1.55;font-weight:600;margin:22px 0 0;max-width:44ch;
            color:var(--tinta)}
.viva-say .pill{display:inline-flex;align-items:center;gap:9px;margin-bottom:18px}
/* El punto que late va en bosque y no en verde: la píldora YA es verde,
   y un verde sobre otro no se ve. */
.viva-led{width:9px;height:9px;border-radius:50%;background:#204C14;
          animation:vivalate 1.9s var(--ease) infinite}
@keyframes vivalate{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.72);opacity:.45}}

.viva-url{display:inline-flex;align-items:center;gap:7px;margin-top:26px;
          background:#fff;border:2px solid var(--tinta);border-radius:999px;
          padding:11px 19px;font-weight:800;font-size:16px;color:var(--tinta);
          text-decoration:none;box-shadow:0 4px 0 var(--tinta);
          transition:transform .2s var(--ease),box-shadow .2s var(--ease)}
.viva-url .pre{opacity:.5}
.viva-url svg{width:15px;height:15px;flex:none}
.viva-url:hover{transform:translateY(-2px);box-shadow:0 6px 0 var(--tinta)}
.viva-url:active{transform:translateY(4px);box-shadow:0 0 0 var(--tinta)}

.viva-cta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:30px}
.viva-abrir{background:rgb(255 255 255/.6);padding:14px 22px;font-size:15px}
.viva-abrir:hover{background:#fff}

.viva-tel-wrap{display:flex;flex-direction:column;align-items:center;gap:15px;z-index:2}
.viva-tel{position:relative;width:min(340px,80vw);aspect-ratio:9/18.6;
          border:3px solid var(--tinta);border-radius:42px;background:#fff;
          box-shadow:0 16px 0 var(--tinta);overflow:hidden}
.viva-tel::after{content:"";position:absolute;top:0;left:50%;translate:-50% 0;
          width:104px;height:22px;background:var(--tinta);border-radius:0 0 16px 16px;
          z-index:3;pointer-events:none}
.viva-frame{position:absolute;inset:0;width:100%;height:100%;border:0;background:#fff}
.viva-tap{font-weight:800;font-size:14px;color:var(--tinta);text-decoration:none;
          border-bottom:2px solid rgb(39 41 37/.3);padding-bottom:2px}
.viva-tap:hover{border-bottom-color:var(--tinta)}

@media(max-width:900px){
  .viva-grid{grid-template-columns:1fr;gap:36px}
  .viva-say{text-align:center}
  .viva-say h2,.viva-say p{margin-left:auto;margin-right:auto}
  .viva-cta{justify-content:center}
}
@media(max-width:820px){
  /* El dedo no se queda adentro del marco: la tienda se abre con el botón. */
  .viva-frame{pointer-events:none}
}
