html, body {
	margin:0px;
	height: 100%;
}

/*
	La typographie du produit, telle qu'elle etait avant la migration.

	Bootstrap 5 a change la base : 16px en police systeme, interligne 1.5, texte
	#212529, la ou Bootstrap 3 posait 14px en Helvetica Neue, interligne 1.42857 et
	texte var(--ink-800). Tout a donc grossi d'un huitieme d'un seul coup : lignes de tableau
	plus hautes, noms de benevoles qui passent a la ligne, colonnes redistribuees.
	La migration ne devait rien changer a l'ecran ; elle a change l'echelle entiere.

	La base revient a 14px sur <html> et non sur <body> : Bootstrap 5 exprime en rem
	les tailles de ses composants (boutons, champs, cellules de tableau), et seule la
	racine les ramene tous ensemble a leurs proportions d'avant. Les points de rupture
	et les largeurs de conteneur restent en px : la grille ne bouge pas.
*/
html {
	font-size: 14px;
}

/*
	Les jetons de style de Volunteo : couleurs, espacements, rayons, typographie.

	Avant eux, une couleur s'ecrivait la ou on en avait besoin. Le violet de la marque
	existait en quatre nuances voisines selon le fichier, le gris du texte secondaire en
	cinq, et une pastille de legende pouvait annoncer un vert que la barre d'a cote
	n'avait plus. Rien ne le signalait : une valeur codee en dur est toujours valide.

	Tout part donc d'ici, et d'ici seulement. Une regle de cette feuille prend un jeton,
	jamais une valeur : c'est ce que verifie tests/Unit/Assets/DesignTokensTest.php, qui
	refuse une couleur ecrite en clair hors de ce bloc. Changer la teinte du produit,
	c'est changer ces quelques lignes.

	Les jetons s'articulent avec Bootstrap plutot que contre lui : les composants
	(boutons, pagination, barre de navigation, menus) se teintent en redefinissant les
	variables --bs-* que Bootstrap 5 lit lui-meme, et non en empilant des selecteurs de
	plus en plus longs pour gagner en specificite.

	Les valeurs viennent de la palette de l'etude ergonomique (docs/ux-audit-2026-09-04.md,
	chapitre 6) : un seul accent derive du violet historique, des neutres legerement
	teintes de ce violet, et des couleurs semantiques qui ne se confondent pas avec lui.
*/
:root {
	/* Marque. Le 900 porte la barre de navigation et le pied de page, le 700 les
	   boutons primaires et l'onglet actif, le 600 les liens, le 300 le focus. */
	--brand-950: #1f1345;
	--brand-900: #2a1a5e;
	--brand-800: #3d2470;
	--brand-700: #4b2f8f;
	--brand-600: #5b3a9e;
	--brand-300: #b9a6e6;
	--brand-200: #b3aac9;
	--brand-100: #dcd7ea;
	--brand-050: #f1edfa;

	/* Texte. Les quatre niveaux tiennent le 4,5:1 sur blanc, seuil AA du texte
	   courant : 12,6 / 12,6 / 7,2 / 4,7. Le plus clair valait #8e8a9c, soit 3,35:1,
	   et le chapitre 6 de l'etude comme le commentaire qui etait ici affirmaient le
	   contraire ; axe-core l'a releve sur le tableau de bord. Il est assombri d'un
	   cran, ce qui ne se voit pas a l'oeil et se voit a la mesure. */
	--ink-900: #1f1b2e;
	--ink-800: #333;
	--ink-600: #5a5568;
	--ink-400: #767284;

	/* Surfaces et bordures. Les neutres tirent vers le violet, sauf ceux du bouton
	   secondaire, qui reprend le gris du btn-default de Bootstrap 3. */
	--surface-0: #fff;
	--surface-1: #f7f6fa;
	--surface-2: #efedf5;
	--border: var(--brand-100);
	--border-neutral-soft: #ddd;
	--border-neutral: #ccc;
	--border-neutral-strong: #adadad;

	/* Sur fond de marque : la barre, le pied de page. */
	--on-brand: #fff;
	--on-brand-muted: #d8d6e6;
	--on-brand-disabled: #9d97b3;

	/* Semantique. Le vert dit « complet », pas « creer » ; le rouge dit le danger et
	   le manque critique, l'orange le partiel. Chacune porte du texte blanc a 4,5:1
	   au moins (5,0 / 5,1 / 6,5 / 6,5), ce que le #ffc107 de bg-warning ne faisait
	   pas. L'orange a ete assombri apres mesure : a #b26a00 il n'etait qu'a 4,24,
	   ce qui passe pour un gros titre et pas pour une pastille de 10 px. La forme
	   -rgb sert les utilitaires de Bootstrap, qui composent leur fond en rgba(). */
	--ok: #1e7f4f;
	--ok-rgb: 30, 127, 79;
	--ok-050: #e3f3ea;
	--warn: #a05f00;
	--warn-rgb: 160, 95, 0;
	--warn-050: #fbeedb;
	--warn-900: #8a5200;
	--danger: #b3261e;
	--danger-rgb: 179, 38, 30;
	--danger-050: #f7dedb;
	--info: #245ea8;
	--info-rgb: 36, 94, 168;

	/* Frise du poste et Planning global : le meme vocabulaire des deux cotes. */
	--shift-ok: var(--ok);
	--shift-partial: var(--warn);
	--shift-missing: var(--danger);
	--shift-available: var(--surface-1);
	--shift-assigned: var(--info);
	--shift-elsewhere: var(--danger-050);

	/* Reperes d'environnement : la barre change de couleur hors production, pour
	   qu'une manipulation de test ne se fasse jamais sur les vraies donnees. */
	--env-dev: #666;
	--env-noprod: #060;
	--hero-fallback: #04c582;

	/* Espacements. L'echelle de Bootstrap (0,25 / 0,5 / 1 / 1,5 / 3 rem) avec le cran
	   de 2 rem qui lui manque, celui des marges ecrites « 2em » dans les gabarits. */
	--space-1: 0.25rem;
	--space-2: 0.5rem;
	--space-3: 1rem;
	--space-4: 1.5rem;
	--space-5: 3rem;
	--space-6: 2rem;

	/* Rayons. */
	--radius-1: 4px;
	--radius-2: 6px;
	--radius-pill: 999px;

	/* Typographie : l'echelle 13 / 14 / 16 / 18 / 20 / 24 / 28 de l'etude. */
	--text-sm: 13px;
	--text-base: 14px;
	--text-md: 16px;
	--text-lg: 18px;
	--text-xl: 20px;
	--text-2xl: 24px;
	--text-3xl: 28px;

	/* Ce que Bootstrap lit de lui-meme. */
	--bs-body-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
	--bs-body-color: var(--ink-800);
	--bs-body-line-height: 1.42857143;
	--bs-link-color: var(--brand-600);
	--bs-link-hover-color: var(--brand-800);
	--bs-border-radius: var(--radius-1);
	/* Le bleu de Bootstrap ne sert plus a rien ici : bg-primary, text-primary,
	   border-primary et les pastilles text-bg-primary prennent la couleur de la
	   marque. Les boutons ont leurs propres regles, plus bas. */
	--bs-primary: var(--brand-700);
	--bs-primary-rgb: 75, 47, 143;
}

