:root {
  --bg: #0f1a14;
  --surface: rgba(255, 255, 255, 0.08);
  --surface-2: rgba(255, 255, 255, 0.14);
  --border: rgba(255, 255, 255, 0.18);
  --text: #eef5f0;
  --text-muted: #9db3a6;
  --accent: #c6ff3d;
  --accent-text: #0f1a14;
  --danger: #ff6b6b;
  --ok: #4ade80;
  --radius: 12px;
  font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  min-height: 100vh;
  /* Nada de la página debe scrollear horizontalmente; el contenido
     ancho (tablas) tiene que scrollear dentro de su propio
     contenedor (.table-scroll), nunca la página entera. */
  overflow-x: hidden;
}

body {
  /* z-index (no solo position) es necesario para que el body forme su
     propio contexto de apilamiento: si no, el z-index:-1 de abajo
     queda "atrapado" detrás del fondo del propio <html>/<body> y la
     imagen nunca se llega a ver, por más que cargue bien. */
  position: relative;
  z-index: 0;
}

/* Foto de fondo difuminada y oscurecida detrás de todo el contenido,
   en un pseudo-elemento fijo aparte para que el blur no le pegue al
   texto ni a las tarjetas de arriba. El scale evita que se vean los
   bordes sin difuminar por el blur.
   La imagen es siempre /assets/fondo.webp, salvo que la página
   redefina --bg-image (admin.html usa otra distinta, ver ahí). Ruta
   absoluta ("/assets/...") a propósito: una relativa se resolvería
   contra la carpeta de este archivo (css/), no contra la página. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  background-image: linear-gradient(rgba(10, 18, 14, 0.74), rgba(10, 18, 14, 0.74)), var(--bg-image, url("/assets/fondo.webp"));
  background-size: cover;
  background-position: center;
  filter: blur(6px);
  transform: scale(1.1);
}

.table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.container {
  max-width: 880px;
  margin: 0 auto;
  padding: 24px 16px 64px;
}

header.top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 0 28px;
}

.brand {
  display: flex;
  align-items: center;
  gap: 10px;
}

.brand-logo {
  height: 64px;
  width: auto;
  max-width: 55vw;
  flex-shrink: 1;
  object-fit: contain;
  /* El archivo del logo tiene fondo negro sólido (no transparente).
     "lighten" hace que el negro se funda con el fondo oscuro de la
     página (que también es oscuro) y solo quede visible el logo en
     sí. Si en algún momento consiguen una versión con fondo
     transparente de verdad, se puede sacar esta línea. */
  mix-blend-mode: lighten;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

header.top h1 {
  font-size: 1.4rem;
  margin: 0;
}

header.top a {
  color: var(--text-muted);
  text-decoration: none;
  font-size: 0.85rem;
  border: 1px solid var(--border);
  padding: 6px 12px;
  border-radius: 999px;
}
header.top a:hover {
  color: var(--text);
  border-color: var(--accent);
}

.card {
  background: var(--surface);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px;
  margin-bottom: 20px;
}

.card h2 {
  margin-top: 0;
  font-size: 1.05rem;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
}

.row {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

label {
  display: block;
  font-size: 0.85rem;
  color: var(--text-muted);
  margin-bottom: 6px;
}

input[type="date"],
input[type="text"],
input[type="tel"],
input[type="email"],
select {
  width: 100%;
  background: var(--surface-2);
  border: 1px solid var(--border);
  color: var(--text);
  padding: 10px 12px;
  border-radius: 8px;
  font-size: 1rem;
}
input:focus,
select:focus {
  outline: none;
  border-color: var(--accent);
}
select {
  -webkit-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239db3a6' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 34px;
}
/* El <select> cerrado sí respeta nuestro tema (fondo oscuro,
   texto claro), pero la listita que se despliega al abrirlo la
   pinta el sistema operativo, casi siempre con fondo claro — con
   "color: var(--text)" (claro) heredado, el texto de las opciones
   quedaba clarito sobre claro, invisible. Se fuerza texto oscuro
   sobre fondo claro solo para las opciones, que es lo que el
   navegador realmente puede mostrar de forma confiable. */
select option {
  color: #111;
  background: #fff;
}

.court-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 16px;
}

.court-tab {
  flex: 1;
  padding: 10px;
  text-align: center;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text-muted);
  cursor: pointer;
  font-weight: 600;
}
.court-tab.active {
  background: var(--accent);
  color: var(--accent-text);
  border-color: var(--accent);
}

.slots-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
  gap: 10px;
}

.slot-btn {
  padding: 10px 6px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text);
  cursor: pointer;
  font-size: 0.9rem;
  text-align: center;
}
.slot-btn:hover {
  border-color: var(--accent);
}
.slot-btn.selected {
  background: var(--accent);
  color: var(--accent-text);
  border-color: var(--accent);
  font-weight: 700;
}
.slot-btn.taken {
  opacity: 0.35;
  text-decoration: line-through;
  cursor: not-allowed;
  pointer-events: none;
}

.empty-msg,
.loading-msg {
  color: var(--text-muted);
  font-size: 0.9rem;
  padding: 8px 0;
}

.summary {
  background: var(--surface-2);
  border-radius: 8px;
  padding: 14px;
  margin-bottom: 16px;
  font-size: 0.95rem;
}
.summary b {
  color: var(--accent);
}

