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

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

/*                      Gestion des listes                                    */

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

/*
 * Ordre des sections : celui de l'affichage d'une liste (titre, blocs
 * depliables, filtres et tris, options, parametrage, rappel, elements,
 * navigation), puis les personnalisations par type d'objets. Il suit celui de
 * la feuille OPAC (opac_css/styles/common/list_ui.css).
 */

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

/*      Titre d'une liste : rendu homogene quel que soit le niveau (RGAA)      */

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

/* Le niveau du titre suit la hierarchie de la page, son apparence non : les
   habillages stylant les balises hX niveau par niveau, les selecteurs sont
   portes par les conteneurs de la gestion pour primer sur ces regles */
.list_ui_title,
#contenu .list_ui_title,
#contenu-frame .list_ui_title {
	clear: both;
	display: block;
	/* 16px = les 12pt que les habillages destinent a un titre de niveau 2,
	   en restant sous les 13 a 14pt de leur titre de niveau 1 */
	font-size: 16px;
	margin-top: 4px;
	margin-bottom: 2px;
	padding-top: 1px;
	padding-bottom: 1px;
}

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

/*     Blocs depliables : cadres, legendes et boutons (RGAA 11.5 / 11.6)       */

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

.list_ui_fieldset {
	border: 1px solid #b8b8b8;
	border-radius: 5px;
	padding: 12px 16px;
	margin-top: 8px;
}

.list_ui_legend {
	margin-left: 10px;
	padding-right: 3px;
	padding-left: 3px;
	font-weight: 500;
}

/* Blocs "Filtres / Tri", "Options" et "Parametrage" en fieldset : le contenu
   suit la legende, sans le retrait prevu pour l'ancien en-tete */
.list_ui_fieldset > .list_ui_search_content,
.list_ui_fieldset > .list_ui_options_content,
.list_ui_fieldset > .list_ui_settings_content {
	margin-left: 0;
}

/* Bloc replie : le cadre se reduit a sa legende, sans espace vide en dessous */
.list_ui_fieldset:has(> legend button[aria-expanded="false"]) {
	padding-top: 0;
	padding-bottom: 0;
}

/* Boutons de depliage (filtres, options, parametrage, rapports) et fleches du
   bloc d'options : de vrais boutons, qui gardent l'aspect des images cliquables
   d'origine */
.list_ui_toggle,
.list_ui_options_toggle {
	background: none;
	border: 0;
	cursor: pointer;
}

/* Les habillages stylent tous les boutons, parfois par module : enjoy pose
   ainsi une ombre interieure, une marge interne et une marge
   ("body.edit button", "body.circ button"... : specificite 0,1,2, superieure
   a une simple classe). Le type et la classe portent ce selecteur a 0,2,1,
   pour l'emporter quel que soit l'ordre de chargement des feuilles */
button.list_ui_toggle[type="button"],
button.list_ui_options_toggle[type="button"] {
	box-shadow: none;
	padding: 0;
	margin: 0;
}

/* Libelles des blocs depliables en gras, comme les <label> qu'ils remplacent.
   Classe portee par le <span> du bouton (gabarits PHP) ou par le bouton
   lui-meme (listOptions.vue) */
.list_ui_search_label_text,
.list_ui_options_label_text,
.list_ui_settings_label_text,
.list_ui_datasets_label_text {
	font-weight: bold;
}

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

/*                      Filtres et tris                                       */

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

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

/* 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;
}

.list_ui_search_content_order_asc_desc {
	margin-left: 25px;
}

.list_ui_simple_selector,
.list_ui_multiple_selector {
	width: 75%;
}

.list_ui_simple_text {
	max-width: 90%;
}

.list_ui_search_groupcheckbox {
	flex-wrap: wrap;
}

.list_ui_search_groupcheckbox span.list_ui_search_checkbox {
	flex: 1 0 50%;
	min-height: 25px;
	display: block;
}

.list_ui_search_checkbox label {
	font-weight: normal!important;
}

/* 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;
}

.list_ui_search_buttons {
	padding-top: 10px;
}

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

/*                      Options : choix et ordre des colonnes                 */

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

.list_ui_options_content {
	display: none;
	margin-top: 5px;
	margin-left: 25px;
}

select.list_ui_options_columns {
	min-width: 300px;
	max-width: 100%;
}