/*
	Les utilitaires que Bootstrap 5 ne fournit pas, et dont les gabarits se passaient a
	coups d'attributs style="". Ils suivent son vocabulaire : un cran d'espacement de
	plus (6 = 2rem, celui qui manque entre mt-4 et mt-5, et celui qu'ecrivaient les
	« margin-top:2em » des gabarits), la contrepartie de .clearfix, le pointeur, et la
	coupure de page a l'impression.

	L'echelle typographique est celle de l'etude : 13 / 14 / 16 / 18 / 20 / 24 / 28 px.
	Les gabarits exprimaient leurs tailles en pourcentage du corps (90%, 110%, 130%,
	160%...), ce qui donnait une vingtaine de tailles distinctes a l'ecran, dont aucune
	ne se retrouvait d'une page a l'autre. Le prefixe fs- est celui de Bootstrap, dont
	les crans numerotes (fs-1 a fs-6) servent les titres et ne descendent pas jusqu'au
	corps de texte.
*/
.mt-6 { margin-top: var(--space-6) !important; }
.mb-6 { margin-bottom: var(--space-6) !important; }
.pt-6 { padding-top: var(--space-6) !important; }
.pb-6 { padding-bottom: var(--space-6) !important; }
.clear-none { clear: none !important; }
.clear-both { clear: both !important; }
.cursor-pointer { cursor: pointer; }
.page-break { page-break-before: always; break-before: page; }

.fs-sm { font-size: var(--text-sm) !important; }
.fs-base { font-size: var(--text-base) !important; }
.fs-md { font-size: var(--text-md) !important; }
.fs-lg { font-size: var(--text-lg) !important; }
.fs-xl { font-size: var(--text-xl) !important; }
.fs-2xl { font-size: var(--text-2xl) !important; }
.fs-3xl { font-size: var(--text-3xl) !important; }

/*
	Le bouton neutre des barres d'outils. Bootstrap 3 le rendait blanc a bordure grise
	(btn-default) ; btn-secondary, qui l'a remplace, est gris plein, et toutes les
	barres d'outils de l'application s'en sont trouvees repeintes. Il retrouve son
	apparence : ces trois cent dix boutons viennent tous de btn-default, aucun n'a
	jamais ete voulu gris.
*/
.btn-secondary {
	--bs-btn-color: var(--ink-800);
	--bs-btn-bg: var(--surface-0);
	--bs-btn-border-color: var(--border-neutral);
	--bs-btn-hover-color: var(--ink-800);
	--bs-btn-hover-bg: var(--surface-2);
	--bs-btn-hover-border-color: var(--border-neutral-strong);
	--bs-btn-active-color: var(--ink-800);
	--bs-btn-active-bg: var(--surface-2);
	--bs-btn-active-border-color: var(--border-neutral-strong);
	--bs-btn-disabled-color: var(--ink-800);
	--bs-btn-disabled-bg: var(--surface-0);
	--bs-btn-disabled-border-color: var(--border-neutral);
	--bs-btn-focus-shadow-rgb: 173, 173, 173;
}

/*
	Bootstrap 3 bornait la largeur des tableaux (max-width:100%) ; Bootstrap 5 ne le
	fait plus, et une colonne qui ne se coupe pas pousse la page entiere vers la
	droite. C'est ce qui faisait deborder la page de confidentialite et celle d'aide.
*/
.table {
	max-width: 100%;
}

/*
	La largeur des pages, telle qu'elle etait.

	Bootstrap 3 bornait le conteneur a 750, 970 puis 1170px ; Bootstrap 5 a change ces
	trois valeurs et ajoute un quatrieme palier a 1400px, qui porte le conteneur a
	1320px. Sur un grand ecran, toutes les pages se sont donc elargies de 150px d'un
	coup, et les colonnes des tableaux se sont redistribuees avec elles.

	Les paliers suivent le decalage retenu pour toute la migration : le sm de
	Bootstrap 3 (768px) est le md de Bootstrap 5, et ainsi de suite. Le palier xxl,
	que Bootstrap 3 n'avait pas, garde la largeur du precedent.
*/
@media (min-width: 768px) {
	.container { max-width: 750px; }
}

@media (min-width: 992px) {
	.container { max-width: 970px; }
}

@media (min-width: 1200px) {
	.container { max-width: 1170px; }
}

@media (min-width: 1400px) {
	.container { max-width: 1170px; }
}

/*
	L'objet media, tel que Bootstrap 3 le dessinait.

	Bootstrap 5 a supprime .media, .media-body et .media-object, sans equivalent : ce
	sont des div inertes depuis la migration. Or .media-body portait « width: 10000px »,
	l'astuce qui lui faisait prendre toute la place laissee libre a cote de la vignette.
	C'est elle qui donnait sa largeur a la colonne des noms de la liste des benevoles :
	755px avant, 206px apres, au point que les noms passaient sur deux lignes et que les
	trois autres colonnes se redistribuaient le reste.

	Trois gabarits s'en servent (liste des benevoles, journaux, consommation d'un
	avantage). Les regles reviennent ici, telles quelles ; « float-start » remplace
	« pull-left », d'ou le selecteur.
*/
.media,
.media-body {
	overflow: hidden;
}

.media-body {
	display: table-cell;
	vertical-align: top;
	width: 10000px;
}

.media-object {
	display: block;
}

.media > .float-end {
	padding-left: 10px;
}

.media > .float-start {
	padding-right: 10px;
}

.media-heading {
	margin-top: 0;
	margin-bottom: 5px;
}

/*
	Le formulaire en ligne, tel que Bootstrap 3 le posait.

	Bootstrap 5 a supprime .form-inline sans equivalent nomme : la recette est
	desormais d-flex et les utilitaires d'espacement. Neuf formulaires du site s'en
	servent (recherche d'evenement, actions d'administration, facturation) et leurs
	champs reprenaient toute la largeur depuis la migration, chacun sur sa ligne.

	Seule la regle utile est reprise : un champ y reste en ligne et a la largeur de
	son contenu. Le point de rupture suit le decalage de la migration, le 768px de
	Bootstrap 3 etant celui du md de Bootstrap 5.
*/
@media (min-width: 768px) {
	.form-inline .form-control,
	.form-inline .form-select,
	.form-inline .input-group {
		display: inline-block;
		width: auto;
		vertical-align: middle;
	}

	.form-inline .form-label {
		margin-bottom: 0;
		vertical-align: middle;
	}
}





.header {
	background-color: var(--surface-0);
	text-align: center;
	padding-left:3em;
	padding-right:3em;
	margin: 0px;
}

.header h1 a {
	font-size: 30px;
	color: black;
}

.landing-hero {
	background-image:url("../images/lp/green-volunteers-big-cf13a91344f43f3fa6ef1508f4de9f51.jpg");
	/*background-image:url("../images/lp/orange-Outdoor-Event-Staff-big-b9a176da35732f0ba2c0e8abb67e920b.jpg");*/
	background-size:cover;
	position:absolute;
	top:5em;
	bottom:0;
	left:0;
	right:0;
	z-index:-1000;
	background-color:var(--hero-fallback);
}

.landing-hero--call-to-action {
	margin-top:5em;
	color:var(--ink-800);
	smargin-right:10px;
}

.jumbotron {
	text-align: center;
	background-color: var(--surface-2);
	margin-bottom:50px;
}

.jumbotron .btn {
	padding: 14px 24px;
	font-size: 21px;
}

.featurette-image {
	border: 6px solid var(--border-neutral-soft);
}

.featurette .lead {
	font-size: 120%;
}

.featurette-divider {
	margin: 40px 0; /* Space out the Bootstrap <hr> more */
}

/* Thin out the marketing headings */
.featurette-heading {
	font-weight: 300;
	line-height: 1;
	letter-spacing: -1px;
	padding-bottom: 1em;
}

