/* Módulo RESERVAS.
   ⚠ TODO bajo `.mod-reservas*`. Un módulo no puede tener una sola regla suelta
   sobre `button`, `label` o `input`: cargaría después del tema y de la capa
   común, así que descuadraría el checkout y el buscador de cualquier tienda que
   lo instalara — y nadie relacionaría el fallo con el módulo. Es exactamente lo
   que pasa con los plugins de WordPress que traen su propio CSS global. */
.mod-reservas { margin: 2rem 0; }
.mod-reservas-intro { margin-bottom: 1rem; opacity: .9; }
.mod-reservas-vacio { opacity: .6; font-style: italic; }

.mod-reservas fieldset { border: 0; padding: 0; margin: 0 0 1.1rem; }
.mod-reservas legend { font-weight: 600; margin-bottom: .5rem; padding: 0; }

/* Los días y las horas son botones de radio disfrazados: funcionan sin JS. */
.mod-reservas-dias, .mod-reservas-horas { display: flex; flex-wrap: wrap; gap: .5rem; }
.mod-reservas-dia input, .mod-reservas-hora input { position: absolute; opacity: 0; pointer-events: none; }
.mod-reservas-dia span, .mod-reservas-hora span {
  display: block; border: 1px solid rgba(0,0,0,.18); border-radius: 10px;
  padding: .55rem .8rem; cursor: pointer; text-align: center; line-height: 1.15;
  background: #fff; transition: border-color .15s ease, box-shadow .15s ease;
}
.mod-reservas-dia b  { display: block; font-size: .74rem; text-transform: uppercase; letter-spacing: .04em; opacity: .6; }
.mod-reservas-dia em { font-style: normal; font-weight: 600; }
.mod-reservas-dia input:checked + span,
.mod-reservas-hora input:checked + span {
  border-color: var(--primario, #111); box-shadow: 0 0 0 2px var(--primario, #111) inset;
}
/* ⚠ `:focus-visible` en el hermano: sin esto, quien navega con teclado no ve
   dónde está — los radios de verdad están ocultos. */
.mod-reservas-dia input:focus-visible + span,
.mod-reservas-hora input:focus-visible + span { outline: 2px solid var(--acento, #333); outline-offset: 2px; }

/* Hueco ocupado: lo marca el JS. Sin JS no se marca, y el servidor lo rechaza
   igualmente — mejor un intento fallido que un calendario que no se ve. */
.mod-reservas-hora.ocupado span { opacity: .35; text-decoration: line-through; cursor: not-allowed; }

.mod-reservas-datos { display: grid; gap: .8rem; grid-template-columns: 1fr 1fr; }
.mod-reservas-datos label { display: flex; flex-direction: column; gap: .25rem; font-size: .9rem; }
.mod-reservas-datos label:nth-child(4) { grid-column: 1 / -1; }
.mod-reservas-datos input, .mod-reservas-datos textarea {
  font: inherit; padding: .55rem .7rem; border: 1px solid rgba(0,0,0,.2); border-radius: 8px; background: #fff;
}
.mod-reservas-aviso { font-size: .85rem; opacity: .75; margin: .9rem 0; }
.mod-reservas form > button {
  margin-top: 1rem; padding: .7rem 1.4rem; font: inherit; font-weight: 600;
  border: 0; border-radius: 10px; cursor: pointer;
  background: var(--primario, #111); color: #fff;
}
.mod-reservas form > button[disabled] { opacity: .5; cursor: default; }

.mod-reservas-fin { max-width: 46rem; margin: 3rem auto; padding: 0 1rem; }
.mod-reservas-errores { margin: 1rem 0; padding-left: 1.2rem; }

/* ⚠ En móvil los datos van en una sola columna. La capa común del motor arregla
   el móvil de la tienda, pero no conoce este bloque: cada módulo se ocupa del
   suyo. */
@media (max-width: 640px) {
  .mod-reservas-datos { grid-template-columns: 1fr; }
  .mod-reservas-dias, .mod-reservas-horas { gap: .4rem; }
  .mod-reservas-dia span, .mod-reservas-hora span { padding: .5rem .6rem; font-size: .92rem; }
}
