/**
 * Nova Cookies — styles du site public.
 *
 * Toutes les couleurs passent par des variables CSS, surchargées en ligne
 * depuis les réglages du plugin. Les contrastes par défaut respectent le
 * niveau AA du RGAA / WCAG 2.1.
 */

:root {
	--nvc-bg: #ffffff;
	--nvc-text: #1e293b;
	--nvc-accept: #16a34a;
	--nvc-reject: #dc2626;
	--nvc-prefs: #64748b;
	--nvc-link: #2563eb;
	--nvc-btn-text: #ffffff;
	--nvc-radius: 10px;
	--nvc-width: 1100px;
	--nvc-offset-x: 16px;
	--nvc-offset-y: 16px;
	--nvc-float-x: 16px;
	--nvc-float-y: 16px;

	--nvc-surface: var(--nvc-bg);
	--nvc-muted: rgba(30, 41, 59, .72);
	--nvc-border: rgba(30, 41, 59, .18);
	--nvc-shadow: 0 -2px 24px rgba(15, 23, 42, .18);
	--nvc-focus: #0f172a;
	--nvc-z: 999990;
}

.nvc-theme-dark {
	--nvc-muted: rgba(255, 255, 255, .78);
	--nvc-border: rgba(255, 255, 255, .24);
	--nvc-focus: #ffffff;
}

/*
 * Thème automatique : la bannière suit la préférence système du visiteur.
 * Les couleurs de fond et de texte sombres sont injectées en ligne depuis
 * les réglages ; seules les valeurs dérivées sont fixées ici.
 */
@media (prefers-color-scheme: dark) {
	.nvc-theme-auto {
		--nvc-muted: rgba(255, 255, 255, .78);
		--nvc-border: rgba(255, 255, 255, .24);
		--nvc-focus: #ffffff;
	}
}