/*
	Bootstrap 5 a supprime .well, qui encadrait un bloc d'un fond gris et d'une bordure.
	La classe reste utilisee par l'accroche de l'accueil et des pages d'atterrissage, ou
	le fond translucide laisse voir la photo derriere : elle est donc definie ici, en
	entier, plutot que remplacee par une carte qui ne ferait pas la meme chose.
*/
.well {
	background-color: rgba(245, 245, 245, 0.7);
	border: 1px solid rgba(0, 0, 0, 0.08);
	border-radius: 0.375rem;
	padding: 1.25rem;
	margin-bottom: 1.25rem;
}

.landing-hero--call-to-action h1 {
	margin-top:0px;
	font-size:250%;
	font-weight:bold;	
}

/*a {
	outline: 0;
}

:focus {
	outline:0;
}*/

/*
	Le menu des pages publiques (À propos, Fonctionnalités, Tarifs...).

	Bootstrap peint la pastille de l'onglet courant en bleu #337ab7 : une couleur
	qui n'existe nulle part ailleurs dans la charte, et sur laquelle le violet du
	texte devient illisible. On lui substitue un simple soulignement aux couleurs
	de la marque, et le fond gris du survol s'en va avec elle.

	La bordure de 2px est reprise sur le padding bas pour que la hauteur des
	liens ne change pas d'un onglet à l'autre.
*/
a.headerNav {
	color:var(--ink-600);
	border-bottom:2px solid transparent;
	padding-bottom:8px;
}

a.headerNav:hover, a.headerNav:focus, a.headerNav.active {
	color:var(--brand-900);
}

a.headerNav:hover, a.headerNav:focus {
	border-bottom-color:var(--brand-200);
}

a.headerNav.active {
	font-weight:600;
	border-bottom-color:var(--brand-900);
}

/*
	La pastille de Bootstrap se neutralise ici, et pas seulement son fond : sa règle
	« .nav-pills .nav-link.active » pèse trois classes et peint aussi le texte en
	blanc, là où « a.headerNav.active » n'en pèse que deux. L'onglet courant sortait
	donc en blanc sur blanc, et il n'en restait que le soulignement. Les règles
	ci-dessous repassent devant, couleur comprise.
*/
.nav-pills .nav-link.headerNav {
	background-color:transparent;
	border-radius:0;
	color:var(--ink-600);
}

.nav-pills .nav-link.headerNav:hover,
.nav-pills .nav-link.headerNav:focus,
.nav-pills .nav-link.headerNav.active {
	background-color:transparent;
	border-radius:0;
	color:var(--brand-900);
}

button.ui-datepicker-close {
	display: none;
}

/* Wrapper for page content to push down footer */
#wrap {
  min-height: 100%;
  height: auto !important;
  height: 100%;
  /* Negative indent footer by its height */
  margin: 0 auto -3em;
  /* Pad bottom by footer height */
  padding: 0 0 100px;
}

/* Set the fixed height of the footer here */
#footer {
  background-color: var(--brand-900);
  text-align:center;
  padding-bottom:2em;
}

#footer h3 {
	color:var(--surface-0);
	font-size: 120%;
	font-weight:bold;
	padding-bottom:1em;
}

#footer, #footer a {
	color:var(--on-brand-muted);
}

#footer a:hover, #footer a:focus {
	color:var(--surface-0);
}

.list-col {
	padding-top:2em;
}

#footer hr {
	border-color: var(--brand-700);
	width:50%;
	height:1px;
	margin-top: 2em;
	margin-bottom: 2em;
}

#footer p#copyright {
	margin-top:2em;
	smargin-bottom:2em;
}

.FB_UI_Hidden { width: 100px !important; }

/* Liens : violet de marque au lieu du bleu système, états survol/focus explicites */
a {
	text-decoration:none;
	color:var(--brand-600);
}

a:hover, a:focus {
	color:var(--brand-800);
	text-decoration: underline;
}

a:focus-visible, button:focus-visible, .btn:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
	outline: 2px solid var(--brand-300);
	outline-offset: 2px;
}

a.no-underline:hover, a.no-underline:active, a.no-underline:visited, a.no-underline {
	text-decoration: none;
}
/*
	Un lien pose dans une phrase se souligne.

	Le violet de la marque se detache bien du blanc de la page (7,4:1), mais du texte
	noir qui l'entoure, pas du tout : 1,68:1 la ou WCAG 1.4.1 demande 3:1 quand la
	couleur est le seul indice. Un lecteur daltonien, et plus simplement un lecteur
	presse, ne voyait pas qu'il y avait un lien dans le paragraphe. axe-core en
	comptait vingt-quatre, sur les journaux, l'aide, la fiche benevole et les tarifs.

	Le soulignement ne concerne que le texte courant et les cellules de tableau. Ce
	qui est deja reconnaissable a sa forme ne le prend pas : les boutons, les onglets,
	les entrees de menu, la pagination, les cartes cliquables et la barre de
	navigation. La classe .no-underline reste la sortie de secours.
*/
main a, #footer .card a {
	text-decoration: underline;
}

/*
	Ce qui se reconnait deja a sa forme ne se souligne pas : un bouton, un onglet, une
	entree de menu, une pastille de pagination, une carte cliquable, une vignette, le
	fil d'Ariane, la barre d'outils, les crayons d'edition et les listes de navigation
	du pied de page et de l'administration. La classe .no-underline reste la sortie de
	secours pour un cas particulier.
*/
main .btn, main .nav-link, main .dropdown-item, main .dropdown-toggle, main .page-link,
main .breadcrumb a, main .toolbar a, main .subnav a, main .list-group-item,
main .event-header a, main .my-page__tools a, main .reg-steps a,
main .admin-tile, main .admin-nav__link, main .settings-nav__link,
main .card-header a[role="button"], main .media > a, main .poste-progress-bar a,
main a.pbEdit, main a.piEdit, main a.no-underline, main a.circle-avatar,
main a:has(> img), main a:has(> .circle-avatar) {
	text-decoration: none;
}


/*.navbar {
	background:#307;
}*/

/*
	La hauteur de la barre etait figee a 51px, parce que Bootstrap 3 sortait le menu
	replie du flux et lui donnait son propre fond. Bootstrap 5 le laisse dans le flux,
	a l'interieur de la barre : une hauteur fixe le faisait deborder sur la page, en
	gris clair sur blanc et par-dessus les onglets de l'evenement. C'est donc une
	hauteur minimale, et la barre grandit quand le menu se deplie.
*/
#navbar {
	min-height: 51px;
}

/*.demo .navbar {
	background:#646;
}*/

/************************************************/

.dev .navbar {
	background:var(--env-dev);
}

.noProd .navbar {
	background:var(--env-noprod);
}

/*section {
	width:60%;
	margin-left:auto;
	margin-right:auto;
	margin-top:1em;
	margin-bottom:1em;
	background-color:var(--surface-2);
	padding:3em;
	padding-top:1em;
}*/

/*footer {
	background-color: var(--border-neutral-soft);	
	width:100%;
	display:block;
	text-align: center;
	padding:0.5em;
	margin-top:1em;
}*/

#fos_user_login_form {
	max-width:40em;
	margin-left:auto;
	margin-right:auto;
}

/*#fos_user_registration_form, #fos_user_login_form, #equipe_form, #poste_form, #benevole_form {
	width:40em;
	margin-left:auto;
	margin-right:auto;
}


#fos_user_registration_form div label, #fos_user_login_form div label, #equipe_form div label, #poste_form div label, #benevole_form div label {
	width:20em;
	display:block;
	float:left;
}*/

#equipe_form div div ul {
	/*display:block;*/
	
}

.custom_date_widget {
	padding-bottom:2em;
}

.custom_date_input {
	width:auto;
}