/* Colonnes disponibles | fleches | colonnes selectionnees + fleches d'ordre.
   Flexbox plutot que des flottants : alignement vertical des boutons sur les
   listes, et passage a la ligne sur un ecran etroit (RGAA 10.11) */
div.list_ui_options_columns {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: 16px;
}

/* Les fleches du bloc d'options gardent leur contour propre, sans l'ombre de l'habillage */
button.list_ui_options_button[type="button"] {
	box-shadow: none;
}

/* Focus clavier visible sur tous les boutons des blocs de la liste (RGAA 10.7) */
.list_ui_toggle:focus-visible,
.list_ui_options_toggle:focus-visible,
.list_ui_options_button:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

/* Fleches du bloc d'options : des boutons identifiables comme tels, au contour
   contraste (#767676 sur blanc : 4,5:1, au-dela des 3:1 attendus pour un
   composant d'interface, RGAA 3.3) et a la cible confortable (32 px) */
.list_ui_options_button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 32px;
	min-height: 32px;
	margin: 0;
	padding: 4px;
	background: #fff;
	border: 1px solid #767676;
	border-radius: 4px;
	cursor: pointer;
}

.list_ui_options_button:hover {
	background: #ececec;
}

.list_ui_options_columns_available,
.list_ui_options_columns_selected_block {
	display: flex;
	flex-direction: column;
}

/* Les listes occupent toute la hauteur de leur rangee : elles s'alignent sur
   la colonne des quatre fleches d'ordre, plus haute qu'une liste de 5 lignes */
.list_ui_options_columns_available > select.list_ui_options_columns,
.list_ui_options_columns_selected_block > select.list_ui_options_columns {
	flex: 1 1 auto;
}

.list_ui_options_columns_selected {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: 16px;
}

/* Colonnes de boutons centrees sur les listes : le decalage du haut compense
   l'intitule place au-dessus de chaque liste */
.list_ui_options_columns_change,
.list_ui_options_columns_selected_buttons {
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	gap: 6px;
	padding-top: 1.5em;
}

/* Le regroupement passe sous le bloc des colonnes */
.list_ui_options_group {
	margin-top: 16px;
}

.list_ui_options_applied_group {
	min-width: 150px;
}

.list_ui_options_group_label_text {
	display: block;
}

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

/*                      Parametrage et jeux de donnees                        */

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

.list_ui_settings_content,
.list_ui_settings_display_content,
.list_ui_settings_columns_content,
.list_ui_settings_filters_content,
.list_ui_settings_selection_actions_content,
.list_ui_datasets_content {
	display: none;
	margin-top: 5px;
	margin-left: 25px;
}

.list_ui_settings_display_content_group_title,
.list_ui_settings_display_content_group_content {
	margin-top: 10px;
	margin-bottom: 10px;
}

.list_ui_settings_display_content_group_content {
	margin-left: 25px;
}

.list_ui_settings_display_content_group_content div {
	margin-bottom: 10px;
}

/* Sous-reglages d'une case a cocher : 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;
}

.list_ui_selection_action_configuration {
	margin-top: 25px;
	margin-left: 25px;
}

/* Liens d'acces direct aux actions */
.list_ui_go_directly_to_action_bottom {
	margin-top: 25px;
}

.list_ui_go_directly_to_action_label {
	font-style: italic;
}

.list_ui_go_directly_to_action_top {
	margin-top: 5px;
	margin-bottom: 25px;
}

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

/*                      Listes en tableau                                     */

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

table.list_ui_list tbody tr td input[type="text"],
table.list_ui_list tbody tr td select {
	width: 95%;
}

/* Ligne des filtres rapides : cellules td (et non th, qui seraient devenus
   des en-tetes des lignes de donnees, RGAA 5.6 / 5.7). Elle se distingue des
   lignes de donnees par un fond leger et un filet bas, independants du theme :
   voile semi-transparent plutot qu'une couleur, ombre interne plutot qu'une
   bordure (certains themes forcent border:none sur td avec un id). */
tr.list_ui_fast_filters > td {
	background-color: rgba(0, 0, 0, 0.04);
	box-shadow: inset 0 -2px 0 rgba(0, 0, 0, 0.2);
	text-align: center;
	vertical-align: middle;
	padding: 4px 5px;
}

/* Contrastes forces : fonds et ombres sont supprimes, une bordure prend
   le relais pour garder la separation */