/* Texte réservé aux lecteurs d'écran, retiré du flux visuel. */
.nvc-sr {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

.nvc-root[hidden],
.nvc-root [hidden],
.nvc-floating[hidden] {
	display: none !important;
}

/* Empêche le défilement de l'arrière-plan quand la fenêtre modale est ouverte. */
.nvc-locked {
	overflow: hidden;
}

/* ── Voile ────────────────────────────────────────────────────────── */

.nvc-overlay {
	position: fixed;
	inset: 0;
	background: rgba(15, 23, 42, .55);
	z-index: var(--nvc-z);
}

/* ── Bannière ─────────────────────────────────────────────────────── */

.nvc-banner {
	position: fixed;
	left: 50%;
	transform: translateX(-50%);
	width: min(calc(100% - 2rem), var(--nvc-width));
	max-height: calc(100vh - 2rem);
	max-height: calc(100dvh - 2rem);
	overflow-y: auto;
	box-sizing: border-box;
	padding: 1.25rem 1.5rem;
	background: var(--nvc-surface);
	color: var(--nvc-text);
	border: 1px solid var(--nvc-border);
	border-radius: var(--nvc-radius);
	box-shadow: var(--nvc-shadow);
	z-index: calc(var(--nvc-z) + 1);
	font-size: .95rem;
	line-height: 1.55;
}

.nvc-pos-bottom .nvc-banner {
	bottom: 1rem;
}

.nvc-pos-top .nvc-banner {
	top: 1rem;
}

.nvc-layout-box .nvc-banner,
.nvc-layout-modal .nvc-banner {
	max-width: 420px;
}

.nvc-layout-modal .nvc-banner {
	top: 50%;
	bottom: auto;
	transform: translate(-50%, -50%);
}

.nvc-banner__title {
	margin: 0 0 .5rem;
	font-size: 1.1rem;
	line-height: 1.3;
	color: inherit;
}

.nvc-banner__message {
	margin: 0;
	color: var(--nvc-muted);
}

.nvc-banner__message p:last-child {
	margin-bottom: 0;
}

.nvc-banner__legal,
.nvc-modal__legal {
	margin: .75rem 0 0;
	font-size: .85rem;
}

.nvc-link {
	color: var(--nvc-link);
	text-decoration: underline;
}

.nvc-banner__actions {
	display: flex;
	flex-wrap: wrap;
	gap: .625rem;
	margin-top: 1rem;
}

.nvc-layout-bar .nvc-banner {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: 1rem;
}

.nvc-layout-bar .nvc-banner__actions {
	margin-top: 0;
	flex-shrink: 0;
	justify-content: flex-end;
}

/* ── Boutons ──────────────────────────────────────────────────────── */

/*
 * Acceptation et refus partagent volontairement la même géométrie, la même
 * taille de police et le même poids : la CNIL exige que refuser soit aussi
 * simple et aussi visible qu'accepter. Seule la teinte diffère.
 */
.nvc-btn {
	flex: 1 1 auto;
	min-height: 44px;
	padding: .6rem 1.1rem;
	font: inherit;
	font-weight: 600;
	color: var(--nvc-btn-text);
	background: var(--nvc-prefs);
	border: 1px solid transparent;
	border-radius: calc(var(--nvc-radius) - 2px);
	cursor: pointer;
	white-space: nowrap;
}

.nvc-btn--accept {
	background: var(--nvc-accept);
}

.nvc-btn--reject {
	background: var(--nvc-reject);
}

.nvc-btn:hover {
	filter: brightness(1.08);
}

.nvc-banner:focus,
.nvc-banner:focus-visible {
	outline: none;
}

.nvc-btn:focus-visible,
.nvc-switch__input:focus-visible + .nvc-switch__track,
.nvc-modal__close:focus-visible,
.nvc-floating:focus-visible,
.nvc-link:focus-visible {
	outline: 3px solid var(--nvc-focus);
	outline-offset: 2px;
}

/* ── Fenêtre de préférences ───────────────────────────────────────── */

/*
 * Sur iOS Safari, `inset: 0` et `100vh` se réfèrent au viewport barre
 * d'adresse rétractée, donc plus haut que la zone réellement visible :
 * la fenêtre déborde alors en haut et en bas selon l'état de la barre au
 * moment de l'ouverture. `dvh` suit la hauteur visible réelle ; `vh`
 * reste en repli pour les navigateurs qui ne le connaissent pas.
 */
.nvc-modal {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100vh;
	height: 100dvh;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1rem;
	box-sizing: border-box;
	background: rgba(15, 23, 42, .55);
	z-index: calc(var(--nvc-z) + 2);
}

.nvc-modal__dialog {
	display: flex;
	flex-direction: column;
	width: min(100%, 640px);
	max-height: calc(100vh - 2rem);
	max-height: calc(100dvh - 2rem);
	background: var(--nvc-surface);
	color: var(--nvc-text);
	border-radius: var(--nvc-radius);
	box-shadow: 0 12px 48px rgba(15, 23, 42, .32);
}

.nvc-modal__head,
.nvc-modal__foot {
	display: flex;
	align-items: center;
	gap: .625rem;
	padding: 1rem 1.25rem;
}

.nvc-modal__head {
	justify-content: space-between;
	border-bottom: 1px solid var(--nvc-border);
}

.nvc-modal__foot {
	flex-wrap: wrap;
	border-top: 1px solid var(--nvc-border);
}

/*
 * Le dialogue reçoit le focus à l'ouverture (voir showModal). Il n'est
 * pas dans le parcours de tabulation et son contour est masqué : le
 * focus reste programmatique et invisible pour l'utilisateur à la souris.
 */
.nvc-modal__dialog:focus,
.nvc-modal__dialog:focus-visible {
	outline: none;
}

.nvc-modal__title {
	margin: 0;
	font-size: 1.05rem;
	color: inherit;
}

/*
 * Même traitement que le bouton de fermeture du plugin PWA : les thèmes
 * déclarent presque tous une règle sur `button` avec une spécificité
 * supérieure, d'où le `!important` sur les propriétés d'apparence.
 */
#nvc-root .nvc-modal__close,
#nvc-root button.nvc-modal__close {
	appearance: none !important;
	-webkit-appearance: none !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	width: 34px !important;
	height: 34px !important;
	min-width: 34px !important;
	min-height: 34px !important;
	padding: 0 !important;
	font-size: 1.25rem !important;
	line-height: 1 !important;
	color: inherit !important;
	background-color: #e5e5e5 !important;
	background-image: none !important;
	border: 0 !important;
	border-radius: 50% !important;
	box-shadow: none !important;
	cursor: pointer !important;
}