/*select {
	display:inline;
	color:red;
	background:red;
}

.row {
	display:inline;
	background:blue;
}
.row {
  margin-left: -15px;
  margin-right: -15px;
}
.row:before,
.row:after {
  content: none;
  display: inline;
}
.row:after {
  clear: none;
}*/

div.error {
	text-align:center;
	color:red;
	margin:1em;
}

input[type="checkbox"].fontawsome { position: absolute; opacity: 0; z-index: -1; }
input[type="checkbox"].fontawsome+span { font: 16pt sans-serif; color: var(--ink-900); }
input[type="checkbox"].fontawsome+span:before { font: 16pt FontAwesome; content: '\00f096'; display: inline-block; width: 16pt; padding: 2px 0 0 3px; margin-right: 0.5em; }
input[type="checkbox"].fontawsome:checked+span:before {content: '\00f046'; color: var(--ink-900);}
input[type="checkbox"].fontawsome:focus+span:before { outline: 1px dotted var(--border-neutral-strong); }
input[type="checkbox"].fontawsome:disabled+span { color: var(--ink-400); }
input[type="checkbox"].fontawsome:not(:disabled)+span:hover:before { text-shadow: 0 1px 2px var(--brand-300); }

.navbar {
	/*z-index:0;*/
}

.flashbag {
	text-align:center;
}

table#benevoles tbody tr td .scrollable {
	overflow-y:auto;
	width:100%;
	max-height:5em;
	padding:0px;
	margin:0px;
}

table#planningPoste tbody tr td {
	vertical-align:middle;
}

/*#ui-datepicker-div {
	z-index:10000;
	background:red;
}*/

.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
.ui-timepicker-div dl { text-align: left; }
.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }
.ui-timepicker-div td { font-size: 90%; }
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }

.ui-timepicker-rtl{ direction: rtl; }
.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
.ui-timepicker-rtl dl dt{ float: right; clear: right; }
.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }

.ui-autocomplete { z-index: 9999 !important; }


/*
	La pagination maison (liste des benevoles, journaux, evenements).

	Le balisage et ces regles venaient de Bootstrap 2 : un <div class="pagination"> qui
	enveloppait un <ul>, et cent quarante lignes recopiees de la feuille de l'epoque pour
	le peindre. Bootstrap 5 fait de .pagination la liste elle-meme, avec .page-item et
	.page-link ; il ne reste donc ici que la mise au centre et la couleur de la marque.
*/
.pagination {
	--bs-pagination-color: var(--brand-900);
	--bs-pagination-hover-color: var(--brand-900);
	--bs-pagination-focus-color: var(--brand-900);
	--bs-pagination-active-bg: var(--brand-700);
	--bs-pagination-active-border-color: var(--brand-700);
}

.pagination-centered {
	justify-content: center;
}

.pagination-right {
	justify-content: flex-end;
}


/* Onglets de l'événement */
.event-header {
	margin: 12px 0 18px;
	padding-bottom: 0;
	border-bottom: 1px solid var(--border);
}

.event-header__title {
	margin: 0 0 6px;
	font-size: 15px;
	color: var(--ink-600);
}

.event-header__name {
	color: var(--brand-900);
	font-weight: 600;
}

.event-header__site {
	margin-left: 6px;
	color: var(--ink-400);
}

.event-header__banner {
	text-align: center;
	margin: 0 0 12px;
}

.event-header__banner img {
	max-height: 150px;
	max-width: 100%;
}

.event-header .subnav {
	margin: 0;
}

.subnav .nav-pills {
	margin-bottom: -1px;
}

.subnav .nav-pills .nav-link {
	color:var(--ink-900);
	border-radius: 4px 4px 0 0;
	padding: 9px 14px;
	border-bottom: 2px solid transparent;
}

.subnav .nav-pills .nav-link:hover, .subnav .nav-pills .nav-link:focus {
	background-color:var(--brand-050);
	color:var(--brand-900);
}

.subnav .nav-pills .nav-link.active, .subnav .nav-pills .nav-link.active:hover, .subnav .nav-pills .nav-link.active:focus {
	background-color:var(--brand-700);
	color:var(--surface-0);
	border-bottom-color:var(--brand-700);
}

/* Titre de page : un seul h1 par page, plus petit que le h1 Bootstrap */
main h1, .page-title {
	font-size: 28px;
	margin: 12px 0 16px;
}

.page-title--with-actions {
	float: left;
	margin-top: 4px;
}

main h2 {
	font-size: 24px;
}

/* Boutons et composants Bootstrap alignés sur la couleur de marque */
.btn-primary {
	background-color:var(--brand-700);
	border-color:var(--brand-800);
}

.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary {
	background-color:var(--brand-800);
	border-color:var(--brand-900);
}

.btn-primary.disabled, .btn-primary[disabled] {
	background-color:var(--brand-700);
	border-color:var(--brand-800);
}

.card.border-info {
	border-color:var(--border) !important;
}

.card.border-info > .card-header {
	background-color:var(--brand-050);
	border-color:var(--border);
	color:var(--brand-900);
}

.breadcrumb-item.active {
	color:var(--ink-600);
}

.breadcrumb > li + li:before {
	color:var(--ink-400);
}

.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
.pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
	background-color:var(--brand-700);
	border-color:var(--brand-700);
}

.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
	background-color:var(--brand-050);
	color:var(--brand-900);
}

/* Les liens dans les tableaux : plus sombres pour éviter les colonnes entièrement colorées */
.table a {
	color:var(--brand-800);
}

/* Tableaux : toujours pleine largeur à l'écran (DataTables force sinon la largeur du contenu) */
table.dataTable {
	width:100% !important;
	margin-left:0 !important;
	margin-right:0 !important;
	/* DataTables forces "separate": the borders then add 2px and every .table-responsive gets a scrollbar */
	border-collapse:collapse !important;
}

.table-responsive {
	border:0;
	/* collapsed borders overflow the table box by half a pixel on each side */
	padding:0 1px;
}

.volunteer-avatar {
	width:36px;
	height:36px;
	margin-right:10px;
}

.assigned-positions {
	margin:0;
}

.inline-form {
	display:inline;
}

.dropdown-menu > li > .dropdown-form {
	margin:0;
}

.dropdown-menu > li > .dropdown-form > button {
	display:block;
	width:100%;
	text-align:left;
	padding:3px 20px;
	border:0;
	background:none;
	color:var(--ink-800);
	white-space:nowrap;
	line-height:1.42857143;
}

.dropdown-menu > li > .dropdown-form > button:hover, .dropdown-menu > li > .dropdown-form > button:focus {
	background-color:var(--brand-050);
	color:var(--brand-900);
}

.inline-form + .inline-form {
	margin-left:4px;
}

/* Dates : champs natifs compacts */
.date-range { display:flex; flex-wrap:wrap; gap:16px 32px; justify-content:center; margin:8px auto 16px; max-width:45em; }
.date-field { flex:1 1 220px; max-width:20em; }
.date-field .control-label { display:block; margin-bottom:4px; }
.date-shortcuts { margin:4px 0 0; font-size:13px; }
.date-shortcuts .btn-link { padding:0 5px; }