.transfer-box {
  background: var(--surface-2);
  border: 1px solid var(--accent);
  border-radius: 8px;
  padding: 14px;
  margin: 16px 0;
  font-size: 0.95rem;
}
.transfer-box h3 {
  margin: 0 0 8px;
  font-size: 0.95rem;
  color: var(--accent);
}
.transfer-box p {
  margin: 4px 0;
}
.transfer-box b {
  color: var(--text);
}

input[type="file"] {
  width: 100%;
  background: var(--surface-2);
  border: 1px solid var(--border);
  color: var(--text-muted);
  padding: 10px 12px;
  border-radius: 8px;
  font-size: 0.9rem;
}

.proof-thumb {
  max-width: 100px;
  max-height: 100px;
  border-radius: 6px;
  border: 1px solid var(--border);
}

button.primary {
  width: 100%;
  padding: 14px;
  border-radius: 8px;
  border: none;
  background: var(--accent);
  color: var(--accent-text);
  font-weight: 700;
  font-size: 1rem;
  cursor: pointer;
}
button.primary:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
button.primary:hover:not(:disabled) {
  filter: brightness(1.08);
}

/* .secondary (no solo button.secondary): así un <a> también puede
   usar este mismo estilo de botón, ej. el link a "Buffet y tienda". */
.secondary {
  display: inline-block;
  padding: 10px 16px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--text);
  text-decoration: none;
  cursor: pointer;
}
.secondary:hover {
  border-color: var(--accent);
}

button.danger {
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid var(--danger);
  background: transparent;
  color: var(--danger);
  cursor: pointer;
  font-size: 0.85rem;
}
button.danger:hover {
  background: var(--danger);
  color: #200;
}

.field-error {
  color: var(--danger);
  font-size: 0.85rem;
  margin-top: 4px;
  min-height: 1.1em;
}

.status-banner {
  padding: 14px 16px;
  border-radius: var(--radius);
  margin-bottom: 20px;
  font-weight: 600;
  text-align: center;
}
.status-banner.ok {
  background: rgba(74, 222, 128, 0.15);
  color: var(--ok);
  border: 1px solid var(--ok);
}
.status-banner.pending {
  background: rgba(198, 255, 61, 0.12);
  color: var(--accent);
  border: 1px solid var(--accent);
}
.status-banner.error {
  background: rgba(255, 107, 107, 0.12);
  color: var(--danger);
  border: 1px solid var(--danger);
}

table.admin-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.9rem;
}
table.admin-table th,
table.admin-table td {
  text-align: left;
  padding: 8px 10px;
  border-bottom: 1px solid var(--border);
}
table.admin-table th {
  color: var(--text-muted);
  font-weight: 600;
  font-size: 0.8rem;
  text-transform: uppercase;
}

.badge {
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 700;
}
.badge.confirmed {
  background: rgba(74, 222, 128, 0.15);
  color: var(--ok);
}
.badge.pending {
  background: rgba(198, 255, 61, 0.15);
  color: var(--accent);
}
.badge.cancelled {
  background: rgba(255, 107, 107, 0.15);
  color: var(--danger);
}

.admin-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 20px;
  border-bottom: 1px solid var(--border);
}

.tab-btn {
  padding: 10px 14px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--text-muted);
  font-weight: 600;
  font-size: 0.9rem;
  cursor: pointer;
  white-space: nowrap;
}
.tab-btn:hover {
  color: var(--text);
}
.tab-btn.active {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

.proof-link {
  color: var(--accent);
  font-size: 0.8rem;
}

.product-card {
  display: flex;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border);
}
.product-card img {
  width: 56px;
  height: 56px;
  object-fit: cover;
  border-radius: 8px;
  border: 1px solid var(--border);
  flex-shrink: 0;
}
.product-card .info {
  flex: 1;
}
.product-card .info small {
  color: var(--text-muted);
}
.product-card .stock-low {
  color: var(--danger);
}

.mesa-card {
  background: var(--surface-2);
  border-radius: 8px;
  padding: 12px 14px;
  margin-bottom: 10px;
  cursor: pointer;
  border: 1px solid var(--border);
}
.mesa-card:hover {
  border-color: var(--accent);
}
.mesa-card .mesa-number {
  font-weight: 700;
  color: var(--accent);
  font-size: 1.1rem;
}

.login-box {
  max-width: 360px;
  margin: 80px auto;
}

.notif-badge {
  position: absolute;
  top: -6px;
  right: -6px;
  background: var(--danger);
  color: #fff;
  border-radius: 999px;
  font-size: 0.7rem;
  font-weight: 700;
  line-height: 1;
  padding: 3px 6px;
  min-width: 16px;
  text-align: center;
}

.notif-panel {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  width: 320px;
  max-width: 85vw;
  max-height: 400px;
  overflow-y: auto;
  background: var(--surface);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 14px;
  z-index: 20;
}

.notif-item {
  background: var(--surface-2);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 8px;
  font-size: 0.85rem;
}
.notif-item:last-child {
  margin-bottom: 0;
}
.notif-item.unread {
  border: 1px solid var(--accent);
}

.center {
  text-align: center;
}

.admin-link {
  color: var(--text-muted);
  font-size: 0.75rem;
  text-decoration: none;
}
.admin-link:hover {
  color: var(--text);
}

.footer-note {
  color: var(--text-muted);
  font-size: 0.8rem;
  text-align: center;
  margin-top: 24px;
}

.social-links {
  display: flex;
  justify-content: center;
  gap: 20px;
  margin-top: 14px;
}

.social-link {
  display: flex;
  align-items: center;
  gap: 6px;
  color: var(--text-muted);
  text-decoration: none;
  font-size: 0.85rem;
}
.social-link:hover {
  color: var(--accent);
}