.nvc-modal__body {
	padding: 1rem 1.25rem;
	overflow-y: auto;
	font-size: .95rem;
	line-height: 1.55;
}

.nvc-cats {
	margin: 0;
	padding: 0;
	list-style: none;
}

.nvc-cat + .nvc-cat {
	margin-top: 1rem;
	padding-top: 1rem;
	border-top: 1px solid var(--nvc-border);
}

.nvc-cat__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
}

.nvc-cat__label {
	font-weight: 600;
	cursor: pointer;
}

.nvc-cat__desc,
.nvc-cat__locked {
	margin: .35rem 0 0;
	color: var(--nvc-muted);
	font-size: .875rem;
}

/* ── Interrupteur ─────────────────────────────────────────────────── */

.nvc-switch {
	position: relative;
	flex-shrink: 0;
	display: inline-block;
	width: 46px;
	height: 26px;
}

/*
 * La case reste dans le flux d'accessibilité : elle est simplement rendue
 * transparente et superposée à sa représentation graphique. L'utilisateur
 * au clavier ou au lecteur d'écran interagit avec un vrai `checkbox`.
 */
.nvc-switch__input,
.nvc-switch input[type="checkbox"].nvc-switch__input {
	position: absolute;
	inset: 0;
	z-index: 2;
	box-sizing: border-box;
	width: 100%;
	height: 100%;
	min-width: 0;
	min-height: 0;
	max-width: none;
	max-height: none;
	margin: 0;
	padding: 0;
	cursor: pointer;
	/*
	 * Certains thèmes et plugins d'accessibilité forcent l'affichage des
	 * cases à cocher (`opacity`, `appearance`, `background`, bordures…).
	 * On neutralise donc tout rendu natif de façon explicite pour éviter
	 * la superposition d'une case par-dessus l'interrupteur.
	 */
	-webkit-appearance: none !important;
	-moz-appearance: none !important;
	appearance: none !important;
	opacity: 0 !important;
	visibility: visible !important;
	background: none !important;
	background-color: transparent !important;
	background-image: none !important;
	border: 0 !important;
	border-radius: 13px !important;
	box-shadow: none !important;
	outline: none !important;
	color: transparent !important;
	-webkit-tap-highlight-color: transparent;
	transition: none !important;
	transform: none !important;
}

.nvc-switch__input::before,
.nvc-switch__input::after,
.nvc-switch input[type="checkbox"].nvc-switch__input::before,
.nvc-switch input[type="checkbox"].nvc-switch__input::after {
	content: none !important;
	display: none !important;
}

.nvc-switch__track {
	position: absolute;
	inset: 0;
	z-index: 1;
	background: var(--nvc-prefs);
	border-radius: 13px;
	pointer-events: none;
	transition: background .15s ease;
}

.nvc-switch__track::after {
	content: "";
	position: absolute;
	top: 3px;
	left: 3px;
	width: 20px;
	height: 20px;
	background: #ffffff;
	border-radius: 50%;
	transition: transform .15s ease;
}

.nvc-switch__input:checked + .nvc-switch__track {
	background: var(--nvc-accept);
}

.nvc-switch__input:checked + .nvc-switch__track::after {
	transform: translateX(20px);
}

.nvc-switch__input:disabled {
	cursor: not-allowed;
}

.nvc-switch__input:disabled + .nvc-switch__track {
	opacity: .55;
}

/* ── Bouton flottant ──────────────────────────────────────────────── */

.nvc-floating {
	position: fixed;

	/*
	 * Coin et décalages pilotés depuis les réglages : un widget de chat
	 * ou une barre fixe du thème occupe souvent le coin par défaut.
	 */
	left: var(--nvc-float-x);
	bottom: var(--nvc-float-y);
	width: 48px;
	height: 48px;
	font-size: 1.4rem;
	line-height: 1;
	background: var(--nvc-surface);
	color: var(--nvc-text);
	border: 1px solid var(--nvc-border);
	border-radius: 50%;
	box-shadow: 0 2px 12px rgba(15, 23, 42, .2);
	cursor: pointer;
	z-index: var(--nvc-z);
}

