/* ============================================================================
   styles.css — ◆ PLANTILLA: CAPA DE TEMA POR CLIENTE ◆
   Este :root es lo ÚNICO que cambia el aspecto (colores, fondo, tema claro/oscuro).
   La estructura vive en estructura-base.css (compartida, no tocar). Por defecto
   ship con el tema OSCURO canónico ("cristal puro"). Para tema CLARO u otros
   colores, cambia los tokens marcados abajo según SUPER_APP/ESTILOS_BASE/
   CONTRATO-TOKENS.md (§9 temas). No añadas reglas de layout aquí.
   ============================================================================ */
/* Custom properties */
:root {
  /* Fondo de las páginas interiores (base + logo flotante). Se elige con tokens:
     --logo-fondo: none          -> solo el fondo
     --logo-fondo: url(...)       -> fondo + logo flotante (dos capas, sin deformar) */
  --fondo-interior: url(/images/fondo.webp);
  --logo-fondo: url(/images/logo_fondo.webp);
  /* Aside: 5rem superior es ya el estándar de flota (vive en la base) */
  /* App de CRISTAL (liquid glass): las superficies (.aside, .platos__familia…)
     las pinta el glass, no la base. Por eso el degradado va en 'none': si lleva
     color, el verde de la base se cuela por debajo del cristal. */
  --color-degradado2: none;
  --blanco: #ffffff;
  --negro: #111111; /* negro de marca (sombras, textos): NO es negro puro */
  --fondo-negro: #000;
  /* Carta: nombres en blanco (tema oscuro), descripciones/precios en amarillo */
  --color-nombre-plato: var(--blanco);
  --color-acento-carta: var(--color-titulo);
  /* Acento del footer (estándar estilo Hippie): en El Ancla, el amarillo de título */
  --color-footer-acento: var(--color-titulo);
  /* Fondo de la app para Safari/iOS (barras y rebote) y tinte de headers */
  --fondo-app: #000; /* negro PURO del fondo de página (evita destellos al cargar) */

  /* ==== TOKENS SEMÁNTICOS DE TEMA — el "interruptor" claro/oscuro ====
     Texto, iconos y halos DERIVAN DEL FONDO de la app (idea de Manu, jul 2026,
     tras el intento de Mely): nada de blanco/negro a pelo en las reglas.
     Defaults = tema OSCURO. Para una app CLARA: descomenta el bloque
     "TEMA CLARO" que hay justo después de este :root y ajusta el
     <meta name="theme-color"> de los HTML a #fff. */
  --color-texto-tema: var(--blanco); /* texto sobre el fondo de página */
  --color-icono-nav: var(--blanco); /* iconos .icono del aside/headers */
  --halo-texto:
    0 0 0.25rem var(--negro), 0 0 0.625rem var(--negro),
    0 0 1.25rem var(--negro); /* halo de legibilidad sobre el cristal */
  --color-primario: #07496a; /* azul de marca Danny's */
  --color-secundario: #1d8bc2; /* azul oscuro de marca */
  --color-titulo: var(--color-primario); /* AZUL de marca (Manu): títulos de familia h2 + acento de carta (descripciones/precios) */
  --color-form-borde: rgba(255, 255, 255, 0.4);
  --color-form-borde-focus: rgba(255, 255, 255, 0.3);
  /* Formulario de reservas — tema-aware (el panel y sus textos derivan del
     tema, como texto/iconos). Defaults OSCUROS: panel negro→acento con texto
     claro. En apps CLARAS el bloque TEMA CLARO los invierte (panel claro,
     texto oscuro). Aditivo y retrocompatible: en oscuro reproduce lo de antes. */
  --form-fondo: linear-gradient(
    160deg,
    var(--negro) 0%,
    var(--negro) 30%,
    color-mix(in srgb, var(--color-primario) 50%, var(--negro)) 100%
  );
  --form-texto: var(--blanco);
  --form-input-fondo: rgba(255, 255, 255, 0.08);
  --form-placeholder: rgba(249, 239, 218, 0.4);
  --form-warning: color-mix(in srgb, var(--color-primario) 55%, #fff);
  --form-datepicker-filtro: invert(
    1
  ); /* icono del date picker en blanco (oscuro) */
  /* Liquid Glass (cristal estilo Apple Vision Pro — ver biblioteca
     ~/.claude/templates/liquid-glass). El efecto está centralizado en
     css/liquid-glass.css, que se carga el último en cada página. */
  --lg-bg-color: rgba(0, 0, 0, 0.4); /* tinte del cristal (ahumado/oscuro) */
  --lg-highlight: rgba(255, 255, 255, 0.75); /* brillo especular interno */
  --lg-blur: 0.25rem; /* desenfoque del fondo */

  /* Sombras */
  --sombra:
    0.1875rem 0.1875rem 0.25rem #fff, -0.1875rem -0.1875rem 0.25rem var(--negro);
  /* Botones */
  --border-radius: 1.25rem;
  /* Tipografía */
  --tipo-principal: "Roboto", sans-serif;
}

/* ==== TEMA CLARO ACTIVO — Danny's Bar es una app de FONDO CLARO (azul) ====
   Segundo :root que sobreescribe los defaults oscuros (patrón de la flota).
   Singularidad de Danny's: los NOMBRES de plato van en rojo granate (no negro),
   a juego con los títulos de familia y los precios. Iconos de nav en azul. */
:root {
  --fondo-app: #fff;
  --color-texto-tema: var(--negro);
  --color-icono-nav: var(--color-primario);
  --halo-texto: none;
  --color-nombre-plato: var(--negro); /* nombres de plato (h3) en NEGRO (Manu) */
  --lg-bg-color: rgba(255, 255, 255, 0.45);
  --lg-brightness: 1;
  --lg-highlight: rgba(255, 255, 255, 0.15);
  --color-degradado2: linear-gradient(
    -45deg,
    var(--color-secundario) 0%,
    transparent 45%
  );
  --color-form-borde: rgba(0, 0, 0, 0.25);
  --color-form-borde-focus: rgba(0, 0, 0, 0.15);
  --form-fondo: linear-gradient(
    160deg,
    #fff 0%,
    #fff 30%,
    color-mix(in srgb, var(--color-primario) 15%, #fff) 100%
  );
  --form-texto: var(--negro);
  --form-input-fondo: rgba(0, 0, 0, 0.04);
  --form-placeholder: rgba(0, 0, 0, 0.45);
  --form-warning: var(--color-secundario);
  --form-datepicker-filtro: none;
}

/* ============================================================================
   ==== TEMA CLARO (CONTRATO-TOKENS §9) — descomenta el :root de abajo para
   apps de fondo claro. SOLO tokens, cero reglas nuevas (el interruptor de
   Manu: texto/iconos/halos derivan del fondo). Notas, AQUÍ FUERA para que el
   bloque descomentado sea CSS limpio:
   · --color-icono-nav: iconos en color de marca (patrón Hippie Chippy).
   · --halo-texto none: el halo oscuro solo tiene sentido sobre fondo oscuro.
   · --lg-bg-color: cristal blanco translúcido; la opción "cristal
     transparente" (Filete) es `transparent` + --lg-brightness 1.
   · --lg-brightness 1: con 1.15 el fondo claro se blanquea (look lechoso).
   · --color-degradado2: las claras llevan el degradado de marca SOBRE el cristal.
   · Recuerda: <meta name="theme-color" content="#fff"> en los 6 HTML.
   ============================================================================
:root {
  --fondo-app: #fff;
  --color-texto-tema: var(--negro);
  --color-icono-nav: var(--color-secundario);
  --halo-texto: none;
  --color-nombre-plato: var(--negro);
  --lg-bg-color: rgba(255, 255, 255, 0.45);
  --lg-brightness: 1;
  --lg-highlight: rgba(255, 255, 255, 0.15);
  --color-degradado2: linear-gradient(-45deg, var(--color-secundario) 0%, transparent 45%);
  --color-form-borde: rgba(0, 0, 0, 0.25);
  --color-form-borde-focus: rgba(0, 0, 0, 0.15);
  --form-fondo: linear-gradient(
    160deg,
    #fff 0%,
    #fff 30%,
    color-mix(in srgb, var(--color-primario) 15%, #fff) 100%
  );
  --form-texto: var(--negro);
  --form-input-fondo: rgba(0, 0, 0, 0.04);
  --form-placeholder: rgba(0, 0, 0, 0.45);
  --form-warning: var(--color-secundario);
  --form-datepicker-filtro: none;
}
============================================================================ */

html {
  color: var(--color-texto-tema);
  /* Evita el scroll horizontal en toda la app. El logo animado del index
     (.movimiento) está en position:fixed y hace scale(2), lo que lo desborda
     por el lateral y arrastraba el resto del contenido. Recortar en la raíz
     es seguro: no afecta a los elementos fixed visibles (el formulario de
     reservas entra dentro del viewport) ni al scroll vertical. */
  overflow-x: hidden;
}
body {
  width: 100%;
  font-family: var(--tipo-principal);
  /* Fondo negro de base: evita destellos blancos al hacer overscroll en móvil
     (el rebote de iOS muestra el fondo del documento) y unifica con el
     theme-color negro de la barra del navegador. */
  background-color: var(--fondo-negro);
}

/* Oculta visualmente pero accesible a lectores de pantalla y SEO.
   Para el <h1> de cada página (el título visual es el logo en imagen). */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* fadeIn - En el <body> de cada página */
.fade-in {
  animation: fadeIn ease 2s;
}
@keyframes fadeIn {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
/* Títulos de las familias de comidas y bebidas */
p {
  font-size: 1rem;
  /* white-space: pre-line; Valida los saltos de linea \n que inserto en los textos largos que tengo en la data*/
  white-space: pre-line;
  color: var(--color-texto-tema);
}
h2 {
  font-size: 1.1rem;
  font-weight: 600;
  color: var(--color-texto-tema);
}
h3 {
  font-size: 1rem;
  color: var(--color-texto-tema);
}
h4 {
  color: var(--color-texto-tema); /* tamaño y padding: estructura-base */
}

/* ICONOS BOOTSTRAP */
i {
  font-size: 1.7rem;
  padding: 0 0.8rem;
  /* color: var(--color-secundario); */
}
/* Iconos Cartas */
.bi-house-fill,
.bi-heart-pulse,
/*  */
/* ******************** FOOTER ****************************** */
/* FOOTER. Da estilos a todos los footers */

/* El estilo de .baner__alergenos vive en cartas.css (única definición),
   ya que el banner solo aparece en carta.html y drinks.html. */
.footer__imagen-alergenos {
  width: 90%;
}
.footer__boton-alergenos {
  width: auto;
  border-radius: var(--border-radius);
  margin: 0 auto;
  padding: 0.3rem 1rem;
  text-align: center;
  box-shadow: var(--sombra);
  color: var(--color-texto-tema);
  /* Degradado de marca por token (convención): en apps CLARAS pinta el
     gradiente sobre el cristal; en OSCURAS el token es 'none' → sin efecto. */
  background-image: var(--color-degradado2);
}

/* Fondo interior (.logo__fondo + media query) ahora en estructura-base.css */

/* ***************** LOGO (imagen transparente) *********** */
/* Logos limpios: lo gobierna la BASE (.hero-img--logo, con la feature opt-in
   .hero-img--marco para enmarcarlos). Se retiró la regla img[src*="logo"]
   local: su especificidad de atributo pisaba el marco de la base. */
/* ***************** ANIMACIONES *************************** */
@keyframes rotation {
  from {
    transform: rotateX(180deg);
  }
  to {
    transform: rotateX(360deg);
  }
}

/* ***************** LUCES QUE BRILLAN ********************* */
/* Campo de puntos de luz que parpadean por toda la pantalla (mismo efecto
   que en otras apps de la flota, p.ej. Peaky Blinders). Los <div> los genera
   js/luces.js y el efecto se activa/desactiva desde modulos.luces.
   pointer-events:none para que nunca intercepten clics. */
@keyframes parpadeo-luz {
  0% {
    width: 1px;
    height: 1px;
    background: powderblue;
    box-shadow: 0 0 0.8125rem #fff;
  }
  10% {
    background: #b0e5de;
  }
  20% {
    background: #b0e5cc;
  }
  30% {
    background: #cce5b0;
  }
  40% {
    background: #dae5b0;
  }
  50% {
    width: 0.25rem;
    height: 0.25rem;
    background: #e5ddb0;
    box-shadow: 0 0 0.8125rem #d3bd3d;
  }
  100% {
    width: 1px;
    height: 1px;
    background: powderblue;
    box-shadow: 0 0 0.8125rem #fff;
  }
}
.luz {
  position: fixed;
  width: 1px;
  height: 1px;
  border-radius: 0.3125rem;
  background: powderblue;
  box-shadow: 0 0 0.8125rem #fff;
  pointer-events: none;
}
.luz.activa {
  animation: parpadeo-luz 2s infinite;
}

/* ********* FORMULARIO RESERVAS *************************** */
.form {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 3;
  width: 90vw;
  max-width: 35rem;
  height: 100vh;
  padding: 2.5rem 2rem;
  background: var(--form-fondo);
  border-right: 0.125rem solid var(--color-primario);
  transition: all 0.5s ease-in-out;
  overflow-y: auto;
  /* Ocultar menú lateral */
  opacity: 0;
  visibility: hidden;
  transform: translateX(-100%);
  box-shadow: 1.875rem 0.625rem 2.5rem rgba(0, 0, 0, 0.7);
}
.form.active {
  opacity: 1;
  visibility: visible;
  transform: translateX(0);
}
.form div {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}
.form label {
  font-size: 1rem;
  font-weight: 600;
  color: var(--form-texto);
  display: inline-block;
  margin: 0.5rem 0 0.2rem;
}
.input-small {
  width: 65%;
}
.form .form__fila {
  flex-direction: row;
  gap: 1rem;
  /* Alinea los inputs al pie de la fila para que queden a la misma altura
     aunque una label ocupe 1 línea y otra 2 (ej. "Teléfono" vs "Fecha de la reserva") */
  align-items: flex-end;

  & > div {
    flex: 1;
    min-width: 0;
  }

  & .input-small {
    width: 100%;
  }
}
.form input,
.form select {
  padding: 0.6rem 0.8rem;
  background: var(--form-input-fondo);
  border: 1px solid var(--color-form-borde);
  border-radius: 0.625rem;
  font-size: 1rem;
  color: var(--form-texto);
  transition: border-color 0.3s ease;
}
.form input::placeholder {
  color: var(--form-placeholder);
}
.form input[type="date"]::-webkit-calendar-picker-indicator {
  filter: var(--form-datepicker-filtro);
}
.form input:focus,
.form select:focus,
.form textarea:focus {
  outline: none;
  border-color: var(--color-primario);
  box-shadow: 0 0 0.5rem var(--color-form-borde-focus);
}
.form textarea {
  width: 100%;
  padding: 0.6rem 0.8rem;
  background: var(--form-input-fondo);
  border: 1px solid var(--color-form-borde);
  border-radius: 0.625rem;
  font-size: 1rem;
  color: var(--form-texto);
  transition: border-color 0.3s ease;
  resize: vertical;
}
.form select {
  cursor: pointer;
}
.form select option {
  color: var(--color-secundario);
}
.form span {
  color: var(--form-placeholder);
  font-size: 0.85rem;
}
.warning {
  /* Aviso del formulario: color tema-aware (claro sobre panel oscuro, oscuro
     legible sobre panel claro). */
  color: var(--form-warning);
  font-weight: 600;
  opacity: 0;
  padding: 0.5rem 0;
  transition: all 0.7s ease-in-out;
  transform: translateX(-100%);
}
.active-warning {
  opacity: 1;
  transform: translateX(0);
}
/* Guard del formulario: el JS genera el <p> "aviso" sin clase. Lo forzamos al
   color de texto del formulario (tema-aware) para que el guard no dependa de la
   herencia y se lea en ambos temas. */
.form p {
  color: var(--form-texto);
}
.warning p {
  color: var(--form-warning);
}
.reservar {
  width: fit-content;
  margin: 1.5rem auto 0;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 0.5rem 1.5rem;
  font-size: 1.5rem;
  font-weight: 800;
  text-decoration: none;
  border-radius: var(--border-radius);
  cursor: pointer;
}

/* ********* BOTONES DE RESERVA CON DEGRADADO ANIMADO *************************** */
/* Aplicado a los 3 botones de reserva: header de index, header de carta/drinks
   y botón final del formulario. El degradado se mueve horizontalmente en bucle
   para llamar la atención sobre la acción principal del SaaS. */
.index__boton-reservar,
.carta__boton-reservar,
.reservar {
  color: var(--blanco);
  background: linear-gradient(
    270deg,
    var(--color-secundario),
    var(--color-primario),
    color-mix(in srgb, var(--color-primario) 30%, var(--color-secundario)),
    var(--color-secundario)
  );
  /* 300% = (4 paradas - 1) × 100%. Crea espacio para que background-position se mueva */
  background-size: 300% 100%;
  border: 1px solid var(--blanco);
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.2);
  text-shadow: none;
  animation: degradadoMovil 3s ease infinite;
  transition:
    transform 0.3s ease,
    box-shadow 0.3s ease;

  &:hover {
    transform: scale(1.05);
    box-shadow: 0 0.5rem 1.25rem rgba(0, 0, 0, 0.3);
  }
}

@keyframes degradadoMovil {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* Cerrar formulario de reservas */
.cerrar-formulario {
  position: absolute;
  top: 0.8rem;
  right: 1rem;
  /* Disco verde con la X en blanco: el glifo es solo la X (bi-x-lg) y el
     círculo lo pone el background, así la X se ve blanca (antes era el hueco
     transparente de bi-x-circle-fill y mostraba el fondo oscuro). */
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2.2rem;
  height: 2.2rem;
  padding: 0; /* anula el padding del selector global `i` (si no, sería un óvalo) */
  font-size: 1.4rem;
  color: var(--blanco);
  background: var(--color-primario);
  border-radius: 50%;
  cursor: pointer;
  transition: transform 0.3s ease;
}
.cerrar-formulario:hover {
  transform: scale(1.2);
}
.cerrar-formulario-desde-fuera {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  z-index: 2;
}

/* Position absolute */
/* Botón Llamada */
.boton-whatsapp {
  display: none;
  justify-content: center;
  align-items: center;
  position: fixed;
  bottom: 1rem;
  left: 50%;
  padding: 0.3rem 2rem;
  transform: translate(-45%, -50%);
  font-size: 1.2rem;
  border: 1px solid var(--blanco);
  border-radius: 1.25rem;
  box-shadow: var(--sombra);
  cursor: pointer;
  z-index: 2;
}
.booking {
  color: var(--blanco);
  text-shadow: none;
}
#booking {
  color: var(--blanco);
  font-size: 1.5rem;
  font-weight: bold;
}
.boton-whatsapp-img {
  width: 2rem;
}
.boton-whatsapp span {
  font-size: 1.5rem;
  font-weight: bold;
}

/* Animaciones fade-in: en estructura-base (estándar de flota) */

/* ============================================================================
   MODAL BINGO / QUIZ — singularidad de Danny's Bar (noches de martes).
   Modal fixed que se muestra al entrar (cookie 2h). El script inline vive en
   index.html. Se conserva al alinear (no está en la base).
   ============================================================================ */
.bingo-modal {
  position: fixed;
  inset: 0;
  z-index: 30;
  display: none; /* .activo lo pasa a flex desde el script */
  justify-content: center;
  align-items: center;
  padding: 1.5rem;
  background: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(4px);
}
.bingo-modal.activo {
  display: flex;
}
.bingo-modal__img {
  width: 100%;
  max-width: 26rem;
  border-radius: var(--border-radius);
  box-shadow: var(--sombra);
}
.bingo-modal__cerrar {
  position: absolute;
  top: 1.2rem;
  right: 1.2rem;
  width: 2.6rem;
  height: 2.6rem;
  display: flex;
  justify-content: center;
  align-items: center;
  border: none;
  border-radius: 50%;
  background: var(--blanco);
  cursor: pointer;
  box-shadow: var(--sombra2);
}
.bingo-modal__cerrar .icono {
  width: 1.6rem; /* icono más grande dentro del botón */
  height: 1.6rem;
  /* La X va con la técnica .icono (máscara + color de token): toma el color de
     --color-icono-nav (= --color-secundario, azul de marca), así SIEMPRE
     contrasta con el botón blanco. Antes era un <img> del cerrar.svg con el fill
     horneado en BLANCO → X invisible sobre el botón blanco. */
}
/* fin bingo */
