/* =========================================================
   The Core Bakery · estilos complementarios a Tailwind
   ========================================================= */

:root {
  /* Curva de desaceleración suave usada en todas las animaciones */
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}

/* ---------- Visibilidad según la sesión ---------- */

/* Solo para administradores con sesión iniciada */
body:not(.is-admin) [data-admin-only] {
  display: none !important;
}
/* Solo para visitantes sin sesión */
body.is-admin [data-guest-only] {
  display: none !important;
}
/* Los controles de administración aparecen con un fundido al iniciar sesión */
body.is-admin [data-admin-only] {
  animation: fade-up 0.5s var(--ease-out) both;
}

/* ---------- Transiciones generales ---------- */

/* Suaviza todas las transiciones declaradas con Tailwind (hover, foco, etc.) */
body .transition,
body .transition-colors {
  transition-duration: 0.3s;
  transition-timing-function: var(--ease-out);
}

/* Respuesta táctil al presionar botones y enlaces con forma de botón */
button,
a.rounded-full {
  transition-property: color, background-color, border-color, box-shadow, opacity, transform;
  transition-duration: 0.3s;
  transition-timing-function: var(--ease-out);
}
button:not(:disabled):active,
a.rounded-full:active {
  transform: scale(0.97);
}

/* ---------- Aparición al hacer scroll ---------- */

/* Solo se ocultan si hay JavaScript (clase .js en <html>), para no dejar contenido invisible */
.js .reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 0.8s ease, transform 0.8s var(--ease-out);
  will-change: opacity, transform;
}
.js .reveal.is-visible {
  opacity: 1;
  transform: none;
}

/* ---------- Tarjetas del catálogo ---------- */

.cookie-card {
  transition: transform 0.5s var(--ease-out), box-shadow 0.5s var(--ease-out), opacity 0.8s ease;
}
.cookie-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 18px 30px -12px rgba(59, 38, 28, 0.14);
}
.cookie-img {
  transition: transform 0.9s var(--ease-out);
}
.cookie-card:hover .cookie-img {
  transform: scale(1.06);
}

/* ---------- Pedido ---------- */

/* Entrada de cada línea del pedido */
.cart-line {
  animation: fade-up 0.4s var(--ease-out) both;
}

/* Pequeño rebote del contador al agregar un producto */
.bump {
  animation: bump 0.45s var(--ease-out);
}
@keyframes bump {
  0% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.35);
  }
  100% {
    transform: scale(1);
  }
}

/* Paneles que se despliegan (dirección, instrucciones de pago) */
.unfold {
  animation: fade-up 0.4s var(--ease-out) both;
}

/* Barra de progreso del envío gratis */
.progress-fill {
  transition: width 0.9s var(--ease-out);
}

/* El mapa crea su propio contexto de apilamiento para no tapar el menú fijo */
#delivery-map {
  position: relative;
  z-index: 0;
  isolation: isolate;
  font-family: inherit;
}

/* ---------- Modales (<dialog>) ---------- */

dialog::backdrop {
  background: rgba(59, 38, 28, 0.45);
  backdrop-filter: blur(3px);
}
dialog[open] {
  animation: modal-in 0.4s var(--ease-out);
}
dialog[open]::backdrop {
  animation: fade-in 0.4s ease;
}
/* Clase que agrega ui.js justo antes de cerrar, para animar la salida */
dialog.is-closing {
  animation: modal-out 0.2s ease forwards;
}
dialog.is-closing::backdrop {
  animation: fade-out 0.2s ease forwards;
}

@keyframes modal-in {
  from {
    opacity: 0;
    transform: translateY(16px) scale(0.97);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes modal-out {
  to {
    opacity: 0;
    transform: translateY(10px) scale(0.98);
  }
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
}
@keyframes fade-out {
  to {
    opacity: 0;
  }
}
@keyframes fade-up {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* ---------- Formularios ---------- */

.field.has-error {
  border-color: #b91c1c;
}

/* ---------- Notificaciones ---------- */

.toast {
  animation: fade-up 0.4s var(--ease-out) both;
  transition: opacity 0.22s ease, transform 0.22s ease;
}
.toast.is-leaving {
  opacity: 0;
  transform: translateY(8px);
}

/* ---------- Movimiento reducido ---------- */

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto !important;
  }
  *,
  *::before,
  *::after {
    animation: none !important;
    transition: none !important;
  }
  .js .reveal {
    opacity: 1;
    transform: none;
  }
}
