/* ============================================================
   LA ESQUINA VENEZOLANA
   Sistema visual: cartel callejero / street poster

   Los tokens de :root los escribe `python crear-sitio.py` desde
   marca.json (colores y tipografía). Todo lo demás es la hoja de estilo
   de la plantilla: se edita en plantilla/sitio/css/style.css.
   ============================================================ */

/* ---------- 1. TOKENS ---------- */
:root{
  /* superficies */
  --ink:        #0B0A09;
  --ink-2:      #121110;
  --ink-3:      #1A1817;
  --ink-4:      #242120;
  --line:       rgba(245,239,230,.11);
  --line-2:     rgba(245,239,230,.06);

  /* marca */
  --yellow:     #FFC627;
  --yellow-2:   #FFD95C;
  --yellow-deep:#C79300;
  --red:        #CE1126;
  --red-2:      #F0263C;
  --red-deep:   #8C0B19;
  /* El azul de la bandera. La paleta tenía amarillo y rojo —los dos colores de
     cualquier casa de hamburguesas— y sin el azul el sitio nunca terminaba de
     leerse venezolano. --blue es el de la tela; --blue-2 el que sí se lee sobre
     el negro, para texto e iconos. */
  --blue:       #0033A0;
  --blue-2:     #4B86F0;
  --blue-deep:  #001E63;
  --wa:         #25D366;

  /* bandera: los tres colores del trazo de la portada. Sin datos propios en
     marca.json son los de la casa; una cocina con bandera que reivindicar
     pone acá la suya. */
  --flag-1:     #FFC627;
  --flag-2:     #0033A0;
  --flag-3:     #CE1126;
  /* Los dos usos del tricolor, para no reescribir el degradado en veinte
     reglas. --tricolor es la REGLA: acostada, marca dónde empieza algo (el
     rótulo de una sección, el canto de una tarjeta, el pie). --bandera es la
     BANDERA de verdad: bandas horizontales apiladas, y solo se usa donde se
     lee como tal, en formato de banderita. */
  --tricolor:   linear-gradient(90deg,
                  var(--flag-1) 0 33.33%, var(--flag-2) 33.33% 66.66%,
                  var(--flag-3) 66.66% 100%);
  --bandera:    linear-gradient(180deg,
                  var(--flag-1) 0 33.33%, var(--flag-2) 33.33% 66.66%,
                  var(--flag-3) 66.66% 100%);

  /* texto */
  --cream:      #F6F1E7;
  --muted:      #A39A8F;
  --muted-2:    #6E665D;

  /* tipografía
     --headline es la voz de la marca en la portada y en los botones: una
     grotesca de rango ancho (300 a 800) que permite jerarquía por peso en
     vez de por color. --marker es la brocha del titular de la portada, gorda
     y de trazo sucio, y no sale de ahí. --brush es el pincel, elegante pero
     con textura, y va SOLO en palabras sueltas. --display (condensada de
     cartel) se queda en los encabezados de sección. */
  --headline:'Archivo', 'Barlow', -apple-system, sans-serif;
  --marker:  'Permanent Marker', 'Kaushan Script', 'Archivo', sans-serif;
  --display: 'Bebas Neue', 'Barlow Condensed', Impact, sans-serif;
  --brush:   'Kaushan Script', 'Barlow', cursive;
  --cond:    'Barlow Condensed', 'Barlow', sans-serif;
  --body:    'Barlow', -apple-system, sans-serif;
  --mono:    'Courier Prime', 'Courier New', monospace;

  /* medidas */
  --wrap: 1220px;
  --pad: clamp(1.05rem, 3.2vw, 2.6rem);
  --r: 3px;

  /* movimiento */
  --e: cubic-bezier(.22,1,.36,1);
  --e2: cubic-bezier(.65,0,.35,1);
}

/* ---------- 2. RESET ---------- */
*,*::before,*::after{ box-sizing:border-box; margin:0; padding:0; }
html{
  scroll-behavior:smooth;
  /* Lo que se pega arriba tapa lo que se ancla: la barra siempre, y en
     teléfono también la tira de categorías. --nav-h la mide app.js. */
  scroll-padding-top:calc(var(--nav-h, 62px) + 16px);
  -webkit-text-size-adjust:100%;
  /* El recuadro gris que pinta el navegador al tocar sobra: cada cosa que se
     toca ya tiene su propio :active, y el recuadro se sale de las esquinas
     redondeadas de los botones. */
  -webkit-tap-highlight-color:transparent;
}
body{
  background:var(--ink);
  color:var(--cream);
  font-family:var(--body);
  /* 1rem y no 16px: son lo mismo por defecto, pero en píxeles se ignora el
     tamaño de letra que la persona tenga puesto en su navegador. El resto del
     sitio ya está en rem y sí crecía, así que los titulares subían y el texto
     corrido se quedaba clavado en 16. */
  font-size:1rem;
  line-height:1.65;
  /* Las dos líneas son a propósito. `hidden` convierte al body en contenedor
     de scroll y eso rompe todo `position:sticky` que cuelgue de él —la tira
     de categorías se quedaba quieta—. `clip` recorta igual pero sin crear el
     contenedor, así que lo pegajoso vuelve a pegarse. Los navegadores que no
     entienden `clip` se quedan con `hidden`: recortan igual y lo único que
     pierden es que la tira se pegue. */
  overflow-x:hidden;
  overflow-x:clip;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
body.is-locked{ overflow:hidden; }
img,video,iframe{ display:block; max-width:100%; }
img{ height:auto; }
a{ color:inherit; text-decoration:none; }
button,input,textarea{ font:inherit; color:inherit; }
button{ background:none; border:0; cursor:pointer; }
ul{ list-style:none; }
::selection{ background:var(--yellow); color:var(--ink); }

/* scrollbar */
::-webkit-scrollbar{ width:10px; height:10px; }
::-webkit-scrollbar-track{ background:var(--ink-2); }
::-webkit-scrollbar-thumb{ background:var(--ink-4); border-radius:0; }
::-webkit-scrollbar-thumb:hover{ background:var(--yellow-deep); }

:focus-visible{ outline:2.5px solid var(--yellow); outline-offset:3px; }

/* ---------- 3. UTILIDADES ---------- */
.wrap{ width:100%; max-width:var(--wrap); margin-inline:auto; padding-inline:var(--pad); }
.section{ padding-block:clamp(2.75rem, 5vw, 5.25rem); position:relative; }
/* `text-transform:none` porque la cifra hereda las versalitas de donde caiga
   —un rótulo, un botón, una tira— y la k de "$30k" es una unidad, no una
   palabra: en mayúscula deja de leerse como mil. */
.price{
  font-family:var(--mono); font-weight:700; letter-spacing:-.02em;
  text-transform:none;
}
.linkish{
  color:var(--yellow); font-weight:700; border-bottom:1.5px solid currentColor;
  padding-bottom:1px; transition:opacity .2s;
}
.linkish:hover{ opacity:.7; }
/* Texto que solo existe para quien no ve la página: el nombre de la casa
   dentro del titular de la portada, que a la vista lo pone el logotipo de la
   barra. Ni display:none ni visibility:hidden, que lo sacarían también del
   lector de pantalla. */
.sr-only{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap;
}

/* ---------- ICONOS ---------- */
.sprite{ display:none; }
.ico{
  width:1em; height:1em; flex:none; display:inline-block; vertical-align:-.125em;
  fill:none; stroke:currentColor; stroke-width:1.9;
  stroke-linecap:round; stroke-linejoin:round;
}
.ico--fill{ fill:currentColor; stroke:none; }

/* grano global */
.grain{
  position:fixed; inset:-50%; z-index:9998; pointer-events:none; opacity:.045;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grainShift 8s steps(6) infinite;
}
@keyframes grainShift{
  0%,100%{ transform:translate(0,0) }
  20%{ transform:translate(-4%,3%) }
  40%{ transform:translate(3%,-4%) }
  60%{ transform:translate(-2%,-3%) }
  80%{ transform:translate(4%,2%) }
}

/* barra de progreso de lectura.
   Va con scaleX en vez de width: el ancho fuerza recálculo de layout en cada
   frame y esto se toca en cada scroll. */
.progress{
  position:fixed; top:0; left:0; right:0; height:3px; z-index:930;
  pointer-events:none; background:rgba(245,239,230,.05);
}
.progress span{
  display:block; height:100%; width:100%;
  transform:scaleX(0); transform-origin:0 50%;
  background:linear-gradient(90deg, var(--yellow), var(--red-2));
  box-shadow:0 0 12px rgba(245,197,24,.55);
}

/* reveal on scroll.
   La variante base entra desde abajo; las otras tres existen para que no todo
   el sitio aparezca con el mismo gesto: las tarjetas crecen, y lo que va en
   pareja (las dos sedes) entra desde su propio lado. */
.reveal{ opacity:0; transform:translateY(26px); }
/* El recorrido lateral es exactamente el margen lateral de la página, ni un
   píxel más. Con los 38 px fijos que había antes, el elemento arrancaba fuera
   de la ventana en todo ancho menor a ~1190 px —que es donde el margen aún no
   llega a 38— y ensanchaba la página mientras no se hubiera revelado. Se veía
   como un tirón horizontal al bajar por "Nosotros" y por las sedes. Atado al
   margen, el elemento arranca pegado al canto y nunca lo pasa. */
.reveal--izq{ transform:translateX(calc(var(--pad) * -1)); }
.reveal--der{ transform:translateX(var(--pad)); }
.reveal--zoom{ transform:scale(.93); }
/* Los renglones de la carta entran con la mitad de recorrido que una sección:
   son muchos y seguidos, y a 26 px la lista se lee como un oleaje. */
.mitem.reveal{ transform:translateY(14px); }
.reveal.is-in{
  opacity:1; transform:none;
  transition:opacity .8s var(--e) var(--d,0s), transform .8s var(--e) var(--d,0s);
}

/* Paralaje del hero: el arte sube más despacio que la página y el bloque de
   texto se va con un poco de deriva. Los valores los pone app.js en --par y
   --drift; sin JS las variables no existen y todo se queda quieto. */
.hero__content{ transform:translateY(var(--drift, 0px)); }

/* ---------- 4. LOADER ---------- */
.loader{
  position:fixed; inset:0; z-index:10000; background:var(--ink);
  display:grid; place-content:center; justify-items:center;
  gap:clamp(1.1rem, 2.5vw, 1.6rem);
  transition:opacity .5s var(--e), visibility .5s var(--e);
}
.loader.is-done{ opacity:0; visibility:hidden; }
/* al salir, el conjunto se va un pelo hacia arriba: da sensación de
   "cortina que sube" en vez de un corte seco */
.loader.is-done .loader__stage,
.loader.is-done .loader__words,
.loader.is-done .loader__bar{
  transform:translateY(-10px); transition:transform .5s var(--e);
}

/* --- Logo + resplandor + icono ---
   El logo real es el sello circular de la marca (1:1), no el apaisado con el
   que nació la plantilla: el escenario baja de ancho para que a igual alto
   ocupe lo mismo, y el resplandor vuelve a ser un círculo parejo. --- */
.loader__stage{
  position:relative; display:grid; place-items:center;
  width:clamp(150px, 36vw, 210px);
}
.loader__glow{
  position:absolute; inset:-26%; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle at center, rgba(245,197,24,.3), rgba(245,197,24,.07) 46%, transparent 70%);
  filter:blur(12px);
  animation:loader-glow 2.2s var(--e2) infinite alternate;
}
@keyframes loader-glow{
  from{ opacity:.35; transform:scale(.88) }
  to{ opacity:1; transform:scale(1.06) }
}
/* Ya no hace falta mix-blend-mode:lighten para tapar el cuadro negro: el
   logo trae canal alfa de verdad, así que el resplandor se ve por detrás sin
   que la mezcla altere el amarillo. */
.loader__logo{
  position:relative; width:100%; height:auto;
  animation:loader-logo 2.2s var(--e2) infinite alternate;
}
@keyframes loader-logo{ from{ transform:scale(.975) } to{ transform:scale(1) } }

/* top va en % del alto del escenario, que ahora es cuadrado: con -42% el
   icono se despegaba el doble de lo previsto. */
.loader__ico{
  position:absolute; top:-22%; left:50%; z-index:2;
  width:clamp(34px, 7.5vw, 46px); height:auto;
  fill:none; stroke:var(--yellow); stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round;
  transform-origin:50% 60%;
  animation:loader-flip 2.6s var(--e2) infinite;
}
/* la hamburguesa flota y da un giro completo cada vuelta */
@keyframes loader-flip{
  0%   { transform:translate(-50%, 0) rotate(0deg) }
  35%  { transform:translate(-50%, -14px) rotate(180deg) }
  70%  { transform:translate(-50%, 0) rotate(360deg) }
  100% { transform:translate(-50%, 0) rotate(360deg) }
}

/* --- Frases rotativas ---
   Cuatro turnos de 1,5s dentro de un ciclo de 6s. Cada una entra desde
   abajo, aguanta y sale hacia arriba. --- */
.loader__words{
  position:relative; height:1.5rem; width:min(320px, 78vw);
}
.loader__words span{
  position:absolute; inset:0; display:grid; place-items:center;
  font-family:var(--cond); font-weight:600; font-size:.86rem;
  letter-spacing:.22em; text-transform:uppercase; color:var(--muted);
  opacity:0; animation:loader-word 6s var(--e) infinite;
}
.loader__words span:nth-child(2){ animation-delay:1.5s; }
.loader__words span:nth-child(3){ animation-delay:3s; }
.loader__words span:nth-child(4){ animation-delay:4.5s; }
@keyframes loader-word{
  0%   { opacity:0; transform:translateY(9px) }
  5%   { opacity:1; transform:translateY(0) }
  20%  { opacity:1; transform:translateY(0) }
  25%  { opacity:0; transform:translateY(-9px) }
  100% { opacity:0; transform:translateY(-9px) }
}

/* --- Barra de progreso --- */
.loader__bar{
  width:min(200px,42vw); height:2px; background:var(--ink-4); overflow:hidden;
  border-radius:2px;
}
.loader__bar span{
  display:block; height:100%; width:40%; background:var(--tricolor);
  border-radius:2px; box-shadow:0 0 10px rgba(245,197,24,.55);
  animation:slide 1.1s var(--e2) infinite;
}
@keyframes slide{ from{ transform:translateX(-110%) } to{ transform:translateX(360%) } }

/* ---------- 5. TOPBAR ---------- */
.topbar{
  background:var(--yellow); color:var(--ink); overflow:hidden;
  border-bottom:2px solid var(--ink); position:relative; z-index:60;
}
.topbar__track{
  display:flex; align-items:center; gap:1.5rem; white-space:nowrap;
  font-family:var(--cond); font-weight:700; font-size:.72rem;
  letter-spacing:.12em; padding-block:.34rem; width:max-content;
  animation:marquee 42s linear infinite;
}
/* El separador es un punto dibujado, no el carácter ● : ese lo pintan como
   emoji a color varios Android y quedaba un topo azul entre frase y frase. */
.topbar .dot{
  display:inline-block; width:4px; height:4px; border-radius:50%;
  background:currentColor; opacity:.5; vertical-align:middle;
}
@keyframes marquee{ from{ transform:translateX(0) } to{ transform:translateX(-50%) } }

/* ---------- 6. NAV ---------- */
.nav{
  position:sticky; top:0; z-index:900;
  background:rgba(11,10,9,.78); backdrop-filter:blur(16px) saturate(140%);
  -webkit-backdrop-filter:blur(16px) saturate(140%);
  border-bottom:1px solid var(--line);
  transition:background .35s, border-color .35s, padding .35s;
}
.nav.is-stuck{ background:rgba(11,10,9,.96); border-color:var(--line); }
.nav__inner{
  max-width:var(--wrap); margin-inline:auto; padding:.55rem var(--pad);
  display:flex; align-items:center; gap:1.1rem;
}

/* El logo ya trae dentro el nombre completo: repetirlo al lado en texto
   duplicaba la marca y obligaba a dejar la imagen chiquita para que cupieran
   las dos cosas. Ahora manda la imagen sola y puede ir grande. */
.nav__logo{ display:flex; align-items:center; gap:.65rem; flex-shrink:0; }
.nav__logo img{ height:50px; width:auto; }
/* El nombre escrito al lado del sello. Antes lo ponía el logotipo grande del
   centro de la portada; desde que ahí manda el titular a brocha, la marca se
   lee acá y no en ningún otro sitio de la primera pantalla. */
.nav__wordmark{
  font-family:var(--brush); font-size:1.3rem; line-height:1;
  color:var(--cream); white-space:nowrap; padding-bottom:.14em;
}

.nav__links{ display:flex; gap:.3rem; margin-left:auto; }
.nav__links a{
  font-family:var(--cond); font-weight:600; font-size:.85rem;
  letter-spacing:.08em; text-transform:uppercase; color:var(--muted);
  padding:.42rem .62rem; position:relative; transition:color .25s;
}
.nav__links a::after{
  content:''; position:absolute; left:.62rem; right:.62rem; bottom:.22rem;
  height:2px; background:var(--yellow); transform:scaleX(0); transform-origin:left;
  transition:transform .34s var(--e);
}
.nav__links a:hover{ color:var(--cream); }
.nav__links a:hover::after,
.nav__links a.is-active::after{ transform:scaleX(1); }
.nav__links a.is-active{ color:var(--yellow); }

.nav__actions{ display:flex; align-items:center; gap:.6rem; }

/* estado abierto/cerrado */
.status{
  display:inline-flex; align-items:center; gap:.42rem;
  font-family:var(--cond); font-size:.73rem; font-weight:700;
  letter-spacing:.11em; text-transform:uppercase; color:var(--muted);
  padding:.3rem .6rem; border:1px solid var(--line); border-radius:2px;
}
.status__dot{
  width:7px; height:7px; border-radius:50%; background:var(--muted-2); flex-shrink:0;
}
.status.is-open{ color:var(--wa); border-color:rgba(37,211,102,.3); }
.status.is-open .status__dot{ background:var(--wa); box-shadow:0 0 0 0 rgba(37,211,102,.55); animation:ping 2s infinite; }
.status.is-closed{ color:var(--red-2); border-color:rgba(255,59,48,.28); }
.status.is-closed .status__dot{ background:var(--red-2); }
@keyframes ping{
  0%{ box-shadow:0 0 0 0 rgba(37,211,102,.5) }
  70%{ box-shadow:0 0 0 7px rgba(37,211,102,0) }
  100%{ box-shadow:0 0 0 0 rgba(37,211,102,0) }
}
.status--inline{ margin-top:.7rem; align-self:flex-start; }

/* burger móvil */
.burger{ display:none; flex-direction:column; gap:5px; padding:.5rem .25rem; }
.burger span{
  display:block; width:24px; height:2px; background:var(--cream);
  transition:transform .35s var(--e), opacity .2s;
}
.burger.is-open span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
.burger.is-open span:nth-child(2){ opacity:0; }
.burger.is-open span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

/* ---------- 7. BOTONES ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:.55rem;
  /* misma grotesca del titular: los botones son parte de la voz de marca,
     no un componente de sistema aparte */
  font-family:var(--headline); font-weight:600; font-size:.86rem;
  letter-spacing:.11em; text-transform:uppercase;
  padding:.6rem 1.05rem; border-radius:var(--r);
  transition:transform .22s var(--e), background .25s, color .25s, box-shadow .25s;
  position:relative; white-space:nowrap;
}
.btn:active{ transform:translateY(1px) scale(.985); }
/* Los grandes son los de llamada a la acción: van solos, a todo el ancho en
   teléfono y con las etiquetas más largas del sitio. A diferencia del resto
   se les deja romper en dos líneas: con `nowrap`, "Cómo pedir a domicilio" se
   salía de su propia caja en cuanto el navegador subía el tamaño de letra o
   la pantalla era muy angosta. Romper es feo; desbordar es un error. */
.btn--lg{
  padding:.8rem 1.4rem; font-size:.95rem;
  white-space:normal; text-wrap:balance;
}
.btn--block{ width:100%; }

.btn--primary{ background:var(--yellow); color:var(--ink); box-shadow:0 0 0 0 rgba(245,197,24,.42); }
.btn--primary:hover{ background:var(--yellow-2); box-shadow:0 8px 26px -6px rgba(245,197,24,.5); transform:translateY(-2px); }

.btn--ghost{ border:2px solid var(--line); color:var(--cream); background:rgba(255,255,255,.03); }
/* amarillo y no verde: el verde de WhatsApp quedó de cuando este botón
   llevaba al chat, y desde que las llamadas a pedir van a la carta era el
   único color ajeno a la paleta que seguía apareciendo al pasar por encima */
.btn--ghost:hover{ border-color:var(--yellow); color:var(--yellow); transform:translateY(-2px); }