/* ── Espace réservé des contenus bloqués ──────────────────────────── */

.nvc-placeholder {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: .75rem;
	min-height: 180px;
	padding: 1.5rem;
	text-align: center;
	background: rgba(100, 116, 139, .1);
	border: 1px dashed var(--nvc-border);
	border-radius: var(--nvc-radius);
}

.nvc-placeholder__text {
	margin: 0;
	font-size: .9rem;
}

.nvc-placeholder__button {
	min-height: 44px;
	padding: .5rem 1rem;
	font: inherit;
	font-weight: 600;
	color: #ffffff;
	background: var(--nvc-accept);
	border: 0;
	border-radius: calc(var(--nvc-radius) - 2px);
	cursor: pointer;
}

/* ── Responsive ───────────────────────────────────────────────────── */

@media (max-width: 782px) {

	.nvc-layout-bar .nvc-banner {
		display: block;
	}

	.nvc-layout-bar .nvc-banner__actions {
		margin-top: 1rem;
	}

	.nvc-banner__actions .nvc-btn,
	.nvc-modal__foot .nvc-btn {
		flex: 1 1 100%;
	}
}

/* ── Animations ───────────────────────────────────────────────────── */

@media (prefers-reduced-motion: no-preference) {

	.nvc-anim-fade .nvc-banner {
		animation: nvc-fade .25s ease-out;
	}

	.nvc-anim-slide.nvc-pos-bottom .nvc-banner {
		animation: nvc-slide-up .25s ease-out;
	}

	.nvc-anim-slide.nvc-pos-top .nvc-banner {
		animation: nvc-slide-down .25s ease-out;
	}

	/*
	 * Disparition de la bannière : même durée et même courbe que la
	 * fenêtre de préférences, et symétrique de l'animation d'entrée
	 * choisie dans les réglages. La bannière se retirait jusqu'ici
	 * d'un seul coup, ce qui rendait la fermeture perceptiblement
	 * différente selon l'endroit d'où elle était déclenchée.
	 */
	.nvc-anim-fade .nvc-banner.nvc-closing {
		animation: nvc-fade-out .2s ease-in forwards;
	}

	.nvc-anim-slide.nvc-pos-bottom .nvc-banner.nvc-closing {
		animation: nvc-slide-down-out .2s ease-in forwards;
	}

	.nvc-anim-slide.nvc-pos-top .nvc-banner.nvc-closing {
		animation: nvc-slide-up-out .2s ease-in forwards;
	}

	/*
	 * Le volet de préférences n'a pas de variante par position ni de
	 * classe d'animation configurable comme la bannière : il s'ouvre
	 * toujours au centre de l'écran, quel que soit ce qui l'a
	 * déclenché (bannière, bouton flottant, lien `nvc-open-settings`).
	 * Une seule paire d'animations suffit donc.
	 */
	.nvc-modal:not([hidden]):not(.nvc-closing) {
		animation: nvc-fade .2s ease-out;
	}

	.nvc-modal:not([hidden]):not(.nvc-closing) .nvc-modal__dialog {
		animation: nvc-modal-in .25s ease-out;
	}

	.nvc-modal.nvc-closing {
		animation: nvc-fade-out .2s ease-in forwards;
	}

	.nvc-modal.nvc-closing .nvc-modal__dialog {
		animation: nvc-modal-out .2s ease-in forwards;
	}
}

@media (prefers-reduced-motion: reduce) {

	.nvc-banner,
	.nvc-modal,
	.nvc-modal__dialog,
	.nvc-switch__track,
	.nvc-switch__track::after {
		animation: none !important;
		transition: none !important;
	}
}

@keyframes nvc-fade {

	from {
		opacity: 0;
	}
}

@keyframes nvc-modal-in {

	from {
		opacity: 0;
		transform: translateY(1rem) scale(.97);
	}
}

@keyframes nvc-fade-out {

	to {
		opacity: 0;
	}
}

@keyframes nvc-modal-out {

	to {
		opacity: 0;
		transform: translateY(1rem) scale(.97);
	}
}

@keyframes nvc-slide-down-out {

	to {
		opacity: 0;
		transform: translate(-50%, 1.5rem);
	}
}

