/* +--------------------------------------------------------------------------+
// ? 2002-2013 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: list_ui.css,v 1.3.2.4 2026/10/23 09:11:37 dgoron Exp $ */

/* ---------------------------------------------------------------------------*/

/*                      Gestion des listes                                    */

/* ---------------------------------------------------------------------------*/

/*
 * Ordre des sections : celui de l'affichage d'une liste (filtres et tris,
 * rappel, elements, navigation), puis les personnalisations par type d'objets.
 */

/* ---------------------------------------------------------------------------*/

/*                      Filtres et tris                                       */

/* ---------------------------------------------------------------------------*/

/*
 * Cadre des filtres et tris : structure commune, habillage par variables CSS.
 * Un theme les redefinit sur :root, sans dupliquer les regles :
 *   --list-ui-search-bg               fond du cadre
 *   --list-ui-search-radius           arrondi du cadre
 *   --list-ui-search-title-color      couleur de la legende (--c-primary du theme a defaut)
 *   --list-ui-search-title-font       police de la legende
 *   --list-ui-search-title-transform  casse de la legende
 *   --list-ui-search-separator        trait sous la legende
 *   --list-ui-placeholder-color       texte d'exemple des champs : contraste
 *                                     4.5:1 minimum sur le fond des champs et
 *                                     sur celui du cadre (RGAA 3.2)
 */

.list_ui_search_content {
	display: block;
	margin-top: 5px;
	margin-left: 25px;
}

