/*
 * Calendrier public de disponibilité.
 *
 * SPEC-11 : la couleur ne porte jamais seule l'information. Le style de
 * bordure (pointillés = provisoire, plein = définitif) et, pour l'état
 * Indisponible, le texte barré, restent lisibles même en niveaux de gris
 * ou à l'impression.
 */

.aspacam-calendar {
	/* Pas de max-width ici : la largeur du module tout entier (calendrier +
	   formulaire) est fixée une seule fois par .aspacam-reservation, dans
	   form.css. Un max-width en em posé ici, séparément de celui du
	   formulaire, se calculerait sur la taille de police de CE bloc — pas
	   forcément la même que celle du thème pour le formulaire — et les deux
	   blocs finiraient par ne plus faire la même largeur malgré une valeur
	   identique sur le papier. */
	width: 100%;
	box-sizing: border-box;
	font-size: 1rem;
	line-height: 1.4;
}

/* Visuellement masqué mais lisible par un lecteur d'écran. Redéfini ici
   plutôt que de compter sur le thème actif, qui ne fournit pas forcément
   cette classe côté public (contrairement à l'admin WordPress).
   Volontairement non limité à .aspacam-calendar : utilisé aussi bien pour
   les libellés des sélecteurs mois/année (SPEC-60) que pour toute étiquette
   de formulaire (form.css) qui ferait doublon avec un texte déjà visible
   ailleurs dans le champ, comme celle du sélecteur de formule. */
.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.aspacam-calendar__nav {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5em;
	margin-bottom: 0.75em;
}

.aspacam-calendar__nav button,
.aspacam-calendar__nav select {
	min-height: 2.75em;
	padding: 0.4em 0.6em;
	border: 1px solid #666;
	background: #f5f5f5;
	cursor: pointer;
	font-size: 1em;
}

.aspacam-calendar__nav button:disabled {
	opacity: 0.4;
	cursor: default;
}

.aspacam-calendar__today {
	margin-left: auto;
}

.aspacam-calendar__month h3,
.aspacam-calendar__month-label {
	text-align: center;
	text-transform: capitalize;
	margin: 0.5em 0;
}

.aspacam-calendar__grid {
	display: grid;
	grid-template-columns: repeat(7, 1fr);
	gap: 0.25em;
}

.aspacam-calendar__weekday {
	text-align: center;
	font-weight: bold;
	font-size: 0.8em;
	padding-bottom: 0.25em;
}

.aspacam-calendar__cell--vide {
	visibility: hidden;
}

/* Chaque jour est un bouton : cible tactile large (SPEC-33) et navigable
   au clavier sans souris (SPEC-32), même pour les jours non sélectionnables. */
.aspacam-day {
	min-height: 2.75em;
	width: 100%;
	box-sizing: border-box;
	border-width: 1px;
	border-style: solid;
	border-radius: 3px;
	background: #fff;
	color: #222;
	font-size: 1em;
	cursor: pointer;
}

.aspacam-day--libre {
	background: #ffffff;
	border-color: #999;
	border-style: solid;
	border-width: 1px;
}

.aspacam-day--attente-validation {
	background: #fdf1d6;
	border-color: #b8860b;
	border-style: dashed;
	border-width: 2px;
}

.aspacam-day--attente-paiement {
	background: #dceafd;
	border-color: #1a5fb4;
	border-style: dashed;
	border-width: 2px;
}

.aspacam-day--reserve {
	background: #fbdada;
	border-color: #a51d2d;
	border-style: solid;
	border-width: 2px;
}

.aspacam-day--indisponible {
	background: #e5e5e5;
	border-color: #5c5c5c;
	border-style: solid;
	border-width: 2px;
	color: #5c5c5c;
	text-decoration: line-through;
}

/* Déclarée après les états ci-dessus pour bien les recouvrir : un jour
   passé (toujours combiné à l'état Libre uniquement, voir class-calendar.php
   et calendar.js) se lit comme « hors sujet », sans bordure — à l'opposé
   d'Indisponible, qui reste gris à bordure pleine et texte barré. Les deux
   ne doivent jamais se confondre (SPEC-11). */
.aspacam-day--passe {
	border: none;
	background: transparent;
	color: #bbb;
	cursor: default;
}

/* Mode sélectionnable uniquement (Aspacam_Form, lot 4) : la sélection ne
   s'applique jamais qu'à un jour Libre (voir calendar.js), donc toujours
   par-dessus .aspacam-day--libre — d'où la déclaration après elle. Un
   contour épais et distinct, jamais l'un des styles des cinq états publics,
   pour ne jamais se confondre avec Réservé ou Indisponible. */
.aspacam-day--selectionnee {
	background: #eaffea;
	border-color: #2c7a2c;
	border-style: solid;
	border-width: 3px;
}

.aspacam-calendar__legend {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 0.4em 1em;
	padding: 0;
	margin: 1em 0;
	font-size: 0.85em;
}

.aspacam-calendar__legend-item {
	padding: 0.2em 0.6em;
	border-radius: 3px;
}

.aspacam-calendar__note {
	font-size: 0.85em;
	color: #444;
}

.aspacam-calendar__detail {
	margin-top: 0.75em;
	padding: 0.6em 0.8em;
	min-height: 1.4em;
	border: 1px solid #ccc;
	background: #fafafa;
	font-size: 0.9em;
}

/* Le bloc imprimable (les prochains mois, tous rendus à la fois en HTML
   statique par Aspacam_Calendar::build_print_html) reste invisible à
   l'écran : seule la navigation interactive d'un mois à la fois compte
   ici. */
.aspacam-calendar__print {
	display: none;
}

/* À l'impression, l'inverse : la navigation au clic n'a aucun sens sur
   papier, ni la zone de détail qui dépend du clic. On montre à la place le
   bloc imprimable, avec ses mois tous visibles en même temps. */
@media print {
	.aspacam-calendar__nav,
	.aspacam-calendar__detail,
	.aspacam-calendar > .aspacam-calendar__month {
		display: none;
	}

	.aspacam-calendar__print {
		display: block;
	}
}