@keyframes nvc-slide-up-out {

	to {
		opacity: 0;
		transform: translate(-50%, -1.5rem);
	}
}

@keyframes nvc-slide-up {

	from {
		opacity: 0;
		transform: translate(-50%, 1.5rem);
	}
}

@keyframes nvc-slide-down {

	from {
		opacity: 0;
		transform: translate(-50%, -1.5rem);
	}
}

/* ── Contraste renforcé ───────────────────────────────────────────── */

@media (forced-colors: active) {

	.nvc-banner,
	.nvc-modal__dialog,
	.nvc-btn,
	.nvc-floating {
		border: 1px solid CanvasText;
	}
}

/* ─────────────────────────────────────────────────────────────────────
   Codes courts : déclaration de cookies, bouton d'ouverture, état.
   Styles volontairement sobres et sans largeur imposée : le composant
   est inséré dans le contenu du thème et doit en épouser la grille.
   ───────────────────────────────────────────────────────────────────── */

.nvc-declaration__title {
	margin: 1.5em 0 0.5em;
}

.nvc-declaration__table {
	border-collapse: collapse;
	font-size: 0.9em;
	width: 100%;
}

.nvc-declaration__table th,
.nvc-declaration__table td {
	border: 1px solid rgba( 0, 0, 0, 0.12 );
	padding: 0.5em 0.7em;
	text-align: left;
	vertical-align: top;
}

.nvc-declaration__table th {
	font-weight: 600;
}

.nvc-declaration__table code {
	font-size: 0.92em;
	word-break: break-all;
}

/* Le tableau reste consultable sur mobile sans casser la mise en page. */
@media ( max-width: 600px ) {

	.nvc-declaration {
		overflow-x: auto;
	}
}

.nvc-inline-open {
	background: var( --nvc-prefs, #64748b );
	border: 0;
	border-radius: var( --nvc-radius, 10px );
	color: #fff;
	cursor: pointer;
	font: inherit;
	padding: 0.6em 1.2em;
}

.nvc-inline-open:focus-visible {
	outline: 2px solid var( --nvc-link, #2563eb );
	outline-offset: 2px;
}

/* Écritures de droite à gauche : arabe, hébreu, persan. */
[dir="rtl"] .nvc-declaration__table th,
[dir="rtl"] .nvc-declaration__table td {
	text-align: right;
}


/* ── Coin du bouton flottant ──────────────────────────────────────── */

.nvc-floating--bottom-left {
	left: var(--nvc-float-x);
	right: auto;
	bottom: var(--nvc-float-y);
	top: auto;
}

.nvc-floating--bottom-right {
	left: auto;
	right: var(--nvc-float-x);
	bottom: var(--nvc-float-y);
	top: auto;
}

.nvc-floating--top-left {
	left: var(--nvc-float-x);
	right: auto;
	top: var(--nvc-float-y);
	bottom: auto;
}

.nvc-floating--top-right {
	left: auto;
	right: var(--nvc-float-x);
	top: var(--nvc-float-y);
	bottom: auto;
}

/* ── Décalages de la bannière ─────────────────────────────────────── */

/*
 * En disposition « encart d'angle », la bannière est ancrée à un côté et
 * écartée des bords selon les décalages configurés. En barre pleine
 * largeur, seul le décalage vertical s'applique : la largeur reste pilotée
 * par --nvc-width, et forcer un décalage horizontal désalignerait la barre.
 */
/*
 * La bannière est `position: fixed` et centrée via `left: 50%` +
 * `translateX(-50%)`. Des marges n'ont donc aucun effet sur son ancrage :
 * les décalages doivent piloter `inset` directement, et l'ancrage latéral
 * doit neutraliser le centrage (`left: 50%` et la transformation).
 */
.nvc-layout-box.nvc-side-left .nvc-banner {
	left: var(--nvc-offset-x, 1rem);
	right: auto;
	transform: none;
}

.nvc-layout-box.nvc-side-right .nvc-banner {
	left: auto;
	right: var(--nvc-offset-x, 1rem);
	transform: none;
}

.nvc-layout-box.nvc-side-center .nvc-banner {
	left: 50%;
	right: auto;
	transform: translateX(-50%);
}

.nvc-pos-bottom .nvc-banner {
	bottom: var(--nvc-offset-y, 1rem);
	top: auto;
}

.nvc-pos-top .nvc-banner {
	top: var(--nvc-offset-y, 1rem);
	bottom: auto;
}

/* ─────────────────────────────────────────────────────────────────────
   Boutons imposés (réglage « force_button_styles »).

   Les thèmes déclarent presque tous une règle sur `button`, souvent avec
   une spécificité supérieure à celle d'une classe simple, et parfois un
   `text-transform` ou un fond propre. Le rendu réel de la bannière ne
   correspondait alors pas à l'aperçu de l'administration, et la palette
   choisie restait sans effet. Les règles ci-dessous sont volontairement
   plus spécifiques (id + classe) et limitées à l'apparence : géométrie,
   police et symétrie accepter / refuser restent inchangées.
   ───────────────────────────────────────────────────────────────────── */

#nvc-root.nvc-forced .nvc-btn,
#nvc-root.nvc-forced button.nvc-btn {
	background-color: var(--nvc-prefs);
	background-image: none;
	color: var(--nvc-btn-text);
	border: 1px solid transparent;
	border-radius: calc(var(--nvc-radius) - 2px);
	box-shadow: none;
	text-decoration: none;
	text-shadow: none;
	letter-spacing: normal;
	opacity: 1;
}

#nvc-root.nvc-forced .nvc-btn--accept,
#nvc-root.nvc-forced button.nvc-btn--accept {
	background-color: var(--nvc-accept);
	color: var(--nvc-btn-text);
}