.list_ui_search_fieldset {
	background-color: var(--list-ui-search-bg, #f6f6f6);
	border-radius: var(--list-ui-search-radius, 3px);
	padding: 15px 20px 20px;
	margin: 10px 0 20px;
}

/* Legende dans le cadre : flottante, sinon le fond demarre a mi-hauteur */
.list_ui_search_fieldset > legend {
	float: left;
	width: 100%;
	margin: 0 0 10px;
	padding: 0 0 8px;
	line-height: normal;
	border: 0;
	border-bottom: 1px solid var(--list-ui-search-separator, #dddddd);
	font-family: var(--list-ui-search-title-font, inherit);
	text-transform: var(--list-ui-search-title-transform, none);
	color: var(--list-ui-search-title-color, var(--c-primary, inherit));
}

.list_ui_search_fieldset .list_ui_search_content {
	clear: both;
	margin-left: 0;
}

.list_ui_search_fieldset ::placeholder {
	color: var(--list-ui-placeholder-color, #5f6b75);
	opacity: 1;
}

/* Un seul filtre et un tri : deux moities d'une meme ligne, alignees sur le bas
   des champs ; elles s'empilent sous 15em de large chacune */
.list_ui_search_content_inline {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 0.5em 2%;
}

.list_ui_search_content_inline > .row {
	flex: 1 1 49%;
	min-width: 15em;
	clear: none;
}

/* Tri a cote d'un filtre : libelle au-dessus de la liste, comme une etiquette */
.list_ui_search_content_order_stacked .list_ui_applied_sort_label_text {
	display: block;
}

/* Texte d'aide d'un filtre (ex. : envoi automatique au choix d'une valeur),
   relie au champ par aria-describedby ; affiche sous le champ */
.list_ui_search_filter_help {
	display: block;
	margin-top: 2px;
	font-size: 0.9em;
}

/* Groupes d'options d'un filtre en cases a cocher : intitule puis options ;
   hors groupe, le conteneur n'intervient pas dans la mise en page */
.list_ui_search_checkbox_group {
	display: block;
	width: 100%;
	margin-bottom: 5px;
}

.list_ui_search_checkbox_group_label {
	display: block;
	font-weight: bold;
}

.list_ui_search_checkbox_ungrouped {
	display: contents;
}

/* ---------------------------------------------------------------------------*/

/*                      Parametrage d'affichage                               */

/* ---------------------------------------------------------------------------*/

/* Sous-reglages d'une case a cocher du parametrage d'affichage : en retrait
   sous elle, avec un filet (contraste 4,5:1 sur fond blanc, RGAA 3.3) ;
   grises tant qu'elle est decochee */
.list_ui_settings_display_dependent {
	margin: -5px 0 10px 1.5em;
	padding: 0 0 0 0.75em;
	border: 0;
	border-left: 2px solid #767676;
	min-width: 0;
}

.list_ui_settings_display_dependent:disabled {
	opacity: 0.6;
}

/* Legende du groupe : lue par les technologies d'assistance, masquee a l'ecran
   (la classe visually-hidden n'est pas definie par tous les themes OPAC) */
.list_ui_settings_display_dependent > legend.visually-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* Groupe de boutons radio d'un reglage a choix */
.list_ui_settings_display_choices {
	margin: 0;
	padding: 0;
	border: 0;
	min-width: 0;
}

.list_ui_settings_display_choices > legend {
	float: left;
	margin-right: 0.5em;
	padding: 0;
	font-weight: normal;
}

/* ---------------------------------------------------------------------------*/

/*        Rappel des filtres appliques (query human) au-dessus d'une liste     */

/* ---------------------------------------------------------------------------*/

/* Espacements auparavant obtenus par des <br /> de presentation */
.list_ui_query_human {
	margin-top: 1.2em;
	margin-bottom: 2em;
}

/* ---------------------------------------------------------------------------*/

/*                      Elements : regroupements et selection                 */

/* ---------------------------------------------------------------------------*/

.list_ui_content_list_group {
	font-weight: bold;
	padding-left: 25px;
}

.list_ui_content_list_group_level_1 {
	font-size: 1.3em;
}

.list_ui_content_list_group_level_2 {
	font-size: 1.2em;
	padding-left: 35px;
}

.list_ui_content_list_group_level_3 {
	font-size: 1.1em;
	padding-left: 45px;
}

input[type='checkbox'].list_ui_selection {
	cursor: pointer;
}

/* Actions sur la selection */
.list_ui_selection_actions {
	margin-top: 25px;
}

.list_ui_selection_actions img {
	vertical-align: bottom;
}

.list_ui_selection_action_label {
	font-weight: bold;
}

/* ---------------------------------------------------------------------------*/

/*                      Barre de navigation                                   */

/* ---------------------------------------------------------------------------*/

/*
 * Barre de navigation (rendus serveur et vueJS) : centree et sur une seule
 * ligne quand la place le permet. Le nav reprend son affichage flex, annule
 * par "all: unset" ; dans un conteneur flex, le float:right du choix du nombre
 * par page n'a pas d'effet, il est neutralise pour le centrage.
 */
.list_ui_navbar {
	text-align: center;
	justify-content: center;
	align-items: center;
	margin: 8px 0;
}

.list_ui_navbar > nav {
	all: unset;
}

/* Pas de display: inline-block ici, contrairement a la gestion : les elements
   de la barre suivent l'affichage flex pose plus bas */
.list_ui_navbar > nav *:not(button:has(img)) {
	min-width: 16px;
	padding: 3px 3px;
	line-height: 20px;
	text-decoration: none;
	box-sizing: border-box;
	text-align: center;
	color: #444;
	font-style: normal;
	max-height: 26px;
}

/* Conteneurs de la barre (information de page, nombre par page) : sans fond,
   meme au survol, comme la pagination commune (pagination.css) */
.list_ui_navbar > nav > span,
.list_ui_navbar > nav > span:is(:hover, :focus) {
	background: transparent;
}

.list_ui_navbar > nav > *:is(a, button) > img {
	vertical-align: middle;
	padding: 5px 5px;
	margin: 0px 5px;
}

.list_ui_navbar .list_ui_navigator ul {
	list-style: none;
}

.list_ui_navbar .navbar_per_page.current,
.list_ui_navbar .navbar_page.current {
	font-weight: 600;
}

.list_ui_navbar .navbar_per_page {
	text-decoration: none;
}

.list_ui_navbar > nav.list_ui_navigator {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 6px 20px;
}

.list_ui_navbar .list_ui_navigator > ul {
	display: flex;
	flex-wrap: wrap;
	margin: 0;
	padding: 0;
	align-items: center;
	gap: 2px;
}

.list_ui_navbar .list_ui_navigator > ul > li {
	display: flex;
	align-items: center;
}

.list_ui_navbar .list_ui_navigator :is(.navbar_page, .navbar_per_page) {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 26px;
	border-radius: 3px;
}

.list_ui_navbar .list_ui_navigator a:is(.navbar_page, .navbar_per_page)[href]:is(:hover, :focus) {
	background-color: rgba(0, 0, 0, 0.08);
}

.list_ui_navbar .list_ui_navigator :is(.navbar_page, .navbar_per_page).current {
	background-color: rgba(0, 0, 0, 0.12);
}

.list_ui_navbar .list_ui_navigator .navbar_page[aria-disabled="true"] {
	opacity: 0.4;
}

.list_ui_navbar .list_ui_navigator > span[style*="float"] {
	float: none !important;
}

/* Nombre de resultats par page : libelle puis choix, mis en forme comme les
   pages. Le bloc passe a la ligne au besoin : la hauteur maximale et la marge
   interne posees sur tous les elements de la barre sont levees */
.list_ui_navbar .list_ui_navbar_per_page {
	display: inline-flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 2px 6px;
	padding: 0;
	max-height: none;
}

.list_ui_navbar .list_ui_navbar_per_page_options,
.list_ui_navbar .list_ui_navbar_per_page_options > li {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 2px;
	margin: 0;
	padding: 0;
	max-height: none;
}

@media (forced-colors: active) {
	.list_ui_navbar .list_ui_navigator :is(.navbar_page, .navbar_per_page).current {
		outline: 1px solid CanvasText;
	}
}

/* ---------------------------------------------------------------------------*/

/*   Listes sans tableau (RGAA) : modes 'simple_list' et 'view_django'        */

/* ---------------------------------------------------------------------------*/

/*
 * Les deux modes produisent la meme <ul class="list_ui_list"> : les regles
 * ci-dessous valent pour l'un comme pour l'autre.
 */

/*
 * Ligne ecartee par un filtre ou une pagination appliques dans le navigateur
 * (rendu vueJS) : l'attribut hidden doit l'emporter sur le display pose par
 * la mise en forme des lignes (ex. display: flex)
 */
[data-object-id][hidden] {
	display: none !important;
}

ul.list_ui_list {
	list-style: none;
	margin: 0;
	padding: 0;
	/* Cadre reprenant l'aspect du tableau remplace */
	border: 1px solid #b8b8b8;
}

ul.list_ui_list > li {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	align-items: flex-start;
	/* Espacement interne des cellules de tableau, elargi a gauche pour le filet */
	padding: 3px 5px 3px 10px;
	/* Separateur de ligne, comme les cellules d'un tableau */
	border-bottom: 1px solid #b8b8b8;
	border-left: 4px solid #1f6feb;
}

ul.list_ui_list > li:last-child {
	border-bottom: none;
}

ul.list_ui_list > li:hover,
ul.list_ui_list > li:focus-within {
	background-color: rgba(255, 243, 205, 0.8);
}

ul.list_ui_list > li > span {
	display: block;
}

ul.list_ui_list > li p {
	margin: 4px 0;
	font-size: 0.92em;
	/* Contraste conserve sur fond blanc comme sur la surbrillance */
	color: #444;
}

/* Une liste n'a pas d'en-tetes : le libelle de colonne, quand il est annonce,
   joue leur role. Il reste discret, la valeur devant primer a la lecture. */
.list_ui_cell_label {
	color: #555;
}

.list_ui_cell_label::after {
	content: " : ";
}

/* Mise en forme Django : detail, actions, metadonnees et badges d'une ligne */
.list_ui_content_object_list_detail {
	flex: 1 1 24em;
}

.list_ui_content_object_list_actions {
	display: flex;
	flex-wrap: wrap;
	gap: 5px;
}

.list_ui_content_object_list_meta {
	display: block;
	font-size: 0.85em;
	color: #555;
}

.list_ui_content_object_list_meta_item + .list_ui_content_object_list_meta_item::before {
	/* Espace, point median, espace. Les echappements sont explicites : une
	   espace apres \00b7 serait lue comme fin de sequence et disparaitrait */
	content: "\0020\00b7\0020";
}

.list_ui_content_object_list_badges {
	display: block;
	margin-top: 5px;
}

.list_ui_list_cell_content_badge {
	display: inline-block;
	margin-right: 5px;
	padding: 1px 9px;
	border-radius: 10px;
	font-size: 0.8em;
}

/* ---------------------------------------------------------------------------*/

/*	Gestion des listes - Personnalisation par type d'objets                  */

/* ---------------------------------------------------------------------------*/

.opac_loans_reader_ui_list_cell_header_pret_date,
.opac_loans_reader_ui_list_cell_header_pret_retour,
.opac_loans_reader_ui_list_cell_header_late,
.opac_loans_groups_reader_ui_list_cell_header_pret_date,
.opac_loans_groups_reader_ui_list_cell_header_pret_retour,
.opac_loans_groups_reader_ui_list_cell_header_late {
	text-align: center;
}

.opac_bannettes_abon_pub_ui_list,
.opac_bannettes_abon_priv_ui_list {
	padding: 3px;
	border-spacing: 5px;
}

/* Le nom court sert d'onglet et de libelle de cadre : on le montre tel qu'il
   apparaitra ailleurs, en pastille a cote du nom complet */
li span.opac_search_persopac_ui_list_cell_content_search_shortname,
li span.opac_search_persopac_reader_ui_list_cell_content_search_shortname {
	display: inline-block;
	margin-left: 8px;
	padding: 1px 7px;
	border-radius: 2px;
	font-size: 0.8em;
}
