/* © 2026 INFONEXIS. Tous droits réservés. Logiciel propriétaire : voir le fichier LICENSE. */
/**
 * Compléments nex-wss (chargés en dernier ; ne jamais modifier les fichiers de vendor/).
 */

/* Police : Open Sans hébergée par nex-wss (nex-fonts.css, jamais chargée depuis Google),
   repli sur la police du système (Segoe UI, San Francisco, Roboto, Arial). */
:root,
[data-bs-theme] {
	--bs-font-sans-serif: "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;
}

/* Logo INFONEXIS et logo du client sur la page de connexion */
.nex-auth-logo { width: 150px; height: 150px; }
/* logos de la page de connexion : plateforme (ou symbole Orinexis) à gauche, client à droite, filet entre les deux ; seul : centré */
.nex-auth-logos { display: flex; align-items: center; justify-content: center; gap: 1.75rem; }
.nex-auth-logos-filet { align-self: stretch; width: 1px; margin: 0.75rem 0; background: rgba(255, 255, 255, 0.25); }
/* logo de l'application (console > Applications) à la place du symbole Orinexis : proportions gardées */
.nex-auth-logo.nex-auth-logo-application { width: auto; height: auto; max-width: 240px; max-height: 130px; object-fit: contain; }
/* logo de la société cliente : tel quel (fond transparent conseillé), même hauteur que celui de gauche quand ils sont côte à côte */
.nex-auth-client-logo { max-height: 90px; max-width: 220px; object-fit: contain; }
.nex-auth-logos-deux .nex-auth-logo { width: auto; height: auto; max-height: 90px; max-width: 160px; object-fit: contain; }
.nex-auth-logos-deux .nex-auth-logo:not(.nex-auth-logo-application) { width: 90px; height: 90px; }
@media (max-width: 400px) { .nex-auth-logos { gap: 1rem; } .nex-auth-client-logo, .nex-auth-logos-deux .nex-auth-logo { max-height: 64px; max-width: 120px; } }

/* Diaporama des images de couverture (wss_diaporama(), wss/__public__/js/covers.js) : remplit son parent, images
   superposées, fondu enchaîné et zoom lent. L'image qui s'efface garde son zoom pendant le fondu, puis revient à sa
   taille une fois invisible. Utilisé par la page de connexion et la bannière de Mon profil. */
.nex-diaporama { position: absolute; inset: 0; overflow: hidden; border-radius: inherit; }
.nex-diaporama .nex-cover {
	position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transform: scale(1);
	transition: opacity 1.5s ease-in-out, transform 0s linear 1.5s;
	will-change: opacity, transform;
}
.nex-diaporama .nex-cover.active { opacity: 1; }
.nex-diaporama .nex-cover.nex-kenburns { transform: scale(1.1); transition: opacity 1.5s ease-in-out, transform 12s linear; }
/* sans zoom : fondu seul */
.nex-diaporama.nex-sans-zoom .nex-cover, .nex-diaporama.nex-sans-zoom .nex-cover.nex-kenburns { transform: none; transition: opacity 1.5s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
	.nex-diaporama .nex-cover, .nex-diaporama .nex-cover.nex-kenburns { transition: none; transform: none; }
}

/* Choix de la couleur du thème (page Mon profil) */
.nex-couleurs { display: grid; grid-template-columns: repeat(auto-fill, 2rem); gap: .75rem; }
.nex-couleur { width: 2rem; height: 2rem; border: 0; border-radius: 50%; padding: 0; transition: transform .15s; }
.nex-couleur:hover { transform: scale(1.1); }
.nex-couleur.active { box-shadow: 0 0 0 2px var(--bs-body-bg), 0 0 0 4px currentColor; outline: 2px solid var(--bs-emphasis-color); outline-offset: 2px; }

/* Page Mon profil : choix du thème (vignettes) */
.nex-themes { display: grid; grid-template-columns: repeat(auto-fill, minmax(10.5rem, 1fr)); gap: 1rem; }
.nex-theme-choix { border: 2px solid var(--bs-border-color); border-radius: var(--bs-border-radius-lg); background: var(--nex-card-bg); color: inherit; padding: .6rem; text-align: left; }
.nex-theme-choix:hover { border-color: var(--nex-primary-300); }
.nex-theme-choix.active { border-color: var(--nex-primary); box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--nex-primary) 20%, transparent); }
/* Page Mon profil > Thème : réglages du thème (wss_theme_reglages_html()) ; chaque choix montre un aperçu (en-tête, menu, carte)
   de la combinaison avec cette valeur : data-menu / data-entete vides = variables du thème (rendu d'origine), sinon formules
   --nex-r-* de nex-themes.css ; data-cartes : formule de la valeur. */