/* Barre d'outils : une action primaire, des secondaires, un menu « Plus » */
.toolbar { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.toolbar .dropdown, .toolbar .btn-group { display:inline-block !important; }
.toolbar .float-end { float:none !important; margin-left:auto; }
.toolbar .clearfix, .toolbar > script, .toolbar > style { display:none !important; }

/* Créer / ajouter = action primaire, dans la couleur de marque */
.btn-success { --bs-btn-bg:var(--brand-700); --bs-btn-border-color:var(--brand-800); --bs-btn-hover-bg:var(--brand-800); --bs-btn-hover-border-color:var(--brand-900); --bs-btn-active-bg:var(--brand-900); --bs-btn-active-border-color:var(--brand-900); --bs-btn-disabled-bg:var(--brand-700); --bs-btn-disabled-border-color:var(--brand-800); }

/*
	Frise du poste : la legende et les barres prennent leurs couleurs au meme endroit.

	Elles ne les y prenaient pas. Les six pastilles de la legende portaient les couleurs
	de Bootstrap 3 (#5cb85c, #f0ad4e, #d9534f, #5bc0de) ecrites ici en clair, et les
	barres les classes bg-success / bg-warning / bg-danger / bg-info, que Bootstrap 5
	peint autrement depuis la migration : la legende annoncait un vert, la barre d'a
	cote en affichait un autre, et le jaune vif de bg-warning ne portait plus de texte
	blanc lisible. Les deux viennent maintenant des jetons semantiques.

	Les barres se teignent par --bs-*-rgb plutot que par une regle de plus : les
	utilitaires de fond de Bootstrap composent leur couleur en rgba(var(--bs-…-rgb)),
	et sont marques !important, qu'aucun selecteur ne peut donc simplement surcharger.
	Redefinir la variable dans la frise les repeint sans lutte de specificite, et ne
	touche a aucun autre bg-success de l'application.
*/
.timeline-legend { margin:12px 0 4px; font-size:var(--text-sm); color:var(--ink-600); }
.timeline-legend .list-inline-item { margin-right:14px; }
.timeline-legend .swatch { display:inline-block; width:14px; height:14px; border-radius:2px; vertical-align:-2px; margin-right:4px; border:1px solid rgba(0,0,0,.15); }
.swatch-need-ok { background:var(--shift-ok); }
.swatch-need-partial { background:var(--shift-partial); }
.swatch-need-missing { background:var(--shift-missing); }
.swatch-available { background:var(--shift-available); }
.swatch-assigned { background:var(--shift-assigned); }
.swatch-elsewhere { background:var(--shift-elsewhere); }

.progress.pb, .progress.besoin, .progress {
	--bs-success-rgb: var(--ok-rgb);
	--bs-warning-rgb: var(--warn-rgb);
	--bs-danger-rgb: var(--danger-rgb);
	--bs-info-rgb: var(--info-rgb);
}

/* La barre de l'amplitude du poste vit dans un .progress nu : elle aussi dit une
   affectation, elle aussi prend le bleu de la charte. */
.progress .progress-bar.bg-info { background-color:var(--info) !important; }

/* Les deux etats que Bootstrap ne nomme pas : le creneau libre et le benevole deja
   pris ailleurs. Ils portaient leur couleur en attribut style, donc hors de toute
   feuille et hors de portee des jetons. */
.poste-progress-bar-available { background:var(--shift-available) !important; color:var(--ink-600); }
.poste-progress-bar-elsewhere { background:var(--shift-elsewhere) !important; color:var(--ink-600); cursor:not-allowed; }
.poste-progress-bar-available { overflow:hidden; box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1); }
/* L'etat qu'aucune des six branches ne nomme : il ne devrait pas s'afficher, et
   quand il s'affiche il faut le voir. */