@media (forced-colors: active) {
	tr.list_ui_fast_filters > td {
		border-bottom: 2px solid CanvasText;
	}
}

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

/*                      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;
}

.list_ui_navbar > nav *:not(button:has(img)) {
	display: inline-block;
	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;
}

/* Les habillages pure, light et nova posent une marge et un retrait sur toutes
   les listes du contenu ("#contenu ul", "#contenu li" : specificite 1,0,1) :
   les listes de la barre (pages, nombre par page) les levent, avec des
   selecteurs portes par les conteneurs de la gestion, comme le titre */
#contenu .list_ui_navbar .list_ui_navigator ul,
#contenu-frame .list_ui_navbar .list_ui_navigator ul {
	margin: 0;
	padding: 0;
}

#contenu .list_ui_navbar .list_ui_navigator li,
#contenu-frame .list_ui_navbar .list_ui_navigator li {
	padding: 0;
}

@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 */
	padding: 3px 5px 3px 10px;
	/* Separateur de ligne, comme les cellules d'un tableau */
	border-bottom: 1px solid #b8b8b8;
}

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: #7fa5de;
}

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                  */

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

.custom_fields_ui_search_content,
.custom_fields_cms_ui_search_content,
.custom_fields_custom_ui_search_content,
.custom_fields_loans_ui_search_content {
	display: none;
}

#custom_fields_ui_search_img,
#custom_fields_cms_ui_search_img,
#custom_fields_custom_ui_search_img,
#custom_fields_loans_ui_search_img {
	content: url('./../../images/plus.gif');
}

.reservations_edition_ui_search_checkbox,
.resa_planning_edition_ui_search_checkbox {
	display: block;
	height: 15px;
}

.reservations_edition_ui_search_checkbox>label,
.resa_planning_edition_ui_search_checkbox>label {
	font-weight: normal !important;
	vertical-align: middle;
}

.readers_relances_ui_list_cell_html_header,
.readers_relances_ui_list_cell_html_content,
.readers_relances_ui_selection_action_square,
.readers_relances_ui_selection_action_label {
	display: none;
}

.readers_group_ui_list th {
	text-align: left;
}

.configuration_tpl_notice_ui_list_cell_header_id,
.configuration_tpl_serialcirc_ui_list_cell_header_id,
.configuration_tpl_bannette_ui_list_cell_header_id {
	width: 3%;
}

.editions_states_ui_list_cell_header_execute,
.statopac_ui_list_cell_header_execute,
.statopac_ui_list_cell_header_export,
.procs_ui_list_cell_header_execute,
.procs_ui_list_cell_header_export {
	width: 10%;
}

.configuration_acquisition_pricing_systems_ui_list_cell_header_expand {
	width: 5%;
}

.caddie_content_ui_NOTI_notice_tpl_content,
.caddie_content_ui_EXPL_notice_tpl_content,
.caddie_content_ui_BULL_notice_tpl_content {
	display: block;
	margin-top: 20px;
}

form[id*="caddie_content"] div[class*="export_icons"] {
	margin-top: -60px;
}

.reservations_circ_ui_export_icons_edit_links {
	position: absolute;
	display:block;
	margin-top: -60px;
}

table.list_ui_list tbody tr td.acces_profiles_resources_ui_list_cell_content_prf_name,
table.list_ui_list tbody tr td.acces_profiles_resources_ui_list_cell_content_prf_use,
table.list_ui_list tbody tr td.acces_profiles_resources_ui_list_cell_content_prf_rule,
table.list_ui_list tbody tr td.acces_profiles_users_ui_list_cell_content_prf_name,
table.list_ui_list tbody tr td.acces_profiles_users_ui_list_cell_content_prf_use,
table.list_ui_list tbody tr td.acces_profiles_users_ui_list_cell_content_prf_rule {
	width: 32%;
}

.groupexpls_ui_search_content span.groupexpls_ui_search_checkbox {
	flex: 1 0 20%;
	max-width: 20%;
	display: block;
}

.groupexpls_ui_search_content span.groupexpls_ui_search_checkbox .checkbox {
	vertical-align: middle;
}

.readers_edition_ui_other_action_empr_change_status {
	margin-top: -25px;
}

table.configuration_visionneuse_mimetype_ui_list tbody tr td select {
	width: 15%;
}