.nex-reglage + .nex-reglage { margin-top: 1.25rem; }
.nex-reglage-titre { margin-bottom: .5rem; font-weight: 700; }
.nex-reglage-choix-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(8.5rem, 1fr)); gap: .75rem; }
.nex-reglage-choix { display: flex; flex-direction: column; gap: .45rem; padding: .5rem; border: 2px solid var(--bs-border-color); border-radius: var(--bs-border-radius-lg); background: var(--nex-card-bg); color: inherit; text-align: left; }
.nex-reglage-choix:hover { border-color: var(--nex-primary-300); }
.nex-reglage-choix.active { border-color: var(--nex-primary); box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--nex-primary) 20%, transparent); }
.nex-reglage-libelle { font-weight: 600; line-height: 1.25; }
.nex-reglage-libelle small { display: block; font-weight: 400; font-size: .625rem; color: var(--bs-secondary-color); }
.nex-reglage-apercu {
	--ra-entete: var(--nex-header-bg); --ra-menu: var(--nex-sidebar-bg); --ra-menu-texte: var(--nex-sidebar-color);
	--ra-titre: color-mix(in srgb, var(--nex-primary) calc(100% - var(--nex-entete-assombri)), #000); --ra-titre-ligne: transparent;
	--ra-lisere: 3px;   /* liseré de l'aperçu : épaisseur réelle (fin 2, normal 3, épais 4 px) */
	display: grid; grid-template: "entete entete" 10px "menu contenu" 1fr / 28% 1fr; height: 64px; overflow: hidden;
	border: 1px solid var(--bs-border-color); border-radius: 6px; background: var(--nex-content-bg);
}
.nex-reglage-apercu-plein { grid-template: "menu entete" 10px "menu contenu" 1fr / 28% 1fr; }
.nex-ra-entete { grid-area: entete; background: var(--ra-entete); }
.nex-ra-menu { grid-area: menu; display: flex; flex-direction: column; gap: 4px; padding: 6px 5px; background: var(--ra-menu); box-shadow: 1px 0 0 var(--bs-border-color-translucent); }
.nex-ra-menu i { height: 3px; border-radius: 2px; background: var(--ra-menu-texte); opacity: .55; }
.nex-ra-menu .nex-ra-actif { background: var(--nex-primary); opacity: 1; }
.nex-ra-contenu { grid-area: contenu; padding: 6px; }
.nex-ra-carte { display: flex; flex-direction: column; gap: 4px; height: 100%; overflow: hidden; border: 1px solid var(--nex-card-border); border-radius: 3px; background: var(--nex-card-bg); }
.nex-ra-titre { flex: none; height: 11px; background: var(--ra-titre); box-shadow: inset 0 2px 0 var(--ra-titre-ligne); }
.nex-ra-carte i { height: 3px; margin: 0 6px; border-radius: 2px; background: var(--bs-secondary-color); opacity: .35; }
.nex-reglage-apercu[data-menu=clair] { --ra-menu: var(--nex-r-menu-clair); --ra-menu-texte: var(--bs-body-color); }
.nex-reglage-apercu[data-menu=gris] { --ra-menu: var(--nex-r-menu-gris); --ra-menu-texte: var(--bs-body-color); }
.nex-reglage-apercu[data-menu=degrade] { --ra-menu: var(--nex-r-menu-degrade); --ra-menu-texte: var(--bs-body-color); }
.nex-reglage-apercu[data-menu=sombre] { --ra-menu: var(--nex-r-menu-sombre); --ra-menu-texte: #fff; }
.nex-reglage-apercu[data-menu=teinte] { --ra-menu: var(--nex-r-menu-teinte); --ra-menu-texte: #fff; }
.nex-reglage-apercu[data-menu=couleur] { --ra-menu: var(--nex-r-menu-couleur); --ra-menu-texte: #fff; }
.nex-reglage-apercu[data-menu=couleur] .nex-ra-actif { background: #fff; }
.nex-reglage-apercu[data-entete=teinte] { --ra-entete: var(--nex-r-entete-teinte); }
.nex-reglage-apercu[data-entete=couleur] { --ra-entete: var(--nex-r-entete-couleur); }
.nex-reglage-apercu[data-cartes^=lisere] { --ra-titre-ligne: var(--nex-primary); }
/* style propre au thème (en-têtes « § », grand livre...) : évoqué par un bandeau neutre souligné de la couleur du thème */
.nex-reglage-apercu[data-cartes=theme] { --ra-titre: color-mix(in srgb, var(--nex-primary) 8%, var(--nex-card-bg)); }
.nex-reglage-apercu[data-cartes=theme] .nex-ra-titre { box-shadow: inset 0 -2px 0 var(--nex-primary); }
.nex-reglage-apercu[data-cartes^=lisere] .nex-ra-titre { box-shadow: inset 0 var(--ra-lisere) 0 var(--ra-titre-ligne), inset 0 -1px 0 var(--nex-card-border); }
.nex-reglage-apercu[data-lisere=fin] { --ra-lisere: 2px; }
.nex-reglage-apercu[data-lisere=epais] { --ra-lisere: 4px; }
.nex-reglage-apercu[data-cartes=lisere] { --ra-titre: var(--nex-r-lisere); }
.nex-reglage-apercu[data-cartes=lisere_gris] { --ra-titre: var(--nex-r-lisere-gris); }
.nex-reglage-apercu[data-cartes=lisere_teinte] { --ra-titre: var(--nex-r-lisere-teinte); }
.nex-reglage-apercu[data-cartes=lisere_sombre] { --ra-titre: var(--nex-r-lisere-sombre); }

/* fenêtre « Installer d'autres thèmes » : vignettes non cliquables, case « Installé » dessous ; thème installé encadré */
.nex-theme-catalogue { cursor: default; }
.nex-theme-catalogue:has(:checked) { border-color: color-mix(in srgb, var(--nex-primary) 55%, var(--bs-border-color)); }
/* menu « Thème » de l'en-tête : vignettes réduites, 3 par ligne */
.nex-menu-themes { width: min(30rem, calc(100vw - 1.5rem)); padding: .75rem; max-height: calc(100vh - var(--nex-header-h, 56px) - 1rem); overflow-y: auto; }
.nex-menu-themes-titre { display: flex; align-items: center; gap: .45rem; margin: 0 0 .5rem; font-weight: 700; font-size: .75rem; }
.nex-menu-themes-titre:not(:first-child) { margin-top: .9rem; }
.nex-menu-themes-titre > i { color: var(--nex-primary); }
/* titre de catégorie au-dessus de chaque groupe de vignettes (Classiques, Systèmes, Ambiances, Rétro) */
.nex-themes-categorie { margin: 1.1rem 0 .5rem; font-size: .6875rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--bs-secondary-color); }
.nex-themes-categorie:first-child { margin-top: 0; }
.nex-menu-themes .nex-themes-categorie { margin: .65rem 0 .35rem; font-size: .625rem; }
/* liste des thèmes du menu de l'en-tête : zone qui défile (600 px au plus), couleurs et pied toujours visibles */
.nex-menu-themes-liste { max-height: min(600px, calc(100vh - var(--nex-header-h, 56px) - 13rem)); overflow-y: auto; margin-right: -.4rem; padding-right: .4rem; }
.nex-themes-compact { grid-template-columns: repeat(3, 1fr); gap: .5rem; }
.nex-themes-compact .nex-theme-choix { padding: .35rem; font-size: .6875rem; }
.nex-themes-compact .nex-apercu { height: 52px; }
.nex-themes-compact .nex-theme-choix .mt-2 { margin-top: .3rem !important; }
.nex-menu-themes .nex-couleurs-ligne { flex-wrap: wrap; }
.nex-menu-themes-pied { display: flex; align-items: center; gap: .75rem; margin-top: .9rem; padding-top: .6rem; border-top: 1px solid var(--bs-border-color); font-size: .75rem; }
.nex-menu-themes-pied a { text-decoration: none; }
.nex-apercu { display: grid; grid-template: 12px 1fr / 28% 1fr; height: 76px; border-radius: .35rem; overflow: hidden; border: 1px solid var(--bs-border-color-translucent); }
.nex-apercu-entete { grid-column: 1 / 3; background: var(--nex-inverse); }
/* thème à menu pleine hauteur : le menu occupe toute la hauteur, l'en-tête seulement la largeur du contenu */
.nex-apercu-plein .nex-apercu-menu { grid-area: 1 / 1 / 3 / 2; }
.nex-apercu-plein .nex-apercu-entete { grid-area: 1 / 2 / 2 / 3; }
.nex-apercu-plein .nex-apercu-contenu { grid-area: 2 / 2 / 3 / 3; }
.nex-apercu[data-nex-theme=bitmap] .nex-apercu-entete { background: #fff; box-shadow: inset 0 -1px 0 #000; }   /* barre de menus blanche */
.nex-apercu-menu { background: var(--a-menu); display: flex; flex-direction: column; gap: 4px; padding: 7px 5px; }
.nex-apercu-contenu { background: var(--a-contenu); display: grid; grid-template-columns: 1fr 1fr; gap: 5px; padding: 6px; }
.nex-apercu-carte { background: var(--a-carte); border-radius: 3px; box-shadow: 0 1px 2px rgba(0, 0, 0, .12); display: flex; flex-direction: column; gap: 3px; padding: 5px; }
/* lignes de texte (gris moyen translucide : lisible sur fond clair comme sombre) ; élément actif, titre et bouton à la
   couleur par défaut du thème (la vignette porte data-nex-theme et data-nex-couleur : --nex-primary et --nex-inverse du thème) */
.nex-apercu-menu > span, .nex-apercu-carte > span { height: 3px; border-radius: 2px; background: rgba(128, 128, 128, .45); }
.nex-apercu-menu > span { width: 75%; }
.nex-apercu-menu > .nex-apercu-actif { width: 100%; height: 5px; background: var(--nex-primary); }
.nex-apercu-carte > span:nth-child(3) { width: 70%; }
.nex-apercu-carte > .nex-apercu-titre { width: 55%; height: 4px; background: var(--nex-primary); }
.nex-apercu-carte > .nex-apercu-bouton { width: 45%; height: 7px; margin-top: auto; background: var(--nex-primary); }

/* Avatar à initiales */
.nex-avatar { display: inline-flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem; border-radius: 50%; font-weight: 600; letter-spacing: .02em; flex-shrink: 0; }
img.nex-avatar { object-fit: cover; }   /* pas de fond : une photo transparente (logo PNG) le reste */

/* Page Mon profil : bannière, photo qui déborde, colonne d'informations, onglets */
/* menu flottant (Lumen) : la bannière garde la même marge que le menu et ses coins arrondis */
.nex-profil { margin: calc(-1.25rem + var(--nex-sidebar-gap)) calc(-1.5rem + var(--nex-sidebar-gap)) 0 -1.5rem; }
.nex-profil-banniere { position: relative; height: 180px; background: var(--nex-inverse); border-radius: var(--nex-sidebar-radius); overflow: hidden; }
.nex-profil-mode { position: absolute; top: .75rem; right: 1rem; z-index: 1; }
.nex-profil-corps { display: grid; grid-template-columns: 250px 1fr; gap: 1.5rem; padding: 0 1.5rem 2rem; }
.nex-profil-gauche { margin-top: -90px; position: relative; }
.nex-profil-photo { position: relative; display: inline-block; }
.nex-profil-photo-changer { position: absolute; right: .35rem; bottom: .35rem; box-shadow: 0 2px 6px rgba(0, 0, 0, .25); }
/* fond derrière la photo (un logo transparent ne laisse pas voir la bannière) : blanc en mode clair, fond du contenu
   en mode sombre ; NeX Horizon (contenu transparent) : fond des fenêtres */
.nex-profil-avatar:is(img) { object-fit: cover; background: #fff; }
[data-bs-theme=dark] .nex-profil-avatar:is(img) { background: var(--nex-content-bg); }
[data-nex-theme=horizon] .nex-profil-avatar:is(img) { background: var(--nex-modal-bg); }
.nex-profil-avatar { width: 150px; height: 150px; font-size: 3rem; border-radius: var(--bs-border-radius-lg); box-shadow: 0 4px 12px rgba(0, 0, 0, .15); }
.nex-profil-infos dt { font-weight: 400; color: var(--bs-secondary-color); font-size: .6875rem; text-transform: uppercase; letter-spacing: .04em; margin-top: .75rem; }
.nex-profil-infos dd { margin: 0; overflow-wrap: anywhere; }
.nex-profil-onglets { display: flex; flex-wrap: wrap; gap: .25rem; border-bottom: 1px solid var(--bs-border-color); margin-bottom: 1.25rem; }
.nex-profil-onglets a { padding: .85rem 1rem; color: var(--bs-secondary-color); text-decoration: none; font-weight: 600; border-bottom: 3px solid transparent; margin-bottom: -1px; }
.nex-profil-onglets a:hover { color: var(--bs-emphasis-color); }
.nex-profil-onglets a.active { color: var(--bs-emphasis-color); border-bottom-color: var(--nex-primary); }
@media (max-width: 991.98px) {
	.nex-profil { margin: -1.25rem -1rem 0; }
	.nex-profil-corps { grid-template-columns: 1fr; padding: 0 1rem 2rem; }
	.nex-profil-gauche { text-align: center; }
	.nex-profil-infos { text-align: left; }
}
.nex-avatar-sm { width: 1.75rem; height: 1.75rem; font-size: .6875rem; }

/* ---------------------------------------------------------------- Thème constructor (charte) */
.nex-couleurs-ligne { grid-template-columns: repeat(14, 1.5rem); gap: .4rem; }
.nex-couleurs-ligne .nex-couleur { width: 1.5rem; height: 1.5rem; }
.nex-charte-onglets .nav-link { color: var(--bs-body-color); }
.nex-charte-onglets .nav-link.active { color: var(--nex-primary); font-weight: 600; }
.nex-charte-titre { margin: 1.5rem 0 .75rem; font-size: 1rem; }
/* exemple : titre, rendu, code HTML copiable */
.nex-exemple { margin-bottom: 1.25rem; border: 1px solid var(--nex-card-border); border-radius: var(--bs-border-radius-lg); background: var(--nex-card-bg); box-shadow: var(--nex-card-shadow); overflow: hidden; }
.nex-exemple-titre { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .75rem; padding: .6rem 1rem; border-bottom: 1px solid var(--bs-border-color-translucent); font-weight: 600; }
.nex-exemple-note { font-weight: 400; font-size: var(--nex-font-sm); color: var(--bs-secondary-color); }
.nex-exemple-rendu { padding: 1rem; }
.nex-exemple-rendu > :last-child { margin-bottom: 0; }
.nex-exemple-code { position: relative; border-top: 1px solid var(--bs-border-color-translucent); background: var(--bs-tertiary-bg); color: var(--bs-body-color); }
.nex-exemple-code pre { max-height: 16rem; margin: 0; padding: .75rem 1rem; font-size: .6875rem; tab-size: 2; }
.nex-exemple-code [data-copier-code] { position: absolute; top: .4rem; right: .6rem; }
/* coloration du code (wss_code_html, wss_code_php) : couleurs de VS Code, Light+ en clair, Dark+ en sombre */
:root, [data-bs-theme=light] {
	--nex-code-signe: #800000; --nex-code-balise: #800000; --nex-code-attribut: #e50000; --nex-code-valeur: #0000ff; --nex-code-php: #800000;
	--nex-code-commentaire: #008000; --nex-code-controle: #af00db; --nex-code-stockage: #0000ff; --nex-code-type: #267f99;
	--nex-code-variable: #001080; --nex-code-fonction: #795e26; --nex-code-chaine: #a31515; --nex-code-nombre: #098658; --nex-code-constante: #0070c1;
}
[data-bs-theme=dark] {
	--nex-code-signe: #808080; --nex-code-balise: #569cd6; --nex-code-attribut: #9cdcfe; --nex-code-valeur: #ce9178; --nex-code-php: #569cd6;
	--nex-code-commentaire: #6a9955; --nex-code-controle: #c586c0; --nex-code-stockage: #569cd6; --nex-code-type: #4ec9b0;
	--nex-code-variable: #9cdcfe; --nex-code-fonction: #dcdcaa; --nex-code-chaine: #ce9178; --nex-code-nombre: #b5cea8; --nex-code-constante: #4fc1ff;
}
.nex-code-signe { color: var(--nex-code-signe); }
.nex-code-balise { color: var(--nex-code-balise); }
.nex-code-attribut { color: var(--nex-code-attribut); }
.nex-code-valeur { color: var(--nex-code-valeur); }
.nex-code-php { color: var(--nex-code-php); }
.nex-code-commentaire { color: var(--nex-code-commentaire); font-style: italic; }
.nex-code-controle { color: var(--nex-code-controle); }
.nex-code-stockage { color: var(--nex-code-stockage); }
.nex-code-type { color: var(--nex-code-type); }
.nex-code-variable { color: var(--nex-code-variable); }
.nex-code-fonction { color: var(--nex-code-fonction); }
.nex-code-chaine { color: var(--nex-code-chaine); }
.nex-code-table { font-weight: 700; }                         /* {table} de wsdb dans une chaîne */
.nex-code-marqueur { color: var(--nex-code-constante); font-weight: 700; }   /* %s %d %f */
.nex-code-nombre { color: var(--nex-code-nombre); }
.nex-code-constante { color: var(--nex-code-constante); }
[data-copier] { cursor: copy; }
[data-copier].nex-copie, [data-copier-code].nex-copie { outline: 2px solid var(--nex-success); outline-offset: 2px; }

.nex-nuancier { overflow-x: auto; }
.nex-nuancier-ligne { display: grid; grid-template-columns: 7rem 3rem repeat(9, minmax(2rem, 1fr)); gap: .25rem; align-items: center; margin-bottom: .25rem; min-width: 34rem; }
.nex-nuancier-entete { font-size: var(--nex-font-sm); color: var(--bs-secondary-color); text-align: center; }
.nex-nuancier-nom { display: flex; flex-direction: column; font-weight: 600; line-height: 1.2; }
.nex-nuancier-nom small { font-weight: 400; font-family: var(--bs-font-monospace); color: var(--bs-secondary-color); }
.nex-case { display: block; height: 2rem; border-radius: .3rem; border: 1px solid var(--bs-border-color-translucent); }
.nex-semantique { display: flex; flex-direction: column; gap: .15rem; padding: .9rem 1rem; border-radius: var(--bs-border-radius-lg); }
.nex-semantique small { opacity: .8; font-family: var(--bs-font-monospace); }
.nex-opacites { display: grid; grid-template-columns: repeat(auto-fill, minmax(3rem, 1fr)); gap: .5rem; text-align: center; font-size: var(--nex-font-sm); color: var(--bs-secondary-color); }
.nex-degrade { padding: .5rem .9rem; border-radius: var(--bs-border-radius); font-size: var(--nex-font-sm); }
@media (max-width: 767.98px) {
	.nex-couleurs-ligne { grid-template-columns: repeat(7, 1.5rem); }
}

/* Framework > Tableaux de données (documentation) */
.nex-doc-tableaux .nex-exemple-code pre { max-height: 42rem; font-size: .75rem; }
.nex-doc-journal { max-height: 10rem; overflow: auto; font-size: .75rem; white-space: pre-wrap; }
.nex-doc-reference { font-size: .8125rem; }
.nex-doc-reference td:first-child { white-space: nowrap; }
.nex-doc-reference td:nth-child(2) { color: var(--bs-secondary-color); }

/* Administration > Activité (wss/admin/activite.php) : indicateurs, graphiques */
.nex-activite-graphique { height: 300px; }
.nex-activite-vide { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .5rem; color: var(--bs-secondary-color); font-size: .8125rem; }
.nex-activite-vide i { font-size: 1.75rem; opacity: .4; }

/* Indicateur chiffré (wss_indicateur, wss/core/html.php) : couleur pleine, icône en filigrane, bandeau du bas plus foncé */
.nex-indicateurs { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: .75rem; }   /* 14 rem : un tiers de plus que les premiers blocs, trop carrés (05/10/2026) */
.nex-indicateurs-larges { grid-template-columns: repeat(auto-fill, minmax(min(26rem, 100%), 1fr)); }   /* blocs au texte long (comptes de plateforme agréée, 12/10/2026) */
/* largeur des blocs au choix (13/10/2026, demande de Grégory) : nex-indicateurs-sm | md (défaut) | lg | xl | xxl, posée par wss_indicateurs($blocs, $taille) */
.nex-indicateurs-sm { grid-template-columns: repeat(auto-fill, minmax(min(11rem, 100%), 1fr)); }
.nex-indicateurs-lg { grid-template-columns: repeat(auto-fill, minmax(min(18rem, 100%), 1fr)); }
.nex-indicateurs-xl { grid-template-columns: repeat(auto-fill, minmax(min(22rem, 100%), 1fr)); }
.nex-indicateurs-xxl { grid-template-columns: repeat(auto-fill, minmax(min(26rem, 100%), 1fr)); }
.nex-indicateur { position: relative; overflow: hidden; display: flex; flex-direction: column; border-radius: var(--bs-card-border-radius, .375rem); box-shadow: 0 1px 3px rgba(0, 0, 0, .12); }
/* chiffres toujours en blanc (clair comme sombre : en sombre, le contraste calculé passait le texte en foncé sur vert, cyan...), sauf fonds clairs */
.nex-indicateur:not(.text-bg-yellow, .text-bg-silver, .text-bg-muted, .text-bg-light, .text-bg-white) { color: #fff !important; text-shadow: 0 1px 2px rgba(0, 0, 0, .22); }
.nex-indicateur-fond { position: absolute; right: -.5rem; top: .25rem; font-size: 4.75rem; line-height: 1; opacity: .16; transform: rotate(-12deg); pointer-events: none; }
.nex-indicateur-corps { position: relative; flex: 1; padding: .75rem 1rem .625rem; }
.nex-indicateur-titre { font-size: .75rem; font-weight: 600; opacity: .9; line-height: 1.3; }
.nex-indicateur-valeur { font-size: 1.625rem; font-weight: 700; line-height: 1.25; margin-top: .25rem; white-space: nowrap; }
.nex-indicateur-detail { font-size: .75rem; opacity: .85; }
.nex-indicateur-pied { position: relative; display: flex; align-items: center; gap: .5rem; padding: .375rem 1rem; font-size: .6875rem; background: rgba(0, 0, 0, .16); }
.nex-indicateur-pied a { color: inherit; text-decoration: none; font-weight: 600; white-space: nowrap; }
.nex-indicateur-pied a:hover { text-decoration: underline; }

/* Fiche de consultation (js/consultation.js, wss/form/consultation.php) : lecture, libellé à droite | valeur, sommaire des groupes */
.nex-consultation .nex-modal-corps { background: var(--bs-tertiary-bg); }
.nex-consultation-infos.nex-consultation-avec-sommaire { display: grid; grid-template-columns: 12rem minmax(0, 1fr); gap: 1.5rem; }
.nex-consultation-sommaire { position: sticky; top: 0; align-self: start; display: flex; flex-direction: column; padding: .25rem .9rem .25rem 0;
	border-right: 1px solid var(--bs-border-color); text-align: right; }
.nex-consultation-sommaire a { position: relative; padding: .3rem .25rem; color: var(--bs-secondary-color); font-size: .8125rem; text-decoration: none; }
.nex-consultation-sommaire a:hover { color: var(--nex-primary); }
.nex-consultation-sommaire a.active { color: var(--bs-body-color); font-weight: 600; }
.nex-consultation-sommaire a.active::after { content: ''; position: absolute; top: .25rem; bottom: .25rem; right: calc(-.9rem - 1px); width: 2px; background: var(--nex-primary); }
.nex-consultation-groupe { scroll-margin-top: .5rem; }
.nex-consultation-groupe + .nex-consultation-groupe { margin-top: 1.25rem; }
.nex-consultation-groupe-titre { display: flex; align-items: center; gap: .55rem; margin: 0 0 .5rem; font-size: 1rem; font-weight: 600; }
.nex-consultation-groupe-titre i { color: var(--nex-primary); }
.nex-consultation-carte { background: var(--bs-body-bg); border: 1px solid var(--bs-border-color-translucent); border-radius: var(--bs-border-radius-lg); }
.nex-consultation-ligne { display: grid; grid-template-columns: minmax(8rem, 30%) minmax(0, 1fr); gap: 1rem; align-items: baseline; padding: .6rem 1rem; font-size: .8125rem; }
.nex-consultation-ligne + .nex-consultation-ligne { border-top: 1px solid var(--bs-border-color-translucent); }
.nex-consultation-libelle { text-align: right; font-weight: 600; color: var(--bs-secondary-color); overflow-wrap: anywhere; }
.nex-consultation-valeur { min-width: 0; overflow-wrap: anywhere; }
.nex-consultation-vide { color: var(--bs-tertiary-color); }
.nex-consultation-editable { margin: -.25rem -.45rem; padding: .25rem .45rem; border-radius: var(--bs-border-radius); cursor: text; }
.nex-consultation-editable:hover { background: color-mix(in srgb, var(--nex-primary) 8%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--nex-primary) 25%, transparent); }
.nex-consultation-edition, .nex-consultation-edition:hover { background: none; box-shadow: none; cursor: auto; }
.nex-consultation-modifiee { animation: nex-consultation-modifiee 1.6s ease-out; }
@keyframes nex-consultation-modifiee { from { background: color-mix(in srgb, var(--nex-success) 25%, transparent); } to { background: transparent; } }
.nex-consultation-nav { display: flex; align-items: center; gap: .35rem; }
.nex-consultation-position { min-width: 3.5rem; text-align: center; font-size: .8125rem; font-variant-numeric: tabular-nums; }
/* vue avancée (dossier) : colonne d'identité fixe à gauche, onglets fixes, seul le contenu défile ; aucune image de fond */
.nex-consultation-avancee .nex-modal-corps { display: flex; padding: 0; overflow: hidden; }
.nex-consultation-avancee [data-consultation] { display: flex; flex: 1 1 auto; min-width: 0; min-height: 0; }
.nex-dossier { display: grid; grid-template-columns: 17rem minmax(0, 1fr); flex: 1 1 auto; min-height: 0; width: 100%; }
.nex-dossier-identite { display: flex; flex-direction: column; align-items: flex-start; gap: .5rem; padding: 1.5rem 1.25rem; overflow-y: auto;
	background: var(--bs-body-bg); border-right: 1px solid var(--bs-border-color); }
.nex-dossier-visuel { display: grid; place-items: center; width: 96px; height: 96px; margin-bottom: .35rem; overflow: hidden; border-radius: 18px;
	background: color-mix(in srgb, var(--nex-primary) 12%, var(--bs-body-bg)); border: 1px solid var(--bs-border-color-translucent); }
.nex-dossier-visuel.nex-dossier-rond { border-radius: 50%; }
.nex-dossier-visuel img { width: 100%; height: 100%; min-height: 0; object-fit: cover; }
.nex-dossier-visuel:has(> img) { grid-template: 100% / 100%; }   /* hauteur définie : l'image ne dépasse plus en bas (logo en hauteur coupé) */
/* logo (forme carrée) : image entière avec une marge, sur le fond du thème (plus de fond blanc en mode sombre, 08/10/2026), liseré lisible en
   clair comme en sombre */
.nex-dossier-visuel.nex-dossier-carre { background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color);
	box-shadow: inset 0 0 0 4px var(--bs-body-bg), 0 1px 3px rgba(0, 0, 0, .12); }
.nex-dossier-visuel.nex-dossier-carre img { box-sizing: border-box; object-fit: contain; padding: 14px; }   /* marge comprise dans la taille : plus d'image coupée en bas */
.nex-dossier-icone i { font-size: 2.4rem; color: var(--nex-primary); }
.nex-dossier-visuels { display: flex; align-items: center; gap: .75rem; margin-bottom: .35rem; }   /* visuel + logo lié (client d'un ticket) */
.nex-dossier-visuels .nex-dossier-visuel { margin-bottom: 0; }
.nex-dossier-titre { margin: 0; font-size: 1.15rem; font-weight: 700; line-height: 1.3; overflow-wrap: anywhere; }
.nex-dossier-sous-titre { color: var(--bs-secondary-color); font-size: .8125rem; }
.nex-dossier-badges { display: flex; flex-wrap: wrap; gap: .3rem; }
.nex-dossier-infos { width: 100%; margin: .5rem 0 0; padding: .75rem 0 0; border-top: 1px solid var(--bs-border-color-translucent); list-style: none; font-size: .8125rem; }
.nex-dossier-infos li { display: flex; gap: .6rem; padding: .3rem 0; min-width: 0; }
.nex-dossier-infos li > i { flex: 0 0 1rem; margin-top: .2rem; color: var(--nex-primary); text-align: center; }
.nex-dossier-infos li > div { min-width: 0; overflow-wrap: anywhere; }
.nex-dossier-modifier { margin-top: .75rem; }
.nex-dossier-actions { display: flex; flex-direction: column; align-items: stretch; gap: .35rem; width: 100%; margin-top: .25rem; }
.nex-dossier-actions .btn { text-align: left; }
.nex-dossier-bandeau { margin: 0 0 .75rem; }
.nex-dossier-principal { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.nex-dossier-indicateurs { flex: 0 0 auto; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color); background: var(--bs-body-bg); }
.nex-dossier-indicateurs .nex-indicateur-valeur { font-size: 1.25rem; white-space: normal; overflow-wrap: anywhere; }
.nex-dossier-contenu { flex: 1 1 auto; min-height: 0; overflow-y: auto; background: var(--bs-tertiary-bg); }
@media (max-width: 1399.98px) { .nex-dossier .nex-consultation-infos.nex-consultation-avec-sommaire { grid-template-columns: 1fr; } .nex-dossier .nex-consultation-sommaire { display: none; } }
.nex-consultation-onglets { flex: 0 0 auto; display: flex; gap: .15rem; padding: 0 1rem; overflow-x: auto; background: var(--bs-body-bg); border-bottom: 1px solid var(--bs-border-color); }
.nex-consultation-onglets button { display: flex; align-items: center; gap: .45rem; padding: .8rem .9rem; border: 0; border-bottom: 2px solid transparent; background: none;
	color: var(--bs-secondary-color); font-size: .8125rem; white-space: nowrap; }
.nex-consultation-onglets button:hover { color: var(--nex-primary); }
.nex-consultation-onglets button.active { border-bottom-color: var(--nex-primary); color: var(--bs-body-color); font-weight: 600; }
.nex-consultation-onglets button .badge { font-size: .6875rem; }
.nex-consultation-panneaux { padding: 1.25rem 1.5rem; }
.nex-consultation-chargement { padding: 2rem; text-align: center; color: var(--bs-secondary-color); }
.nex-consultation-historique { font-size: .8125rem; }
@media (max-width: 767.98px) {
	.nex-consultation-infos.nex-consultation-avec-sommaire { grid-template-columns: 1fr; }
	.nex-consultation-sommaire { display: none; }
	.nex-consultation-ligne { grid-template-columns: 1fr; gap: .1rem; }
	.nex-consultation-libelle { text-align: left; }
	.nex-consultation-avancee .nex-modal-corps { display: block; overflow: auto; }
	.nex-dossier { display: block; }
	.nex-dossier-identite { border-right: 0; border-bottom: 1px solid var(--bs-border-color); padding: 1rem; }
	.nex-dossier-visuel { width: 64px; height: 64px; }
	.nex-dossier-contenu { overflow: visible; }
	.nex-consultation-panneaux { padding: 1rem; }
}

/* Multi-entités : sélecteur de l'entité affichée dans l'en-tête (wss_entites_selecteur_html, wss/core/entites.php) */
.nex-entite-courante { gap: .4rem; max-width: 16rem; }
.nex-entite-courante .nex-entite-nom { font-size: .75rem; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nex-entite-courante .nex-entite-fleche { font-size: .55rem; opacity: .7; }
.nex-entites .dropdown-menu { min-width: 15rem; }
@media (max-width: 767.98px) { .nex-entite-courante .nex-entite-nom, .nex-entite-courante .nex-entite-fleche { display: none; } }

/* Messagerie (Administration > E-mails, js/pages/mails.js) : en-têtes d'un message, pièces jointes, corps dans un cadre isolé */
.nex-mail-entetes th { width: 9rem; color: var(--bs-secondary-color); font-weight: 500; white-space: nowrap; }
.nex-mail-entetes td, .nex-mail-entetes th { font-size: .8125rem; padding: .3rem .5rem; }
.nex-mail-pieces { display: flex; flex-wrap: wrap; gap: .5rem; }
.nex-mail-cadre { display: block; width: 100%; height: 60vh; border: 1px solid var(--bs-border-color); border-radius: var(--bs-border-radius); background: #fff; }

/* Avatar à initiales dans une cellule (colonne image avec 'initiales', pas de photo) : taille des vignettes */
.nex-table-avatar { width: var(--nex-vignette-taille, 30px); height: var(--nex-vignette-taille, 30px); font-size: .6875rem; }

/* Administration > Menu (js/pages/menu.js) : modèles, groupes et éléments à glisser */
.nex-menu-modeles { display: flex; flex-wrap: wrap; gap: .5rem; }
.nex-menu-modele { display: inline-flex; align-items: center; padding: .4rem .8rem; border: 1px solid var(--bs-border-color); border-radius: var(--bs-border-radius);
	color: var(--bs-body-color); text-decoration: none; font-size: .8125rem; }
.nex-menu-modele:hover { border-color: var(--nex-primary); }
.nex-menu-modele.active { border-color: var(--nex-primary); box-shadow: 0 0 0 1px var(--nex-primary); font-weight: 600; }
.nex-me-zone + .nex-me-zone { margin-top: 1.5rem; }
.nex-me-zone-titre { font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; color: var(--bs-secondary-color); margin-bottom: .5rem; }
.nex-me-groupes { display: grid; grid-template-columns: repeat(auto-fill, minmax(22rem, 1fr)); gap: .75rem; align-items: start; }
.nex-me-groupe { border: 1px solid var(--bs-border-color); border-radius: var(--bs-border-radius-lg); background: var(--bs-body-bg); }
.nex-me-perso { border-color: color-mix(in srgb, var(--nex-primary) 50%, var(--bs-border-color)); }
.nex-me-groupe-entete { display: flex; align-items: center; gap: .4rem; padding: .5rem .6rem; border-bottom: 1px solid var(--bs-border-color);
	background: color-mix(in srgb, var(--nex-primary) 6%, transparent); border-radius: var(--bs-border-radius-lg) var(--bs-border-radius-lg) 0 0; }
.nex-me-elements { list-style: none; margin: 0; padding: .4rem; min-height: 2.5rem; }
.nex-me-elements:empty::before { content: attr(data-vide); display: block; padding: .5rem; text-align: center; font-size: .75rem; color: var(--bs-secondary-color);
	border: 1px dashed var(--bs-border-color); border-radius: var(--bs-border-radius); }
.nex-me-element { border-radius: var(--bs-border-radius); }
.nex-me-element:focus-visible { outline: 2px solid var(--nex-primary); outline-offset: 1px; }
.nex-me-ligne { display: flex; align-items: center; gap: .4rem; padding: .2rem .25rem; }
.nex-me-ligne .form-control { flex: 1; min-width: 0; }
.nex-me-poignee { cursor: grab; color: var(--bs-secondary-color); padding: 0 .2rem; }
.nex-me-icone { width: 1.25rem; text-align: center; color: var(--nex-primary); flex-shrink: 0; }
.nex-me-module { font-size: .6875rem; color: var(--bs-secondary-color); white-space: nowrap; max-width: 6rem; overflow: hidden; text-overflow: ellipsis; }
.nex-me-sous { list-style: none; margin: 0 0 .25rem 2.4rem; padding: 0; border-left: 2px solid var(--bs-border-color); }
.nex-me-sous-element .nex-me-ligne { padding-left: .5rem; }
.nex-me-masque > .nex-me-ligne { opacity: .45; }
.nex-me-masque > .nex-me-ligne .form-control { text-decoration: line-through; }
.nex-me-glisse { opacity: .4; }

/* synthèse d'un dossier (wss_synthese) : blocs en grille */
.nex-synthese { display: grid; grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); gap: .75rem; padding: .25rem; }
.nex-synthese-bloc { display: flex; flex-direction: column; padding: .75rem .9rem; border: 1px solid var(--bs-border-color); border-radius: var(--bs-border-radius-lg);
	background: var(--bs-body-bg); }
.nex-synthese-titre { display: flex; align-items: center; gap: .5rem; margin: 0 0 .5rem; font-size: .9rem; font-weight: 600; }
.nex-synthese-liste { list-style: none; margin: 0; padding: 0; }
.nex-synthese-liste li { display: flex; gap: .6rem; padding: .35rem 0; border-top: 1px solid var(--bs-border-color-translucent); font-size: .8125rem; }
.nex-synthese-liste li:first-child { border-top: 0; }
.nex-synthese-liste li > i { flex: 0 0 1rem; margin-top: .2rem; text-align: center; }
.nex-synthese-texte { flex: 1; min-width: 0; }
.nex-synthese-ligne { display: flex; gap: .5rem; }
.nex-synthese-ligne > span:first-child { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nex-synthese-droite { white-space: nowrap; font-weight: 600; font-variant-numeric: tabular-nums; }
.nex-synthese-texte small { display: block; color: var(--bs-secondary-color); }
.nex-synthese-texte .progress { height: .35rem; margin-top: .3rem; }
.nex-synthese-vide { color: var(--bs-secondary-color); font-size: .8125rem; padding: .25rem 0; }
.nex-synthese-pied { align-self: flex-start; margin-top: auto; padding-left: 0; }

/* Mon profil > Notifications : historique dans une zone qui défile (09/10/2026 : « quand c'est plein, on ne consulte pas ») */
.nex-profil-notifications { max-height: max(18rem, calc(100vh - 26rem)); overflow-y: auto; }
.nex-profil-sections .nav-link { padding: .35rem .9rem; }
.nex-acces-onglets .nav-link { padding: .5rem .85rem; font-weight: 600; }
.nex-acces-onglets .nav-link:not(.active) { color: var(--bs-secondary-color); }

/* dossier : document à droite des informations (option 'apercu', 12/10/2026) ; l'un sous l'autre sur un écran étroit */
.nex-consultation-avec-apercu { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1.25rem; align-items: start; }
.nex-consultation-apercu { position: sticky; top: 0; display: flex; flex-direction: column; gap: .5rem; height: calc(100vh - 16rem); min-height: 28rem; }
.nex-consultation-apercu-barre { display: flex; align-items: center; gap: .4rem; font-size: .8125rem; color: var(--bs-secondary-color); }
.nex-consultation-apercu-barre > span { flex: 1 1 auto; min-width: 0; }
.nex-consultation-apercu iframe, .nex-consultation-apercu img { flex: 1 1 auto; width: 100%; min-height: 0; border: 1px solid var(--bs-border-color); border-radius: var(--bs-border-radius); background: var(--bs-tertiary-bg); }
.nex-consultation-apercu img { object-fit: contain; }
.nex-consultation-avec-apercu .nex-consultation-infos.nex-consultation-avec-sommaire { grid-template-columns: 1fr; }
.nex-consultation-avec-apercu .nex-consultation-sommaire { display: none; }
@media (max-width: 1199.98px) { .nex-consultation-avec-apercu { grid-template-columns: 1fr; } .nex-consultation-apercu { position: static; height: 70vh; } }
.nex-texte-riche table { border-collapse: collapse; margin: .5rem 0; max-width: 100%; }
.nex-texte-riche th, .nex-texte-riche td { border: 1px solid var(--bs-border-color); padding: .25rem .5rem; vertical-align: top; }
.nex-texte-riche th { background: var(--bs-tertiary-bg); }

/* Fonds « light » en mode sombre (13/10/2026, retour de Grégory : lignes blanches dans un tableau sombre) : Bootstrap garde un fond clair fixe pour .table-light et
   .bg-light quel que soit le mode ; en sombre, ils prennent une surface du thème (tous les thèmes : variables --bs-*-bg de chacun). Les pastilles .text-bg-light restent claires. */
[data-bs-theme=dark] .table-light {
	--bs-table-color: var(--bs-emphasis-color); --bs-table-bg: var(--bs-tertiary-bg); --bs-table-border-color: var(--bs-border-color);
	--bs-table-striped-bg: var(--bs-secondary-bg); --bs-table-striped-color: var(--bs-emphasis-color);
	--bs-table-active-bg: var(--bs-secondary-bg); --bs-table-active-color: var(--bs-emphasis-color);
	--bs-table-hover-bg: var(--bs-secondary-bg); --bs-table-hover-color: var(--bs-emphasis-color);
	color: var(--bs-table-color); border-color: var(--bs-table-border-color);
}
[data-bs-theme=dark] .bg-light:not(.badge) { background-color: var(--bs-tertiary-bg) !important; }

/* Image à deux versions (14/10/2026, logos des plateformes agréées de nex-pa) : <img class="nex-img-clair nex-img-avec-sombre"> + <img class="nex-img-sombre"> ;
   la version claire est cachée en mode sombre, la version sombre n'apparaît qu'en mode sombre (sans version sombre : la version claire reste affichée). */
.nex-img-sombre { display: none; }
[data-bs-theme=dark] .nex-img-clair.nex-img-avec-sombre { display: none; }
[data-bs-theme=dark] .nex-img-sombre { display: inline; }

/* Apps (15/10/2026, Administration > Apps) : cartes des modules dans une seule grille (rangées par groupe, groupe indiqué sur la carte : pas de blancs) */
.nex-apps-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr)); gap: 1rem; }
.nex-app { margin-bottom: 0; }
.nex-app .nex-app-icone { flex: none; width: 2.75rem; height: 2.75rem; border-radius: var(--nex-vignette-rayon, 10px); display: inline-flex; align-items: center; justify-content: center; font-size: 1.25rem; }
.nex-app[data-etat=inactif] .nex-app-icone { filter: grayscale(.7); opacity: .75; }
.nex-app-groupe { font-size: .7rem; letter-spacing: .05em; text-transform: uppercase; color: var(--bs-secondary-color); margin-top: .1rem; }