.poste-progress-bar-unknown { background:var(--ink-900) !important; color:var(--surface-0); }
.poste-progress-bar { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Le libelle cliquable d'un creneau : il portait ses trois declarations en attribut
   style, dans une chaine Twig, ou aucun jeton ne pouvait l'atteindre. */
.poste-progress-bar .slot-label { display:block; color:var(--surface-0); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.poste-progress-bar .dropdown-toggle::after { margin-left:4px; }
/*
	Une barre qui porte le menu d'un creneau ne se rogne pas : le menu vit a
	l'interieur d'elle, et elle ne fait que quatorze pixels de haut. L'overflow:hidden
	pose sur toutes les barres le coupait donc entierement, et un clic sur le libelle
	n'affichait plus rien. Le libelle, lui, garde ses points de suspension : ils
	viennent de .slot-label, juste au-dessus.
*/
.poste-progress-bar:has(> .dropdown) { overflow:visible; }
/*
	Le creneau cliquable de la frise. Depuis Bootstrap 5, .progress est une boite
	flexible : ses enfants directs sont ses elements, et le lien en est un. Il porte
	donc la largeur du creneau (le gabarit la lui pose en pourcentage) et la barre le
	remplit, sinon le pourcentage se calcule sur le lien, lui-meme dimensionne par la
	longueur de son libelle : le creneau s'etire alors a la mesure de son texte, la
	ligne du benevole ne s'aligne plus sur celle des besoins, et la somme des creneaux
	deborde du cadre.

	min-width:0 est ce qui autorise le retrecissement : sans lui, un element flexible
	ne descend jamais sous la largeur de son contenu, et c'est la frise entiere qui
	imposait sa largeur a la page.
*/
.progress > .poste-progress-link {
	display:block; min-width:0; overflow:hidden;
	text-decoration:none; color:inherit;
}
.progress > .poste-progress-link > .progress-bar { max-width:100%; }

/*
	Le trace d'un creneau sur la ligne des besoins d'un poste.

	La frise n'est pas un calendrier tout fait : le fantome qui suit la souris pendant
	le glisser, et le petit panneau qui demande ensuite le nombre de benevoles, se
	placent en pourcentage sur la ligne, qui vaut exactement la duree du poste. Ils se
	posent donc sur une ligne positionnee, d'ou le position:relative.
*/
.progress.besoin { position:relative; }
.progress.besoin[data-tracable] .poste-progress-bar-available { cursor:crosshair; }
.progress.besoin[data-tracable] .poste-progress-bar[data-besoin] { cursor:move; }
/*
	Le fantome est opaque : translucide, il laissait lire au travers le libelle de la
	plage libre qu'il recouvre, et les deux textes se superposaient au point qu'on ne
	lisait plus l'horaire qu'on est en train de tracer.
*/
.frise-fantome {
	position:absolute; top:0; bottom:0; z-index:3;
	background:var(--brand-600);
	border:1px solid var(--brand-700);
	border-radius:2px; pointer-events:none;
	font-size:0.75rem; line-height:1.4; color:var(--on-brand);
	white-space:nowrap; overflow:hidden; padding:0 0.25rem;
}
.frise-panneau {
	position:absolute; top:100%; z-index:20; margin-top:0.25rem;
	min-width:13rem; text-align:start;
	box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
.frise-attente { opacity:0.6; }

/*
	La frise dispose ses colonnes elle-meme, en disposition fixe.

	En disposition automatique, une table s'elargit jusqu'a la plus longue de ses
	cellules : les libelles de creneau et les noms des benevoles lui imposaient environ
	930 px, qu'il reste ou non de la place, et la frise debordait de son cadre. Les
	largeurs sont donc declarees ici, une fois, et la table s'en tient a la largeur
	qu'on lui donne.
*/
.timeline-table { table-layout:fixed; }
.timeline-col-photo { width:44px; }
.timeline-col-mail  { width:34px; }
.timeline-col-bars  { width:78%; }

/*
	Les lignes de la frise respirent.

	Bootstrap 3 donnait a .progress une hauteur de 20 px et une marge basse de 20 px :
	une ligne de benevole occupait 51 px, et 31 px separaient deux barres. Bootstrap 5
	met la hauteur a 1 rem et supprime la marge : la ligne est tombee a 28 px et l'ecart
	entre deux barres a 14 px. Sur un poste de treize benevoles, la frise passait de 765
	a 414 px, et l'oeil ne suivait plus une ligne jusqu'au bout.

	La marge revient, a 12 px et non a 20. La ligne remonte a 34 px et l'ecart a 20 px :
	la frise reste plus compacte qu'en Bootstrap 3, et chaque benevole se lit. Noter que
	la marge ne rend pas tout ce qu'on lui donne : la cellule voisine porte le nom du
	benevole sur une ligne de 21 px, et la barre plus sa marge ne creusent la rangee
	qu'au-dela de ces 21 px.

	Elle est posee sur les .progress qui portent un creneau de frise, donc sur la page
	d'un poste comme sur la liste des benevoles disponibles, et pas sur une barre de
	progression ordinaire.

	A l'ecran seulement : a l'impression, le planning tient a sa densite actuelle.
*/
@media screen {
	#planningPoste .progress,
	.progress:has(> .poste-progress-bar),
	.progress:has(> .poste-progress-link) {
		margin-bottom:12px;
	}
}

/* Frise du poste : sur téléphone, elle défile dans son cadre sans élargir la page */
@media (max-width: 767px) { .timeline-scroll > #planningPoste { min-width:720px; } }
/*
	Au-dessus du telephone, le cadre ne defile pas et ne doit donc rien rogner : la
	classe table-responsive vaut overflow-x:auto, et un debordement regle sur un seul
	axe rogne aussi l'autre. Le cadre fait quarante-huit pixels de haut, le menu d'un
	creneau en fait soixante-dix et le panneau du trace cent treize : les deux
	sortaient de l'ecran. Le tableau est en disposition fixe a 100 %, il ne peut pas
	deborder de son cadre.
*/
@media (min-width: 768px) { .timeline-scroll { overflow:visible; } }

/* Tableau de bord */
.dashboard-alert { display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center; justify-content:space-between; text-align:left; }

/*
	La liste de mise en place et les cadres du dessous (équipes, bénévoles, compte
	à rebours) se touchaient : une « .card » de Bootstrap 5 n'a plus de marge basse,
	contrairement à l'alerte qui la précède, et les deux bordures se rejoignaient en
	un seul trait. La marge est celle de l'alerte, pour que le rythme de la page ne
	change pas selon qu'elle est affichée ou non.
*/
.setup-checklist { margin-bottom:16px; }
.setup-checklist .list-group-item .fa { margin-right:8px; }
.setup-checklist .list-group-item.is-done { color:var(--ink-400); }

/* Partager */
.share-extras { margin-top:24px; }
.share-qr { background:var(--surface-0); padding:6px; border:1px solid var(--border); border-radius:4px; }

/* Mobile : onglets défilants, boutons plus faciles à toucher */
@media (max-width: 767px) {
	.subnav .nav-pills { flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:2px; }
	.subnav .nav-pills .nav-item { flex:0 0 auto; }
	.subnav .nav-pills .nav-link { white-space:nowrap; }
	.toolbar .btn, .dropdown-menu > li > a, .dropdown-menu > li > .dropdown-form > button { min-height:40px; line-height:26px; }
	.date-range { gap:12px; }
	.date-field { flex-basis:100%; max-width:none; }
}

.share-link {
	display:flex;
	gap:8px;
	justify-content:center;
	align-items:center;
	flex-wrap:wrap;
	margin:12px 0;
}

.share-link input {
	max-width:32em;
	font-size:16px;
}

.poste-progress-bar {
	/*padding-left:1em;
	padding-right:1em;*/
}

/*
	Les pastilles d'etat : taux de remplissage, effectifs, statuts.

	Bootstrap 5 les peint avec text-bg-success et compagnie, c'est-a-dire avec ses
	propres couleurs : un vert et surtout un jaune (#ffc107) qui ne sont pas ceux de la
	charte, et qui ne sont pas non plus ceux de la frise du poste, laquelle dit pourtant
	la meme chose (couvert, partiel, non couvert). Elles prennent les jetons semantiques,
	et du texte blanc, qui tient le 4,5:1 sur les quatre.

	Le !important et le double selecteur ne sont pas une coquetterie : les utilitaires
	text-bg-* de Bootstrap sont eux-memes marques !important.
*/
/*
	Bootstrap 5 a retire le fond par defaut de .badge tout en lui laissant sa couleur
	de texte blanche : une pastille sans classe de fond s'affiche donc en blanc sur
	blanc, invisible depuis la migration. C'est le cas du compteur de la liste de mise
	en place du tableau de bord, releve par axe-core (contraste 1,06:1). Celles qui
	nomment leur fond ne sont pas touchees.
*/
.badge:not([class*="text-bg-"]):not([class*="bg-"]) { background-color: var(--ink-600); }

.badge.text-bg-success { background-color:var(--ok) !important; color:var(--surface-0) !important; }
.badge.text-bg-warning { background-color:var(--warn) !important; color:var(--surface-0) !important; }
.badge.text-bg-danger { background-color:var(--danger) !important; color:var(--surface-0) !important; }
.badge.text-bg-info { background-color:var(--info) !important; color:var(--surface-0) !important; }
.badge.text-bg-secondary { background-color:var(--ink-600) !important; color:var(--surface-0) !important; }

button.badge {
  border:0px;
  color:var(--surface-0) !important;
}

.badge-danger {
  background-color: var(--danger);
}

.badge-warning {
  background-color: var(--warn);
}

.badge-success {
  background-color: var(--ok);
}

.badge-info {
  background-color: var(--info);
}

.badge-inverse {
  background-color: var(--ink-800);
}

div.profilePart {
	padding:1em;
}

div.profilePart:hover {
	background-color:var(--surface-1);
}

tr.pbName .pbEdit, tr.piName .piEdit {
	color: var(--ink-400);
}

#infosBenevoleEdit, #desiredTeamsEdit, #availabilitiesEdit, div.profilePart #pictureEdit, tr.pbName .pbEdit, tr.piName .piEdit {
	/*visibility:hidden;*/
}

.defaultContactEdit {
	visibility:hidden;
}

div.profilePart:hover #infosBenevoleEdit, div.profilePart:hover #desiredTeamsEdit, div.profilePart:hover #availabilitiesEdit, div.profilePart:hover #pictureEdit, tr.pbName:hover .pbEdit, tr.piName:hover .piEdit, tr:hover .defaultContactEdit {
	visibility:visible;
}

div.circle-avatar{
	/* make it responsive */
	max-width: 100%;
	width:100%;
	height:auto;
	display:block;
	/* div height to be the same as width*/
	padding-top:100%;
	
	/* make it a circle */
	border-radius:50%;
	
	/* Centering on image`s center*/
	background-position-y: center;
	background-position-x: center;
	background-repeat: no-repeat;
	
	/* it makes the clue thing, takes smaller dimension to fill div */
	background-size: cover;
	
	/* it is optional, for making this div centered in parent*/
	margin: 0 auto;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
}


.table-no-border td {
	    border-top: none !important;
}

img.grayscale {
  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 3.5+ */
  filter: gray; /* IE6-9 */
  -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
}

img.grayscale:hover {
  filter: none;
  -webkit-filter: grayscale(0%);
}

@media screen {
	.poste-progress-bar {
		border-right:1px solid white;
	}
}

@media print {
	 body, .container {
        margin: 0;
        padding: 0;
        width:100% !important;
	 }
	.subnav, .btn {
		display:none !important;
	}
	
	 a:after {
	    content: "" !important;
	 }
	 
	.poste-progress-bar {
	}
	 
	.progress.pb .poste-progress-bar.progress-bar-info.valid, .progress.besoin .poste-progress-bar :not(.poste-progress-bar-available) {
		-webkit-print-color-adjust: exact;
		sbackground-color: var(--surface-2) !important;
		border:1px solid var(--border-neutral-strong);
	}
	
	.progress.pb, .progress.besoin {
		overflow:hidden;
	}
	
	#tableEquipes, #tablePostes {
		width:100% !important;
	}
	/*table tbody tr {
    	page-break-before: always;
		page-break-inside: avoid;
		position:relative;
		-webkit-region-break-inside: avoid;
	}*/
	
}

/* ------------------------------------------------------------------------
   Le blog : typographie de lecture.

   Le reste du site est une application, et son corps de texte à 14px/20px
   convient à des tableaux et à des formulaires. Un article de mille mots lu
   sur un téléphone, non : c'est la taille et l'interligne qui décident si la
   page est lue ou abandonnée. Ces règles ne s'appliquent qu'à ce que porte la
   classe .blog-article, donc à rien d'autre que le blog.
   ------------------------------------------------------------------------ */

.blog-article {
	/* Une ligne de prose au-delà d'une centaine de caractères se relit mal :
	   la colonne du blog est bornée, et centrée sur les grands écrans.

	   Elle n'est pas posée sur une colonne Bootstrap : les colonnes de la
	   version 3 sont flottantes, et un flottant ignore les marges automatiques.
	   La colonne restait collée à gauche avec cinq cents pixels de vide à
	   droite. C'est un bloc ordinaire dans le conteneur. */
	max-width: 44em;
	margin-left: auto;
	margin-right: auto;
}

.blog-article p,
.blog-article li {
	font-size: 16px;
	line-height: 1.65;
}

.blog-article p.lead {
	font-size: 19px;
	line-height: 1.5;
}

.blog-article h1,
.blog-article h2,
.blog-article h3 {
	line-height: 1.25;
}

.blog-article h2 {
	margin-top: 1.6em;
}

.blog-article li {
	margin-bottom: 0.4em;
}

/* L'encart d'appel à l'action : trois boutons côte à côte tiennent sur un
   écran large et se répartissent n'importe comment sur un téléphone, avec une
   hauteur de 34px sous la cible tactile usuelle. Sur petit écran, ils
   s'empilent en pleine largeur. */
@media (max-width: 767px) {
	.blog-article .well .btn {
		display: block;
		width: 100%;
		margin: 0 0 0.6em 0;
		padding-top: 11px;
		padding-bottom: 11px;
	}

	.blog-article .well .btn:last-child {
		margin-bottom: 0;
	}
}

/* La date de publication : grise, un cran sous le texte courant, mais pas
   12,6px : c'est une information que le lecteur cherche sur un article
   réglementaire, pas une mention légale. */
.blog-article .blog-date {
	color: var(--ink-400);
	font-size: 14px;
	margin-bottom: 0.2em;
}

/*
	L'en-tete des pages publiques sur un telephone.

	Le logo etait dimensionne en ligne (height:4em) et .header gardait ses 3 em de marge
	laterale quelle que soit la largeur : sur un ecran de 390 px, l'en-tete occupait 355 des
	664 px du premier ecran, soit plus de la moitie avant que le visiteur ne voie l'accroche.
	Le logo redescend donc, et les marges avec lui, en dessous du point de rupture de
	Bootstrap. La taille passe du gabarit a la feuille de style au passage, pour qu'une
	requete de media puisse la reprendre.
*/
.header-logo {
	height: 4em;
	width: auto;
	margin-top: 0.5em;
}

@media (max-width: 767px) {
	.header {
		padding-left: 1em;
		padding-right: 1em;
	}

	.header-logo {
		height: 2.6em;
		margin-top: 0.25em;
	}
}

/* Achat de credits : le nombre saisi et le montant calcule. */
.credits-count { width:5em; }
.credits-amount { font-weight:bold; }

/* Page Tarifs : le prix et la prime offerte. Le vert et le mauve de leurs attributs
   style ne tenaient ni l'un ni l'autre le seuil AA ; ils prennent les jetons. */
.plan-price { font-size:220%; font-weight:bold; color:var(--ok); margin:0.5em 0; }
.plan-bonus { color:var(--brand-600); }

/* Parcours d'inscription : indicateur d'étapes et écrans successifs */
.reg-steps { display:flex; flex-wrap:wrap; gap:6px 0; list-style:none; margin:0 0 20px; padding:0; counter-reset:step; }
.reg-step { display:flex; align-items:center; gap:8px; flex:1 1 120px; position:relative; padding:6px 12px 6px 0; color:var(--ink-400); font-size:14px; }
.reg-step:not(:last-child)::after { content:""; flex:1; height:2px; background:var(--border); margin-left:4px; }
.reg-step__num { display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:50%; border:2px solid var(--border); background:var(--surface-0); font-weight:600; font-size:13px; flex:0 0 auto; }
.reg-step.is-current { color:var(--brand-900); font-weight:600; }
.reg-step.is-current .reg-step__num { border-color:var(--brand-700); background:var(--brand-700); color:var(--surface-0); }
.reg-step.is-done { color:var(--ink-600); }
.reg-step.is-done .reg-step__num { border-color:var(--ok); background:var(--ok-050); color:var(--ok); }
.reg-step.is-done::after { background:var(--ok); }
.reg-step__label { white-space:nowrap; }
.reg-panel { border:0; padding:0; margin:0 auto; max-width:44em; }
.reg-nav { display:flex; justify-content:space-between; gap:12px; margin:24px 0 8px; }
.reg-nav > :only-child { margin-left:auto; }
@media (max-width: 767px) { .reg-step { flex-basis:auto; } .reg-step__label { display:none; } .reg-step.is-current .reg-step__label { display:inline; } }

/* Page Configuration : sections ouvertes, navigation ancrée, formulaire découpé */
.settings-nav { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 16px; }
.settings-nav__link { display:inline-block; padding:4px 12px; border:1px solid var(--border); border-radius:999px; color:var(--brand-800); text-decoration:none; font-size:14px; background:var(--surface-0); }
.settings-nav__link:hover, .settings-nav__link:focus { background:var(--brand-050); text-decoration:none; }
.settings-nav:empty { display:none; }
.settings-sections > .card { margin-bottom:16px; scroll-margin-top:70px; }
.settings-sections .card-header { display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; }
.settings-sections .card-header .card-title { margin:0; font-size:18px; }
.settings-sections .card-header .card-title a { color:var(--brand-900); text-decoration:none; }
.settings-summary { font-weight:500; }
.settings-fieldset { border:1px solid var(--border); border-radius:6px; padding:16px 20px 4px; margin:0 0 20px; }
.settings-fieldset > legend { float:none; width:auto; padding:0 8px; margin:0 0 8px -8px; font-size:16px; font-weight:600; color:var(--brand-900); }
.form-actions { margin-top:16px; display:flex; gap:8px; justify-content:center; flex-wrap:wrap; }

/* Ma page de bénévole : cartes */
.my-page__section { margin-bottom:28px; }
.my-page__heading { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; }
.my-page__title { font-size:20px; margin:0 0 12px; }
.my-page__tools { display:flex; gap:6px; flex-wrap:wrap; }
.my-page__card { margin-bottom:16px; }
.my-page__card .card-header { font-weight:600; color:var(--brand-900); background:var(--brand-050); }
.shift-card { margin-bottom:12px; border-color:var(--border); }
.shift-card--next { border-color:var(--brand-700); box-shadow:0 2px 8px rgba(75,47,143,.15); }
.shift-card--past { opacity:.7; }
.shift-card__when { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 12px; margin-bottom:4px; color:var(--ink-600); font-size:14px; }
.shift-card__day { font-weight:600; color:var(--brand-900); }
.shift-card__hours { font-variant-numeric:tabular-nums; font-size:16px; color:var(--ink-900); }
.shift-card__title { font-size:18px; margin:0 0 6px; }
.shift-card__title small { display:block; font-size:13px; margin-top:2px; }
.shift-card__desc, .shift-card__meta { margin:0 0 4px; font-size:14px; }
.shift-card__actions { margin:8px 0 0; font-size:14px; }

/* Téléphone : tableaux en cartes, barres d'outils repliées */
.toolbar-toggle { display:none; }
@media (max-width: 767px) {
	table.table-cards thead { display:none; }
	table.table-cards, table.table-cards tbody, table.table-cards tr, table.table-cards td { display:block; width:100%; box-sizing:border-box; }
	table.table-cards tr { border:1px solid var(--border); border-radius:6px; margin-bottom:10px; padding:6px 12px; background:var(--surface-0); }
	table.table-cards.table-striped > tbody > tr:nth-of-type(odd) > * { --bs-table-accent-bg:transparent; }
	table.table-cards td { display:flex; gap:12px; justify-content:space-between; align-items:baseline; border:0; padding:4px 0; text-align:right; }
	table.table-cards td::before { content:attr(data-label); font-weight:600; color:var(--ink-600); text-align:left; flex:0 0 42%; }
	table.table-cards td[data-label=""]::before { display:none; }
	table.table-cards td:empty { display:none; }
	table.table-cards .media, table.table-cards .assigned-positions { text-align:left; }
	.table-responsive:has(> table.table-cards), .table-responsive:has(> .dataTables_wrapper table.table-cards) { overflow:visible; }
	/* .toolbar-primary is set by the layout script on the children that hold the primary action */
	.toolbar.is-collapsible > *:not(.toolbar-primary):not(.toolbar-toggle) { display:none !important; }
	.toolbar.is-collapsible.is-open > *:not(.toolbar-primary):not(.toolbar-toggle):not(script):not(style) { display:inline-block !important; }
	.toolbar.is-collapsible.is-open > .toolbar-toggle { margin-left:0; }
	.toolbar-toggle { display:inline-block; margin-left:auto; }
	.toolbar > .btn-group.float-end { display:flex; gap:6px; }
	.toolbar > .btn-group.float-end > .btn { border-radius:var(--bs-btn-border-radius); }
}

/*
	Le graphique en aires (public/assets/js/area-chart.js), qui remplace Morris.

	Il n'a pas de couleurs a lui : il dessine des formes, la feuille les peint. La
	courbe et son aire prennent le violet de la marque, la grille et les graduations
	les neutres du texte secondaire.
*/
.chart { min-height: 220px; }
.chart__svg { display:block; width:100%; height:auto; }
.chart__grid { stroke:var(--border); stroke-width:1; }
.chart__axis { fill:var(--ink-400); font-size:11px; font-variant-numeric:tabular-nums; }
.chart__area { fill:var(--brand-700); fill-opacity:.12; stroke:none; }
.chart__line { fill:none; stroke:var(--brand-700); stroke-width:2; stroke-linejoin:round; }
.chart__dot { fill:var(--surface-0); stroke:var(--brand-700); stroke-width:2; }
.chart__dot:hover { fill:var(--brand-700); }
.chart__empty { display:flex; align-items:center; justify-content:center; min-height:180px; margin:0; color:var(--ink-400); font-size:var(--text-sm); }

/*
	Etat vide (Component/emptyState.html.twig) : ce qu'un ecran affiche quand il n'a
	rien a montrer. Un tableau a en-tetes sans ligne n'apprend rien au lecteur ; un
	etat vide dit qu'il n'y a rien, pourquoi, et quoi faire ensuite.
*/
.empty-state { text-align:center; padding:32px 16px; margin:0 0 16px; border:1px dashed var(--border); border-radius:var(--radius-2); background:var(--surface-1); color:var(--ink-600); }
.empty-state__icon { display:block; margin-bottom:8px; font-size:var(--text-3xl); color:var(--brand-300); }
.empty-state__title { margin:0 0 4px; font-size:var(--text-md); font-weight:600; color:var(--ink-900); }
.empty-state__text { margin:0 0 12px; }

/* Fiche bénévole */
.profile { margin-top:8px; }
.profile__picture { max-width:220px; margin:0 auto 16px; }
.profile__data > p { margin:0 0 6px; }
.list-filters { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }

/* Tableau de bord d'administration */
.admin-nav { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 20px; }
.admin-nav__link { display:inline-block; padding:6px 12px; border:1px solid var(--border); border-radius:6px; background:var(--surface-0); color:var(--brand-900); text-decoration:none; font-size:14px; }
.admin-nav__link:hover, .admin-nav__link:focus { background:var(--brand-050); text-decoration:none; color:var(--brand-900); }
.admin-dashboard { margin-bottom:8px; }
.admin-card { margin-bottom:16px; }
.admin-card .card-header { font-weight:600; color:var(--brand-900); background:var(--brand-050); }
.admin-card--todo .card-header { background:var(--warn-050); color:var(--warn-900); }
.admin-tiles { margin-bottom:0; }
.admin-tile { display:flex; flex-direction:column; justify-content:center; min-height:96px; padding:12px 14px; margin-bottom:16px; border:1px solid var(--border); border-radius:6px; background:var(--surface-0); color:inherit; text-decoration:none; }
a.admin-tile:hover { border-color:var(--brand-700); text-decoration:none; color:inherit; }
.admin-tile__value { font-size:28px; font-weight:700; color:var(--brand-900); line-height:1.1; font-variant-numeric:tabular-nums; }
.admin-tile__label { font-size:13px; color:var(--ink-600); margin-top:4px; }

/* ------------------------------------------------------------------------
   La barre de navigation de l'application.

   Elle avait sa propre feuille, navbar.css, chargee juste avant celle-ci : deux
   fichiers, deux requetes et deux endroits ou chercher la couleur de la barre.
   Ses regles sont ici, telles quelles, avec les jetons pour couleurs.
   ------------------------------------------------------------------------ */

.navbar {
	--bs-navbar-color: var(--on-brand-muted);
	--bs-navbar-hover-color: var(--surface-0);
	--bs-navbar-active-color: var(--surface-0);
	--bs-navbar-brand-color: var(--on-brand-muted);
	--bs-navbar-brand-hover-color: var(--surface-0);
	--bs-navbar-disabled-color: var(--on-brand-disabled);
	--bs-navbar-toggler-border-color: var(--brand-950);
	--bs-navbar-toggler-focus-width: 0.15rem;

	background-color: var(--brand-900);
	border-bottom: 1px solid var(--brand-950);
}

.navbar .nav-link.active,
.navbar .nav-item.show > .nav-link {
	background-color: var(--brand-950);
	border-radius: 0.25rem;
}

.navbar .navbar-toggler:hover,
.navbar .navbar-toggler:focus {
	background-color: var(--brand-950);
}

.navbar .dropdown-menu {
	--bs-dropdown-link-active-bg: var(--brand-900);
}

/*
	Sous le point de repli, le menu deroulant s'affiche dans le corps de la barre :
	il reprend donc ses couleurs plutot que le fond blanc du menu flottant.
*/
@media (max-width: 991.98px) {
	.navbar .dropdown-menu {
		--bs-dropdown-bg: transparent;
		--bs-dropdown-link-color: var(--on-brand-muted);
		--bs-dropdown-link-hover-color: var(--surface-0);
		--bs-dropdown-link-hover-bg: var(--brand-950);
		--bs-dropdown-border-color: transparent;
	}
}