.btn--wa{ background:var(--wa); color:#04220F; }
.btn--wa:hover{ background:#1FBF5B; transform:translateY(-2px); box-shadow:0 10px 30px -8px rgba(37,211,102,.5); }

.btn--cart{
  background:var(--ink-3); border:1px solid var(--line); color:var(--cream); padding:.6rem .95rem;
}
.btn--cart:hover{ background:var(--ink-4); border-color:var(--yellow); color:var(--yellow); }
.cart-count{
  min-width:20px; height:20px; padding:0 5px; border-radius:20px;
  background:var(--red); color:#fff; font-family:var(--mono); font-size:.72rem;
  font-weight:700; display:grid; place-content:center; line-height:1;
  transition:transform .3s var(--e);
}
.cart-count.bump{ animation:bump .42s var(--e); }
@keyframes bump{ 0%,100%{ transform:scale(1) } 40%{ transform:scale(1.45) } }

/* Disco que vuela del plato al carrito. El recorrido lo arma el JS con las
   posiciones reales del clic; acá solo va la pinta. */
.fly{
  position:fixed; left:0; top:0; z-index:9500; pointer-events:none;
  width:46px; height:46px; border-radius:50%;
  display:grid; place-items:center;
  background:var(--yellow); color:var(--ink);
  box-shadow:0 14px 28px -10px rgba(0,0,0,.8), inset 0 0 0 1px rgba(11,10,9,.22);
  will-change:transform, opacity;
}
.fly .ico{ width:1.5rem; height:1.5rem; stroke-width:1.8; }

/* El carrito acusa el golpe justo cuando el disco aterriza */
.btn--cart.is-hit{ animation:cartHit .56s var(--e); }
@keyframes cartHit{
  0%{ transform:scale(1); }
  30%{
    transform:scale(1.11); background:var(--yellow); border-color:var(--yellow);
    color:var(--ink); box-shadow:0 0 0 6px rgba(245,197,24,.2);
  }
  100%{ transform:scale(1); box-shadow:0 0 0 13px rgba(245,197,24,0); }
}

.btn--ver{
  background:transparent; border:2px solid var(--yellow); color:var(--yellow);
  padding:.6rem 1.05rem; font-size:.85rem; width:100%;
}
.btn--ver:hover{ background:var(--yellow); color:var(--ink); }

/* ---------- 8. HERO ---------- */
/* La portada va partida en dos: a la izquierda el titular a brocha, la bajada
   y los botones; a la derecha la foto del plato, a sangre hasta el borde.
   Antes era una composición central con el logotipo plantado sobre el fondo,
   y ese logotipo terminaba diciendo lo mismo que la barra de arriba. Lo que
   junta las dos mitades no es una caja ni un borde: es la propia foto, que se
   apaga hacia la izquierda con una máscara y entra en el negro justo donde
   arranca el texto. */
.hero{
  position:relative; overflow:hidden; isolation:isolate;
  min-height:min(94svh, 840px);
  display:flex; flex-direction:column; justify-content:center;
  background:var(--ink);
  border-bottom:2px solid var(--ink-4);
}

/* La foto arranca pasada la mitad y se difumina por su canto izquierdo con una
   máscara. Un degradado encima no sirve: el velo que apagara la foto apagaría
   también el titular, que va delante. La máscara va en el contenedor y no en
   la imagen para que se lleve por delante también la trama de impresión. */
.hero__media{
  position:absolute; inset:0 0 0 30%; z-index:0;
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 26%);
          mask-image:linear-gradient(90deg, transparent 0, #000 26%);
}
.hero__video{
  width:100%; height:100%; object-fit:cover; object-position:50% 50%;
  /* la escala de más es el margen que se come el paralaje: sin ella, al
     desplazar la foto asomaría el fondo negro por el canto de arriba */
  transform:translateY(calc(var(--par, 0px) * .4)) scale(1.05);
  filter:saturate(1.08) contrast(1.04) brightness(1.07);
  will-change:transform;
}
/* Textura de impresión: la misma trama fina del resto del sitio, la que hace
   que el fondo se lea como cartel y no como una foto pegada. */
.hero__media::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:repeating-linear-gradient(0deg, rgba(0,0,0,.16) 0 1px, transparent 1px 3px);
  opacity:.28; mix-blend-mode:multiply;
}

/* Dos halos: el amarillo levanta el plato del fondo —la foto viene de estudio
   y sin él la mitad derecha se apaga contra el negro— y el rojo al pie cose la
   portada con la franja de platos y le devuelve el rojo de marca. */
.hero__glow{
  position:absolute; inset:0; z-index:1; pointer-events:none;
  background:
    radial-gradient(ellipse 42% 58% at 74% 46%, rgba(245,197,24,.17), transparent 72%),
    radial-gradient(ellipse 66% 46% at 56% 112%, rgba(224,35,28,.32), transparent 74%);
}

/* Dos velos. El diagonal es el que hace legible la columna de texto: apaga el
   video por su lado izquierdo hasta el negro pleno y llega a transparente
   antes del canto derecho, así el último cuarto de la portada se ve tal cual.
   El vertical hunde cabecera y pie para coser el hero con la barra de arriba y
   con la franja de abajo; en medio se queda muy bajo a propósito, que es donde
   se mira el video. */
.hero__scrim{
  position:absolute; inset:0; z-index:2; pointer-events:none;
  background:
    linear-gradient(96deg,
      var(--ink) 0 26%, rgba(11,10,9,.84) 40%, rgba(11,10,9,.34) 56%,
      rgba(11,10,9,.06) 76%, transparent 100%),
    linear-gradient(to bottom,
      rgba(11,10,9,.82) 0%, rgba(11,10,9,.12) 24%, rgba(11,10,9,.18) 58%,
      rgba(11,10,9,.78) 88%, rgba(11,10,9,.95) 100%);
}

/* Dos columnas: el bloque de texto y, al lado, la frase escrita a mano sobre
   la foto. La rejilla se queda dentro del ancho del sitio; la foto, no. */
.hero__content{
  position:relative; z-index:3; width:100%; max-width:var(--wrap);
  margin-inline:auto; flex:1;
  display:grid; grid-template-columns:minmax(0, 1.05fr) minmax(0, .95fr);
  align-items:center; gap:clamp(1rem, 3vw, 2.4rem);
  padding:clamp(2.2rem, 5.5vh, 3.6rem) var(--pad) clamp(1.3rem, 3vh, 2rem);
}

/* Línea de ubicación: se baja el tono. Antes era amarillo pleno y competía
   con el titular; ahora el amarillo se queda solo en la regla. */
.eyebrow{
  display:flex; align-items:center; gap:.85rem;
  font-family:var(--headline); font-weight:500; font-size:.7rem;
  letter-spacing:.3em; text-transform:uppercase; color:rgba(245,239,230,.62);
  margin-bottom:1.5rem;
}
.eyebrow__line{ display:block; width:40px; height:3px; background:var(--tricolor); flex-shrink:0; }

/* --- Crédito de la casa ----------------------------------------------------
   Ubicación y firma del chef en una sola línea por encima del titular. Va en
   amarillo, pequeña y muy espaciada —el registro de la letra chica de un
   cartel— para que acredite sin competir con la marca ni con el botón. La
   regla que la cierra es lo que la ata al titular de abajo. */
.hero__credit{
  display:flex; align-items:center; flex-wrap:wrap;
  gap:.35rem clamp(.7rem, 1.8vw, 1.2rem);
  font-family:var(--headline); font-weight:500;
  font-size:clamp(.6rem, 1.05vw, .72rem);
  letter-spacing:.3em; text-transform:uppercase; color:var(--yellow);
  text-shadow:0 2px 14px rgba(0,0,0,.85);
  margin-bottom:clamp(.9rem, 2.2vh, 1.35rem);
}
.hero__credit::after{
  content:''; flex:1 1 40px; max-width:180px; height:1px;
  background:linear-gradient(90deg, rgba(245,197,24,.55), transparent);
}
/* Rombo dibujado, no el carácter ✦: ese dingbat lo resuelve cada sistema con
   la fuente que tenga a mano y en Android salía como un asterisco de emoji. */
.hero__credit-sep{
  display:inline-block; width:5px; height:5px; flex:none;
  background:rgba(245,197,24,.55); transform:rotate(45deg);
}
.hero__credit a{
  position:relative;
  display:inline-flex; align-items:center; gap:.45rem; color:var(--yellow);
  border-bottom:1px solid rgba(245,197,24,.35); padding-bottom:2px;
  transition:color .25s, border-color .25s;
}
/* Un renglón de letra chica mide 18 px de alto: como enlace es imposible de
   acertar con el dedo. Se le agranda el área que responde, no el texto —con
   padding, el subrayado se despegaría siete píxeles de las letras. */
.hero__credit a::after{ content:''; position:absolute; inset:-13px -10px; }
.hero__credit a:hover{ color:var(--yellow-2); border-color:var(--yellow-2); }
.hero__credit a svg{ opacity:.75; flex:none; }

/* --- Titular ---------------------------------------------------------------
   Dos palabras a brocha, la segunda en amarillo: el mismo gesto de los
   carteles pintados a mano de cualquier esquina de comida. La palabra
   resaltada va en <em> y no en un span con clase, que es como el resto del
   sitio marca lo destacado dentro de un título. */
.hero__mark{
  font-family:var(--marker); font-weight:400;
  font-size:clamp(2.6rem, 6.6vw, 6rem); line-height:.98;
  letter-spacing:.005em; text-transform:uppercase; color:var(--cream);
  text-shadow:0 8px 34px rgba(0,0,0,.8), 0 2px 3px rgba(0,0,0,.55);
}
.hero__mark em{ font-style:normal; color:var(--yellow); display:inline-block; }

/* Trazo con los colores de la bandera. El sesgo es lo que lo saca de "barra de
   tres colores" y lo mete en "pincelada". */
.hero__flag{
  display:block; width:clamp(132px, 19vw, 232px); height:clamp(7px, 1vw, 10px);
  margin:clamp(.65rem, 1.6vh, 1rem) 0 clamp(1.05rem, 2.5vh, 1.5rem);
  background:linear-gradient(90deg,
    var(--flag-1) 0 34%, var(--flag-2) 34% 67%, var(--flag-3) 67% 100%);
  transform:skewX(-16deg);
  box-shadow:0 8px 24px -10px rgba(0,0,0,.95);
}

.hero__sub{
  font-size:clamp(.94rem, 1.3vw, 1.02rem); color:rgba(245,239,230,.8);
  max-width:44ch; margin:0 0 clamp(1.5rem, 3.2vh, 2rem);
  font-weight:400; line-height:1.7;
  text-shadow:0 2px 16px rgba(0,0,0,.85);
  /* reparte los renglones para que el último no quede con una palabra suelta
     debajo del bloque; donde no esté soportado, se ignora y no pasa nada */
  text-wrap:balance;
}
/* Igual que en la bajada de la carta: lo destacado sube a crema plena en vez
   de cambiar de color. Son dos palabras, no cuatro; en cuanto se marcan más
   la línea deja de leerse de corrido. */
.hero__sub strong{ color:var(--cream); font-weight:600; }

.hero__cta{ display:flex; flex-wrap:wrap; gap:.7rem; }
/* El botón fantasma nació para fondo negro plano: sobre la foto se quedaba sin
   canto en cuanto el fondo aclaraba. Dentro del hero lleva fondo propio y
   desenfoque detrás, así siempre se lee como botón. */
.hero__cta .btn--ghost{
  background:rgba(11,10,9,.45); border-color:rgba(245,239,230,.3);
  -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
}
.hero__cta .btn--ghost:hover{ background:rgba(11,10,9,.62); }

/* --- Frase de la casa ------------------------------------------------------
   Escrita a mano en la esquina de la foto y girada, como puesta con plantilla
   sobre el papel del cartel. La curva de abajo es el remate del trazo: dos
   radios distintos en el borde inferior, no una imagen. */
.hero__note{
  justify-self:end; align-self:start;
  max-width:14ch; margin-top:clamp(0rem, 3vh, 2rem);
  font-family:var(--brush); font-weight:400;
  font-size:clamp(1rem, 1.85vw, 1.7rem); line-height:1.32;
  color:var(--yellow); text-align:right;
  transform:rotate(-4.5deg);
  text-shadow:0 4px 20px rgba(0,0,0,.95), 0 1px 2px rgba(0,0,0,.7);
}
.hero__note::after{
  content:''; display:block; width:62%; height:.42em;
  margin:.2em 0 0 auto;
  border-bottom:2px solid rgba(245,197,24,.6);
  border-radius:0 0 46% 46% / 0 0 100% 100%;
}

/* --- Promesas de la casa ---------------------------------------------------
   Cuatro renglones al pie de la portada, separados por filetes: de dónde sale
   la comida, cómo se hace y cuándo. Icono a la izquierda, título y detalle
   apilados a la derecha, con la misma anatomía que las fichas de la cabecera
   de la carta. */
.hero__marks{
  position:relative; z-index:3; width:100%; max-width:var(--wrap);
  margin-inline:auto;
  padding:0 var(--pad) clamp(1.2rem, 3vh, 1.9rem);
  display:grid; grid-template-columns:repeat(4, 1fr);
  gap:clamp(.9rem, 2.2vw, 1.8rem);
}
.hmark{
  position:relative;
  display:grid; align-items:center;
  grid-template-columns:auto 1fr; column-gap:.75rem;
  grid-template-areas:"ico titulo" "ico detalle";
}
/* El filete cae a media canaleta, así que se sitúa con el mismo hueco de la
   rejilla; sin líneas sueltas en los extremos. */
.hmark + .hmark::before{
  content:''; position:absolute; top:.1rem; bottom:.1rem;
  left:calc(clamp(.9rem, 2.2vw, 1.8rem) / -2); width:1px;
  background:var(--line);
}
.hmark__ico{
  grid-area:ico; display:flex; color:var(--yellow);
  font-size:clamp(1.5rem, 2.3vw, 1.95rem);
}
.hmark__ico .ico{ stroke-width:1.6; }
.hmark b{
  grid-area:titulo; font-family:var(--cond); font-weight:700;
  font-size:clamp(.82rem, 1.1vw, .95rem);
  letter-spacing:.09em; text-transform:uppercase; line-height:1.2;
}
.hmark > span:last-child{
  grid-area:detalle; color:var(--muted);
  font-size:.76rem; line-height:1.36;
}

/* --- Franja de platos ------------------------------------------------------
   Ocupa el pie del hero de lado a lado, con el filo superior rasgado como un
   cartel arrancado. Cada chip es un ancla al plato dentro de la carta; el
   activo se pinta de amarillo. */
.hero__strip{
  position:relative; z-index:2; width:100%;
  background:linear-gradient(180deg, var(--red) 0%, #B3150F 100%);
  box-shadow:0 -14px 40px -20px rgba(224,35,28,.8);
  clip-path:polygon(
    0 7px, 7% 1px, 15% 8px, 24% 2px, 34% 9px, 45% 2px, 56% 8px,
    67% 1px, 78% 8px, 89% 2px, 96% 7px, 100% 2px, 100% 100%, 0 100%);
}
.hero__strip-track{
  display:flex; align-items:stretch;
  /* algo más ancho que el resto del sitio: con 7 chips, ceñirla a --wrap
     dejaba dos franjas rojas vacías a los lados en monitores grandes */
  max-width:min(1560px, 100%); margin-inline:auto;
  padding-inline:calc(var(--pad) - .75rem);
  overflow-x:auto; scrollbar-width:none; -ms-overflow-style:none;
  scroll-snap-type:x proximity;
}
.hero__strip-track::-webkit-scrollbar{ display:none; }

.dchip{
  position:relative; flex:1 0 auto; scroll-snap-align:center;
  display:flex; align-items:center; justify-content:center; gap:.48rem;
  padding:.78rem .85rem .8rem; white-space:nowrap;
  font-family:var(--cond); font-weight:700; font-size:.79rem;
  letter-spacing:.07em; text-transform:uppercase;
  color:#fff;   /* blanco puro: sobre el rojo de marca da 4,75:1 y cumple AA */
  transition:background .22s var(--e), color .22s var(--e);
}
.dchip .ico{ width:17px; height:17px; stroke-width:1.7; opacity:.92; }
/* separador entre chips, sin líneas sueltas en los extremos */
.dchip + .dchip::before{
  content:''; position:absolute; left:0; top:.6rem; bottom:.6rem;
  width:1px; background:rgba(0,0,0,.22);
}
.dchip:hover{ background:rgba(0,0,0,.24); color:#fff; }
.dchip.is-active{ background:var(--yellow); color:var(--ink); }
.dchip.is-active .ico{ opacity:1; stroke-width:2; }
.dchip.is-active + .dchip::before,
.dchip.is-active::before{ opacity:0; }

/* Plato al que apunta un chip: se enmarca en amarillo al llegar y se apaga
   solo. Sin esto, en una carta de 18 platos no se sabe a cuál bajaste. */
.mitem.is-target{ animation:dishPing 2.4s var(--e); }
@keyframes dishPing{
  0%, 55%{
    box-shadow:0 0 0 2px var(--yellow), 0 0 34px -4px rgba(245,197,24,.55);
    background:rgba(245,197,24,.1);
  }
  100%{
    box-shadow:0 0 0 2px rgba(245,197,24,0), 0 0 34px -4px rgba(245,197,24,0);
    background:transparent;
  }
}
/* ---------- 10. ENCABEZADOS DE SECCIÓN ---------- */
.shead{ margin-bottom:clamp(1.75rem, 3vw, 2.75rem); max-width:62ch; }
.shead--center{ margin-inline:auto; text-align:center; }
.shead__kicker{
  display:inline-block; font-family:var(--cond); font-weight:700; font-size:.78rem;
  letter-spacing:.24em; text-transform:uppercase; color:var(--yellow);
  margin-bottom:.9rem; padding-left:2.6rem; position:relative;
}
/* La regla del rótulo lleva los tres colores. Es el gesto que más veces se
   repite en la página —hay uno por sección— así que es el que hace el trabajo
   de que el sitio se lea venezolano sin gritar. */
.shead__kicker::before{
  content:''; position:absolute; left:0; top:50%; width:34px; height:3px;
  background:var(--tricolor); transform:translateY(-50%);
  transform-origin:left center;
}
/* Se dibuja de izquierda a derecha cuando el encabezado entra en pantalla. Es
   el mismo gesto de una brocha y ata la bandera al movimiento de la página,
   en vez de dejarla como un adorno quieto. Solo se anima si el encabezado
   participa del reveal: si no, la regla está puesta desde el principio. */
.reveal .shead__kicker::before,
.shead__kicker.reveal::before{
  transform:translateY(-50%) scaleX(0);
  transition:transform .75s var(--e) .12s;
}
.reveal.is-in .shead__kicker::before,
.shead__kicker.reveal.is-in::before{ transform:translateY(-50%) scaleX(1); }

.reveal .eyebrow__line,
.eyebrow.reveal .eyebrow__line{
  transform:scaleX(0); transform-origin:left center;
  transition:transform .7s var(--e) .1s;
}
.reveal.is-in .eyebrow__line,
.eyebrow.reveal.is-in .eyebrow__line{ transform:scaleX(1); }
.shead--center .shead__kicker{ padding-left:0; }
.shead--center .shead__kicker::before{ display:none; }
.shead__title{
  font-family:var(--display); font-weight:400;
  font-size:clamp(1.8rem, 3.9vw, 3.1rem);
  line-height:.94; letter-spacing:-.01em; text-transform:uppercase;
  margin-bottom:1rem;
}
.shead__title em{ font-style:normal; color:var(--yellow); }
.shead__desc{ color:var(--muted); font-size:.94rem; max-width:56ch; }
.shead--center .shead__desc{ margin-inline:auto; }

/* ---------- 11. DESTACADOS ---------- */
.featured{ background:var(--ink); }
/* Cuatro tarjetas idénticas en una sola fila. Columnas explícitas (y no
   auto-fit) para que ningún ancho intermedio deje una tarjeta huérfana
   colgando sola en la segunda fila. */
.fgrid{
  display:grid; gap:.85rem;
  grid-template-columns:repeat(4, 1fr);
  align-items:stretch;
}
/* La rejilla de 4x2 se reparte a propósito para que el tamaño diga lo mismo
   que la carta: la insignia se lleva cuatro celdas, la segunda hamburguesa
   dos, y el dog y el bowl una cada uno. Seis de las ocho celdas son
   hamburguesa. Las cuentas cuadran exactas, así que no quedan huecos. */
.fcard--xl{ grid-column:span 2; grid-row:span 2; }
.fcard--wide{ grid-column:span 2; }
/* En la grande la foto deja de tener proporción fija y se come todo el alto
   sobrante: con 4/3 quedaba una franja muerta debajo del botón. */
.fcard--xl .fcard__img{ aspect-ratio:auto; flex:1 1 auto; min-height:260px; }
.fcard--wide .fcard__img{ aspect-ratio:16 / 9; }
/* El titular de la grande sube de cuerpo: si se queda igual que el de una
   tarjeta normal, el tamaño de la foto no se lee como jerarquía sino como
   un descuadre. */
.fcard--xl .fcard__top h3{ font-size:clamp(1.5rem, 2.8vw, 2.2rem); }
.fcard--xl .fcard__body{ padding:1.1rem 1.3rem 1.25rem; }
.fcard--xl .fcard__body p{ font-size:.9rem; max-width:52ch; }
.fcard{
  position:relative; background:var(--ink-2); border:1px solid var(--line);
  border-radius:var(--r); overflow:hidden; display:flex; flex-direction:column;
  height:100%;
  transition:transform .45s var(--e), border-color .35s, box-shadow .45s;
}
.fcard:hover{
  transform:translateY(-6px); border-color:rgba(245,197,24,.45);
  box-shadow:0 26px 60px -22px rgba(0,0,0,.9);
}

/* La foto manda su propia altura por relación de aspecto: así todas se
   recortan igual sin importar el tamaño original del archivo. */
.fcard__img{
  position:relative; overflow:hidden; background:var(--ink-3);
  flex:0 0 auto; aspect-ratio:4 / 3;
}
.fcard__img img{
  display:block; width:100%; height:100%; object-fit:cover; object-position:center;
  transition:transform .8s var(--e), filter .5s;
  filter:saturate(1.05);
}
.fcard:hover .fcard__img img{ transform:scale(1.07); }
.fcard__img::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(to top, rgba(11,10,9,.9) 0%, transparent 55%);
}

.tag{
  position:absolute; top:.85rem; left:.85rem; z-index:3;
  font-family:var(--cond); font-weight:700; font-size:.68rem;
  letter-spacing:.14em; text-transform:uppercase;
  padding:.3rem .6rem; border-radius:2px;
}
.tag--star{ background:var(--yellow); color:var(--ink); display:inline-flex; align-items:center; gap:.3rem; }
.tag--insignia{ background:var(--red); color:#fff; }

.fcard__body{
  padding:.9rem 1rem 1.05rem; position:relative; z-index:2; margin-top:-2.2rem;
  flex:1 1 auto; display:flex; flex-direction:column;
}
.fcard__top{
  display:flex; align-items:baseline; justify-content:space-between; gap:.8rem; margin-bottom:.5rem;
}
.fcard__top h3{
  font-family:var(--display); font-weight:400; font-size:clamp(1.1rem, 1.9vw, 1.45rem);
  letter-spacing:.005em; text-transform:uppercase; line-height:1;
}
.fcard__top .price{ font-size:1.06rem; color:var(--yellow); flex-shrink:0; }
.fcard__body p{
  color:var(--muted); font-size:.83rem; line-height:1.5; margin-bottom:.8rem;
}
/* Descripciones de distinto largo: el botón se empuja al fondo para que
   todos queden a la misma altura dentro de la fila. */
.fcard__body .btn--ver{ margin-top:auto; }

/* --- La tarjeta chica -------------------------------------------------------
   El cuerpo de la letra no lo decide el ancho de la PANTALLA sino el de la
   TARJETA: la misma pantalla de 430 px tiene tarjetas de fila entera y
   tarjetas de media fila, y solo las segundas van apretadas. Con una consulta
   por ancho de pantalla había que adivinar el punto de corte —lo probé a 420 y
   a 430 px ya se salía otra vez—; midiendo la tarjeta, el corte es el que es.

   El white-space va aparte y siempre: .btn viene con nowrap para que una
   llamada a la acción no se parta en dos, y en media tarjeta eso no se
   desbordaba con elegancia, se desbordaba y ya. Acá el rótulo puede partirse,
   que además es la red para el navegador que no entienda @container. */
.fcard{ container-type:inline-size; }
.fcard__body .btn--ver{ white-space:normal; }

@container (max-width: 210px){
  .fcard__body{ padding:.8rem .75rem .85rem; }
  .fcard__top{ gap:.4rem; margin-bottom:.4rem; }
  .fcard__top h3{ font-size:1rem; }
  .fcard__top .price{ font-size:.95rem; }
  .fcard__body p{ font-size:.78rem; margin-bottom:.7rem; }
  .fcard__body .btn--ver{
    font-size:.71rem; letter-spacing:.05em; padding:.55rem .4rem; gap:.3rem;
  }
}

/* Y en la tarjeta de un teléfono de 360, que baja de 160 px, la flecha es lo
   que hace que el rótulo no entre de un renglón. Se va ella: el botón sigue
   diciendo a dónde lleva, y dos renglones en una llamada a la acción del
   tamaño de un sello se leen como un descuadre. */
@container (max-width: 170px){
  .fcard__body .btn--ver .ico--fin{ display:none; }
}

/* ---------- 12. MENÚ ---------- */
.menu{ background:var(--ink-2); border-block:1px solid var(--line); }
.menu::before{
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.45;
  background-image:
    linear-gradient(var(--line-2) 1px, transparent 1px),
    linear-gradient(90deg, var(--line-2) 1px, transparent 1px);
  background-size:60px 60px;
  mask-image:radial-gradient(ellipse 80% 60% at 50% 0%, #000, transparent 75%);
  -webkit-mask-image:radial-gradient(ellipse 80% 60% at 50% 0%, #000, transparent 75%);
}
.menu > .wrap{ position:relative; z-index:1; }

.tabs{
  display:flex; flex-wrap:wrap; gap:.4rem; justify-content:center;
  margin-bottom:clamp(1.4rem, 2.5vw, 2.2rem);
}
.tab{
  font-family:var(--cond); font-weight:700; font-size:.83rem;
  letter-spacing:.12em; text-transform:uppercase; color:var(--muted);
  padding:.48rem .95rem; border:1.5px solid var(--line); border-radius:var(--r);
  transition:all .25s var(--e);
}
.tab:hover{ color:var(--cream); border-color:var(--muted-2); }
.tab.is-active{ background:var(--yellow); border-color:var(--yellow); color:var(--ink); }

/* --- Pistas de deslizamiento ------------------------------------------------
   Una tira que se corta puede leerse como "hay más" o como un error de
   maquetación. El fundido en el canto lo deja claro, y solo aparece del lado
   que todavía tiene contenido: si ya llegaste al final, el canto se ve limpio.
   Las clases las pone initTiras() escuchando el scroll de la propia tira. --- */
.tira--desliza{
  --corte-l:0px; --corte-r:0px;
  -webkit-mask-image:linear-gradient(90deg,
    transparent 0, #000 var(--corte-l), #000 calc(100% - var(--corte-r)), transparent 100%);
  mask-image:linear-gradient(90deg,
    transparent 0, #000 var(--corte-l), #000 calc(100% - var(--corte-r)), transparent 100%);
  transition:none;
}
.tira--desliza.tira--izq{ --corte-l:2.2rem; }
.tira--desliza.tira--der{ --corte-r:2.2rem; }

.menu__root{ display:flex; flex-direction:column; gap:clamp(1.75rem, 3vw, 3rem); }

.mcat{ display:grid; grid-template-columns:auto 1fr; gap:clamp(1.2rem, 3vw, 2.6rem); }
.mcat[hidden]{ display:none; }

/* etiqueta vertical (firma del menú impreso) */
.mcat__label{
  writing-mode:vertical-rl; transform:rotate(180deg);
  font-family:var(--display); font-weight:400;
  font-size:clamp(1.15rem, 2.2vw, 1.9rem); line-height:.9;
  letter-spacing:.01em; text-transform:uppercase;
  color:transparent; -webkit-text-stroke:1.6px rgba(245,239,230,.28);
  align-self:start; position:sticky; top:110px;
  transition:-webkit-text-stroke-color .4s;
  user-select:none;
}
.mcat--burgers .mcat__label{ -webkit-text-stroke-color:rgba(224,35,28,.6); }
.mcat--especiales .mcat__label{ -webkit-text-stroke-color:rgba(245,197,24,.55); }
.mcat--dogs .mcat__label{ -webkit-text-stroke-color:rgba(245,239,230,.3); }
.mcat--bowls .mcat__label{ -webkit-text-stroke-color:rgba(245,197,24,.45); }

.mcat__items{
  display:grid; grid-template-columns:repeat(auto-fill, minmax(268px, 1fr));
  gap:.55rem; align-content:start;
}

.mitem{
  position:relative; background:rgba(255,255,255,.018);
  border:1px solid var(--line-2); border-left:3px solid transparent;
  border-radius:var(--r); padding:.8rem .9rem;
  display:flex; flex-direction:column; gap:.3rem;
  transition:background .3s, border-color .3s, transform .3s var(--e);
}
.mitem:hover{
  background:rgba(255,255,255,.045); border-left-color:var(--yellow);
  transform:translateX(3px);
}
.mitem--hot{ background:rgba(245,197,24,.07); border-color:rgba(245,197,24,.24); }
.mitem--hot:hover{ background:rgba(245,197,24,.12); }

/* Miniatura del plato. No todos los platos tienen foto, así que la variante
   es opcional: sin ella el renglón se queda como estaba —nombre, puntos y
   precio— y con ella el bloque pasa a dos columnas, con la foto a la
   izquierda ocupando el alto entero. Las tres partes del renglón (cabeza,
   descripción y pie) caen solas en la segunda columna. */
.mitem--foto{
  display:grid; grid-template-columns:96px minmax(0, 1fr);
  gap:.3rem .9rem; align-items:start;
}
.mitem--foto > :not(.mitem__pic){ grid-column:2; }
.mitem__pic{
  grid-column:1; grid-row:1 / span 3; align-self:center;
  width:96px; height:96px; object-fit:cover;
  border-radius:calc(var(--r) - 5px);
  border:1px solid var(--line-2); background:var(--ink-3);
  transition:transform .4s var(--e);
}
.mitem:hover .mitem__pic{ transform:scale(1.04); }

.mitem__head{ display:flex; align-items:baseline; gap:.6rem; }
.mitem__name{
  font-family:var(--cond); font-weight:700; font-size:1.02rem;
  letter-spacing:.045em; text-transform:uppercase; line-height:1.15;
}
.mitem__dots{
  flex:1; border-bottom:1.5px dotted var(--muted-2); opacity:.55;
  transform:translateY(-4px); min-width:14px;
}
.mitem__price{ font-size:.95rem; color:var(--yellow); flex-shrink:0; }
.mitem__desc{ font-size:.79rem; color:var(--muted); line-height:1.45; }

/* wrap: con la miniatura al lado la columna de texto se angosta, y en
   telefono el trio favorito + insignia + boton se salia de la tarjeta. */
.mitem__foot{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; margin-top:.35rem; }
.mitem__star{
  display:inline-flex; align-items:center; gap:.28rem;
  font-size:.66rem; font-family:var(--cond); font-weight:700; letter-spacing:.12em;
  text-transform:uppercase; color:var(--yellow);
  border:1px solid rgba(245,197,24,.35); border-radius:2px; padding:.14rem .42rem;
}
.mitem__insignia{
  font-size:.66rem; font-family:var(--cond); font-weight:700; letter-spacing:.12em;
  text-transform:uppercase; color:#fff; background:var(--red);
  border-radius:2px; padding:.16rem .44rem;
}
.mitem__btn{
  margin-left:auto; display:inline-flex; align-items:center; gap:.3rem;
  font-family:var(--cond); font-weight:700; font-size:.78rem;
  letter-spacing:.11em; text-transform:uppercase; color:var(--ink);
  background:var(--yellow); border-radius:2px; padding:.4rem .75rem;
  transition:background .22s, transform .22s var(--e);
}
.mitem__btn:hover{ background:var(--yellow-2); transform:scale(1.05); }
.mitem__btn.added{ background:var(--wa); color:#04220F; }

/* agranda tu pedido */
.upsize{
  margin-top:clamp(1.75rem, 3vw, 2.75rem);
  background:linear-gradient(100deg, var(--red-deep), var(--red) 62%, #FF4A3D);
  border-radius:var(--r); padding:clamp(1.15rem, 2.4vw, 1.75rem);
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:1.2rem; position:relative; overflow:hidden;
}
.upsize::before{
  content:''; position:absolute; inset:0; opacity:.13;
  background-image:repeating-linear-gradient(-45deg, #000 0 12px, transparent 12px 24px);
}
.upsize__left{ position:relative; z-index:1; max-width:44ch; }
.upsize__kicker{
  display:block; font-family:var(--cond); font-weight:700; font-size:.76rem;
  letter-spacing:.24em; text-transform:uppercase; color:var(--yellow); margin-bottom:.45rem;
}
.upsize__left h3{
  font-family:var(--display); font-weight:400; font-size:clamp(1.2rem, 2.3vw, 1.75rem);
  text-transform:uppercase; line-height:1; color:#fff; margin-bottom:.5rem;
}
.upsize__left p{ color:rgba(255,255,255,.86); font-size:.92rem; }

.upsize__opts{ display:flex; gap:.75rem; position:relative; z-index:1; flex-wrap:wrap; }
.upsize__opt{
  background:rgba(11,10,9,.7); backdrop-filter:blur(6px);
  border:1.5px solid rgba(255,255,255,.16); border-radius:var(--r);
  padding:1rem 1.3rem; text-align:center; min-width:132px;
  transition:transform .3s var(--e), border-color .3s;
}
.upsize__opt:hover{ transform:translateY(-4px); border-color:var(--yellow); }
.upsize__ico{ display:block; font-size:2.1rem; margin-bottom:.3rem; color:var(--yellow); line-height:1; }
.upsize__ico .ico{ stroke-width:1.5; }
.upsize__opt b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.8rem;
  letter-spacing:.16em; text-transform:uppercase; color:var(--muted); margin-bottom:.25rem;
}
.upsize__opt .price{ font-size:1.45rem; color:var(--yellow); }
.upsize__opt--xl{ border-color:rgba(245,197,24,.45); }

.menu__note{
  text-align:center; margin-top:2rem; color:var(--muted-2); font-size:.86rem;
  display:flex; flex-wrap:wrap; gap:.7rem; justify-content:center; align-items:center;
}

/* ---------- 12b. PUERTA AL MENÚ (index.html) ----------
   La carta completa vive en menu.html. En la portada queda solo la entrada:
   qué categorías hay, desde cuánto, y que el domicilio se pide desde ahí.
   Hereda el fondo y la trama de .menu para que siga leyéndose como "la zona
   del menú" y el salto a la otra página no se sienta como otro sitio. */
.menucta{ background:var(--ink-2); border-block:1px solid var(--line); }
.menucta::before{
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.45;
  background-image:
    linear-gradient(var(--line-2) 1px, transparent 1px),
    linear-gradient(90deg, var(--line-2) 1px, transparent 1px);
  background-size:60px 60px;
  mask-image:radial-gradient(ellipse 80% 60% at 50% 0%, #000, transparent 75%);
  -webkit-mask-image:radial-gradient(ellipse 80% 60% at 50% 0%, #000, transparent 75%);
}
.menucta > .wrap{ position:relative; z-index:1; }

.menucta__grid{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:.7rem;
}
.mcard{
  display:flex; flex-direction:column; gap:.3rem;
  background:rgba(255,255,255,.022);
  border:1px solid var(--line-2); border-top:3px solid transparent;
  border-radius:var(--r); padding:1.2rem 1.1rem 1rem;
  transition:background .3s, border-color .3s, transform .3s var(--e);
}
.mcard{ position:relative; }
/* El filo superior es la bandera, no una línea amarilla: entra de izquierda a
   derecha al pasar por encima. El borde de 3px que ya existía sigue ahí
   reservando el sitio, así que la tarjeta no salta de alto. */
.mcard::before{
  content:''; position:absolute; left:0; right:0; top:-3px; height:3px;
  background:var(--tricolor); transform:scaleX(0); transform-origin:left;
  transition:transform .4s var(--e);
}
.mcard:hover::before{ transform:scaleX(1); }
.mcard:hover{
  background:rgba(255,255,255,.05);
  transform:translateY(-4px);
}
.mcard__ico{ color:var(--yellow); font-size:1.95rem; line-height:1; margin-bottom:.35rem; }
.mcard__ico .ico{ stroke-width:1.5; }
.mcard h3{
  font-family:var(--cond); font-weight:700; font-size:1.16rem;
  letter-spacing:.06em; text-transform:uppercase; line-height:1.1;
}
.mcard__meta{ font-size:.8rem; color:var(--muted); }
.mcard__meta .price{ color:var(--yellow); font-size:.86rem; }

/* Las dos de hamburguesa se llevan la fila de arriba entera y llevan el
   amarillo puesto, no solo al pasar por encima: son la mitad de la carta y
   lo que la gente viene a buscar. */
.mcard--destacada{
  grid-column:span 2;
  background:linear-gradient(150deg, rgba(245,197,24,.1), rgba(245,197,24,.02) 60%);
  border-color:rgba(245,197,24,.24);
}
/* Las destacadas llevan la bandera puesta desde el principio. */
.mcard--destacada::before{ transform:scaleX(1); }
.mcard--destacada:hover{ background:linear-gradient(150deg, rgba(245,197,24,.16), rgba(245,197,24,.04) 60%); }
.mcard--destacada .mcard__ico{ font-size:2.4rem; }
.mcard--destacada h3{ font-size:1.5rem; }
.mcard--destacada .mcard__meta{ font-size:.88rem; color:var(--cream); }
.mcard--destacada .mcard__go{ color:var(--yellow); }
/* la insignia de la casa: un sello chico, no otro botón */
.mcard__tag{
  align-self:flex-start; margin-top:.45rem;
  font-family:var(--cond); font-weight:700; font-size:.68rem;
  letter-spacing:.13em; text-transform:uppercase;
  background:var(--red); color:#fff; padding:.24rem .55rem; border-radius:2px;
}
/* al fondo de la tarjeta: si un "N platos · desde $X" se parte en dos
   renglones, los "Ver →" de la fila siguen alineados entre sí */
.mcard__go{
  margin-top:auto; padding-top:.75rem;
  display:inline-flex; align-items:center; gap:.35rem;
  font-family:var(--cond); font-weight:700; font-size:.76rem;
  letter-spacing:.16em; text-transform:uppercase; color:var(--muted-2);
  transition:color .25s, gap .25s var(--e);
}
.mcard__go .ico{ width:15px; height:15px; }
.mcard:hover .mcard__go{ color:var(--yellow); gap:.62rem; }

.menucta__panel{
  margin-top:clamp(1.1rem, 2.4vw, 1.75rem);
  position:relative; overflow:hidden;
  background:var(--ink-3); border:1px solid var(--line);
  border-left:3px solid var(--yellow); border-radius:var(--r);
  padding:clamp(1.15rem, 2.4vw, 1.75rem);
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:1.5rem;
}
.menucta__panel::before{
  content:''; position:absolute; right:-8%; top:50%; transform:translateY(-50%);
  width:min(420px, 60%); aspect-ratio:1; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle, rgba(245,197,24,.15), transparent 65%);
}
.menucta__copy{ position:relative; z-index:1; max-width:54ch; }
.menucta__kicker{
  display:inline-flex; align-items:center; gap:.45rem;
  font-family:var(--cond); font-weight:700; font-size:.76rem;
  letter-spacing:.2em; text-transform:uppercase; color:var(--yellow);
  margin-bottom:.5rem;
}
.menucta__kicker .ico{ width:18px; height:18px; }
.menucta__copy h3{
  font-family:var(--display); font-weight:400;
  font-size:clamp(1.4rem, 2.8vw, 2.1rem); line-height:.95;
  text-transform:uppercase; margin-bottom:.55rem;
}
.menucta__copy p{ color:var(--muted); font-size:.93rem; }
.menucta__actions{
  display:flex; flex-wrap:wrap; gap:.7rem; position:relative; z-index:1; flex-shrink:0;
}

/* ---------- 12c. CABECERA DE LA CARTA (menu.html) ----------
   Una banda, no una portada. Acá había un .mhero de pantalla completa con
   foto y dos botones —uno de ellos para bajar hasta la carta que estaba justo
   debajo—: media pantalla de scroll para llegar a lo único que esta página
   tiene que enseñar. Quien entra al menú ya decidió comer acá; no hay nada
   que venderle, hay que enseñarle los platos.

   Queda lo que sí hace falta: de qué página se trata (el h1, que también es
   el título para el buscador) y las tres cosas que hay que saber ANTES de
   armarse un pedido de $80.000 —que hay domicilio, que se puede recoger y
   hasta qué hora—. En pantalla ancha esas tres van al lado del título y no
   debajo, que es lo que mantiene la banda en una sola altura de vistazo.

   El .mhero de abajo no se toca: reservar.html lo sigue usando. */
.mtop{
  padding-block:clamp(1.5rem, 3vw, 2.4rem);
  border-bottom:1px solid var(--line);
  background:
    radial-gradient(120% 140% at 12% 0%, rgba(245,197,24,.07), transparent 62%),
    var(--ink);
}
.mtop .crumb{ margin-bottom:.9rem; }
.mtop__row{
  display:grid; gap:clamp(1rem, 2.6vw, 2rem); align-items:center;
  grid-template-columns:minmax(0, 1fr);
}
@media (min-width:900px){
  .mtop__row{ grid-template-columns:minmax(0, 1fr) auto; }
}
.mtop__id{ min-width:0; }
.mtop .eyebrow{ margin-bottom:.5rem; }
.mtop__title{
  font-family:var(--headline); font-weight:800;
  font-size:clamp(1.75rem, 4.2vw, 2.7rem); line-height:1;
  letter-spacing:-.02em; text-transform:uppercase; margin-bottom:.55rem;
}
/* El nombre de la marca sigue a pincel: es medio segundo de personalidad y no
   cuesta una línea más, porque va en el mismo renglón del título. */
.mtop__title i{
  font-family:var(--brush); font-weight:400; font-style:normal;
  font-size:1.15em; text-transform:none; letter-spacing:0; color:var(--yellow);
}
.mtop__sub{
  color:var(--muted); font-size:.92rem; line-height:1.6; max-width:56ch;
}
.mtop__sub strong{ color:var(--cream); font-weight:600; }
.mtop__sub a{
  color:var(--yellow); text-decoration:underline; text-underline-offset:3px;
  white-space:nowrap; transition:color .25s;
}
.mtop__sub a:hover{ color:var(--cream); }

/* Sin icono. Una moto, una tienda y un reloj amarillos apilados pesaban más
   que las tres palabras que tenían al lado, y ninguno decía nada que
   "Domicilio", "Recoger" y la hora no dijeran ya. Queda el dato pelado, que
   es lo que se venía a leer. */
.mtop__facts{ display:flex; flex-wrap:wrap; gap:.5rem; }
.mtop__facts li{
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  padding:.5rem .85rem;
}
.mtop__facts b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.86rem;
  letter-spacing:.06em; text-transform:uppercase; line-height:1.2;
  color:var(--yellow);
}
.mtop__facts li > span{
  display:block; font-size:.72rem; color:var(--muted); line-height:1.3;
}
/* En pantalla ancha la columna de la derecha es una pila de tres y no una
   fila: al lado del título, tres cajas en línea no caben sin apretar. */
@media (min-width:900px){
  .mtop__facts{ flex-direction:column; gap:.45rem; min-width:14rem; }
}

/* La carta arranca enseguida: sin encabezado de sección propio, el aire de
   arriba puede ser el de una continuación y no el de una sección nueva. */
.menu--directo{ padding-top:clamp(1.5rem, 3vw, 2.4rem); }

/* ---------- 12d. CABECERA DE LA RESERVA (reservar.html) ----------
   La misma banda con foto que tenía el menú, que allá sí gana: la reserva es
   una decisión que se toma con la imagen del salón delante. */
.mhero{
  position:relative; overflow:hidden;
  padding-block:clamp(2.4rem, 5.5vw, 4.5rem);
  border-bottom:1px solid var(--line);
}
.mhero__bg{ position:absolute; inset:0; z-index:0; }
.mhero__bg img{
  width:100%; height:100%; object-fit:cover; object-position:50% 45%;
  scale:1.08; translate:0 var(--par, 0px);
  filter:saturate(.85) contrast(1.06);
}
.mhero__scrim{
  position:absolute; inset:0; z-index:1;
  background:
    linear-gradient(100deg, var(--ink) 0%, rgba(11,10,9,.94) 40%, rgba(11,10,9,.6) 72%, rgba(11,10,9,.78) 100%),
    linear-gradient(to bottom, rgba(11,10,9,.72), transparent 38%, rgba(11,10,9,.92));
}
.mhero__inner{ position:relative; z-index:2; }

.crumb{
  display:flex; align-items:center; gap:.5rem; margin-bottom:1.25rem;
  font-family:var(--cond); font-weight:600; font-size:.76rem;
  letter-spacing:.16em; text-transform:uppercase; color:var(--muted-2);
}
.crumb a{ color:var(--muted); transition:color .25s; }
.crumb a:hover{ color:var(--yellow); }
.crumb b{ color:var(--cream); font-weight:600; }

.mhero__title{
  font-family:var(--headline); font-weight:800;
  font-size:clamp(2rem, 5.6vw, 3.3rem); line-height:.98;
  letter-spacing:-.02em; text-transform:uppercase;
  margin-bottom:1rem; text-shadow:0 2px 20px rgba(0,0,0,.7);
}
.mhero__title span{ display:block; }
.mhero__brush{
  font-family:var(--brush); font-weight:400; font-size:1.18em;
  text-transform:none; letter-spacing:0; color:var(--yellow);
  line-height:1.1; margin-top:-.04em;
}
.mhero__brush i{ font-style:normal; }

.mhero__sub{
  color:var(--muted); font-size:clamp(.95rem, 1.6vw, 1.05rem);
  max-width:58ch; margin-bottom:1.5rem; text-shadow:0 2px 16px rgba(0,0,0,.65);
}
.mhero__sub strong{ color:var(--cream); font-weight:600; }

/* icono a la izquierda, título y detalle apilados a la derecha */
.mhero__facts{ display:flex; flex-wrap:wrap; gap:.6rem; margin-bottom:1.6rem; }
.mhero__facts li{
  display:grid; column-gap:.65rem; align-items:center;
  grid-template-columns:auto 1fr;
  grid-template-areas:"ico titulo" "ico detalle";
  background:rgba(11,10,9,.6); backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  border:1px solid var(--line); border-radius:var(--r);
  padding:.6rem .95rem;
}
.mhero__ico{ grid-area:ico; display:flex; color:var(--yellow); font-size:1.35rem; }
.mhero__ico .ico{ stroke-width:1.7; }
.mhero__facts b{
  grid-area:titulo; font-family:var(--cond); font-weight:700; font-size:.92rem;
  letter-spacing:.06em; text-transform:uppercase; line-height:1.2;
}
.mhero__facts li > span:last-child{
  grid-area:detalle; font-size:.74rem; color:var(--muted); line-height:1.3;
}

.mhero__cta{ display:flex; flex-wrap:wrap; gap:.7rem; }

/* ---------- 12e. CÓMO PEDIR A DOMICILIO (menu.html) ---------- */
.howto{ background:var(--ink); }
.steps{ display:grid; grid-template-columns:repeat(3, 1fr); gap:.85rem; }
.step{
  position:relative; overflow:hidden;
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  padding:1.5rem 1.25rem 1.35rem;
  display:flex; flex-direction:column; gap:.45rem;
  transition:transform .3s var(--e), border-color .3s, background .3s;
}
.step:hover{
  transform:translateY(-4px); border-color:rgba(245,197,24,.4); background:var(--ink-3);
}
.step__num{
  position:absolute; top:.35rem; right:.95rem; pointer-events:none; user-select:none;
  font-family:var(--display); font-weight:400; font-size:3.6rem; line-height:1;
  color:transparent; -webkit-text-stroke:1.5px rgba(245,197,24,.28);
}
.step__ico{ color:var(--yellow); font-size:1.9rem; line-height:1; margin-bottom:.2rem; }
.step__ico .ico{ stroke-width:1.5; }
.step h3{
  font-family:var(--cond); font-weight:700; font-size:1.14rem;
  letter-spacing:.05em; text-transform:uppercase; line-height:1.15;
}
.step p{ color:var(--muted); font-size:.86rem; line-height:1.5; }
.step strong{ color:var(--cream); font-weight:600; }

.howto .soon{ margin-top:clamp(1.1rem, 2.4vw, 1.6rem); }
.howto__cards{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:.85rem;
  margin-top:.85rem;
}

/* ---------- 13. GALERÍA ---------- */
.gallery{ background:var(--ink); }
.ggrid{
  display:grid; gap:16px;
  grid-template-columns:2fr 1fr 1fr;
  grid-auto-rows:220px;
}
.gitem{
  position:relative; overflow:hidden; border-radius:var(--r);
  background:var(--ink-3); cursor:zoom-in; border:1px solid var(--line-2);
}
/* Bento de 3 columnas. Cada pieza va con fila y columna explícitas, no con
   span: con span, el auto-placement dejaba libre la celda inferior derecha
   (6 fotos contra 12 celdas) y ahí salía el hueco. Así la grilla queda
   exacta —2+1+1+1+1+6 = 12 celdas— y el borde inferior sale a ras.
   La banda de abajo se lleva "la mesa completa", que es la toma más ancha,
   y ocupa dos filas: a una sola quedaba un recorte de 5:1, casi un friso. */
.gitem--a{ grid-column:1; grid-row:1 / span 2; }
.gitem--b{ grid-column:2; grid-row:1; }
.gitem--c{ grid-column:3; grid-row:1; }
.gitem--d{ grid-column:2; grid-row:2; }
.gitem--f{ grid-column:3; grid-row:2; }
.gitem--e{ grid-column:1 / -1; grid-row:3 / span 2; }

/* La foto se mueve más despacio que la página: --par se lo escribe el bucle
   de scroll, frame a frame.

   Van en las propiedades sueltas `scale` y `translate` y no en un `transform`
   con las dos cosas adentro a propósito: la transición es SOLO del zoom. Si el
   paralaje entrara en la misma declaración, heredaría esa transición de .9s y
   la foto iría siempre nueve décimas por detrás del dedo.

   El zoom base es lo que da margen para moverse sin descubrir el borde. */
.gitem img{
  width:100%; height:100%; object-fit:cover;
  scale:var(--zoom, 1.08);
  translate:0 var(--par, 0px);
  transition:scale .9s var(--e), filter .5s;
  filter:saturate(.92) contrast(1.03);
}
.gitem:hover img{ --zoom:1.14; filter:saturate(1.15) contrast(1.06); }
.gitem::after{
  content:''; position:absolute; inset:0;
  background:linear-gradient(to top, rgba(11,10,9,.88), transparent 52%);
  opacity:.85; transition:opacity .4s;
}
.gitem:hover::after{ opacity:.6; }
.gitem figcaption{
  position:absolute; left:0; bottom:0; z-index:2; padding:.85rem 1rem;
  font-family:var(--cond); font-weight:700; font-size:.86rem;
  letter-spacing:.14em; text-transform:uppercase; color:var(--cream);
  transform:translateY(4px); opacity:.9; transition:transform .4s var(--e), opacity .3s;
}
.gitem:hover figcaption{ transform:translateY(0); opacity:1; color:var(--yellow); }

/* ---------- 14. NOSOTROS ----------
   Dos columnas: el equipo a la izquierda y todo el texto a la derecha. El
   celular es la pieza más alta de la fila, así que manda el alto de la
   sección: por eso su ancho lleva tope contra el viewport (ver .phone) y
   la columna de texto se centra contra él. */
.about{ background:var(--ink-2); border-block:1px solid var(--line); position:relative; }
/* La columna de texto se tapa en 640px (por encima, los renglones pasan de
   80 caracteres) y el par se centra en la fila: así no queda un hueco muerto
   a la derecha en pantallas anchas. */
.about__grid{
  display:grid; grid-template-columns:auto minmax(0, 640px);
  justify-content:center;
  gap:clamp(1.5rem, 4.5vw, 4rem); align-items:center;
}
.about__video{ position:relative; display:flex; justify-content:center; }

/* ---------- 14b. MOCKUP iPHONE 17 PRO ----------
   Todo se deriva de --phone-w para poder escalarlo en un solo sitio.
   Las proporciones salen del equipo real: pantalla 9:19.5, isla al 32%
   del ancho y radio de esquina ~15,5%. */
.phone{
  /* El alto sale del ancho (9:19.5), así que un ancho suelto se desborda de
     la pantalla enseguida: a 360px el equipo mide 780px de alto. Por eso el
     ancho va acotado también contra la altura del viewport — 36vh equivale a
     ~78vh de mockup — y la sección entra completa sin pisar el header. */
  --phone-w:min(clamp(280px, 22vw, 360px), 36vh);
  --phone-r:calc(var(--phone-w) * .155);
  --phone-pad:calc(var(--phone-w) * .033);
  /* grosor de los botones laterales: a este tamaño 2px fijos se perdían */
  --phone-btn:max(2px, calc(var(--phone-w) * .0072));
  position:relative; width:var(--phone-w); flex:none;
  padding:var(--phone-pad); border-radius:var(--phone-r);
  /* riel de titanio: el degradado imita el reflejo del canto pulido */
  background:
    linear-gradient(160deg, #6d6a64 0%, #2a2825 16%, #57534c 34%, #1c1a18 52%,
                    #4c4842 70%, #232120 86%, #6a6760 100%);
  box-shadow:
    0 0 0 1px rgba(0,0,0,.85),
    inset 0 0 0 1px rgba(255,255,255,.16),
    0 56px 110px -38px rgba(0,0,0,.95),
    0 18px 44px -22px rgba(0,0,0,.82);
}
/* halo cálido detrás del equipo, reemplaza al marco amarillo anterior.
   Va en el contenedor y no en .phone: un ::after con z-index negativo
   se pinta encima del fondo del propio elemento, no detrás. */
.about__video::before{
  content:''; position:absolute; z-index:0;
  left:50%; top:8%; width:min(150%, 520px); height:86%;
  transform:translateX(-50%);
  background:radial-gradient(ellipse at center, rgba(240,185,26,.17), transparent 66%);
  filter:blur(22px); pointer-events:none;
}
.about__video .phone{ z-index:1; }

/* Botones laterales. El del lado izquierdo se repite con box-shadow
   (acción + volumen) para no meter tres elementos vacíos más. */
.phone__side{
  position:absolute; width:var(--phone-btn); border-radius:2px;
  background:linear-gradient(90deg, #7d7972, #35322e);
}
.phone__side--l{ left:calc(var(--phone-btn) * -1); top:19%; height:5.5%; }
.phone__side--l::before,
.phone__side--l::after{
  content:''; position:absolute; left:0; width:100%; border-radius:2px;
  background:inherit;
}
.phone__side--l::before{ top:210%; height:170%; }
.phone__side--l::after{ top:420%; height:170%; }
.phone__side--r{ right:calc(var(--phone-btn) * -1); top:27%; height:11%; }

.phone__screen{
  position:relative; overflow:hidden;
  border-radius:calc(var(--phone-r) - var(--phone-pad));
  aspect-ratio:9/19.5; background:#000;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.9);
}
.phone__screen video{
  width:100%; height:100%; object-fit:cover; display:block;
}
.phone__island{
  position:absolute; top:2.6%; left:50%; transform:translateX(-50%);
  width:32%; height:calc(var(--phone-w) * .092);
  background:#000; border-radius:100px; z-index:3;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.06);
}
/* lente frontal dentro de la isla */
.phone__island::after{
  content:''; position:absolute; right:16%; top:50%; transform:translateY(-50%);
  width:26%; aspect-ratio:1; border-radius:50%;
  background:radial-gradient(circle at 34% 30%, #24304a 0%, #0b0d14 60%, #000 100%);
}
.phone__home{
  position:absolute; bottom:1.1%; left:50%; transform:translateX(-50%);
  width:34%; height:clamp(3px, calc(var(--phone-w) * .011), 4.5px); border-radius:5px;
  background:rgba(255,255,255,.75); z-index:4; pointer-events:none;
}

.about__vlabel{
  position:absolute; top:calc(var(--phone-w) * .155); left:0; z-index:4;
  background:var(--yellow); color:var(--ink);
  font-family:var(--cond); font-weight:700;
  font-size:clamp(.62rem, calc(var(--phone-w) * .032), .8rem);
  letter-spacing:.12em; text-transform:uppercase;
  padding:.3rem .56rem .3rem .62rem; border-radius:0 2px 2px 0;
  pointer-events:none;
}

/* Controles propios: los nativos de <video> se veían enormes dentro
   de una pantalla de 200px y rompían la ilusión del equipo. */
.phone__tap{
  position:absolute; inset:0; z-index:3; cursor:pointer;
  display:grid; place-items:center;
  background:linear-gradient(to top, rgba(0,0,0,.5), transparent 42%);
  border:0; padding:0; transition:background .35s var(--e);
}
.phone__playbtn{
  display:grid; place-items:center;
  width:clamp(52px, calc(var(--phone-w) * .23), 84px); aspect-ratio:1; border-radius:50%;
  background:rgba(11,10,9,.5); backdrop-filter:blur(6px);
  border:1.5px solid rgba(247,243,235,.8);
  transition:transform .3s var(--e), opacity .3s, background .3s;
}
.phone:hover .phone__playbtn{ background:var(--yellow); border-color:var(--yellow); }
.phone:hover .phone__playbtn .phone__ico{ fill:var(--ink); }
.phone__tap:focus-visible{ outline:2px solid var(--yellow); outline-offset:3px; }
.phone__ico{ width:46%; fill:var(--cream); transition:fill .3s; }
.phone__ico--play{ margin-left:6%; }
.phone__ico--pause{ display:none; }

/* Reproduciendo: el overlay se aparta y solo vuelve al pasar el cursor. */
.phone.is-playing .phone__tap{ background:transparent; }
.phone.is-playing .phone__playbtn{ opacity:0; transform:scale(.8); }
.phone.is-playing:hover .phone__playbtn{ opacity:1; transform:none; }
.phone.is-playing .phone__ico--play{ display:none; }
.phone.is-playing .phone__ico--pause{ display:block; }

.phone__full{
  position:absolute; z-index:4; right:6%; bottom:5.4%;
  width:clamp(28px, calc(var(--phone-w) * .11), 40px); aspect-ratio:1; display:grid; place-items:center;
  border-radius:50%; border:0; cursor:pointer;
  background:rgba(11,10,9,.55); backdrop-filter:blur(4px);
  transition:background .25s, transform .25s var(--e);
}
.phone__full:hover{ background:var(--yellow); transform:scale(1.08); }
.phone__full svg{
  width:56%; fill:none; stroke:var(--cream); stroke-width:2.2;
  stroke-linecap:round; stroke-linejoin:round;
}
.phone__full:hover svg{ stroke:var(--ink); }

.phone__bar{
  position:absolute; z-index:4; left:6%; right:6%; bottom:3.4%;
  height:clamp(2.5px, calc(var(--phone-w) * .008), 3.5px);
  border-radius:4px; background:rgba(247,243,235,.25);
  overflow:hidden; pointer-events:none;
}
.phone__bar i{
  display:block; width:0; height:100%; background:var(--yellow);
  transition:width .18s linear;
}

.about__text .shead__title{
  font-size:clamp(1.9rem, 3.4vw, 3.2rem); margin-block:.7rem 1.4rem;
}
.about__text p{ color:var(--muted); margin-bottom:.9rem; font-size:.95rem; }
.about__text strong{ color:var(--cream); font-weight:600; }

.quote{
  border-left:3px solid var(--yellow); padding:.25rem 0 .25rem 1.15rem;
  margin-block:clamp(1.35rem, 2.2vw, 1.9rem);
}
.quote p{
  font-family:var(--cond); font-weight:600; font-style:italic;
  font-size:clamp(1.05rem, 2vw, 1.4rem); line-height:1.35;
  color:var(--cream) !important; margin-bottom:.55rem !important;
}
.quote cite{
  font-family:var(--cond); font-style:normal; font-weight:700; font-size:.78rem;
  letter-spacing:.18em; text-transform:uppercase; color:var(--yellow);
}

/* Cierre de la columna: tres celdas iguales con filete entre ellas, para
   que las cifras no bailen según el largo de cada etiqueta. */
.about__stats{
  display:grid; grid-template-columns:repeat(3, minmax(0, 1fr));
  margin-top:clamp(1.5rem, 2.4vw, 2.1rem);
  padding-top:clamp(1.3rem, 2vw, 1.7rem);
  border-top:1px solid var(--line);
}
.about__stats li{
  display:flex; flex-direction:column;
  padding-inline:clamp(.7rem, 1.6vw, 1.3rem);
}
.about__stats li:first-child{ padding-left:0; }
.about__stats li + li{ border-left:1px solid var(--line); }
.about__stats b{
  font-family:var(--display); font-size:clamp(1.6rem, 2.9vw, 2.3rem);
  color:var(--yellow); line-height:1;
}
.about__stats span{
  font-family:var(--cond); font-size:.8rem; font-weight:600; letter-spacing:.08em;
  text-transform:uppercase; color:var(--muted); margin-top:.4rem;
  line-height:1.35;
}

/* ---------- 15. UBICACIÓN ---------- */
.location{ background:var(--ink); }

/* Las dos sedes, en paralelo y con el mismo peso: ninguna es "la principal".
   Cada tarjeta lleva su propio mapa arriba y la dirección debajo. */
.sedes{
  display:grid; grid-template-columns:repeat(2, 1fr); gap:.85rem;
  margin-bottom:.85rem;
}
.sede{
  display:flex; flex-direction:column; overflow:hidden;
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  transition:transform .35s var(--e), border-color .3s;
}
.sede:hover{ transform:translateY(-4px); border-color:rgba(245,197,24,.4); }
.sede__map{ position:relative; background:var(--ink-3); }
.sede__map iframe{
  width:100%; height:100%; min-height:260px; display:block;
  filter:grayscale(.35) contrast(1.05);
}
.sede__body{
  padding:1.05rem 1.15rem 1.15rem;
  display:flex; flex-direction:column; flex:1;
}
.sede__tag{
  display:inline-flex; align-items:center; gap:.42rem; align-self:flex-start;
  font-family:var(--cond); font-weight:700; font-size:.68rem;
  letter-spacing:.2em; text-transform:uppercase; color:var(--muted);
  border:1px solid var(--line); border-radius:2px; padding:.2rem .5rem;
  margin-bottom:.6rem;
}
.sede__tag--nueva{ color:var(--yellow); border-color:rgba(245,197,24,.42); }
.sede__body h3{
  font-family:var(--display); font-weight:400; font-size:clamp(1.3rem, 2.4vw, 1.75rem);
  line-height:1; text-transform:uppercase; margin-bottom:.4rem;
}
.sede__body p{ color:var(--muted); font-size:.88rem; line-height:1.55; }
.sede__dir{ margin-bottom:.85rem; }

/* --- Los datos del local -------------------------------------------------
   Esta lista salía SIN una sola regla de CSS: el icono pegado a la palabra
   —"🕐Lunes a domingo"— y los renglones uno encima de otro. Ahora es una
   rejilla de dos columnas, el icono en su carril y el texto en el suyo, con
   la separación de puntos que ya usa el resto de la casa para decir "esto
   es la ficha técnica". --- */
.sede__datos{
  display:grid; gap:.5rem;
  padding-top:.85rem; border-top:1px dashed var(--line);
}
.sede__datos li{
  display:grid; grid-template-columns:auto 1fr; gap:.6rem; align-items:start;
  font-size:.86rem; line-height:1.45; color:var(--muted);
}
.sede__datos .ico{ color:var(--yellow); font-size:1rem; margin-top:.16em; }
.sede__datos b{ color:var(--cream); font-weight:600; }

/* --- Lo que se hace desde acá --------------------------------------------
   Eran cuatro enlaces iguales, en versalitas y con la misma flecha, uno
   debajo de otro: una columna donde nada pesaba más que nada y había que
   leerla entera para elegir. Ahora los dos que la gente viene a tocar son
   botones —pedir y escribir— y el mapa y la página de la ciudad quedan de
   renglón callado debajo. --- */
/* Tope de ancho: en la página de ciudad hay una sola tarjeta a todo lo ancho
   y sin esto los dos botones se estiraban a 600 px cada uno, que ya no se lee
   como un botón sino como una franja. En teléfono el tope no alcanza a
   aplicar, así que ahí siguen ocupando todo. */
.sede__acciones{
  display:flex; flex-wrap:wrap; gap:.5rem;
  margin-top:auto; padding-top:1.05rem; max-width:30rem;
}
.sede__btn{
  /* 11rem de base y no menos: es el ancho a partir del cual "Pedir a
     domicilio" cabe sin partirse. Con una base más chica los dos botones se
     quedaban en el mismo renglón en un teléfono angosto y, como el texto no
     se parte, la fila se salía de la tarjeta. Con esta, cuando no caben, el
     segundo baja y los dos quedan a todo el ancho — que además es el tamaño
     que quiere un pulgar. */
  flex:1 1 11rem;
  display:inline-flex; align-items:center; justify-content:center; gap:.45rem;
  padding:.72rem .9rem; border-radius:var(--r);
  font-family:var(--cond); font-weight:700; font-size:.82rem;
  letter-spacing:.1em; text-transform:uppercase; white-space:nowrap;
  transition:background .25s, border-color .25s, color .25s, transform .25s var(--e), box-shadow .3s;
}
.sede__btn .ico{ font-size:1.05rem; }
.sede__btn--pedir{ background:var(--yellow); color:var(--ink); }
.sede__btn--pedir:hover{
  background:var(--yellow-2); transform:translateY(-2px);
  box-shadow:0 12px 26px -12px rgba(245,197,24,.7);
}
/* Verde el de WhatsApp: el color dice qué abre antes que la palabra, y evita
   que los dos botones compitan por ser el mismo. */
.sede__btn--wa{
  background:transparent; color:var(--cream);
  border:1.5px solid rgba(37,211,102,.45);
  /* El número va en cifras de ancho fijo: es lo que se copia y se dicta. */
  font-family:var(--mono); font-size:.84rem; letter-spacing:.02em;
}
.sede__btn--wa:hover{
  background:var(--wa); border-color:var(--wa); color:#04220F; transform:translateY(-2px);
}

.sede__mas{
  display:flex; flex-wrap:wrap; gap:.2rem 1.1rem;
  margin-top:.85rem; padding-top:.75rem; border-top:1px solid var(--line-2);
}
.sede__mas a{
  font-size:.79rem; color:var(--muted);
  transition:color .25s, transform .25s var(--e);
}
.sede__mas a:hover{ color:var(--yellow); }
.sede__mas .ico--fin{ transition:transform .25s var(--e); }
.sede__mas a:hover .ico--fin{ transform:translateX(3px); }

.loc__grid{ display:grid; grid-template-columns:1.15fr 1fr; gap:.85rem; }
.loc__map{
  border-radius:var(--r); overflow:hidden; border:1px solid var(--line);
  min-height:380px; position:relative; background:var(--ink-3);
}
.loc__map iframe{ width:100%; height:100%; min-height:380px; filter:grayscale(.35) contrast(1.05); }

/* Tres tarjetas desde que los mapas se fueron a las sedes */
.loc__cards{ display:grid; grid-template-columns:repeat(3, 1fr); gap:.85rem; }
.lcard{
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  padding:1.05rem 1.05rem; display:flex; flex-direction:column;
  transition:transform .35s var(--e), border-color .3s, background .3s;
}
.lcard:hover{ transform:translateY(-4px); border-color:rgba(245,197,24,.4); background:var(--ink-3); }
.lcard__ico{
  display:grid; place-content:center; width:34px; height:34px; margin-bottom:.65rem;
  border-radius:2px; background:rgba(245,197,24,.12); color:var(--yellow); font-size:1.05rem;
}
.lcard h3{
  font-family:var(--cond); font-weight:700; font-size:.95rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--yellow); margin-bottom:.5rem;
}
.lcard p{ color:var(--muted); font-size:.86rem; line-height:1.5; }
.lcard strong{ color:var(--cream); font-weight:600; }
.lcard__link{
  padding-top:.5rem;
  font-family:var(--cond); font-weight:700; font-size:.82rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--cream);
  transition:color .25s, transform .25s var(--e); display:block; width:fit-content;
}
.lcard__link:first-of-type{ margin-top:auto; padding-top:.9rem; }
.lcard__link:hover{ color:var(--yellow); transform:translateX(4px); }
/* La flecha del final de un enlace es un icono del sprite, no el carácter →:
   así hereda el color y el grosor de trazo del resto y no depende de que la
   fuente del sistema tenga ese glifo. */
.ico--fin{ width:.95em; height:.95em; margin-left:.35em; vertical-align:-.1em; }
.lcard__link .ico--fin{ transition:transform .25s var(--e); }
.lcard__link:hover .ico--fin{ transform:translateX(3px); }
.lcard--promo{
  background:linear-gradient(150deg, rgba(245,197,24,.14), rgba(224,35,28,.1));
  border-color:rgba(245,197,24,.32);
}

/* nueva sede — próximamente */
.soon{
  margin-top:.85rem; position:relative; overflow:hidden;
  background:var(--ink-2); border:1px solid var(--line);
  border-radius:var(--r); padding:clamp(1.15rem, 2.4vw, 1.75rem);
  display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between;
  gap:1.5rem;
}
.soon::before{
  content:''; position:absolute; inset:0; opacity:.5; pointer-events:none;
  background-image:repeating-linear-gradient(-45deg,
    rgba(245,197,24,.05) 0 14px, transparent 14px 28px);
}
.soon__glow{
  position:absolute; right:-8%; top:50%; transform:translateY(-50%);
  width:min(420px, 60%); aspect-ratio:1; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle, rgba(245,197,24,.17), transparent 65%);
}
.soon__body{ position:relative; z-index:1; max-width:52ch; }
.soon__kicker{
  display:inline-flex; align-items:center; gap:.5rem;
  font-family:var(--cond); font-weight:700; font-size:.76rem;
  letter-spacing:.22em; text-transform:uppercase; color:var(--yellow);
  margin-bottom:.5rem;
}
.soon__pulse{
  width:7px; height:7px; border-radius:50%; background:var(--yellow);
  box-shadow:0 0 0 0 rgba(245,197,24,.6); animation:ping 2s infinite;
}
.soon__title{
  font-family:var(--display); font-weight:400;
  font-size:clamp(1.5rem, 3vw, 2.4rem); line-height:.95;
  text-transform:uppercase; margin-bottom:.55rem;
}
.soon__title em{ font-style:normal; color:var(--yellow); }
.soon p{ color:var(--muted); font-size:.95rem; }
.soon .btn{ position:relative; z-index:1; flex-shrink:0; }

/* ---------- 16. FOOTER ---------- */
.footer{
  background:var(--ink-2); border-top:1px solid var(--line);
  padding-top:clamp(2.5rem, 4vw, 3.5rem); overflow:hidden; position:relative;
}
/* La última columna pasó de ser tres renglones de texto a las fichas de los
   locales, así que se lleva más ancho: con 1.2fr la dirección de Restrepo se
   partía en "Carrera 6 #7-" / "46", que es justo el dato que alguien copia. */
.footer__grid{
  display:grid; grid-template-columns:1.4fr .9fr .9fr 1.55fr;
  gap:1.7rem; padding-bottom:2.2rem;
}
/* 190px eran para el logo apaisado; el sello circular a ese ancho es un
   bloque enorme al lado del párrafo. */
.footer__brand img{ width:118px; height:auto; margin-bottom:1.1rem; }
.footer__brand p{ color:var(--muted); font-size:.92rem; max-width:34ch; margin-bottom:1.2rem; }

.socials{ display:flex; gap:.5rem; }
.socials a{
  width:40px; height:40px; display:grid; place-content:center;
  border:1px solid var(--line); border-radius:var(--r); color:var(--muted);
  transition:all .3s var(--e);
}
.socials a:hover{
  background:var(--yellow); border-color:var(--yellow); color:var(--ink);
  transform:translateY(-3px);
}

.footer__col h4{
  font-family:var(--cond); font-weight:700; font-size:.82rem;
  letter-spacing:.2em; text-transform:uppercase; color:var(--yellow); margin-bottom:1rem;
}
.footer__col a,
.footer__plain,
.footer__flag{
  display:block; color:var(--muted); font-size:.91rem; margin-bottom:.6rem;
  transition:color .22s, transform .22s var(--e);
}
.footer__col a:hover{ color:var(--yellow); transform:translateX(3px); }
.footer__flag{
  display:flex; align-items:center; gap:.4rem;
  font-size:.8rem; color:var(--muted-2); margin-top:.4rem;
}
.footer__flag .ico{ color:var(--red-2); font-size:.95rem; }

/* --- Cada local, en su bloque -------------------------------------------
   El pie tenía las dos sedes como seis renglones grises seguidos, más el
   teléfono general arriba y la ciudad y el horario repetidos abajo: en un
   teléfono no se veía dónde terminaba un local y empezaba el otro. Cada uno
   en su caja, con el rótulo de la ciudad en amarillo haciendo de título y su
   WhatsApp adentro —que son dos números distintos, no uno—. */
.fsedes{ display:flex; flex-direction:column; gap:.55rem; margin-bottom:.9rem; }
.fsede{
  position:relative; overflow:hidden;
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  padding:.7rem .8rem .65rem .95rem;
}
/* El canto tricolor, el mismo gesto que abre cada sección del sitio. */
.fsede::before{
  content:''; position:absolute; left:0; top:0; bottom:0; width:3px;
  background:var(--bandera);
}
.fsede__tag{
  display:block; font-family:var(--cond); font-weight:700; font-size:.86rem;
  letter-spacing:.14em; text-transform:uppercase; color:var(--yellow);
}
.fsede__dir{ display:block; font-size:.84rem; line-height:1.4; color:var(--muted); margin-top:.1rem; }
.fsede__hora{ display:block; font-size:.76rem; line-height:1.4; color:var(--muted-2); }
.fsede__links{ display:flex; flex-wrap:wrap; gap:.4rem; margin-top:.6rem; }
.fsede__links a{
  display:inline-flex; align-items:center; gap:.35rem;
  margin:0;                       /* el .footer__col a de arriba les mete .6rem */
  font-family:var(--cond); font-weight:700; font-size:.74rem;
  letter-spacing:.08em; text-transform:uppercase;
  padding:.34rem .6rem; border-radius:var(--r);
  border:1px solid var(--line); color:var(--muted);
  transition:background .22s, border-color .22s, color .22s, transform .22s var(--e);
}
.fsede__links a svg{ width:14px; height:14px; }
.fsede__links a:hover{ transform:none; }
/* Verde el de WhatsApp: es el botón que de verdad se toca, y el color lo dice
   antes que la palabra. */
.fsede__wa{ color:var(--cream) !important; border-color:rgba(37,211,102,.4) !important; }
.fsede__wa:hover{ background:var(--wa); border-color:var(--wa) !important; color:#04220F !important; }
.fsede__mapa:hover{ border-color:var(--yellow); color:var(--yellow) !important; }

.footer__mark{
  font-family:var(--display); font-size:clamp(3.5rem, 15vw, 11rem);
  line-height:.78; text-align:center; letter-spacing:.02em;
  color:transparent; -webkit-text-stroke:1.5px rgba(245,239,230,.09);
  user-select:none; pointer-events:none; margin-bottom:-.12em;
}

/* La aclaración del domicilio. Va justo encima de la tira legal y separada de
   ella por su propia raya: no es una nota al pie más —es la condición que
   cambia cuánta plata hay que tener lista al abrir la puerta—, así que lleva
   el icono de la moto y el texto un punto más claro que el resto del pie, pero
   sin gritar: quien está pidiendo ya lo leyó completo en el carrito. */
.footer__nota{
  border-top:1px solid var(--line); padding-top:1.3rem;
  display:flex; align-items:flex-start; gap:.55rem;
  color:var(--muted); font-size:.84rem; line-height:1.55;
}
.footer__nota .ico{
  flex:none; width:16px; height:16px; margin-top:.15rem; color:var(--yellow); opacity:.85;
}
/* Con la nota encima, la raya de la tira legal sería la segunda seguida. */
.footer__nota + .footer__bottom{ border-top:0; }

.footer__bottom{
  border-top:1px solid var(--line); padding-block:1.3rem;
  display:flex; flex-wrap:wrap; gap:.6rem; justify-content:space-between;
  color:var(--muted-2); font-size:.82rem;
}

/* La puerta de servicio: el acceso al panel de cocina. Va apagada como el
   resto de la tira legal —no es una llamada a la acción, y compitiendo con
   "Pedir a domicilio" sería un botón que el cliente toca por error—, pero con
   el candado al lado se distingue de los dos renglones de texto que la rodean
   y se acierta con el dedo. Se enciende en amarillo al pasar por encima, como
   cualquier otro enlace de la casa. */
.footer__panel{
  display:inline-flex; align-items:center; gap:.4rem;
  /* En fila lo centra verticalmente contra los dos renglones de texto; en
     teléfono, donde la tira se apila y se centra, evita que este quede a la
     izquierda estirado a todo el ancho mientras los otros dos van al medio. */
  align-self:center;
  color:var(--muted-2); transition:color .25s;
}
.footer__panel .ico{ width:14px; height:14px; opacity:.8; }
.footer__panel:hover{ color:var(--yellow); }

/* ---------- 17. FLOTANTE DE DOMICILIOS ----------
   Abajo a la derecha, en las tres páginas: es la llamada a la acción que
   sobrevive al scroll. Va en amarillo de marca con el icono en negro —el
   verde de WhatsApp era el único color ajeno a la paleta y se leía como un
   widget pegado encima—.

   En teléfono no se esconde nunca (ver el bloque de encogido, más abajo). En
   escritorio sí se aparta mientras su destino está a la vista, porque ahí
   manda el botón grande de la sección. */
.fab{
  position:fixed; z-index:880;
  right:clamp(.9rem, 2.4vw, 1.5rem);
  bottom:calc(clamp(.9rem, 2.4vw, 1.5rem) + env(safe-area-inset-bottom, 0px));
  display:inline-flex; align-items:center; gap:.55rem;
  padding:.82rem 1.15rem; border-radius:999px;
  background:var(--yellow); color:var(--ink);
  font-family:var(--cond); font-weight:700; font-size:.87rem;
  letter-spacing:.1em; text-transform:uppercase; white-space:nowrap;
  box-shadow:0 10px 34px -8px rgba(245,197,24,.6);
  transition:transform .4s var(--e), box-shadow .35s, opacity .4s var(--e), visibility .4s;
}
.fab .ico{ width:21px; height:21px; stroke-width:1.9; flex:none; }
/* El rótulo se pliega con max-width y no con display:none: así la pastilla se
   encoge hasta el disco con una transición y no de un salto. */
.fab span{
  display:block; overflow:hidden; white-space:nowrap;
  max-width:12rem; opacity:1;
  transition:max-width .4s var(--e), opacity .25s var(--e);
}

/* Cuántas cosas hay en el pedido. Es lo único que sigue visible cuando el
   botón está encogido, porque es lo que hace volver a tocarlo. */
.fab__count{
  position:absolute; top:-7px; right:-5px;
  min-width:23px; height:23px; padding:0 6px;
  display:grid; place-content:center;
  background:var(--red); color:#fff; border:2px solid var(--ink);
  border-radius:999px;
  font-family:var(--mono); font-weight:700; font-size:.72rem; letter-spacing:0;
}
.fab__count[hidden]{ display:none; }
.fab:hover{ background:var(--yellow-2); transform:scale(1.06); box-shadow:0 14px 44px -8px rgba(245,197,24,.85); }
.fab::before{
  content:''; position:absolute; inset:0; border-radius:999px;
  border:2px solid var(--yellow); animation:ripple 2.4s var(--e2) infinite;
}
/* Estado de reposo: encogido e invisible hasta que app.js lo suelta. Si el
   JS no corriera, el botón se queda visible (la clase la pone el script). */
.fab.is-idle{
  opacity:0; visibility:hidden; pointer-events:none;
  transform:scale(.4) translateY(14px);
}
.fab.is-idle::before{ animation:none; }
/* Mientras el panel de navegación está abierto, el flotante quedaba encima de
   los enlaces: el panel es full screen pero va por debajo en la pila. */
body.is-locked .fab{ opacity:0; visibility:hidden; pointer-events:none; }
/* El aro late poco: sobre una pastilla ancha, el 1,7 que tenía de círculo se
   estiraba mucho más a lo largo que a lo alto y parecía un fallo. */
@keyframes ripple{
  0%{ transform:scale(1); opacity:.6 }
  100%{ transform:scale(1.09); opacity:0 }
}

/* ---------- 18. TERMINAR Y PAGAR ----------
   La ficha del pedido. Sigue siendo la tirilla —papel crema, canto dentado,
   líneas de guiones, cifras en máquina de escribir— pero organizada como lo
   que es: una caja de cobro. Primero la pregunta que no se puede saltar (de
   cuál sede), después el modo, después lo que ese modo pide, y el dinero
   pegado al botón, que es lo último que se lee antes de confirmar. */
.drawer{ position:fixed; inset:0; z-index:950; visibility:hidden; }
.drawer.is-open{ visibility:visible; }
.drawer__scrim{
  position:absolute; inset:0; background:rgba(5,4,4,.78);
  backdrop-filter:blur(5px); opacity:0; transition:opacity .4s var(--e);
}
.drawer.is-open .drawer__scrim{ opacity:1; }

.receipt{
  position:absolute; right:0; top:0; height:100%;
  width:min(460px, 100%);
  background:#FDFBF5; color:#191512;
  display:flex; flex-direction:column;
  transform:translateX(100%); transition:transform .5s var(--e);
  box-shadow:-20px 0 70px -20px rgba(0,0,0,.9);
  /* La máquina de escribir se queda solo en las CIFRAS, que es donde gana algo
     —los números caen en columna—; lo que se lee va en la tipografía del
     sitio. El aire de tirilla no lo daba la letra: lo dan el papel crema, el
     borde dentado y las líneas de guiones. */
  font-family:var(--body);
}
.drawer.is-open .receipt{ transform:translateX(0); }

/* borde dentado de tirilla */
.receipt__edge{
  height:9px; flex-shrink:0; background:#FDFBF5;
  --z:linear-gradient(45deg, transparent 33.4%, #FDFBF5 33.4%),
      linear-gradient(-45deg, transparent 33.4%, #FDFBF5 33.4%);
}
.receipt__edge--top{
  background:var(--z); background-size:12px 9px; background-position:bottom;
  background-repeat:repeat-x; background-color:transparent;
  transform:rotate(180deg);
}
.receipt__edge--bottom{
  background:var(--z); background-size:12px 9px;
  background-repeat:repeat-x; background-color:transparent;
}

/* --- Cabecera: volver, título, cerrar --- */
.receipt__head{
  display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:.7rem;
  padding:.8rem 1.1rem .75rem; flex-shrink:0;
  border-bottom:1px solid #EDE6DA;
}
.receipt__back, .receipt__close{
  width:36px; height:36px; flex-shrink:0; border-radius:50%;
  display:grid; place-content:center; color:#191512; background:#F0EAE0;
  transition:background .2s, color .2s, transform .2s var(--e);
}
.receipt__back .ico{ font-size:1.05rem; transform:rotate(180deg); }
.receipt__back:hover{ background:#E4DCD0; transform:translateX(-2px); }
.receipt__close .ico{ font-size:.95rem; }
.receipt__close:hover{ background:var(--red); color:#fff; }
.receipt__id{ min-width:0; }
.receipt__id h2{
  font-family:var(--cond); font-weight:700; font-size:1.1rem;
  letter-spacing:.06em; text-transform:uppercase; line-height:1.15;
}
.receipt__id p{ font-size:.74rem; line-height:1.4; color:#8A8175; margin-top:2px; }

.receipt__divider{
  height:1px; margin-inline:1.15rem; flex-shrink:0;
  background-image:linear-gradient(90deg, #191512 50%, transparent 50%);
  background-size:7px 1px; opacity:.4;
}

/* zona desplazable */
.receipt__scroll{
  flex:1; min-height:0; overflow-y:auto; overscroll-behavior:contain;
  display:flex; flex-direction:column;
}
.receipt__scroll::-webkit-scrollbar{ width:7px; }
.receipt__scroll::-webkit-scrollbar-track{ background:#F0EAE0; }
.receipt__scroll::-webkit-scrollbar-thumb{ background:#C9C0B2; border-radius:4px; }

.receipt__empty{
  flex:1; display:none; flex-direction:column; align-items:center; justify-content:center;
  gap:.5rem; text-align:center; padding:2.5rem 1.5rem;
}
.receipt__empty.show{ display:flex; }
.receipt__empty-ico{ font-size:2.1rem; color:#C9C0B2; line-height:1; }
.receipt__empty p{
  font-family:var(--cond); font-weight:700; font-size:1.15rem;
  text-transform:uppercase; letter-spacing:.06em;
}
.receipt__empty small{ color:#8A8175; font-size:.84rem; max-width:28ch; line-height:1.5; }
.receipt__empty .btn{ margin-top:.8rem; font-family:var(--cond); }

/* El aire del final lo daba el margen de "Vaciar pedido", que ahora vive
   arriba con el pedido: sin esto, el último campo queda pegado a la barra. */
.receipt__foot{ background:#FDFBF5; padding-bottom:1.2rem; }
.receipt__foot.hide{ display:none; }

/* --- Los tramos de la ficha --------------------------------------------
   Separados por una banda ancha y no por una línea: en una columna de siete
   preguntas seguidas, una raya de 1 px no alcanza a decir dónde termina una
   cosa y empieza la otra. --- */
.cstep, .frows, .deliv, .summary, .pickup{ padding:1rem 1.15rem; }
.checkout > * + *{ border-top:8px solid #F3EDE2; }
/* La misma banda separa los tres tramos de primer nivel —el pedido, la sede y
   el resto del formulario—; sin ella, "Tu pedido" y el paso 1 se leen como un
   solo bloque. */
.receipt__foot > * + *{ border-top:8px solid #F3EDE2; }
.cstep__title{
  display:flex; align-items:center; gap:.5rem;
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.05em; text-transform:uppercase; line-height:1.2;
}
.cstep__title .ico{ color:var(--red); font-size:1.15rem; }
.cstep__num{
  width:22px; height:22px; flex:none; border-radius:50%;
  background:#191512; color:var(--yellow);
  font-family:var(--cond); font-style:normal; font-size:.72rem; font-weight:700;
  display:grid; place-content:center; transition:background .3s, color .3s;
}
.cstep__desc{ font-size:.78rem; line-height:1.5; color:#8A8175; margin-top:.35rem; }
/* Los datos también llevan su número: tres campos sueltos sin encabezado no
   dicen si son parte del paso de arriba o un paso nuevo. */
.cstep__title--frows{ margin-bottom:.35rem; }

/* --- Paso 1: en cuál sede está ------------------------------------------
   No viene resuelto y no se puede saltar. Con dos ciudades, una sede puesta
   de antemano es un pedido cocinado en el local equivocado en cuanto alguien
   baja de largo hasta el botón. --- */
.cstep--sede{ background:#FFFDF7; padding-bottom:1.15rem; }
.cstep--sede.is-listo .cstep__num{ background:#1E7A3C; color:#fff; }
.cstep--sede.is-err{ animation:sedeTiembla .5s var(--e2); }
@keyframes sedeTiembla{
  0%,100%{ transform:translateX(0) }
  20%{ transform:translateX(-7px) }
  40%{ transform:translateX(6px) }
  60%{ transform:translateX(-4px) }
  80%{ transform:translateX(2px) }
}
.cstep__aviso{
  display:flex; gap:.45rem; align-items:flex-start; margin-top:.75rem;
  font-size:.76rem; line-height:1.45; color:#7A5B0B;
  background:#FFF6DE; border:1px dashed #E9CE7A; border-radius:5px;
  padding:.55rem .65rem;
}
.cstep__aviso .ico{ color:var(--yellow-deep); margin-top:.15em; flex:none; }
.cstep__aviso[hidden]{ display:none; }

.sedecards{
  display:grid; gap:.55rem; margin-top:.8rem;
  grid-template-columns:repeat(auto-fit, minmax(178px, 1fr));
}
.sedecard{
  position:relative; overflow:hidden; text-align:left; min-width:0;
  display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:.6rem;
  padding:.7rem .7rem .7rem .95rem;
  background:#fff; border:1.5px solid #DFD7C9; border-radius:6px; color:#191512;
  transition:border-color .22s, background .22s, color .22s, transform .22s var(--e), box-shadow .25s;
}
.sedecard:hover{ border-color:#191512; transform:translateY(-1px); }
.sedecard__flag{
  position:absolute; left:0; top:0; bottom:0; width:4px;
  background:var(--bandera); opacity:.5; transition:opacity .22s;
}
.sedecard__ico{
  width:34px; height:34px; flex:none; border-radius:50%;
  background:#F2ECE1; color:#191512; display:grid; place-content:center;
  transition:background .22s, color .22s;
}
.sedecard__ico .ico{ font-size:1.05rem; }
.sedecard__txt{ min-width:0; }
.sedecard__txt b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.95rem;
  letter-spacing:.04em; text-transform:uppercase; line-height:1.2;
}
.sedecard__txt small{
  display:block; font-size:.73rem; line-height:1.35; color:#7A7266;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.sedecard__txt i{
  display:block; font-style:normal; font-size:.67rem; line-height:1.3;
  color:#A79E90; margin-top:.15rem;
}
.sedecard__check{
  width:22px; height:22px; flex:none; border-radius:50%;
  border:1.5px solid #D9D2C6; color:transparent;
  display:grid; place-content:center; transition:all .22s;
}
.sedecard__check .ico{ font-size:.72rem; stroke-width:3; }
.sedecard.is-active{
  background:#191512; border-color:#191512; color:#FDFBF5;
  box-shadow:0 12px 24px -16px rgba(0,0,0,.85);
}
.sedecard.is-active .sedecard__flag{ opacity:1; }
.sedecard.is-active .sedecard__ico{ background:rgba(242,236,225,.12); color:var(--yellow); }
.sedecard.is-active .sedecard__txt small{ color:rgba(253,251,245,.7); }
.sedecard.is-active .sedecard__txt i{ color:var(--yellow); }
.sedecard.is-active .sedecard__check{ background:var(--yellow); border-color:var(--yellow); color:#191512; }
/* La que venía en el enlace de "pedir desde esta sede": se señala, no se elige. */
.sedecard.is-sugerida{ border-color:var(--yellow); border-style:dashed; background:#FFFCF0; }
.sedecard.is-sugerida .sedecard__check{ border-color:var(--yellow-deep); }

/* Todo lo que va después del paso 1, apagado hasta que haya respuesta. */
.checkout{ transition:opacity .35s var(--e), filter .35s var(--e); }
.checkout.is-locked{ opacity:.34; filter:grayscale(.6); pointer-events:none; user-select:none; }

/* --- Cómo lo quiere ------------------------------------------------------ */
.segmented{ display:flex; gap:.28rem; }
.seg{
  flex:1; display:inline-flex; flex-direction:column; align-items:center; gap:.22rem;
  font-family:var(--cond); font-size:.82rem; font-weight:700;
  letter-spacing:.04em;
  padding:.5rem .2rem; border:1px solid #D9D2C6; border-radius:4px;
  background:#fff; transition:all .22s;
}
.seg:hover{ background:#F2ECE1; }
.seg .ico{ font-size:1.05rem; stroke-width:1.7; }
.seg.is-active{ background:#191512; border-color:#191512; color:#FDFBF5; }

.segmented--modo{ gap:.32rem; margin-top:.75rem; }
.seg--modo{
  position:relative; overflow:hidden;
  padding:.6rem .28rem .55rem; gap:.16rem; line-height:1.15; min-width:0;
}
.seg--modo small{
  display:block; max-width:100%;
  font-family:var(--body); font-weight:400; font-size:.66rem;
  letter-spacing:0; text-transform:none; color:#8A8175;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.seg--modo.is-active small{ color:rgba(253,251,245,.72); }
.seg--modo::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:3px;
  background:var(--yellow); transform:scaleX(0); transition:transform .32s var(--e);
}
.seg--modo.is-active::after{ transform:scaleX(1); }
.seg--modo[disabled]{ opacity:.45; cursor:not-allowed; }
.seg--modo[disabled] small{ color:#B7ADA0; }

/* Los del selector de sede de la RESERVA, que no es esta ficha. */
.segmented--sedes{ gap:.35rem; }
.seg--sede{ padding:.55rem .35rem .5rem; gap:.14rem; line-height:1.15; min-width:0; }
.seg--sede small{
  display:block; max-width:100%;
  font-family:var(--body); font-weight:400; font-size:.68rem;
  letter-spacing:0; text-transform:none; color:#8A8175;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.seg--sede.is-active small{ color:rgba(253,251,245,.72); }
.seg--sede[disabled] small{ color:#B7ADA0; }
.seg--sede.is-sugerida{ border-color:var(--yellow); border-style:dashed; }

/* Un medio de pago que todavía no cobra se nombra, no se esconde. */
.seg--soon{
  position:relative; opacity:.5; cursor:not-allowed;
  border-style:dashed; padding-bottom:.85rem;
}
.seg--soon:hover{ background:#fff; }
.seg__soon{
  position:absolute; left:50%; bottom:.16rem; transform:translateX(-50%);
  font-family:var(--cond); font-weight:700; font-size:.52rem;
  letter-spacing:.14em; text-transform:uppercase; color:#8A8175;
}

/* --- El renglón del domicilio ----------------------------------------------
   El reparto lo hace la casa —no una app— y el domicilio se cuadra APARTE con
   el domiciliario. Eso hay que saberlo antes de escribir la dirección, pero
   antes ocupaba una tarjeta negra de tres párrafos que había que saltarse
   entera para llegar al campo: en el celular se comía media pantalla justo
   donde se está escribiendo. Ahora es un renglón —el titular y de qué sede
   sale— y el porqué se despliega a un toque. Lo mismo lo repiten la fila
   "Costo de domicilio" del resumen y el pie del botón, así que plegarlo no
   esconde nada. */
.deliv{ display:flex; flex-direction:column; gap:.7rem; }
.deliv[hidden], .pickup[hidden]{ display:none; }
.deliv:not([hidden]), .pickup:not([hidden]){ animation:asoma .34s var(--e) both; }
@keyframes asoma{
  from{ opacity:0; transform:translateY(-7px); }
  to{ opacity:1; transform:none; }
}
.deliv__mini{
  position:relative; overflow:hidden;
  background:#191512; color:#F2ECE1; border-radius:6px;
}
.deliv__mini::before{
  content:''; position:absolute; left:0; top:0; bottom:0; width:4px;
  background:var(--bandera);
}
.deliv__toggle{
  width:100%; text-align:left; color:inherit;
  display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:.6rem;
  padding:.6rem .75rem .6rem 1rem;
}
.deliv__ico{
  width:30px; height:30px; flex-shrink:0; display:grid; place-content:center;
  border-radius:50%; background:rgba(242,236,225,.09); color:var(--yellow);
}
.deliv__ico .ico{ font-size:1rem; }
.deliv__id{ min-width:0; }
.deliv__title{
  display:block; font-family:var(--cond); font-weight:700; font-size:.85rem;
  letter-spacing:.04em; text-transform:uppercase; line-height:1.2;
}
/* Sin recorte: en un celular angosto esto se va a dos renglones y está bien.
   "sale de Foodie Plaza" es media respuesta a "¿de dónde me llega?" y cortarla
   con puntos suspensivos la deja en nada. */
.deliv__from{
  display:block; font-size:.71rem; line-height:1.35; color:#A79E90; margin-top:1px;
}
.deliv__mas{
  flex-shrink:0; font-size:.71rem; color:var(--yellow); white-space:nowrap;
  text-decoration:underline; text-underline-offset:2px; transition:color .2s;
}
.deliv__toggle:hover .deliv__mas{ color:#fff; }
.deliv__detalle{ padding:0 .9rem .8rem 1rem; }
.deliv__detalle[hidden]{ display:none; }
.deliv__points{
  display:flex; flex-direction:column; gap:.5rem;
  padding-top:.7rem; border-top:1px dashed rgba(242,236,225,.16);
}
.deliv__points li{
  display:grid; grid-template-columns:auto 1fr; gap:.55rem; align-items:start;
  font-size:.76rem; line-height:1.45; color:#A79E90;
}
.deliv__points .ico{ font-size:.95rem; color:var(--yellow); margin-top:.15em; }
.deliv__points b{ display:block; color:#F2ECE1; font-weight:700; font-size:.79rem; }
.deliv__cover{
  margin-top:.7rem; padding-top:.6rem;
  border-top:1px dashed rgba(242,236,225,.16);
  font-size:.74rem; line-height:1.45; color:#A79E90;
}
.deliv__cover[hidden]{ display:none; }

/* --- Recoger: en cuál local -------------------------------------------- */
.pickup{
  display:flex; align-items:center; gap:.65rem;
  border-left:4px solid var(--yellow); background:#FFFDF7;
}
.pickup__ico{
  width:34px; height:34px; flex-shrink:0; display:grid; place-content:center;
  border-radius:50%; background:#F2ECE1; color:#191512;
}
.pickup__ico .ico{ font-size:1.05rem; }
.pickup__txt{ min-width:0; }
.pickup__txt b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.9rem;
  letter-spacing:.05em; text-transform:uppercase; line-height:1.2;
}
.pickup__txt small{ display:block; font-size:.75rem; line-height:1.4; color:#7A7266; }
.pickup__map{
  margin-left:auto; flex-shrink:0; font-size:.75rem; color:#6B635A;
  text-decoration:underline; text-underline-offset:2px; transition:color .2s;
}
.pickup__map:hover{ color:var(--red); }

/* --- El mapa del punto de entrega ---------------------------------------
   Embed de Google, sin llave de API. Vive dentro del bloque de domicilio, así
   que aparece y desaparece con él: solo hay mapa cuando hay moto. --- */
.addrmap{
  position:relative; height:190px;
  border:1px solid #D9D2C6; border-radius:6px; overflow:hidden;
  background:#E8E2D6;
}
.addrmap iframe{ width:100%; height:100%; display:block; border:0; }
/* El iframe queda muerto al tacto hasta que tocan el velo. Sin esto, arrastrar
   sobre el mapa en el celular mueve el mapa en vez de la ficha y el cliente se
   queda atascado a mitad del formulario. */
.addrmap__veil{
  position:absolute; inset:0; display:grid; place-items:start end;
  padding:.45rem; cursor:pointer;
}
.addrmap__veil span{
  font-family:var(--cond); font-weight:700; font-size:.62rem;
  letter-spacing:.14em; text-transform:uppercase; color:#FDFBF5;
  background:rgba(11,10,9,.62); border-radius:3px; padding:.24rem .45rem;
  transition:background .2s;
}
.addrmap__veil:hover span{ background:rgba(11,10,9,.85); }
.addrmap.is-live .addrmap__veil{ display:none; }

.addrmap__pin{
  position:absolute; left:50%; bottom:.8rem; transform:translateX(-50%);
  display:inline-flex; align-items:center; gap:.45rem; white-space:nowrap;
  font-family:var(--cond); font-weight:700; font-size:.86rem; letter-spacing:.03em;
  color:#191512; background:#FDFBF5; border-radius:999px;
  padding:.55rem 1.1rem; box-shadow:0 10px 20px -8px rgba(0,0,0,.7);
  transition:background .2s, color .2s, transform .2s var(--e);
}
.addrmap__pin .ico{ font-size:1.05rem; color:var(--red); }
.addrmap__pin:hover{ background:#fff; transform:translateX(-50%) translateY(-1px); }
.addrmap__pin.is-set{ background:#191512; color:#FDFBF5; }
.addrmap__pin.is-set .ico{ color:var(--yellow); }
.addrmap__pin[disabled]{ cursor:progress; opacity:.75; }
.addrmap__pin[disabled]:hover{ transform:translateX(-50%); }

.addrmap__note{
  display:flex; flex-wrap:wrap; gap:.35rem .5rem; align-items:baseline;
  font-size:.75rem; line-height:1.5; color:#8A8175;
}
.addrmap__note > .ico{ color:var(--yellow-deep); align-self:center; }
.addrmap__note > span{ flex:1; min-width:12rem; }
.addrmap__mas, .addrmap__undo{
  font-size:.74rem; color:#6B635A; white-space:nowrap;
  text-decoration:underline; text-underline-offset:2px; transition:color .2s;
}
.addrmap__mas:hover, .addrmap__undo:hover{ color:var(--red); }
.addrmap__undo[hidden]{ display:none; }
.addrmap__detalle{
  font-size:.75rem; line-height:1.55; color:#6B635A;
  background:#F3EDE2; border-radius:5px; padding:.6rem .7rem;
}
.addrmap__detalle[hidden]{ display:none; }

/* --- Los campos: una fila por dato, con su icono ------------------------
   Sin cajas dentro de cajas. La fila ES el campo: el icono dice de qué se
   trata, el rótulo chico qué se pide y debajo se escribe. El icono se pinta
   de amarillo cuando el cursor está adentro, que es todo el foco que hace
   falta sin dibujar un recuadro más. --- */
.frows{ display:flex; flex-direction:column; padding-block:.35rem; }
.frow{
  display:grid; grid-template-columns:auto 1fr; gap:.75rem; align-items:start;
  padding:.75rem 0; cursor:text;
}
.frow + .frow{ border-top:1px solid #EFE9DE; }
.frow[hidden]{ display:none; }
.frow__ico{
  width:38px; height:38px; flex:none; border-radius:10px;
  background:#F6EFE1; color:var(--red); display:grid; place-content:center;
  transition:background .22s, color .22s;
}
.frow__ico .ico{ font-size:1.05rem; }
.frow__body{ min-width:0; display:block; }
.frow__label{
  display:block; font-family:var(--cond); font-weight:700; font-size:.7rem;
  letter-spacing:.14em; text-transform:uppercase; color:#8C6A22; margin-bottom:.2rem;
}
.frow__label small{ font-weight:400; letter-spacing:.04em; text-transform:none; color:#A79E90; }
/* 16px en los campos y no menos: por debajo de 16, Safari en iPhone hace zoom
   solo al tocar el campo y deja la ficha descuadrada. */
.frow input, .frow textarea{
  width:100%; border:0; background:transparent; padding:0;
  font-family:var(--body); font-size:1rem; line-height:1.45; color:#191512;
  resize:vertical;
}
.frow input:focus, .frow textarea:focus{ outline:none; }
.frow input::placeholder, .frow textarea::placeholder{ color:#B7ADA0; }
.frow:focus-within .frow__ico{ background:var(--yellow); color:#191512; }
.frow.is-err .frow__ico{ background:#FFE5E5; color:var(--red); }
.frow.is-err .frow__label{ color:var(--red); }
.frow__hint{ display:block; font-size:.72rem; line-height:1.45; color:#8A8175; margin-top:.3rem; }
.frow__hint[hidden]{ display:none; }
/* La dirección va sola, debajo del mapa, con la misma raya que la separa. */
#addrField{ border-top:1px solid #EFE9DE; }

/* --- Método de pago ------------------------------------------------------
   Con un solo medio activo no hay nada que elegir: sale ya confirmado. --- */
.paycard{
  position:relative; display:flex; flex-direction:column; align-items:center;
  gap:.1rem; margin-top:.8rem; padding:.95rem .8rem 1rem;
  border:1.5px solid var(--yellow); border-radius:8px; background:#FFF8E4;
}
.paycard__ico{
  width:46px; height:46px; border-radius:50%; margin-bottom:.35rem;
  background:var(--wa); color:#fff; display:grid; place-content:center;
  box-shadow:0 8px 16px -8px rgba(37,211,102,.9);
}
.paycard__ico .ico{ font-size:1.25rem; }
.paycard__nombre{
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.05em; text-transform:uppercase;
}
.paycard small{ font-size:.77rem; color:#7A7266; }
.paycard__check{
  position:absolute; top:.55rem; right:.6rem;
  width:22px; height:22px; border-radius:50%;
  background:var(--red); color:#fff; display:grid; place-content:center;
}
.paycard__check .ico{ font-size:.7rem; stroke-width:3; }

.paynote{
  display:flex; gap:.45rem; align-items:flex-start; margin-top:.65rem;
  font-size:.78rem; line-height:1.5; color:#7A7266;
}
.paynote .ico{ color:var(--yellow-deep); margin-top:.15em; flex:none; }
.paynote[hidden]{ display:none; }
.paynote--entrega{
  background:#F3EDE2; border-radius:6px; padding:.6rem .7rem; color:#5C554B;
}
.paynote--entrega .ico{ color:var(--red); }

/* `.field` es el campo de toda la vida: lo usan esta ficha y el formulario de
   reserva, así que se queda como estaba. Lo propio de acá va acotado. */
.field[hidden]{ display:none; }
.field label{
  display:block; font-size:.72rem; font-weight:700; text-transform:uppercase;
  letter-spacing:.11em; color:#6B635A; margin-bottom:.3rem;
}
.field label small{ font-weight:400; text-transform:none; letter-spacing:0; }
/* 16px en los campos y no menos: por debajo de 16, Safari en iPhone hace zoom
   solo al tocar el campo y deja la ficha descuadrada. */
.field input, .field textarea, .field select{
  width:100%; background:#fff; border:1px solid #D9D2C6; border-radius:4px;
  padding:.62rem .72rem; font-family:var(--body); font-size:1rem; color:#191512;
  resize:vertical; transition:border-color .25s;
}
.field input:focus, .field textarea:focus, .field select:focus{
  outline:none; border-color:#191512;
}
.field.is-err input{ border-color:var(--red); background:#FFF5F5; }
.cstep--pago .field{ margin-top:.85rem; }
.field__hint{ margin-top:.35rem; font-size:.74rem; line-height:1.45; color:#8A8175; }
.field__hint.is-ok{ color:#1E7A3C; }
.field__hint.is-err{ color:var(--red); }
.field__aviso{
  margin-top:.5rem; font-size:.78rem; line-height:1.45; color:#6B635A;
  border-left:3px solid var(--yellow); padding-left:.6rem;
}
.field__aviso[hidden]{ display:none; }

/* --- El resumen: lo PRIMERO que se ve al abrir la tirilla ---------------
   Vivía al final, debajo de siete preguntas, y para revisar qué había pedido
   había que recorrer la ficha entera. Ahora abre el cajón: lo que se está
   comprando primero, y después lo que hay que llenar para comprarlo. El total
   no hace falta repetirlo abajo —lo lleva el botón de confirmar, que está
   siempre a la vista—. */
.summary{ background:#F8F2E6; }
.summary__title{
  display:flex; align-items:center; gap:.5rem; margin-bottom:.75rem;
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.05em; text-transform:uppercase;
}
.summary__title .ico{ color:var(--red); font-size:1.15rem; }
/* Cuántos productos van, a la derecha del título: contesta de un vistazo la
   pregunta con la que se abre el cajón. */
.summary__count{
  margin-left:auto; flex:none;
  font-family:var(--cond); font-weight:700; font-size:.66rem;
  letter-spacing:.12em; text-transform:uppercase; color:#7A7266;
  background:#EDE4D4; border-radius:2px; padding:.22rem .45rem;
}
.summary__items{ display:flex; flex-direction:column; gap:.45rem; }

/* Tres columnas y no cuatro: foto, todo lo del plato, y la X. La cifra de la
   línea bajó al renglón de los controles —al lado del "− 1 +" que la mueve—,
   que es donde se mira cuando se está ajustando la cantidad; arriba, como
   cuarta columna, le robaba al nombre los 60 px que necesita para no partirse
   en tres renglones en un celular angosto. */
.ritem{
  display:grid; grid-template-columns:auto 1fr auto; gap:.55rem; align-items:start;
  background:#FFFDF7; border:1px solid #E8E0D2; border-radius:6px; padding:.6rem .65rem;
}
/* La foto del plato, la misma de la carta: en una lista de seis renglones la
   imagen se reconoce antes que el nombre. Los platos sin foto propia caen al
   icono de su categoría, que abajo conserva su tamaño. */
.ritem__pic{
  width:56px; height:56px; flex:none; border-radius:8px;
  object-fit:cover; display:block; background:#F2ECE1;
}
.ritem__ico{
  width:56px; height:56px; flex:none; border-radius:8px;
  background:#F2ECE1; color:var(--red); display:grid; place-content:center;
}
.ritem__ico .ico{ font-size:1.35rem; }
.ritem__body{ min-width:0; }
.ritem__name{
  display:block; font-family:var(--cond); font-weight:700; font-size:.92rem;
  letter-spacing:.03em; text-transform:uppercase; line-height:1.2;
}
.ritem__sub{ display:block; font-size:.74rem; color:#8A8175; margin-top:1px; }
.ritem__line{
  margin-left:auto;
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:.95rem; font-weight:700; color:var(--red-deep); white-space:nowrap;
}
.ritem__del{ font-size:.72rem; color:#C0B7A9; line-height:1; padding:.15rem; transition:color .2s; }
.ritem__del:hover{ color:var(--red); }
.ritem__ctrl{ display:flex; align-items:center; gap:.5rem; margin-top:.5rem; flex-wrap:wrap; }
.qty{ display:flex; align-items:center; border:1px solid #D9D2C6; border-radius:4px; background:#fff; }
.qty button{
  width:26px; height:24px; display:grid; place-content:center;
  font-size:.95rem; font-weight:700; line-height:1; color:#191512;
  transition:background .2s;
}
.qty button:hover{ background:#EDE6DA; }
.qty b{
  min-width:26px; text-align:center; font-size:.86rem;
  font-family:var(--mono); font-variant-numeric:tabular-nums;
}
.combo{
  font-size:.76rem; border:1px solid #D9D2C6; border-radius:4px;
  padding:.28rem .4rem; background:#fff; font-family:var(--body); color:#191512;
  cursor:pointer; max-width:100%;
}

.summary__rows{
  display:flex; flex-direction:column; gap:.45rem;
  margin-top:.85rem; padding-top:.8rem; border-top:1px dashed #C9C0B2;
}
.rrow{ display:flex; justify-content:space-between; align-items:center; gap:.7rem; font-size:.88rem; }
.rrow > span{ color:#5C554B; }
.rrow b{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-weight:700; }
.rrow--envio[hidden]{ display:none; }
.rrow--envio > span{ display:inline-flex; align-items:center; gap:.4rem; color:#191512; }
.rrow--envio .ico{ color:var(--red); font-size:1.05rem; }
.rrow--envio em{
  font-style:italic; font-size:.82rem; line-height:1.35;
  color:var(--red); text-align:right;
}

.summary__nota{
  display:flex; gap:.5rem; align-items:flex-start; margin-top:.75rem;
  font-size:.77rem; line-height:1.55; color:#5C554B;
  background:#fff; border-left:3px solid var(--yellow);
  border-radius:0 5px 5px 0; padding:.65rem .75rem;
}
.summary__nota .ico{ color:var(--yellow-deep); margin-top:.15em; flex:none; }
.summary__nota[hidden]{ display:none; }

.summary__total{
  display:flex; justify-content:space-between; align-items:center; gap:.8rem;
  margin-top:.85rem; padding:.8rem .95rem;
  background:#191512; color:#FDFBF5; border-radius:8px;
}
.summary__total span{
  font-family:var(--cond); font-weight:700; font-size:.95rem;
  letter-spacing:.06em; text-transform:uppercase;
}
.summary__total b{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:1.3rem; color:var(--yellow);
}

/* Vaciar el pedido va pegado al pedido, no perdido al final de la ficha: es
   una acción sobre esta lista y solo tiene sentido leyéndola. */
.receipt__clear{
  display:block; margin:.9rem auto 0; font-size:.78rem; color:#B7ADA0;
  text-decoration:underline; text-underline-offset:2px; transition:color .2s;
}
.receipt__clear:hover{ color:var(--red); }

/* --- La barra de confirmar, siempre a la vista ------------------------- */
.receipt__action{
  flex-shrink:0; background:#FDFBF5; border-top:1px solid #E4DCD0;
  padding:.8rem 1.15rem .9rem;
  box-shadow:0 -10px 24px -16px rgba(0,0,0,.45);
}
.receipt__action.hide{ display:none; }
.btn--confirm{
  width:100%; display:grid; grid-template-columns:auto 1fr auto;
  align-items:center; gap:.75rem; text-align:left;
  background:#26201B; color:#FDFBF5; border-radius:12px; padding:.65rem .7rem;
  box-shadow:0 14px 28px -18px rgba(0,0,0,.95);
  transition:transform .22s var(--e), background .25s, box-shadow .25s;
}
.btn--confirm:hover{ background:#191512; transform:translateY(-2px); }
.btn--confirm:active{ transform:translateY(0) scale(.99); }
.confirm__lock, .confirm__go{
  width:38px; height:38px; flex:none; border-radius:50%;
  display:grid; place-content:center;
}
.confirm__lock{ background:rgba(253,251,245,.1); color:var(--yellow); }
.confirm__go{ background:var(--yellow); color:#191512; transition:transform .25s var(--e); }
.btn--confirm:hover .confirm__go{ transform:translateX(3px); }
.confirm__lock .ico, .confirm__go .ico{ font-size:1.05rem; }
.confirm__txt{ min-width:0; }
.confirm__txt small{
  display:block; font-family:var(--cond); font-weight:700; font-size:.68rem;
  letter-spacing:.16em; text-transform:uppercase; color:var(--yellow);
}
.confirm__txt b{
  display:block; font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:1.25rem; line-height:1.2;
  /* El botón va en versalitas, pero la k de "$26k" es una unidad, no una
     palabra: en mayúscula se lee como otra cosa. */
  text-transform:none;
}

.btn--confirm[disabled]{ cursor:progress; }
.btn--confirm.is-sending{ background:#3A312A; }
.btn--confirm.is-sending:hover{ transform:none; }
/* La flecha da vueltas mientras el pedido viaja: es lo único que dice que
   algo está pasando entre el toque y la respuesta de la cocina. */
.btn--confirm.is-sending .confirm__go{ animation:gira .9s linear infinite; }
@keyframes gira{ to{ transform:rotate(360deg); } }

/* --- PEDIDO HECHO -------------------------------------------------------
   El pedido ya no se cierra en otra app. Antes, "Confirmar" abría WhatsApp y
   el cliente salía del sitio sin saber si algo había quedado hecho; ahora la
   cocina contesta y la respuesta se pinta acá, con la misma cara de tirilla
   que el resto del cajón.

   Contesta, en este orden, lo que se preguntaría cualquiera que acabe de
   tocar el botón: ¿quedó hecho?, ¿cómo lo identifico?, ¿cuándo llega?, ¿y
   ahora qué? WhatsApp queda de salida opcional, abajo. --- */
.done{
  /* flex:1 + align-content:center la deja en el medio del cajón cuando sobra
     alto —que es lo normal— y la empuja a scroll normal cuando no. */
  flex:1; display:grid; align-content:center; justify-items:center; text-align:center;
  padding:2rem 1.35rem 1.6rem; gap:.1rem;
  animation:asoma .4s var(--e) both;
}
.done[hidden]{ display:none; }
.done__sello{
  width:62px; height:62px; border-radius:50%; display:grid; place-content:center;
  background:#1E7A3C; color:#fff; font-size:1.7rem; margin-bottom:.9rem;
  box-shadow:0 0 0 8px rgba(30,122,60,.13);
}
.done__sello .ico{ stroke-width:3; }
.done--falla .done__sello{
  background:var(--red); box-shadow:0 0 0 8px rgba(224,35,28,.13);
}
.done__title{
  font-family:var(--cond); font-weight:700; font-size:1.35rem;
  letter-spacing:.04em; text-transform:uppercase; line-height:1.15; color:#191512;
}
.done__ref{ font-size:.8rem; color:#8A8175; margin-top:.3rem; }
.done__ref b{
  font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:.92rem; color:#191512; letter-spacing:.04em;
}

/* El reloj: la respuesta a lo único que se pregunta de verdad. */
.done__eta{
  width:100%; margin-top:1.15rem;
  display:flex; align-items:center; gap:.7rem; text-align:left;
  background:#191512; color:#FDFBF5; border-radius:8px;
  padding:.85rem .95rem;
}
.done__eta[hidden]{ display:none; }
.done__eta > .ico{ font-size:1.4rem; color:var(--yellow); flex:none; }
.done__eta-txt{ min-width:0; }
.done__eta-txt b{
  display:block; font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.04em; text-transform:uppercase; line-height:1.2;
}
.done__eta-txt small{
  display:block; font-size:.76rem; line-height:1.4; color:#A79E90; margin-top:2px;
}

.done__pasos{
  width:100%; margin-top:1rem; text-align:left;
  display:flex; flex-direction:column; gap:.6rem;
}
.done__pasos li{
  display:grid; grid-template-columns:auto 1fr; gap:.6rem; align-items:start;
  font-size:.82rem; line-height:1.5; color:#5C554B;
}
.done__pasos .ico{ font-size:1rem; color:var(--red); margin-top:.15em; }
.done__pasos b{ color:#191512; font-weight:700; }

/* Los botones del final. WhatsApp primero pero en verde y no en el negro del
   botón de confirmar: es una salida más, no el paso que faltaba. */
.done__cta{ width:100%; margin-top:1.4rem; display:grid; gap:.55rem; }
.done__btn{
  display:flex; align-items:center; justify-content:center; gap:.5rem;
  padding:.85rem 1rem; border-radius:8px;
  font-family:var(--cond); font-weight:700; font-size:.85rem;
  letter-spacing:.1em; text-transform:uppercase;
  transition:transform .22s var(--e), background .25s, border-color .25s, color .25s;
}
.done__btn[hidden]{ display:none; }
.done__btn:hover{ transform:translateY(-2px); }
.done__btn .ico{ font-size:1.05rem; }
.done__btn--wa{ background:#25D366; color:#04220F; }
.done__btn--wa:hover{ background:#1FBF5B; }
.done__btn--suave{
  background:transparent; border:1.5px solid #DFD7C9; color:#6B635A;
}
.done__btn--suave:hover{ border-color:#191512; color:#191512; }

.done__nota{
  margin-top:.95rem; font-size:.75rem; line-height:1.55; color:#8A8175;
  max-width:34ch;
}
.done__nota[hidden]{ display:none; }

.receipt__trust{
  display:flex; align-items:center; justify-content:center; gap:.4rem;
  margin-top:.65rem; font-size:.74rem; line-height:1.4; color:#4F6B4E; text-align:center;
}
.receipt__trust .ico{ color:#2F8B47; flex:none; }
.receipt__legal{
  margin-top:.45rem; font-size:.74rem; line-height:1.5; color:#8A8175; text-align:center;
}
.receipt__acepta{
  margin-top:.4rem; font-size:.72rem; line-height:1.5; color:#A79E90; text-align:center;
}
.receipt__acepta a{
  color:#7A7266; text-decoration:underline; text-underline-offset:2px;
  transition:color .2s;
}
.receipt__acepta a:hover{ color:var(--red); }

/* ---------- 18b. PÁGINAS LEGALES ----------
   Términos y política de datos. Un documento de dieciséis puntos no se lee
   sobre fondo negro: la hoja es de papel crema, como la tirilla, puesta sobre
   el negro del sitio. La medida se corta a 68 caracteres —lo que el ojo lee
   sin perder el renglón— y los rótulos van numerados para poder citarlos
   ("punto 8") en un reclamo. */
.wrap--angosto{ max-width:min(780px, 100%); }

.legal{ padding-block:clamp(1.5rem, 4vw, 3rem) clamp(2.5rem, 6vw, 5rem); }
.legal .wrap--angosto{
  background:#FDFBF5; color:#191512; border-radius:6px;
  padding:clamp(1.4rem, 4.5vw, 3rem) clamp(1.15rem, 4vw, 3rem);
  box-shadow:0 30px 70px -40px rgba(0,0,0,.95);
}

.legal__head{ position:relative; padding-bottom:1.35rem; border-bottom:1px solid #E4DCD0; }
.legal__volver{
  display:inline-flex; align-items:center; gap:.4rem; margin-bottom:1.1rem;
  font-family:var(--cond); font-weight:700; font-size:.72rem;
  letter-spacing:.14em; text-transform:uppercase; color:#8A8175;
  transition:color .2s, transform .2s var(--e);
}
.legal__volver .ico{ font-size:.9rem; transform:rotate(180deg); }
.legal__volver:hover{ color:var(--red); transform:translateX(-2px); }
.legal__flag{
  display:block; width:64px; height:5px; margin-bottom:.9rem;
  background:var(--tricolor); border-radius:2px;
}
.legal h1{
  font-family:var(--display); font-weight:700; line-height:1.04;
  font-size:clamp(1.65rem, 5.2vw, 2.55rem);
  letter-spacing:-.01em; text-transform:uppercase; text-wrap:balance;
}
.legal__bajada{
  margin-top:.7rem; font-size:1rem; line-height:1.6; color:#5C554B;
  max-width:52ch;
}
.legal__vigencia{
  display:flex; align-items:center; gap:.45rem; margin-top:1rem;
  font-size:.8rem; color:#8A8175;
}
.legal__vigencia .ico{ color:var(--red); flex:none; }

/* El aviso de borrador. Sale solo mientras falte un dato obligatorio del
   negocio, y desaparece cuando marca.json queda completo. */
.legal__borrador{
  display:flex; gap:.7rem; align-items:flex-start; margin-top:1.35rem;
  background:#FFF6DE; border:1px dashed #E0BE55; border-left:4px solid var(--yellow);
  border-radius:5px; padding:.85rem .95rem;
}
.legal__borrador > .ico{ color:var(--yellow-deep); font-size:1.15rem; flex:none; margin-top:.1em; }
.legal__borrador b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.86rem;
  letter-spacing:.08em; text-transform:uppercase; color:#7A5B0B; margin-bottom:.25rem;
}
.legal__borrador p{ font-size:.84rem; line-height:1.55; color:#6B5A2E; }
.legal__borrador code{
  font-family:var(--mono); font-size:.86em;
  background:rgba(0,0,0,.06); border-radius:3px; padding:.05em .3em;
}

/* Índice. Con dieciséis puntos, poder saltar al que se vino a leer es la
   diferencia entre que se lea y que no. */
.legal__indice{
  margin-top:1.6rem; padding:1.05rem 1.15rem;
  background:#F4EEE2; border-radius:5px;
}
.legal__indice h2{
  font-family:var(--cond); font-weight:700; font-size:.72rem;
  letter-spacing:.18em; text-transform:uppercase; color:#8A8175; margin-bottom:.6rem;
}
.legal__indice ol{
  columns:2; column-gap:1.6rem; list-style:decimal; padding-left:1.1rem;
  font-size:.86rem; line-height:1.5;
}
.legal__indice li{ break-inside:avoid; margin-bottom:.3rem; color:#8A8175; }
.legal__indice a{ color:#3F3931; transition:color .2s; }
.legal__indice a:hover{ color:var(--red); text-decoration:underline; text-underline-offset:2px; }
@media (max-width:620px){ .legal__indice ol{ columns:1; } }

.legal__cuerpo{ margin-top:2.2rem; }
.legal__sec{ margin-bottom:2.1rem; scroll-margin-top:calc(var(--nav-h, 62px) + 18px); }
.legal__sec:last-child{ margin-bottom:0; }
.legal__sec h2{
  display:flex; align-items:baseline; gap:.6rem; margin-bottom:.75rem;
  font-family:var(--cond); font-weight:700; line-height:1.2;
  font-size:clamp(1.02rem, 2.6vw, 1.2rem);
  letter-spacing:.03em; text-transform:uppercase; color:#191512;
}
.legal__num{
  flex:none; min-width:1.5rem; text-align:right;
  font-family:var(--mono); font-size:.86rem; color:var(--red);
}
.legal__sec p{
  font-size:.95rem; line-height:1.72; color:#3F3931; margin-bottom:.75rem;
  max-width:68ch;
}
.legal__sec p:last-child{ margin-bottom:0; }
.legal__sec strong{ color:#191512; font-weight:700; }
.legal__sec em{ font-style:italic; }
.legal__sec a{
  color:#8C0B19; text-decoration:underline; text-underline-offset:2px;
  transition:color .2s;
}
.legal__sec a:hover{ color:var(--red); }
.legal__sec code{
  font-family:var(--mono); font-size:.88em;
  background:#EFE9DE; border-radius:3px; padding:.08em .35em;
}
.legal__lista{
  list-style:none; display:flex; flex-direction:column; gap:.5rem;
  margin:.15rem 0 .9rem; max-width:68ch;
}
.legal__lista li{
  position:relative; padding-left:1.15rem;
  font-size:.95rem; line-height:1.68; color:#3F3931;
}
.legal__lista li::before{
  content:''; position:absolute; left:0; top:.62em;
  width:6px; height:6px; border-radius:50%; background:var(--yellow);
}

/* Los datos del responsable: rótulo y valor, que es como se leen y como se
   copian a un reclamo. */
.legal__datos{
  display:flex; flex-direction:column; gap:.1rem;
  margin:.4rem 0 1rem; max-width:68ch;
  border:1px solid #E4DCD0; border-radius:5px; overflow:hidden;
}
.legal__datos > div{
  display:grid; grid-template-columns:minmax(9rem, 34%) 1fr; gap:.2rem 1rem;
  padding:.6rem .8rem; background:#fff;
}
.legal__datos > div:nth-child(even){ background:#FAF6EC; }
.legal__datos dt{
  font-family:var(--cond); font-weight:700; font-size:.7rem;
  letter-spacing:.1em; text-transform:uppercase; color:#8A8175;
  align-self:center;
}
.legal__datos dd{ font-size:.92rem; line-height:1.5; color:#191512; }
@media (max-width:520px){
  .legal__datos > div{ grid-template-columns:1fr; }
}

.legal__pie{
  margin-top:2.4rem; padding-top:1.35rem; border-top:1px solid #E4DCD0;
}
.legal__pie p{ font-size:.9rem; line-height:1.65; color:#5C554B; }
.legal__pie a{ color:#8C0B19; text-decoration:underline; text-underline-offset:2px; }
.legal__otros{ display:flex; flex-wrap:wrap; gap:.55rem; margin-top:1.05rem; }
.legal__otro{
  display:inline-flex; align-items:center; gap:.45rem;
  font-family:var(--cond); font-weight:700; font-size:.8rem;
  letter-spacing:.05em; text-transform:uppercase; color:#191512;
  border:1px solid #D9D2C6; border-radius:999px; padding:.5rem .95rem;
  transition:background .22s, border-color .22s, transform .22s var(--e);
}
.legal__otro:hover{
  background:#191512; border-color:#191512; color:#FDFBF5; transform:translateY(-1px);
}

/* Los enlaces legales del pie, en todas las páginas. */
.footer__legal{ display:flex; flex-wrap:wrap; gap:.3rem .95rem; }
.footer__legal a{
  font-size:.8rem; color:var(--muted); transition:color .2s;
  text-decoration:underline; text-underline-offset:2px;
  text-decoration-color:rgba(245,239,230,.22);
}
.footer__legal a:hover{ color:var(--yellow); text-decoration-color:currentColor; }

/* ---------- 19. LIGHTBOX ---------- */
.lightbox{
  position:fixed; inset:0; z-index:990; background:rgba(5,4,4,.94);
  backdrop-filter:blur(8px);
  display:grid; place-content:center; padding:clamp(1rem, 4vw, 3rem);
  opacity:0; visibility:hidden; transition:opacity .35s var(--e), visibility .35s;
}
.lightbox.is-open{ opacity:1; visibility:visible; }
.lightbox img{
  max-width:min(1250px, 96vw); max-height:88vh; object-fit:contain;
  border-radius:var(--r); box-shadow:0 30px 90px -20px #000;
  transform:scale(.94); transition:transform .45s var(--e);
}
.lightbox.is-open img{ transform:scale(1); }
.lightbox__close{
  position:absolute; top:1.1rem; right:1.1rem; z-index:2;
  width:40px; height:40px; border-radius:50%; font-size:1rem;
  background:var(--ink-3); border:1px solid var(--line); color:var(--cream);
  display:grid; place-content:center; transition:all .25s;
}
.lightbox__close:hover{ background:var(--yellow); color:var(--ink); border-color:var(--yellow); }

/* ---------- 20. TOAST ---------- */
.toast{
  position:fixed; left:50%; bottom:1.5rem; z-index:995;
  transform:translate(-50%, 130%);
  background:var(--yellow); color:var(--ink);
  font-family:var(--cond); font-weight:700; font-size:.88rem;
  letter-spacing:.09em; text-transform:uppercase;
  padding:.6rem 1.05rem; border-radius:var(--r);
  box-shadow:0 14px 40px -10px rgba(0,0,0,.75);
  opacity:0; visibility:hidden; pointer-events:none;
  transition:transform .45s var(--e), opacity .3s, visibility .3s;
  max-width:calc(100vw - 2rem); text-align:center;
}
.toast.show{ transform:translate(-50%, 0); opacity:1; visibility:visible; }

/* ============================================================
   20b. LA BANDERA COMO SISTEMA
   El sitio ya tenía amarillo y rojo; eso lo tiene cualquier casa de
   hamburguesas. Lo que lo vuelve venezolano es el azul del medio y que los
   tres colores aparezcan SIEMPRE en el mismo papel: la regla que marca dónde
   empieza algo. Rótulo de sección, canto de tarjeta, borde de la cinta de
   arriba, filo del pie. Nunca de relleno ni de fondo: en grande, tres colores
   planos se pelean con la comida de las fotos.
   ============================================================ */

/* Cinta de arriba: la bandera cierra el amarillo por abajo. */
.topbar::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:3px;
  background:var(--tricolor);
}

/* La barra de navegación, cuando se pega arriba, repite el gesto en fino. */
.nav::after{
  content:''; position:absolute; left:0; right:0; bottom:-1px; height:2px;
  background:var(--tricolor); opacity:0; transition:opacity .35s;
}
.nav.is-stuck::after{ opacity:.9; }

/* Pie: la bandera es la costura entre el cuerpo y el cierre. */
.footer::before{
  content:''; position:absolute; left:0; right:0; top:0; height:4px;
  background:var(--tricolor); z-index:2;
}

/* Banderita de verdad —bandas apiladas— al lado de la línea del país.
   Acá sí va en vertical: a este tamaño se lee como bandera y no como regla. */
.footer__flag::before{
  content:''; width:17px; height:12px; flex:none; border-radius:1px;
  background:var(--bandera); box-shadow:0 0 0 1px rgba(0,0,0,.35);
}

/* --- El arco de las ocho estrellas -----------------------------------------
   Es el elemento de la bandera que nadie más puede usar: ocho estrellas en
   arco. Va en sitios contados —la cabecera de la reserva, el pie— porque
   repetido pierde justo lo que lo hace especial. Su símbolo trae viewBox
   propio (120x30), así que necesita su propia caja: .ico lo dejaría cuadrado
   y las estrellas de los extremos se saldrían. */
.starband{
  display:block; width:clamp(112px, 15vw, 168px); height:auto; aspect-ratio:120 / 30;
  fill:currentColor; color:var(--yellow); opacity:.9;
  margin-block:.35rem 1rem;
}
.starband--centro{ margin-inline:auto; }
.footer__stars{
  color:rgba(245,197,24,.55); width:clamp(128px, 18vw, 190px);
  margin:1.6rem auto -.2rem;
}

/* --- Filo tricolor de las tarjetas -----------------------------------------
   Mismo gesto que en las tarjetas de categoría: la bandera entra por el canto
   de arriba al pasar por encima. Se usa el borde superior de 3px que la
   tarjeta ya tenía transparente para no cambiarle el alto a nada. */
.lcard, .step{ position:relative; }
.lcard::before, .step::before, .fcard::before{
  content:''; position:absolute; left:0; right:0; top:0; height:3px; z-index:3;
  background:var(--tricolor); transform:scaleX(0); transform-origin:left;
  transition:transform .4s var(--e);
}
.lcard:hover::before, .step:hover::before, .fcard:hover::before{ transform:scaleX(1); }

/* ============================================================
   20c. RESERVA DE MESA (reservar.html)
   ============================================================ */

/* La cabecera es la de la carta con otro titular: a brocha, como la portada,
   porque acá la marca sí tiene que hablar en primera persona. */
.mhero--reserva .mhero__bg img{ filter:saturate(1.05) contrast(1.03); }
.mhero__title--brocha{
  font-family:var(--marker); font-weight:400;
  font-size:clamp(2.4rem, 6vw, 4.6rem); line-height:1;
  letter-spacing:.005em; text-transform:uppercase;
  margin-bottom:.2rem; text-shadow:0 8px 34px rgba(0,0,0,.85), 0 2px 3px rgba(0,0,0,.6);
}
.mhero__title--brocha em{ font-style:normal; color:var(--yellow); }

/* Un halo azul detrás del papel: sobre el negro plano, la comanda se veía
   recortada y pegada encima en vez de apoyada. */
.resv{ position:relative; }
.resv::before{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(58% 42% at 28% 16%, rgba(11,63,168,.17), transparent 70%);
}
.resv > .wrap{ position:relative; z-index:1; }

/* --- Rejilla: la comanda a la derecha, pegada al scroll -------------------- */
.resv__grid{
  display:grid; gap:clamp(1rem, 2.4vw, 1.9rem);
  grid-template-columns:minmax(0, 1fr) minmax(280px, 340px);
  align-items:start;
}

/* --- El formulario, en papel ----------------------------------------------
   Mismo papel de la tirilla del pedido, dentado incluido: en esta casa lo que
   se anota a mano se anota en papel, y de paso hereda los campos y los botones
   segmentados que el carrito ya tenía resueltos.
   color-scheme:light es lo que hace que el selector de fecha del navegador
   salga claro; sin eso, en un sistema en modo oscuro aparece un calendario
   negro encima del papel. */
.rform{
  background:#FDFBF5; color:#191512; border-radius:2px;
  box-shadow:0 30px 70px -34px rgba(0,0,0,.9);
  color-scheme:light;
}
.rform__head{ padding:1.15rem 1.35rem .8rem; }
.rform__head h3{
  font-family:var(--cond); font-weight:700; font-size:1.15rem;
  letter-spacing:.09em; margin-bottom:.25rem;
}
.rform__head p{ font-size:.78rem; line-height:1.5; color:#6B635A; }
.rform__body{ padding:.4rem 1.35rem 1.35rem; }

/* --- Los pasos ------------------------------------------------------------- */
.rstep{ border:0; padding:0; margin:0 0 1.5rem; }
.rstep:last-child{ margin-bottom:.4rem; }
.rstep__legend{
  display:flex; align-items:center; gap:.55rem; width:100%;
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.06em; text-transform:uppercase; color:#191512;
  padding:.9rem 0 .55rem;
}
.rstep__num{
  display:grid; place-content:center; flex:none;
  width:23px; height:23px; border-radius:50%;
  background:#191512; color:#FDFBF5; font-style:normal;
  font-family:var(--mono); font-size:.74rem; font-weight:700;
}
.rstep__hint{ font-size:.8rem; color:#7A7266; margin-bottom:.7rem; }
.rstep .field{ margin-bottom:.65rem; }

/* Los campos del paso 1 que caben de a dos: día y hora. */
.rrow2{ display:grid; grid-template-columns:1fr 1fr; gap:.6rem; }


/* --- Las decoraciones ------------------------------------------------------
   Son <input type="radio"> de verdad, escondidos: así el grupo se recorre con
   las flechas del teclado y el lector de pantalla dice "3 de 7". El foco no se
   pierde porque el anillo se pinta sobre la tarjeta con :focus-visible. */
.decos{
  display:grid; gap:.55rem;
  grid-template-columns:repeat(auto-fit, minmax(178px, 1fr));
}
.deco{ display:block; cursor:pointer; }
.deco__input{ position:absolute; width:1px; height:1px; opacity:0; pointer-events:none; }
.deco__card{
  position:relative; height:100%; display:flex; flex-direction:column; gap:.22rem;
  background:#fff; border:1px solid #D9D2C6; border-radius:3px;
  padding:.8rem .85rem .75rem;
  transition:border-color .22s, background .22s, transform .22s var(--e), box-shadow .22s;
}
.deco:hover .deco__card{ background:#FBF7EE; transform:translateY(-2px); }
.deco__input:checked + .deco__card{
  border-color:#191512; background:#FFFCF0;
  box-shadow:inset 0 0 0 1px #191512;
}
.deco__input:focus-visible + .deco__card{ outline:2.5px solid var(--yellow); outline-offset:2px; }
.deco__ico{ font-size:1.7rem; line-height:1; color:#191512; margin-bottom:.15rem; }
.deco__ico .ico{ stroke-width:1.5; }
.deco__nombre{
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.05em; text-transform:uppercase; line-height:1.15;
}
.deco__desc{ font-size:.78rem; line-height:1.45; color:#7A7266; }
.deco__precio{
  margin-top:auto; padding-top:.5rem; font-size:1rem; color:#191512;
}
.deco__precio--free{
  font-family:var(--cond); font-size:.76rem; font-weight:700;
  letter-spacing:.12em; text-transform:uppercase; color:#8A8175;
}
.deco__check{
  position:absolute; top:.5rem; right:.5rem;
  width:21px; height:21px; border-radius:50%;
  display:grid; place-content:center; font-size:.68rem;
  background:#191512; color:#FDFBF5;
  opacity:0; transform:scale(.5); transition:opacity .2s, transform .25s var(--e);
}
.deco__input:checked + .deco__card .deco__check{ opacity:1; transform:scale(1); }
/* La que la casa quiere vender lleva la bandera puesta desde el principio. */
.deco--destacada .deco__card{ border-color:rgba(199,147,0,.55); }
.deco--destacada .deco__card::before{
  content:''; position:absolute; left:0; right:0; top:0; height:3px;
  border-radius:3px 3px 0 0; background:var(--tricolor);
}

/* --- Los extras ------------------------------------------------------------ */
.xtras{ display:flex; flex-direction:column; gap:.45rem; }
.xtra{ display:block; cursor:pointer; }
.xtra__input{ position:absolute; width:1px; height:1px; opacity:0; pointer-events:none; }
.xtra__card{
  display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:.7rem;
  background:#fff; border:1px solid #D9D2C6; border-radius:3px;
  padding:.6rem .75rem; transition:border-color .22s, background .22s;
}
.xtra:hover .xtra__card{ background:#FBF7EE; }
.xtra__input:checked + .xtra__card{
  border-color:#191512; background:#FFFCF0; box-shadow:inset 0 0 0 1px #191512;
}
.xtra__input:focus-visible + .xtra__card{ outline:2.5px solid var(--yellow); outline-offset:2px; }
.xtra__ico{
  width:34px; height:34px; flex:none; display:grid; place-content:center;
  border:1px solid #E4DCD0; border-radius:50%; font-size:1.05rem; color:#191512;
  transition:background .22s, border-color .22s, color .22s;
}
.xtra__ico .ico{ stroke-width:1.6; }
.xtra__input:checked + .xtra__card .xtra__ico{
  background:#191512; border-color:#191512; color:var(--yellow);
}
.xtra__txt b{
  display:block; font-family:var(--cond); font-weight:700; font-size:.95rem;
  letter-spacing:.04em; text-transform:uppercase; line-height:1.2;
}
.xtra__txt small{ display:block; font-size:.76rem; line-height:1.4; color:#7A7266; }
.xtra__precio{ font-size:.92rem; color:#191512; }

/* --- La comanda de la derecha ----------------------------------------------
   Se queda pegada al scroll en escritorio: la decisión que se está tomando
   abajo (¿le sumo la serenata?) tiene que verse reflejada arriba sin subir. */
.rsum{
  position:sticky; top:96px; overflow:hidden;
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  padding:1.3rem 1.15rem 1.15rem;
}
.rsum__flag{ position:absolute; left:0; right:0; top:0; height:4px; background:var(--tricolor); }
.rsum__titulo{
  font-family:var(--cond); font-weight:700; font-size:1.15rem;
  letter-spacing:.1em; text-transform:uppercase; margin-bottom:.9rem;
}
.rsum__datos{ display:flex; flex-direction:column; gap:.42rem; }
.rsum__datos > div{ display:flex; justify-content:space-between; gap:.8rem; align-items:baseline; }
.rsum__datos dt{
  font-family:var(--cond); font-weight:700; font-size:.76rem;
  letter-spacing:.12em; text-transform:uppercase; color:var(--muted-2);
}
.rsum__datos dd{ font-size:.9rem; text-align:right; color:var(--cream); }
.rsum__datos > div[hidden]{ display:none; }

.rsum__linea{
  height:1px; margin:.95rem 0; opacity:.5;
  background-image:linear-gradient(90deg, var(--muted-2) 50%, transparent 50%);
  background-size:7px 1px;
}
.rsum__cargos{ display:flex; flex-direction:column; gap:.42rem; }
.rsum__cargos li{ display:flex; justify-content:space-between; gap:.8rem; font-size:.88rem; }
.rsum__cargos span{ color:var(--muted); }
.rsum__cargos b{ color:var(--cream); flex:none; }

.rsum__total{
  display:flex; justify-content:space-between; align-items:baseline; gap:1rem;
  margin-top:.95rem; padding-top:.7rem; border-top:2px solid var(--line);
  font-family:var(--cond); font-weight:700; font-size:1rem;
  letter-spacing:.09em; text-transform:uppercase;
}
.rsum__total b{ font-size:1.35rem; color:var(--yellow); letter-spacing:0; }
.rsum__nota{ font-size:.78rem; line-height:1.5; color:var(--muted-2); margin:.7rem 0 1rem; }
.rsum .btn--wa{ font-family:var(--cond); letter-spacing:.06em; }
.rsum__legal{ font-size:.75rem; line-height:1.5; color:var(--muted-2); margin-top:.75rem; }

/* ============================================================
   20d. LA PUERTA A LA RESERVA (index.html)
   ============================================================ */
.reservas{ background:var(--ink-2); }
.rteaser{
  position:relative; overflow:hidden;
  display:grid; gap:clamp(1.2rem, 3vw, 2.6rem);
  grid-template-columns:minmax(0, 1.35fr) minmax(240px, .9fr);
  align-items:center;
  background:
    radial-gradient(120% 130% at 100% 0%, rgba(11,63,168,.18), transparent 58%),
    var(--ink-3);
  border:1px solid var(--line); border-radius:var(--r);
  padding:clamp(1.4rem, 3.4vw, 2.6rem);
}
/* Acá el azul sí entra en grande: es la única sección donde el tricolor es el
   tema y no el acento, porque de eso habla —celebrar. */
.rteaser__flag{ position:absolute; left:0; right:0; top:0; height:5px; background:var(--tricolor); }
.rteaser__copy .shead__title{ margin-bottom:.85rem; }
.rteaser__copy .shead__desc{ margin-bottom:1.3rem; max-width:52ch; }

.rteaser__chips{ display:flex; flex-wrap:wrap; gap:.4rem; margin-bottom:1.5rem; }
.rchip{
  display:inline-flex; align-items:center; gap:.42rem;
  font-family:var(--cond); font-weight:700; font-size:.82rem;
  letter-spacing:.08em; text-transform:uppercase; color:var(--muted);
  background:rgba(255,255,255,.03); border:1px solid var(--line);
  border-radius:999px; padding:.42rem .8rem;
  transition:color .25s, border-color .25s, background .25s, transform .25s var(--e);
}
.rchip .ico{ font-size:1.05rem; stroke-width:1.6; color:var(--blue-2); transition:color .25s; }
.rchip:hover{
  color:var(--ink); background:var(--yellow); border-color:var(--yellow);
  transform:translateY(-2px);
}
.rchip:hover .ico{ color:var(--ink); }

.rteaser__cta{ display:flex; flex-wrap:wrap; align-items:center; gap:.9rem 1.2rem; }
.rteaser__desde{
  font-family:var(--cond); font-weight:700; font-size:.84rem;
  letter-spacing:.1em; text-transform:uppercase; color:var(--muted);
}
.rteaser__desde .price{ color:var(--yellow); font-size:1rem; margin-left:.15rem; }

.rteaser__facts{ display:flex; flex-direction:column; gap:.55rem; }
.rteaser__facts li{
  display:grid; grid-template-columns:auto 1fr; column-gap:.75rem;
  grid-template-areas:"ico titulo" "ico detalle"; align-items:center;
  background:rgba(11,10,9,.5); border:1px solid var(--line-2);
  border-radius:var(--r); padding:.7rem .85rem;
}
.rteaser__ico{
  grid-area:ico; font-size:1.5rem; line-height:1; color:var(--yellow);
}
.rteaser__ico .ico{ stroke-width:1.5; }
.rteaser__facts b{
  grid-area:titulo; font-family:var(--cond); font-weight:700; font-size:.98rem;
  letter-spacing:.05em; text-transform:uppercase; line-height:1.15;
}
.rteaser__facts span:last-child{ grid-area:detalle; font-size:.8rem; color:var(--muted); }

/* ============================================================
   20e. RESERVA — PANTALLAS CHICAS
   ============================================================ */
@media (max-width:1023px){
  .resv__grid{ grid-template-columns:1fr; }
  /* En una sola columna la comanda deja de tener sentido pegada: quedaría
     tapando el formulario que se está llenando. Baja al final, que es donde
     está el botón de enviar. */
  .rsum{ position:static; }
  .rteaser{ grid-template-columns:1fr; }
}
@media (max-width:760px){
  .rform__body{ padding-inline:1.05rem; }
  .rform__head{ padding-inline:1.05rem; }
  .decos{ grid-template-columns:repeat(auto-fit, minmax(185px, 1fr)); gap:.45rem; }
  .deco__card{ padding:.7rem .7rem .65rem; }
  .deco__ico{ font-size:1.5rem; }
  .deco__desc{ font-size:.75rem; }
  .xtra__card{ gap:.55rem; padding:.55rem .6rem; }
  .xtra__ico{ width:30px; height:30px; font-size:.95rem; }
  .mhero__title--brocha{ font-size:clamp(2.1rem, 10vw, 3rem); }
  .starband{ width:clamp(104px, 34vw, 140px); }
}
/* --- Las decoraciones en teléfono ------------------------------------------
   En dos columnas de 165 px no cabía la descripción, así que se escondía. Pero
   la descripción es justo lo que hace elegir —"globos amarillo, azul y rojo,
   letrero y velas" es lo que vende el cumpleaños— y esconderla en el ancho
   donde está la mayoría del público era esconderla siempre.

   Así que en teléfono las tarjetas pasan a lista, con la misma forma que los
   extras de abajo: icono, motivo con su explicación, y el precio a la derecha.
   El tilde deja de ir en la esquina y ocupa su propia celda de la rejilla, que
   es lo que evita que se monte encima del precio. --- */
@media (max-width:560px){
  .decos{ grid-template-columns:1fr; gap:.45rem; }
  .deco__card{
    display:grid; align-items:center; gap:.1rem .8rem;
    grid-template-columns:auto 1fr auto;
    grid-template-areas:"ico nombre check" "ico desc precio";
    padding:.7rem .8rem;
  }
  .deco__ico{ grid-area:ico; font-size:1.65rem; margin-bottom:0; }
  .deco__nombre{ grid-area:nombre; }
  .deco__desc{ grid-area:desc; font-size:.78rem; }
  .deco__precio{
    grid-area:precio; margin-top:0; padding-top:0;
    justify-self:end; align-self:center; white-space:nowrap;
  }
  .deco__check{
    grid-area:check; position:static; justify-self:end; align-self:center;
    width:19px; height:19px; font-size:.62rem;
  }
  /* Sin descripción (una carta que no las escriba) el motivo se queda solo en
     su renglón y el precio sube a la misma línea. */
  .deco__desc:empty{ display:none; }
}

@media (max-width:420px){
  /* Día y hora dejan de compartir renglón: a 320px el selector de hora
     quedaba en dos dígitos y medio. */
  .rrow2{ grid-template-columns:1fr; }
}

/* ============================================================
   20f. PÁGINA QUE NO EXISTE (404)
   ============================================================ */
.oops{
  display:grid; place-items:center;
  /* Alto de pantalla menos la barra: la página tiene cuatro líneas de texto y
     sin esto el pie le quedaba pegado arriba, a media pantalla. */
  min-height:clamp(420px, calc(100svh - 190px), 720px);
  padding-block:clamp(2.5rem, 7vw, 5rem);
  text-align:center;
}
.oops__inner{ max-width:52ch; }
.oops__num{
  display:block; font-family:var(--display); font-size:clamp(5rem, 18vw, 10rem);
  line-height:.8; color:transparent; letter-spacing:.02em;
  -webkit-text-stroke:2px var(--line-2);
}
.oops__title{
  font-family:var(--headline); font-weight:800;
  font-size:clamp(1.7rem, 4.6vw, 2.7rem); line-height:1.05;
  margin-top:.9rem;
}
.oops__title em{ font-style:normal; color:var(--yellow); }
.oops__text{ color:var(--muted); margin-top:.9rem; }
.oops__acciones{
  display:flex; flex-wrap:wrap; gap:.7rem; justify-content:center;
  margin-top:1.6rem;
}
.oops__wa{ font-size:.85rem; color:var(--muted-2); margin-top:1.4rem; }
.oops__wa a{ color:var(--cream); border-bottom:1px solid var(--line-2); }
.oops__wa a:hover{ color:var(--yellow); border-color:currentColor; }

/* ============================================================
   21. RESPONSIVE
   ============================================================ */

/* --- Portátiles de poca altura (1366x768, o 1080p al 150% de escalado).
       Sin esto el hero no cabe y la franja de platos queda fuera de vista. --- */
@media (min-width:1024px) and (max-height:820px){
  .hero{ min-height:auto; }
  .hero__content{ padding-block:1.9rem 1.3rem; }
  .hero__credit{ margin-bottom:.9rem; }
  .hero__mark{ font-size:clamp(2.4rem, 5.4vw, 4.3rem); }
  .hero__flag{ margin-block:.6rem 1rem; }
  .hero__sub{ margin-bottom:1.3rem; font-size:1rem; }
  .hero__marks{ padding-bottom:1.2rem; }
  .eyebrow{ margin-bottom:1.1rem; }
  .section{ padding-block:clamp(2.25rem, 3.6vw, 3.5rem); }
  .shead{ margin-bottom:1.5rem; }
  .shead__title{ font-size:clamp(1.7rem, 3.1vw, 2.5rem); }
  .fcard__img{ aspect-ratio:16 / 10; }
  .ggrid{ grid-auto-rows:172px; gap:12px; }
  /* el tope de 34vh es el que manda aquí: a 768px de alto deja el equipo en
     ~260px de ancho y la sección entera por debajo de los 700px */
  .phone{ --phone-w:min(clamp(250px, 20vw, 320px), 34vh); }
  .about__text .shead__title{ font-size:clamp(1.7rem, 2.9vw, 2.6rem); margin-block:.55rem 1.1rem; }
  .loc__map, .loc__map iframe{ min-height:340px; }
}

/* --- Escritorio ----------------------------------------------------------- */
@media (min-width:1024px){
  /* Se resta el alto de topbar + nav (~100 px) y el de la franja de platos
     (~46 px, que desde que la portada lleva promesas al pie va fuera del
     hero) para que la franja siga entrando en la primera pantalla. */
  .hero{ min-height:min(calc(100svh - 152px), 820px); }
  .hero__sub{ font-size:1rem; }
}

/* --- Móvil y tablet --------------------------------------------------------
   Se acabó el ancho para dos columnas: la foto vuelve a ocupar el cuadro
   entero por detrás y el texto se le pone encima. El velo cambia de eje —deja
   de apagar por la izquierda y pasa a hundir arriba y abajo— y la frase de la
   casa baja al pie del bloque, alineada con el resto. --- */
@media (max-width:1023px){
  .hero{ min-height:min(88svh, 740px); }
  .hero__media{ inset:0; -webkit-mask-image:none; mask-image:none; }
  .hero__video{ object-position:50% 44%; }
  /* Los dos velos se sumaban de mas: el vertical dejaba .46 en el centro y el
     diagonal metia otro .55 encima, asi que la franja donde justamente se
     mira el video quedaba a ~85% de negro y el reel no se apreciaba. Ahora el
     vertical solo hunde cabecera y pie -la barra de arriba y las promesas de
     abajo- y el diagonal baja a la mitad: hace de fondo para el titular por el
     canto izquierdo y suelta el derecho casi limpio. La legibilidad la
     sostienen las sombras de texto, que se refuerzan mas abajo. */
  .hero__scrim{
    background:
      linear-gradient(to bottom,
        rgba(11,10,9,.86) 0%, rgba(11,10,9,.2) 22%, rgba(11,10,9,.28) 56%,
        rgba(11,10,9,.72) 82%, rgba(11,10,9,.94) 100%),
      linear-gradient(100deg,
        rgba(11,10,9,.6) 0 16%, rgba(11,10,9,.26) 60%, rgba(11,10,9,.08) 100%);
  }
  /* Sobre fondo plano una sombra suave alcanzaba; sobre el reel, no: el texto
     cae sobre fotogramas que cambian de brillo. Se refuerza el halo negro de
     cada renglon -no se sube el velo- para no volver a apagar el video. */
  .hero__sub{ color:rgba(245,239,230,.92); text-shadow:0 2px 4px rgba(0,0,0,.9), 0 4px 22px rgba(0,0,0,.95); }
  .hero__credit{ text-shadow:0 1px 3px rgba(0,0,0,.9), 0 2px 16px rgba(0,0,0,.95); }
  .hero__mark{ text-shadow:0 3px 6px rgba(0,0,0,.75), 0 10px 38px rgba(0,0,0,.9); }
  .hmark b{ text-shadow:0 1px 3px rgba(0,0,0,.9), 0 2px 14px rgba(0,0,0,.85); }
  .hmark > span:last-child{ color:rgba(245,239,230,.72); text-shadow:0 1px 3px rgba(0,0,0,.9); }
  .hmark__ico{ filter:drop-shadow(0 2px 6px rgba(0,0,0,.8)); }

  /* align-content y no align-items: con una sola columna son dos filas, y lo
     que hay que centrar es el bloque entero contra el alto libre, no cada
     fila dentro de su propia franja. */
  .hero__content{ grid-template-columns:1fr; align-content:center; align-items:start; }
  .hero__note{
    justify-self:start; text-align:left; max-width:26ch;
    margin-top:.3rem; transform:rotate(-3deg);
  }
  .hero__note::after{ margin-left:0; }
  .hero__marks{ grid-template-columns:repeat(2, 1fr); row-gap:1rem; }
  /* a dos columnas el filete solo separa la pareja de cada fila: en la tercera
     promesa arrancaría una fila nueva con una raya colgando a la izquierda */
  .hmark + .hmark::before{ display:none; }
  .hmark:nth-child(even)::before{ display:block; }
}

/* --- Pantallas anchas: el titular ya topa en su clamp (la brocha pasada de
       ~96 px se come la foto), así que lo único que sube es el encabezado de
       sección. --- */
@media (min-width:1600px){
  .shead__title{ font-size:3.1rem; }
}


@media (max-width:1080px){
  .fgrid{ grid-template-columns:repeat(2, 1fr); }
  /* A dos columnas, las dos hamburguesas pasan a fila completa y el dog y el
     bowl comparten la de abajo. El span de dos filas se retira: sobre un
     elemento que ya ocupa todo el ancho solo lo estiraría a lo alto. */
  .fcard--xl, .fcard--wide{ grid-column:1 / -1; }
  .fcard--xl{ grid-row:auto; }
  .fcard--xl .fcard__img{ aspect-ratio:16 / 9; min-height:0; flex:0 0 auto; }
  .loc__grid{ grid-template-columns:1fr; }
  .footer__grid{ grid-template-columns:1fr 1fr; gap:2rem; }
  /* A dos columnas cada tarjeta de hamburguesa se lleva una fila entera y el
     dog y el bowl comparten la de abajo: el reparto sigue diciendo lo mismo. */
  .menucta__grid{ grid-template-columns:repeat(2, 1fr); }
  /* La destacada deja de llevarse la fila entera. La regla venía de cuando
     eran ocho categorías y dos destacadas; con doce y cuatro, la sección se
     volvía una escalera de cajones casi vacíos —el texto ocupa el tercio
     izquierdo y el resto es fondo— intercalados con parejas compactas. A dos
     columnas parejas se lee como una parrilla de categorías y la sección mide
     unos 400 px menos. Se sigue distinguiendo por el fondo amarillo, el filo
     tricolor y su etiqueta, que es lo que la hacía destacada. */
  .mcard--destacada{ grid-column:auto; }
  .howto__cards{ grid-template-columns:repeat(2, 1fr); }
  .loc__cards{ grid-template-columns:repeat(2, 1fr); }
}

/* --- La barra, con seis enlaces ------------------------------------------
   Con la reserva la navegación pasó de cinco entradas a seis, y entre 900 y
   1140 px ya no caben al lado del logotipo, la píldora de horario y el
   carrito: la fila se desbordaba antes de llegar al ancho donde el menú pasa a
   hamburguesa. Se aprietan las entradas y se suelta el nombre escrito a mano,
   que es lo único de ahí que ya está dicho por el logotipo. --- */
@media (min-width:901px) and (max-width:1140px){
  .nav__wordmark{ display:none; }
  .nav__links{ gap:0; }
  .nav__links a{ padding-inline:.4rem; font-size:.78rem; letter-spacing:.05em; }
}

@media (max-width:900px){
  /* panel móvil: opacidad en vez de translateX para no generar
     scroll horizontal (los elementos fixed escapan al overflow del body) */
  .nav__links{
    position:fixed; inset:0; width:100%; height:100dvh;
    flex-direction:column; justify-content:center; align-items:center; gap:.4rem;
    background:var(--ink); padding:5rem 2rem 2rem;
    margin-left:0; z-index:-1;
    opacity:0; visibility:hidden; pointer-events:none;
    transition:opacity .34s var(--e), visibility .34s;
  }
  .nav__links.is-open{ opacity:1; visibility:visible; pointer-events:auto; }
  .nav__links a{
    font-size:1.65rem; padding:.5rem 1rem;
    transform:translateY(16px); opacity:0;
    transition:transform .5s var(--e), opacity .5s var(--e), color .25s;
  }
  .nav__links.is-open a{ transform:none; opacity:1; }
  .nav__links.is-open a:nth-child(1){ transition-delay:.06s }
  .nav__links.is-open a:nth-child(2){ transition-delay:.11s }
  .nav__links.is-open a:nth-child(3){ transition-delay:.16s }
  .nav__links.is-open a:nth-child(4){ transition-delay:.21s }
  .nav__links.is-open a:nth-child(5){ transition-delay:.26s }
  .nav__links a::after{ left:1rem; right:1rem; bottom:.4rem; }
  .burger{ display:flex; }
  .status{ display:none; }
  .btn--cart .btn__label{ display:none; }

  /* El que empujaba las acciones al borde derecho era .nav__links con su
     margin-left:auto. Acá el panel de enlaces pasa a position:fixed, sale del
     flujo y deja de empujar: el carrito y la hamburguesa se quedaban pegados
     al logo con toda la barra vacía a la derecha. */
  .nav__actions{ margin-left:auto; }
  /* 50px de logo en una barra de teléfono se comen demasiada pantalla */
  .nav__logo img{ height:46px; }
  .nav__wordmark{ font-size:1.15rem; }

  /* Nosotros sigue a dos columnas en móvil: el video es vertical, así que
     apilarlo dejaba media pantalla vacía a los lados. */
  .about__grid{
    grid-template-columns:auto 1fr;
    gap:clamp(1.1rem, 3.5vw, 2rem);
  }
  .phone{ --phone-w:min(260px, 34vw, 40vh); }
  .about__text p{ font-size:.9rem; }
  .about__text .shead__title{ font-size:clamp(1.8rem, 4vw, 2.4rem); margin-block:.5rem 1rem; }
  .about__stats li{ padding-inline:.7rem; }

  /* a tres columnas los pasos quedaban en tiras de texto de dos palabras */
  .steps{ grid-template-columns:1fr; }
  .step{ padding:1.3rem 1.15rem 1.2rem; }
}

@media (max-width:760px){
  html{ scroll-padding-top:76px; }
  .section{ padding-block:2.9rem; }

  /* Portada en teléfono: crédito, titular, bajada, dos botones apilados y las
     cuatro promesas de a dos. Entra todo apretando los registros pequeños. El
     paralaje también se recorta: con menos recorrido, la escala de la foto
     puede bajar y se pierde menos encuadre. */
  .hero{ min-height:min(90svh, 750px); }
  /* La escala era el recorte: 1.06 se comia un 6% del encuadre de un reel que
     ya venia justo de alto. Con el paralaje recortado a .3 alcanza con 1.03
     para que no asome el fondo negro por el canto de arriba, y se ve mas
     video. */
  .hero__video{
    object-position:50% 42%;
    transform:translateY(calc(var(--par, 0px) * .3)) scale(1.03);
  }
  .hero__content{ padding-block:1.6rem 1.5rem; }
  /* con .58rem y .2em la línea de crédito entra en un renglón a 390 px */
  .hero__credit{ font-size:.58rem; letter-spacing:.2em; gap:.3rem .6rem; margin-bottom:1.3rem; }

  /* El titular a 12.5vw medía 328 px dentro de una caja de 356: entraba, pero
     rozando los dos cantos, y con la interlínea de escritorio (.98) los dos
     renglones se tocaban. Leído en la mano no parecía un titular grande sino
     una pared de letras, y era lo que apretaba todo lo de abajo. A 10.8vw le
     quedan ~70 px de aire a los lados y los renglones respiran, sin dejar de
     ser lo primero que se ve. */
  .hero__mark{ font-size:clamp(2.05rem, 10.8vw, 3.2rem); line-height:1.06; }
  .hero__flag{ height:6px; margin-block:.95rem 1.5rem; }
  .hero__sub{ font-size:.9rem; line-height:1.68; margin-bottom:1.85rem; }
  /* La frase a mano se retira: dice lo mismo que el titular y la bajada, y en
     una pantalla de 390 px se llevaba el alto que necesitan los botones.
     Sigue en el HTML, así que el buscador la ve igual. */
  .hero__note{ display:none; }
  /* Las cuatro promesas se quedan en su título. Con el detalle debajo eran
     ocho renglones de texto chico bajo los botones —la mitad de todo lo que
     se lee al entrar— y entre eso y el resto no quedaba un hueco por donde
     mirar el video del fondo. El detalle sigue en el HTML: lo lee el buscador
     y lo lee un lector de pantalla, solo no se pinta en el primer pantallazo.
     Es el mismo recorte que ya se hacía con el teléfono apaisado. */
  /* El hueco de abajo no es aire: es el sitio del botón flotante. Está fijo a
     46 px del pie de la pantalla y se montaba encima de la cuarta promesa,
     que quedaba como un icono suelto sin su título al lado. */
  .hero__marks{ gap:1rem 1.1rem; padding-bottom:3.4rem; }
  .hmark{ grid-template-areas:"ico titulo"; align-items:center; }
  .hmark > span:last-child{ display:none; }
  .hmark__ico{ font-size:1.45rem; }
  .hmark b{ font-size:.82rem; letter-spacing:.06em; }
  .eyebrow{ font-size:.74rem; letter-spacing:.16em; margin-bottom:1.1rem; }
  /* apilados y a un ancho medido: a todo lo ancho del teléfono los botones se
     leían como dos franjas y no como botones */
  .hero__cta{
    flex-direction:column; align-items:stretch; width:100%; max-width:340px;
    gap:.85rem;
  }
  .hero__cta .btn{ width:100%; }
  .dchip{ font-size:.74rem; padding:.68rem .8rem; letter-spacing:.05em; }
  .dchip .ico{ width:15px; height:15px; }

  .shead{ margin-bottom:1.5rem; }
  .shead__desc{ font-size:.9rem; }

  /* En media tarjeta, el cuerpo grande de la destacada partía "HAMBURGUESAS"
     en dos renglones y dejaba la fila desalineada con su pareja. Iguala al
     del resto: a este ancho la distingue el color, no el tamaño. */
  .mcard--destacada .mcard__ico{ font-size:1.95rem; }
  .mcard--destacada h3{ font-size:1.16rem; }
  .mcard--destacada .mcard__meta{ font-size:.8rem; }

  /* El pie, en una sola columna, era una escalera de once renglones.
     "Explora" y "Pide ya" son dos listas cortas: en pareja el pie mide unos
     200 px menos y se lee como dos menús. La marca y el contacto llevan texto
     corrido, así que siguen a lo ancho. */
  .footer__grid{ grid-template-columns:1fr 1fr; gap:1.7rem 1.1rem; }
  .footer__brand{ grid-column:1 / -1; }
  .footer__col:last-child{ grid-column:1 / -1; }

  /* Las entradas laterales vuelven al gesto vertical: en móvil lo que iba en
     pareja se apila, así que "cada uno desde su lado" ya no significa nada.
     (El desborde que también causaban está resuelto de raíz arriba, atando el
     recorrido al margen de la página.) */
  .reveal--izq, .reveal--der{ transform:translateY(26px); }

  /* Las cinco pestañas no caben en una línea a 390 px y quedaban 4 + 1 suelta
     y centrada. Pasan a una tira que se desliza, como los filtros de
     cualquier app de domicilios: los márgenes negativos la sacan hasta el
     borde de la pantalla para que el corte se lea como "hay más". */
  .tabs{
    flex-wrap:nowrap; justify-content:flex-start;
    overflow-x:auto; scrollbar-width:none; -ms-overflow-style:none;
    scroll-snap-type:x proximity;
    margin-inline:calc(var(--pad) * -1);
    padding-inline:var(--pad);
    /* Se queda pegada debajo de la barra. En una carta de treinta y cinco
       platos, tener que subir hasta arriba para cambiar de categoría era el
       peor momento de la página en un teléfono: ahora el filtro está siempre
       a un dedo, en el sitio donde ya estabas mirando. */
    position:sticky; top:var(--nav-h, 62px); z-index:60;
    padding-block:.6rem;
    margin-bottom:.9rem;
    background:rgba(11,10,9,.93);
    backdrop-filter:blur(14px) saturate(150%);
    -webkit-backdrop-filter:blur(14px) saturate(150%);
    transition:box-shadow .3s var(--e);
  }
  .tabs::-webkit-scrollbar{ display:none; }
  /* Solo cuando de verdad está pegada: mientras se lee en su sitio, la sombra
     y la línea sobran. La clase la pone el bucle de scroll. */
  .tabs.is-stuck{ box-shadow:0 14px 28px -18px rgba(0,0,0,.98); }
  .tabs.is-stuck::after{
    content:''; position:absolute; left:0; right:0; bottom:0; height:2px;
    background:var(--tricolor); opacity:.9;
  }
  .tab{ flex:0 0 auto; scroll-snap-align:start; }

  /* La rejilla se queda a dos columnas también en teléfono: apilar las cuatro
     iguales borraba la jerarquía —cuál manda más— que es justo lo que dice
     esta sección. La insignia y la segunda se llevan la fila entera; las dos
     chicas comparten la de abajo, como en la pantalla grande. */
  .fcard--xl .fcard__img{ aspect-ratio:4 / 3; }
  .fcard__img{ aspect-ratio:16 / 10; }


  .mcat{ grid-template-columns:1fr; gap:.8rem; }
  .mcat__label{
    writing-mode:horizontal-tb; transform:none; position:static;
    font-size:clamp(1.9rem, 9vw, 2.8rem); -webkit-text-stroke-width:1.3px;
  }
  .mcat__items{ grid-template-columns:1fr; }

  .upsize{ flex-direction:column; align-items:flex-start; }
  .upsize__opts{ width:100%; }
  .upsize__opt{ flex:1; }

  .menucta__panel{ flex-direction:column; align-items:flex-start; }
  .menucta__actions{ width:100%; flex-direction:column; align-items:stretch; }
  .mcard{ padding:1rem .95rem .9rem; }
  .mitem--foto{ grid-template-columns:74px minmax(0, 1fr); gap:.3rem .7rem; }
  .mitem__pic{ width:74px; height:74px; }
  .mcard__ico{ font-size:1.7rem; }
  .mcard h3{ font-size:1.05rem; }
  .mcard--destacada .mcard__ico{ font-size:1.7rem; }
  .mcard--destacada h3{ font-size:1.05rem; }
  /* "CON QUESO DE MANO" son 17 caracteres: a .68rem no entran en los 142 px
     de una media tarjeta y el sello se partía en dos. */
  .mcard__tag{ font-size:.6rem; letter-spacing:.09em; padding:.22rem .45rem; }

  .mhero__cta{ flex-direction:column; align-items:stretch; }
  .mhero__cta .btn{ width:100%; }
  .mhero__facts{ gap:.45rem; }
  .mhero__facts li{ padding:.55rem .8rem; }

  .howto__cards{ grid-template-columns:1fr; }

  /* Móvil: dos columnas. Misma idea, la grilla se cierra exacta en 12
     celdas (4 de la hero + 4 sueltas + 4 de la banda). */
  .ggrid{ grid-template-columns:repeat(2, 1fr); grid-auto-rows:150px; gap:10px; }
  .gitem--a{ grid-column:1 / -1; grid-row:1 / span 2; }
  .gitem--b{ grid-column:1; grid-row:3; }
  .gitem--c{ grid-column:2; grid-row:3; }
  .gitem--d{ grid-column:1; grid-row:4; }
  .gitem--f{ grid-column:2; grid-row:4; }
  .gitem--e{ grid-column:1 / -1; grid-row:5 / span 2; }

  .loc__cards{ grid-template-columns:1fr; }
  .loc__map, .loc__map iframe{ min-height:330px; }
  .sedes{ grid-template-columns:1fr; }
  .sede__map iframe{ min-height:210px; }

  .soon{ flex-direction:column; align-items:flex-start; }
  .soon .btn{ width:100%; }

  .footer__bottom{ flex-direction:column; text-align:center; }

  .receipt{ width:100%; }
  .fab{ padding:.7rem .95rem; font-size:.78rem; gap:.45rem; right:.9rem; }
  .fab .ico{ width:19px; height:19px; }
  /* en móvil el aviso va arriba: abajo están el botón flotante
     y la barra de acción del carrito */
  .toast{
    top:calc(env(safe-area-inset-top, 0px) + .9rem); bottom:auto;
    transform:translate(-50%, -180%);
  }
  .toast.show{ transform:translate(-50%, 0); }
}

/* --- Pantallas angostas: mantener los párrafos en una columna de ~200px
       los volvía ilegibles. El celular se queda al lado del titular
       (una fila) y el cuerpo de texto pasa a todo el ancho debajo.
       display:contents sube head/body a items de la grilla. --- */
@media (max-width:560px){
  .about__grid{
    grid-template-columns:auto 1fr;
    column-gap:1.1rem; row-gap:1.4rem;
    align-items:start;
  }
  .about__text{ display:contents; }
  .about__video{ grid-column:1; grid-row:1; }
  .about__head{ grid-column:2; grid-row:1; align-self:center; }
  .about__body{ grid-column:1 / -1; grid-row:2; }

  .phone{ --phone-w:min(230px, 50vw, 42vh); }
  /* la rayita del kicker se come 41px de una columna de ~170px */
  .about__head .shead__kicker{
    padding-left:0; margin-bottom:.5rem; font-size:.68rem; letter-spacing:.16em;
  }
  .about__head .shead__kicker::before{ display:none; }
  .about__text .shead__title{
    font-size:clamp(1.5rem, 8.2vw, 2.1rem); margin-block:.45rem 0;
  }
  .about__text p{ font-size:.92rem; }
  .about__stats li{ padding-inline:.55rem; }
  .about__stats b{ font-size:clamp(1.45rem, 6.6vw, 1.9rem); }
  .about__stats span{ font-size:.74rem; max-width:none; letter-spacing:.06em; }
  .about__video::before{ width:120%; }
}

@media (max-width:360px){
  /* "Cómo pedir a domicilio" son 22 caracteres: a .95rem con .11em de
     tracking no entra en un renglón de 286 px y el botón se parte en dos.
     Apretando cuerpo y tracking vuelve a caber de una sola línea. */
  .btn--lg{ font-size:.86rem; letter-spacing:.06em; padding-inline:1rem; }
}

@media (max-width:420px){
  /* con el carrito y la hamburguesa al lado, 50px de logo ya no caben */
  .nav__logo img{ height:40px; }
  .nav__wordmark{ display:none; }
  .about__stats li{ padding-inline:.35rem; }
  .about__stats span{ font-size:.7rem; }
  .about__head .shead__kicker{ font-size:.62rem; letter-spacing:.13em; }
}

/* --- Pantallas bajas -------------------------------------------------------
   El teléfono girado y la ventana de escritorio achatada. Aquí manda el alto,
   no el ancho, y hasta ahora ninguna regla lo miraba: en un iPhone apaisado
   la portada medía 597 px dentro de una ventana de 390 y lo único que se veía
   era el titular; los botones quedaban dos pantallazos más abajo.

   Todo se aprieta contra el alto, que es lo que escasea: los botones vuelven a
   una fila —apilados no caben— y las promesas se quedan en su título.

   VA AL FINAL A PROPÓSITO. Estas reglas y las de ≤760 px pesan lo mismo, así
   que gana la última: puesto antes, el bloque de móvil le devolvía al logo
   sus 360 px y no servía de nada. --- */
@media (max-height:560px) and (min-width:480px){
  .hero{ min-height:0; }
  /* flex:none y no flex:1. Con flex:1 el bloque se encoge por debajo de lo que
     miden sus hijos, el contenido se desborda de su propia caja y los botones
     terminaban 15 px por debajo, encima de la franja de platos. */
  .hero__content{ flex:none; padding-block:clamp(.7rem, 3vh, 1.3rem); }
  .hero__credit{ font-size:.58rem; letter-spacing:.22em; margin-bottom:.6rem; }
  .hero__mark{ font-size:clamp(1.9rem, 5.6vw, 3rem); }
  .hero__flag{ height:6px; margin-block:.45rem .75rem; }
  .hero__sub{ font-size:.86rem; line-height:1.55; max-width:58ch; margin-bottom:.9rem; }
  .hero__note{ display:none; }
  /* la regla de ≤760 px los apila y les pone un ancho máximo: en apaisado eso
     es justo lo contrario de lo que hace falta */
  .hero__cta{ flex-direction:row; width:auto; max-width:none; }
  .hero__cta .btn{ width:auto; }
  /* las promesas vuelven a una fila y se quedan en el título: el detalle es lo
     único que se puede soltar sin perder la promesa */
  .hero__marks{ grid-template-columns:repeat(4, 1fr); gap:.85rem; padding-bottom:.9rem; }
  .hmark{ grid-template-areas:"ico titulo"; }
  .hmark__ico{ font-size:1.25rem; }
  .hmark b{ font-size:.74rem; letter-spacing:.05em; }
  .hmark > span:last-child{ display:none; }
  .hmark + .hmark::before{ display:block; left:-.42rem; }
  .dchip{ padding-block:.6rem; font-size:.72rem; }
}

/* Por debajo de 480 px de alto ya no da: se retira la bajada. Es la línea
   menos esencial de la portada —la marca y el descriptor dicen quiénes son,
   los botones dicen qué hacer— y sigue en el HTML, así que el buscador la ve
   igual (indexa en retrato, donde sí se muestra). */
@media (max-height:480px) and (min-width:480px){
  .hero__sub{ display:none; }
}

/* El caso extremo: un iPhone SE girado deja 230 px de alto útil una vez
   descontadas la cinta y la barra. Todo se aprieta un punto más para que los
   botones sigan entrando en la primera pantalla. */
@media (max-height:380px) and (min-width:480px){
  .hero__content{ padding-block:.5rem; }
  .hero__credit{ margin-bottom:.5rem; font-size:.55rem; }
  .hero__mark{ font-size:clamp(1.65rem, 4.6vw, 2.4rem); }
  .hero__flag{ height:5px; margin-block:.35rem .55rem; }
  .hero__marks{ padding-bottom:.6rem; }
  .dchip{ padding-block:.5rem; }
}

/* La cabecera de la carta, con el mismo criterio: en apaisado medía 532 px
   dentro de una ventana de 390 y los botones de pedir quedaban fuera. No se
   quita nada —aquí la información sí trabaja: tipo de pedido y horario— solo
   se aprieta. */
@media (max-height:560px) and (min-width:480px){
  .mhero{ padding-block:1.2rem 1.4rem; }
  .crumb{ margin-bottom:.7rem; font-size:.68rem; }
  .mhero__title{ font-size:clamp(1.5rem, 3.6vw, 2.2rem); margin-bottom:.6rem; }
  .mhero__sub{ font-size:.88rem; margin-bottom:.85rem; max-width:64ch; }
  .mhero__facts{ gap:.45rem; margin-bottom:.9rem; }
  .mhero__facts li{ padding:.42rem .75rem; }
  .mhero__ico{ font-size:1.1rem; }
  /* la regla de ≤760 px los apila; en apaisado sobra ancho y falta alto */
  .mhero__cta{ flex-direction:row; }
  .mhero__cta .btn{ width:auto; }
}

/* ============================================================
   21b. TÁCTIL
   Correcciones sobre reglas ya escritas, para cuando el puntero es un dedo.
   Van al final a propósito: no son un tema aparte, son ajustes encima.
   ============================================================ */

/* --- Sin puntero: los :hover se quedan pegados -----------------------------
   En un teléfono el :hover no se va al levantar el dedo, se queda hasta que
   tocas en otro lado. El cambio de color puede quedarse (se lee como "esto
   acabo de tocarlo"); el desplazamiento no, porque la tarjeta se queda
   levantada o el enlace corrido y parece que la página se desarmó. --- */
@media (hover:none){
  .btn--primary:hover, .btn--ghost:hover, .btn--wa:hover, .btn--ver:hover,
  .mitem__btn:hover, .upsize__opt:hover, .sede:hover, .lcard:hover,
  .lcard__link:hover, .footer__col a:hover, .socials a:hover,
  .phone__full:hover, .fab:hover{ transform:none; }
  .fcard:hover .fcard__img img,
  .gitem:hover img{ transform:none; filter:none; }
}

/* --- Áreas táctiles --------------------------------------------------------
   La referencia son 44 px: por debajo, el dedo falla y hay que reintentar.
   El peor caso era la hamburguesa —32x32— siendo el control más usado del
   sitio en teléfono. Donde agrandar el botón desarmaría el diseño, lo que
   crece es solo el área que responde, no lo que se ve. --- */
@media (max-width:900px){
  .burger{ width:44px; height:44px; padding:0; align-items:center; justify-content:center; }
  .nav__logo{ display:flex; align-items:center; min-height:44px; }
  .btn--cart{ min-height:44px; }
  .socials a{ width:44px; height:44px; }
  /* los enlaces del pie eran renglones de 24 px, uno pegado al siguiente. 40
     y no 44: son once seguidos y llevarlos al ideal alargaba el pie 80 px
     para ganar cuatro; con este alto ya no se falla el que toca */
  .footer__col a, .footer__plain{ padding-block:.5rem; margin-bottom:.1rem; }
  .lcard__link{ padding-block:.72rem .58rem; }
  .lcard__link:first-of-type{ padding-top:.95rem; }
}
@media (max-width:760px){
  .dchip{ padding-block:.84rem; }
  .btn--ver{ padding-block:.72rem; }
}
/* El botón de pantalla completa mide 28 px dentro del celular de utilería:
   más grande se comería la pantalla del mock. Crece solo lo que se toca. */
.phone__full::after{ content:''; position:absolute; inset:-9px; border-radius:50%; }

/* --- El flotante se encoge al bajar, pero no se va -------------------------
   Vive encima del contenido, así que al bajar tapaba precios y botones. La
   primera solución fue mandarlo fuera de pantalla, y salió peor: desaparecía
   mientras se miran los platos —justo cuando alguien decide pedir— y en la
   carta encima se apagaba casi toda la página por estar "ya en su destino".

   Ahora se pliega a un disco: ocupa lo que ocupa un icono, deja de tapar el
   renglón que tenga debajo y sigue a un toque. Pedir nunca queda a más de un
   gesto de distancia, que es lo único que importa en un teléfono. --- */
@media (max-width:900px){
  .fab{ padding:.8rem .95rem; gap:.5rem; }
  .fab.is-away{
    padding:.85rem; gap:0;
    box-shadow:0 8px 22px -8px rgba(245,197,24,.55);
  }
  .fab.is-away span{ max-width:0; opacity:0; }
  .fab.is-away::before{ animation:none; }
  /* En teléfono nunca se apaga: el JS ya no le pone is-idle, y si algo se
     colara —una vuelta del observador al girar la pantalla— esto lo desarma. */
  .fab.is-idle{
    opacity:1; visibility:visible; pointer-events:auto; transform:none;
  }
}
@media (max-width:760px){
  /* al final del recorrido el flotante seguía puesto, encima del pie */
  .footer__bottom{ padding-bottom:3.4rem; }
}

/* --- Respuesta al tacto -----------------------------------------------------
   En un teléfono no hay :hover, así que las tarjetas no daban ni una señal de
   haber sido tocadas: entre el toque y la página nueva no pasaba nada y se
   sentía trabado. Un hundido de 60 ms no es decoración, es el acuse de recibo
   del dedo. --- */
@media (hover:none){
  .mcard:active, .lcard:active, .step:active, .fcard:active,
  .rchip:active, .dchip:active, .gitem:active, .deco:active .deco__card,
  .xtra:active .xtra__card{
    transform:scale(.978);
    transition-duration:.06s;
  }
  .mitem__btn:active, .btn--ver:active{ transform:scale(.94); transition-duration:.06s; }
  /* El disco del flotante se hunde entero, que es lo que se está tocando. */
  .fab:active{ transform:scale(.94); transition-duration:.06s; }
}

/* --- El grano se queda quieto en teléfono ----------------------------------
   Es una capa fija de 4 veces la pantalla animándose para siempre. A 4,5 %
   de opacidad nadie distingue si se mueve o no, y quieta deja de repintarse
   mientras se navega. --- */
@media (max-width:900px){
  .grain{ animation:none; inset:0; }
}

/* ---------- 22. ACCESIBILIDAD ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
  .reveal{ opacity:1 !important; transform:none !important; }
  /* Las reglas tricolores se dibujan al entrar; sin animación no habría nada
     que dibujar y quedarían en cero ancho. Se ponen enteras de una. */
  .shead__kicker::before{ transform:translateY(-50%) scaleX(1) !important; }
  .eyebrow__line{ transform:scaleX(1) !important; }
  /* Y el paralaje no corre (lo decide el JS), así que las fotos se quedan
     donde están en vez de a media distancia. */
  .gitem img, .mhero__bg img{ translate:0 0 !important; }
  /* sin animación las frases se quedarían todas en opacity:0 y la barra
     al final del recorrido: se deja una frase fija y la barra llena */
  .loader__words span{ opacity:0 !important; }
  .loader__words span:first-child{ opacity:1 !important; transform:none !important; }
  .loader__bar span{ width:100% !important; transform:none !important; }
  .loader__ico{ transform:translateX(-50%) !important; }
  .loader__glow{ opacity:1 !important; transform:none !important; }
  .hero__media, .hero__content{ --par:0px !important; --drift:0px !important; }
  .hero__content{ opacity:1 !important; }
  .progress span{ transition:none !important; }
  .mitem.is-target{ animation:none !important; outline:2px solid var(--yellow); }
  /* El flotante sigue apartándose al bajar —tapar el contenido molesta igual
     con o sin animaciones—, pero se va con un fundido en vez de deslizarse.
     Sin esto, la regla de arriba le quita la transición y aparece y
     desaparece de golpe, que es peor que el desplazamiento. */
  .fab{ transition:opacity .3s ease !important; }
  .fab.is-away, .fab.is-idle{ transform:none !important; }
  /* El rótulo se pliega igual, pero de golpe: sin transición, un max-width a
     medio camino dejaría media palabra cortada para siempre. */
  .fab span{ transition:none !important; }
  .grain{ display:none; }
}

@media print{
  .nav,.topbar,.fab,.drawer,.lightbox,.grain,.loader,.hero__media,.hero__strip,
  .hero__glow,.hero__scrim,.mhero__bg,.mhero__scrim{ display:none !important; }
  body{ background:#fff; color:#000; }
  /* la carta es la página que de verdad se imprime: sin la foto de fondo el
     encabezado se queda sobre blanco y el amarillo pierde contraste */
  .mhero__title,.mhero__sub{ text-shadow:none !important; }
  /* sin la foto detrás, el crédito, el titular y las promesas quedaban en
     crema y amarillo sobre papel blanco: invisibles */
  .hero{ min-height:0 !important; }
  .hero__credit,.hero__credit a,.hero__mark,.hero__mark em,.hero__sub,
  .hmark b,.hmark__ico,.hmark > span:last-child{
    color:#000 !important; text-shadow:none !important;
  }
  /* decoración pura: el trazo de la bandera y la frase a mano girada no
     aportan nada en papel y el trazo sale como una barra gris */
  .hero__flag,.hero__note{ display:none !important; }
}

/* ---------- 22. PREGUNTAS (FAQ) ----------
   Acordeón de <details>/<summary>: sin una línea de JavaScript. Es lo que hace
   que la respuesta esté en el HTML desde el primer byte —la lee el buscador
   aunque el bloque salga cerrado, y la lee un lector de pantalla— y que se
   abra con Enter sin que nadie escriba el manejo de teclado.

   El precio de no usar JS es que no se puede animar la altura: un <details>
   pasa de 0 a su alto de golpe. Se disimula con el fundido del contenido, que
   es lo que de verdad se nota. */
.faq{ background:var(--ink-2); border-block:1px solid var(--line); }
.faq__list{
  display:grid; gap:.55rem; margin-inline:auto; max-width:74ch;
}
.faq__item{
  background:var(--ink); border:1px solid var(--line); border-radius:var(--r);
  transition:border-color .3s;
}
.faq__item[open]{ border-color:rgba(245,197,24,.34); }
.faq__item summary{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:.95rem 1.05rem; cursor:pointer; list-style:none;
  font-family:var(--cond); font-weight:600; letter-spacing:.012em;
  font-size:clamp(.97rem, 1.5vw, 1.08rem); color:var(--cream);
}
/* El triangulito propio del navegador sobra: ya hay una cruz a la derecha, y
   en Safari sale con otra forma y otro color que no siguen a la marca. */
.faq__item summary::-webkit-details-marker{ display:none; }
.faq__item summary:hover{ color:var(--yellow); }
.faq__item summary:focus-visible{
  outline:2px solid var(--yellow); outline-offset:-2px; border-radius:var(--r);
}
.faq__chev{
  flex:0 0 auto; width:18px; height:18px; color:var(--yellow);
  transition:transform .3s var(--e);
}
.faq__item[open] .faq__chev{ transform:rotate(45deg); }   /* la cruz se vuelve × */
.faq__ans{
  padding:0 1.05rem 1.05rem; animation:faqIn .32s var(--e) both;
}
.faq__ans p{
  color:var(--muted); font-size:.92rem; line-height:1.65; margin:0;
  max-width:66ch;
}
@keyframes faqIn{ from{ opacity:0; transform:translateY(-5px); } }
@media (prefers-reduced-motion:reduce){
  .faq__ans{ animation:none; }
  .faq__chev{ transition:none; }
}

/* ---------- 23. PÁGINA DE CIUDAD ----------
   La portada abre con video a sangre porque tiene que enamorar. Acá no: el que
   llega ya buscó "comida venezolana en <ciudad>" y lo que quiere es la
   dirección, el horario y el botón de pedir. Así que es una cabecera de texto,
   con el mismo trazo de bandera de la portada para que se reconozca la casa. */
.sedehero{
  padding-top:clamp(4.5rem, 9vw, 7rem);
  padding-bottom:clamp(1.5rem, 3vw, 2.5rem);
  background:
    radial-gradient(120% 100% at 12% 0%, rgba(245,197,24,.07), transparent 62%),
    var(--ink);
  border-bottom:1px solid var(--line);
}
/* El titular de la portada dice "SABOR / VENEZOLANO": diez letras por
   renglón. Acá el renglón largo es "COMIDA VENEZOLANA", diecisiete, y con el
   tamaño del hero se salía por el canto en un teléfono de 320 px. El mínimo
   del clamp baja hasta que el renglón entra, que es lo que decide el tamaño
   de un titular que no se puede partir. */
.sedehero__title{
  font-family:var(--marker); font-weight:400;
  font-size:clamp(1.9rem, 6.2vw, 4.6rem); line-height:.95;
  letter-spacing:-.005em; color:var(--cream); margin:0;
  text-transform:uppercase; max-width:18ch; overflow-wrap:break-word;
}
.sedehero__title em{ font-style:normal; color:var(--yellow); }
.sedehero__sub{
  font-size:clamp(.94rem, 1.3vw, 1.02rem); color:rgba(245,239,230,.8);
  max-width:62ch; margin:0 0 clamp(1.4rem, 3vw, 1.9rem);
  line-height:1.7; text-wrap:balance;
}
.sedehero__sub strong{ color:var(--cream); font-weight:600; }

/* El rastro de migas. Es texto chico y gris a propósito: su trabajo no es que
   lo lean, es decirle al buscador que esta página cuelga de la portada — lo
   mismo que declara el BreadcrumbList del <head>, escrito para humanos. */
.migas{
  display:flex; align-items:center; gap:.45rem; flex-wrap:wrap;
  font-family:var(--cond); font-size:.76rem; letter-spacing:.1em;
  text-transform:uppercase; color:var(--muted-2);
  margin-bottom:clamp(.9rem, 2vw, 1.4rem);
}
.migas a{ color:var(--muted); transition:color .25s; }
.migas a:hover{ color:var(--yellow); }
.migas [aria-current]{ color:var(--cream); }

/* Con una sola sede la rejilla de dos columnas dejaba media fila vacía. */
.sedes--una{ grid-template-columns:1fr; }
.sedes--una .sede__map iframe{ min-height:320px; }
/* Con una sola sede la tarjeta ocupa el ancho entero: apilada, el mapa queda
   de franja y la ficha debajo con media pantalla en blanco a la derecha.
   Lado a lado usa el ancho que hay y el mapa crece a lo alto de la ficha. */
@media (min-width:900px){
  .sedes--una .sede{ display:grid; grid-template-columns:1.05fr 1fr; align-items:stretch; }
  .sedes--una .sede__map iframe{ height:100%; min-height:340px; }
}

@media (max-width:760px){
  .sedes--una .sede__map iframe{ min-height:230px; }
}

/* ---------- 24. RESEÑAS ----------
   La sección fija. Va centrada y corta: es una sola pregunta y un botón, y
   cualquier cosa más larga se lee como un formulario. */
.resenas{
  background:
    radial-gradient(90% 120% at 50% 0%, rgba(245,197,24,.12), transparent 66%),
    var(--ink-2);
  border-block:1px solid var(--line);
  /* Más aire que las otras secciones: es el cierre de la portada y ahora es
     además una parada del menú, así que quien llega por el enlace tiene que
     caer en un tramo que se sostenga solo. */
  padding-block:clamp(3.6rem, 6.5vw, 6.5rem);
}
.resenas__inner{ text-align:center; display:grid; justify-items:center; }
.resenas__stars{ color:var(--yellow); opacity:.9; margin-bottom:.55rem; }
/* Sin la regla tricolor a la izquierda, por lo mismo que en .shead--center:
   acá el rótulo va centrado y una raya pegada a un solo lado lo descuadra.
   La bandera ya la ponen las estrellas de encima. */
.resenas__kicker{ padding-left:0; margin-bottom:.7rem; }
.resenas__kicker::before{ display:none; }
.resenas .shead__title{ margin-bottom:.75rem; }
/* Un punto más grande que el de las otras secciones. Es el cierre de la
   portada y lo único que se le pide al cliente sin cobrarle: si se lee del
   mismo tamaño que un rótulo cualquiera, se pasa de largo. */
.resenas__title{ font-size:clamp(2.1rem, 5vw, 3.7rem); }
.resenas__desc{
  color:var(--muted); font-size:clamp(.95rem, 1.4vw, 1.06rem); line-height:1.65;
  max-width:52ch; margin:0 0 clamp(1.6rem, 3.4vw, 2.3rem); text-wrap:balance;
}

/* --- Una tarjeta por sede --------------------------------------------------
   Eran dos botones seguidos y toda la sección medía menos que un renglón de
   la carta. Pedir la reseña sostiene la ficha de Google de cada local —que es
   de donde sale casi todo el que llega por primera vez—, así que ocupa lo que
   ocupa una decisión: cinco estrellas, la ciudad en grande y la dirección
   debajo.

   Lo de la dirección no es adorno. Con dos locales, "Reseñar Restrepo" a
   secas no le confirma a nadie que ese es el sitio donde comió, y una reseña
   que cae en la ficha equivocada no la mueve nadie después. */
.resenas__cards{
  display:grid; width:100%; justify-content:center;
  gap:clamp(.85rem, 2vw, 1.25rem);
  grid-template-columns:repeat(auto-fit, minmax(min(100%, 262px), 1fr));
  max-width:760px;
}
/* Con un solo local la tarjeta no se estira de lado a lado: una caja de 700 px
   de ancho y 200 de alto se lee como un banner, no como algo que se toca. */
.resenas__cards--una{ max-width:380px; }

.rescard{
  position:relative; overflow:hidden;
  display:grid; justify-items:center; align-content:start; gap:.4rem;
  padding:clamp(1.5rem, 3.2vw, 2rem) 1.2rem clamp(1.3rem, 2.6vw, 1.65rem);
  background:var(--ink-2); border:1px solid var(--line); border-radius:var(--r);
  text-align:center;
  transition:transform .35s var(--e), border-color .3s, background .3s, box-shadow .35s;
}
/* El filo tricolor, acá siempre puesto y no solo al pasar por encima: en un
   teléfono no hay "pasar por encima", y esta es la tarjeta que tiene que
   llamar sola. */
.rescard::before{
  content:''; position:absolute; left:0; right:0; top:0; height:3px; z-index:2;
  background:var(--tricolor);
}
.rescard::after{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(78% 62% at 50% 0%, rgba(245,197,24,.13), transparent 72%);
}
.rescard > *{ position:relative; z-index:1; }
.rescard:hover{
  transform:translateY(-5px); background:var(--ink-3);
  border-color:rgba(245,197,24,.45);
  box-shadow:0 26px 50px -26px rgba(0,0,0,.95);
}
.rescard__stars{
  display:flex; gap:.2rem; color:var(--yellow);
  font-size:clamp(1.1rem, 2.4vw, 1.35rem); margin-bottom:.15rem;
}
.rescard__ciudad{
  font-family:var(--display); font-weight:400;
  font-size:clamp(1.55rem, 3.4vw, 2.15rem); line-height:1.02;
  letter-spacing:.005em; text-transform:uppercase; color:var(--cream);
}
.rescard__dir{ font-size:.81rem; line-height:1.45; color:var(--muted); }
.rescard__cta{
  margin-top:.95rem; display:inline-flex; align-items:center; gap:.45rem;
  padding:.72rem 1.3rem; border-radius:999px;
  background:var(--yellow); color:var(--ink);
  font-family:var(--cond); font-weight:700; font-size:.85rem;
  letter-spacing:.11em; text-transform:uppercase;
  transition:transform .25s var(--e), box-shadow .3s;
}
.rescard:hover .rescard__cta{
  transform:translateY(-2px); box-shadow:0 12px 24px -12px rgba(245,197,24,.75);
}

/* --- La barra de la visita de vuelta ---------------------------------------
   Sale una vez, horas después de un pedido, y se va para no volver. Por eso
   puede permitirse estar fija abajo: no es un cartel que vive ahí, es un
   momento.

   Abajo y no arriba porque arriba compite con la barra de navegación —que ya
   se esconde y aparece al desplazar— y porque el pulgar llega. El botón
   flotante de domicilio ocupa esa esquina, así que mientras la barra está,
   sube: es lo que hace `body.tiene-rbar`. */
.rbar{
  position:fixed; z-index:890;
  left:clamp(.9rem, 2.4vw, 1.5rem); right:clamp(.9rem, 2.4vw, 1.5rem);
  bottom:calc(clamp(.9rem, 2.4vw, 1.5rem) + env(safe-area-inset-bottom, 0px));
  display:flex; align-items:center; gap:.75rem;
  max-width:640px; margin-inline:auto;
  padding:.8rem .9rem;
  background:var(--ink-2); border:1px solid rgba(245,197,24,.34);
  border-radius:var(--r);
  box-shadow:0 18px 48px -14px rgba(0,0,0,.9);
  /* Entra desde abajo. La clase la pone app.js un cuadro después de insertar
     la barra: en el mismo tick el navegador no tiene desde dónde animar. */
  opacity:0; transform:translateY(18px);
  transition:opacity .4s var(--e), transform .4s var(--e);
}
.rbar.is-in{ opacity:1; transform:none; }
.rbar__ico{ flex:0 0 auto; width:22px; height:22px; color:var(--yellow); }
.rbar__txt{
  flex:1 1 auto; margin:0; color:var(--cream);
  font-size:.88rem; line-height:1.4;
}
.rbar__btn{
  flex:0 0 auto;
  padding:.55rem .9rem; border-radius:999px;
  background:var(--yellow); color:var(--ink);
  font-family:var(--cond); font-weight:700; font-size:.8rem;
  letter-spacing:.09em; text-transform:uppercase; white-space:nowrap;
  transition:transform .25s var(--e);
}
.rbar__btn:hover{ transform:translateY(-2px); }
.rbar__x{
  flex:0 0 auto; width:30px; height:30px; display:grid; place-items:center;
  color:var(--muted); border-radius:50%; transition:color .25s, background .25s;
}
.rbar__x:hover{ color:var(--cream); background:var(--ink-3); }
.rbar__x .ico{ width:16px; height:16px; }

/* Mientras la barra está, el botón de domicilio le deja el sitio. */
body.tiene-rbar .fab{
  bottom:calc(clamp(.9rem, 2.4vw, 1.5rem) + env(safe-area-inset-bottom, 0px) + 4.6rem);
}

@media (max-width:520px){
  /* En un teléfono no caben el texto largo, el botón y la cruz en un renglón:
     el texto se acorta con la frase, no con puntos suspensivos. */
  .rbar{ gap:.55rem; padding:.7rem .75rem; }
  .rbar__txt{ font-size:.82rem; }
  .rbar__ico{ display:none; }
}

@media (prefers-reduced-motion:reduce){
  .rbar{ transition:none; transform:none; }
  .rbar__btn:hover{ transform:none; }
}

@media print{
  /* La barra es un elemento fijo: sin esto se imprime encima del contenido, y
     además en papel un enlace a Google no lleva a ninguna parte. Va acá abajo
     y no en el bloque de impresión de arriba porque .rbar se define después:
     una regla puesta antes no la alcanzaría. */
  .rbar{ display:none !important; }
  .resenas{ display:none !important; }
}
