/* ==========================================================================
   GSS — thème de l'application (clair / sombre)
   Bootstrap 5.3 fournit la base ; ce fichier définit l'identité :
   - encre graphite et bleu pétrole, ambre « signalisation » pour l'accent ;
   - Barlow (inspirée des panneaux routiers) pour le texte,
     Barlow Semi Condensed pour les titres, les chiffres et les plaques.
   ========================================================================== */

/* ---------- Polices (fichiers locaux, aucun CDN) ---------- */
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 400; font-display: swap; src: url("../vendor/fonts/barlow-latin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 500; font-display: swap; src: url("../vendor/fonts/barlow-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 600; font-display: swap; src: url("../vendor/fonts/barlow-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow"; font-style: normal; font-weight: 700; font-display: swap; src: url("../vendor/fonts/barlow-latin-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Semi Condensed"; font-style: normal; font-weight: 500; font-display: swap; src: url("../vendor/fonts/barlow-semi-condensed-latin-500-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Semi Condensed"; font-style: normal; font-weight: 600; font-display: swap; src: url("../vendor/fonts/barlow-semi-condensed-latin-600-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Semi Condensed"; font-style: normal; font-weight: 700; font-display: swap; src: url("../vendor/fonts/barlow-semi-condensed-latin-700-normal.woff2") format("woff2"); }

/* ---------- Jetons de couleur ---------- */
:root,
[data-bs-theme="light"] {
	--gss-bg: #eef1f4;
	--gss-surface: #ffffff;
	--gss-surface-2: #f6f8fa;
	--gss-surface-3: #e9edf1;
	--gss-border: #d8dee5;
	--gss-border-strong: #b9c3cd;
	--gss-text: #16202a;
	--gss-muted: #58656f;
	--gss-faint: #8a96a1;

	--gss-primary: #0d6972;
	--gss-primary-hover: #0a555c;
	--gss-primary-soft: #e0eff0;
	--gss-on-primary: #ffffff;

	--gss-accent: #d48a00;
	--gss-accent-soft: #fff1d6;
	--gss-accent-ink: #6b4500;

	--gss-success: #1d7a4b;
	--gss-success-soft: #e2f3e9;
	--gss-warning: #9a5d00;
	--gss-warning-soft: #fdf0d7;
	--gss-danger: #b3261e;
	--gss-danger-soft: #fbe6e4;
	--gss-info: #2c5c98;
	--gss-info-soft: #e4ecf7;

	--gss-rail: #15202a;
	--gss-rail-2: #1c2a36;
	--gss-rail-text: #c3cdd6;
	--gss-rail-muted: #7f8e9b;

	--gss-plate: #fbfbf6;
	--gss-plate-ink: #111820;
	--gss-plate-band: #0d6972;

	--gss-shadow: 0 1px 2px rgba(16, 24, 32, .06), 0 1px 1px rgba(16, 24, 32, .04);
	--gss-shadow-pop: 0 8px 28px rgba(16, 24, 32, .18);
	--gss-radius: 8px;
	--gss-radius-sm: 5px;

	--gss-font: "Barlow", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	--gss-font-cond: "Barlow Semi Condensed", "Barlow", system-ui, sans-serif;
}

[data-bs-theme="dark"] {
	--gss-bg: #0e141a;
	--gss-surface: #151d25;
	--gss-surface-2: #19232d;
	--gss-surface-3: #202c38;
	--gss-border: #2a3642;
	--gss-border-strong: #3a4957;
	--gss-text: #e3e9ee;
	--gss-muted: #9aa8b4;
	--gss-faint: #6d7c89;

	--gss-primary: #43b3bd;
	--gss-primary-hover: #5cc3cc;
	--gss-primary-soft: rgba(67, 179, 189, .15);
	--gss-on-primary: #06181b;

	--gss-accent: #f0a73a;
	--gss-accent-soft: rgba(240, 167, 58, .14);
	--gss-accent-ink: #f6c47a;

	--gss-success: #4cc38a;
	--gss-success-soft: rgba(76, 195, 138, .14);
	--gss-warning: #e9aa4a;
	--gss-warning-soft: rgba(233, 170, 74, .14);
	--gss-danger: #f07167;
	--gss-danger-soft: rgba(240, 113, 103, .14);
	--gss-info: #79a7e6;
	--gss-info-soft: rgba(121, 167, 230, .14);

	--gss-rail: #0a0f14;
	--gss-rail-2: #121a22;
	--gss-rail-text: #b9c4ce;
	--gss-rail-muted: #6f7e8b;

	--gss-plate: #e9ebe4;
	--gss-plate-ink: #0c1117;
	--gss-plate-band: #2f8f98;

	--gss-shadow: 0 1px 2px rgba(0, 0, 0, .35);
	--gss-shadow-pop: 0 10px 30px rgba(0, 0, 0, .5);
}

/* Correspondance avec les variables de Bootstrap */
:root,
[data-bs-theme] {
	--bs-body-font-family: var(--gss-font);
	--bs-body-font-size: .9375rem;
	--bs-body-line-height: 1.45;
	--bs-body-bg: var(--gss-bg);
	--bs-body-color: var(--gss-text);
	--bs-secondary-color: var(--gss-muted);
	--bs-tertiary-bg: var(--gss-surface-2);
	--bs-secondary-bg: var(--gss-surface-3);
	--bs-border-color: var(--gss-border);
	--bs-border-radius: var(--gss-radius-sm);
	--bs-link-color: var(--gss-primary);
	--bs-link-hover-color: var(--gss-primary-hover);
	--bs-link-color-rgb: 13, 105, 114;
	--bs-emphasis-color: var(--gss-text);
	--bs-heading-color: var(--gss-text);
	--bs-focus-ring-color: rgba(13, 105, 114, .3);
}
[data-bs-theme="dark"] {
	--bs-link-color-rgb: 67, 179, 189;
	--bs-focus-ring-color: rgba(67, 179, 189, .35);
}

/* ---------- Base ---------- */
html { -webkit-text-size-adjust: 100%; }
body {
	background: var(--gss-bg);
	color: var(--gss-text);
	font-family: var(--gss-font);
	font-feature-settings: "tnum" 1;
	min-height: 100vh;
}
h1, h2, h3, h4, h5, h6 { font-family: var(--gss-font-cond); font-weight: 600; letter-spacing: .005em; color: var(--gss-text); }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
:focus-visible { outline: 2px solid var(--gss-primary); outline-offset: 2px; }
::selection { background: var(--gss-accent-soft); color: var(--gss-text); }
.text-muted { color: var(--gss-muted) !important; }
.text-danger { color: var(--gss-danger) !important; }
.num, td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; }
td.num, td.nowrap { white-space: nowrap; }
.visually-hidden-focusable:focus { position: fixed; top: .5rem; left: .5rem; z-index: 2000; background: var(--gss-surface); padding: .5rem 1rem; border-radius: var(--gss-radius-sm); }

@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* ---------- Structure ---------- */
.gss-app {
	display: grid;
	grid-template-columns: 248px minmax(0, 1fr);
	min-height: 100vh;
}

/* Barre latérale */
.gss-rail {
	background: var(--gss-rail);
	color: var(--gss-rail-text);
	position: sticky;
	top: 0;
	height: 100vh;
	overflow-y: auto;
	display: flex;
	flex-direction: column;
	scrollbar-width: thin;
	scrollbar-color: var(--gss-rail-2) transparent;
}
.gss-brand {
	display: flex;
	align-items: center;
	gap: .6rem;
	padding: 1.15rem 1.25rem 1rem;
	color: #fff;
	text-decoration: none !important;
}
.gss-brand-mark {
	font-family: var(--gss-font-cond);
	font-weight: 700;
	font-size: 1.6rem;
	letter-spacing: .04em;
	line-height: 1;
	color: #fff;
}
.gss-brand-mark span { color: var(--gss-accent); }
.gss-brand-name { font-size: .78rem; color: var(--gss-rail-muted); line-height: 1.2; }

.gss-nav { list-style: none; margin: 0; padding: .25rem .6rem 1rem; }
.gss-nav a,
.gss-nav summary {
	display: flex;
	align-items: center;
	gap: .7rem;
	padding: .5rem .7rem;
	border-radius: var(--gss-radius-sm);
	color: var(--gss-rail-text);
	font-weight: 500;
	cursor: pointer;
	text-decoration: none;
	position: relative;
	list-style: none;
}
.gss-nav summary::-webkit-details-marker { display: none; }
.gss-nav summary::after {
	content: "\f282";
	font-family: "bootstrap-icons";
	margin-left: auto;
	font-size: .75rem;
	color: var(--gss-rail-muted);
	transition: transform .15s ease;
}
.gss-nav details[open] > summary::after { transform: rotate(180deg); }
.gss-nav a:hover,
.gss-nav summary:hover { background: var(--gss-rail-2); color: #fff; text-decoration: none; }
.gss-nav .bi { font-size: 1.05rem; color: var(--gss-rail-muted); width: 1.2rem; text-align: center; }
.gss-nav ul { list-style: none; margin: .1rem 0 .35rem; padding: 0 0 0 1.9rem; }
.gss-nav ul a { padding: .38rem .7rem; font-weight: 400; font-size: .9rem; }
.gss-nav ul .bi { display: none; }
.gss-nav a.active {
	background: var(--gss-rail-2);
	color: #fff;
}
.gss-nav a.active::before {
	content: "";
	position: absolute;
	left: -.6rem;
	top: .35rem;
	bottom: .35rem;
	width: 3px;
	border-radius: 0 2px 2px 0;
	background: var(--gss-accent);
}
.gss-nav a.active .bi { color: var(--gss-accent); }
.gss-rail-foot {
	margin-top: auto;
	padding: .9rem 1.25rem 1.1rem;
	border-top: 1px solid var(--gss-rail-2);
	font-size: .78rem;
	color: var(--gss-rail-muted);
}
.gss-rail-foot .gss-mode {
	display: inline-flex;
	align-items: center;
	gap: .35rem;
	margin-top: .35rem;
	color: var(--gss-accent);
}

/* Colonne principale */
.gss-main { min-width: 0; display: flex; flex-direction: column; }

.gss-topbar {
	position: sticky;
	top: 0;
	z-index: 1020;
	display: flex;
	align-items: center;
	gap: 1rem;
	min-height: 60px;
	padding: .55rem 1.5rem;
	background: color-mix(in srgb, var(--gss-bg) 88%, transparent);
	backdrop-filter: saturate(1.4) blur(8px);
	border-bottom: 1px solid var(--gss-border);
}
.gss-topbar-titles { min-width: 0; flex: 1; }
.gss-crumbs { font-size: .8rem; color: var(--gss-muted); margin: 0 0 .05rem; }
.gss-crumbs a { color: var(--gss-muted); }
.gss-crumbs .bi { font-size: .7rem; margin: 0 .25rem; }
.gss-title {
	font-family: var(--gss-font-cond);
	font-weight: 700;
	font-size: 1.45rem;
	line-height: 1.15;
	margin: 0;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}
.gss-subtitle { color: var(--gss-muted); font-size: .88rem; margin: .1rem 0 0; }
.gss-topbar-actions { display: flex; align-items: center; gap: .4rem; flex-shrink: 0; }
/* Bouton ☰ : masqué par défaut (il l'emporte sur .btn, déclaré plus bas) */
.gss-topbar .gss-rail-toggle { display: none; }

.gss-user {
	display: inline-flex;
	align-items: center;
	gap: .55rem;
	padding: .25rem .5rem .25rem .3rem;
	border-radius: 999px;
	border: 1px solid var(--gss-border);
	background: var(--gss-surface);
	color: var(--gss-text);
	font-weight: 500;
	font-size: .9rem;
}
.gss-user:hover { border-color: var(--gss-border-strong); text-decoration: none; }
.gss-avatar {
	width: 28px;
	height: 28px;
	border-radius: 50%;
	display: grid;
	place-items: center;
	background: var(--gss-primary);
	color: var(--gss-on-primary);
	font-family: var(--gss-font-cond);
	font-weight: 700;
	font-size: .85rem;
}

/* Bande des véhicules à l'atelier (bons en cours) */
.gss-bay {
	display: flex;
	align-items: center;
	gap: .75rem;
	padding: .55rem 1.5rem;
	border-bottom: 1px solid var(--gss-border);
	background: var(--gss-surface);
	min-height: 52px;
}
.gss-bay-label {
	display: flex;
	flex-direction: column;
	flex-shrink: 0;
	font-size: .72rem;
	color: var(--gss-muted);
	line-height: 1.15;
	min-width: 5.5rem;
}
.gss-bay-label strong { font-family: var(--gss-font-cond); font-size: 1.15rem; color: var(--gss-text); }
.gss-bay-list {
	display: flex;
	gap: .5rem;
	overflow-x: auto;
	padding: .15rem .1rem;
	scrollbar-width: thin;
	flex: 1;
	min-width: 0;
}
.gss-bay-empty { color: var(--gss-faint); font-size: .85rem; }
.gss-plate {
	flex-shrink: 0;
	display: inline-flex;
	align-items: stretch;
	border: 1.5px solid var(--gss-plate-ink);
	border-radius: 4px;
	background: var(--gss-plate);
	color: var(--gss-plate-ink);
	text-decoration: none !important;
	box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .6);
	transition: transform .12s ease, box-shadow .12s ease;
	max-width: 15rem;
}
.gss-plate:hover { transform: translateY(-1px); box-shadow: var(--gss-shadow-pop); }
.gss-plate.is-current { outline: 2px solid var(--gss-accent); outline-offset: 2px; }
.gss-plate-token {
	display: grid;
	place-items: center;
	min-width: 1.9rem;
	padding: 0 .35rem;
	background: var(--gss-plate-band);
	color: #fff;
	font-family: var(--gss-font-cond);
	font-weight: 700;
	font-size: .95rem;
}
.gss-plate-body { display: flex; flex-direction: column; justify-content: center; padding: .12rem .5rem; min-width: 0; }
.gss-plate-num {
	font-family: var(--gss-font-cond);
	font-weight: 700;
	font-size: .98rem;
	letter-spacing: .06em;
	line-height: 1.1;
	white-space: nowrap;
}
.gss-plate-meta { font-size: .68rem; color: #4a5561; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.2; }
.gss-bay-waiting { flex-shrink: 0; }
/* Téléphone : compteur et menus « prêts » / « en attente » sur une ligne (icône + nombre), les plaques sur
   toute la largeur dessous, à faire défiler du doigt (une plaque s'arrête au bord) */
@media (max-width: 767.98px) {
	.gss-bay { flex-wrap: wrap; gap: .4rem .5rem; padding: .45rem .75rem .5rem; min-height: 0; }
	.gss-bay-label { flex-direction: row; align-items: baseline; gap: .3rem; min-width: 0; margin-right: auto; font-size: .8rem; }
	.gss-bay-list { order: 3; flex: 1 0 100%; scroll-snap-type: x proximity; padding-bottom: .25rem; -webkit-overflow-scrolling: touch; }
	.gss-bay-list .gss-plate { scroll-snap-align: start; max-width: 11.5rem; }
	.gss-bay-waiting .btn { padding: .25rem .55rem; }
	.gss-bay-waiting .gss-bay-texte { display: none; }
	.gss-bay-waiting .dropdown-menu { max-width: calc(100vw - 1.5rem); max-height: 60vh; overflow-y: auto; }
	.gss-bay-waiting .dropdown-item { white-space: normal; }
}

.gss-content { padding: 1.25rem 1.5rem 2rem; flex: 1; }
.gss-page-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1rem; }
.gss-footer { padding: .9rem 1.5rem; color: var(--gss-faint); font-size: .8rem; border-top: 1px solid var(--gss-border); }

/* Grand écran : bouton ☰ qui réduit le menu à ses icônes ou le masque (Configuration → Affichage) */
@media (min-width: 992px) {
	html:not([data-rail-mode="fixe"]) .gss-topbar .gss-rail-toggle { display: inline-flex; }
	html.gss-rail-ferme[data-rail-mode="masquer"] .gss-app { grid-template-columns: minmax(0, 1fr); }
	html.gss-rail-ferme[data-rail-mode="masquer"] .gss-rail { display: none; }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-app { grid-template-columns: 64px minmax(0, 1fr); }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail {
		width: 64px;
		z-index: 1030;
		overflow-x: hidden;
		transition: width .18s ease, box-shadow .18s ease;
	}
	/* Survol ou navigation au clavier : le menu s'ouvre par-dessus la page */
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:hover,
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:focus-within { width: 248px; box-shadow: var(--gss-shadow-pop); }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-nav a,
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-nav summary { white-space: nowrap; }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:not(:hover):not(:focus-within) :is(.gss-nav span, .gss-brand-name, .gss-nav ul, .gss-rail-foot) { display: none; }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:not(:hover):not(:focus-within) .gss-nav summary::after { display: none; }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:not(:hover):not(:focus-within) .gss-brand { padding-left: .95rem; padding-right: .5rem; }
	html.gss-rail-ferme[data-rail-mode="icones"] .gss-rail:not(:hover):not(:focus-within) .gss-brand-mark { display: none; }
}

/* Mobile : barre latérale en tiroir */
@media (max-width: 991.98px) {
	.gss-app { grid-template-columns: minmax(0, 1fr); }
	.gss-rail {
		position: fixed;
		inset: 0 auto 0 0;
		width: 272px;
		z-index: 1045;
		transform: translateX(-100%);
		transition: transform .2s ease;
		box-shadow: var(--gss-shadow-pop);
	}
	.gss-app.rail-open .gss-rail { transform: none; }
	.gss-app.rail-open::after {
		content: "";
		position: fixed;
		inset: 0;
		background: rgba(8, 12, 16, .45);
		z-index: 1040;
	}
	.gss-topbar .gss-rail-toggle { display: inline-flex; }
	.gss-topbar { padding: .5rem 1rem; gap: .6rem; }
	.gss-bay { padding: .5rem 1rem; }
	.gss-content { padding: 1rem 1rem 1.5rem; }
	.gss-title { font-size: 1.2rem; }
	.gss-subtitle { display: none; }
	.gss-user-name { display: none; }
	/* Boutons de la barre du haut : icônes seules (le libellé reste en info-bulle), la barre ne déborde pas */
	.gss-topbar-actions { flex-shrink: 1; min-width: 0; overflow-x: auto; scrollbar-width: none; }
	.gss-topbar-actions .btn:has(> .bi) > span { display: none; }
	.gss-topbar-actions .btn:has(> .bi) { --bs-btn-padding-x: .5rem; }
}
/* Téléphone : une page avec ses propres boutons (bon, caisse…) les met sur une seconde ligne, sous le titre,
   au lieu de rogner le titre et le compte */
@media (max-width: 575.98px) {
	.gss-topbar:has(.gss-topbar-actions > :nth-child(4)) { flex-wrap: wrap; row-gap: .35rem; }
	.gss-topbar:has(.gss-topbar-actions > :nth-child(4)) .gss-topbar-titles { flex: 1 1 calc(100% - 3rem); min-width: 0; }
	.gss-topbar-actions:has(> :nth-child(4)) { order: 3; flex: 1 0 100%; justify-content: flex-end; }
	.gss-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}

/* ---------- Boutons ---------- */
.btn {
	--bs-btn-font-weight: 500;
	--bs-btn-padding-y: .42rem;
	--bs-btn-padding-x: .85rem;
	--bs-btn-font-size: .92rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: .4rem;
}
.btn-primary {
	--bs-btn-bg: var(--gss-primary);
	--bs-btn-border-color: var(--gss-primary);
	--bs-btn-color: var(--gss-on-primary);
	--bs-btn-hover-bg: var(--gss-primary-hover);
	--bs-btn-hover-border-color: var(--gss-primary-hover);
	--bs-btn-hover-color: var(--gss-on-primary);
	--bs-btn-active-bg: var(--gss-primary-hover);
	--bs-btn-active-border-color: var(--gss-primary-hover);
	--bs-btn-active-color: var(--gss-on-primary);
	--bs-btn-disabled-bg: var(--gss-primary);
	--bs-btn-disabled-border-color: var(--gss-primary);
}
.btn-secondary {
	--bs-btn-bg: var(--gss-surface);
	--bs-btn-border-color: var(--gss-border-strong);
	--bs-btn-color: var(--gss-text);
	--bs-btn-hover-bg: var(--gss-surface-3);
	--bs-btn-hover-border-color: var(--gss-border-strong);
	--bs-btn-hover-color: var(--gss-text);
	--bs-btn-active-bg: var(--gss-surface-3);
	--bs-btn-active-color: var(--gss-text);
	--bs-btn-active-border-color: var(--gss-border-strong);
}
.btn-ghost {
	--bs-btn-bg: transparent;
	--bs-btn-border-color: transparent;
	--bs-btn-color: var(--gss-muted);
	--bs-btn-hover-bg: var(--gss-surface-3);
	--bs-btn-hover-color: var(--gss-text);
	--bs-btn-active-bg: var(--gss-surface-3);
	--bs-btn-active-color: var(--gss-text);
}
.btn-danger {
	--bs-btn-bg: var(--gss-danger);
	--bs-btn-border-color: var(--gss-danger);
	--bs-btn-hover-bg: color-mix(in srgb, var(--gss-danger) 85%, #000);
	--bs-btn-hover-border-color: color-mix(in srgb, var(--gss-danger) 85%, #000);
}
.btn-outline-danger { --bs-btn-color: var(--gss-danger); --bs-btn-border-color: var(--gss-danger); --bs-btn-hover-bg: var(--gss-danger); --bs-btn-hover-border-color: var(--gss-danger); }
.btn-icon { width: 36px; height: 36px; padding: 0; border-radius: 50%; }
.btn-icon .bi { font-size: 1.05rem; }
.btn-sm { --bs-btn-padding-y: .25rem; --bs-btn-padding-x: .6rem; --bs-btn-font-size: .84rem; }
.btn[aria-busy="true"] { pointer-events: none; opacity: .75; }

/* ---------- Cartes ---------- */
.gss-card {
	background: var(--gss-surface);
	border: 1px solid var(--gss-border);
	border-radius: var(--gss-radius);
	box-shadow: var(--gss-shadow);
	margin-bottom: 1.25rem;
	min-width: 0;
}
.gss-card-head {
	display: flex;
	flex-wrap: wrap;   /* actions sous le titre quand la place manque (téléphone) */
	align-items: flex-start;
	gap: .6rem 1rem;
	padding: .85rem 1.1rem;
	border-bottom: 1px solid var(--gss-border);
}
.gss-card-titles { flex: 1 1 15rem; min-width: 0; }
.gss-card-title { font-size: 1.08rem; margin: 0; display: flex; align-items: center; gap: .5rem; }
.gss-card-title .bi { color: var(--gss-primary); }
.gss-card-sub { color: var(--gss-muted); font-size: .85rem; margin: .15rem 0 0; }
.gss-card-actions { display: flex; flex-wrap: wrap; gap: .4rem; }
.gss-card-body { padding: 1rem 1.1rem; }
.gss-card-body.flush { padding: 0; }
.gss-card-foot {
	padding: .75rem 1.1rem;
	border-top: 1px solid var(--gss-border);
	background: var(--gss-surface-2);
	border-radius: 0 0 var(--gss-radius) var(--gss-radius);
	display: flex;
	gap: .5rem;
	align-items: center;
	flex-wrap: wrap;
}

/* ---------- Pastilles, messages, états vides ---------- */
.gss-badge {
	display: inline-flex;
	align-items: center;
	gap: .3rem;
	padding: .12rem .5rem;
	border-radius: 999px;
	font-size: .78rem;
	font-weight: 600;
	line-height: 1.4;
	white-space: nowrap;
	background: var(--gss-surface-3);
	color: var(--gss-muted);
}
.gss-badge-primary { background: var(--gss-primary-soft); color: var(--gss-primary); }
.gss-badge-success { background: var(--gss-success-soft); color: var(--gss-success); }
.gss-badge-warning { background: var(--gss-warning-soft); color: var(--gss-warning); }
.gss-badge-danger { background: var(--gss-danger-soft); color: var(--gss-danger); }
.gss-badge-info { background: var(--gss-info-soft); color: var(--gss-info); }
.gss-badge-accent { background: var(--gss-accent-soft); color: var(--gss-accent-ink); }

.gss-notice {
	display: flex;
	gap: .7rem;
	align-items: flex-start;
	padding: .75rem 1rem;
	border-radius: var(--gss-radius-sm);
	border: 1px solid transparent;
	margin-bottom: 1rem;
	font-size: .92rem;
}
.gss-notice > .bi { font-size: 1.1rem; line-height: 1.3; }
.gss-notice-info { background: var(--gss-info-soft); color: var(--gss-text); border-color: color-mix(in srgb, var(--gss-info) 25%, transparent); }
.gss-notice-info > .bi { color: var(--gss-info); }
.gss-notice-success { background: var(--gss-success-soft); border-color: color-mix(in srgb, var(--gss-success) 25%, transparent); }
.gss-notice-success > .bi { color: var(--gss-success); }
.gss-notice-warning { background: var(--gss-warning-soft); border-color: color-mix(in srgb, var(--gss-warning) 30%, transparent); }
.gss-notice-warning > .bi { color: var(--gss-warning); }
.gss-notice-danger { background: var(--gss-danger-soft); border-color: color-mix(in srgb, var(--gss-danger) 30%, transparent); }
.gss-notice-danger > .bi { color: var(--gss-danger); }

.gss-empty { text-align: center; padding: 2.5rem 1rem; color: var(--gss-muted); }
.gss-empty-icon { font-size: 2rem; color: var(--gss-faint); }
.gss-empty-title { font-weight: 600; color: var(--gss-text); margin: .5rem 0 .25rem; }
.gss-empty-text { margin: 0 auto; max-width: 36rem; }
.gss-empty-action { margin-top: 1rem; }

/* ---------- Tableaux ---------- */
.gss-table-wrap { overflow-x: auto; position: relative; }  /* relative : les libellés masqués (visually-hidden) restent dans le cadre */
.table {
	--bs-table-bg: transparent;
	--bs-table-color: var(--gss-text);
	--bs-table-border-color: var(--gss-border);
	--bs-table-striped-bg: var(--gss-surface-2);
	--bs-table-hover-bg: var(--gss-primary-soft);
	--bs-table-striped-color: var(--gss-text);
	--bs-table-hover-color: var(--gss-text);
	margin-bottom: 0;
}
.table > thead > tr > th,
.table > thead > tr > td {
	background: var(--gss-surface-2);
	color: var(--gss-muted);
	font-weight: 600;
	font-size: .8rem;
	letter-spacing: .01em;
	border-bottom-width: 1px;
	white-space: nowrap;
	vertical-align: middle;
}
.table > :not(caption) > * > * { padding: .5rem .75rem; vertical-align: middle; }
.gss-table-empty { text-align: center; color: var(--gss-muted); padding: 1.5rem !important; }
.gss-table td .gss-badge + .gss-badge { margin-left: .25rem; }

/* ---------- Formulaires ---------- */
.form-control,
.form-select {
	background-color: var(--gss-surface);
	border-color: var(--gss-border-strong);
	color: var(--gss-text);
}
.form-control:focus,
.form-select:focus { border-color: var(--gss-primary); box-shadow: 0 0 0 .2rem var(--bs-focus-ring-color); }
.form-label { font-weight: 600; font-size: .86rem; margin-bottom: .3rem; }
.form-text { color: var(--gss-muted); font-size: .8rem; }
.form-check-input:checked { background-color: var(--gss-primary); border-color: var(--gss-primary); }
.form-check-input:focus { box-shadow: 0 0 0 .2rem var(--bs-focus-ring-color); border-color: var(--gss-primary); }
.gss-field { margin-bottom: 1rem; }
.gss-field.is-invalid .form-control,
.gss-field.is-invalid .form-select { border-color: var(--gss-danger); }
.gss-field.is-invalid .invalid-feedback { display: block; color: var(--gss-danger); }
.gss-required { color: var(--gss-danger); }
.gss-form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); column-gap: 1.1rem; }
.gss-form-grid .span-all { grid-column: 1 / -1; }

/* ---------- Onglets ---------- */
.gss-tabs {
	display: flex;
	gap: .25rem;
	border-bottom: 1px solid var(--gss-border);
	margin-bottom: 1.25rem;
	overflow-x: auto;
}
.gss-tab {
	border: 0;
	background: none;
	padding: .6rem .9rem;
	color: var(--gss-muted);
	font-weight: 600;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
	white-space: nowrap;
	display: inline-flex;
	align-items: center;
	gap: .45rem;
}
.gss-tab:hover { color: var(--gss-text); }
.gss-tab.active { color: var(--gss-text); border-bottom-color: var(--gss-accent); }
.gss-tab-panel[hidden] { display: none !important; }

/* ---------- Notifications (toasts) ---------- */
.gss-toasts {
	position: fixed;
	right: 1rem;
	bottom: 1rem;
	z-index: 2000;
	display: flex;
	flex-direction: column;
	gap: .5rem;
	width: min(380px, calc(100vw - 2rem));
	pointer-events: none;
}
.gss-toast {
	pointer-events: auto;
	display: flex;
	gap: .65rem;
	align-items: flex-start;
	padding: .75rem .9rem;
	border-radius: var(--gss-radius);
	background: var(--gss-surface);
	color: var(--gss-text);
	border: 1px solid var(--gss-border);
	border-left: 4px solid var(--gss-info);
	box-shadow: var(--gss-shadow-pop);
	animation: gss-toast-in .18s ease-out;
}
.gss-toast.is-success { border-left-color: var(--gss-success); }
.gss-toast.is-error { border-left-color: var(--gss-danger); }
.gss-toast.is-warning { border-left-color: var(--gss-accent); }
.gss-toast > .bi { font-size: 1.1rem; line-height: 1.25; }
.gss-toast.is-success > .bi { color: var(--gss-success); }
.gss-toast.is-error > .bi { color: var(--gss-danger); }
.gss-toast.is-warning > .bi { color: var(--gss-accent); }
.gss-toast.is-info > .bi { color: var(--gss-info); }
.gss-toast-body { flex: 1; min-width: 0; font-size: .9rem; }
.gss-toast-title { font-weight: 600; display: block; }
.gss-toast-close { border: 0; background: none; color: var(--gss-faint); padding: 0 .1rem; line-height: 1; }
.gss-toast.is-leaving { opacity: 0; transform: translateY(6px); transition: opacity .2s, transform .2s; }
@keyframes gss-toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* ---------- Menus déroulants, fenêtres ---------- */
.dropdown-menu {
	--bs-dropdown-bg: var(--gss-surface);
	--bs-dropdown-border-color: var(--gss-border);
	--bs-dropdown-link-color: var(--gss-text);
	--bs-dropdown-link-hover-bg: var(--gss-surface-3);
	--bs-dropdown-link-active-bg: var(--gss-primary);
	--bs-dropdown-font-size: .92rem;
	box-shadow: var(--gss-shadow-pop);
}
.modal {
	--bs-modal-bg: var(--gss-surface);
	--bs-modal-border-color: var(--gss-border);
	--bs-modal-header-border-color: var(--gss-border);
	--bs-modal-footer-border-color: var(--gss-border);
}
.modal-title, .modal-header h3 { font-size: 1.15rem; margin: 0; }

/* ---------- Accueil ---------- */
.gss-shortcuts {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
	gap: .75rem;
	margin-bottom: 1.5rem;
}
.gss-shortcut {
	display: flex;
	gap: .8rem;
	align-items: flex-start;
	padding: .95rem 1rem;
	border-radius: var(--gss-radius);
	border: 1px solid var(--gss-border);
	background: var(--gss-surface);
	color: var(--gss-text);
	box-shadow: var(--gss-shadow);
	text-decoration: none !important;
	transition: border-color .12s ease, transform .12s ease;
}
.gss-shortcut:hover { border-color: var(--gss-primary); transform: translateY(-1px); }
.gss-shortcut .bi {
	font-size: 1.25rem;
	color: var(--gss-primary);
	width: 2.3rem;
	height: 2.3rem;
	display: grid;
	place-items: center;
	border-radius: var(--gss-radius-sm);
	background: var(--gss-primary-soft);
	flex-shrink: 0;
}
.gss-shortcut:first-child .bi { background: var(--gss-accent-soft); color: var(--gss-accent-ink); }
.gss-shortcut strong { display: block; font-family: var(--gss-font-cond); font-size: 1.08rem; font-weight: 600; }
.gss-shortcut span { display: block; color: var(--gss-muted); font-size: .84rem; line-height: 1.3; }

.gss-work-list { list-style: none; margin: 0; padding: 0; }
.gss-work-list li + li { border-top: 1px solid var(--gss-border); }
.gss-work-list a {
	display: grid;
	grid-template-columns: auto 1fr auto;
	gap: .85rem;
	align-items: center;
	padding: .65rem 1.1rem;
	color: var(--gss-text);
	text-decoration: none !important;
}
.gss-work-list a:hover { background: var(--gss-surface-2); }
.gss-work-list .gss-plate { pointer-events: none; }
.gss-work-client { min-width: 0; }
.gss-work-client strong { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gss-work-client span { color: var(--gss-muted); font-size: .84rem; }

/* ---------- Matrice des droits ---------- */
.gss-perm-group { border: 1px solid var(--gss-border); border-radius: var(--gss-radius); margin-bottom: .85rem; background: var(--gss-surface); }
.gss-perm-head {
	display: flex;
	align-items: center;
	gap: .75rem;
	padding: .6rem .9rem;
	background: var(--gss-surface-2);
	border-bottom: 1px solid var(--gss-border);
	border-radius: var(--gss-radius) var(--gss-radius) 0 0;
}
.gss-perm-head h3 { font-size: 1rem; margin: 0; flex: 1; }
.gss-perm-count { font-size: .8rem; color: var(--gss-muted); }
.gss-perm-list { list-style: none; margin: 0; padding: .35rem 0; columns: 2 320px; column-gap: 0; }
.gss-perm-list li { break-inside: avoid; padding: .3rem .9rem; }
.gss-perm-list .form-check { margin: 0; }
.gss-perm-list .form-check-label { font-size: .92rem; }
.gss-perm-code { display: block; font-size: .72rem; color: var(--gss-faint); }
.gss-perm-inclut { display: block; font-size: .76rem; color: var(--gss-muted); }
.gss-perm-page { color: var(--gss-primary); font-size: .8rem; margin-left: .2rem; }
.gss-perm-new { color: var(--gss-accent-ink); background: var(--gss-accent-soft); border-radius: 3px; padding: 0 .3rem; font-size: .7rem; font-weight: 600; margin-left: .3rem; }
.gss-perm-disabled { opacity: .55; }

.gss-override { display: inline-flex; border: 1px solid var(--gss-border-strong); border-radius: var(--gss-radius-sm); overflow: hidden; flex-shrink: 0; }
.gss-override input { position: absolute; opacity: 0; pointer-events: none; }
.gss-override label { padding: .15rem .5rem; font-size: .76rem; cursor: pointer; color: var(--gss-muted); border-left: 1px solid var(--gss-border); }
.gss-override label:first-of-type { border-left: 0; }
.gss-override input:checked + label { background: var(--gss-surface-3); color: var(--gss-text); font-weight: 600; }
.gss-override input[value="1"]:checked + label { background: var(--gss-success-soft); color: var(--gss-success); }
.gss-override input[value="0"]:checked + label { background: var(--gss-danger-soft); color: var(--gss-danger); }
.gss-override input:focus-visible + label { outline: 2px solid var(--gss-primary); outline-offset: -2px; }
.gss-perm-row { display: flex; align-items: center; justify-content: space-between; gap: .75rem; }
.gss-perm-state { font-size: .74rem; color: var(--gss-muted); }
.gss-perm-state.is-on { color: var(--gss-success); }

.gss-sticky-actions {
	position: sticky;
	bottom: 0;
	z-index: 10;
	display: flex;
	gap: .5rem;
	align-items: center;
	flex-wrap: wrap;
	padding: .75rem 1rem;
	margin: 0 -1rem;
	background: color-mix(in srgb, var(--gss-bg) 92%, transparent);
	backdrop-filter: blur(6px);
	border-top: 1px solid var(--gss-border);
}

/* ---------- Configuration ---------- */
.gss-settings-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 1.25rem; padding: .9rem 0; border-bottom: 1px solid var(--gss-border); }
.gss-settings-row:last-child { border-bottom: 0; }
.gss-settings-row .gss-field { margin-bottom: 0; }
.gss-settings-label strong { display: block; }
.gss-settings-label p { color: var(--gss-muted); font-size: .84rem; margin: .15rem 0 0; }
.gss-settings-label .gss-badge { margin-top: .35rem; }
@media (max-width: 767.98px) { .gss-settings-row { grid-template-columns: 1fr; gap: .5rem; } }
.gss-volume-table td { padding: .25rem .4rem !important; }
.gss-volume-table input { max-width: 9rem; }
.gss-kv { display: grid; grid-template-columns: max-content 1fr; gap: .4rem 1.25rem; margin: 0; font-size: .9rem; }
.gss-kv dt { color: var(--gss-muted); font-weight: 500; }
.gss-kv dd { margin: 0; overflow-wrap: anywhere; }

/* ---------- Calendrier de présence ---------- */
.gss-calendar-title { margin: .5rem 0 .75rem; }
.gss-calendar-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.gss-calendar-head { text-align: center; font-weight: 600; font-size: .85rem; color: var(--gss-muted); padding: .3rem 0; }
.gss-calendar-day {
	min-height: 76px;
	border: 1px solid var(--gss-border);
	border-radius: var(--gss-radius-sm);
	background: var(--gss-surface);
	padding: .3rem .4rem;
	display: flex;
	flex-direction: column;
	gap: .15rem;
}
.gss-calendar-day.is-other { background: var(--gss-surface-2); opacity: .55; }
.gss-calendar-day.has-time { border-color: color-mix(in srgb, var(--gss-primary) 45%, var(--gss-border)); }
.gss-calendar-num { font-family: var(--gss-font-cond); font-weight: 600; font-size: .9rem; color: var(--gss-muted); }
.gss-calendar-time { font-size: .78rem; background: var(--gss-primary-soft); color: var(--gss-primary); border-radius: 3px; padding: 0 .3rem; align-self: flex-start; }
.gss-calendar-details { margin-top: 1rem; }
.gss-calendar-details summary { cursor: pointer; font-weight: 600; margin-bottom: .5rem; }

/* ---------- Connexion ---------- */
.gss-login {
	min-height: 100vh;
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	background: var(--gss-surface);
}
.gss-login-side {
	background: var(--gss-rail);
	color: var(--gss-rail-text);
	padding: 3rem clamp(2rem, 5vw, 4.5rem);
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	position: relative;
	overflow: hidden;
}
.gss-login-side::after {
	/* Rappel discret des bandes de signalisation */
	content: "";
	position: absolute;
	right: -60px;
	bottom: -60px;
	width: 260px;
	height: 260px;
	background: repeating-linear-gradient(-45deg, var(--gss-accent) 0 14px, transparent 14px 28px);
	opacity: .12;
	border-radius: 50%;
}
.gss-login-mark { font-family: var(--gss-font-cond); font-weight: 700; font-size: clamp(3.5rem, 8vw, 5.5rem); line-height: .9; color: #fff; letter-spacing: .03em; }
.gss-login-mark span { color: var(--gss-accent); }
.gss-login-tagline { font-size: 1.05rem; max-width: 26rem; margin-top: 1rem; color: var(--gss-rail-text); }
.gss-login-foot { font-size: .8rem; color: var(--gss-rail-muted); }
.gss-login-main { display: grid; place-items: center; padding: 2rem 1.25rem; }
.gss-login-form { width: min(380px, 100%); }
.gss-login-form h1 { font-size: 1.7rem; margin-bottom: .35rem; }
.gss-login-bismi { font-size: 1.15rem; color: var(--gss-muted); margin-bottom: 1.75rem; }
.gss-login-form .form-control { padding: .6rem .8rem; font-size: 1rem; }
.gss-login-form .btn { width: 100%; padding: .65rem 1rem; font-size: 1rem; }
@media (max-width: 767.98px) {
	.gss-login { grid-template-columns: 1fr; }
	.gss-login-side { padding: 1.5rem 1.25rem; min-height: auto; }
	.gss-login-mark { font-size: 3rem; }
	.gss-login-tagline, .gss-login-foot { display: none; }
}

/* ---------- Page d'erreur ---------- */
.gss-error { min-height: 100vh; display: grid; place-items: center; padding: 2rem 1rem; }
.gss-error-box { max-width: 30rem; }
.gss-error-code { font-family: var(--gss-font-cond); font-weight: 700; font-size: 4.5rem; line-height: 1; color: var(--gss-accent); }

/* ---------- Listes DataTables (pages modernes et anciennes) ---------- */
.dataTables_wrapper { padding: .5rem .75rem .75rem; }
.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select,
.dataTables_wrapper .dataTables_length input { margin-left: .35rem; }
.dataTables_wrapper .dataTables_info { color: var(--gss-muted); font-size: .85rem; padding-top: .35rem; }
.dataTables_wrapper .pagination { margin: 0; flex-wrap: wrap; }
.dataTables_wrapper .dataTables_paginate { padding-top: .35rem; }
.dataTables_wrapper table.dataTable { margin: .35rem 0 !important; }
.dataTables_processing {
	background: var(--gss-surface) !important;
	color: var(--gss-text);
	border: 1px solid var(--gss-border);
	border-radius: var(--gss-radius-sm);
	box-shadow: var(--gss-shadow-pop);
}
.page-link { --bs-pagination-bg: var(--gss-surface); --bs-pagination-color: var(--gss-primary); --bs-pagination-border-color: var(--gss-border); --bs-pagination-active-bg: var(--gss-primary); --bs-pagination-active-border-color: var(--gss-primary); }
.pagination { --bs-pagination-bg: var(--gss-surface); --bs-pagination-color: var(--gss-primary); --bs-pagination-border-color: var(--gss-border); --bs-pagination-active-bg: var(--gss-primary); --bs-pagination-active-border-color: var(--gss-primary); --bs-pagination-disabled-bg: var(--gss-surface-2); --bs-pagination-hover-bg: var(--gss-surface-3); --bs-pagination-font-size: .85rem; }

/* ---------- Boutons d'action des listes (UI::action) ---------- */
.gss-acts { display: inline-flex; align-items: center; gap: .3rem; flex-wrap: nowrap; }
.gss-act {
	--act: var(--gss-muted);
	--act-soft: var(--gss-surface-3);
	display: inline-grid; place-items: center;
	width: 2rem; height: 2rem; padding: 0;
	border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm);
	background: var(--gss-surface); color: var(--act);
	font-size: 1rem; line-height: 1; cursor: pointer; text-decoration: none;
	transition: background-color .12s, border-color .12s, color .12s;
}
.gss-act:hover, .gss-act:focus-visible { background: var(--act-soft); border-color: var(--act); color: var(--act); }
.gss-act:focus-visible { outline: 2px solid var(--act); outline-offset: 1px; }
.gss-act[aria-busy="true"], .gss-act:disabled { opacity: .5; pointer-events: none; }
.gss-act-primary { --act: var(--gss-primary); --act-soft: var(--gss-primary-soft); }
.gss-act-success { --act: var(--gss-success); --act-soft: var(--gss-success-soft); }
.gss-act-warning { --act: var(--gss-warning); --act-soft: var(--gss-warning-soft); }
.gss-act-danger  { --act: var(--gss-danger);  --act-soft: var(--gss-danger-soft); }
.gss-act-info    { --act: var(--gss-info);    --act-soft: var(--gss-info-soft); }
.gss-act-accent  { --act: var(--gss-accent-ink); --act-soft: var(--gss-accent-soft); }
td .gss-acts, th .gss-acts, th > .gss-act { vertical-align: middle; }
th > .gss-acts, th > .gss-act { margin-left: .35rem; }
/* Colonne d'actions : aussi étroite que ses boutons, sans retour à la ligne */
td:has(> .gss-acts), td:has(> .gss-row-tools) { width: 1%; white-space: nowrap; }
.gss-row-tools { display: flex; align-items: center; gap: .4rem; flex-wrap: nowrap; }
.gss-flag { display: inline-grid; place-items: center; width: 1.4rem; height: 1.4rem; font-size: .95rem; cursor: help; }
.gss-flag.is-ok { color: var(--gss-success); }
.gss-flag.is-todo { color: var(--gss-warning); }

/* ---------- Aperçu du ticket (Impression) : papier blanc dans les deux thèmes ---------- */
.gss-ticket {
	--cols: 48;
	width: calc(var(--cols) * 1ch + 2.5rem); max-width: 100%;
	margin: 0 auto; padding: 1.25rem 1.25rem .5rem;
	background: #fff; color: #111; border-radius: 4px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, .18), 0 8px 24px rgba(0, 0, 0, .08);
	font-family: ui-monospace, "Cascadia Mono", Consolas, "Liberation Mono", Menlo, monospace;
	font-size: .8rem; line-height: 1.35; overflow-x: auto;
}
/* Sur téléphone, les caractères rétrécissent pour que toute la largeur du papier reste visible */
.gss-ticket-zone { container-type: inline-size; }
@container (max-width: 34rem) {
	.gss-ticket { font-size: max(.45rem, calc((100cqi - 2.5rem) / var(--cols) / .62)); padding-inline: 1rem; width: 100%; }
	.gss-ticket-cut { margin-inline: -1rem; }
}
.gss-ticket-line { white-space: pre; min-height: 1.35em; }
.gss-ticket-line.is-bold { font-weight: 700; }
.gss-ticket-line.is-large { font-weight: 800; font-size: 1.05em; }
.gss-ticket-logo { display: block; margin: 0 auto .5rem; max-width: 100%; image-rendering: pixelated; }
.gss-ticket-cut { margin: .75rem -1.25rem 0; border-top: 2px dashed #b9c3cd; }
.gss-logo-box { display: grid; grid-template-columns: minmax(10rem, 14rem) 1fr; gap: 1.25rem; align-items: start; }
.gss-logo-preview { display: grid; place-items: center; min-height: 7rem; padding: .75rem; background: #fff; border: 1px dashed var(--gss-border-strong); border-radius: var(--gss-radius-sm); }
.gss-logo-preview img { max-width: 100%; image-rendering: pixelated; }
.gss-logo-actions form { display: grid; gap: .75rem; }
@media (max-width: 575.98px) { .gss-logo-box { grid-template-columns: 1fr; } }

/* ---------- Choix du thème (Mon compte) ---------- */
.gss-theme-choice { display: grid; gap: .6rem; }
.gss-theme-option { display: block; cursor: pointer; margin: 0; }
.gss-theme-option input { position: absolute; opacity: 0; pointer-events: none; }
.gss-theme-option-body {
	display: grid; grid-template-columns: 1.6rem 1fr; column-gap: .6rem; align-items: center;
	padding: .7rem .9rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius);
	background: var(--gss-surface); transition: border-color .15s, box-shadow .15s;
}
.gss-theme-option-body .bi { grid-row: span 2; font-size: 1.25rem; color: var(--gss-muted); }
.gss-theme-option-body small { color: var(--gss-muted); grid-column: 2; }
.gss-theme-option:hover .gss-theme-option-body { border-color: var(--gss-border-strong); }
.gss-theme-option input:checked + .gss-theme-option-body { border-color: var(--gss-primary); box-shadow: 0 0 0 1px var(--gss-primary); }
.gss-theme-option input:checked + .gss-theme-option-body .bi { color: var(--gss-primary); }
.gss-theme-option input:focus-visible + .gss-theme-option-body { outline: 2px solid var(--gss-primary); outline-offset: 2px; }

/* ---------- Volumes des liquides (Configuration) ---------- */
.gss-volume-map { max-width: 34rem; }
.gss-volume-map .table td { padding: .25rem .35rem; }

/* ---------- Impression ---------- */
@media print {
	.gss-rail, .gss-topbar, .gss-bay, .gss-footer, .gss-toasts, .gss-sticky-actions, .no-print { display: none !important; }
	.gss-app { display: block; }
	.gss-content { padding: 0; }
	body { background: #fff; color: #000; }
}

/* ---------- Liste à saisie (GSS.remoteSelect) ---------- */
.gss-remote { position: relative; display: inline-block; width: min(100%, 26rem); vertical-align: middle; margin: 0 .35rem .35rem 0; }
.gss-remote-menu {
	position: absolute; z-index: 1060; top: calc(100% + 2px); left: 0; right: 0; max-height: 18rem; overflow-y: auto;
	background: var(--gss-surface); border: 1px solid var(--gss-border-strong); border-radius: var(--gss-radius-sm); box-shadow: var(--gss-shadow-pop);
}
.gss-remote-item { display: block; width: 100%; text-align: left; border: 0; background: none; padding: .4rem .65rem; color: var(--gss-text); font-size: .9rem; }
.gss-remote-item:hover, .gss-remote-item.active { background: var(--gss-primary-soft); }
.gss-remote-new { color: var(--gss-primary); font-weight: 600; }
.gss-remote-empty { padding: .45rem .65rem; color: var(--gss-muted); font-size: .88rem; }
.gss-remote-entete { padding: .4rem .65rem .2rem; color: var(--gss-muted); font-size: .78rem; font-weight: 600; border-top: 1px solid var(--gss-border); }
.gss-remote-entete:first-child { border-top: 0; }
.gss-remote-proche { box-shadow: inset 3px 0 0 var(--gss-warning); }
/* Champ « distant » d'une fenêtre (client cherché sur le serveur) : pleine largeur, comme les autres champs */
#gss-fiche .gss-field .gss-remote { display: block; width: 100%; margin: 0; }
#gss-fiche .gss-field .gss-remote input { font-size: 1rem; padding: .5rem .75rem; min-height: 2.5rem; }

/* Véhicules au matricule identique ou proche (caméra, saisie) : fenêtre de choix et encadré sous le matricule */
.gss-proche { display: flex; align-items: center; justify-content: space-between; gap: .75rem; flex-wrap: wrap; padding: .55rem 0; border-top: 1px solid var(--gss-border); }
.gss-proche:first-of-type { border-top: 0; }
.gss-proche-info { min-width: 0; flex: 1 1 14rem; }
.gss-proche-info .gss-bon-plaque { margin-left: 0; margin-right: .35rem; }
.gss-proche-info mark { padding: 0 .05em; border-radius: 2px; background: var(--gss-warning-soft); color: inherit; box-shadow: inset 0 -2px 0 var(--gss-warning); }
.gss-proche-actions { display: flex; gap: .4rem; flex-wrap: wrap; }
.gss-proches { grid-column: 1 / -1; padding: .6rem .8rem; border: 1px solid var(--gss-warning); border-radius: var(--gss-radius-sm); background: var(--gss-warning-soft); }
.gss-proches.is-exact { border-color: var(--gss-danger); background: var(--gss-danger-soft); }
.gss-proches-titre { margin: 0 0 .25rem; font-size: .88rem; font-weight: 600; }
.gss-proches .gss-proche { border-top-color: color-mix(in srgb, var(--gss-warning) 35%, transparent); }

/* ---------- Fenêtre de modification : jours de la semaine ---------- */
.gss-jours { display: flex; flex-wrap: wrap; gap: .35rem; }
.gss-jour { position: relative; margin: 0; cursor: pointer; }
.gss-jour input { position: absolute; opacity: 0; pointer-events: none; }
.gss-jour span {
	display: inline-grid; place-items: center; min-width: 3.1rem; padding: .35rem .5rem; font-size: .85rem; font-weight: 600;
	border: 1px solid var(--gss-border-strong); border-radius: var(--gss-radius-sm); background: var(--gss-surface); color: var(--gss-muted);
}
.gss-jour input:checked + span { background: var(--gss-primary); border-color: var(--gss-primary); color: #fff; }
.gss-jour input:focus-visible + span { outline: 2px solid var(--gss-primary); outline-offset: 1px; }

/* ---------- Barre de filtres d'une liste ---------- */
.gss-filtres { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; padding: .75rem 1rem; border-bottom: 1px solid var(--gss-border); }
.gss-filtre { display: inline-flex; align-items: center; gap: .45rem; margin: 0; font-size: .85rem; color: var(--gss-muted); }
.gss-filtre .form-select { width: auto; min-width: 10rem; }
/* Petits écrans : une barre de choix trop large défile dans sa case au lieu d'élargir la page */
.gss-filtre { max-width: 100%; min-width: 0; }
.gss-filtres .gss-seg { max-width: 100%; overflow-x: auto; scrollbar-width: thin; }
.gss-filtres .gss-seg button { flex: 0 0 auto; white-space: nowrap; }
.gss-seg { display: inline-flex; border: 1px solid var(--gss-border-strong); border-radius: var(--gss-radius-sm); overflow: hidden; }
.gss-seg button {
	display: inline-flex; align-items: center; gap: .4rem; padding: .3rem .75rem; border: 0; background: var(--gss-surface);
	color: var(--gss-muted); font-size: .85rem; font-weight: 600;
}
.gss-seg button + button { border-left: 1px solid var(--gss-border-strong); }
.gss-seg button[aria-pressed="true"] { background: var(--gss-primary); color: #fff; }
.gss-seg button:focus-visible { outline: 2px solid var(--gss-primary); outline-offset: -2px; }
.gss-seg-n { display: inline-grid; place-items: center; min-width: 1.4rem; padding: 0 .3rem; border-radius: 999px; background: var(--gss-primary-soft); color: var(--gss-primary); font-size: .75rem; }
.gss-seg button[aria-pressed="true"] .gss-seg-n { background: rgba(255, 255, 255, .25); color: #fff; }
.gss-jour-pastille {
	display: inline-block; padding: .05rem .4rem; margin: 0 .1rem .1rem 0; border-radius: var(--gss-radius-sm);
	background: var(--gss-primary-soft); color: var(--gss-primary); font-size: .78rem; font-weight: 600;
}
.gss-table tr.gss-row-muted > td { color: var(--gss-muted); }
.gss-table tr.gss-row-muted > td strong { color: inherit; }
.gss-table tr.gss-row-alerte > td { background: color-mix(in srgb, var(--bs-warning, #f0ad4e) 10%, transparent); }
.gss-radios { display: grid; gap: .35rem; }
.gss-table tr.gss-row-warning > td { background: var(--gss-warning-soft); }

/* ---------- Caisse : soldes, suivi, fenêtres ---------- */
.gss-montant-plus { color: var(--gss-success); font-variant-numeric: tabular-nums; }
.gss-montant-moins { color: var(--gss-danger); font-variant-numeric: tabular-nums; }
.gss-soldes { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 1rem; margin-bottom: 1.25rem; }
.gss-solde {
	display: flex; flex-direction: column; gap: .55rem; padding: 1rem 1.1rem; background: var(--gss-surface);
	border: 1px solid var(--gss-border); border-radius: var(--gss-radius); box-shadow: var(--gss-shadow);
}
.gss-solde header { display: flex; align-items: center; gap: .55rem; }
.gss-solde h2 { margin: 0; font-size: 1rem; font-weight: 700; }
.gss-solde-icone { display: inline-grid; place-items: center; width: 2rem; height: 2rem; border-radius: 50%; background: var(--gss-primary-soft); color: var(--gss-primary); }
.gss-solde-nature { margin-left: auto; font-size: .78rem; color: var(--gss-muted); }
.gss-solde-montant { margin: 0; font-family: var(--gss-font-cond); font-size: 1.75rem; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1.1; }
.gss-solde-montant small { font-size: .9rem; font-weight: 600; color: var(--gss-muted); }
.gss-solde-montant.is-negatif { color: var(--gss-danger); }
.gss-solde dl { margin: 0; display: grid; gap: .25rem; font-size: .85rem; }
.gss-solde dl > div { display: flex; justify-content: space-between; gap: .5rem; flex-wrap: wrap; }
.gss-solde dt { font-weight: 500; color: var(--gss-muted); }
.gss-solde dd { margin: 0; text-align: right; }
.gss-solde footer { margin-top: auto; padding-top: .35rem; border-top: 1px dashed var(--gss-border); font-size: .85rem; }
.gss-solde-total { background: var(--gss-primary-soft); border-color: transparent; }
.gss-solde-total .gss-solde-icone { background: var(--gss-surface); }
.gss-filtre input[type=date] { width: auto; }
.gss-suivi-grille { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; padding: 1rem; }
.gss-suivi-totaux { min-width: 0; }
@media (max-width: 575.98px) { .gss-suivi-types, .gss-suivi-soldes { display: block; overflow-x: auto; } }
.gss-suivi-totaux { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr)); gap: .75rem; }
.gss-suivi-totaux > div { display: flex; flex-direction: column; gap: .15rem; padding: .6rem .8rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); }
.gss-suivi-totaux span { font-size: .8rem; color: var(--gss-muted); }
.gss-suivi-totaux strong { font-size: 1.15rem; font-variant-numeric: tabular-nums; }
.gss-suivi-types, .gss-suivi-soldes { margin: 0; }
.gss-suivi[aria-busy="true"] { opacity: .6; transition: opacity .2s; }
.gss-lien { padding: 0; border: 0; background: none; color: var(--gss-primary); font-weight: 600; text-align: left; }
.gss-lien:hover { text-decoration: underline; }
.gss-natures { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .4rem; }
.gss-nature { position: relative; margin: 0; cursor: pointer; }
.gss-nature input { position: absolute; opacity: 0; pointer-events: none; }
.gss-nature span {
	display: flex; align-items: center; gap: .45rem; height: 100%; padding: .5rem .65rem; border: 1px solid var(--gss-border-strong);
	border-radius: var(--gss-radius-sm); background: var(--gss-surface); font-size: .88rem; font-weight: 600;
}
.gss-nature input:checked + span { border-color: var(--gss-primary); background: var(--gss-primary-soft); color: var(--gss-primary); }
.gss-nature input:focus-visible + span { outline: 2px solid var(--gss-primary); outline-offset: 1px; }
.gss-arrete-attendu { margin: -.25rem 0 .9rem; color: var(--gss-muted); }
.gss-arrete-ecart { margin: -.4rem 0 .9rem; padding: .45rem .65rem; border-radius: var(--gss-radius-sm); font-weight: 600; }
.gss-arrete-ecart.is-juste { background: var(--gss-success-soft); color: var(--gss-success); }
.gss-arrete-ecart.is-plus { background: var(--gss-warning-soft); color: var(--gss-warning); }
.gss-arrete-ecart.is-moins { background: var(--gss-danger-soft); color: var(--gss-danger); }
@media (max-width: 575.98px) { .gss-natures { grid-template-columns: 1fr; } }
.gss-lien-tiers { margin: .35rem 0 0; font-size: .85rem; }
.gss-lien-tiers a { font-weight: 600; }
.gss-seg-sm button { padding: .22rem .6rem; font-size: .8rem; }
.gss-filtre-puce {
	display: inline-flex; align-items: center; gap: .4rem; padding: .2rem .35rem .2rem .65rem; border-radius: 999px;
	background: var(--gss-primary-soft); color: var(--gss-primary); font-size: .82rem; font-weight: 600;
}
.gss-filtre-puce .btn-close { width: .55rem; height: .55rem; padding: .2rem; background-size: .55rem; }
.gss-filtre-puce[hidden] { display: none; }

/* ---------- Grille de deux cartes ---------- */
.gss-grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 460px), 1fr)); gap: 0 1.25rem; align-items: start; }
.gss-table tr.is-selected > td { background: var(--gss-primary-soft); }
.gss-calendar-day.is-repos { background: color-mix(in srgb, var(--gss-muted) 8%, var(--gss-surface)); }
.gss-calendar-day.is-today { outline: 2px solid var(--gss-primary); outline-offset: -2px; }
.gss-calendar-day.has-avance { border-color: color-mix(in srgb, var(--gss-danger) 45%, var(--gss-border)); }
.gss-calendar-num small { font-weight: 500; font-size: .7rem; color: var(--gss-faint); }
.gss-calendar-avance, .gss-calendar-repos { font-size: .78rem; border-radius: 3px; padding: 0 .3rem; align-self: flex-start; }
.gss-calendar-avance { background: var(--gss-danger-soft); color: var(--gss-danger); font-weight: 600; }
.gss-calendar-repos { background: color-mix(in srgb, var(--gss-muted) 12%, var(--gss-surface)); color: var(--gss-muted); }
.gss-calendar-legende { margin: .75rem 0 0; font-size: .8rem; color: var(--gss-muted); }

/* ---------- Tableau de bord ---------- */
/* Couleurs des graphiques (palette de référence validée : accent bleu, comparaison en gris, 2e série orange) */
:root { --viz-a: #2a78d6; --viz-b: #898781; --viz-2: #eb6834; --viz-grille: var(--gss-border); }
[data-bs-theme="dark"] { --viz-a: #3987e5; --viz-b: #898781; --viz-2: #d95926; --viz-grille: var(--gss-border); }
.gss-tableau-barre { margin-bottom: 1rem; background: var(--gss-surface); border: 1px solid var(--gss-border); border-radius: var(--gss-radius); }
.gss-tableau-barre .gss-filtres { border-bottom: 0; }
.gss-tableau { transition: opacity .2s; }
.gss-tableau.is-loading { opacity: .55; }
.gss-tableau-section { margin-bottom: 1.25rem; }
.gss-tableau-titre { display: flex; align-items: center; gap: .45rem; margin: 0 0 .6rem; font-size: 1rem; font-weight: 700; }
.gss-tableau-titre .bi { color: var(--gss-primary); }
.gss-kpis { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: .75rem; }
.gss-kpi {
	display: flex; flex-direction: column; gap: .2rem; padding: .8rem .95rem; background: var(--gss-surface);
	border: 1px solid var(--gss-border); border-radius: var(--gss-radius); box-shadow: var(--gss-shadow);
}
.gss-kpi-label { font-size: .82rem; color: var(--gss-muted); }
.gss-kpi-valeur { font-size: 1.35rem; font-weight: 700; line-height: 1.2; }
.gss-kpi-delta { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .4rem; font-size: .8rem; }
.gss-kpi-ecart { font-weight: 700; }
.gss-kpi-ref { color: var(--gss-muted); font-size: .78rem; }
.gss-kpi-delta.is-bon .bi, .gss-kpi-delta.is-bon .gss-kpi-ecart { color: var(--gss-success); }
.gss-kpi-delta.is-mauvais .bi, .gss-kpi-delta.is-mauvais .gss-kpi-ecart { color: var(--gss-danger); }
.gss-kpi-delta.is-neutre .bi, .gss-kpi-delta.is-neutre .gss-kpi-ecart { color: var(--gss-text); }
.gss-graphiques { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 480px), 1fr)); gap: 0 1.25rem; }
.gss-graphique-zone { position: relative; height: 290px; }
.gss-graphique-donnees { margin-top: .75rem; font-size: .85rem; }
.gss-graphique-donnees summary { cursor: pointer; color: var(--gss-muted); font-weight: 600; }
.gss-graphique-donnees .gss-table-wrap { max-height: 280px; overflow: auto; margin-top: .5rem; }

/* ---------- Bandeau de mise à jour (temps réel) ---------- */
.gss-avis-maj {
	position: fixed; left: 50%; bottom: 1.25rem; transform: translateX(-50%); z-index: 1080;
	display: flex; align-items: center; gap: .65rem; max-width: calc(100vw - 2rem); padding: .55rem .6rem .55rem 1rem;
	background: var(--gss-surface); color: var(--gss-text); border: 1px solid var(--gss-border); border-radius: 999px; box-shadow: var(--gss-shadow-pop);
	font-size: .9rem;
}
.gss-avis-maj[hidden] { display: none; }
.gss-avis-maj > .bi { color: var(--gss-primary); }
.gss-avis-maj .btn { border-radius: 999px; }

/* ---------- Lot 4 ---------- */
/* Achats : article présélectionné (?article=ID) */
.gss-article-choisi {
	display: flex; flex-wrap: wrap; align-items: center; gap: .5rem;
	padding: .55rem .9rem; border-bottom: 1px solid var(--gss-border); background: var(--gss-surface-2);
}
.gss-article-choisi .btn { margin-left: auto; }

/* Opérations d'un employé : sélecteur du mois */
.gss-ops-entete { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-bottom: .5rem; }
.gss-ops-entete h5 { margin: 0; }
.gss-ops-mois { display: inline-flex; align-items: center; gap: .45rem; margin: 0; }
.gss-ops-mois span { font-size: .85rem; color: var(--gss-muted); }
.gss-ops-mois input { width: auto; }

/* Fenêtre de confirmation détaillée (GSS.confirmer) */
.gss-confirmer-details {
	display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: .3rem 1rem;
	margin: 0 0 .75rem; padding: .7rem .9rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm);
	background: var(--gss-surface-2);
}
.gss-confirmer-details dt { font-weight: 500; color: var(--gss-muted); }
.gss-confirmer-details dd { margin: 0; overflow-wrap: anywhere; }
/* Fenêtre « quantité » (GSS.quantite) */
.gss-quantite-saisie { display: flex; gap: .375rem; align-items: stretch; }
.gss-quantite-saisie .form-control { text-align: center; font-size: 1.125rem; font-variant-numeric: tabular-nums; min-width: 0; }
.gss-quantite-saisie .btn { min-width: 2.75rem; }
.gss-quantite-raccourcis { display: flex; flex-wrap: wrap; gap: .375rem; margin-top: .5rem; }
.gss-quantite-raccourcis:empty { display: none; }
.gss-confirmer-effets { margin: 0 0 .5rem; padding-left: 1.2rem; }
.gss-confirmer-avert { margin: 0; color: var(--gss-danger, #b42318); }

/* Bon : partie de la note saisie à la réception (figée tant que le bon est en cours) */
.gss-note-figee {
	display: flex; gap: .5rem; align-items: flex-start;
	margin-bottom: .4rem; padding: .45rem .65rem;
	border: 1px dashed var(--gss-border); border-radius: var(--gss-radius-sm);
	background: var(--gss-surface-2); color: var(--gss-text, inherit); font-size: .9rem;
}
.gss-note-figee .bi { color: var(--gss-muted); margin-top: .1rem; }

/* Fenêtres de modification : groupe de cases à cocher (type « cases ») */
.gss-cases { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: .25rem 1rem; }
.gss-cases .form-check { margin: 0; }
.gss-field-cases { min-width: 0; }
.gss-field-cases > legend { float: none; width: auto; margin-bottom: .35rem; padding: 0; font-size: inherit; }
.gss-field-cases .gss-cases { grid-template-columns: repeat(auto-fill, minmax(min(15rem, 100%), 1fr)); }
.gss-equipe { display: flex; flex-wrap: wrap; gap: .2rem 1rem; }

/* Filtres : choix multiple (Filtres « choix ») */
.gss-choix-bouton { min-width: 11rem; max-width: 16rem; text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gss-choix-menu { padding: .5rem; min-width: 16rem; }
.gss-choix-menu > input { margin-bottom: .4rem; }
.gss-choix-liste { max-height: 16rem; overflow-y: auto; margin-bottom: .35rem; }
.gss-choix-liste .form-check { display: flex; gap: .45rem; align-items: center; margin: 0; padding: .2rem .25rem; border-radius: var(--gss-radius-sm); }
.gss-choix-liste .form-check:hover { background: var(--gss-surface-2); }
.gss-choix-liste .form-check-input { margin: 0; flex-shrink: 0; }

/* Calendrier : jours d'événement et journées de durée spéciale (ajustements du temps dû) */
.gss-calendar-ajuste { font-size: .74rem; border-radius: 3px; padding: 0 .3rem; align-self: flex-start; background: var(--gss-info-soft); color: var(--gss-info); font-weight: 600; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gss-calendar-ajuste.is-duree { background: var(--gss-warning-soft); color: var(--gss-warning); }
.gss-calendar-day.is-evenement { background: color-mix(in srgb, var(--gss-info) 7%, var(--gss-surface)); }
.gss-ajustements-form { display: grid; grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: .6rem 1rem; align-items: end; }
.gss-ajustements-form .span-all { grid-column: 1 / -1; }
.gss-field[hidden] { display: none !important; }

/* Codes-barres : champ de scan, fenêtres */
.gss-scan { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin: 0; }
.gss-scan-champ { position: relative; display: block; margin: 0; flex: 1 1 14rem; max-width: 22rem; }
.gss-scan-champ .bi { position: absolute; left: .6rem; top: 50%; transform: translateY(-50%); color: var(--gss-muted); pointer-events: none; }
.gss-scan-champ input { padding-left: 2rem; font-family: var(--gss-font-mono, ui-monospace, monospace); }
.gss-scan[aria-busy="true"] input { opacity: .6; }
.gss-scan-barre { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; padding: .6rem .9rem; border-bottom: 1px solid var(--gss-border); background: var(--gss-surface-2); }
.gss-scan-barre .gss-scan-aide { font-size: .8rem; color: var(--gss-muted); }
.gss-scan-video { width: 100%; max-height: 60vh; border-radius: var(--gss-radius-sm); background: #000; }
.gss-codes-associer { margin-top: 1rem; padding-top: .75rem; border-top: 1px solid var(--gss-border); }
.gss-codes-ajout { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .75rem; }
.gss-codes-ajout input, .gss-codes-ajout select { flex: 1 1 10rem; }
.gss-scan .gss-scan-champ input.form-control { padding-left: 2rem !important; width: 100%; max-width: none; margin: 0; }
.gss-codes-associer .form-label { display: block; }
.gss-codes-associer .gss-remote { max-width: 32rem; }
.gss-codes-associer [data-codes-libelle] { max-width: 32rem; }
#gss-codes .modal-dialog-scrollable .modal-content { overflow: visible; }
#gss-codes .modal-dialog-scrollable .modal-body { overflow-y: visible; }

/* Pièces jointes (style/app/pieces.js) */
.gss-pieces { list-style: none; margin: 0 0 .75rem; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr)); gap: .5rem; }
.gss-piece { display: flex; align-items: center; gap: .6rem; padding: .4rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); background: var(--gss-surface); min-width: 0; }
.gss-piece-vignette { flex: 0 0 3.25rem; height: 3.25rem; border-radius: 4px; overflow: hidden; display: flex; align-items: center; justify-content: center; background: var(--gss-surface-2); }
.gss-piece-vignette img { width: 100%; height: 100%; object-fit: cover; }
.gss-piece-vignette.is-doc .bi { font-size: 1.6rem; color: var(--gss-muted); }
.gss-piece-info { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.gss-piece-nom { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gss-pieces-depot { display: flex; flex-direction: column; align-items: center; gap: .2rem; padding: 1rem; margin: 0 0 .5rem; border: 2px dashed var(--gss-border); border-radius: var(--gss-radius); color: var(--gss-text); cursor: pointer; text-align: center; }
.gss-pieces-depot .bi { font-size: 1.5rem; color: var(--gss-primary); }
.gss-pieces-depot:hover, .gss-pieces-depot:focus, .gss-pieces-depot.is-survol { border-color: var(--gss-primary); background: var(--gss-primary-soft); outline: none; }
.gss-pieces-photo { display: none; }
@media (pointer: coarse) { .gss-pieces-photo { display: inline-flex; } }
.gss-pieces-progression { height: 4px; margin-top: .5rem; background: var(--gss-surface-2); border-radius: 2px; overflow: hidden; }
.gss-pieces-progression > div { height: 100%; width: 0; background: var(--gss-primary); transition: width .2s; }

/* ---------- Factures (style/app/factures.js) ---------- */
.gss-fiche-intro { margin: 0 0 .75rem; }
.gss-fac-numero { display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; margin: 0; }
.gss-fac-numero input { width: 11rem; }
.gss-fac-selection { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem 1rem; padding: .6rem 0 .75rem; }
.gss-fac-encours { margin-top: .75rem; font-size: .9rem; }
.gss-fac-encours summary { cursor: pointer; color: var(--gss-muted); }
.gss-fac-encours ul { margin: .4rem 0 0; padding-left: 1.2rem; }
.gss-fac-totaux { display: flex; flex-wrap: wrap; gap: .5rem; padding: .6rem 1rem; }
.gss-fac-totaux:empty { display: none; }
.gss-fac-total { display: flex; flex-direction: column; min-width: 11rem; padding: .45rem .75rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); background: var(--gss-surface-2); }
.gss-fac-total strong { font-size: 1.05rem; font-variant-numeric: tabular-nums; }
.gss-fac-total.is-global { border-color: var(--gss-primary); background: var(--gss-primary-soft); }
.gss-fac-total-l { font-size: .8rem; color: var(--gss-muted); }
.gss-fac-ajout-client { margin-bottom: .75rem; }
.gss-fac-ajout-client .gss-remote { width: min(100%, 32rem); }
/* Préparation */
.gss-fac-numero-prevu { margin: 0; padding-top: .35rem; display: flex; flex-direction: column; }
.gss-fac-numero-prevu strong { font-size: 1.15rem; }
.gss-fac-timbre { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; padding-top: .35rem; }
.gss-fac-timbre .form-check { margin: 0; }
.gss-fac-taux { display: inline-flex; align-items: center; gap: .3rem; margin: 0; }
.gss-fac-taux input { width: 5rem; text-align: right; }
.gss-fac-sous-titre { font-size: .95rem; font-weight: 600; margin: .25rem 0 .4rem; }
.gss-fac-bons { list-style: none; margin: 0 0 .75rem; padding: 0; }
.gss-fac-bons li { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .6rem; padding: .3rem 0; border-bottom: 1px dashed var(--gss-border); }
.gss-fac-ligne-outils { display: flex; gap: .5rem; }
.gss-fac-ligne-outils select { flex: 1 1 auto; min-width: 0; }
.gss-fac-lignes td { vertical-align: middle; }
.gss-fac-lignes td:nth-child(2) { min-width: 16rem; }
.gss-fac-lignes td:nth-child(3) input { width: 5.5rem; }
.gss-fac-lignes td:nth-child(4) input { width: 8rem; }
.gss-fac-lignes input.num { text-align: right; }
.gss-fac-lignes input.is-invalid { border-color: var(--gss-danger); }
.gss-fac-bas { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 24rem); gap: 1rem 1.5rem; padding-top: 1rem; align-items: start; }
@media (max-width: 760px) { .gss-fac-bas { grid-template-columns: 1fr; } }
.gss-fac-note { margin-top: 1rem; }
.gss-fac-totaux-saisie { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .4rem 1rem; align-items: center; margin: 0; }
.gss-fac-totaux-saisie dt { font-weight: 500; color: var(--gss-muted); margin: 0; }
.gss-fac-totaux-saisie dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
.gss-fac-totaux-saisie dd.gss-field { margin-bottom: 0; }
.gss-fac-totaux-saisie [hidden] { display: none; }
.gss-fac-totaux-saisie .gss-fac-net { font-size: 1.15rem; font-weight: 700; color: var(--gss-text); padding-top: .35rem; border-top: 1px solid var(--gss-border); }
.gss-fac-totaux-saisie .gss-fac-ecart-l { font-size: .85rem; }
.gss-fac-totaux-saisie [data-fac-ecart].is-ecart { color: var(--gss-warning); font-weight: 700; }
.gss-fac-mo { display: flex; gap: .35rem; justify-content: flex-end; }
.gss-fac-mo input { width: 9rem; text-align: right; }
.gss-fac-lettres { font-style: italic; color: var(--gss-muted); margin: .75rem 0 0; }
/* Facture émise */
.gss-fac-outils { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1rem; }
.gss-fac-papier { overflow-x: auto; margin-bottom: 1.25rem; padding: .25rem 0; }
.gss-fac-infos { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .35rem 1rem; margin: 0; }
.gss-fac-infos dt { color: var(--gss-muted); font-weight: 500; }
.gss-fac-infos dd { margin: 0; }

/* Document A4 de la facture (même présentation que le classeur Excel) */
.gss-facture {
	position: relative; box-sizing: border-box; width: 200mm; min-width: 640px; max-width: 100%; margin: 0 auto; padding: 10mm 9mm;
	background: #fff; color: #000; font-family: Arial, Helvetica, sans-serif; font-size: 10.5pt; line-height: 1.3;
	box-shadow: var(--gss-shadow-pop); border-radius: 2px;
}
.gss-facture p { margin: 0; }
.gss-facture-tete { display: flex; justify-content: space-between; gap: 6mm; }
.gss-facture-societe { flex: 0 1 58%; }
.gss-facture-raison { font-size: 19pt; font-weight: 700; font-style: italic; }
.gss-facture-activite { font-size: 11.5pt; font-weight: 700; font-style: italic; }
.gss-facture-adresse { font-size: 10pt; font-weight: 700; font-style: italic; }
.gss-facture-legal { display: grid; grid-template-columns: auto 1fr; gap: 0 2mm; margin: 1mm 0 0; font-size: 8.5pt; }
.gss-facture-legal dt { font-weight: 700; margin: 0; }
.gss-facture-legal dt::after { content: " :"; }
.gss-facture-legal dd { margin: 0; }
.gss-facture-titre { flex: 0 0 38%; padding-top: 9mm; }
.gss-facture-titre h2 { margin: 0 0 4mm; font-family: "Times New Roman", Times, serif; font-size: 17pt; font-weight: 700; }
.gss-facture-titre h2 span { font-size: 9pt; font-weight: 400; }
.gss-facture-titre p { font-weight: 700; font-size: 9.5pt; }
.gss-facture-client { margin: 5mm 0 7mm 45%; font-weight: 700; font-size: 10.5pt; }
.gss-facture-lignes { width: 100%; border-collapse: collapse; font-size: 9.5pt; }
.gss-facture-lignes th { border: 1px solid #000; padding: 2.5mm 1.5mm; font-size: 8.5pt; font-weight: 700; text-align: center; }
.gss-facture-lignes th:nth-child(1) { width: 9%; } .gss-facture-lignes th:nth-child(3) { width: 8%; }
.gss-facture-lignes th:nth-child(4) { width: 18%; } .gss-facture-lignes th:nth-child(5) { width: 15%; }
.gss-facture-lignes td { border-left: 1px solid #000; border-right: 1px solid #000; padding: 1.4mm 1.5mm; font-weight: 700; vertical-align: top; }
.gss-facture-lignes td.c { text-align: center; font-variant-numeric: tabular-nums; }
.gss-facture-lignes .gss-facture-fin td { border-bottom: 1px solid #000; height: 7mm; }
.gss-facture-bas { display: flex; justify-content: space-between; align-items: center; margin-top: 3mm; }
.gss-facture-tva { font-family: Calibri, Carlito, Arial, sans-serif; font-size: 14pt; padding-left: 12mm; }
.gss-facture-tva em { font-weight: 700; }
.gss-facture-totaux { border-collapse: collapse; width: 41%; font-size: 9.5pt; }
.gss-facture-totaux th { border: 1px solid #000; padding: 1.8mm 2mm; text-align: right; font-weight: 400; }
.gss-facture-totaux td { border: 1px solid #000; padding: 1.8mm 2mm; text-align: center; font-weight: 700; width: 38%; font-variant-numeric: tabular-nums; }
.gss-facture-totaux .gss-facture-net th, .gss-facture-totaux .gss-facture-net td { padding-top: 3.5mm; padding-bottom: 3.5mm; }
.gss-facture-lettres { margin-top: 3mm !important; font-size: 11pt; }
.gss-facture-lettres strong { font-size: 9.5pt; }
.gss-facture-filigrane { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none;
	font-size: 70pt; font-weight: 800; letter-spacing: .1em; color: rgba(179, 38, 30, .16); transform: rotate(-28deg); }
@page { size: A4; margin: 10mm; }
@media print {
	.gss-fac-papier { overflow: visible; margin: 0; padding: 0; }
	.gss-facture { width: auto; min-width: 0; max-width: none; padding: 0; box-shadow: none; }
}
.gss-fac-fiche { margin-bottom: .9rem; padding: .5rem .75rem; border: 1px dashed var(--gss-border-strong); border-radius: var(--gss-radius-sm); background: var(--gss-surface-2); font-size: .9rem; }
.gss-fac-fiche summary { cursor: pointer; font-weight: 600; color: var(--gss-muted); }
.gss-fac-fiche p { margin: .4rem 0 0; }

/* ---------- Caméra (style/app/camera.js) ---------- */
.gss-cam-vue { position: relative; overflow: hidden; border-radius: var(--gss-radius-sm); background: #000; aspect-ratio: 4 / 3; }
.gss-cam-vue video { width: 100%; height: 100%; object-fit: contain; display: block; }
.gss-cam-cadre { position: absolute; left: 10%; right: 10%; top: 50%; height: 36%; max-height: 32%; transform: translateY(-50%);
	border: 3px solid rgba(255, 255, 255, .9); border-radius: 10px; box-shadow: 0 0 0 999px rgba(0, 0, 0, .35); pointer-events: none; }
.gss-cam-cadre.is-code { top: 50%; height: 60%; max-height: 60%; }
.gss-cam-etat { margin: .6rem 0 0; font-size: .92rem; color: var(--gss-muted); }
.gss-cam-etat.is-ok { color: var(--gss-success); font-weight: 600; }
.gss-cam-etat.is-erreur { color: var(--gss-danger); }
.gss-cam-choix { margin-top: .6rem; display: flex; flex-wrap: wrap; gap: .4rem; }
.gss-cam-choix p { flex: 1 1 100%; }
.gss-cam-candidat { font-family: var(--gss-font-mono, ui-monospace, monospace); font-size: 1.05rem; letter-spacing: .03em; }
.gss-cam-type { font-family: var(--gss-font); font-size: .72rem; text-transform: uppercase; opacity: .75; margin-right: .2rem; }
.gss-cam-saisie { margin-top: .75rem; }
.gss-cam-saisie-ligne { display: flex; gap: .5rem; }
.gss-cam-saisie-ligne input { font-family: var(--gss-font-mono, ui-monospace, monospace); text-transform: uppercase; }
.gss-cam-photo { margin: 0; display: inline-flex; align-items: center; gap: .35rem; }
.gss-cam-bouton { vertical-align: middle; margin-left: .2rem; }
.gss-bon-actif { margin: .5rem 0; }
/* Page Scanner (téléphone) */
.gss-scanner { display: grid; gap: .75rem; max-width: 34rem; }
.gss-scanner-bouton { display: flex; align-items: center; gap: .9rem; width: 100%; padding: 1rem 1.1rem; font-size: 1.1rem; text-align: left; }
.gss-scanner-bouton .bi { font-size: 1.8rem; }
.gss-scanner-envois { list-style: none; margin: 0; padding: 0; }
.gss-scanner-envois li { display: flex; justify-content: space-between; gap: .5rem; padding: .45rem 0; border-bottom: 1px solid var(--gss-border); font-size: .92rem; }
.gss-scanner-envois code { font-size: 1rem; }
/* Scanner : code-barres → article / stock */
.gss-scanner-lien { border: 1px solid var(--gss-border); border-radius: .6rem; padding: .75rem; display: grid; gap: .6rem; }
.gss-scanner-fiche { border-top: 1px solid var(--gss-border); padding-top: .55rem; overflow-wrap: anywhere; }
.gss-scanner-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .45rem; }
.gss-scanner-actions .btn { min-height: 2.5rem; }
.gss-scanner-choix { max-height: 14rem; overflow-y: auto; margin-top: .25rem; }
.gss-scanner-form .form-select, .gss-scanner-form .form-control { font-size: 1rem; }
.gss-cam-apercu { position: relative; touch-action: none; user-select: none; cursor: crosshair; border-radius: var(--gss-radius-sm); overflow: hidden; }
.gss-cam-apercu img { width: 100%; display: block; }
.gss-cam-zone { position: absolute; border: 2px solid var(--gss-accent); background: rgba(212, 138, 0, .18); pointer-events: none; }

/* ---------- Services du bon (style/app/services.js) ---------- */
.gss-services-bon { padding: .6rem .9rem; border-bottom: 1px solid var(--gss-border); background: var(--gss-surface); }
.gss-services-chips { display: flex; flex-wrap: wrap; gap: .35rem; margin-bottom: .45rem; }
.gss-service-chip { display: inline-flex; align-items: stretch; border: 1px solid var(--gss-border-strong); background: var(--gss-surface); color: var(--gss-text);
	border-radius: 999px; font-size: .88rem; overflow: hidden; }
.gss-service-chip[data-choisi] { border-color: var(--gss-primary); }
.gss-service-chip > * { display: inline-flex; align-items: center; border: 0; background: none; color: inherit; padding: .25rem .6rem; font: inherit; }
.gss-service-chip > button { cursor: pointer; }
.gss-service-chip > button:focus-visible { outline: 2px solid var(--gss-primary); outline-offset: -2px; }
.gss-service-nom { padding-left: .75rem !important; }
.gss-service-chip[data-choisi] .gss-service-nom { background: var(--gss-primary); color: var(--gss-on-primary); font-weight: 600; }
.gss-service-chip > button.gss-service-nom:hover { text-decoration: underline; }
.gss-service-verrou { color: var(--gss-muted); font-size: .8rem; padding-left: .35rem !important; padding-right: .1rem !important; }
.gss-service-chip[data-choisi] .gss-service-verrou { background: var(--gss-primary); color: var(--gss-on-primary); }
.gss-service-pieces { gap: .2rem; border-left: 1px solid var(--gss-border) !important; color: var(--gss-primary) !important; }
.gss-service-pieces:disabled { color: var(--gss-faint) !important; cursor: default !important; }
.gss-service-pieces.is-actif { background: var(--gss-accent-soft) !important; color: var(--gss-accent-ink) !important; font-weight: 600; }
.gss-service-retirer { border-left: 1px solid var(--gss-border) !important; color: var(--gss-muted) !important; padding: .25rem .5rem !important; }
.gss-service-retirer:hover { color: var(--gss-danger) !important; }
.gss-services-zone { display: flex; flex-wrap: wrap; align-items: flex-start; gap: .35rem .75rem; }
.gss-services-zone .gss-services-chips { margin-bottom: .45rem; }
.gss-services-ajout { margin: 0; }
.gss-services-ajout select { width: auto; min-width: 13rem; }
.gss-services-groupe { margin-top: .35rem; }
.gss-services-groupe-titre { margin: .3rem 0 0; font-size: .82rem; font-weight: 600; color: var(--gss-muted); }
.gss-services-pieces ul { list-style: none; margin: .2rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr)); gap: .35rem .9rem; }
.gss-services-pieces li { font-size: .9rem; line-height: 1.3; }
.gss-srv-lier-barre { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; margin: .5rem 0; }
.gss-srv-filtres { display: flex; flex-wrap: wrap; gap: .5rem .75rem; align-items: flex-end; }
.gss-srv-filtres .gss-field { margin: 0; min-width: 11rem; }
.gss-srv-part { display: inline-block; min-width: 5.5rem; padding: .1rem .4rem; border-radius: 4px; font-variant-numeric: tabular-nums;
	background: linear-gradient(90deg, var(--gss-primary-soft) var(--part), transparent var(--part)); border: 1px solid var(--gss-border); }
.gss-services-sans { margin: .6rem .9rem; }

/* ---------- Recalibrage de la caisse ---------- */
.gss-rec-choix { display: grid; gap: .3rem; }
.gss-rec-choix .form-check { margin: 0; }
.gss-rec-barre { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin: 1rem 0; }
.gss-rec-appliquer { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .75rem 1rem; margin: 1rem 0 1.5rem; padding: 1rem;
	border: 1px solid var(--gss-danger); border-radius: var(--gss-radius-sm); background: var(--gss-surface-2); }
.gss-rec-appliquer .gss-field { margin: 0; min-width: min(18rem, 100%); }
#rec-apercu.is-caduc .gss-rec-resultat { opacity: .45; }
.gss-rec-chiffres { display: grid; grid-template-columns: minmax(10rem, 1fr) auto; gap: .35rem 1rem; margin: 0; }
.gss-rec-chiffres dt { font-weight: 500; color: var(--gss-muted); }
.gss-rec-chiffres dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
.gss-rec-details { margin-top: .5rem; }
.gss-rec-details > summary { cursor: pointer; color: var(--gss-primary); font-size: .875rem; }
.gss-rec-details[open] > summary { margin-bottom: .35rem; }
#rec-fournisseurs input.num { text-align: right; min-width: 7rem; max-width: 10rem; }
#rec-fournisseurs .gss-field { margin: 0; }
/* Crédits des clients (liste construite par style/app/recalibrage.js) */
.gss-rec-clients-outils { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: .5rem; }
.gss-rec-clients-outils .form-control { flex: 1 1 14rem; max-width: 20rem; }
.gss-rec-clients-outils .form-select { flex: 0 1 15rem; width: auto; }
.gss-rec-clients-boutons { display: flex; flex-wrap: wrap; gap: .25rem; margin-left: auto; }
#rec-carte-clients .gss-field[data-field="credits_clients"] { margin: 0; }
#rec-clients-table input.num { text-align: right; min-width: 7rem; max-width: 10rem; }
#rec-clients-table tr.is-modifie > td { background: var(--gss-accent-soft); }
#rec-clients-table td.gss-rec-ecart { color: var(--gss-warning); font-weight: 600; }
.gss-rec-clients-plus { text-align: center; padding: .5rem 0 0; }
@media (max-width: 576px) {
	.gss-rec-clients-outils .form-control, .gss-rec-clients-outils .form-select { flex-basis: 100%; max-width: none; }
	.gss-rec-clients-boutons { margin-left: 0; }
}
@media (max-width: 576px) {
	.gss-rec-chiffres { grid-template-columns: 1fr; }
	.gss-rec-chiffres dd { text-align: left; margin-bottom: .25rem; }
}

/* ---------- Fiches atelier : éditeur des emplacements (views/impression/fiches.php) ---------- */
.fe-choix { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1rem; }
.fe { display: grid; grid-template-columns: minmax(0, 1fr) 22rem; gap: 1rem; align-items: start; }
.fe-zone { min-width: 0; }
.fe-outils { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-bottom: .5rem; }
.fe-bon { display: flex; gap: .35rem; align-items: center; }
.fe-bon input { width: 12rem; }
.fe-defile { overflow: auto; max-height: calc(100vh - 12rem); min-height: 20rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); background: #d9dee3; padding: 0; }
.fe-page { position: relative; margin: 0 auto; background: #fff; box-shadow: 0 1px 6px rgba(0, 0, 0, .2); color: #000; font-family: Arial, "Liberation Sans", Helvetica, sans-serif; touch-action: none; }
.fe-fond { position: absolute; inset: 0; width: 100%; height: 100%; user-select: none; pointer-events: none; }
.fe-page.sans-fond .fe-fond { opacity: 0; }
.fe-champs { position: absolute; inset: 0; }
.fe-c { position: absolute; display: flex; overflow: visible; line-height: 1.12; white-space: nowrap; cursor: move;
	outline: 1px dashed rgba(13, 105, 114, .75); background: rgba(13, 105, 114, .07); }
.fe-c > span { display: block; width: 100%; overflow: hidden; pointer-events: none; }
.fe-c.fe-v-bas { align-items: flex-end; }
.fe-c.fe-v-milieu { align-items: center; }
.fe-c.fe-v-haut { align-items: flex-start; }
.fe-c.fe-long { display: -webkit-box; -webkit-box-orient: vertical; white-space: normal; overflow: hidden; overflow-wrap: anywhere; }
.fe-c.fe-liste { display: block; background: none; }
.fe-rang { position: absolute; left: 0; right: 0; display: flex; align-items: flex-end; outline: 1px dotted rgba(13, 105, 114, .5); background: rgba(13, 105, 114, .05); }
.fe-c.fe-v-milieu .fe-rang { align-items: center; }
.fe-c.fe-v-haut .fe-rang { align-items: flex-start; }
.fe-rang > span { display: block; width: 100%; overflow: hidden; }
.fe-c.fe-qr svg { width: 100%; height: 100%; pointer-events: none; }
.fe-vide { opacity: .25; }
.fe-c:focus { outline: 2px solid var(--gss-primary); }
.fe-c.is-choisi { outline: 2px solid #d63384; background: rgba(214, 51, 132, .1); z-index: 2; }
.fe-c > .fe-poignee { position: absolute; right: -5px; bottom: -5px; width: 10px; height: 10px; border-radius: 2px; background: #d63384; cursor: nwse-resize; display: none; pointer-events: auto; }
.fe-c.is-choisi > .fe-poignee { display: block; }
.fe-aide { margin: .5rem 0 0; }
.fe-panneau { display: grid; gap: 1rem; position: sticky; top: 4.5rem; max-height: calc(100vh - 5.5rem); overflow: auto; padding-bottom: 4rem; }
.fe-carte { margin: 0; }
.fe-libelle { font-weight: 600; margin-bottom: .5rem; }
.fe-grille { display: grid; grid-template-columns: 1fr 1fr; gap: .25rem .75rem; }
.fe-grille .gss-field { margin-bottom: .35rem; }
.fe-grille .fe-large { grid-column: 1 / -1; }
.fe-coches { display: flex; gap: 1rem; margin: .25rem 0 .5rem; }
.fe-actions-champ { display: flex; flex-wrap: wrap; gap: .5rem; }
.fe-liste { list-style: none; margin: .5rem 0 0; padding: 0; max-height: 18rem; overflow: auto; }
.fe-item { display: flex; justify-content: space-between; gap: .5rem; width: 100%; padding: .3rem .5rem; border: 0; border-radius: var(--gss-radius-sm);
	background: none; color: inherit; text-align: left; font-size: .85rem; }
.fe-item:hover { background: var(--gss-surface-2); }
.fe-item.is-choisi { background: var(--gss-primary-soft); }
.fe-enregistrer { position: fixed; right: 1.25rem; bottom: 1rem; z-index: 20; display: flex; align-items: center; gap: .75rem; padding: .5rem .75rem;
	border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); background: var(--gss-surface); box-shadow: 0 4px 16px rgba(0, 0, 0, .15); }
@media (max-width: 1100px) {
	.fe { grid-template-columns: 1fr; }
	.fe-panneau { position: static; max-height: none; padding-bottom: 5rem; }
	.fe-defile { max-height: 70vh; }
}

/* ---------- Panneau latéral (GSS.panneau) : fiche d'un client, d'un fournisseur… ---------- */
.gss-panneau { position: fixed; top: 0; right: 0; bottom: 0; z-index: 1040; width: min(46rem, 100vw); display: flex; flex-direction: column;
	background: var(--gss-surface); color: var(--gss-text, inherit); border-left: 1px solid var(--gss-border);
	box-shadow: -8px 0 32px rgba(0, 0, 0, .18); transform: translateX(105%); transition: transform .2s ease-out; outline: none; }
.gss-panneau.is-ouvert { transform: none; }
.gss-panneau-tete { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .9rem 1.25rem; border-bottom: 1px solid var(--gss-border); }
.gss-panneau-titre { margin: 0; font-size: 1.15rem; font-weight: 700; }
.gss-panneau-corps { flex: 1; overflow: auto; padding: 1rem 1.25rem 2rem; }
.gss-panneau-corps .gss-card { margin-bottom: 1rem; }
@media (prefers-reduced-motion: reduce) { .gss-panneau { transition: none; } }
@media (max-width: 576px) { .gss-panneau-corps { padding: .75rem .75rem 2rem; } }
.gss-fiche-titre { padding-top: .5rem; border-top: 1px solid var(--gss-border); margin-top: .25rem; }
.gss-field-camera { position: relative; }
.gss-field-camera .gss-cam-bouton { position: absolute; right: .25rem; top: 1.85rem; }

/* ---------- Clients (views/clients/index.php, _fiche_client.php) ---------- */
.gss-lien-fiche { color: inherit; text-decoration: none; }
.gss-lien-fiche:hover strong { color: var(--gss-primary); text-decoration: underline; }
.gss-cl-vehicule { white-space: nowrap; font-size: .875rem; }
.gss-cl-vehicule code { font-size: .8rem; color: var(--gss-text, inherit); background: var(--gss-surface-2); padding: 0 .3rem; border-radius: 3px; }
.gss-cl-entete { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .75rem 1rem; margin-bottom: .75rem; }
.gss-cl-infos { display: grid; grid-template-columns: auto auto; gap: .2rem 1rem; margin: 0; }
.gss-cl-infos dt { color: var(--gss-muted); font-weight: 500; }
.gss-cl-infos dd { margin: 0; }
.gss-cl-actions { display: flex; flex-wrap: wrap; gap: .4rem; align-items: flex-start; }
.gss-cl-remarques { padding: .6rem .8rem; margin-bottom: .75rem; border: 1px dashed var(--gss-border); border-radius: var(--gss-radius-sm); background: var(--gss-surface-2); }
.gss-cl-fiscal { display: grid; grid-template-columns: minmax(8rem, auto) 1fr; gap: .3rem 1rem; }
.gss-cl-fiscal dt { color: var(--gss-muted); font-weight: 500; }
.gss-cl-fiscal dd { margin: 0; }
.gss-filtre-texte input { min-width: 16rem; }
@media (max-width: 576px) { .gss-filtre-texte, .gss-filtre-texte input { width: 100%; min-width: 0; } }

/* Achats à confirmer : prix d'achat saisi dans la liste */
.gss-conf-prix { margin: 0; min-width: 7rem; }
.gss-conf-prix input { text-align: right; }
.gss-conf-sans-prix td { background: rgba(255, 193, 7, .07); }

/* ---------- État de fin de journée (views/caisse/journee.php, style/app/journee.js) ---------- */
.gss-j-outils { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: 1rem; }
.gss-j-jour { display: flex; align-items: center; gap: .25rem; }
.gss-j-jour input { width: 11rem; }
.gss-j-jour-fixe { margin: 0; font-weight: 600; }
.gss-j-caisse select { min-width: 14rem; }
.gss-j-espace { flex: 1 1 auto; }
.gss-j-papier { margin-bottom: 1.25rem; transition: opacity .15s; }
.gss-j-papier.is-chargement { opacity: .55; pointer-events: none; }
/* La feuille reste claire en thème sombre (c'est un document imprimé) */
.gss-journee {
	box-sizing: border-box; width: 100%; max-width: 210mm; margin: 0 auto; padding: 10mm 9mm;
	background: #fff; color: #111; font-family: Arial, Helvetica, sans-serif; font-size: 9.5pt; line-height: 1.35;
	box-shadow: var(--gss-shadow-pop); border-radius: 2px;
}
.gss-journee h2, .gss-journee h3 { font-family: inherit; letter-spacing: normal; }
.gss-journee a { color: inherit; text-decoration: none; }
.gss-journee a:hover { text-decoration: underline; }
.gss-j-muted { color: #666; }
.gss-j-tete { display: flex; justify-content: space-between; align-items: flex-start; gap: 6mm; padding-bottom: 3mm; margin-bottom: 4mm; border-bottom: 2px solid #111; }
.gss-j-societe { margin: 0 0 1mm; font-size: 10.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; }
.gss-j-titre { margin: 0; font-size: 17pt; font-weight: 700; color: #111; }
.gss-j-date { margin: 1mm 0 0; font-size: 11pt; }
.gss-j-meta { display: grid; grid-template-columns: auto auto; gap: .5mm 3mm; margin: 0; font-size: 8.5pt; }
.gss-j-meta dt { color: #555; font-weight: 400; }
.gss-j-meta dd { margin: 0; font-weight: 600; text-align: right; }
.gss-j-resume { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 2mm; margin-bottom: 5mm; }
.gss-j-resume > div { display: flex; flex-direction: column; padding: 2mm 2.5mm; border: 1px solid #bbb; border-radius: 2mm; }
.gss-j-resume span { font-size: 8pt; color: #555; }
.gss-j-resume strong { font-size: 14pt; font-variant-numeric: tabular-nums; }
.gss-j-resume small { font-size: 7.5pt; color: #555; }
.gss-j-resume .is-net { border: 2px solid #111; }
.gss-j-section { margin-bottom: 5mm; overflow-x: auto; }
.gss-j-section h3 { margin: 0 0 1.5mm; font-size: 11pt; font-weight: 700; color: #111; }
.gss-j-section h3 span { font-size: 9pt; font-weight: 400; color: #555; }
.gss-j-table { width: 100%; border-collapse: collapse; }
.gss-j-table th, .gss-j-table td { padding: 1.2mm 1.5mm; border: 1px solid #999; text-align: left; vertical-align: top; }
.gss-j-table thead th { background: #eee; font-size: 8pt; font-weight: 700; }
.gss-j-table tfoot th { background: #f4f4f4; }
.gss-j-table .num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.gss-j-table tr { break-inside: avoid; }
.gss-j-note { min-width: 40mm; max-width: 75mm; }
.gss-j-vide td { text-align: center; color: #666; font-style: italic; }
.gss-j-anciens td { color: #444; font-style: italic; background: #fafafa; }
.gss-j-fin { break-inside: avoid; }
.gss-j-recap { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6mm; align-items: start; }
.gss-j-comptes th, .gss-j-comptes td { border-width: 0 0 1px; border-color: #ccc; }
.gss-j-comptes th { font-weight: 700; }
.gss-j-comptes .is-total th { border-top: 1px solid #111; border-bottom-color: #111; }
.gss-j-comptes .is-net th { font-size: 12pt; border: 2px solid #111; background: #f4f4f4; }
.gss-j-soldes { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 1mm 3mm; margin: 0 0 4mm; font-size: 8.5pt; }
.gss-j-soldes dt { font-weight: 400; color: #444; }
.gss-j-soldes dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
.gss-j-remise p { margin: 0 0 3mm; font-size: 10.5pt; font-weight: 700; }
.gss-j-ligne { display: inline-block; min-width: 38mm; border-bottom: 1px solid #111; }
.gss-j-visas { display: grid; grid-template-columns: 1fr 1fr; gap: 4mm; }
.gss-j-visas > div { height: 24mm; padding: 1.5mm 2mm; border: 1px solid #999; font-size: 8pt; color: #555; }
@media (max-width: 768px) {
	.gss-journee { padding: 5mm 4mm; }
	.gss-j-tete { flex-direction: column; gap: 2mm; }
	.gss-j-meta dd { text-align: left; }
	.gss-j-resume { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.gss-j-recap { grid-template-columns: 1fr; }
}
@media print {
	.gss-j-papier { margin: 0; }
	.gss-journee { max-width: none; padding: 0; box-shadow: none; border-radius: 0; font-size: 9pt; }
	.gss-j-section { overflow: visible; }
	.gss-j-resume { grid-template-columns: repeat(5, minmax(0, 1fr)); }
	.gss-j-tete { flex-direction: row; }
	.gss-j-recap { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
	.gss-j-table thead { display: table-header-group; }
}

/* ---------- Marques des pièces (Stock → Marques, codes-barres, unités) ---------- */
.gss-mq-outils { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: .75rem; }
.gss-mq-reprise .gss-grid-2 { margin-top: .75rem; }
.gss-codes-marque { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: .5rem; margin-top: .5rem; }
.gss-code-marque input, .gss-unite-marque input { min-width: 9rem; max-width: 14rem; }
@media (max-width: 576px) { .gss-codes-marque { grid-template-columns: 1fr; } }

/* ---------- Fournisseurs (fiche dans le panneau) ---------- */
.gss-fr-etats { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .3rem 1rem; margin: 0; }
.gss-fr-etats dt { font-weight: 500; color: var(--gss-muted); }
.gss-fr-etats dd { margin: 0; }

/* ---------- Articles (liste et fiche) ---------- */
.gss-art-totaux { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .5rem; padding: .75rem 1rem; border-bottom: 1px solid var(--gss-border); }
.gss-art-totaux > div { display: flex; flex-direction: column; }
.gss-art-totaux span { font-size: .78rem; color: var(--gss-muted); }
.gss-art-totaux strong { font-size: 1.05rem; font-variant-numeric: tabular-nums; }
@media (max-width: 768px) { .gss-art-totaux { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- Achats (views/fournisseurs/achats.php) ---------- */
.gss-achat-contexte { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .5rem 1rem; margin-bottom: 1rem; }
.gss-achat-contexte select { min-width: 14rem; }
.gss-achat-fournisseur { font-size: .9rem; color: var(--gss-muted); padding-bottom: .35rem; }
.gss-col-choix { width: 1%; }

/* ---------- Écran du bon (views/clients/bon.php, bon_nouveau.php) ---------- */
.gss-bon-haut { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 1rem; align-items: start; margin-bottom: 1rem; }
.gss-bon-haut > .gss-card { margin-bottom: 0; }
@media (max-width: 992px) { .gss-bon-haut { grid-template-columns: minmax(0, 1fr); } }
.gss-bon-ident { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .45rem 1rem; margin: 0; }
.gss-bon-ident dt { color: var(--gss-muted); font-weight: 500; padding-top: .15rem; }
.gss-bon-ident dd { margin: 0; min-width: 0; }
.gss-bon-ident dd > .gss-acts { margin-left: .35rem; vertical-align: middle; }
.gss-bon-plaque {
	display: inline-block; padding: 0 .4rem; margin-left: .25rem; border: 1.5px solid var(--gss-plate-ink); border-radius: 4px;
	background: var(--gss-plate); color: var(--gss-plate-ink); font-family: var(--gss-font-cond); font-weight: 600; letter-spacing: .03em;
}
.gss-bon-ident textarea { margin-top: .35rem; }
.gss-bon-etat { display: flex; align-items: center; gap: .5rem; margin-bottom: .75rem; }
.gss-bon-etat .gss-badge { font-size: .85rem; }
.gss-bon-jeton { font-size: .8rem; color: var(--gss-muted); border: 1px solid var(--gss-border); border-radius: 999px; padding: .05rem .5rem; }
.gss-bon-chiffres { display: grid; gap: .25rem; margin: 0 0 .5rem; }
.gss-bon-chiffres > div { display: flex; justify-content: space-between; gap: 1rem; }
.gss-bon-chiffres dt { color: var(--gss-muted); font-weight: 500; }
.gss-bon-chiffres dd { margin: 0; font-variant-numeric: tabular-nums; }
.gss-bon-total { border-top: 1px solid var(--gss-border); padding-top: .35rem; margin-top: .15rem; }
.gss-bon-total dt { color: var(--gss-text); font-weight: 600; }
.gss-bon-total dd { font-size: 1.45rem; font-weight: 700; line-height: 1.1; }
.gss-bon-total small { font-size: .8rem; font-weight: 500; color: var(--gss-muted); }
.gss-bon-alerte, .gss-bon-credit { display: flex; gap: .4rem; font-size: .88rem; margin: .4rem 0 0; padding: .4rem .55rem; border-radius: var(--gss-radius-sm); }
.gss-bon-alerte { background: var(--gss-warning-soft); color: var(--gss-warning); }
.gss-bon-credit { background: var(--gss-danger-soft); color: var(--gss-danger); }
.gss-bon-cloture { margin: .9rem 0 .5rem; }
.gss-bon-cloture .btn { width: 100%; }
.gss-bon-boutons { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .5rem; }
.gss-bon-lignes td { vertical-align: top; }
.gss-bon-lignes tr.gss-bon-groupe:not(:first-child) td { border-top: 2px solid var(--gss-border); }
.gss-bon-article strong, .gss-bon-article span { display: block; }
.gss-bon-ligne .gss-row-tools { gap: .35rem; }
.gss-bon-remarque { color: var(--gss-info); white-space: pre-line; }
.gss-bon-saisie { width: 6.5rem; margin-left: auto; text-align: right; font-variant-numeric: tabular-nums; }
.gss-bon-saisie[aria-busy="true"] { opacity: .6; }
.gss-bon-lignes tfoot th { font-variant-numeric: tabular-nums; white-space: nowrap; }
.gss-bon-ajout .gss-scan-barre { margin-bottom: .75rem; }
.gss-bon-ajout .gss-services-bon { margin-bottom: .75rem; }
.gss-bon-ops { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(22rem, 100%), 1fr)); gap: .75rem; }
.gss-bon-op { border: 1px solid var(--gss-border); border-radius: var(--gss-radius); padding: .6rem .8rem; background: var(--gss-surface-2); }
.gss-bon-op-tete { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .75rem; margin-bottom: .4rem; }
.gss-bon-op-titre { font-size: .98rem; margin: 0; font-weight: 600; }
.gss-bon-op-tete .gss-acts { margin-left: auto; }
.gss-bon-op-infos { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .2rem .75rem; margin: 0; font-size: .9rem; }
.gss-bon-op-infos dt { color: var(--gss-muted); font-weight: 500; }
.gss-bon-op-infos dd { margin: 0; }
.gss-cases-filtre { margin-bottom: .4rem; }
.gss-cases-longue { max-height: 15rem; overflow-y: auto; padding: .25rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); }
.gss-cases > label[hidden] { display: none; }
/* Nouveau bon */
.gss-nb-choix { display: grid; gap: .6rem; }
.gss-nb-recherche { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.gss-nb-recherche .gss-remote { flex: 1 1 18rem; min-width: 0; }
.gss-nb-boutons { display: flex; flex-wrap: wrap; gap: .4rem; }
.gss-nb-choisi { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; padding: .6rem .8rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius); background: var(--gss-surface-2); }
.gss-nb-choisi strong { font-size: 1.05rem; }
.gss-nb-choisi .gss-acts { margin-left: auto; }
.gss-nb-visite { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(14rem, 100%), 1fr)); gap: .75rem 1rem; }
.gss-nb-visite .span-all { grid-column: 1 / -1; }
.gss-nb-pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: .75rem 1.25rem; }
.gss-nb-pied .gss-bon-total { border: 0; padding: 0; margin: 0; display: flex; gap: .75rem; align-items: baseline; }
/* Info-bulles : purement informatives, elles ne masquent jamais un bouton voisin */
.tooltip { pointer-events: none; }
/* Liste des ventes : totaux de la sélection */
.gss-ventes-totaux { grid-template-columns: repeat(auto-fill, minmax(min(9rem, 100%), 1fr)); }
/* Pointeuse */
.gss-zk-heures { display: grid; grid-template-columns: max-content 1fr; gap: .3rem 1rem; margin: 0 0 1rem; }
.gss-zk-heures dt { color: var(--gss-muted); font-weight: 500; }
.gss-zk-heures dd { margin: 0; font-family: var(--gss-font-cond); font-weight: 600; font-size: 1.05rem; }
.gss-zk-actions { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-bottom: 1rem; }
/* Pointeuse : appareil à gauche, employés et empreintes à droite (empilés sur petit écran) */
.gss-zk-page { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 1.25rem; align-items: start; }
@media (min-width: 1200px) { .gss-zk-page { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); } }
@media (max-width: 575.98px) { .gss-zk-heures { grid-template-columns: 1fr; gap: 0; } .gss-zk-heures dd { margin-bottom: .45rem; } }
.gss-zk-filtre input { max-width: 22rem; }
.gss-zk-employes td { vertical-align: middle; }
/* Icône d'empreinte d'un employé : nombre d'empreintes en pastille */
.gss-zk-empreinte { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 2.6rem; height: 2.6rem; border-radius: 12px;
	border: 1px solid var(--gss-border-strong); background: var(--gss-surface); color: var(--gss-muted); font-size: 1.35rem; line-height: 1; cursor: pointer;
	transition: transform .12s ease, box-shadow .12s ease, background .12s ease; }
.gss-zk-empreinte:hover { transform: translateY(-1px); box-shadow: var(--gss-shadow); }
.gss-zk-empreinte:focus-visible { outline: 2px solid var(--gss-primary); outline-offset: 2px; }
.gss-zk-empreinte.is-ok { color: var(--gss-primary); border-color: var(--gss-primary); background: var(--gss-primary-soft); }
.gss-zk-empreinte.is-vide { color: var(--gss-warning); border-color: var(--gss-warning); background: var(--gss-warning-soft); }
.gss-zk-empreinte.is-absent { border-style: dashed; color: var(--gss-faint); }
.gss-zk-nombre { position: absolute; top: -.45rem; right: -.5rem; min-width: 1.25rem; height: 1.25rem; padding: 0 .3rem; border-radius: 999px; font-size: .72rem;
	font-weight: 700; line-height: 1.25rem; text-align: center; background: var(--gss-muted); color: #fff; box-shadow: 0 0 0 2px var(--gss-surface); }
.gss-zk-nombre:empty { display: none; }
.is-ok > .gss-zk-nombre { background: var(--gss-primary); }
.is-vide > .gss-zk-nombre { background: var(--gss-warning); }
/* Fenêtre des empreintes : les deux mains et le doigt choisi */
.gss-zk-f { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; }
@media (min-width: 768px) { .gss-zk-f { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); align-items: start; } }
.gss-zk-mains svg { display: block; width: 100%; max-width: 520px; margin: 0 auto; height: auto; touch-action: manipulation; user-select: none; }
.zk-main-nom { font-size: 14px; fill: var(--gss-muted); font-weight: 600; }
.zk-paume { fill: var(--gss-zk-peau, #f1e3d6); stroke: var(--gss-zk-trait, #c9ab92); stroke-width: 1.5; pointer-events: none; }
.zk-doigt { cursor: pointer; outline: none; }
.zk-doigt-forme { fill: var(--gss-zk-peau, #f1e3d6); stroke: var(--gss-zk-trait, #c9ab92); stroke-width: 1.5; transition: fill .15s ease, stroke .15s ease; }
.zk-doigt-bout { fill: color-mix(in srgb, var(--gss-zk-trait, #c9ab92) 35%, transparent); transition: fill .15s ease; }
.zk-doigt:hover .zk-doigt-forme, .zk-doigt:focus-visible .zk-doigt-forme { stroke: var(--gss-primary); stroke-width: 2.5; }
.zk-doigt-coche { display: none; }
.zk-doigt-coche circle { fill: var(--gss-primary); }
.zk-doigt-coche path { fill: none; stroke: #fff; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.zk-doigt.is-ok .zk-doigt-forme { fill: color-mix(in srgb, var(--gss-primary) 22%, var(--gss-zk-peau, #f1e3d6)); stroke: var(--gss-primary); }
.zk-doigt.is-ok .zk-doigt-coche { display: inline; }
.zk-doigt.is-choisi .zk-doigt-forme { stroke: var(--gss-accent); stroke-width: 3.5; }
.zk-doigt.is-encours .zk-doigt-bout { fill: var(--gss-accent); animation: gss-zk-pulse 1.1s ease-in-out infinite; }
@keyframes gss-zk-pulse { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }
[data-zk-mains].is-occupe .zk-doigt { cursor: default; }
.gss-zk-legende { display: flex; flex-wrap: wrap; justify-content: center; gap: .3rem .9rem; font-size: .8rem; color: var(--gss-muted); margin: .4rem 0 0; }
.gss-zk-legende span { display: inline-block; width: .85rem; height: .85rem; border-radius: 4px; vertical-align: -1px; margin-right: -.45rem;
	border: 1.5px solid var(--gss-zk-trait, #c9ab92); background: var(--gss-zk-peau, #f1e3d6); }
.gss-zk-legende span.is-ok { background: var(--gss-primary); border-color: var(--gss-primary); }
.gss-zk-legende span.is-choisi { border: 2.5px solid var(--gss-accent); }
.gss-zk-panneau { min-height: 12rem; }
.gss-zk-boutons { display: flex; flex-wrap: wrap; gap: .5rem; }
.gss-zk-note { font-size: .85rem; padding: .55rem .7rem; border-radius: 8px; background: var(--gss-info-soft); margin-bottom: .75rem; }
.gss-zk-encours { text-align: center; padding: .5rem 0; }
.gss-zk-capteur { width: 5.5rem; height: 5.5rem; margin: 0 auto .6rem; border-radius: 50%; display: grid; place-items: center; font-size: 3rem;
	color: var(--gss-primary); background: var(--gss-primary-soft); box-shadow: 0 0 0 0 color-mix(in srgb, var(--gss-primary) 45%, transparent);
	animation: gss-zk-onde 1.6s ease-out infinite; }
.gss-zk-capteur.is-lecture { color: #fff; background: var(--gss-primary); }
.gss-zk-capteur.is-refus { color: var(--gss-danger); background: var(--gss-danger-soft); animation: none; }
@keyframes gss-zk-onde { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--gss-primary) 45%, transparent); } 100% { box-shadow: 0 0 0 18px transparent; } }
.gss-zk-etapes { display: flex; justify-content: center; gap: .4rem; list-style: none; padding: 0; margin: .5rem 0; }
.gss-zk-etapes li { font-size: .78rem; padding: .25rem .6rem; border-radius: 999px; border: 1px solid var(--gss-border-strong); color: var(--gss-muted); }
.gss-zk-etapes li.is-fait { background: var(--gss-primary); border-color: var(--gss-primary); color: #fff; }
.gss-zk-etapes li.is-actif { border-color: var(--gss-accent); color: var(--gss-accent-ink); font-weight: 600; }
@media (prefers-reduced-motion: reduce) { .gss-zk-capteur, .zk-doigt.is-encours .zk-doigt-bout { animation: none; } }
[data-bs-theme="dark"] { --gss-zk-peau: #4a3d33; --gss-zk-trait: #8c7462; }

/* Base véhicules : résultat d'un VIN ; indication sous le champ VIN des fenêtres de véhicule */
.gss-vin-infos { display: grid; grid-template-columns: max-content 1fr; gap: .15rem 1rem; }
.gss-vin-infos dt { font-weight: 600; color: var(--gss-muted); }
.gss-vin-infos dd { margin: 0; }
.gss-vin-info { color: var(--gss-text); }
.gss-vin-info .bi { color: var(--gss-primary); }

/* Récap des services (views/services/_recap.php) */
.gss-recap-barre { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .75rem; }
.gss-recap-groupes { display: grid; gap: .6rem; }
.gss-recap-groupe { border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); padding: .6rem .8rem; background: var(--gss-surface); }
.gss-recap-groupe.is-off { opacity: .6; }
.gss-recap-tete { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.gss-recap-nom { flex: 1 1 14rem; max-width: 26rem; }
.gss-recap-corps { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); gap: .4rem 1.2rem; margin-top: .45rem; }
.gss-recap-sous { margin: 0 0 .2rem; font-size: .8rem; font-weight: 600; color: var(--gss-muted); }
.gss-recap-pieces { margin: 0; padding-left: 1.1rem; font-size: .9rem; }
.gss-recap-corps .form-check { margin-bottom: .1rem; }

/* Bon : pièce → opération d'atelier (bon.js) */
.gss-affecter-choix { display: grid; gap: .35rem; }
.gss-affecter-choix .form-check { margin: 0; }

/* Soldes négatifs des clients (avoir) et des fournisseurs (ils nous doivent) */
.gss-solde-inverse { font-size: .72rem; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; color: var(--gss-success); }
.gss-bon-credit.is-avoir { background: var(--gss-success-soft); color: var(--gss-success); }
.gss-op-depassement { color: var(--gss-warning); font-weight: 600; }

/* Caisses par rôle (Caisse → Caisses) */
.gss-caisse-role { border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); padding: .5rem .75rem; margin-bottom: .5rem; }
.gss-caisse-role > summary { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; cursor: pointer; }
.gss-caisse-role[open] > summary { margin-bottom: .6rem; }
.gss-caisse-matrice th[scope=row] { font-weight: 500; white-space: nowrap; }
.gss-caisse-prevue { display: block; font-size: .68rem; color: var(--gss-muted); }

/* Confirmation ouverte au-dessus d'une autre fenêtre (ex. versement au-delà du crédit) : au premier plan */
#gss-confirmer { z-index: 1065; }
.modal-backdrop ~ .modal-backdrop { z-index: 1060; }

/* Historique des bons (panneau latéral) : une carte par bon, détail repliable */
.gss-hist-resume { display: grid; grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr)); gap: .5rem; margin-bottom: .75rem; }
.gss-hist-resume > div, .gss-hist-carte { display: flex; flex-direction: column; gap: .1rem; padding: .45rem .6rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); background: var(--gss-surface); }
.gss-hist-resume span, .gss-hist-carte > span, .gss-hist-note > span { font-size: .72rem; color: var(--gss-muted); text-transform: uppercase; letter-spacing: .03em; }
.gss-hist-resume strong { font-size: 1.05rem; }
.gss-hist-outils { display: flex; gap: .5rem; margin-bottom: .75rem; }
.gss-hist-outils input { flex: 1; }
.gss-hist-bon { border: 1px solid var(--gss-border); border-radius: var(--gss-radius); padding: .65rem .75rem; margin-bottom: .6rem; background: var(--gss-surface); }
.gss-hist-bon > header { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .6rem; margin-bottom: .5rem; }
.gss-hist-num { font-weight: 700; text-decoration: none; }
.gss-hist-dates { font-size: .82rem; display: flex; flex-direction: column; margin-left: auto; text-align: right; }
.gss-hist-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(7.5rem, 1fr)); gap: .4rem; }
.gss-hist-carte strong { font-size: .95rem; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.gss-hist-carte small { font-size: .75rem; color: var(--gss-muted); }
.gss-hist-carte.is-large { grid-column: span 2; }
.gss-hist-carte.is-impaye { border-color: var(--gss-danger); }
.gss-hist-carte.is-impaye strong, .gss-hist-carte.is-impaye small { color: var(--gss-danger); }
.gss-hist-note { margin-top: .45rem; padding: .4rem .6rem; border-left: 3px solid var(--gss-border); }
.gss-hist-note p { margin: 0; font-size: .85rem; }
.gss-hist-detail { margin-top: .5rem; }
.gss-hist-detail > summary { cursor: pointer; font-size: .85rem; font-weight: 600; color: var(--gss-primary); }
.gss-hist-detail table { margin: .4rem 0 0; font-size: .82rem; }
.gss-hist-bon.is-versement { padding: .45rem .75rem; }
.gss-hist-bon.is-versement > header { margin: 0; }
.gss-hist-montant { margin-left: auto; font-weight: 700; }
@media (max-width: 575.98px) {
	.gss-hist-dates { margin-left: 0; text-align: left; }
	.gss-hist-carte.is-large { grid-column: auto; }
}

/* Étiquettes codes-barres */
.gss-etq-ajout { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; padding: .75rem 1rem; border-bottom: 1px solid var(--gss-border); }
.gss-etq-ajout .gss-remote { flex: 1; min-width: 14rem; }
.gss-etiquette-cadre { display: flex; justify-content: center; padding: .5rem; background: var(--gss-surface-2, #eef1f4); border-radius: var(--gss-radius-sm); overflow-x: auto; }
.gss-etiquette-apercu { max-width: 100%; height: auto; box-shadow: 0 1px 4px rgba(0, 0, 0, .15); }
.gss-etiquettes-liste code { font-size: .8rem; }
.gss-tspl { max-height: 16rem; overflow: auto; font-size: .75rem; background: var(--gss-surface-2); padding: .5rem; border-radius: var(--gss-radius-sm); }

/* Détail d'une marque (panneau) */
.gss-lien-bouton { border: 0; padding: 0; background: none; color: var(--gss-primary); text-align: left; cursor: pointer; }
.gss-lien-bouton:hover strong { text-decoration: underline; }
.gss-mq-outils-detail { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-bottom: .75rem; }
.gss-mq-outils-detail input { flex: 1; min-width: 10rem; }
.gss-mq-articles td { vertical-align: top; }

/* Licence */
.gss-licence-modules { list-style: none; padding: 0; margin: 0; display: grid; gap: .3rem; }
.gss-licence-bandeau { display: flex; gap: .5rem; align-items: center; padding: .55rem 1rem; background: var(--gss-danger-soft); color: var(--gss-danger); font-size: .9rem; border-bottom: 1px solid var(--gss-border); }
.gss-licence-bandeau.is-alerte { background: var(--gss-accent-soft); color: var(--gss-warning); }

/* ---------------- Stock simple (pack 2) ---------------- */
.gss-ss-tuiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.gss-ss-tuile { display: flex; flex-direction: column; gap: .15rem; padding: .7rem .9rem; background: var(--gss-surface); border: 1px solid var(--gss-border); border-radius: var(--gss-radius); color: inherit; text-decoration: none; }
.gss-ss-tuile span { font-size: .8rem; color: var(--gss-muted); }
.gss-ss-tuile strong { font-size: 1.35rem; font-variant-numeric: tabular-nums; }
a.gss-ss-tuile:hover { border-color: var(--gss-border-strong); }
.gss-ss-tuile.is-alerte { border-left: 4px solid var(--gss-warning); }
.gss-ss-tuile.is-danger { border-left: 4px solid var(--gss-danger); }
.gss-ss-vignette { width: 40px; height: 40px; border-radius: var(--gss-radius-sm); object-fit: cover; display: inline-flex; align-items: center; justify-content: center; background: var(--gss-surface-2); }
.gss-ss-vide { color: var(--gss-muted); background: var(--gss-surface-2); }
.gss-ss-entete { display: grid; grid-template-columns: 140px 1fr; gap: 1rem; align-items: start; margin-bottom: .75rem; }
.gss-ss-photo { display: flex; flex-direction: column; gap: .4rem; }
.gss-ss-photo img, .gss-ss-photo .gss-ss-vide { width: 140px; height: 140px; object-fit: contain; border-radius: var(--gss-radius); border: 1px solid var(--gss-border); background: var(--gss-surface-2); display: flex; align-items: center; justify-content: center; font-size: 2rem; }
.gss-ss-photo-form { display: flex; flex-wrap: wrap; gap: .3rem; }
.gss-ss-titre { font-size: .95rem; font-weight: 600; margin: 1rem 0 .4rem; }
.gss-ss-series { display: flex; flex-wrap: wrap; gap: .3rem; }
.gss-ss-sn { font-family: var(--bs-font-monospace, monospace); letter-spacing: .02em; }
.gss-champ { display: flex; flex-direction: column; gap: .25rem; margin: 0; }
.gss-champ > span { font-size: .82rem; color: var(--gss-muted); }
.gss-ss-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: .75rem 1rem; align-items: end; }
.gss-ss-ajout { display: flex; flex-wrap: wrap; gap: .5rem; align-items: end; margin-bottom: .75rem; }
.gss-ss-ajout .gss-champ { flex: 1 1 320px; }
.gss-ss-lignes td { vertical-align: top; }
.gss-ss-num { width: 7rem; text-align: right; margin-left: auto; }
.gss-ss-lot { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: .35rem; }
.gss-ss-lot label, .gss-ss-series-saisie { display: flex; flex-direction: column; gap: .1rem; font-size: .75rem; color: var(--gss-muted); margin: 0; }
.gss-ss-series-saisie textarea { min-width: 14rem; font-family: var(--bs-font-monospace, monospace); }
.gss-ss-total { display: flex; flex-direction: column; }
.gss-ss-total > span { font-size: .82rem; color: var(--gss-muted); }
.gss-ss-total strong { font-size: 1.3rem; font-variant-numeric: tabular-nums; }
.gss-ss-annuler { display: grid; gap: .5rem; margin-top: 1rem; padding-top: .75rem; border-top: 1px solid var(--gss-border); }
.gss-ss-inv-filtre { padding: .6rem .9rem; }
.gss-ss-inv-filtre input { max-width: 22rem; }
.gss-ss-inv-pied { display: flex; flex-wrap: wrap; gap: .75rem; align-items: end; justify-content: space-between; }
.gss-ss-inv-pied .gss-champ { flex: 1 1 260px; max-width: 30rem; }
@media (max-width: 575.98px) {
	.gss-ss-entete { grid-template-columns: 1fr; }
	.gss-ss-num { width: 5.5rem; }
}
a.gss-ss-tuile, a.gss-ss-tuile:hover, a.gss-ss-tuile * { text-decoration: none; }
.gss-ss-lignes { min-width: 760px; }

/* ---------------- Vente simple (pack 2) ---------------- */
.gss-vs-ajout { margin-bottom: 1rem; }
.gss-vs-ajout-grille { display: grid; grid-template-columns: minmax(260px, 3fr) minmax(90px, 1fr) minmax(200px, 2fr) minmax(140px, 1fr); gap: .75rem 1rem; align-items: end; }
.gss-vs-qte input { max-width: 8rem; }
.gss-vs-tete { display: flex; flex-wrap: wrap; gap: .4rem 1.25rem; align-items: center; margin-bottom: .75rem; }
.gss-vs-tete > .small { flex-basis: 100%; }
.gss-vs-etats { display: flex; gap: .4rem; align-items: center; }
.gss-vs-numero { font-size: 1.2rem; font-variant-numeric: tabular-nums; }
.gss-vs-client { display: flex; gap: .4rem; align-items: center; flex-wrap: wrap; }
.gss-vs-lignes td { vertical-align: middle; }
.gss-vs-num { width: 6.5rem; text-align: right; margin-left: auto; display: inline-block; }
.gss-vs-parts { color: var(--gss-muted); margin-top: .15rem; }
.gss-vs-retour td { background: var(--gss-warning-soft); }
.gss-vs-pied { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; align-items: end; margin-top: 1rem; }
.gss-vs-totaux { display: flex; flex-wrap: wrap; gap: 1.25rem; }
.gss-vs-totaux > div { display: flex; flex-direction: column; }
.gss-vs-totaux span { font-size: .8rem; color: var(--gss-muted); }
.gss-vs-totaux strong { font-size: 1.1rem; font-variant-numeric: tabular-nums; }
.gss-vs-totaux .is-total strong { font-size: 1.5rem; }
.gss-vs-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
.gss-vs-modes { display: grid; gap: .35rem; margin-bottom: .75rem; }
.gss-vs-mode { display: flex; gap: .5rem; align-items: center; padding: .45rem .7rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm); cursor: pointer; }
.gss-vs-mode:has(input:checked) { border-color: var(--gss-primary, #0d6efd); background: var(--gss-surface-2); }
.gss-vs-a-payer strong { font-size: 1.4rem; }
.gss-vs-series { display: flex; flex-wrap: wrap; gap: .3rem; max-height: 10rem; overflow: auto; }
.gss-vs-series button { border: 0; cursor: pointer; }
@media (max-width: 767.98px) {
	.gss-vs-ajout-grille { grid-template-columns: 1fr 6rem; }
	.gss-vs-ajout-grille .gss-vs-recherche { grid-column: 1 / -1; }
	.gss-vs-ajout-grille > label:nth-child(n+3) { grid-column: 1 / -1; }
	.gss-vs-lignes { min-width: 640px; }
}

/* ---------- Paie (controllers/paie.php, style/app/paie.js) ---------- */
:root { --gss-corrige: #fff3b0; --gss-corrige-trait: #c9a400; --gss-corrige-encre: #6b5200; }
[data-bs-theme="dark"] { --gss-corrige: rgba(242, 208, 70, .2); --gss-corrige-trait: #d9b833; --gss-corrige-encre: #f2d75c; }
.gss-paie-pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem 1rem; padding: .75rem 1rem; border-top: 1px solid var(--gss-border); }
.gss-paie-arreter { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin: 0; }
.gss-paie-reglages { margin: 0; }
.gss-paie-arretee td { background: color-mix(in srgb, var(--gss-success) 4%, transparent); }
.gss-paie-ecarts { font-size: .8rem; color: var(--gss-warning); font-weight: 600; }
.gss-paie-alerte { font-size: .78rem; color: var(--gss-warning); font-weight: 600; }
.gss-paie-sup { max-width: 14rem; margin-left: auto; margin-top: .25rem; font-size: .8rem; }
.gss-paie-resume { margin: 0; display: grid; gap: .1rem; }
.gss-paie-ligne { display: flex; justify-content: space-between; gap: 1rem; padding: .3rem 0; border-bottom: 1px dashed var(--gss-border); }
.gss-paie-ligne dt { font-weight: 500; color: var(--gss-muted); }
.gss-paie-ligne dd { margin: 0; text-align: right; }
.gss-paie-ligne.is-montant dd { font-variant-numeric: tabular-nums; }
.gss-paie-ligne.is-net { border-bottom: 0; border-top: 2px solid var(--gss-text, currentColor); margin-top: .2rem; padding-top: .45rem; font-size: 1.05rem; }
.gss-paie-cal .gss-calendar-day { font: inherit; text-align: left; color: inherit; min-height: 5.2rem; }
.gss-paie-cal button.gss-calendar-day { cursor: pointer; }
.gss-paie-cal button.gss-calendar-day:hover { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--gss-primary) 55%, transparent); }
.gss-paie-cal button.gss-calendar-day:focus-visible { outline: 2px solid var(--gss-primary); outline-offset: 1px; }
.gss-calendar-day.is-absent { background: color-mix(in srgb, var(--gss-danger) 9%, var(--gss-surface)); border-color: color-mix(in srgb, var(--gss-danger) 40%, var(--gss-border)); }
.gss-calendar-day.is-manque, .gss-calendar-day.is-incomplet { background: color-mix(in srgb, var(--gss-warning) 9%, var(--gss-surface)); border-color: color-mix(in srgb, var(--gss-warning) 45%, var(--gss-border)); }
.gss-calendar-day.is-hors { opacity: .45; }
.gss-calendar-day.is-corrige { background: var(--gss-corrige); border-color: var(--gss-corrige-trait); }
.gss-calendar-day.is-rattrape { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--gss-success) 70%, transparent); }
.gss-paie-cal-heures { font-size: .74rem; color: var(--gss-muted); }
.gss-paie-cal-saisie { font-size: .72rem; font-weight: 700; color: var(--gss-corrige-encre); }
.gss-paie-cal-ecart, .gss-paie-cal-ok, .gss-paie-cal-tolere, .gss-paie-cal-sup { font-size: .74rem; border-radius: 3px; padding: 0 .3rem; align-self: flex-start; font-weight: 600; }
.gss-paie-cal-ecart { background: var(--gss-danger-soft); color: var(--gss-danger); }
.gss-paie-cal-ok { background: var(--gss-success-soft); color: var(--gss-success); }
.gss-paie-cal-tolere { background: color-mix(in srgb, var(--gss-success) 8%, var(--gss-surface)); color: var(--gss-muted); font-weight: 500; }
.gss-paie-cal-sup { background: var(--gss-info-soft); color: var(--gss-info); }
.gss-paie-leg { display: inline-block; font-size: .74rem; padding: 0 .35rem; border-radius: 3px; border: 1px solid var(--gss-border); margin: 0 .15rem .2rem 0; }
.gss-paie-leg.is-complet { border-color: color-mix(in srgb, var(--gss-primary) 45%, var(--gss-border)); }
.gss-paie-leg.is-manque, .gss-paie-leg.is-incomplet { background: color-mix(in srgb, var(--gss-warning) 12%, var(--gss-surface)); }
.gss-paie-leg.is-absent { background: color-mix(in srgb, var(--gss-danger) 12%, var(--gss-surface)); }
.gss-paie-leg.is-corrige { background: var(--gss-corrige); border-color: var(--gss-corrige-trait); }
.gss-paie-leg.is-rattrape { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--gss-success) 70%, transparent); }
.gss-paie-leg.is-tolere { color: var(--gss-muted); }
.gss-paie-barre { height: 4px; margin-top: .25rem; background: var(--gss-surface-2); border-radius: 2px; overflow: hidden; max-width: 8rem; }
.gss-paie-barre span { display: block; height: 100%; background: var(--gss-success); }
.gss-paie-reprise-table td, .gss-paie-reprise-table th { white-space: nowrap; }
.gss-paie-reprise-colonnes { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: .5rem .75rem; }
.gss-paie-reprise-colonnes .form-label { display: flex; justify-content: space-between; gap: .5rem; }
.gss-paie-reprise-titre { font-size: 1rem; margin: 1rem 0 .25rem; }
.gss-paie-reprise-titre:first-child { margin-top: 0; }
.gss-paie-reprise-filtre { display: flex; gap: .5rem; padding: .75rem 1rem; }
.gss-paie-reprise-personnes select { min-width: 16rem; max-width: 26rem; display: inline-block; margin-right: .5rem; }
.gss-paie-reprise-personnes td { vertical-align: middle; }
.gss-paie-reprise-ignorees { margin: 0; padding-left: 1.2rem; }
.gss-paie-reprise-mise { border-bottom: 1px solid var(--gss-border); padding: .6rem 0; }
.gss-paie-reprise-mise:last-child { border-bottom: 0; }
.gss-paie-reprise-mise > summary { cursor: pointer; }
.gss-paie-reprise-mise[open] > summary { margin-bottom: .75rem; }
@media (max-width: 640px) {
	.gss-paie-reprise-personnes select { min-width: 0; width: 100%; max-width: none; margin: 0 0 .25rem; }
}
@media (max-width: 640px) {
	.gss-paie-cal .gss-calendar-day { min-height: 4.2rem; padding: .2rem; }
	.gss-paie-cal-heures, .gss-paie-cal .gss-calendar-time { display: none; }
	.gss-paie-cal-ecart, .gss-paie-cal-ok, .gss-paie-cal-tolere, .gss-paie-cal-sup, .gss-paie-cal-saisie { font-size: .66rem; padding: 0 .15rem; }
}

/* ---------- Téléphone : tableaux en fiches ----------
   Sous 576 px, un tableau .gss-table (et .gss-cartes) affiche chaque ligne comme une fiche : la première
   cellule en titre, les autres « libellé : valeur » (libellés posés par app.js, data-label, d'après l'en-tête),
   les boutons d'action en bas à droite. .gss-table-fixe garde la forme de tableau (défilement horizontal). */
@media (max-width: 575.98px) {
	table.gss-table:not(.gss-table-fixe), table.gss-cartes { border-collapse: separate; border-spacing: 0; min-width: 0 !important; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > thead { display: none; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes),
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot),
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr { display: block; width: 100% !important; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr {
		margin: 0 0 .55rem; padding: .45rem .7rem; border: 1px solid var(--gss-border); border-radius: var(--gss-radius-sm);
		background: var(--gss-surface);
	}
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th) {
		display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: .2rem .4rem;
		padding: .22rem 0 !important; border: 0; text-align: right !important; min-width: 0; overflow-wrap: anywhere;
	}
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th)::before {
		content: attr(data-label); flex-shrink: 0; max-width: 45%; margin-right: auto; padding-right: .5rem; text-align: left; color: var(--gss-muted); font-size: .78rem; font-weight: 500;
	}
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th):is([data-label=""], :not([data-label]))::before { content: none; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th):first-child {
		display: block; text-align: left !important; font-size: .98rem; padding-bottom: .3rem !important;
	}
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th):first-child::before { content: none; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th):is([data-label=""], :not([data-label])):not(:first-child) { justify-content: flex-end; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th):empty { display: none; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > tbody > tr > :is(td, th).gss-table-empty,
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > tbody > tr > :is(td, th).dataTables_empty { display: block; text-align: center !important; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) .form-control,
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) .form-select { max-width: 11rem; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) .gss-acts { flex-wrap: wrap; justify-content: flex-end; }
	/* Cellule d'actions : pleine largeur, boutons alignés à droite, sans libellé */
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > :is(td, th) { width: auto !important; white-space: normal !important; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > td:has(> :is(.gss-acts, .gss-act)) { justify-content: flex-end; padding-top: .35rem !important; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > :is(tbody, tfoot) > tr > td:has(> :is(.gss-acts, .gss-act))::before { content: none; }
	:is(table.gss-table:not(.gss-table-fixe), table.gss-cartes) > tfoot > tr { background: var(--gss-surface-2); font-weight: 600; }
	.gss-table-wrap:has(> :is(table.gss-table:not(.gss-table-fixe), table.gss-cartes)) { overflow: visible; }
	.gss-card-body.flush :is(.gss-table-wrap, .dataTables_wrapper) { padding-left: .6rem; padding-right: .6rem; }
	.gss-card-body.flush .gss-table-wrap:has(> :is(table.gss-table, table.gss-cartes)) { padding-top: .6rem; }
	/* Barre DataTables : « Afficher » et recherche sur toute la largeur */
	.dataTables_wrapper { padding-left: 0; padding-right: 0; }
	.dataTables_wrapper .row { --bs-gutter-x: 0; row-gap: .4rem; }
	.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter { text-align: left !important; }
	.dataTables_wrapper .dataTables_filter label { display: flex; align-items: center; gap: .4rem; width: 100%; }
	.dataTables_wrapper .dataTables_filter input { flex: 1; margin-left: 0; width: auto; }
	.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate { text-align: center; }
	.dataTables_wrapper .pagination { justify-content: center; }
}

/* ---------- Import / export ---------- */
.gss-ech-types { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 22rem), 1fr)); gap: 1rem; }
.gss-ech-types > .gss-card { margin-bottom: 0; }
.gss-ech-export, .gss-ech-import { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .5rem; margin-bottom: .75rem; }
.gss-ech-import .gss-field { flex: 1 1 100%; }
.gss-ech-fichier { display: flex; gap: .5rem; }
.gss-ech-fichier .form-control { min-width: 0; }
.gss-ech-resume { display: flex; flex-wrap: wrap; gap: .4rem; margin-bottom: .6rem; }
.gss-ech-apercu th .form-select { min-width: 9rem; }
.gss-ech-apercu td { white-space: nowrap; max-width: 18rem; overflow: hidden; text-overflow: ellipsis; }
.gss-ech-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .75rem; margin-top: .9rem; }
/* Rapprochement des lignes de l'aperçu */
.gss-ech-filtres { display: flex; flex-wrap: wrap; gap: .35rem; margin-bottom: .6rem; }
.gss-ech-filtre { display: inline-flex; align-items: center; gap: .35rem; padding: .25rem .6rem; border: 1px solid var(--gss-border); border-radius: 999px;
	color: var(--gss-text); text-decoration: none; font-size: .875rem; background: var(--gss-surface); }
.gss-ech-filtre:hover { border-color: var(--gss-border-strong); }
.gss-ech-filtre.is-actif { border-color: var(--gss-primary); background: var(--gss-primary-soft); font-weight: 600; }
.gss-ech-nb { font-variant-numeric: tabular-nums; color: var(--gss-muted); }
.gss-ech-filtre.is-warning .gss-ech-nb { color: var(--gss-warning); font-weight: 700; }
.gss-ech-filtre.is-danger .gss-ech-nb { color: var(--gss-danger); font-weight: 700; }
.gss-ech-masse { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .6rem; margin-bottom: .6rem; padding: .5rem .75rem;
	border-radius: var(--gss-radius-sm); background: var(--gss-warning-soft); }
.gss-ech-apercu td.gss-ech-fiche { white-space: normal; min-width: 16rem; max-width: 24rem; }
.gss-ech-apercu td.gss-ech-etat { white-space: normal; min-width: 8rem; max-width: 14rem; }
.gss-ech-fiche .form-select { max-width: 100%; }
.gss-ech-autre { display: flex; gap: .3rem; margin-top: .3rem; }
.gss-ech-autre[hidden] { display: none; }
.gss-ech-autre .form-control { max-width: 7rem; }
.gss-ech-propose { color: var(--gss-warning); }
.gss-ech-apercu tr.gss-ech-douteux > td { background: var(--gss-warning-soft); }
.gss-ech-col-fiche { min-width: 16rem; }
.gss-ech-pages { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem; margin-top: .6rem; }
.gss-ech-reglage { flex: 1 1 100%; margin: 0; }
.gss-ech-reglage .form-check { margin-bottom: .2rem; }
#ech-colonnes[aria-busy="true"] { opacity: .6; }

/* ---------- Production : fiche OF à imprimer, planning (views/production/fiche.php, planning.php) ---------- */
.gss-of-f-lien { margin: 1mm 0 0; font-size: 9.5pt; }
.gss-of-f-note { margin: 0 0 4mm; padding: 2mm 3mm; border: 1px dashed #999; font-size: 9pt; white-space: pre-line; }
.gss-of-f-produit { break-inside: auto; }
.gss-of-f-produit .gss-j-table + .gss-j-table { margin-top: 2mm; }
.gss-of-f-case { width: 16mm; }
.gss-of-f-blanc td { height: 7mm; }
.gss-of-f-obs { margin: 0 0 14mm; font-weight: 700; }
.gss-pl-outils { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: 1rem; }
.gss-pl-nav { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem; }
.gss-planning th, .gss-planning td { vertical-align: middle; }
.gss-planning .gss-pl-of { min-width: 14rem; max-width: 20rem; white-space: normal; }
.gss-planning .gss-pl-jour { min-width: 3.4rem; text-align: center; font-size: .78rem; line-height: 1.2; }
.gss-planning .gss-pl-cel { text-align: center; font-size: .8rem; font-variant-numeric: tabular-nums; white-space: nowrap; }
.gss-planning .is-chome { background: var(--gss-surface-2); color: var(--gss-muted); }
.gss-planning .is-prevu { background: color-mix(in srgb, var(--gss-primary, #0d6efd) 14%, transparent); }
.gss-planning .is-prevu.is-chome { background: color-mix(in srgb, var(--gss-primary, #0d6efd) 6%, var(--gss-surface-2)); }
.gss-planning .is-retard { background: color-mix(in srgb, #dc3545 20%, transparent); font-weight: 600; }
.gss-planning .is-aujourdhui { box-shadow: inset 2px 0 0 var(--gss-primary, #0d6efd), inset -2px 0 0 var(--gss-primary, #0d6efd); }
.gss-planning .is-surcharge { color: #b02a37; background: color-mix(in srgb, #dc3545 12%, transparent); }
.gss-planning tfoot th, .gss-planning tfoot td { font-size: .8rem; }

/* ---------- Correction du stock : causes d'un stock négatif ---------- */
.gss-carte-alerte { border-left: 4px solid #dc3545; }
.gss-causes { list-style: none; margin: 0; padding: 0; font-size: .82rem; min-width: 16rem; }
.gss-causes li { padding: .2rem .4rem; border-left: 3px solid transparent; margin-bottom: .15rem; }
.gss-causes li.is-cause { border-left-color: #f0ad4e; background: color-mix(in srgb, #f0ad4e 10%, transparent); }
.gss-causes li.is-passage { border-left-color: #dc3545; background: color-mix(in srgb, #dc3545 12%, transparent); }
.gss-causes-date { color: var(--gss-muted); font-variant-numeric: tabular-nums; }
.gss-causes-plus summary { cursor: pointer; font-size: .8rem; color: var(--gss-muted); }
.gss-of-arret { margin-top: .35rem; padding: .35rem .6rem; border-radius: var(--gss-radius-sm); background: color-mix(in srgb, #f0ad4e 16%, transparent); font-size: .9rem; }
.gss-of-annulee td { color: var(--gss-muted); }
.gss-of-annulee td.num { text-decoration: line-through; }

/* ---------- Application installable (PWA) ---------- */
.gss-brand-icone { width: 34px; height: 34px; border-radius: 9px; flex: none; box-shadow: 0 2px 6px rgba(0, 0, 0, .25); }
.gss-login-logo { display: flex; align-items: center; gap: 1rem; }
.gss-login-logo img { width: 72px; height: 72px; border-radius: 18px; box-shadow: 0 6px 18px rgba(0, 0, 0, .35); }
/* Pastille de synchronisation (barre du haut) : hors ligne, opérations en attente */
.gss-sync { display: inline-flex; align-items: center; gap: .35rem; padding: .3rem .65rem; border-radius: 999px; font-size: .8rem; font-weight: 600;
	background: var(--gss-accent-soft); color: var(--gss-accent-ink); text-decoration: none !important; white-space: nowrap; }
.gss-sync.is-horsligne { background: var(--gss-danger-soft); color: var(--gss-danger); }
.gss-sync.is-conflit { background: var(--gss-danger); color: #fff; }
.gss-sync .is-compte { display: none; }
/* Écrans à encoche et application en plein écran */
.gss-app { padding-left: env(safe-area-inset-left, 0px); padding-right: env(safe-area-inset-right, 0px); }
.gss-toasts { bottom: max(1rem, env(safe-area-inset-bottom, 0px)); }
@media (display-mode: standalone) {
	body { overscroll-behavior-y: none; -webkit-tap-highlight-color: transparent; }
	.gss-footer { display: none; }
}
@media (max-width: 575.98px) {
	.gss-sync span { display: none; }
	.gss-sync { padding: .35rem .5rem; }
	.gss-sync span.is-compte { display: inline; }
}
.gss-logo-app { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; margin-bottom: 1rem; }
.gss-logo-app img { width: 96px; height: 96px; border-radius: 22px; box-shadow: var(--gss-shadow); background: repeating-conic-gradient(#e9edf1 0% 25%, #fff 0% 50%) 50% / 16px 16px; }
.gss-logo-app img.is-masque { border-radius: 50%; }
.gss-logo-app > div { flex: 1 1 16rem; }
.gss-logo-app-envoi { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .6rem; }
.gss-logo-app-envoi .gss-champ { flex: 1 1 16rem; margin: 0; }

/* ---------- Hors ligne : vente, réception, file d'envoi (views/horsligne/index.php, style/app/horsligne.js) ---------- */
.hl { max-width: 760px; margin: 0 auto; padding-bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px)); }
.hl-etat { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; margin-bottom: .75rem; font-size: .88rem; }
.hl-etat-reseau { display: inline-flex; align-items: center; gap: .35rem; padding: .25rem .65rem; border-radius: 999px; font-weight: 600;
	background: var(--gss-success-soft); color: var(--gss-success); }
.hl-etat-reseau.is-horsligne { background: var(--gss-danger-soft); color: var(--gss-danger); }
.hl-etat-donnees { color: var(--gss-muted); flex: 1 1 auto; }
.hl-onglets { display: grid; grid-template-columns: repeat(3, 1fr); gap: .35rem; padding: .3rem; border-radius: 12px; background: var(--gss-surface-2);
	position: sticky; top: 0; z-index: 5; margin-bottom: .9rem; }
.hl-onglets button { border: 0; background: transparent; border-radius: 9px; padding: .7rem .4rem; font-weight: 600; color: var(--gss-muted);
	display: inline-flex; align-items: center; justify-content: center; gap: .4rem; min-height: 44px; }
.hl-onglets button.is-actif { background: var(--gss-surface); color: var(--gss-primary); box-shadow: var(--gss-shadow); }
.hl-pastille { display: inline-block; min-width: 1.4rem; padding: 0 .35rem; border-radius: 999px; background: var(--gss-accent); color: #fff; font-size: .75rem; line-height: 1.4rem; }
.hl-pastille.is-conflit { background: var(--gss-danger); }
.hl-chargement { text-align: center; padding: 3rem 1rem; color: var(--gss-muted); }
.hl-carte { background: var(--gss-surface); border: 1px solid var(--gss-border); border-radius: 12px; padding: .85rem; margin-bottom: .75rem; }
.hl-ligne-haut { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.hl-choix { display: flex; align-items: center; gap: .6rem; width: 100%; text-align: left; border: 1px solid var(--gss-border); background: var(--gss-surface);
	border-radius: 10px; padding: .65rem .8rem; min-height: 48px; color: var(--gss-text); }
.hl-choix i { font-size: 1.15rem; color: var(--gss-primary); }
.hl-choix small { display: block; color: var(--gss-muted); }
.hl-choix .bi-chevron-right { margin-left: auto; color: var(--gss-faint); }
.hl-recherche { position: relative; display: flex; gap: .5rem; }
.hl-recherche input { flex: 1; min-height: 48px; font-size: 1rem; padding-left: 2.4rem; }
.hl-recherche > .bi-search { position: absolute; left: .85rem; top: 50%; transform: translateY(-50%); color: var(--gss-faint); pointer-events: none; }
.hl-recherche .btn { min-width: 48px; min-height: 48px; }
.hl-resultats { list-style: none; margin: .4rem 0 0; padding: 0; border: 1px solid var(--gss-border); border-radius: 10px; overflow: hidden; background: var(--gss-surface); }
.hl-resultats:empty { display: none; }
.hl-resultats li + li { border-top: 1px solid var(--gss-border); }
.hl-resultats button { display: flex; width: 100%; align-items: center; gap: .6rem; border: 0; background: transparent; padding: .6rem .8rem; text-align: left; min-height: 52px; color: var(--gss-text); }
.hl-resultats button:active, .hl-resultats button:focus-visible { background: var(--gss-primary-soft); }
.hl-resultats .hl-res-nom { flex: 1; min-width: 0; }
.hl-resultats .hl-res-nom strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hl-resultats .hl-res-nom small { color: var(--gss-muted); }
.hl-resultats .hl-res-prix { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.hl-resultats .hl-res-prix small { display: block; color: var(--gss-muted); }
.hl-res-vide { padding: .8rem; color: var(--gss-muted); font-size: .9rem; }
.hl-lignes { list-style: none; margin: .75rem 0 0; padding: 0; }
.hl-lignes > li { background: var(--gss-surface); border: 1px solid var(--gss-border); border-radius: 12px; padding: .7rem .8rem; margin-bottom: .55rem; }
.hl-l-tete { display: flex; gap: .5rem; align-items: flex-start; }
.hl-l-tete strong { flex: 1; min-width: 0; }
.hl-l-tete small { display: block; color: var(--gss-muted); font-weight: 400; }
.hl-l-corps { display: flex; flex-wrap: wrap; gap: .5rem .75rem; align-items: center; margin-top: .5rem; }
.hl-l-montant { margin-left: auto; font-weight: 700; font-variant-numeric: tabular-nums; }
.hl-qte { display: inline-flex; align-items: center; border: 1px solid var(--gss-border-strong); border-radius: 10px; overflow: hidden; }
.hl-qte button { border: 0; background: var(--gss-surface-2); width: 44px; height: 44px; font-size: 1.2rem; color: var(--gss-text); }
.hl-qte input { width: 4.2rem; height: 44px; border: 0; text-align: center; font-size: 1rem; font-variant-numeric: tabular-nums; background: var(--gss-surface); color: var(--gss-text); }
.hl-champ-court { width: 7.5rem; }
.hl-champ-court input, .hl-champ-court select { min-height: 44px; }
.hl-l-corps label { font-size: .78rem; color: var(--gss-muted); display: flex; flex-direction: column; gap: .15rem; }
.hl-series { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .5rem; }
.hl-series button { border: 1px solid var(--gss-border-strong); background: var(--gss-surface); border-radius: 999px; padding: .35rem .7rem; font-size: .85rem; min-height: 36px; color: var(--gss-text); }
.hl-series button.is-choisi { background: var(--gss-primary); border-color: var(--gss-primary); color: #fff; }
.hl-alerte { font-size: .82rem; color: var(--gss-warning); margin-top: .35rem; }
/* Notifications au-dessus de la barre du bas */
body:has(.hl-barre:not([hidden])) .gss-toasts { bottom: calc(5.75rem + env(safe-area-inset-bottom, 0px)); }
.hl-barre { position: fixed; left: 0; right: 0; bottom: 0; z-index: 1020; background: var(--gss-surface); border-top: 1px solid var(--gss-border);
	box-shadow: 0 -6px 18px rgba(16, 24, 32, .08); padding: .65rem max(1rem, env(safe-area-inset-right, 0px)) calc(.65rem + env(safe-area-inset-bottom, 0px)) max(1rem, env(safe-area-inset-left, 0px)); }
.hl-barre-dedans { max-width: 760px; margin: 0 auto; display: flex; align-items: center; gap: .75rem; }
.hl-barre-total { flex: 1; line-height: 1.15; }
.hl-barre-total small { display: block; color: var(--gss-muted); font-size: .78rem; }
.hl-barre-total strong { font-size: 1.35rem; font-variant-numeric: tabular-nums; }
.hl-barre .btn { min-height: 50px; padding: .6rem 1.2rem; font-size: 1.02rem; font-weight: 600; }
@media (min-width: 992px) {
	.hl-barre { left: 248px; }
	html.gss-rail-ferme[data-rail-mode="icones"] .hl-barre { left: 64px; }
	html.gss-rail-ferme[data-rail-mode="masquer"] .hl-barre { left: 0; }
}
.hl-feuille-fond { position: fixed; inset: 0; z-index: 1060; background: rgba(10, 16, 22, .45); }
.hl-feuille { position: fixed; z-index: 1061; left: 0; right: 0; bottom: 0; max-height: 88vh; max-height: 88dvh; display: flex; flex-direction: column;
	background: var(--gss-surface); border-radius: 18px 18px 0 0; box-shadow: var(--gss-shadow-pop);
	padding-bottom: env(safe-area-inset-bottom, 0px); animation: hl-monte .18s ease-out; }
@media (min-width: 768px) { .hl-feuille { left: 50%; right: auto; width: 560px; transform: translateX(-50%); bottom: auto; top: 8vh; border-radius: 16px; animation: none; } }
@keyframes hl-monte { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }
.hl-feuille-tete { display: flex; align-items: center; gap: .5rem; padding: .8rem 1rem .4rem; }
.hl-feuille-tete h2 { flex: 1; font-size: 1.15rem; margin: 0; }
.hl-feuille-corps { overflow-y: auto; padding: .4rem 1rem 1rem; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.hl-feuille-corps .btn-lg { width: 100%; min-height: 52px; }
.hl-modes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; margin-bottom: .75rem; }
.hl-modes button { border: 1px solid var(--gss-border-strong); background: var(--gss-surface); border-radius: 10px; min-height: 52px; font-weight: 600; color: var(--gss-text); }
.hl-modes button.is-choisi { border-color: var(--gss-primary); background: var(--gss-primary-soft); color: var(--gss-primary); box-shadow: inset 0 0 0 1px var(--gss-primary); }
.hl-modes button:disabled { opacity: .45; }
.hl-champ { display: block; margin-bottom: .7rem; }
.hl-champ > span { display: block; font-size: .85rem; color: var(--gss-muted); margin-bottom: .2rem; }
.hl-champ input, .hl-champ select, .hl-champ textarea { min-height: 46px; font-size: 1rem; }
.hl-interrupteur { display: flex; align-items: center; gap: .6rem; min-height: 46px; margin-bottom: .7rem; }
.hl-interrupteur input { width: 1.4rem; height: 1.4rem; }
.hl-file { list-style: none; margin: 0; padding: 0; }
.hl-file > li { background: var(--gss-surface); border: 1px solid var(--gss-border); border-left-width: 4px; border-radius: 12px; padding: .7rem .85rem; margin-bottom: .55rem; }
.hl-file > li.is-attente, .hl-file > li.is-envoi { border-left-color: var(--gss-accent); }
.hl-file > li.is-erreur, .hl-file > li.is-conflit, .hl-file > li.is-refusee { border-left-color: var(--gss-danger); }
.hl-file > li.is-enregistree { border-left-color: var(--gss-success); }
.hl-file > li.is-a_verifier { border-left-color: var(--gss-warning); }
.hl-f-tete { display: flex; gap: .5rem; align-items: baseline; flex-wrap: wrap; }
.hl-f-tete strong { flex: 1; min-width: 10rem; }
.hl-f-message { font-size: .85rem; margin: .35rem 0 0; color: var(--gss-muted); }
.hl-f-actions { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .5rem; }
.hl-vide { text-align: center; color: var(--gss-muted); padding: 2rem 1rem; }
.hl-vide i { font-size: 2rem; display: block; margin-bottom: .5rem; color: var(--gss-faint); }
.hl-grille { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .6rem; }
@media (max-width: 380px) { .hl-grille { grid-template-columns: 1fr; } .hl-onglets button { font-size: .88rem; padding: .6rem .2rem; } }

/* ---------- Synchronisation hors ligne : conflits et écarts (views/horsligne/conflits.php) ---------- */
.sync-liste { display: grid; gap: .75rem; padding: .75rem; }
.sync-op { background: var(--gss-surface); border: 1px solid var(--gss-border); border-left: 4px solid var(--gss-danger); border-radius: 12px; padding: .75rem .9rem; scroll-margin-top: 5rem; }
.sync-op.is-mineur { border-left-color: var(--gss-warning); }
.sync-op-tete { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .2rem .75rem; }
.sync-op-tete h3 { font-size: 1rem; font-weight: 650; margin: 0; flex: 1 1 14rem; }
.sync-op-total { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.sync-op-total small { font-weight: 400; color: var(--gss-muted); }
.sync-op-meta { font-size: .8rem; color: var(--gss-muted); margin: .25rem 0 .4rem; }
.sync-lignes { list-style: none; margin: .25rem 0 .5rem; padding: 0; font-size: .86rem; }
.sync-lignes li { display: flex; flex-wrap: wrap; align-items: baseline; gap: .1rem .65rem; padding: .35rem .4rem; border-top: 1px dashed var(--gss-border); border-radius: 6px; }
.sync-lignes li.is-visee { background: var(--gss-danger-soft); }
.sync-op.is-mineur .sync-lignes li.is-visee { background: var(--gss-warning-soft); }
.sync-l-num { width: 1.4rem; color: var(--gss-muted); font-variant-numeric: tabular-nums; }
.sync-l-nom { flex: 1 1 12rem; font-weight: 600; }
.sync-l-series { font-weight: 400; font-size: .8rem; color: var(--gss-muted); word-break: break-word; }
.sync-l-detail { color: var(--gss-muted); font-variant-numeric: tabular-nums; }
.sync-l-montant { min-width: 6rem; text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.sync-ecarts { list-style: none; margin: .4rem 0 0; padding: 0; display: grid; gap: .4rem; }
.sync-ecarts li { padding: .5rem .65rem; border-radius: 8px; font-size: .86rem; border-left: 3px solid var(--gss-warning); background: var(--gss-warning-soft); }
.sync-ecarts li.is-bloquant { border-left-color: var(--gss-danger); background: var(--gss-danger-soft); }
.sync-ecarts li > .bi { margin-right: .15rem; }
.sync-ecarts li.is-bloquant > .bi { color: var(--gss-danger); }
.sync-e-ligne { display: inline-block; font-size: .75rem; font-weight: 700; padding: 0 .4rem; border-radius: 999px; background: var(--gss-surface); border: 1px solid var(--gss-border); }
.sync-resolutions { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .45rem; }
.sync-op-decision { font-size: .8rem; color: var(--gss-muted); margin: .5rem 0 0; }
.sync-op-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .5rem; margin-top: .7rem; }
@media (max-width: 575.98px) {
	.sync-liste { padding: .5rem; }
	.sync-op-actions .btn, .sync-resolutions .btn { flex: 1 1 auto; min-height: 44px; }
	.sync-l-montant { min-width: 0; margin-left: auto; }
}

/* ---------- Historique d'un véhicule (panneau, views/clients/_historique_vehicule.php) ---------- */
.gss-vh-entete { display: grid; gap: .6rem; margin-bottom: .9rem; }
.gss-vh-plaque { display: flex; align-items: center; gap: .5rem; }
.gss-vh-plaque .gss-bon-plaque { font-size: 1.15rem; }
.gss-vh-infos { display: grid; grid-template-columns: minmax(7.5rem, auto) 1fr; gap: .25rem .9rem; margin: 0; font-size: .9rem; }
.gss-vh-infos dt { color: var(--gss-muted); font-weight: 500; }
.gss-vh-infos dd { margin: 0; overflow-wrap: anywhere; }
.gss-vh-ancien { text-decoration: line-through; text-decoration-color: var(--gss-faint); font-variant-numeric: tabular-nums; }
.gss-vh-actions { display: flex; flex-wrap: wrap; gap: .4rem; }
.gss-vh-clients { margin-bottom: .75rem; padding: .5rem .75rem; border-radius: var(--gss-radius-sm); background: var(--gss-bg); }
.gss-vh-clients ol { padding-left: 1.2rem; margin-top: .25rem; }
.gss-vh-fil { list-style: none; margin: 0; padding: 0; position: relative; }
.gss-vh-fil::before { content: ""; position: absolute; left: .95rem; top: .5rem; bottom: .5rem; width: 2px; background: var(--gss-border); }
.gss-vh-fil > li { position: relative; display: grid; grid-template-columns: 2rem 1fr; gap: .6rem; padding: .45rem 0; }
.gss-vh-icone { position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border-radius: 50%;
	background: var(--gss-surface); border: 2px solid var(--gss-border); color: var(--gss-muted); }
.gss-vh-bon .gss-vh-icone { width: 1.5rem; height: 1.5rem; margin-left: .25rem; font-size: .75rem; }
.gss-vh-evt.is-warning .gss-vh-icone { border-color: var(--gss-warning); color: var(--gss-warning); background: var(--gss-warning-soft); }
.gss-vh-evt.is-accent .gss-vh-icone { border-color: var(--gss-accent); color: var(--gss-accent-ink); background: var(--gss-accent-soft); }
.gss-vh-evt.is-success .gss-vh-icone { border-color: var(--gss-success); color: var(--gss-success); background: var(--gss-success-soft); }
.gss-vh-evt.is-danger .gss-vh-icone { border-color: var(--gss-danger); color: var(--gss-danger); background: var(--gss-danger-soft); }
.gss-vh-evt.is-info .gss-vh-icone { border-color: var(--gss-info); color: var(--gss-info); background: var(--gss-info-soft); }
.gss-vh-evt.is-majeur > div { padding: .35rem .6rem; border-radius: var(--gss-radius-sm); background: var(--gss-bg); }
.gss-vh-titre { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .5rem; }
.gss-vh-avant { color: var(--gss-muted); text-decoration: line-through; text-decoration-color: var(--gss-faint); }
.gss-vh-motif { color: var(--gss-muted); margin-top: .15rem; }
@media (max-width: 576px) {
	.gss-vh-infos { grid-template-columns: 1fr; gap: 0; }
	.gss-vh-infos dd { margin-bottom: .35rem; }
}
/* Gestion des opérations : actions sur les opérations cochées */
.gss-ops-masse { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; padding: .6rem .9rem; border-bottom: 1px solid var(--gss-border); }
/* Caisse : payer un sous-traitant */
.gss-st { display: grid; gap: .9rem; }
.gss-st-entete { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
.gss-st-liste { display: grid; gap: .35rem; max-height: 28rem; overflow-y: auto; border: 1px solid var(--gss-border); border-radius: .5rem; padding: .4rem; }
.gss-st-piece { display: grid; grid-template-columns: auto 1fr auto; gap: .6rem; align-items: start; padding: .45rem .5rem; border-radius: .4rem; cursor: pointer; overflow-wrap: anywhere; }
.gss-st-piece:hover { background: var(--gss-surface-2, rgba(0,0,0,.03)); }
.gss-st-piece input { margin-top: .25rem; }
.gss-st-prix { font-variant-numeric: tabular-nums; white-space: nowrap; font-weight: 600; }
.gss-st-total { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.5rem; padding: .6rem 0; border-top: 1px solid var(--gss-border); }
.gss-st-total > div:not(.small) { display: grid; }
.gss-st-total span { font-size: .8rem; color: var(--gss-muted); }

/* ---------------- Inventaire (views/inventaire, style/app/inventaire.js) ---------------- */
.gss-inv-ouvrir { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); align-items: start; }
.gss-inv-ouvrir-bouton { align-self: end; padding-bottom: 1.6rem; }
.gss-inv-entete { display: grid; gap: .75rem 1.5rem; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); align-items: start; }
.gss-inv-avance-texte { display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap; margin-bottom: .35rem; }
.gss-inv-avance-texte strong { font-size: 1.6rem; font-family: var(--gss-font-cond); line-height: 1; }
.gss-inv-avance .progress { height: .7rem; margin-bottom: .4rem; }
.gss-inv-totaux { display: grid; gap: .35rem; margin: 0; }
.gss-inv-totaux > div { display: flex; justify-content: space-between; gap: 1rem; border-bottom: 1px dashed var(--gss-border); padding-bottom: .2rem; }
.gss-inv-totaux dt { font-weight: 400; color: var(--gss-muted); }
.gss-inv-totaux dd { margin: 0; font-weight: 600; font-variant-numeric: tabular-nums; }
.gss-inv-fin { margin-top: .6rem; }
.gss-inv-fin summary { cursor: pointer; color: var(--gss-primary); font-size: .9rem; }
.gss-inv-fin-form { display: flex; gap: .5rem; align-items: start; margin-top: .4rem; }
.gss-inv-scan { display: flex; gap: .4rem; align-items: center; margin-bottom: .4rem; }
.gss-inv-scan-champ { position: relative; flex: 1 1 auto; margin: 0; }
.gss-inv-scan-champ .bi { position: absolute; left: .7rem; top: 50%; transform: translateY(-50%); color: var(--gss-muted); pointer-events: none; }
.gss-inv-scan-champ input { padding-left: 2.1rem; }
.gss-inv-scan:not(.is-recherche) .gss-inv-scan-champ input { font-size: 1.05rem; min-height: 2.6rem; }
.gss-inv-scan.is-recherche { margin: 0; flex: 1 1 14rem; }
.gss-inv-retour { min-height: 1.6rem; margin-bottom: .5rem; }
.gss-inv-retour-ligne { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .6rem; padding: .35rem .6rem; border-radius: var(--gss-radius-sm); background: var(--gss-surface-2); font-size: .92rem; }
.gss-inv-retour-ligne > span { flex: 1 1 12rem; }
.gss-inv-retour-ligne.is-article, .gss-inv-retour-ligne.is-unite, .gss-inv-retour-ligne.is-etalage { background: var(--gss-success-soft); }
.gss-inv-retour-ligne.is-article .bi, .gss-inv-retour-ligne.is-unite .bi { color: var(--gss-success); }
.gss-inv-retour-ligne.is-perdue, .gss-inv-retour-ligne.is-ailleurs { background: var(--gss-warning-soft); }
.gss-inv-retour-ligne.is-erreur { background: var(--gss-danger-soft); }
.gss-inv-filtres { display: flex; flex-wrap: wrap; gap: .5rem 1rem; align-items: center; margin-bottom: .5rem; }
.gss-inv-chips { display: flex; flex-wrap: wrap; gap: .35rem; }
.gss-inv-chip { border: 1px solid var(--gss-border-strong); background: var(--gss-surface); color: var(--gss-text); border-radius: 999px; padding: .3rem .75rem; font-size: .9rem; display: inline-flex; gap: .4rem; align-items: center; }
.gss-inv-chip.is-actif { background: var(--gss-primary); border-color: var(--gss-primary); color: var(--gss-on-primary); }
.gss-inv-nb { font-variant-numeric: tabular-nums; font-weight: 600; background: var(--gss-surface-3); color: var(--gss-text); border-radius: 999px; padding: 0 .45rem; font-size: .8rem; }
.gss-inv-chip.is-actif .gss-inv-nb { background: rgba(255, 255, 255, .22); color: inherit; }
.gss-inv-etalage { display: inline-flex; align-items: center; gap: .4rem; margin: 0; font-size: .9rem; color: var(--gss-muted); }
.gss-inv-etalage select { width: auto; max-width: 16rem; }
.gss-inv-masse { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem 1rem; padding: .35rem .2rem; border-bottom: 1px solid var(--gss-border); }
.gss-inv-liste { display: grid; }
.gss-inv-ligne { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto auto; gap: .4rem .9rem; align-items: center; padding: .55rem .5rem; border-bottom: 1px solid var(--gss-border); border-left: 4px solid transparent; }
.gss-inv.is-lecture .gss-inv-ligne { grid-template-columns: minmax(0, 1fr) auto auto auto; }
.gss-inv-ligne.is-a_compter, .gss-inv-ligne.is-non_vu { border-left-color: var(--gss-accent); background: color-mix(in srgb, var(--gss-accent-soft) 55%, transparent); }
.gss-inv-ligne.is-en_cours { border-left-color: var(--gss-info); }
.gss-inv-ligne.is-ecart { border-left-color: var(--gss-danger); }
.gss-inv-ligne.is-conforme, .gss-inv-ligne.is-ajuste { border-left-color: var(--gss-success); }
.gss-inv-ligne.is-flash { animation: gss-inv-flash 1.2s ease-out; }
@keyframes gss-inv-flash { from { background: var(--gss-primary-soft); } }
.gss-inv-art { display: grid; gap: .1rem; min-width: 0; overflow-wrap: anywhere; }
.gss-inv-infos { font-size: .85rem; color: var(--gss-muted); }
.gss-inv-etat { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem; }
.gss-inv-ajust { color: var(--gss-muted); }
.gss-inv-chiffre { display: grid; text-align: right; min-width: 3.5rem; }
.gss-inv-chiffre span { font-size: .75rem; color: var(--gss-muted); }
.gss-inv-chiffre strong { font-variant-numeric: tabular-nums; font-size: 1.05rem; }
.gss-inv-saisie { display: flex; align-items: center; gap: .3rem; }
.gss-inv-ok { min-width: 2.4rem; }
.gss-inv-qte { width: 8.5rem; flex-wrap: nowrap; }
.gss-inv-qte input { text-align: center; font-variant-numeric: tabular-nums; }
.gss-inv-acts { display: flex; align-items: center; gap: .2rem; justify-content: flex-end; }
.gss-inv-vues { font-size: .75rem; color: var(--gss-success); }
.gss-inv-plus { text-align: center; padding-top: .5rem; }
.gss-inv-u-resume { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem; }
.gss-inv-u-titre { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: .5rem; margin: .75rem 0 .35rem; }
.gss-inv-ajuster { border-radius: var(--gss-radius); padding: .6rem .8rem; margin-bottom: .5rem; }
.gss-inv-ajuster.is-manque { background: var(--gss-danger-soft); }
.gss-inv-ajuster.is-surplus { background: var(--gss-warning-soft); }
.gss-inv-ajouter { display: grid; gap: .5rem; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); margin-top: .4rem; }
.gss-inv-unites td, .gss-inv-unites th { vertical-align: middle; }
.gss-inv-u-marque { min-width: 7rem; }
.gss-inv-rapport-entete { margin-bottom: .75rem; }
@media (max-width: 991.98px) {
	.gss-inv-entete { grid-template-columns: minmax(0, 1fr); }
	.gss-inv-ligne { grid-template-columns: auto minmax(0, 1fr) auto; }
	.gss-inv-saisie { grid-column: 2 / -1; }
	.gss-inv-acts { grid-column: 2 / -1; justify-content: flex-start; }
	.gss-inv.is-lecture .gss-inv-ligne { grid-template-columns: minmax(0, 1fr) auto auto auto; }
}
@media (max-width: 575.98px) {
	.gss-inv-ligne { grid-template-columns: auto minmax(0, 1fr) auto; padding: .55rem .25rem; }
	.gss-inv-saisie { grid-column: 1 / -1; }
	.gss-inv-qte { flex: 1 1 auto; width: auto; }
	.gss-inv-acts { grid-column: 1 / -1; }
	.gss-inv.is-lecture .gss-inv-ligne { grid-template-columns: minmax(0, 1fr) auto auto; }
	.gss-inv.is-lecture .gss-inv-art { grid-column: 1 / -1; }
	.gss-inv-etalage select { max-width: 11rem; }
}
@media print {
	.gss-inv-chips, .gss-inv-etalage, .gss-inv-scan, .gss-inv-plus, .gss-card-actions { display: none !important; }
	.gss-inv-ligne { break-inside: avoid; background: none !important; }
}