#nvc-root.nvc-forced .nvc-btn--reject,
#nvc-root.nvc-forced button.nvc-btn--reject {
	background-color: var(--nvc-reject);
	color: var(--nvc-btn-text);
}

#nvc-root.nvc-forced .nvc-btn--prefs,
#nvc-root.nvc-forced button.nvc-btn--prefs {
	background-color: var(--nvc-prefs);
	color: var(--nvc-btn-text);
}

#nvc-root.nvc-forced .nvc-btn:hover,
#nvc-root.nvc-forced button.nvc-btn:hover {
	filter: brightness(1.08);
	background-image: none;
}

/* ── Message d'échec d'enregistrement ─────────────────────────────── */
.nvc-banner__error {
	margin: 8px 0 0;
	padding: 8px 12px;
	border-radius: 6px;
	background: rgba(220, 38, 38, 0.1);
	color: var(--nvc-reject, #dc2626);
	font-size: 0.875rem;
}

.nvc-banner__error[hidden] {
	display: none;
}

/* ── Invitation de renouvellement du consentement ─────────────────── */
.nvc-banner__renewal {
	margin: 0 0 8px;
	font-size: 0.875rem;
	font-weight: 600;
	color: var(--nvc-text, #1e293b);
}

/* ------------------------------------------------------------------
 * Politique cookies : bloc « nova-cookies/policy-table » et code court
 * [nova_cookies_policy]. Le balisage est identique pour tout visiteur,
 * aucune règle ne dépend donc de l'état du consentement.
 * ------------------------------------------------------------------ */

.nvc-policy {
	--nvc-policy-border: rgba( 0, 0, 0, 0.12 );
	--nvc-policy-muted: rgba( 0, 0, 0, 0.62 );
}

.nvc-policy__title {
	margin: 1.6em 0 0.4em;
}

.nvc-policy__intro,
.nvc-policy__count,
.nvc-policy__updated,
.nvc-policy__truncated,
.nvc-policy__empty {
	margin: 0 0 0.6em;
	font-size: 0.92em;
	color: var( --nvc-policy-muted );
}

.nvc-policy__table {
	width: 100%;
	margin: 0 0 1.4em;
	border-collapse: collapse;
	font-size: 0.94em;
	table-layout: auto;
}

.nvc-policy__table th,
.nvc-policy__table td {
	padding: 0.55em 0.7em;
	border-bottom: 1px solid var( --nvc-policy-border );
	text-align: left;
	vertical-align: top;
	word-break: break-word;
}

.nvc-policy__table thead th {
	border-bottom-width: 2px;
	font-weight: 600;
	white-space: nowrap;
}

.nvc-policy__table code {
	font-size: 0.92em;
	word-break: break-all;
}

.nvc-policy--compact .nvc-policy__table th,
.nvc-policy--compact .nvc-policy__table td {
	padding: 0.35em 0.5em;
	font-size: 0.9em;
}

.nvc-policy--compact .nvc-policy__count {
	display: none;
}

/*
 * Sur mobile, un tableau de six colonnes déborde systématiquement. Les
 * lignes sont donc empilées et chaque cellule reprend l'intitulé de sa
 * colonne, déjà présent dans data-label côté serveur.
 */
@media ( max-width: 600px ) {
	.nvc-policy__table,
	.nvc-policy__table tbody,
	.nvc-policy__table tr,
	.nvc-policy__table td {
		display: block;
		width: 100%;
	}

	.nvc-policy__table thead {
		position: absolute;
		width: 1px;
		height: 1px;
		overflow: hidden;
		clip: rect( 1px, 1px, 1px, 1px );
		white-space: nowrap;
	}

	.nvc-policy__table tr {
		margin: 0 0 0.9em;
		border: 1px solid var( --nvc-policy-border );
		border-radius: 6px;
		padding: 0.3em 0.2em;
	}

	.nvc-policy__table td {
		border-bottom: 0;
		padding: 0.35em 0.7em;
	}

	.nvc-policy__table td::before {
		display: block;
		content: attr( data-label );
		font-size: 0.78em;
		font-weight: 600;
		text-transform: uppercase;
		letter-spacing: 0.02em;
		color: var( --nvc-policy-muted );
	}
}

/* ------------------------------------------------------------------
 * Régimes juridiques. Le HTML servi est identique pour tous ; seul
 * l'attribut data-nvc-regime, posé par le script après résolution du
 * pays, distingue les présentations.
 * ------------------------------------------------------------------ */

.nvc-btn--optout {
	background: transparent;
	border: 1px solid currentColor;
	font-weight: 500;
	text-align: center;
}

[data-nvc-regime="notice"] .nvc-banner__actions {
	justify-content: flex-end;
}

/*
 * Détail par service dans la fenêtre de préférences.
 *
 * La liste est repliée par défaut : elle n'a d'intérêt que pour le visiteur
 * qui veut affiner, et la déplier d'office noierait l'arbitrage principal,
 * qui reste celui des catégories.
 */
.nvc-cat__services {
	margin-top: 8px;
}

.nvc-cat__services > summary {
	cursor: pointer;
	font-size: .875em;
	color: var(--nvc-muted);
	padding: 4px 0;
}

.nvc-cat__services > summary:focus-visible {
	outline: 2px solid var(--nvc-focus);
	outline-offset: 2px;
}

.nvc-cat__services ul {
	list-style: none;
	margin: 4px 0 0;
	padding: 0 0 0 12px;
	border-left: 1px solid var(--nvc-border);
}

.nvc-svc {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 6px 0;
}

.nvc-svc__label {
	font-size: .9375em;
	cursor: pointer;
}

.nvc-switch--small {
	transform: scale(.8);
	transform-origin: right center;
}

/* Page d'opposition à la vente et au partage de données personnelles. */
.nvc-optout__button {
	background: var(--nvc-reject);
	color: var(--nvc-btn-text);
	border: 0;
	border-radius: var(--nvc-radius);
	padding: 10px 18px;
	font: inherit;
	cursor: pointer;
}

.nvc-optout__button:focus-visible {
	outline: 2px solid var(--nvc-focus);
	outline-offset: 2px;
}

.nvc-optout__state {
	font-weight: 600;
}

.nvc-optout__more {
	color: var(--nvc-muted);
	font-size: .9375em;
}

/* Politique de cookies générée. */
.nvc-policy-doc .nvc-policy__table {
	width: 100%;
	border-collapse: collapse;
	margin: 12px 0;
}

.nvc-policy-doc .nvc-policy__table th,
.nvc-policy-doc .nvc-policy__table td {
	text-align: left;
	padding: 8px;
	border-bottom: 1px solid var(--nvc-border);
	vertical-align: top;
}
