/* Vista operativa tipo hoja: piso fijo, unidad fija y meses compactos. */
:root{--cal-property-col:188px;--cal-unit-col:112px;--cal-month-col:58px;--cal-row-h:104px}
.reservation-calendar{background:var(--blanco)}
.calendar-year-switcher{display:grid;grid-template-columns:auto auto auto;align-items:center;gap:8px}
.calendar-year-box{min-width:96px;padding:9px 16px;border-radius:var(--radio-m);background:var(--tinta-900);color:var(--blanco);text-align:center;font-size:1.18rem;line-height:1;font-weight:700;letter-spacing:.03em;box-shadow:0 2px 10px rgba(23,35,34,.12)}
.calendar-year-box span{display:block;margin-bottom:4px;font-size:.5rem;line-height:1;letter-spacing:.16em;color:var(--cal-anio-subtitulo)}
.calendar-toolbar{align-items:flex-start}
.calendar-toolbar .calendar-legend-wrap{display:flex;gap:8px;flex-wrap:wrap;flex:1;min-width:280px}
.calendar-toolbar .calendar-filters{display:flex;align-items:end;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.calendar-filters label{display:grid;gap:6px;color:var(--muted);font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}
.calendar-filters input,.calendar-filters select{height:41px;border-radius:var(--radio-m);padding:9px 12px;font-size:.84rem;text-transform:none;letter-spacing:0}
.calendar-search-field input{width:min(390px,38vw);min-width:280px}
.calendar-result-count{height:41px;display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:var(--radio-m);padding:0 12px;background:var(--gris-050);color:var(--muted);font-size:.72rem;font-weight:700;white-space:nowrap}
.calendar-head{display:grid;grid-template-columns:var(--cal-property-col) var(--cal-unit-col) minmax(calc(var(--cal-month-col) * 12),1fr);min-width:calc(var(--cal-property-col) + var(--cal-unit-col) + var(--cal-month-col) * 12);position:sticky;top:0;z-index:8}
.cal-corner{min-height:38px;padding:9px 12px}
.cal-corner.property{position:sticky;left:0;z-index:10;border-right:1px solid rgba(255,255,255,.16)}
.cal-corner.unit{position:sticky;left:var(--cal-property-col);z-index:10;border-right:1px solid rgba(255,255,255,.16);background:var(--cal-esquina-unit)}
.calendar-months,.calendar-track{display:grid;grid-template-columns:repeat(12,minmax(var(--cal-month-col),1fr))}
.month{padding:9px 6px;font-size:.72rem}
.calendar-property{display:grid;grid-template-columns:var(--cal-property-col) minmax(calc(var(--cal-unit-col) + var(--cal-month-col) * 12),1fr);min-width:calc(var(--cal-property-col) + var(--cal-unit-col) + var(--cal-month-col) * 12);border-top:2px solid var(--gris-linea);background:var(--blanco)}
.calendar-property:first-of-type{border-top:0}
.cal-property-cell{position:sticky;left:0;z-index:6;min-height:calc(var(--rows) * var(--cal-row-h));padding:9px 10px;border-right:1px solid var(--gris-linea);background:var(--cal-piso-fondo);display:flex;flex-direction:column;justify-content:center;gap:3px}
.cal-property-head{display:flex;align-items:center;gap:5px;min-width:0}
.cal-property-cell strong{font-size:.82rem;line-height:1.06}
.cal-property-cell span{font-size:.65rem;line-height:1.12;color:var(--ink)}
.cal-property-ref{color:var(--teal-dark);font-weight:700;letter-spacing:.02em;text-transform:uppercase}
.cal-property-cell .cal-code{display:inline-flex;max-width:82px;border-radius:var(--radio-s);padding:2px 5px;background:var(--teal-dark);color:var(--blanco);font-size:.62rem;font-weight:700;letter-spacing:.02em}
.cal-property-cell .cal-zone{color:var(--teal-dark);font-size:.58rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.cal-property-name{margin-top:1px;color:var(--ink)}
.cal-address{font-size:.66rem;font-weight:700;text-transform:uppercase}
.cal-zone-line{color:var(--teal-dark);font-size:.59rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}
.cal-city{color:var(--texto-secundario);font-weight:700}
.cal-owner{margin-top:1px;color:var(--ink);font-weight:700}
.cal-surface{color:var(--texto-secundario)}
.cal-cadastre{color:var(--muted);font-size:.59rem}
.cal-property-meta{display:grid;grid-template-columns:minmax(42px,.55fr) minmax(0,1.45fr);gap:4px;margin-top:2px}
.cal-property-cell small{min-width:0;border-radius:var(--radio-s);padding:2px 4px;background:var(--cal-meta-fondo);color:var(--muted);font-size:.58rem;line-height:1.08;font-weight:700}
.cal-property-cell strong,.cal-property-cell span,.cal-property-cell small,.cal-unit strong,.cal-unit span,.cal-unit small{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.cal-property-cell strong,.cal-property-cell span,.cal-property-cell small{white-space:nowrap}
.calendar-property-rooms{display:grid}
.calendar-row{display:grid;grid-template-columns:var(--cal-unit-col) minmax(calc(var(--cal-month-col) * 12),1fr);min-width:calc(var(--cal-unit-col) + var(--cal-month-col) * 12);min-height:var(--cal-row-h);border-top:1px solid var(--gris-linea)}
.calendar-property-rooms .calendar-row:first-child{border-top:0}
.cal-unit{position:sticky;left:var(--cal-property-col);z-index:5;min-height:var(--cal-row-h);padding:7px 7px;border-right:1px solid var(--line);background:var(--blanco);display:flex;flex-direction:column;justify-content:center;gap:2px}
.cal-unit:before{display:none}
.cal-unit strong{font-size:.76rem;line-height:1.05;white-space:nowrap;color:var(--ink)}
.cal-unit span,.cal-unit small{display:block;font-size:.6rem;line-height:1.12;color:var(--muted);white-space:nowrap}
.cal-unit .cal-unit-code span{display:inline;font-size:.61rem;color:var(--teal-dark);font-weight:700}
.cal-unit .cal-unit-kind{font-size:.59rem;color:var(--ink);font-weight:700;letter-spacing:.02em}
.calendar-track{position:relative;grid-template-rows:var(--cal-row-h);background:var(--blanco)}
.month-cell{border-left:1px solid var(--gris-linea);background:var(--cal-mes-fondo)}
.month-cell.current{background:var(--cal-mes-actual)}
.calendar-inactive-range{position:absolute;z-index:1;left:var(--left);top:0;height:100%;width:var(--width);background:var(--excel-fuera);box-shadow:inset -1px 0 0 rgba(118,128,126,.28);pointer-events:auto}
.booking-bar{position:absolute;grid-area:1 / 1 / 2 / -1;align-self:start;z-index:2;left:var(--left);top:5px;height:calc(var(--cal-row-h) - 10px);width:var(--width);min-width:30px;margin:0;border:0;border-radius:var(--radio-s);padding:6px 7px;text-align:center;overflow:hidden;cursor:pointer;background:var(--excel-reservada);color:var(--ink);box-shadow:none;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:3px;box-sizing:border-box}
.booking-bar.reservada{background:var(--excel-reservada);color:var(--ink)}
.booking-bar.pendiente_renovacion,.booking-bar.renovada{background:var(--excel-renovar);color:var(--ink)}
.booking-bar.preparar{background:var(--excel-preparar);color:var(--ink)}
.booking-bar.booking-gradient{--terminal-color:var(--excel-preparar);background:linear-gradient(90deg,var(--excel-reservada) 0%,var(--excel-reservada) var(--terminal-start),var(--terminal-color) 100%);color:var(--ink)}
.booking-bar.booking-gradient.pendiente_renovacion,.booking-bar.booking-gradient.renovada{--terminal-color:var(--excel-renovar)}
.booking-bar.booking-gradient.preparar{--terminal-color:var(--excel-preparar)}
.booking-bar.cancelada{background:var(--excel-cancelada);color:var(--blanco);font-weight:700;box-shadow:0 2px 10px rgba(164,0,0,.32)}
.booking-bar.has-exit-note{padding-right:27px}
.booking-bar strong,.booking-bar span{display:block;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.booking-bar strong{font-size:.82rem;line-height:1.08;font-weight:700;text-transform:uppercase}
.booking-bar span{font-size:.68rem;line-height:1.08;opacity:.88}
.booking-bar .booking-move-note{font-size:.58rem;line-height:1.05;font-weight:700;color:var(--ink);letter-spacing:.02em;text-transform:uppercase;opacity:1}
.booking-bar .booking-exit-note{position:absolute;right:5px;top:5px;z-index:4;width:18px;height:16px;border-radius:var(--radio-m);padding:0;background:rgba(255,255,255,.9);color:var(--tinta-900);box-shadow:0 1px 5px rgba(23,35,34,.16);display:flex;align-items:center;justify-content:center;overflow:visible;text-overflow:clip;font-size:.62rem;line-height:1;font-weight:700;opacity:1}
.booking-bar .booking-exit-note:after{content:"";position:absolute;right:3px;bottom:-3px;width:0;height:0;border-top:4px solid rgba(255,255,255,.9);border-left:5px solid transparent}
.booking-cancelled-marker{position:absolute;left:clamp(10px,var(--left),calc(100% - 10px));top:4px;z-index:7;width:20px;height:20px;border:0;border-radius:var(--radio-pill);padding:0;background:var(--excel-cancelada);color:var(--blanco);box-shadow:0 2px 8px rgba(164,0,0,.28);display:flex;align-items:center;justify-content:center;cursor:pointer;transform:translateX(-50%)}
.booking-cancelled-marker .marker-icon{font-size:.9rem;line-height:1;font-weight:700;opacity:1}
.calendar-marker{grid-row:1;grid-column:var(--month);position:relative;z-index:3;height:17px;margin:3px 2px;border:0;border-radius:var(--radio-s);padding:2px 4px;text-align:left;overflow:hidden;color:var(--blanco);display:flex;align-items:center;gap:4px}
.calendar-marker.incidencia{position:absolute;grid-area:auto;left:var(--left);top:4px;z-index:5;width:20px;height:20px;margin:0;padding:0;border-radius:var(--radio-pill);background:var(--excel-incidencia);color:var(--blanco);box-shadow:0 2px 8px rgba(36,102,173,.28);display:flex;align-items:center;justify-content:center;transform:translateX(-50%)}
.calendar-marker.preparar{background:var(--excel-preparar-marcador)}
.calendar-marker strong,.calendar-marker span{font-size:.48rem;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.calendar-marker strong{font-weight:700;text-transform:uppercase}
.calendar-marker span{opacity:.9}
.calendar-marker.incidencia .marker-icon{font-size:.78rem;line-height:1;font-weight:700;opacity:1}
.dashboard-calendar .reservation-calendar{max-height:540px}
@media(max-width:760px){
  :root{--cal-property-col:176px;--cal-unit-col:108px;--cal-month-col:58px;--cal-row-h:104px}
  .calendar-year-switcher{grid-template-columns:1fr;justify-items:stretch}
  .calendar-toolbar .calendar-filters{width:100%;justify-content:stretch}
  .calendar-filters label,.calendar-search-field input,.calendar-filters select,.calendar-result-count{width:100%;min-width:0}
  .cal-property-cell{padding:7px 8px}
}

/* --- Colores 1:1 con la hoja `calendarios reservas` (E2/H5) --- */
/* Rojo claro = reservada PAGADA (ya definido); azul = plataforma; contorno = sin pagar. */
.booking-bar.plataforma{background:var(--excel-plataforma);color:var(--ink)}
.booking-bar.sin_pagar{background:repeating-linear-gradient(45deg,var(--excel-sinpagar),var(--excel-sinpagar) 6px,var(--blanco) 6px,var(--blanco) 12px);border:1.5px dashed var(--excel-sinpagar-borde);color:var(--excel-sinpagar-texto)}
.booking-bar.booking-gradient{--base-color:var(--excel-reservada);background:linear-gradient(90deg,var(--base-color) 0%,var(--base-color) var(--terminal-start),var(--terminal-color) 100%)}
.booking-bar.booking-gradient.plataforma{--base-color:var(--excel-plataforma)}
.booking-bar.booking-gradient.sin_pagar{--base-color:var(--excel-sinpagar);border:1.5px dashed var(--excel-sinpagar-borde)}
.calendar-legend.plataforma{background:var(--excel-plataforma-legend);color:var(--excel-plataforma-texto)}.calendar-legend.plataforma:before{background:var(--excel-plataforma)}
.calendar-legend.sin-pagar{background:var(--excel-sinpagar-legend);color:var(--excel-sinpagar-texto)}.calendar-legend.sin-pagar:before{background:var(--blanco);border:1px dashed var(--excel-sinpagar-borde)}

/* Los bloques de reserva son clicables (abren su ficha): que se note al pasar por encima. */
.booking-bar{transition:transform var(--dur-2) var(--ease-out),filter var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}
.booking-bar:hover{filter:brightness(.96);box-shadow:0 4px 12px rgba(23,35,34,.22);transform:translateY(-1px)}

/* — REDISEÑO: profundidad de la envoltura (NINGÚN color Excel tocado) — */
/* La columna fija de piso/unidad "flota" al deslizar los meses. */
.cal-property-cell,.cal-unit{box-shadow:8px 0 16px -12px rgba(23,35,34,.22)}
/* La cabecera oscura de meses recibe un reflejo especular interno (acero, no plano). */
.calendar-months,.cal-corner{box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}
/* El mes en curso, con un realce muy sutil. */
.month.current{box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}

/* ============ REDISEÑO D4 · Calendario de la entrega Claude Design (paleta Excel INTACTA) ============ */
/* Filas más serenas: menos texto por celda = menos altura necesaria. */
:root{--cal-row-h:88px}
@media(max-width:1360px){:root{--cal-property-col:150px;--cal-unit-col:96px;--cal-month-col:50px}}
@media(max-width:1180px){:root{--cal-property-col:140px;--cal-unit-col:90px;--cal-month-col:46px}}
/* Cero scroll lateral (estudio de Homming, HANDOFF §0.1). Cada mes tenía un ancho MÍNIMO (58/50/46 px)
   y, si no cabían los doce, la tabla se desplazaba en horizontal dentro de su caja: 268 px escondidos
   con la ventana a 768 px y 12 px a 1024 (medido con web/desborde.html). Ahora los meses se reparten
   lo que dejan las dos columnas fijas (1fr con mínimo 0): donde ya cabían no cambia nada —el 1fr les
   daba más que el mínimo— y donde no cabían se estrechan en vez de esconderse. Por debajo de 900 px
   manda la vista por mes (más abajo). */
:root{--cal-month-col:0px}
/* El código de la habitación y la referencia del piso («H1 ABA-01») no caben en 90 px de columna:
   la referencia se cortaba por la mitad. Mejor en dos líneas que a medias. */
@media(max-width:1180px){.cal-unit .cal-unit-code{white-space:normal}}
/* Toolbar en dos niveles: filtros arriba, leyenda abajo en UNA línea tranquila. */
.calendar-toolbar{flex-direction:column-reverse;align-items:stretch;gap:12px}
.calendar-toolbar .calendar-legend-wrap{display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-width:0}
/* Leyenda compacta: cuadradito de color + texto gris — los chips que gritaban se van. */
.calendar-legend,.calendar-legend.fuera-gestion,.calendar-legend.disponible,.calendar-legend.renovacion,.calendar-legend.reservada,.calendar-legend.plataforma,.calendar-legend.sin-pagar,.calendar-legend.incidencia,.calendar-legend.preparar,.calendar-legend.cancelada{background:none;border:0;padding:0;border-radius:0;color:var(--texto-secundario);font-size:.7rem;font-weight:600;white-space:nowrap;gap:6px}
.calendar-legend:before{width:10px;height:10px;border-radius:3px;border:1px solid rgba(23,35,34,.1)}
.calendar-legend.fuera-gestion:before{background:var(--excel-fuera)}
.calendar-legend.disponible:before{background:var(--excel-disponible)}
.calendar-legend.renovacion:before{background:var(--excel-renovar)}
.calendar-legend.reservada:before{background:var(--excel-reservada)}
.calendar-legend.plataforma:before{background:var(--excel-plataforma)}
.calendar-legend.sin-pagar:before{background:repeating-linear-gradient(45deg,var(--excel-sinpagar),var(--excel-sinpagar) 3px,var(--blanco) 3px,var(--blanco) 5px);border:1px dashed var(--excel-sinpagar-borde)}
.calendar-legend.incidencia:before{background:var(--excel-incidencia)}
.calendar-legend.preparar:before{background:var(--excel-preparar)}
.calendar-legend.cancelada:before{background:var(--excel-cancelada)}
.calendar-legend-hint{font-size:.66rem;color:var(--muted);white-space:nowrap;margin-left:auto}
/* La pista vacía ES "Disponible" (verde Excel), como en la hoja: lo no cubierto se lee solo. */
.calendar-track{background:var(--excel-disponible)}
.month-cell{background:transparent;border-left:1px solid rgba(23,35,34,.06)}
.month-cell.current{background:var(--cal-mes-actual)}
/* Celda de piso en 3 líneas: referencia como placa, dirección legible, contexto en gris. */
.cal-property-cell{gap:4px}
.cal-property-cell .cal-property-ref{align-self:flex-start;background:var(--verde-700);color:var(--blanco);border-radius:var(--radio-s);padding:2px 7px;font-size:.62rem;font-weight:700;letter-spacing:.02em}
.cal-property-cell .cal-address{white-space:normal;text-transform:none;letter-spacing:0;font-size:.72rem;font-weight:600;line-height:1.25}
.cal-property-cell .cal-meta-line{font-size:.62rem;color:var(--texto-secundario)}
/* Celda de unidad sin mayúsculas que gritan y con cifras tabulares. */
.cal-unit{gap:3px}
.cal-unit strong{font-size:.74rem}
.cal-unit .cal-unit-kind{text-transform:none;letter-spacing:0;font-size:.62rem;font-weight:600;color:var(--texto-secundario)}
.cal-unit .cal-unit-price{font-variant-numeric:tabular-nums;font-size:.62rem;color:var(--texto-secundario)}
/* Barras: texto a la izquierda en 2 líneas, sin MAYÚSCULAS; contorno sutil para separarlas del fondo. */
.booking-bar{align-items:flex-start;text-align:left;padding:6px 10px;gap:2px;box-shadow:inset 0 0 0 1px rgba(23,35,34,.06)}
.booking-bar strong{text-transform:none;font-size:.72rem;font-weight:600}
.booking-bar span{font-size:.62rem;opacity:.85}
.booking-bar .booking-move-note{text-transform:none;font-size:.6rem;font-weight:600}
/* Franja terminal SÓLIDA (T8): fuera el degradado arcoíris — la franja al final dice qué pasa al acabar. */
.booking-bar.booking-gradient{background:var(--base-color,var(--excel-reservada))}
.booking-bar.booking-gradient:after{content:"";position:absolute;right:0;top:0;bottom:0;width:9px;background:var(--terminal-color)}

/* ==================== Seguimiento P3 · D5.05d — Calendario móvil: vista por MES ====================
   En ≤900px la vista anual se sustituye por un mes con ‹ › (antes era <760px y de 761 a 900 el año
   se desplazaba en horizontal: el error de Homming que el detector de desborde encontró a 768 px): el piso colapsa a
   una línea (ref + dirección) y cada habitación es una fila táctil. Los bloques reutilizan las
   MISMAS clases de color Excel (.booking-bar.*, .calendar-inactive-range, marcadores): aquí solo
   cambia la geometría, la paleta NO se toca. La pista vacía sigue siendo verde Disponible. */
.cal-month-view{display:none}
@media(max-width:900px){
  #calendar-content .reservation-calendar{display:none}
  .cal-month-view{display:block}
  .cal-month-switch{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--blanco)}
  .cal-month-switch .button{min-width:44px;min-height:44px;padding:0;font-size:1.3rem;line-height:1}
  .cal-month-switch strong{text-align:center;font-size:.95rem;font-weight:700}
  .cal-m-property{border-top:2px solid var(--gris-linea);padding-bottom:8px}
  .cal-m-property:first-of-type{border-top:0}
  .cal-m-head{display:flex;align-items:center;gap:8px;min-width:0;margin:0;padding:10px 12px 5px;font-size:.72rem;font-weight:700}
  .cal-m-head strong{flex:none;background:var(--verde-700);color:var(--blanco);border-radius:var(--radio-s);padding:2px 7px;font-size:.62rem;letter-spacing:.02em}
  .cal-m-head span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--texto-secundario);font-weight:600}
  .cal-m-row{display:grid;grid-template-columns:74px 1fr;align-items:center;gap:8px;padding:4px 12px}
  .cal-m-label{min-width:0;display:flex;flex-direction:column;gap:1px}
  .cal-m-label strong{font-size:.78rem;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cal-m-label small{font-size:.6rem;color:var(--muted);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cal-m-track{position:relative;height:52px;border-radius:var(--radio-s);background:var(--excel-disponible);overflow:hidden;box-shadow:inset 0 0 0 1px rgba(23,35,34,.08)}
  .cal-m-track.current{background:var(--cal-mes-actual)}
  .cal-m-track .booking-bar{position:absolute;top:4px;height:44px;left:var(--left);width:var(--width);padding:4px 8px;gap:1px}
  .cal-m-track .booking-bar strong{font-size:.7rem}
  .cal-m-track .booking-bar span{font-size:.56rem}
  /* El marcador «Preparar» es informativo (sin onclick): pointer-events:none para que su franja no
     robe los toques de la barra que hay debajo (abre la ficha). Igual de inerte que en la vista anual. */
  .cal-m-track .calendar-marker.preparar{position:absolute;grid-area:auto;left:3px;right:3px;top:3px;margin:0;z-index:4;pointer-events:none}
  .cal-m-today{position:absolute;left:var(--left);top:0;bottom:0;width:2px;background:var(--tinta-900);opacity:.5;pointer-events:none}
  .cal-month-view .empty{padding:24px}
}
