/* APP.CSS - Styles de l'application générée */
/* MODIF-02122025-APP_STYLES: Template généré par ISB */
/* Ce fichier est généré automatiquement par le générateur ISB */
/* NE PAS MODIFIER MANUELLEMENT */

/* MODIF-25122025-FONT_STYLES: Import Google Font "Ms Madi" pour dictionnaire */
@import url('https://fonts.googleapis.com/css2?family=Ms+Madi&display=swap');

/* ============================================================
   SECTION 1 : VARIABLES CSS (thème par défaut)
   ============================================================ */

:root {
  /* Couleurs principales (overridées par thème Airtable) */
  --color-primary: #2563eb;
  --color-primary-dark: #1d4ed8;
  --color-primary-light: #3b82f6;
  --color-secondary: #64748b;
  --color-background: #f8fafc;
  --color-surface: #ffffff;
  --color-text: #1e293b;
  --color-text-light: #64748b;
  --color-border: #e2e8f0;

  /* États */
  --color-success: #22c55e;
  --color-error: #ef4444;
  --color-warning: #f59e0b;
  --color-info: #3b82f6;

  /* Espacements */
  --spacing-xs: 0.25rem;
  --spacing-sm: 0.5rem;
  --spacing-md: 1rem;
  --spacing-lg: 1.5rem;
  --spacing-xl: 2rem;
  --spacing-2xl: 3rem;

  /* Typographie */
  --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --font-size-xs: 0.75rem;
  --font-size-sm: 0.875rem;
  --font-size-md: 1rem;
  --font-size-lg: 1.125rem;
  --font-size-xl: 1.25rem;
  --font-size-2xl: 1.5rem;
  --font-size-3xl: 2rem;

  /* Bordures */
  --border-radius-sm: 0.25rem;
  --border-radius-md: 0.5rem;
  --border-radius-lg: 0.75rem;
  --border-radius-full: 9999px;

  /* Ombres */
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);

  /* Layout */
  --sidebar-width: 250px;
  --header-height: 60px;
  --footer-height: 50px;

  /* Transitions */
  --transition-fast: 150ms ease;
  --transition-normal: 250ms ease;
  --transition-slow: 350ms ease;
}

/* ============================================================
   SECTION 1b : THEME SOMBRE (MODIF-01012026-THEME)
   ============================================================ */

.theme-dark {
  /* MODIF-01012026-FIX: NE PAS écraser --color-background */
  /* Le background est défini par le thème Airtable (applyTheme) */
  --color-surface: #1e293b;
  --color-text: #f1f5f9;
  --color-text-light: #94a3b8;
  --color-border: #334155;

  /* Ombres inversées pour le dark mode */
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3);
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.3);
}

/* Éléments spécifiques pour thème sombre */
.theme-dark body {
  background-color: var(--color-background);
  color: var(--color-text);
}

.theme-dark .app-header,
.theme-dark .sidebar {
  background-color: var(--color-surface);
  border-color: var(--color-border);
}

.theme-dark .card,
.theme-dark .cockpit-card,
.theme-dark .cockpit-page {
  background-color: var(--color-surface);
  border-color: var(--color-border);
}

/* MODIF-01012026-FIX: Forcer fond blanc et texte foncé dans les pages cockpit */
.preferences-section,
.security-section,
.profile-section {
  background-color: #ffffff !important;
  border-color: #e2e8f0 !important;
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

.security-section h2,
.profile-section h2,
.preferences-section h2 {
  color: #1e293b !important;
  background: #334155;
  color: #ffffff !important;
  padding: 12px 16px;
  margin: calc(-1 * var(--spacing-lg)) calc(-1 * var(--spacing-lg)) var(--spacing-lg) calc(-1 * var(--spacing-lg));
  border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0;
}

.security-section p,
.profile-section p,
.preferences-section p,
.security-section label,
.profile-section label,
.preferences-section label {
  color: #475569 !important;
}

/* Inputs dans les pages cockpit */
.security-section input,
.security-section select,
.security-section textarea,
.profile-section input,
.preferences-section input {
  background-color: #ffffff !important;
  color: #1e293b !important;
  border: 1px solid #e2e8f0 !important;
}

/* Boutons secondaires */
.security-section .btn-secondary,
.profile-section .btn-secondary,
.preferences-section .btn-secondary {
  background-color: #f8fafc !important;
  color: #1e293b !important;
  border: 1px solid #e2e8f0 !important;
}

.security-section .btn-secondary:hover,
.profile-section .btn-secondary:hover,
.preferences-section .btn-secondary:hover {
  background-color: #e2e8f0 !important;
}

/* MODIF-01012026-FIX: Liens dans pages cockpit - visibles */
.cockpit-page a:not(.carte-external-link),
.security-section a,
.profile-section a,
.preferences-section a {
  color: #2563eb !important; /* Bleu primaire */
}

.cockpit-page a:not(.carte-external-link):hover,
.security-section a:hover,
.profile-section a:hover,
.preferences-section a:hover {
  color: #ffffff !important; /* Blanc au survol */
  background: #2563eb;
  padding: 2px 6px;
  border-radius: 4px;
  text-decoration: none !important;
}

/* Lien 2FA dans Mon Profil */
.link-2fa-action {
  color: #ef4444 !important; /* Rouge pour attirer l'attention */
  font-weight: 600;
  text-decoration: underline;
}

.link-2fa-action:hover {
  color: #ffffff !important;
  background: #ef4444 !important;
  padding: 4px 8px;
  border-radius: 4px;
  text-decoration: none !important;
}

/* MODIF-01012026-FIX: Styles page Mes Documents */
.documents-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.document-item {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-lg);
  background: #ffffff !important;
  border: 1px solid #e2e8f0;
  border-radius: var(--border-radius-lg);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
  transition: all 0.2s;
}

.document-item:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  transform: translateY(-2px);
}

.document-item .doc-icon {
  font-size: 32px;
  color: var(--color-primary);
}

.document-item .doc-info {
  flex: 1;
}

.document-item .doc-info h4 {
  margin: 0 0 4px 0;
  color: #1e293b !important;
  font-size: var(--font-size-md);
}

.document-item .doc-info p {
  margin: 0;
  color: #64748b !important;
  font-size: var(--font-size-sm);
}

.document-item .btn-download {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  background: var(--color-primary);
  color: white;
  border-radius: 50%;
  text-decoration: none;
  transition: all 0.2s;
}

.document-item .btn-download:hover {
  background: var(--color-primary-dark);
  transform: scale(1.1);
}

.doc-count {
  background: #e2e8f0;
  color: #475569;
  padding: 4px 12px;
  border-radius: 20px;
  font-size: var(--font-size-sm);
  margin-left: auto;
}

.theme-dark .notification-item,
.theme-dark .users-table {
  background-color: var(--color-surface);
}

.theme-dark .users-table th {
  background-color: var(--color-background);
}

.theme-dark .users-table tr:hover {
  background-color: rgba(255, 255, 255, 0.05);
}

/* ============================================================
   SECTION 2 : RESET & BASE
   ============================================================ */

*, *::before, *::after {
  box-sizing: border-box;
}

html {
  font-size: 16px;
  scroll-behavior: smooth;
}

body {
  margin: 0 auto;
  padding: 0;
  font-family: var(--font-family);
  font-size: var(--font-size-md);
  color: var(--color-text);
  background-color: var(--color-background);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* MODIF-31122025-FIX_SCROLL_HORIZONTAL: Empêcher scroll horizontal */
  overflow-x: hidden;
}

#app {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

a {
  color: var(--color-primary);
  text-decoration: none;
  transition: color var(--transition-fast);
}

a:hover {
  color: var(--color-primary-dark);
  text-decoration: underline;
}

img {
  max-width: 100%;
  height: auto;
}

button {
  cursor: pointer;
  font-family: inherit;
}

/* ============================================================
   SECTION 3 : LAYOUT PRINCIPAL
   ============================================================ */

.app-container {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

/* Header */
.app-header {
  height: var(--header-height);
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--spacing-lg);
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: var(--shadow-sm);
}

.header-left {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

.header-logo {
  height: 40px;
  width: auto;
}

.header-title {
  font-size: var(--font-size-xl);
  font-weight: 600;
  margin: 0 auto;
  color: var(--color-text);
}

.header-right {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

.user-menu {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

.user-name {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

.btn-logout {
  padding: var(--spacing-xs) var(--spacing-md);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  transition: all var(--transition-fast);
}

.btn-logout:hover {
  background: var(--color-error);
  border-color: var(--color-error);
  color: white;
}

/* Layout avec sidebar */
.app-layout {
  flex: 1;
  display: flex;
  min-height: calc(100vh - var(--header-height) - var(--footer-height));
}

/* Sidebar / Menu - MODIF-02122025-MENU_THEME */
/* MODIF-2025-12-12-NO_HARDCODE: Fallback neutre au lieu de couleur BBS */
.app-sidebar {
  width: var(--sidebar-width);
  background: var(--color-menu-bg, #333333);
  border-right: none;
  overflow-y: auto;
  overflow-x: hidden;
  flex-shrink: 0;
  transition: width var(--transition-normal), padding var(--transition-normal);
}

/* MODIF-02122025-SIDEBAR_HEADER: Logo et nom app dans le sidebar */
.sidebar-header {
  padding: var(--spacing-lg);
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  background: rgba(0, 0, 0, 0.2);
}

.sidebar-logo-container {
  text-align: center;
  margin-bottom: var(--spacing-md);
}

.sidebar-logo {
  max-width: 120px;
  max-height: 80px;
  width: auto;
  height: auto;
}

/* MODIF-29012026-SIDEBAR_HEADER: sidebar-title-row remplacé par sidebar-actions-row */
.sidebar-actions-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-md);
  margin-top: var(--spacing-sm);
}

.sidebar-title {
  font-size: var(--font-size-lg);
  font-weight: 600;
  color: white;
  margin: 0;
  text-align: center;
  word-break: break-word;
}

.sidebar-header .sidebar-toggle-btn {
  color: white;
  background: rgba(255, 255, 255, 0.1);
}

.sidebar-header .sidebar-toggle-btn:hover {
  background: rgba(255, 255, 255, 0.2);
}

.bureau-home-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.1);
  border: none;
  width: 36px;
  height: 36px;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  color: var(--color-accent, #0f1338);
  transition: background 0.2s, transform 0.2s;
  flex-shrink: 0;
}

.bureau-home-btn:hover {
  background: rgba(255, 255, 255, 0.2);
  transform: scale(1.1);
}

.bureau-home-btn svg {
  display: block;
}

/* MODIF-29012026-BUREAU_AUTONOME: Cacher icône Bureau sur mobile */
@media (max-width: 768px) {
  .bureau-home-btn {
    display: none !important;
  }
}

/* Header minimaliste (sans branding) */
.app-header-minimal {
  height: auto;
  min-height: 0;
  padding: var(--spacing-sm) var(--spacing-lg);
  background: transparent;
  border-bottom: none;
  box-shadow: none;
  position: absolute;
  top: 0;
  right: 0;
  z-index: 101;
}

.app-header-minimal .header-left {
  display: none;
}

.menu-container {
  padding: var(--spacing-sm);
}

/* Menu items - Base */
.menu-item {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-sm) var(--spacing-md);
  margin-bottom: var(--spacing-xs);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: all var(--transition-fast);
}

/* Niveau 1 - Catégories (CLUB, TRAINING, etc.) */
.menu-item.menu-niv1,
.menu-item.menu-category {
  color: var(--color-menu-niv1, #ff8500);
  font-weight: 700;
  font-size: var(--font-size-md);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-top: var(--spacing-md);
  cursor: default;
}

.menu-item.menu-category:first-child {
  margin-top: 0;
}

/* Niveau 2 - Items cliquables */
.menu-item.menu-niv2 {
  color: var(--color-menu-niv2, #ffffff);
  padding-left: var(--spacing-lg);
  font-weight: 400;
}

/* Niveau 3 - Sous-items */
.menu-item.menu-niv3 {
  color: var(--color-menu-niv3, #8b92a8);
  padding-left: calc(var(--spacing-lg) * 2);
  font-size: var(--font-size-sm);
}

/* Hover - seulement pour items cliquables */
.menu-item:not(.menu-category):hover {
  background: rgba(255, 255, 255, 0.1);
}

/* MODIF-2025-12-05-MENU_ACTIF: Item actif = couleur niv1 (simple et efficace) */
.menu-item.active {
  color: var(--color-menu-niv1, #ff8500);
  font-weight: 600;
}
/* MODIF-2025-12-05-MENU_ACTIF: Fin */

.menu-icon {
  font-size: var(--font-size-lg);
  width: 24px;
  text-align: center;
}

.menu-text {
  font-size: inherit;
  flex: 1;
  /* MODIF-28122025-FIX_MENU_WRAP: Permettre wrap sur plusieurs lignes */
  white-space: normal;
  word-wrap: break-word;
  line-height: 1.3;
}

/* MODIF-26122025-NOTIFICATIONS_BADGES: Icône cloche + nombre sur item menu */
/* MODIF-27122025: Badge plus visible + position fixe */
.menu-notif-indicator {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: 8px;
  padding: 2px 6px;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 10px;
  flex-shrink: 0;
}

/* MODIF-01032026-EVOLUTION_BADGE: Badge bleu pour notifs type Évolution (nouvelle page) */
.menu-notif-indicator.evolution {
  background: rgba(0, 212, 255, 0.25);
}
.menu-notif-indicator.evolution svg {
  color: #00d4ff;
}
.menu-notif-indicator.evolution .menu-notif-count {
  color: #00d4ff;
}

.menu-notif-indicator svg {
  flex-shrink: 0;
  width: 14px;
  height: 14px;
}

.menu-notif-count {
  font-size: 13px;
  font-weight: 700;
}

/* MODIF-01032026-EVOLUTION_BADGE: Badge bureau bleu pour Évolution */
.bureau-dalle-badge.evolution {
  background: #00d4ff;
}

/* MODIF-31122025-BADGE_ONGLET: Badge header visible desktop + mobile */
.header-notif-badge {
  display: none;  /* Caché par défaut, JS met display:flex quand count > 0 */
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  background: #ef4444;
  color: white;
  font-size: 11px;
  font-weight: 700;
  border-radius: 10px;
  cursor: pointer;
  margin-right: 8px;
  animation: pulse-badge 2s infinite;
}

@keyframes pulse-badge {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.1); }
}

.header-notif-badge:hover {
  background: #dc2626;
}

/* MODIF-02122025-ACCORDEON: Styles menu accordéon pliable/dépliable */

/* Groupe de menu (catégorie + sous-items) */
.menu-group {
  margin-bottom: var(--spacing-xs);
}

/* Catégorie cliquable avec chevron */
.menu-category {
  cursor: pointer !important;
  justify-content: flex-start;
}

.menu-category:hover {
  background: rgba(255, 255, 255, 0.05);
}

/* Chevron indicateur */
.menu-chevron {
  margin-left: auto;
  font-size: 1.25rem;
  transition: transform var(--transition-normal);
  opacity: 0.7;
}

.menu-chevron.rotated {
  transform: rotate(180deg);
}

/* Sous-menu caché par défaut */
.menu-submenu {
  max-height: 0;
  overflow: hidden;
  transition: max-height var(--transition-normal) ease-out;
}

/* Sous-menu ouvert */
.menu-submenu.open {
  max-height: 500px; /* Assez grand pour contenir tous les items */
}

/* Items dans le sous-menu */
.menu-submenu .menu-item {
  padding-left: calc(var(--spacing-md) + 8px);
  border-left: 2px solid transparent;
  margin-left: var(--spacing-sm);
}

.menu-submenu .menu-item:hover {
  border-left-color: var(--color-menu-niv1, #ff8500);
}

.menu-submenu .menu-item.active {
  border-left-color: var(--color-primary);
}

/* MODIF-03012026-3NIVEAUX: Styles pour menu niveau 3 */
/* Sous-groupe (niveau 2 avec enfants) */
.menu-subgroup {
  margin-left: var(--spacing-sm);
}

/* Header du sous-groupe (niveau 2 cliquable pour ouvrir niveau 3) */
.menu-subcategory {
  display: flex;
  align-items: center;
  padding: var(--spacing-sm) var(--spacing-md);
  padding-left: calc(var(--spacing-md) + 8px);
  color: var(--color-menu-niv2, #ffffff);
  cursor: pointer;
  transition: background-color var(--transition-fast);
  border-left: 2px solid transparent;
}

.menu-subcategory:hover {
  background-color: rgba(255, 255, 255, 0.08);
  border-left-color: var(--color-menu-niv2, #ff8500);
}

.menu-subcategory[data-expanded="true"] {
  background-color: rgba(255, 255, 255, 0.05);
}

/* Chevron petit pour sous-groupe */
.menu-chevron-small {
  font-size: 18px;
  margin-left: auto;
  opacity: 0.7;
  transition: transform var(--transition-fast);
}

.menu-chevron-small.rotated {
  transform: rotate(90deg);
}

/* Sous-sous-menu (contient niveau 3) */
.menu-subsubmenu {
  max-height: 0;
  overflow: hidden;
  transition: max-height var(--transition-normal) ease-out;
  background-color: rgba(0, 0, 0, 0.15);
}

.menu-subsubmenu.open {
  max-height: 300px;
}

/* Items niveau 3 */
.menu-item.menu-niv3 {
  padding-left: calc(var(--spacing-lg) + 16px);
  color: var(--color-menu-niv2, #cccccc);
  font-size: 0.9em;
  border-left: 2px solid transparent;
  margin-left: var(--spacing-md);
}

.menu-item.menu-niv3:hover {
  background-color: rgba(255, 255, 255, 0.08);
  border-left-color: var(--color-menu-niv2, #ff8500);
}

.menu-item.menu-niv3.active {
  background-color: rgba(255, 255, 255, 0.1);
  border-left-color: var(--color-primary);
}

/* Main content */
.app-main {
  flex: 1;
  overflow-y: auto;
  background: var(--color-background);
}

.content-container {
  padding: var(--spacing-xl);
  max-width: 1400px;
  margin: 0 auto;
}

/* MODIF-12012026-COCKPIT_FULLSCREEN: Cockpits plein écran (desktop ET mobile) */
/* MODIF-22012026-FULLSCREEN_UNIVERSAL: Ajout forms pour comportement identique */
/* Classe ajoutée par JS pour compatibilité navigateurs (car :has() pas supporté partout) */
.content-container.fullscreen-active,
.content-container.cockpit-fullscreen-active,
.content-container.form-fullscreen-active,
.content-container:has(.composant-cockpit-glass),
.content-container:has(.cockpit-user-stats-container),
.content-container:has(.formulaire-wrapper) {
  padding: 0 !important;
  max-width: 100% !important;
  width: 100% !important;
  margin: 0 !important;
}

#app-content.cockpit-fullscreen-active {
  padding: 0 !important;
}

.composant-cockpit-glass,
.cockpit-user-stats-container {
  width: 100% !important;
  max-width: 100% !important;
  min-height: calc(100vh - 60px) !important;
  border-radius: 0 !important;
  padding: var(--spacing-lg) !important;
  box-sizing: border-box !important;
}

/* Footer IDDEA style forms - MODIF-02122025-FOOTER_SPECS */
.app-footer {
  background: #ffffff;
  border-top: 3px solid var(--color-primary, #4CAF50);
  padding: var(--spacing-lg) var(--spacing-xl);
  text-align: center;
}

.footer-line {
  margin: 0 auto;
  padding: var(--spacing-xs) 0;
  font-size: 12px;
  color: #64748b;
  line-height: 1.5;
}

.footer-iddea {
  font-size: 13px;
  color: #475569;
}

.footer-iddea a {
  color: #2563eb;
  text-decoration: none;
  font-weight: 500;
}

.footer-iddea a:hover {
  text-decoration: underline;
}

.footer-iddea strong {
  color: #1e293b;
}

.footer-client {
  font-size: 13px;
  color: #475569;
}

.footer-legal {
  font-size: 10px;
  color: #94a3b8;
  /* max-width retire */
  margin: var(--spacing-sm) auto 0;
}

/* Legacy - keep for compatibility */
.footer-right {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
}

/* ============================================================
   SECTION 4 : PAGE DE CONNEXION
   ============================================================ */

.login-container {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);
  padding: var(--spacing-xl);
}

.login-box {
  width: 100%;
  max-width: 400px;
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-lg);
  padding: var(--spacing-2xl);
}

.login-header {
  text-align: center;
  margin-bottom: var(--spacing-xl);
}

.login-logo {
  max-height: 80px;
  margin-bottom: var(--spacing-md);
}

.login-title {
  font-size: var(--font-size-2xl);
  font-weight: 600;
  margin: 0 auto;
  color: var(--color-text);
}

.login-form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

.form-group {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.form-group label {
  font-size: var(--font-size-sm);
  font-weight: 500;
  color: var(--color-text);
}

.form-group input {
  padding: var(--spacing-sm) var(--spacing-md);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-md);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

.form-group input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}

.login-error {
  padding: var(--spacing-sm) var(--spacing-md);
  background: rgba(239, 68, 68, 0.1);
  border: 1px solid var(--color-error);
  border-radius: var(--border-radius-md);
  color: var(--color-error);
  font-size: var(--font-size-sm);
  text-align: center;
}

.btn-primary {
  padding: var(--spacing-sm) var(--spacing-lg);
  background: var(--color-primary);
  color: white;
  border: none;
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-md);
  font-weight: 500;
  transition: background var(--transition-fast);
}

.btn-primary:hover {
  background: var(--color-primary-dark);
}

.btn-primary:disabled {
  background: var(--color-secondary);
  cursor: not-allowed;
}

.btn-login {
  width: 100%;
  padding: var(--spacing-md);
  margin-top: var(--spacing-sm);
}

.login-footer {
  margin-top: var(--spacing-lg);
  text-align: center;
}

.link-forgot,
.link-register,
.link-back {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  display: block;
  margin-top: var(--spacing-xs);
}

.link-register {
  color: var(--color-primary);
  font-weight: 500;
}

.login-subtitle {
  color: var(--color-text-light);
  font-size: var(--font-size-sm);
  margin-top: var(--spacing-sm);
}

.login-success {
  padding: var(--spacing-sm) var(--spacing-md);
  background: rgba(255, 255, 255, 0.95);
  border: 2px solid #dc2626;
  border-radius: var(--border-radius-md);
  color: #dc2626;
  font-size: var(--font-size-sm);
  font-weight: 600;
  text-align: center;
}

.password-hint {
  font-size: var(--font-size-xs);
  color: var(--color-text-light);
  margin-top: var(--spacing-xs);
}

.text-small {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

/* Input code 2FA */
.input-code {
  font-family: monospace;
  font-size: var(--font-size-2xl);
  text-align: center;
  letter-spacing: 0.5em;
  padding: var(--spacing-md) !important;
}

/* 2FA Setup Page */
.twofa-setup {
  max-width: 600px;
  margin: 0 auto;
}

.twofa-step {
  margin-bottom: var(--spacing-2xl);
  padding-bottom: var(--spacing-xl);
  border-bottom: 1px solid var(--color-border);
}

.twofa-step:last-child {
  border-bottom: none;
}

.twofa-step h3 {
  font-size: var(--font-size-lg);
  margin: 0 0 var(--spacing-sm) 0;
  color: var(--color-primary);
}

.qr-container {
  text-align: center;
  padding: var(--spacing-lg);
  background: white;
  border-radius: var(--border-radius-md);
  display: inline-block;
  margin: var(--spacing-md) 0;
}

.qr-code {
  width: 200px;
  height: 200px;
}

.secret-code {
  display: block;
  font-family: monospace;
  font-size: var(--font-size-lg);
  background: var(--color-background);
  padding: var(--spacing-md);
  border-radius: var(--border-radius-md);
  text-align: center;
  letter-spacing: 0.2em;
  word-break: break-all;
}

.backup-codes {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--spacing-sm);
  margin: var(--spacing-md) 0;
}

.backup-code {
  font-family: monospace;
  font-size: var(--font-size-sm);
  background: var(--color-background);
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-sm);
  text-align: center;
}

.btn-secondary {
  padding: var(--spacing-sm) var(--spacing-lg);
  background: transparent;
  color: var(--color-primary);
  border: 1px solid var(--color-primary);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-sm);
  cursor: pointer;
  transition: all var(--transition-fast);
}

.btn-secondary:hover {
  background: var(--color-primary);
  color: white;
}

.inline-form {
  display: flex;
  gap: var(--spacing-md);
  align-items: center;
}

.inline-form input {
  flex: 0 0 150px;
}

/* ============================================================
   SECTION 4b : PROFIL & SÉCURITÉ
   ============================================================ */

.profile-container {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: var(--spacing-2xl);
}

/* Section Avatar/Photo */
.profile-avatar-section {
  display: flex;
  align-items: center;
  gap: var(--spacing-xl);
  padding: var(--spacing-lg);
  background: var(--color-surface);
  border-radius: var(--border-radius-md);
  margin-bottom: var(--spacing-xl);
  grid-column: 1 / -1;
}

.profile-avatar-preview {
  flex-shrink: 0;
}

.profile-avatar-img {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  object-fit: cover;
  border: 3px solid var(--color-primary);
  background: var(--color-background);
}

.profile-avatar-choice {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.avatar-choice-label {
  font-weight: 600;
  color: var(--color-text);
  font-size: var(--font-size-md);
}

.avatar-radio-group {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.avatar-radio {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  cursor: pointer;
  color: var(--color-text);
}

.avatar-radio.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.avatar-radio small {
  color: var(--color-text-light);
  font-size: var(--font-size-xs);
}

.btn-choose-avatar {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  margin-top: var(--spacing-sm);
}

/* Galerie avatars modale */
.avatar-gallery-modal {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.avatar-gallery-content {
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-xl);
  max-width: 600px;
  width: 90%;
  max-height: 80vh;
  overflow-y: auto;
}

.avatar-gallery-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-lg);
}

.avatar-gallery-header h2 {
  margin: 0;
  color: var(--color-text);
}

.avatar-gallery-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
}

.avatar-gallery-item {
  cursor: pointer;
  border-radius: var(--border-radius-md);
  padding: var(--spacing-sm);
  transition: transform 0.2s, box-shadow 0.2s;
  background: var(--color-background);
}

.avatar-gallery-item:hover {
  transform: scale(1.05);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

.avatar-gallery-item img {
  width: 100%;
  height: auto;
  border-radius: var(--border-radius-sm);
}

.avatar-gallery-actions {
  display: flex;
  gap: var(--spacing-md);
  justify-content: flex-end;
}

/* MODIF-01012026: Modal demande de modification */
.modif-modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
}

.modif-modal {
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  width: 90%;
  max-width: 500px;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.modif-modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-md) var(--spacing-lg);
  border-bottom: 1px solid var(--color-border);
}

.modif-modal-header h3 {
  margin: 0;
  color: var(--color-text);
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.modif-modal-close {
  background: none;
  border: none;
  cursor: pointer;
  padding: var(--spacing-xs);
  border-radius: var(--border-radius-sm);
  color: var(--color-text-light);
  transition: background 0.2s;
}

.modif-modal-close:hover {
  background: var(--color-background);
}

.modif-modal-body {
  padding: var(--spacing-lg);
  overflow-y: auto;
}

.modif-modal-body .form-group {
  margin-bottom: var(--spacing-md);
}

.modif-modal-body label {
  display: block;
  margin-bottom: var(--spacing-xs);
  font-weight: 500;
  color: var(--color-text);
}

.modif-modal-body textarea,
.modif-modal-body input[type="text"],
.modif-modal-body select {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-base);
  background: var(--color-background);
  color: var(--color-text);
}

.modif-modal-body textarea:focus,
.modif-modal-body input:focus,
.modif-modal-body select:focus {
  outline: none;
  border-color: var(--color-primary);
}

/* Checkboxes des champs demandables */
.modif-checkboxes {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  padding: var(--spacing-sm);
  background: var(--color-background);
  border-radius: var(--border-radius-md);
  max-height: 150px;
  overflow-y: auto;
}

.modif-checkbox {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
  padding: var(--spacing-xs) var(--spacing-sm);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-sm);
  cursor: pointer;
  transition: all 0.2s;
}

.modif-checkbox:hover {
  border-color: var(--color-primary);
}

.modif-checkbox input[type="checkbox"] {
  width: auto;
  margin: 0;
}

.modif-checkbox input[type="checkbox"]:checked + span {
  color: var(--color-primary);
  font-weight: 500;
}

.modif-modal-body .form-actions {
  display: flex;
  gap: var(--spacing-md);
  justify-content: flex-end;
  margin-top: var(--spacing-lg);
  padding-top: var(--spacing-md);
  border-top: 1px solid var(--color-border);
}

/* Hint demande de modification */
.profile-modif-hint {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-lg);
  padding: var(--spacing-md);
  background: var(--color-background);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

.profile-modif-hint .material-symbols-outlined {
  font-size: 18px;
  color: var(--color-info);
  flex-shrink: 0;
}

.profile-modif-hint a {
  color: var(--color-primary);
  text-decoration: none;
  font-weight: 500;
}

.profile-modif-hint a:hover {
  text-decoration: underline;
}

/* MODIF-13012026: Bouton action dans notifications */
.btn-action-notif {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-top: 8px;
  padding: 6px 12px;
  background: var(--couleur-principale, #3b82f6);
  color: white;
  border: none;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.2s;
}

.btn-action-notif:hover {
  background: var(--couleur-principale-dark, #2563eb);
}

.btn-action-notif .material-symbols-outlined {
  font-size: 16px;
}

/* Modal confirmation traitement demande */
.modif-confirm-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10000;
}

.modif-confirm-modal {
  background: white;
  border-radius: 12px;
  padding: 32px;
  max-width: 400px;
  text-align: center;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

.modif-confirm-modal h3 {
  margin: 16px 0 8px;
  font-size: 18px;
}

.modif-confirm-modal p {
  color: #6b7280;
  margin-bottom: 16px;
}

.modif-confirm-comment {
  text-align: left;
  margin-bottom: 20px;
}

.modif-confirm-comment label {
  display: block;
  font-size: 13px;
  font-weight: 500;
  color: #374151;
  margin-bottom: 6px;
}

.modif-confirm-comment textarea {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  font-size: 14px;
  resize: vertical;
}

.modif-confirm-comment textarea:focus {
  outline: none;
  border-color: var(--couleur-principale, #3b82f6);
}

.modif-confirm-actions {
  display: flex;
  gap: 12px;
  justify-content: center;
}

.modif-confirm-actions .btn-secondary {
  padding: 10px 20px;
  background: #f3f4f6;
  color: #374151;
  border: none;
  border-radius: 8px;
  font-weight: 500;
  cursor: pointer;
}

.modif-confirm-actions .btn-primary {
  padding: 10px 20px;
  background: var(--couleur-principale, #3b82f6);
  color: white;
  border: none;
  border-radius: 8px;
  font-weight: 500;
  cursor: pointer;
}

/* Modal édition record */
.edit-record-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
  overflow-y: auto;
  padding: 20px;
}

.edit-record-modal {
  background: white;
  border-radius: 12px;
  width: 100%;
  max-width: 600px;
  max-height: 90vh;
  overflow-y: auto;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

.edit-record-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px 24px;
  border-bottom: 1px solid #e5e7eb;
}

.edit-record-header h3 {
  margin: 0;
  font-size: 18px;
  display: flex;
  align-items: center;
  gap: 8px;
}

.edit-record-close {
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px;
  color: #6b7280;
}

.edit-record-body {
  padding: 24px;
}

.edit-record-field {
  margin-bottom: 20px;
}

.edit-record-field label {
  display: block;
  font-weight: 500;
  margin-bottom: 6px;
  color: #374151;
}

.edit-record-field input,
.edit-record-field textarea,
.edit-record-field select {
  width: 100%;
  padding: 10px 12px;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  font-size: 14px;
}

.edit-record-field input:focus,
.edit-record-field textarea:focus,
.edit-record-field select:focus {
  outline: none;
  border-color: var(--couleur-principale, #3b82f6);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

.edit-record-actions {
  display: flex;
  gap: 12px;
  justify-content: flex-end;
  padding: 20px 24px;
  border-top: 1px solid #e5e7eb;
}

.spinner-small {
  display: inline-block;
  width: 14px;
  height: 14px;
  border: 2px solid rgba(255,255,255,0.3);
  border-top-color: white;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}

/* Layout profil 2 colonnes */
.profile-layout {
  display: grid;
  grid-template-columns: 1fr 280px;
  gap: var(--spacing-xl);
}

.profile-section {
  background: var(--color-surface);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-md);
  margin-bottom: var(--spacing-lg);
}

.profile-section h3 {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  margin: 0 0 var(--spacing-sm) 0;
  color: var(--color-text);
  font-size: var(--font-size-lg);
}

.profile-section h3 .material-symbols-outlined {
  color: var(--color-primary);
}

.section-hint {
  color: var(--color-text-light);
  font-size: var(--font-size-sm);
  margin: 0 0 var(--spacing-lg) 0;
  padding: var(--spacing-sm) var(--spacing-md);
  background: var(--color-background);
  border-radius: var(--border-radius-sm);
  border-left: 3px solid var(--color-primary);
}

.info-value-inline {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-sm) 0;
}

.profile-form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--spacing-lg);
}

/* MODIF-01012026-MAPPING_EXTENDED: Tailles de champs pour adresse */
.form-group-large {
  grid-column: span 2;
}

.form-group-small {
  max-width: 150px;
}

.form-actions {
  margin-top: var(--spacing-md);
}

.input-disabled {
  background: var(--color-background);
  color: var(--color-text-light);
  cursor: not-allowed;
}

.profile-info {
  background: var(--color-background);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-md);
  height: fit-content;
}

.profile-info h3 {
  margin: 0 0 var(--spacing-md) 0;
  font-size: var(--font-size-md);
  color: var(--color-text);
}

.info-item {
  display: flex;
  justify-content: space-between;
  padding: var(--spacing-sm) 0;
  border-bottom: 1px solid var(--color-border);
}

.info-item:last-child {
  border-bottom: none;
}

.info-label {
  color: var(--color-text-light);
  font-size: var(--font-size-sm);
}

.info-value {
  font-weight: 500;
  font-size: var(--font-size-sm);
}

.status-success { color: var(--color-success); }
.status-warning { color: var(--color-warning); }
.status-error { color: var(--color-error); }

/* Security page */
.security-container {
  max-width: 600px;
}

.security-section {
  margin-bottom: var(--spacing-2xl);
  padding-bottom: var(--spacing-xl);
  border-bottom: 1px solid var(--color-border);
}

.security-section:last-child {
  border-bottom: none;
}

.security-section h3 {
  margin: 0 0 var(--spacing-md) 0;
  font-size: var(--font-size-lg);
}

.security-form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.twofa-status {
  padding: var(--spacing-lg);
  background: var(--color-background);
  border-radius: var(--border-radius-md);
}

.status-indicator {
  font-size: var(--font-size-lg);
  font-weight: 600;
  margin-bottom: var(--spacing-sm);
}

.status-enabled { color: var(--color-success); }
.status-disabled { color: var(--color-text-light); }

.status-description {
  color: var(--color-text-light);
  margin-bottom: var(--spacing-md);
}

.btn-danger {
  padding: var(--spacing-sm) var(--spacing-lg);
  background: var(--color-error);
  color: white;
  border: none;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: background var(--transition-fast);
}

.btn-danger:hover {
  background: #dc2626;
}

.session-info {
  padding: var(--spacing-md);
  background: var(--color-background);
  border-radius: var(--border-radius-md);
}

.session-info p {
  margin: 0 0 var(--spacing-md) 0;
  color: var(--color-text-light);
}

/* User dropdown menu */
.user-dropdown {
  position: relative;
}

.user-dropdown-toggle {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-xs) var(--spacing-md);
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: all var(--transition-fast);
}

.user-dropdown-toggle:hover {
  background: var(--color-background);
}

.user-avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--color-primary);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: var(--font-size-sm);
}

.user-dropdown-menu {
  position: absolute;
  top: 100%;
  right: 0;
  margin-top: var(--spacing-xs);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-lg);
  min-width: 200px;
  z-index: 200;
  display: none;
}

.user-dropdown.open .user-dropdown-menu {
  display: block;
}

.dropdown-item {
  display: block;
  padding: var(--spacing-sm) var(--spacing-md);
  color: var(--color-text-dropdown, var(--color-text));
  text-decoration: none;
  transition: background var(--transition-fast);
  cursor: pointer;
  border: none;
  background: none;
  width: 100%;
  text-align: left;
  font-size: var(--font-size-sm);
}

.dropdown-item:hover {
  background: var(--color-background);
}

.dropdown-item.danger {
  color: var(--color-error);
}

.dropdown-divider {
  height: 1px;
  background: var(--color-border);
  margin: var(--spacing-xs) 0;
}

/* Mini footer IDDEA sur login */
.login-iddea-footer {
  margin-top: var(--spacing-xl);
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md);
  background: rgba(255, 255, 255, 0.1);
  border-radius: var(--border-radius-md);
  color: white;
  font-size: var(--font-size-sm);
}

.login-iddea-footer .iddea-logo {
  height: 24px;
}

.login-iddea-footer a {
  color: white;
}

/* ============================================================
   SECTION 5 : PAGES
   ============================================================ */

/* MODIF-2025-12-05-TITRE_VIRE: Titre page masqué - le menu actif suffit */
.page-header {
  display: none;
}
/* MODIF-2025-12-05-TITRE_VIRE: Fin */

.page-description {
  color: var(--color-text-light);
  margin: 0 auto;
  font-size: var(--font-size-lg);
}

/* MODIF-04122025-FOND_TRANSPARENT: Fond transparent pour voir couleur page */
/* MODIF-2025-12-05-PADDING_TOP: Réduit padding top pour coller au bord */
.page-content {
  background: transparent;
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-sm) var(--spacing-xl) var(--spacing-xl) var(--spacing-xl);
  box-shadow: none;
}
/* MODIF-04122025-FOND_TRANSPARENT: Fin */

/* Empty states */
.empty-state {
  text-align: center;
  padding: var(--spacing-2xl);
  color: var(--color-text-light);
  font-style: italic;
}

.error {
  color: var(--color-error);
  padding: var(--spacing-md);
  background: rgba(239, 68, 68, 0.1);
  border-radius: var(--border-radius-md);
}

.info {
  color: var(--color-info);
  padding: var(--spacing-md);
  background: rgba(59, 130, 246, 0.1);
  border-radius: var(--border-radius-md);
}

/* ============================================================
   SECTION 6 : SKELETON LOADERS
   ============================================================ */

.skeleton-loader {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.skeleton-loader::before,
.skeleton-loader::after {
  content: '';
  display: block;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s infinite;
  border-radius: var(--border-radius-md);
}

.skeleton-loader::before {
  height: 2rem;
  width: 40%;
}

.skeleton-loader::after {
  height: 200px;
  width: 100%;
}

.skeleton-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--spacing-lg);
}

.skeleton-grid::before,
.skeleton-grid::after {
  content: '';
  display: block;
  height: 250px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s infinite;
  border-radius: var(--border-radius-md);
}

.skeleton-table {
  width: 100%;
}

.skeleton-table::before {
  content: '';
  display: block;
  height: 40px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s infinite;
  border-radius: var(--border-radius-md);
  margin-bottom: var(--spacing-sm);
}

.skeleton-table::after {
  content: '';
  display: block;
  height: 300px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.5s infinite;
  border-radius: var(--border-radius-md);
}

@keyframes skeleton-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

/* ============================================================
   SECTION 7 : TROMBINOSCOPE
   ============================================================ */

.trombi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--spacing-xl);
  width: 100%;
}

/* MODIF-06122025-ANIMATION_TROMBI: Animation fade-in progressive */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.trombi-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-lg);
  overflow: hidden;
  transition: transform var(--transition-normal), box-shadow var(--transition-normal);
  /* MODIF-06122025-ANIMATION_TROMBI: Animation apparition fluide */
  animation: fadeInUp 0.4s ease-out forwards;
  animation-delay: var(--card-delay, 0ms);
  opacity: 0;
}

.trombi-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lg);
}

.trombi-photo {
  width: 100%;
  aspect-ratio: 1;
  overflow: hidden;
  background: var(--color-background);
}

.trombi-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.trombi-card:hover .trombi-photo img {
  transform: scale(1.05);
}

/* MODIF-26122025-TROMBI_UNIVERSEL: Style pour texte au lieu d'image (dictionnaire, catalogue, etc.) */
.trombi-photo-text {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-primary);
  padding: 10px;
}

.trombi-text-avatar {
  font-family: "Delius Swash Caps", cursive;
  font-weight: 400;
  font-style: normal;
  font-size: 1.4rem;
  color: white;
  text-shadow: 0 1px 3px rgba(0,0,0,0.3);
  line-height: 1.3;
  text-align: center;
  word-break: break-word;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
}

.trombi-card:hover .trombi-text-avatar {
  transform: scale(1.02);
  transition: transform var(--transition-slow);
}
/* MODIF-26122025-TROMBI_UNIVERSEL: Fin */

.trombi-info {
  padding: var(--spacing-lg);
  text-align: center;
}

.trombi-nom {
  font-size: var(--font-size-lg);
  font-weight: 600;
  margin: 0 0 var(--spacing-xs) 0;
  color: var(--color-text);
}

.trombi-role {
  font-size: var(--font-size-sm);
  color: var(--color-primary);
  margin: 0 0 var(--spacing-sm) 0;
}

/* MODIF-04122025-REFONTE_DYNAMIQUE: Style champs additionnels depuis config ISB */
.trombi-additional-field {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  margin: var(--spacing-xs) 0;
  word-break: break-word;
}

.trombi-email,
.trombi-tel {
  display: block;
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  margin-top: var(--spacing-xs);
}

.trombi-email:hover,
.trombi-tel:hover {
  color: var(--color-primary);
}

/* MODIF-04122025-LIEN_FICHE: Styles cartes cliquables */
.trombi-contact {
  display: flex;
  justify-content: center;
  gap: var(--spacing-md);
  margin: var(--spacing-sm) 0;
}

.trombi-icon {
  font-size: 1.2rem;
  text-decoration: none;
  transition: transform 0.2s;
}

.trombi-icon:hover {
  transform: scale(1.2);
}

.trombi-lien-fiche {
  display: inline-block;
  margin-top: var(--spacing-sm);
  padding: var(--spacing-xs) var(--spacing-md);
  font-size: var(--font-size-sm);
  color: var(--color-primary);
  text-decoration: none;
  border: 1px solid var(--color-primary);
  border-radius: var(--border-radius-full);
  transition: all 0.2s;
}

.trombi-lien-fiche:hover {
  background: var(--color-primary);
  color: white;
}

/* MODIF-04122025-PASTILLE: Pastille cartes non validées */
.trombi-card {
  position: relative;
}

.trombi-pastille-pending {
  position: absolute;
  top: 8px;
  right: 8px;
  font-size: 14px;
  z-index: 2;
  filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3));
  animation: pulse-pastille 2s infinite;
}

@keyframes pulse-pastille {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.2); opacity: 0.8; }
}

.trombi-card-pending {
  border: 2px solid #f59e0b;
  box-shadow: 0 0 8px rgba(245, 158, 11, 0.3);
}

/* MODIF-05122025-MODAL_2COL: Modal fiche membre - Layout 2 colonnes pro/sobre */
.trombi-modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
  padding: var(--spacing-lg);
}

.trombi-modal.trombi-modal-2col {
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  max-width: 700px;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  position: relative;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
}

.trombi-modal .modal-close {
  position: absolute;
  top: var(--spacing-md);
  right: var(--spacing-md);
  background: none;
  border: none;
  font-size: 1.5rem;
  cursor: pointer;
  color: var(--color-text-light);
  line-height: 1;
  padding: 0;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--border-radius-full);
  transition: background 0.2s, color 0.2s;
  z-index: 10;
}

.trombi-modal .modal-close:hover {
  background: var(--color-background);
  color: var(--color-text);
}

/* BODY 2 COLONNES */
.trombi-modal-body {
  display: flex;
  gap: var(--spacing-xl);
  padding: var(--spacing-xl);
}

/* COLONNE GAUCHE : Photo rectangle + champs additionnels */
.trombi-modal-left {
  flex: 0 0 200px;
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

/* MODIF-2025-12-05-PHOTO_GRANDE: Photo agrandie pour exercices/galeries */
.trombi-modal-2col .trombi-modal-photo {
  width: 300px;
  height: 350px;
  border-radius: var(--border-radius-md);
  overflow: hidden;
  background: var(--color-background);
  cursor: zoom-in;
}

.trombi-modal-2col .trombi-modal-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease;
}

/* Zoom au clic sur photo */
.trombi-modal-2col .trombi-modal-photo.zoomed {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 90vw;
  height: 90vh;
  max-width: 800px;
  max-height: 600px;
  z-index: 10001;
  cursor: zoom-out;
  border-radius: var(--border-radius-lg);
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}

.trombi-modal-2col .trombi-modal-photo.zoomed img {
  object-fit: contain;
}
/* MODIF-2025-12-05-PHOTO_GRANDE: Fin */

/* Champs additionnels empilés sous la photo */
.trombi-modal-left .trombi-modal-fields {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.trombi-modal-field {
  font-size: var(--font-size-sm);
  color: var(--color-text);
  line-height: 1.4;
}

.trombi-modal-field .field-label {
  color: var(--color-text-light);
}

.trombi-modal-field .field-value {
  color: var(--color-text);
}

/* COLONNE DROITE : Nom + Bio */
.trombi-modal-right {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.trombi-modal-name {
  margin: 0 0 var(--spacing-sm) 0;
  font-size: var(--font-size-2xl);
  font-weight: 700;
  color: var(--color-text);
  line-height: 1.2;
}

.trombi-modal-right .trombi-badge-pending {
  display: inline-block;
  align-self: flex-start;
  margin-bottom: var(--spacing-md);
  padding: var(--spacing-xs) var(--spacing-sm);
  background: var(--color-warning);
  color: white;
  font-size: var(--font-size-xs);
  font-weight: 500;
  border-radius: var(--border-radius-sm);
}

.trombi-modal-right .trombi-modal-bio {
  flex: 1;
  padding: 0;
  margin-top: var(--spacing-md);
  line-height: 1.7;
  color: var(--color-text);
  font-size: var(--font-size-md);
  border: none;
  overflow-y: auto;
}

/* Actions validation */
.trombi-modal-actions {
  padding: var(--spacing-lg) var(--spacing-xl);
  border-top: 1px solid var(--color-border);
  display: flex;
  justify-content: flex-end;
}

.btn-validate-member {
  padding: var(--spacing-sm) var(--spacing-lg);
  font-size: var(--font-size-sm);
  font-weight: 600;
  color: white;
  background: var(--color-success);
  border: none;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: background 0.2s;
}

.btn-validate-member:hover:not(:disabled) {
  background: #16a34a;
}

.btn-validate-member:disabled {
  cursor: not-allowed;
  opacity: 0.7;
}

/* Responsive modal - passage en colonne unique sur mobile */
@media (max-width: 640px) {
  .trombi-modal-body {
    flex-direction: column;
    align-items: center;
    text-align: center;
  }

  .trombi-modal-left {
    flex: none;
    width: 100%;
    max-width: 200px;
  }

  .trombi-modal-2col .trombi-modal-photo {
    width: 150px;
    height: 190px;
    margin: 0 auto;
  }
}

/* ============================================================
   SECTION 7.2 : TOAST NOTIFICATIONS
   MODIF-04122025-TOAST_CSS: Animations pour feedback utilisateur
   ============================================================ */

.toast-notification {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

@keyframes slideIn {
  from {
    opacity: 0;
    transform: translateX(100px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideOut {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(100px);
  }
}

/* ============================================================
   SECTION 8 : GALERIE
   ============================================================ */

.galerie-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--spacing-md);
}

.galerie-item {
  position: relative;
  aspect-ratio: 1;
  border-radius: var(--border-radius-md);
  overflow: hidden;
  cursor: pointer;
  background: var(--color-background);
}

.galerie-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.galerie-item:hover img {
  transform: scale(1.1);
}

.galerie-caption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: var(--spacing-sm) var(--spacing-md);
  background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
  color: white;
  font-size: var(--font-size-sm);
  opacity: 0;
  transition: opacity var(--transition-fast);
}

.galerie-item:hover .galerie-caption {
  opacity: 1;
}

/* Lightbox */
.lightbox {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.9);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
  cursor: pointer;
}

.lightbox-content {
  position: relative;
  max-width: 90vw;
  max-height: 90vh;
}

.lightbox-content img {
  max-width: 100%;
  max-height: 90vh;
  object-fit: contain;
  border-radius: var(--border-radius-md);
}

.lightbox-close {
  position: absolute;
  top: -40px;
  right: 0;
  background: transparent;
  border: none;
  color: white;
  font-size: 2rem;
  cursor: pointer;
  padding: var(--spacing-sm);
}

/* ============================================================
   SECTION 9 : TABLEAU
   ============================================================ */

.tableau-container {
  overflow-x: auto;
}

.tableau {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--font-size-sm);
}

.tableau th,
.tableau td {
  padding: var(--spacing-sm) var(--spacing-md);
  text-align: left;
  border-bottom: 1px solid var(--color-border);
}

.tableau th {
  background: var(--color-background);
  font-weight: 600;
  color: var(--color-text);
  white-space: nowrap;
}

.tableau tr:hover td {
  background: var(--color-background);
}

.tableau td {
  vertical-align: middle;
}

.cell-thumbnail {
  width: 40px;
  height: 40px;
  object-fit: cover;
  border-radius: var(--border-radius-sm);
  margin-right: var(--spacing-xs);
}

/* ============================================================
   SECTION 9b : ADMIN PAGES
   ============================================================ */

.admin-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-xl);
}

.stat-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-lg);
  text-align: center;
}

.stat-card.stat-warning {
  border-color: var(--color-warning);
  background: rgba(245, 158, 11, 0.05);
}

.stat-card.stat-success {
  border-color: var(--color-success);
}

.stat-card.stat-danger {
  border-color: var(--color-error);
}

.stat-value {
  display: block;
  font-size: var(--font-size-3xl);
  font-weight: 700;
  color: var(--color-text);
}

.stat-label {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

.admin-filters {
  display: flex;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
  flex-wrap: wrap;
}

.filter-group {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.filter-group label {
  font-size: var(--font-size-xs);
  color: var(--color-text-light);
  text-transform: uppercase;
}

.filter-group select,
.filter-group input {
  padding: var(--spacing-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  font-size: var(--font-size-sm);
  min-width: 150px;
}

.search-group {
  flex: 1;
  min-width: 200px;
}

.search-group input {
  width: 100%;
}

/* Users table */
.users-table-container {
  overflow-x: auto;
}

.users-table {
  width: 100%;
  border-collapse: collapse;
}

.users-table th,
.users-table td {
  padding: var(--spacing-md);
  text-align: left;
  border-bottom: 1px solid var(--color-border);
}

.users-table th {
  background: var(--color-background);
  font-weight: 600;
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

.users-table tr:hover td {
  background: var(--color-background);
}

.user-cell {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.user-avatar-small {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--color-primary);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--font-size-xs);
  font-weight: 600;
  flex-shrink: 0;
}

.user-info-cell {
  display: flex;
  flex-direction: column;
}

.user-name-cell {
  font-weight: 500;
}

.user-email-cell {
  font-size: var(--font-size-xs);
  color: var(--color-text-light);
}

/* Badges */
.role-badge,
.status-badge {
  display: inline-block;
  padding: var(--spacing-xs) var(--spacing-sm);
  border-radius: var(--border-radius-full);
  font-size: var(--font-size-xs);
  font-weight: 500;
}

.role-badge {
  background: var(--color-background);
  color: var(--color-text);
}

.role-badge.role-super-admin {
  background: #fef3c7;
  color: #92400e;
}

.role-badge.role-admin {
  background: #dbeafe;
  color: #1e40af;
}

.status-badge.status-validé {
  background: #dcfce7;
  color: #166534;
}

.status-badge.status-en-attente {
  background: #fef3c7;
  color: #92400e;
}

.status-badge.status-bloqué {
  background: #fee2e2;
  color: #991b1b;
}

.status-badge.status-désactivé {
  background: #f3f4f6;
  color: #6b7280;
}

/* Status actif/inactif - utilise couleurs thème */
.status-badge.status-active {
  background: var(--color-success-light, #dcfce7);
  color: var(--color-success, #166534);
}

.status-badge.status-inactive {
  background: var(--color-background, #f3f4f6);
  color: var(--color-text-muted, #6b7280);
}

/* MODIF-01012026: Status danger pour 2FA/sécurité désactivée - rouge vif visible */
.status-badge.status-danger,
.status-badge.status-inactive.security-status {
  background: #fef2f2;
  color: #dc2626;
  border: 1px solid #fecaca;
}

/* Action buttons */
.actions-cell {
  display: flex;
  gap: var(--spacing-xs);
}

.btn-action {
  width: 32px;
  height: 32px;
  border: none;
  border-radius: var(--border-radius-sm);
  cursor: pointer;
  font-size: var(--font-size-sm);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all var(--transition-fast);
}

.btn-action.btn-success {
  background: #dcfce7;
  color: #166534;
}

.btn-action.btn-success:hover {
  background: #bbf7d0;
}

.btn-action.btn-warning {
  background: #fef3c7;
  color: #92400e;
}

.btn-action.btn-warning:hover {
  background: #fde68a;
}

.btn-action.btn-danger {
  background: #fee2e2;
  color: #991b1b;
}

.btn-action.btn-danger:hover {
  background: #fecaca;
}

.btn-action.btn-secondary {
  background: #f3f4f6;
  color: #374151;
}

.btn-action.btn-secondary:hover {
  background: #e5e7eb;
}

/* Modal */
.modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1200;
}

.modal-content {
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  width: 100%;
  max-width: 400px;
  box-shadow: var(--shadow-lg);
}

.modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-lg);
  border-bottom: 1px solid var(--color-border);
}

.modal-header h3 {
  margin: 0 auto;
  font-size: var(--font-size-lg);
}

.modal-close {
  background: none;
  border: none;
  font-size: var(--font-size-xl);
  cursor: pointer;
  color: var(--color-text-light);
}

.modal-body {
  padding: var(--spacing-lg);
}

.modal-footer {
  display: flex;
  justify-content: flex-end;
  gap: var(--spacing-sm);
  padding: var(--spacing-lg);
  border-top: 1px solid var(--color-border);
}

.text-muted {
  color: var(--color-text-light);
}

/* ============================================================
   SECTION 10 : TOASTS / NOTIFICATIONS
   ============================================================ */

.toast {
  position: fixed;
  bottom: var(--spacing-lg);
  right: var(--spacing-lg);
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md) var(--spacing-lg);
  background: var(--color-surface);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-lg);
  z-index: 1100;
  animation: toast-slide-in 0.3s ease;
}

.toast-error {
  border-left: 4px solid var(--color-error);
}

.toast-success {
  border-left: 4px solid var(--color-success);
}

.toast-icon {
  font-size: var(--font-size-lg);
}

.toast-message {
  font-size: var(--font-size-sm);
  color: var(--color-text);
}

.toast-close {
  background: transparent;
  border: none;
  font-size: var(--font-size-lg);
  color: var(--color-text-light);
  padding: 0;
  margin-left: var(--spacing-md);
  cursor: pointer;
}

.toast-close:hover {
  color: var(--color-text);
}

@keyframes toast-slide-in {
  from {
    transform: translateX(100%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

/* ============================================================
   SECTION 11 : RESPONSIVE
   ============================================================ */

/* MODIF-02122025-RESPONSIVE: Amélioration responsive mobile */

/* MODIF-02122025-SIDEBAR_TOGGLE: Bouton toggle sidebar (visible toujours) */
.sidebar-toggle-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  width: 40px;
  height: 40px;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  color: var(--color-text);
  transition: background var(--transition-fast);
}

.sidebar-toggle-btn:hover {
  background: var(--color-background);
}

.sidebar-toggle-btn .material-icons {
  font-size: 1.5rem;
}

/* Sidebar collapsed state (desktop) - garde le hamburger visible */
.app-sidebar.collapsed {
  width: 60px;
  min-width: 60px;
}

.app-sidebar.collapsed .sidebar-header {
  padding: var(--spacing-md);
}

.app-sidebar.collapsed .sidebar-logo-container {
  display: none;
}

.app-sidebar.collapsed .sidebar-title {
  display: none;
}

.app-sidebar.collapsed .sidebar-actions-row {
  justify-content: center;
}

.app-sidebar.collapsed .menu-container {
  display: none;
}

.app-container.sidebar-collapsed .app-sidebar {
  width: 60px;
  min-width: 60px;
}

/* Mobile menu button (legacy, kept for compatibility) */
.mobile-menu-btn {
  display: none;
  background: transparent;
  border: none;
  font-size: 1.5rem;
  cursor: pointer;
  padding: var(--spacing-sm);
  color: var(--color-text);
}

/* Tablet (768px - 1024px) */
@media (max-width: 1024px) {
  .profile-container {
    grid-template-columns: 1fr;
  }

  .profile-info {
    order: -1;
  }

  .form-row {
    grid-template-columns: 1fr;
  }

  .admin-stats {
    grid-template-columns: repeat(2, 1fr);
  }

  .backup-codes {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Mobile (jusqu'à 768px) */
@media (max-width: 768px) {
  :root {
    --sidebar-width: 100%;
    --header-height: 56px;
  }

  /* Header mobile */
  .mobile-menu-btn {
    display: block;
  }

  /* MODIF-14122025-FIX_HAMBURGER: Afficher header-left sur mobile pour le bouton hamburger */
  .app-header-minimal .header-left {
    display: flex;
  }

  /* MODIF-31122025-FIX_DOUBLE_HAMBURGER: Cacher le toggle sidebar sur mobile (le header a déjà son bouton) */
  .sidebar-toggle-btn {
    display: none !important;
  }

  /* MODIF-31122025-FIX_HEADER_MOBILE_COLORS: Header mobile avec couleurs du thème */
  .app-header-minimal {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    background: var(--color-menu-bg, #1f2937);
    padding: var(--spacing-sm) var(--spacing-md);
    z-index: 100;
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: var(--header-height);
  }

  .app-header-minimal .mobile-menu-btn {
    color: var(--color-menu-niv1, #ffffff);
  }

  /* Sidebar commence sous le header */
  .app-sidebar {
    top: var(--header-height);
  }

  .header-title {
    font-size: var(--font-size-md);
  }

  .user-name {
    display: none;
  }

  /* Layout mobile */
  .app-layout {
    flex-direction: column;
  }

  /* MODIF-01032026-FIX_HEADER_OVERLAP: Le contenu commence sous le header fixe */
  .app-main {
    padding-top: var(--header-height);
  }

  /* Sidebar transformée en drawer mobile */
  /* MODIF-31122025-FIX_CHEVRONS: Largeur 85% max pour voir chevrons */
  .app-sidebar {
    position: fixed;
    top: var(--header-height);
    left: 0;
    bottom: 0;
    width: 85%;
    max-width: 320px;
    max-height: none;
    border-right: none;
    z-index: 95;
    transform: translateX(-100%);
    transition: transform var(--transition-normal);
    /* MODIF-31122025-FIX_MENU_COLORS: Utiliser couleur menu thème, pas blanc */
    background: var(--color-menu-bg, #333333);
  }

  .app-sidebar.mobile-open {
    transform: translateX(0);
  }

  .menu-container {
    display: flex;
    flex-direction: column;
    padding: var(--spacing-md);
    gap: var(--spacing-xs);
    /* MODIF-31122025-FIX_MENU_BG: Fond transparent pour laisser voir le sidebar */
    background: transparent !important;
  }

  .menu-group {
    background: transparent !important;
  }

  .menu-item {
    padding: var(--spacing-md);
    margin-bottom: 0;
    border-radius: var(--border-radius-md);
    /* MODIF-31122025-FIX_MENU_BG: Pas de fond blanc sur les items */
    background: transparent;
  }

  .menu-item:hover {
    background: rgba(255, 255, 255, 0.1);
  }

  /* MODIF-31122025-FIX_SIDEBAR_FOOTER: Footer avec fond cohérent */
  .sidebar-footer {
    background: rgba(0, 0, 0, 0.1);
  }

  /* Overlay pour fermer le menu */
  .sidebar-overlay {
    display: none;
    position: fixed;
    top: var(--header-height);
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.5);
    z-index: 94;
  }

  .sidebar-overlay.active {
    display: block;
  }

  /* Content */
  .content-container {
    padding: var(--spacing-md);
  }

  /* MODIF-12012026-COCKPIT_FULLSCREEN_MOBILE: Cockpits plein écran sur mobile */
  /* MODIF-22012026-FULLSCREEN_UNIVERSAL: Ajout forms pour comportement identique */
  .content-container.fullscreen-active,
  .content-container.cockpit-fullscreen-active,
  .content-container.form-fullscreen-active,
  .content-container:has(.composant-cockpit-glass),
  .content-container:has(.cockpit-user-stats-container),
  .content-container:has(.cockpit-page),
  .content-container:has(.formulaire-wrapper) {
    padding: 0 !important;
    max-width: 100% !important;
    width: 100vw !important;
    margin: 0 !important;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
  }

  /* MODIF-24012026-FIX_SCROLL_MOBILE: 100% au lieu de 100vw pour éviter scroll horizontal */
  .composant-cockpit-glass,
  .cockpit-user-stats-container,
  .cockpit-page {
    width: 100% !important;
    max-width: 100% !important;
    min-height: calc(100vh - 60px) !important; /* 60px = header mobile */
    border-radius: 0 !important;
    padding: var(--spacing-md) !important;
    box-sizing: border-box !important;
    overflow-x: hidden !important;
  }

  .page-content {
    padding: var(--spacing-md);
  }

  .page-title {
    font-size: var(--font-size-2xl);
  }

  .page-description {
    font-size: var(--font-size-md);
  }

  /* MODIF-26122025-TROMBI_RESPONSIVE: 2 colonnes max sur mobile */
  .trombi-grid {
    grid-template-columns: repeat(2, 1fr) !important;
  }

  /* Login */
  .login-container {
    padding: var(--spacing-md);
  }

  .login-box {
    padding: var(--spacing-xl);
  }

  .login-title {
    font-size: var(--font-size-xl);
  }

  /* 2FA Setup */
  .twofa-setup {
    padding: 0;
  }

  .qr-code {
    width: 160px;
    height: 160px;
  }

  .backup-codes {
    grid-template-columns: repeat(2, 1fr);
  }

  .inline-form {
    flex-direction: column;
    align-items: stretch;
  }

  .inline-form input {
    flex: 1;
  }

  /* Profil */
  .profile-container {
    grid-template-columns: 1fr;
    gap: var(--spacing-lg);
  }

  .form-row {
    grid-template-columns: 1fr;
    gap: var(--spacing-md);
  }

  /* Admin pages */
  .admin-stats {
    grid-template-columns: repeat(2, 1fr);
  }

  .stat-value {
    font-size: var(--font-size-2xl);
  }

  .admin-filters {
    flex-direction: column;
  }

  .filter-group {
    width: 100%;
  }

  .filter-group select,
  .filter-group input {
    width: 100%;
  }

  /* Users table mobile */
  .users-table th:nth-child(4),
  .users-table td:nth-child(4) {
    display: none;
  }

  .users-table th,
  .users-table td {
    padding: var(--spacing-sm);
    font-size: var(--font-size-sm);
  }

  .user-info-cell {
    max-width: 120px;
  }

  .user-email-cell {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .actions-cell {
    flex-wrap: wrap;
  }

  .btn-action {
    width: 28px;
    height: 28px;
    font-size: var(--font-size-xs);
  }

  /* Dropdown user menu */
  .user-dropdown-menu {
    position: fixed;
    top: var(--header-height);
    left: var(--spacing-md);
    right: var(--spacing-md);
    margin-top: 0;
    max-width: none;
  }

  /* Grilles */
  .trombi-grid {
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: var(--spacing-md);
  }

  /* Toast */
  .toast {
    left: var(--spacing-md);
    right: var(--spacing-md);
    bottom: var(--spacing-md);
  }

  /* Modal */
  .modal-content {
    margin: var(--spacing-md);
    max-width: calc(100% - var(--spacing-xl));
  }

  /* Tableau */
  .tableau {
    font-size: var(--font-size-xs);
  }

  .tableau th,
  .tableau td {
    padding: var(--spacing-xs) var(--spacing-sm);
  }
}

/* Small mobile (jusqu'à 480px) */
@media (max-width: 480px) {
  .header-title {
    display: none;
  }

  .header-logo {
    height: 32px;
  }

  .app-footer {
    flex-direction: column;
    height: auto;
    padding: var(--spacing-md);
    gap: var(--spacing-xs);
    text-align: center;
  }

  /* Admin stats en colonne */
  .admin-stats {
    grid-template-columns: 1fr 1fr;
  }

  .stat-card {
    padding: var(--spacing-md);
  }

  .stat-value {
    font-size: var(--font-size-xl);
  }

  .stat-label {
    font-size: var(--font-size-xs);
  }

  /* Table users simplifiée */
  .users-table th:nth-child(3),
  .users-table td:nth-child(3) {
    display: none;
  }

  .user-avatar-small {
    width: 28px;
    height: 28px;
    font-size: 10px;
  }

  .user-info-cell {
    max-width: 100px;
  }

  .user-name-cell {
    font-size: var(--font-size-sm);
  }

  /* Login simplifié */
  .login-box {
    padding: var(--spacing-lg);
  }

  .login-logo {
    max-height: 60px;
  }

  .login-iddea-footer {
    flex-direction: column;
    text-align: center;
  }

  /* Grilles 2 colonnes */
  .trombi-grid {
    grid-template-columns: 1fr 1fr;
    gap: var(--spacing-sm);
  }

  .galerie-grid {
    grid-template-columns: 1fr 1fr;
    gap: var(--spacing-xs);
  }

  /* Sécurité */
  .security-container {
    padding: 0;
  }

  .twofa-status {
    padding: var(--spacing-md);
  }

  /* Lightbox */
  .lightbox-content {
    max-width: 95vw;
  }
}

/* Très petit écran (jusqu'à 360px) */
@media (max-width: 360px) {
  .login-container {
    padding: var(--spacing-sm);
  }

  .login-box {
    padding: var(--spacing-md);
  }

  .page-title {
    font-size: var(--font-size-xl);
  }

  .admin-stats {
    grid-template-columns: 1fr;
  }

  .backup-codes {
    grid-template-columns: 1fr 1fr;
  }

  .trombi-grid,
  .galerie-grid {
    grid-template-columns: 1fr;
  }
}

/* Support orientation paysage mobile */
@media (max-width: 768px) and (orientation: landscape) {
  .login-container {
    padding: var(--spacing-md);
  }

  .login-box {
    max-width: 500px;
    padding: var(--spacing-lg);
  }

  .app-sidebar {
    max-width: 280px;
  }
}

/* Mode touch - cibles plus grandes */
@media (pointer: coarse) {
  .menu-item {
    min-height: 44px;
  }

  .btn-action {
    min-width: 44px;
    min-height: 44px;
  }

  .dropdown-item {
    min-height: 44px;
    display: flex;
    align-items: center;
  }

  .form-group input,
  .form-group select,
  .filter-group input,
  .filter-group select {
    min-height: 44px;
  }

  .btn-primary,
  .btn-secondary,
  .btn-danger {
    min-height: 44px;
  }
}

/* ============================================================
   SECTION 12 : UTILITAIRES
   ============================================================ */

.hidden { display: none !important; }
.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }
.font-bold { font-weight: 600; }
.mt-sm { margin-top: var(--spacing-sm); }
.mt-md { margin-top: var(--spacing-md); }
.mt-lg { margin-top: var(--spacing-lg); }
.mb-sm { margin-bottom: var(--spacing-sm); }
.mb-md { margin-bottom: var(--spacing-md); }
.mb-lg { margin-bottom: var(--spacing-lg); }

/* ============================================================
   SECTION 13 : PAGE D'ERREUR
   MODIF-02122025-ERROR_PAGE: Styles page erreur
   ============================================================ */

.error-page {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
  padding: var(--spacing-xl);
  text-align: center;
}

.error-page-content {
  max-width: 400px;
  background: var(--color-surface);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-2xl);
  box-shadow: var(--shadow-lg);
}

.error-icon {
  font-size: 4rem;
  margin-bottom: var(--spacing-lg);
}

.error-title {
  font-size: var(--font-size-2xl);
  font-weight: 600;
  color: var(--color-text);
  margin: 0 0 var(--spacing-md) 0;
}

.error-description {
  color: var(--color-text-light);
  margin: 0 0 var(--spacing-xl) 0;
  line-height: 1.6;
}

.btn-retry {
  min-width: 150px;
}

.error-hint {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  margin-top: var(--spacing-lg);
}

.error-footer {
  margin-top: var(--spacing-2xl);
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
}

.error-footer a {
  color: var(--color-primary);
  margin-left: var(--spacing-xs);
}

@media (max-width: 480px) {
  .error-page-content {
    padding: var(--spacing-xl);
  }

  .error-icon {
    font-size: 3rem;
  }

  .error-title {
    font-size: var(--font-size-xl);
  }
}


/* ============================================================
   COMPOSANTS_JSON RENDERERS
   MODIF-02122025-COMPOSANTS_CSS
   ============================================================ */

/* Grille des composants */
.composants-grid {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-lg);
  align-items: flex-start;
}

/* Boutons composants */
.composant-bouton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--spacing-sm) var(--spacing-lg);
  border-radius: var(--radius-md);
  text-decoration: none;
  font-weight: 500;
  transition: all 0.2s ease;
  cursor: pointer;
}

.composant-bouton:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}

/* Images composants */
.composant-image {
  border-radius: var(--radius-md);
  overflow: hidden;
}

.composant-image img {
  display: block;
  max-width: 100%;
  height: auto;
}

/* Texte composants */
.composant-texte {
  line-height: 1.6;
  color: var(--text-secondary);
}

/* Calendrier simple */
.calendrier-simple {
  background: var(--surface);
  border-radius: var(--radius-lg);
  padding: var(--spacing-lg);
  box-shadow: var(--shadow-sm);
}

.calendrier-simple h3 {
  margin: 0 0 var(--spacing-md);
  color: var(--text-primary);
  font-size: 1.25rem;
}

.events-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.event-item {
  display: grid;
  grid-template-columns: 80px 1fr auto;
  gap: var(--spacing-md);
  padding: var(--spacing-md);
  background: var(--background);
  border-radius: var(--radius-md);
  transition: background 0.2s ease;
}

.event-item:hover {
  background: var(--surface-hover);
}

.event-date {
  font-weight: 600;
  color: var(--color-primary);
  font-size: 0.875rem;
  white-space: nowrap;
}

.event-title {
  font-weight: 500;
  color: var(--text-primary);
}

.event-lieu {
  color: var(--text-muted);
  font-size: 0.875rem;
}

/* Skeleton loading */
.skeleton-loading {
  padding: var(--spacing-xl);
  text-align: center;
  color: var(--text-muted);
  animation: pulse 1.5s infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 0.6; }
  50% { opacity: 1; }
}

/* Composant Trombinoscope override */
/* MODIF-2025-12-06-TROMBI_FULL_WIDTH: Trombi toujours pleine largeur */
.composant-trombi {
  width: 100% !important;
  max-width: none !important;
}

.responsive-col:has(.composant-trombi) {
  flex: 1 1 100% !important;
  width: 100% !important;
}

.composant-trombi .trombi-grid {
  width: 100%;
}

/* Composant Tableau override */
.composant-tableau .tableau-container {
  width: 100%;
}

/* ============================================================
   SECTION V2 ROWS LAYOUT - MODIF-24122025-V2_ROWS
   Layout rows/columns pour pages ISBuilder V2
   ============================================================ */

.rows-container {
  display: flex;
  flex-direction: column;
  width: 100%;
  padding: var(--spacing-md);
}

.isb-row {
  width: 100%;
  margin-bottom: var(--spacing-md);
}

.isb-row-columns {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
}

.isb-column {
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: stretch;
  padding: var(--spacing-sm);
  width: 100%;
}

.isb-component {
  width: 100%;
}

/* MODIF-30122025-TROMBI_V2_FIX: Forcer trombi pleine largeur dans V2 */
.isb-component[data-type="trombi"],
.isb-component[data-type="trombinoscope"] {
  position: relative !important;
  width: 100% !important;
}

.isb-column .composant-trombi,
.composant-trombi {
  width: 100% !important;
}

.isb-column .trombi-grid,
.composant-trombi .trombi-grid,
.trombi-grid {
  width: 100% !important;
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)) !important;
  padding-left: 20px !important;
  padding-right: 20px !important;
  box-sizing: border-box !important;
}

/* Forcer la row contenant un trombi à être full width */
.isb-row:has(.composant-trombi) .isb-row-columns {
  grid-template-columns: 100% !important;
}

/* Responsive V2 - Mobile */
@media (max-width: 768px) {
  .isb-row-columns {
    flex-direction: column;
  }
  .isb-column {
    flex: 0 0 100% !important;
    max-width: 100% !important;
  }
}

/* ============================================================
   SECTION RESPONSIVE GRID - MODIF-03122025-RESPONSIVE_GRID
   Grille responsive générée depuis positions absolues ISBuilder
   ============================================================ */

/* Container principal responsive */
.responsive-container {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  width: 100%;
  padding: var(--spacing-md);
  position: relative; /* MODIF-07122025: Pour images tramées en position absolute */
}

/* Ligne responsive (groupe de composants sur même Y) */
.responsive-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  align-items: stretch;
  width: 100%; /* MODIF-07122025: Remplir toute la largeur */
}

/* Colonne responsive (composant individuel) */
.responsive-col {
  min-width: 0; /* Permet flex-shrink correct */
  display: flex;
  flex-direction: column;
  flex: 1; /* MODIF-07122025: Remplir l'espace disponible par défaut */
}

/* Composants dans les colonnes - full width */
.responsive-col > * {
  width: 100%;
}

/* Boutons responsive */
.responsive-col .composant-bouton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--spacing-sm) var(--spacing-lg);
  border-radius: var(--border-radius-md);
  text-decoration: none;
  font-weight: 500;
  transition: var(--transition-fast);
  text-align: center;
}

.responsive-col .composant-bouton:hover {
  opacity: 0.9;
  transform: translateY(-1px);
}

/* Images responsive */
.responsive-col .composant-image {
  width: 100%;
}

.responsive-col .composant-image img {
  width: 100%;
  height: auto;
  border-radius: var(--border-radius-md);
  object-fit: cover;
}

/* Texte responsive */
.responsive-col .composant-texte {
  width: 100%;
}

/* Containers flexbox (groupes ISB) */
.composant-container {
  width: 100%;
  border: 1px solid var(--color-border);
}

/* Calendrier responsive */
.responsive-col .composant-calendrier {
  width: 100%;
}

/* Tableau responsive */
.responsive-col .composant-tableau {
  width: 100%;
  overflow-x: auto;
}

.tableau-responsive {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.tableau-responsive .tableau {
  min-width: 600px;
}

/* Trombinoscope responsive */
.responsive-col .composant-trombi {
  width: 100%;
}

/* MODIF-2025-12-06-RESPECT_CONFIG: Ne PAS écraser grid-template-columns du style inline */
.responsive-col .trombi-grid {
  display: grid;
  /* grid-template-columns défini en inline par JS selon config ISB */
  /* gap défini en inline par JS selon config ISB */
}

/* Composant inconnu */
.composant-unknown {
  padding: var(--spacing-md);
  background: var(--color-surface);
  border: 2px dashed var(--color-border);
  border-radius: var(--border-radius-md);
  color: var(--color-text-light);
  text-align: center;
}

/* ============================================================
   RESPONSIVE BREAKPOINTS
   ============================================================ */

/* Tablet */
@media (max-width: 1024px) {
  .responsive-row {
    gap: var(--spacing-sm);
  }

  /* MODIF-2025-12-06-RESPECT_CONFIG: Laisse le style inline gérer les colonnes */
  /* .responsive-col .trombi-grid { grid-template-columns géré par inline } */
}

/* Mobile */
@media (max-width: 768px) {
  .responsive-container {
    padding: var(--spacing-sm);
    gap: var(--spacing-md);
  }

  /* Sur mobile, chaque ligne devient colonne (stack vertical) */
  .responsive-row {
    flex-direction: column;
    gap: var(--spacing-md);
  }

  /* Chaque composant prend toute la largeur */
  .responsive-col {
    flex: 1 1 100% !important;
    width: 100%;
  }

  /* Trombi 2 colonnes max sur mobile */
  .responsive-col .trombi-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  /* Boutons full width sur mobile */
  .responsive-col .composant-bouton {
    width: 100%;
    padding: var(--spacing-md);
  }

  /* Calendrier compact */
  .event-item {
    grid-template-columns: 1fr;
    gap: var(--spacing-xs);
  }

  .event-date {
    font-size: 0.75rem;
  }
}

/* Small mobile */
@media (max-width: 480px) {
  .responsive-col .trombi-grid {
    grid-template-columns: 1fr;
  }

  .trombi-card {
    flex-direction: column;
    text-align: center;
  }
}

/* ============================================================
   MODIF-26122025-V2_RESPONSIVE: Système V2 rows/columns responsive
   ============================================================ */

/* Container rows V2 */
.rows-container {
  width: 100%;
}

.isb-row {
  width: 100%;
}

.isb-row-columns {
  width: 100%;
}

/* Colonnes V2 - responsive automatique via min-width dans le JS */
.isb-column {
  box-sizing: border-box;
}

/* Tablet */
@media (max-width: 1024px) {
  .isb-column {
    min-width: 200px !important;
  }
}

/* Mobile */
@media (max-width: 768px) {
  /* MODIF-26122025-GRID_RESPONSIVE: Grid passe en 1 colonne sur mobile */
  .isb-row-columns {
    grid-template-columns: 1fr !important;
    gap: 12px !important;
    padding: 12px !important;
  }

  /* Trombi 2 colonnes max sur mobile dans V2 */
  .isb-column .trombi-grid {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}

/* Small mobile */
@media (max-width: 480px) {
  .isb-column .trombi-grid {
    grid-template-columns: 1fr !important;
  }
}

/* MODIF-26122025-V2_RESPONSIVE: Fin */

/* Legacy: ancien système composants-grid (rétrocompatibilité) */
.composants-grid {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

@media (max-width: 768px) {
  .composants-grid {
    flex-direction: column;
  }
}

/* ============================================================
   MODIF-14122025-CANVAS_LAYOUT: Système position absolute
   ============================================================ */

/* Container principal - position relative pour contenir les absolus */
.canvas-container {
  position: relative;
  width: 100%;
  /* max-width retire */
  margin: 0 auto;
  box-sizing: border-box;
}

/* Items positionnés absolument */
.canvas-item {
  box-sizing: border-box;
}

/* MODIF-30122025-TROMBI_CANVAS_FIX: Trombi pleine largeur dans canvas */
.canvas-container .composant-trombi {
  width: 100% !important;
}

.canvas-container .trombi-grid {
  width: 100% !important;
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) !important;
}

/* ============================================================
   MODIF-14122025-MOBILE_FALLBACK: Responsive mobile
   ============================================================ */

/* Mobile : désactive position absolute, passe en colonne */
@media (max-width: 768px) {
  .canvas-container {
    position: static !important;
    min-height: auto !important;
    display: flex;
    flex-direction: column;
    gap: var(--spacing-md);
    padding: var(--spacing-sm);
  }

  .canvas-item {
    position: static !important;
    left: auto !important;
    top: auto !important;
    width: 100% !important;
    order: attr(data-order);
  }

  /* Tri par data-order pour respecter l'ordre défini */
  .canvas-item[data-order="0"] { order: 0; }
  .canvas-item[data-order="1"] { order: 1; }
  .canvas-item[data-order="2"] { order: 2; }
  .canvas-item[data-order="3"] { order: 3; }
  .canvas-item[data-order="4"] { order: 4; }
  .canvas-item[data-order="5"] { order: 5; }
  .canvas-item[data-order="6"] { order: 6; }
  .canvas-item[data-order="7"] { order: 7; }
  .canvas-item[data-order="8"] { order: 8; }
  .canvas-item[data-order="9"] { order: 9; }
  .canvas-item[data-order="10"] { order: 10; }
  .canvas-item[data-order="11"] { order: 11; }
  .canvas-item[data-order="12"] { order: 12; }
}

/* ============================================================
   MODIF-14122025-SIDEBAR_PROFILE: Profil utilisateur sidebar (style Netlify)
   ============================================================ */

/* Sidebar footer container */
.sidebar-footer {
  margin-top: auto;
  padding: var(--spacing-sm);
  border-top: 1px solid var(--color-border);
}

/* MODIF-16122025-BLOC_USER_NETLIFY: Style Netlify ultra epure */
.user-dropdown-container {
  position: relative;
}

.user-trigger {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 8px;
  cursor: pointer;
  transition: background-color 0.15s ease;
}

.user-trigger:hover {
  background-color: rgba(255, 255, 255, 0.06);
}

.user-avatar {
  width: 32px;
  height: 32px;
  border-radius: 6px;
  background: var(--color-primary);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: 12px;
  flex-shrink: 0;
  position: relative;
}

/* MODIF-04012026-SIDEBAR_AVATAR: Avatar image dans sidebar */
.user-avatar img.sidebar-avatar {
  width: 100%;
  height: 100%;
  border-radius: 6px;
  object-fit: cover;
}

.user-avatar.sa-badge::after {
  content: "★";
  position: absolute;
  bottom: -3px;
  right: -3px;
  background: var(--color-accent, #f59e0b);
  color: white;
  font-size: 8px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.user-info {
  display: flex;
  flex-direction: column;
  min-width: 0;
  gap: 1px;
}

.user-name {
  font-weight: 500;
  font-size: 13px;
  color: var(--color-menu-niv2, #ffffff);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
}

.user-email {
  font-size: 11px;
  color: var(--color-menu-niv3, #8b92a8);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  opacity: 0.7;
  line-height: 1.3;
}

/* Dropdown */
/* MODIF-13012026-USER_BLOCK_VISIBILITY: Card collée au bloc user (plus de bottom: 70px fixe) */
.user-dropdown {
  display: none;
  position: absolute;
  bottom: calc(100% + 8px);
  left: 0;
  width: 220px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
  overflow: hidden;
  z-index: 1000;
}

.user-dropdown.open {
  display: block;
  animation: dropdownFadeIn 0.15s ease;
}

@keyframes dropdownFadeIn {
  from { opacity: 0; transform: translateY(4px); }
  to { opacity: 1; transform: translateY(0); }
}

.dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  color: var(--color-text-dropdown, var(--color-text));
  text-decoration: none;
  font-size: 13px;
  cursor: pointer;
  border: none;
  background: none;
  width: 100%;
  text-align: left;
  transition: background-color 0.1s ease;
}

.dropdown-item:hover {
  background-color: rgba(255, 255, 255, 0.06);
}

.dropdown-item .material-symbols-outlined {
  font-size: 18px;
  opacity: 0.6;
}

.dropdown-item.logout {
  color: var(--color-error, #ef4444);
}

.dropdown-item.logout .material-symbols-outlined {
  color: var(--color-error, #ef4444);
  opacity: 1;
}

.dropdown-item.logout:hover {
  background-color: var(--color-error, #ef4444);
  color: #ffffff;
}

.dropdown-item.logout:hover .material-symbols-outlined {
  color: #ffffff;
}

.dropdown-divider {
  height: 1px;
  background: var(--color-border);
  margin: 4px 0;
}

/* Page Cockpit */
.cockpit-page {
  padding: var(--spacing-xl);
  /* max-width retire */
  margin: 0 auto;
}

.cockpit-header {
  margin-bottom: var(--spacing-xl);
}

.cockpit-header h1 {
  font-size: 2rem;
  color: #1e293b !important; /* MODIF-01012026-FIX: Texte foncé toujours visible sur fond orange */
  margin: 0 0 var(--spacing-xs) 0;
}

.cockpit-subtitle {
  color: var(--color-text-muted);
  font-size: var(--font-size-md);
  margin: 0 auto;
}

.cockpit-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: var(--spacing-lg);
}

.cockpit-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  cursor: pointer;
  transition: all var(--transition-fast);
}

.cockpit-card:hover {
  border-color: var(--color-primary);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}

.cockpit-card .material-symbols-outlined {
  font-size: 32px;
  color: var(--color-primary);
  margin-bottom: var(--spacing-sm);
}

.cockpit-card h3 {
  font-size: var(--font-size-lg);
  color: #1e293b !important; /* MODIF-01012026-FIX: Texte foncé sur fond blanc, ignore theme-dark */
  margin: 0 0 var(--spacing-xs) 0;
}

.cockpit-card p {
  font-size: var(--font-size-sm);
  color: #64748b !important; /* MODIF-01012026-FIX: Texte gris sur fond blanc, ignore theme-dark */
  margin: 0 auto;
}

/* MODIF-21122025-COCKPIT_CARDS: Types de cards dynamiques */
/* MODIF-30122025-FIX_COLORS: Fond solide blanc forcé */

.cockpit-card {
  background: #ffffff !important;
  border: 1px solid #e2e8f0;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

.cockpit-card:hover {
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
  transform: translateY(-4px);
}

/* MODIF-28122025-COCKPIT_PAGES: Styles pages cockpit user */

/* Header commun avec bouton retour */
.cockpit-header {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  flex-wrap: wrap;
}

.cockpit-header .btn-back {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 8px 12px;
  background: rgba(255, 255, 255, 0.8);
  border: 1px solid #e2e8f0;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  font-size: var(--font-size-sm);
  color: #1e293b !important; /* MODIF-01012026-FIX: Texte foncé */
  transition: all 0.2s;
}

.cockpit-header .btn-back:hover {
  background: rgba(255, 255, 255, 0.8);
  border-color: var(--color-primary);
}

.cockpit-header h1 .badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 24px;
  height: 24px;
  padding: 0 8px;
  background: var(--color-error, #ef4444);
  color: white;
  font-size: 14px;
  font-weight: 600;
  border-radius: 12px;
  margin-left: 8px;
}

.btn-mark-all {
  margin-left: auto;
  padding: 8px 16px;
  background: var(--color-primary);
  color: white;
  border: none;
  border-radius: var(--border-radius-md);
  cursor: pointer;
  font-size: var(--font-size-sm);
  transition: all 0.2s;
}

.btn-mark-all:hover {
  filter: brightness(1.1);
}

/* Page Notifications */
.notifications-page .notifications-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.notification-item {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-md);
  padding: var(--spacing-md);
  background: rgba(255, 255, 255, 0.6);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--color-border);
  position: relative;
  transition: all 0.2s;
}

.notification-item.unread {
  background: rgba(59, 130, 246, 0.08);
  border-color: rgba(59, 130, 246, 0.3);
}

.notification-item:hover {
  background: rgba(255, 255, 255, 0.9);
}

.notification-item .notif-icon {
  font-size: 24px;
  flex-shrink: 0;
}

.notification-item .notif-content {
  flex: 1;
  min-width: 0;
}

.notification-item .notif-title {
  font-weight: 600;
  color: var(--color-text);
  margin: 0 0 4px 0;
}

.notification-item .notif-message {
  color: var(--color-text-muted);
  font-size: var(--font-size-sm);
  margin: 0 0 8px 0;
  line-height: 1.4;
}

.notification-item .notif-date {
  font-size: var(--font-size-xs);
  color: var(--color-text-muted);
  opacity: 0.7;
}

.notification-item .unread-dot {
  width: 10px;
  height: 10px;
  background: var(--color-primary);
  border-radius: 50%;
  flex-shrink: 0;
}

.notification-item .btn-mark-read {
  padding: 6px 10px;
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-sm);
  cursor: pointer;
  color: var(--color-success, #22c55e);
  font-weight: 600;
  transition: all 0.2s;
}

.notification-item .btn-mark-read:hover {
  background: var(--color-success, #22c55e);
  color: white;
  border-color: var(--color-success, #22c55e);
}

/* ============================================================
   MODIF-18022026-MODAL_NOTIF: Modal consultation notifications
   Desktop = silhouette écran PC | Mobile = silhouette smartphone
   ============================================================ */

.notif-modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  backdrop-filter: blur(4px);
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity 0.3s ease;
}
.notif-modal-overlay.visible { opacity: 1; }

/* ---- Desktop : silhouette écran PC ---- */
.notif-modal-desktop {
  width: min(90vw, 720px);
  max-height: 85vh;
  background: var(--color-bg, #0f1338);
  border-radius: 12px 12px 4px 4px;
  border: 2px solid rgba(255,255,255,0.1);
  box-shadow: 0 25px 80px rgba(0,0,0,0.5);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  font-family: 'Inter', 'Open Sans', sans-serif;
  color: #fff;
  transform: scale(0.95);
  transition: transform 0.3s ease;
  position: relative;
}
/* Petit pied/socle écran */
.notif-modal-desktop::after {
  content: '';
  display: block;
  width: 120px;
  height: 6px;
  background: rgba(255,255,255,0.15);
  border-radius: 0 0 4px 4px;
  margin: 0 auto;
  position: absolute;
  bottom: -8px;
  left: 50%;
  transform: translateX(-50%);
}
.notif-modal-overlay.visible .notif-modal-desktop { transform: scale(1); }

/* ---- Mobile : silhouette smartphone ---- */
.notif-modal-mobile {
  width: 95vw;
  max-width: 420px;
  max-height: 90vh;
  background: var(--color-bg, #0f1338);
  border-radius: 28px;
  border: 3px solid rgba(255,255,255,0.12);
  box-shadow: 0 25px 80px rgba(0,0,0,0.6);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  font-family: 'Inter', 'Open Sans', sans-serif;
  color: #fff;
  transform: translateY(20px);
  transition: transform 0.3s ease;
  position: relative;
}
/* Petit notch en haut */
.notif-modal-mobile::before {
  content: '';
  display: block;
  width: 80px;
  height: 5px;
  background: rgba(255,255,255,0.2);
  border-radius: 3px;
  margin: 8px auto 0;
  flex-shrink: 0;
}
.notif-modal-overlay.visible .notif-modal-mobile { transform: translateY(0); }

/* ---- Header ---- */
.notif-modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px;
  flex-shrink: 0;
  border-radius: 0;
}
.notif-modal-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}
.notif-modal-header h2 {
  margin: 0;
  font-size: 18px;
  font-weight: 700;
  color: #fff;
}
.notif-modal-count {
  font-size: 12px;
  background: rgba(255,255,255,0.2);
  padding: 2px 10px;
  border-radius: 12px;
  color: rgba(255,255,255,0.9);
}
.notif-modal-close {
  background: rgba(255,255,255,0.15);
  border: none;
  border-radius: 50%;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: #fff;
  transition: background 0.2s;
}
.notif-modal-close:hover { background: rgba(255,255,255,0.3); }

/* ---- Body (liste items) ---- */
.notif-modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 8px 16px;
  scrollbar-width: thin;
  scrollbar-color: rgba(255,255,255,0.2) transparent;
}
.notif-modal-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 40px;
  color: rgba(255,255,255,0.4);
}
.notif-modal-empty .material-symbols-outlined { font-size: 48px; }

/* ---- Item (1 ligne = 1 notification) ---- */
.notif-modal-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 8px;
  border-bottom: 1px solid rgba(255,255,255,0.06);
  transition: background 0.15s;
}
.notif-modal-item:hover { background: rgba(255,255,255,0.04); }
.notif-modal-item.critique { border-left: 3px solid #ef4444; }

.notif-modal-type-icon {
  font-size: 20px;
  color: rgba(255,255,255,0.4);
  flex-shrink: 0;
}
.notif-modal-item-content { flex: 1; min-width: 0; }
.notif-modal-line {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 2px;
}
.notif-modal-date {
  font-size: 11px;
  color: rgba(255,255,255,0.4);
  white-space: nowrap;
}
.notif-modal-group-badge {
  font-size: 10px;
  background: rgba(255,255,255,0.1);
  padding: 1px 6px;
  border-radius: 8px;
  color: rgba(255,255,255,0.5);
}
.notif-modal-text {
  font-size: 14px;
  font-weight: 500;
  color: rgba(255,255,255,0.9);
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.notif-modal-detail {
  font-size: 12px;
  color: rgba(255,255,255,0.35);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- Bouton mémo (petit rond) ---- */
.notif-memo-btn {
  background: none;
  border: none;
  padding: 4px;
  cursor: pointer;
  flex-shrink: 0;
}
.memo-dot {
  display: block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 2px solid rgba(255,255,255,0.3);
  transition: all 0.2s;
}
.memo-dot.active {
  background: var(--color-primary, #6366f1);
  border-color: var(--color-primary, #6366f1);
  box-shadow: 0 0 8px var(--color-primary, #6366f1);
}

/* ---- Actions (email + calendrier) ---- */
.notif-modal-actions {
  display: flex;
  gap: 4px;
  flex-shrink: 0;
}
.notif-action-btn {
  background: none;
  border: none;
  color: rgba(255,255,255,0.3);
  cursor: pointer;
  padding: 6px;
  border-radius: 6px;
  transition: all 0.2s;
  display: flex;
  align-items: center;
  justify-content: center;
}
.notif-action-btn:hover {
  color: #fff;
  background: rgba(255,255,255,0.1);
}
.notif-action-btn .material-symbols-outlined { font-size: 18px; }

/* ---- Footer ---- */
.notif-modal-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 20px;
  border-top: 1px solid rgba(255,255,255,0.08);
  flex-shrink: 0;
}
.notif-modal-hint {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  color: rgba(255,255,255,0.35);
}
.notif-modal-hint .memo-dot {
  width: 10px;
  height: 10px;
}
.notif-modal-btn-close {
  background: rgba(255,255,255,0.1);
  border: 1px solid rgba(255,255,255,0.15);
  color: #fff;
  padding: 8px 20px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 500;
  transition: background 0.2s;
}
.notif-modal-btn-close:hover { background: rgba(255,255,255,0.2); }

/* ---- Responsive mobile ajustements ---- */
@media (max-width: 767px) {
  .notif-modal-item { padding: 10px 4px; gap: 8px; }
  .notif-modal-text { font-size: 13px; }
  .notif-modal-actions { flex-direction: column; gap: 2px; }
  .notif-action-btn { padding: 4px; }
}

/* Page Profil */
.profile-page .profile-content {
  padding: var(--spacing-xl);
  max-width: 500px;
}

.profile-page .profile-avatar {
  text-align: center;
  margin-bottom: var(--spacing-lg);
}

.profile-page .profile-avatar .material-symbols-outlined {
  font-size: 80px;
  color: var(--color-primary);
}

/* MODIF-01012026-AVATAR: Style pour photo/avatar */
.profile-page .profile-avatar .profile-photo {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  object-fit: cover;
  border: 4px solid var(--color-primary);
  box-shadow: var(--shadow-md);
}

.profile-page .profile-avatar .dicebear-avatar {
  background-color: #f0f9ff;
  padding: 8px;
}

.profile-page .profile-fields {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.profile-page .profile-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.profile-page .profile-field label {
  font-size: var(--font-size-xs);
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.profile-page .profile-field span {
  font-size: var(--font-size-md);
  color: var(--color-text);
}

/* Page Sécurité */
.security-page .security-content {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  max-width: 500px;
}

.security-page .security-section {
  padding: var(--spacing-lg);
}

.security-page .security-section h3 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 var(--spacing-md) 0;
  font-size: var(--font-size-md);
}

.security-page .security-section h3 .material-symbols-outlined {
  font-size: 20px;
  color: var(--color-primary);
}

.security-page .btn-action {
  padding: 10px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  font-size: var(--font-size-sm);
  transition: all 0.2s;
}

.security-page .btn-action:hover {
  background: var(--color-primary);
  color: white;
  border-color: var(--color-primary);
}

.security-page .btn-action.btn-danger {
  color: var(--color-error, #ef4444);
  border-color: var(--color-error, #ef4444);
}

.security-page .btn-action.btn-danger:hover {
  background: var(--color-error, #ef4444);
  color: white;
}

/* Page Gestion Utilisateurs */
.admin-users-page .users-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.admin-users-page .user-row {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-md);
  background: rgba(255, 255, 255, 0.6);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--color-border);
}

.admin-users-page .user-info {
  flex: 1;
  min-width: 0;
}

.admin-users-page .user-name {
  display: block;
  font-weight: 500;
  color: var(--color-text);
}

.admin-users-page .user-email {
  display: block;
  font-size: var(--font-size-sm);
  color: var(--color-text-muted);
}

.admin-users-page .user-role {
  padding: 4px 8px;
  background: var(--color-primary);
  color: white;
  font-size: var(--font-size-xs);
  border-radius: var(--border-radius-sm);
}

.admin-users-page .user-status {
  padding: 4px 8px;
  background: var(--color-warning, #f59e0b);
  color: white;
  font-size: var(--font-size-xs);
  border-radius: var(--border-radius-sm);
}

.admin-users-page .user-status.active {
  background: var(--color-success, #22c55e);
}

/* States */
.empty-state, .loading-state, .error-state {
  text-align: center;
  padding: var(--spacing-xl);
  color: var(--color-text-muted);
}

.error-state {
  color: var(--color-error, #ef4444);
}

/* MODIF-01012026-COCKPIT_ENTITE: Styles pour cockpit structure */
.entite-cockpit-page .entite-header-card {
  display: flex;
  align-items: center;
  gap: var(--spacing-lg);
  padding: var(--spacing-xl);
  margin-bottom: var(--spacing-lg);
  background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1));
}

.entite-cockpit-page .entite-logo {
  width: 80px;
  height: 80px;
  object-fit: contain;
  border-radius: var(--border-radius-md);
  background: white;
  padding: 8px;
}

.entite-cockpit-page .entite-logo-placeholder {
  width: 80px;
  height: 80px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.2);
  border-radius: var(--border-radius-md);
}

.entite-cockpit-page .entite-logo-placeholder .material-symbols-outlined {
  font-size: 48px;
  color: var(--color-primary);
}

.entite-cockpit-page .entite-title h2 {
  margin: 0 0 4px 0;
  font-size: var(--font-size-2xl);
}

.entite-cockpit-page .entite-statut {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  background: rgba(255, 255, 255, 0.2);
  padding: 4px 12px;
  border-radius: var(--border-radius-full);
}

.entite-cockpit-page .entite-info-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-md);
}

.entite-cockpit-page .info-row {
  display: flex;
  justify-content: space-between;
  padding: var(--spacing-xs) 0;
  border-bottom: 1px solid var(--color-border);
}

.entite-cockpit-page .info-row:last-child {
  border-bottom: none;
}

.entite-cockpit-page .info-label {
  color: #64748b !important; /* MODIF-01012026-FIX: Texte gris visible */
  font-size: var(--font-size-sm);
}

.entite-cockpit-page .info-value {
  font-weight: 500;
  text-align: right;
  color: #1e293b !important; /* MODIF-01012026-FIX: Texte foncé visible */
}

.entite-cockpit-page .entite-bio {
  margin-top: var(--spacing-md);
  line-height: 1.6;
  color: #475569 !important; /* MODIF-01012026-FIX: Texte gris visible */
}

.entite-cockpit-page .entite-title h2 {
  color: #1e293b !important; /* MODIF-01012026-FIX: Titre foncé */
}

.entite-cockpit-page .entite-statut {
  color: #475569 !important;
  background: rgba(0, 0, 0, 0.1) !important;
}

.cockpit-card-admin {
  border: 2px solid var(--color-primary);
  background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05));
}

/* MODIF-01012026-COCKPIT_IDDEA: Styles pour cockpit IDDEA */
.cockpit-card-iddea {
  border: 2px solid #10b981;
  background: linear-gradient(135deg, rgba(16, 185, 129, 0.05), rgba(52, 211, 153, 0.1));
}

.iddea-cockpit-page .iddea-header-card {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-lg);
  padding: var(--spacing-xl);
  margin-bottom: var(--spacing-lg);
  background: #ffffff;
}

.iddea-cockpit-page .iddea-logo {
  width: 160px;
  height: 160px;
  object-fit: contain;
  border-radius: var(--border-radius-md);
  background: white;
  padding: 8px;
}

.iddea-cockpit-page .iddea-title h2 {
  margin: 0 0 4px 0;
  font-size: var(--font-size-xl);
  color: #1e293b !important; /* MODIF-01012026-FIX */
}

.iddea-cockpit-page .iddea-title p {
  color: #64748b !important; /* MODIF-01012026-FIX */
  margin: 0;
}

.iddea-cockpit-page .docs-list,
.iddea-cockpit-page .livrables-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: var(--spacing-md);
}

.iddea-cockpit-page .doc-item,
.iddea-cockpit-page .livrable-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px;
  background: rgba(255, 255, 255, 0.8);
  border-radius: var(--border-radius-sm);
  font-size: var(--font-size-sm);
}

.iddea-cockpit-page .doc-name,
.iddea-cockpit-page .livrable-name {
  flex: 1;
  font-weight: 500;
  color: #1e293b !important; /* MODIF-01012026-FIX */
}

.iddea-cockpit-page .doc-type {
  color: #64748b !important; /* MODIF-01012026-FIX */
  font-size: var(--font-size-xs);
}

.iddea-cockpit-page .empty-text {
  color: #64748b !important; /* MODIF-01012026-FIX */
  font-style: italic;
  text-align: center;
  padding: var(--spacing-md);
}

.iddea-cockpit-page .contact-info {
  margin-top: var(--spacing-md);
}

.iddea-cockpit-page .contact-info p {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
  color: var(--color-text-light);
}

.iddea-cockpit-page .contact-info .material-symbols-outlined {
  font-size: 18px;
  color: var(--color-primary);
}

/* KPI Card */
.cockpit-card-kpi .kpi-value {
  font-size: 2.75rem;
  font-weight: 700;
  background: linear-gradient(135deg, var(--color-primary), var(--color-secondary, #667eea));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  margin: var(--spacing-md) 0;
}

.cockpit-card-kpi .kpi-desc {
  font-size: var(--font-size-xs);
  color: var(--color-text-muted);
  margin-top: var(--spacing-xs);
  opacity: 0.8;
}

/* Chart cards */
.cockpit-card-bar,
.cockpit-card-donut,
.cockpit-card-graph {
  min-height: 220px;
}

.cockpit-card .card-header {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-md);
  padding-bottom: var(--spacing-sm);
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}

.cockpit-card .card-header h3 {
  margin: 0;
  font-weight: 600;
}

.cockpit-card .card-header .material-symbols-outlined {
  font-size: 24px;
  color: var(--color-primary);
  opacity: 0.9;
}

.cockpit-card .chart-placeholder {
  background: linear-gradient(135deg, rgba(255,255,255,0.5), rgba(255,255,255,0.2));
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-xl);
  text-align: center;
  color: var(--color-text-muted);
  min-height: 140px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--spacing-sm);
  border: 1px dashed rgba(0, 0, 0, 0.1);
}

.cockpit-card .chart-placeholder .material-symbols-outlined {
  font-size: 36px;
  opacity: 0.5;
}

.cockpit-card-text p {
  margin-top: var(--spacing-sm);
  line-height: 1.6;
  opacity: 0.85;
}

/* KPI Icon wrapper */
.kpi-icon-wrapper,
.text-icon-wrapper {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: linear-gradient(135deg, var(--color-primary), var(--color-secondary, #667eea));
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--spacing-md);
}

.kpi-icon-wrapper .material-symbols-outlined,
.text-icon-wrapper .material-symbols-outlined {
  font-size: 24px;
  color: white;
}

/* KPI Trend indicator */
.kpi-trend {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-top: var(--spacing-sm);
  padding: 6px 12px;
  background: rgba(34, 197, 94, 0.1);
  border-radius: 20px;
  width: fit-content;
}

.kpi-trend .material-symbols-outlined {
  font-size: 16px;
  color: #22c55e;
}

.kpi-trend .trend-value {
  font-size: 13px;
  font-weight: 600;
  color: #22c55e;
}

/* Chart data count */
.chart-data-count {
  font-size: 13px;
  color: var(--color-text-muted);
  font-weight: 500;
}

/* Dark mode support */
@media (prefers-color-scheme: dark) {
  .cockpit-card {
    background: rgba(30, 30, 30, 0.7);
    border: 1px solid rgba(255, 255, 255, 0.1);
  }

  .cockpit-card:hover {
    background: rgba(40, 40, 40, 0.85);
  }
}

/* Sidebar footer needs relative positioning for dropdown */
.sidebar-footer {
  position: relative;
}

/* Mobile adjustments - MODIF-16122025-BLOC_USER_NETLIFY */
@media (max-width: 768px) {
  .user-info {
    display: none;
  }

  .user-trigger {
    justify-content: center;
    padding: 8px;
  }

  .user-dropdown {
    min-width: 180px;
    left: auto;
    right: 0;
  }

  .cockpit-grid {
    grid-template-columns: 1fr;
  }

  /* MODIF-24012026-FIX_RETOUR_CACHE: Bouton Retour visible sous le header mobile */
  .cockpit-header {
    padding-top: 70px !important; /* 60px header + 10px marge */
  }
}

/* Bouton retour cockpit */
.cockpit-back {
  background: none;
  border: none;
  cursor: pointer;
  padding: 8px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-text);
  transition: background-color 0.15s ease;
}

.cockpit-back:hover {
  background-color: var(--color-surface);
}

.cockpit-header {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

/* ============================================================
   SECTION FLEXBOX - MODIF-17122025-FLEXBOX
   Layout adaptatif par rangées
   ============================================================ */

.flex-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 15px;
  margin-bottom: 15px;
  width: 100%;
}

.flex-item {
  box-sizing: border-box;
}

.flex-item img {
  max-width: 100%;
  height: auto;
  display: block;
}

/* Responsive: sur mobile, tout en colonne */
@media (max-width: 768px) {
  .flex-row {
    flex-direction: column;
  }
  .flex-item {
    flex: 0 0 100% !important;
    max-width: 100% !important;
  }
}

/* Canvas container pour flexbox (plus de position relative) */
.canvas-container.flexbox-mode {
  position: static;
  padding-bottom: 0;
  display: flex;
  flex-direction: column;
}

/* ===========================================
   MODIF-26122025-NOTIFICATIONS_PAGE: Centre de notifications
   =========================================== */

.notifications-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.notification-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px;
  background: rgba(255, 255, 255, 0.8);
  border-radius: 12px;
  border: 1px solid #e5e7eb;
  transition: all 0.2s ease;
}

.notification-item:hover {
  background: rgba(255, 255, 255, 0.95);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

.notification-item.unread {
  background: rgba(255, 255, 255, 1);
  border-left: 4px solid var(--color-primary, #667eea);
}

.notification-item.read {
  opacity: 0.7;
}

.notification-item.notification-critical {
  border-left: 4px solid #ef4444;
  background: rgba(254, 242, 242, 0.8);
}

.notification-indicator {
  font-size: 10px;
  flex-shrink: 0;
}

.notification-icon {
  font-size: 20px;
  flex-shrink: 0;
}

.notification-content {
  flex: 1;
  min-width: 0;
}

.notification-title {
  font-weight: 600;
  color: #1f2937;
  margin-bottom: 4px;
}

.notification-body {
  font-size: 14px;
  color: #6b7280;
  line-height: 1.4;
  margin-bottom: 8px;
}

.notification-date {
  font-size: 12px;
  color: #9ca3af;
}

.notification-actions {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
}

.btn-icon {
  width: 32px;
  height: 32px;
  border: none;
  border-radius: 6px;
  background: #f3f4f6;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.2s;
}

.btn-icon:hover {
  background: #e5e7eb;
}

.btn-icon .material-symbols-outlined {
  font-size: 18px;
  color: #6b7280;
}

.btn-icon.btn-danger:hover {
  background: #fef2f2;
}

.btn-icon.btn-danger:hover .material-symbols-outlined {
  color: #ef4444;
}

.btn-secondary {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  background: #f3f4f6;
  border: 1px solid #d1d5db;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 500;
  color: #374151;
  cursor: pointer;
  transition: all 0.2s;
}

.btn-secondary:hover:not(:disabled) {
  background: #e5e7eb;
}

.btn-secondary:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.btn-secondary .material-symbols-outlined {
  font-size: 18px;
}

/* Responsive notifications */
@media (max-width: 640px) {
  .notification-item {
    flex-wrap: wrap;
  }

  .notification-actions {
    width: 100%;
    justify-content: flex-end;
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid #e5e7eb;
  }
}

/* ============================================================
   MODIF-01012026-FAQ: Styles FAQ (accordéon)
   ============================================================ */

.faq-page .faq-list {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
  max-width: 800px;
  margin: 0 auto;
}

.faq-item {
  background: var(--color-card-bg, #fff);
  border: 1px solid var(--color-border, #e5e7eb);
  border-radius: var(--border-radius);
  overflow: hidden;
  transition: all 0.2s;
}

.faq-item:hover {
  border-color: var(--color-primary);
  box-shadow: var(--shadow-sm);
}

.faq-item summary {
  padding: var(--spacing-md) var(--spacing-lg);
  cursor: pointer;
  font-weight: 600;
  color: var(--color-text);
  display: flex;
  align-items: center;
  justify-content: space-between;
  list-style: none;
  transition: background 0.2s;
}

.faq-item summary::-webkit-details-marker {
  display: none;
}

.faq-item summary::after {
  content: "▶ Cliquez pour voir la réponse";
  font-size: 12px;
  font-weight: 400;
  color: #333;
  opacity: 0.7;
  transition: all 0.2s;
}

.faq-item[open] summary::after {
  content: "▼ Cliquez pour masquer";
}

.faq-item summary:hover {
  background: var(--color-bg-hover, #f9fafb);
}

.faq-item summary:hover::after {
  opacity: 1;
  color: var(--color-primary);
}

.faq-item p {
  padding: 0 var(--spacing-lg) var(--spacing-lg);
  margin: 0;
  color: var(--color-text-secondary, #6b7280);
  line-height: 1.6;
  border-top: 1px solid var(--color-border, #e5e7eb);
  background: var(--color-bg-subtle, #f9fafb);
}

/* Page Aide */
.aide-page .aide-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: var(--spacing-lg);
  padding: var(--spacing-lg);
}

.aide-page .aide-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-xl);
  background: var(--color-card-bg, #fff);
  border: 1px solid var(--color-border, #e5e7eb);
  border-radius: var(--border-radius);
  cursor: pointer;
  transition: all 0.2s;
  text-align: center;
}

.aide-page .aide-card:hover {
  border-color: var(--color-primary);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}

.aide-page .aide-card .material-symbols-outlined {
  font-size: 48px;
  padding: 16px;
  border-radius: 50%;
}

/* Couleurs spécifiques par carte */
.aide-page .aide-card:nth-child(1) .material-symbols-outlined {
  color: #3b82f6;
  background: rgba(59, 130, 246, 0.1);
}
.aide-page .aide-card:nth-child(2) .material-symbols-outlined {
  color: #10b981;
  background: rgba(16, 185, 129, 0.1);
}
.aide-page .aide-card:nth-child(3) .material-symbols-outlined {
  color: #f59e0b;
  background: rgba(245, 158, 11, 0.1);
}

.aide-page .aide-card h3 {
  margin: 0;
  color: var(--color-text);
  font-weight: 600;
}

.aide-page .aide-card p {
  margin: 0;
  color: var(--color-text-secondary, #6b7280);
  font-size: 14px;
  text-align: center;
}

/* Lien action dans profil */
.link-action {
  display: inline-block;
  margin-top: 4px;
  font-size: 12px;
  color: var(--color-primary);
  text-decoration: underline;
  cursor: pointer;
}

.link-action:hover {
  color: #ffffff !important; /* Blanc au survol */
}

/* ============================================================
   MODIF-03012026-CALENDAR_RESPONSIVE: Calendrier mobile
   ============================================================ */

/* Forcer le calendrier à rester dans son conteneur */
/* MODIF-03032026-FIX: Forcer couleurs sombres sur calendrier (sinon hérite du thème blanc/orange) */
.calendar-wrapper {
  max-width: 100%;
  overflow-x: hidden;
  box-sizing: border-box;
  color: #1a1a2e;
}
.calendar-days-header > div {
  color: #555 !important;
}
.calendar-day-cell > div:first-child {
  color: #1a1a2e !important;
}
.calendar-header span {
  color: #1a1a2e !important;
}

/* Grilles - empêcher débordement */
.calendar-days-header,
.calendar-days-grid,
.calendar-planning-grid {
  max-width: 100%;
  overflow: hidden;
}

/* MODIF-03032026-UX: Hint rotation visible uniquement en portrait mobile */
@media (max-width: 768px) and (orientation: portrait) {
  .calendar-rotate-hint { display: block !important; }
}

/* Mobile - réduire taille et espacement */
@media (max-width: 480px) {
  .calendar-wrapper {
    padding: 10px !important;
    border-radius: 8px !important;
  }

  /* Header navigation plus compact */
  .calendar-header {
    padding: 6px 8px !important;
    gap: 2px !important;
  }

  .calendar-header button {
    padding: 4px 8px !important;
    font-size: 12px !important;
  }

  .calendar-header span {
    font-size: 11px !important;
  }

  /* Noms jours semaine */
  .calendar-days-header > div {
    font-size: 10px !important;
    padding: 4px 0 !important;
  }

  /* Cellules jours - réduire taille */
  .calendar-day-cell {
    min-height: 40px !important;
    padding: 2px !important;
  }

  /* Numéro jour */
  .calendar-day-cell > div:first-child {
    font-size: 10px !important;
    margin-bottom: 1px !important;
  }

  /* MODIF-03032026-FIX: Events mobile lisibles avec couleurs préservées */
  .calendar-day-cell > div:not(:first-child) {
    font-size: 8px !important;
    padding: 2px 3px !important;
    margin-bottom: 1px !important;
    min-height: 4px !important;
  }

  /* Planning cards */
  .calendar-planning-grid {
    grid-template-columns: 1fr !important;
    gap: 10px !important;
  }
}

/* Très petits écrans */
@media (max-width: 360px) {
  .calendar-wrapper {
    padding: 6px !important;
  }

  /* Cellules encore plus petites */
  .calendar-day-cell {
    min-height: 35px !important;
    padding: 1px !important;
  }

  /* MODIF-03032026-FIX: Garder events visibles sur petits écrans (barre de couleur min) */
  .calendar-day-cell > div:not(:first-child) {
    font-size: 0 !important;
    padding: 0 !important;
    min-height: 3px !important;
    margin-bottom: 1px !important;
  }
}

/* ============================================================
   MODIF-03012026-INVITATION_MANAGER: Styles gestionnaire invitations
   ============================================================ */

.invitation-manager-page {
  max-width: 1200px;
  margin: 0 auto;
}

/* Formulaire d'invitation */
.invitation-form-card {
  margin-bottom: 24px;
  padding: 24px;
}

.invitation-form-card h3 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 16px;
  font-size: 1.1rem;
}

.invitation-form {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: flex-end;
}

.invitation-form input {
  flex: 1;
  min-width: 150px;
  padding: 12px 16px;
  border: 1px solid rgba(255,255,255,0.2);
  border-radius: 8px;
  background: rgba(0,0,0,0.2);
  color: var(--color-text, #fff);
  font-size: 14px;
}

.invitation-form input::placeholder {
  color: rgba(255,255,255,0.5);
}

.invitation-form input:focus {
  outline: none;
  border-color: var(--couleur-pri, #00d4ff);
  box-shadow: 0 0 0 2px rgba(0,212,255,0.2);
}

.invitation-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

/* Onglets */
.invitation-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 20px;
  padding: 4px;
  background: rgba(0,0,0,0.2);
  border-radius: 12px;
  width: fit-content;
}

.invitation-tabs .tab-btn {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 20px;
  border: none;
  background: transparent;
  color: rgba(255,255,255,0.6);
  font-size: 14px;
  font-weight: 500;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.2s;
}

.invitation-tabs .tab-btn:hover {
  color: #fff;
  background: rgba(255,255,255,0.1);
}

.invitation-tabs .tab-btn.active {
  background: var(--couleur-pri, #00d4ff);
  color: #1a1f3a;
}

.invitation-tabs .tab-btn .badge {
  background: rgba(0,0,0,0.2);
  padding: 2px 8px;
  border-radius: 10px;
  font-size: 12px;
}

.invitation-tabs .tab-btn.active .badge {
  background: rgba(0,0,0,0.3);
}

/* Grille des cartes utilisateurs */
.users-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 16px;
}

/* Carte invitation */
.invitation-card {
  padding: 20px;
  border-radius: 12px;
  transition: transform 0.2s, box-shadow 0.2s;
}

.invitation-card:hover {
  transform: translateY(-2px);
}

.invitation-card.expired {
  border-left: 3px solid var(--color-warning, #f59e0b);
}

.invitation-card.active {
  border-left: 3px solid var(--color-success, #22c55e);
}

.invitation-card .card-header {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
}

.invitation-card .card-header > .material-symbols-outlined {
  font-size: 32px;
  color: var(--couleur-pri, #00d4ff);
  opacity: 0.8;
}

.invitation-card .card-info {
  flex: 1;
}

.invitation-card .card-info h4 {
  margin: 0;
  font-size: 1rem;
  font-weight: 600;
}

.invitation-card .card-info .email {
  margin: 4px 0 0 0;
  font-size: 13px;
  color: rgba(255,255,255,0.6);
}

.invitation-card .card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 16px;
  font-size: 12px;
  color: rgba(255,255,255,0.5);
}

.invitation-card .card-meta span {
  display: flex;
  align-items: center;
  gap: 4px;
}

.invitation-card .card-meta .material-symbols-outlined {
  font-size: 16px;
}

.invitation-card .status-expired {
  color: var(--color-warning, #f59e0b);
}

.invitation-card .status-pending {
  color: var(--couleur-pri, #00d4ff);
}

.invitation-card .card-actions {
  display: flex;
  gap: 8px;
}

/* Boutons petits */
.btn-small {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  font-size: 13px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.2s;
}

.btn-small .material-symbols-outlined {
  font-size: 18px;
}

.btn-small.btn-primary {
  background: var(--couleur-pri, #00d4ff);
  color: #1a1f3a;
}

.btn-small.btn-primary:hover {
  filter: brightness(1.1);
}

.btn-small.btn-secondary {
  background: rgba(255,255,255,0.1);
  color: #fff;
}

.btn-small.btn-secondary:hover {
  background: rgba(255,255,255,0.2);
}

/* Modal QR Code */
.qr-modal-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0,0,0,0.8);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10000;
  padding: 20px;
}

.qr-modal {
  position: relative;
  max-width: 400px;
  width: 100%;
  padding: 32px;
  text-align: center;
}

.qr-modal-close {
  position: absolute;
  top: 12px;
  right: 12px;
  background: none;
  border: none;
  color: rgba(255,255,255,0.6);
  cursor: pointer;
  padding: 4px;
}

.qr-modal-close:hover {
  color: #fff;
}

.qr-modal h3 {
  margin: 0 0 8px 0;
  font-size: 1.25rem;
}

.qr-modal .qr-email {
  color: rgba(255,255,255,0.6);
  font-size: 14px;
  margin-bottom: 20px;
}

.qr-modal .qr-image {
  width: 250px;
  height: 250px;
  border-radius: 12px;
  background: #fff;
  padding: 8px;
}

.qr-modal .qr-instruction {
  margin: 16px 0;
  font-size: 13px;
  color: rgba(255,255,255,0.6);
}

/* Responsive */
@media (max-width: 768px) {
  .invitation-form {
    flex-direction: column;
  }

  .invitation-form input {
    width: 100%;
  }

  .invitation-actions {
    width: 100%;
  }

  .invitation-actions button {
    flex: 1;
  }

  .invitation-tabs {
    width: 100%;
    justify-content: center;
  }

  .users-grid {
    grid-template-columns: 1fr;
  }
}

/* Widget stats invitations dans cockpit */
.cockpit-card-invitations .card-stats {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid rgba(255,255,255,0.1);
}

.cockpit-card-invitations .stat-loading {
  font-size: 12px;
  color: rgba(255,255,255,0.4);
}

.cockpit-card-invitations .stat-row {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}

.cockpit-card-invitations .stat-item {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  padding: 4px 10px;
  border-radius: 20px;
  background: rgba(0,0,0,0.2);
}

.cockpit-card-invitations .stat-item .material-symbols-outlined {
  font-size: 16px;
}

.cockpit-card-invitations .stat-pending {
  color: var(--couleur-pri, #00d4ff);
}

.cockpit-card-invitations .stat-active {
  color: var(--color-success, #22c55e);
}

/* ============================================================
   MODIF-04012026-INVIT_MASSE: Styles invitation en masse
   ============================================================ */

/* Filtre saison */
.saison-filter {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  padding: 12px 16px;
  background: rgba(0,0,0,0.2);
  border-radius: 8px;
  width: fit-content;
}

.saison-filter label {
  font-size: 14px;
  color: rgba(255,255,255,0.7);
}

.saison-filter select {
  padding: 8px 32px 8px 12px;
  font-size: 14px;
  font-weight: 500;
  background: rgba(0,0,0,0.4);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.2);
  border-radius: 6px;
  cursor: pointer;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='white' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
}

.saison-filter select:hover {
  border-color: var(--couleur-pri, #00d4ff);
}

.saison-filter select:focus {
  outline: none;
  border-color: var(--couleur-pri, #00d4ff);
  box-shadow: 0 0 0 2px rgba(0, 212, 255, 0.2);
}

.saison-filter select option {
  background: #1a1f3a;
  color: #fff;
  padding: 8px;
}

/* MODIF-12012026-TEMPLATE_DROPDOWN: Container filtres invitation */
.invit-filters {
  display: flex;
  align-items: center;
  gap: 20px;
  margin-bottom: 16px;
  flex-wrap: wrap;
}

.invit-filters .filter-group {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  background: rgba(0,0,0,0.2);
  border-radius: 8px;
}

.invit-filters .filter-group label {
  font-size: 14px;
  color: rgba(255,255,255,0.7);
  white-space: nowrap;
}

.invit-filters .filter-group select {
  padding: 8px 32px 8px 12px;
  font-size: 14px;
  font-weight: 500;
  background: rgba(0,0,0,0.4);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.2);
  border-radius: 6px;
  cursor: pointer;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='white' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
  min-width: 180px;
}

.invit-filters .filter-group select:hover {
  border-color: var(--couleur-pri, #00d4ff);
}

.invit-filters .filter-group select:focus {
  outline: none;
  border-color: var(--couleur-pri, #00d4ff);
  box-shadow: 0 0 0 2px rgba(0, 212, 255, 0.2);
}

.invit-filters .filter-group select option {
  background: #1a1f3a;
  color: #fff;
  padding: 8px;
}

/* Header avec checkbox "Tout sélectionner" et bouton */
.invite-mass-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 20px;
  background: rgba(0,0,0,0.2);
  border-radius: 12px;
  margin-bottom: 20px;
  flex-wrap: wrap;
  gap: 12px;
}

.invite-mass-header .checkbox-all {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  font-size: 14px;
  color: rgba(255,255,255,0.8);
}

.invite-mass-header .checkbox-all input[type="checkbox"] {
  width: 20px;
  height: 20px;
  accent-color: var(--couleur-pri, #00d4ff);
  cursor: pointer;
}

.invite-mass-header #btn-invite-selected {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 20px;
  font-size: 14px;
  font-weight: 500;
  border: none;
  border-radius: 8px;
  background: var(--couleur-pri, #00d4ff);
  color: #1a1f3a;
  cursor: pointer;
  transition: all 0.2s;
}

.invite-mass-header #btn-invite-selected:hover:not(:disabled) {
  filter: brightness(1.1);
  transform: translateY(-1px);
}

.invite-mass-header #btn-invite-selected:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
}

.invite-mass-header #btn-invite-selected .spinning {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Grille des membres à inviter */
.membres-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 16px;
}

/* Card membre individuelle */
.membre-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px;
  transition: all 0.2s;
}

.membre-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 32px rgba(0,0,0,0.3);
}

/* Checkbox personnalisée */
.membre-checkbox {
  position: relative;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.membre-checkbox input[type="checkbox"] {
  width: 22px;
  height: 22px;
  accent-color: var(--couleur-pri, #00d4ff);
  cursor: pointer;
}

.membre-checkbox input[type="checkbox"]:disabled {
  opacity: 0.3;
  cursor: not-allowed;
}

/* Avatar membre */
.membre-avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.membre-avatar-placeholder {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(255,255,255,0.1);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.membre-avatar-placeholder .material-symbols-outlined {
  font-size: 24px;
  color: rgba(255,255,255,0.4);
}

/* Infos membre */
.membre-info {
  flex: 1;
  min-width: 0;
}

.membre-info h4 {
  margin: 0 0 4px 0;
  font-size: 15px;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.membre-info .email {
  margin: 0;
  font-size: 13px;
  color: rgba(255,255,255,0.5);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.membre-info .no-email {
  color: var(--color-warning, #f59e0b);
  font-style: italic;
}

/* MODIF-12012026-INVITATION_LIBRE: Boutons invitation */
.invite-buttons {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.invite-buttons .btn-secondary {
  background: rgba(255,255,255,0.1);
  border: 1px solid rgba(255,255,255,0.2);
}

.invite-buttons .btn-secondary:hover {
  background: rgba(255,255,255,0.2);
  border-color: var(--couleur-pri, #00d4ff);
}

/* Modale invitation libre */
.modal-invitation-libre {
  max-width: 450px;
  width: 90%;
  background: #1a1f3a !important;
  color: #fff !important;
}

.modal-invitation-libre .modal-description {
  color: rgba(255,255,255,0.7);
  font-size: 14px;
  margin-bottom: 20px;
}

.modal-invitation-libre .form-group {
  margin-bottom: 16px;
}

.modal-invitation-libre .form-group label {
  display: block;
  font-size: 13px;
  font-weight: 500;
  color: rgba(255,255,255,0.8);
  margin-bottom: 6px;
}

.modal-invitation-libre .form-group label .required {
  color: #f87171;
}

.modal-invitation-libre .form-group input,
.modal-invitation-libre .form-group select {
  width: 100%;
  padding: 10px 14px;
  font-size: 14px;
  background: rgba(0,0,0,0.3);
  border: 1px solid rgba(255,255,255,0.2);
  border-radius: 8px;
  color: #fff;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.modal-invitation-libre .form-group input:focus,
.modal-invitation-libre .form-group select:focus {
  outline: none;
  border-color: var(--couleur-pri, #00d4ff);
  box-shadow: 0 0 0 2px rgba(0, 212, 255, 0.2);
}

.modal-invitation-libre .form-group input::placeholder {
  color: rgba(255,255,255,0.4);
}

.modal-invitation-libre .form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.modal-invitation-libre .form-actions {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
  margin-top: 24px;
  padding-top: 16px;
  border-top: 1px solid rgba(255,255,255,0.1);
}

/* Responsive */
@media (max-width: 600px) {
  .invite-mass-header {
    flex-direction: column;
    align-items: stretch;
  }

  .invite-mass-header .checkbox-all {
    justify-content: center;
  }

  .invite-buttons {
    flex-direction: column;
    width: 100%;
  }

  .invite-buttons button {
    justify-content: center;
    width: 100%;
  }

  .membres-grid {
    grid-template-columns: 1fr;
  }

  .modal-invitation-libre .form-row {
    grid-template-columns: 1fr;
  }
}

/* ===========================================
   MODIF-13012026-USER_BLOCK_VISIBILITY: Animation attention bloc user
   Option B : Pulse 4 secondes première connexion
   =========================================== */

@keyframes userBlockPulse {
  0%, 100% {
    box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.5);
    transform: scale(1);
  }
  50% {
    box-shadow: 0 0 20px 8px rgba(59, 130, 246, 0.4);
    transform: scale(1.02);
  }
}

.user-trigger.attention {
  animation: userBlockPulse 1s ease-in-out 4;
  border-radius: 8px;
}

/* Option A : Card visible par défaut - déjà géré par .open */

/* ===========================================
   MODIF-01032026-CARTE_COMBO: Carte membre — Combo tueur
   Flip recto/verso + Holo arc-en-ciel + Tilt 3D + Mode scan
   =========================================== */

/* --- Scene & Flip --- */
.carte-page { max-width: 480px; margin: 0 auto; padding: 16px; }

.carte-scene {
  width: 100%;
  max-width: 380px;
  margin: 0 auto;
  perspective: 1200px;
  cursor: pointer;
}

.carte-flip {
  position: relative;
  width: 100%;
  transform-style: preserve-3d;
  transition: transform 0.7s cubic-bezier(0.4, 0.0, 0.2, 1);
}

.carte-flip.flipped {
  transform: rotateY(180deg);
}

.carte-face {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  border-radius: var(--carte-radius, 20px);
  overflow: hidden;
}

.carte-front {
  position: relative;
  z-index: 2;
}

.carte-back {
  transform: rotateY(180deg);
  background: linear-gradient(160deg, rgba(255,255,255,0.97), rgba(245,245,255,0.99));
  border: 1px solid rgba(0,0,0,0.08);
  box-shadow: 0 15px 40px rgba(0,0,0,0.12);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 30px;
  color: #1a1a3e;
}

.carte-back-club {
  font-size: 12px;
  font-weight: 600;
  color: #666;
  letter-spacing: 2px;
  text-transform: uppercase;
  margin-bottom: 6px;
}

.carte-back-name {
  font-size: 20px;
  font-weight: 700;
  color: #1a1a3e;
  margin-bottom: 24px;
}

.carte-back .carte-qr-img {
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0,0,0,0.08);
  margin-bottom: 16px;
}

.carte-back-hint {
  font-size: 13px;
  color: #888;
  text-align: center;
  line-height: 1.5;
}

.carte-back-hint strong {
  color: var(--carte-accent, var(--color-primary));
}

.carte-back-licence {
  margin-top: 16px;
  font-size: 12px;
  color: #aaa;
  letter-spacing: 1px;
}

/* --- Holographic overlay --- */
.carte-holo-overlay {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 100%;
  border-radius: var(--carte-radius, 20px);
  z-index: 10;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s ease;
  mix-blend-mode: color-dodge;
  background:
    repeating-linear-gradient(
      0deg,
      rgba(255, 119, 115, 0.12) 0%,
      rgba(255, 237, 95, 0.12) 15%,
      rgba(168, 255, 120, 0.12) 30%,
      rgba(120, 220, 255, 0.12) 45%,
      rgba(171, 120, 255, 0.12) 60%,
      rgba(255, 119, 230, 0.12) 75%,
      rgba(255, 119, 115, 0.12) 100%
    );
  background-size: 200% 200%;
  filter: brightness(1.2) contrast(1.1);
}

.carte-holo-overlay.holo-subtle {
  filter: brightness(1.05) contrast(1.05);
}
.carte-holo-overlay.holo-subtle,
.carte-holo-overlay.holo-subtle {
  opacity: 0;
}

.carte-flip:not(.flipped) .carte-holo-overlay.holo-active {
  opacity: 1;
}

.carte-holo-overlay.holo-subtle.holo-active {
  opacity: 0.5;
}

/* --- Shine spot --- */
.carte-shine-overlay {
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 100%;
  border-radius: var(--carte-radius, 20px);
  z-index: 11;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s ease;
  background: radial-gradient(
    circle at var(--shine-x, 50%) var(--shine-y, 50%),
    rgba(255,255,255,0.25) 0%,
    rgba(255,255,255,0.05) 40%,
    transparent 70%
  );
}

.carte-flip:not(.flipped) .carte-shine-overlay.shine-active {
  opacity: 1;
}

/* --- Card front inner --- */
.carte-front-inner {
  position: relative;
  z-index: 2;
  padding: 24px;
}

.carte-front-glass {
  border: 1px solid rgba(255,255,255,0.12);
  box-shadow:
    0 15px 40px rgba(0,0,0,0.15),
    inset 0 1px 0 rgba(255,255,255,0.08);
}

/* --- Header & Identity --- */
.carte-header-section {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
}

.carte-header-section.layout-horizontal {
  flex-direction: row;
  gap: 16px;
}

.carte-club-tag {
  display: flex;
  align-items: center;
  gap: 6px;
  opacity: 0.7;
  font-size: 11px;
  letter-spacing: 2px;
  text-transform: uppercase;
  font-weight: 600;
}

.carte-photo-ring {
  padding: 3px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--carte-accent, var(--color-primary)), var(--carte-accent, var(--color-primary)));
}

.carte-photo {
  display: block;
  object-fit: cover;
  border-radius: inherit;
}

.carte-photo-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: inherit;
}

.carte-identity {
  text-align: center;
}

.carte-identity.align-left {
  text-align: left;
  flex: 1;
}

.carte-name {
  margin: 0;
  font-weight: 700;
}

.carte-club {
  font-size: 0.85em;
  font-weight: 500;
  display: block;
  margin-top: 2px;
}

/* --- Info rows --- */
.carte-info-section {
  margin-top: 16px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.carte-info-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 0;
}

.carte-info-icon {
  font-size: 18px;
  color: var(--carte-text-color, var(--carte-accent, var(--color-primary)));
  opacity: 0.7;
  flex-shrink: 0;
}

.carte-info-content { flex: 1; }

.carte-info-label {
  display: block;
  font-size: 0.72em;
  color: var(--carte-text-color, rgba(255,255,255,0.45));
  text-transform: uppercase;
  letter-spacing: 0.5px;
  opacity: 0.6;
}

.carte-info-value {
  display: block;
  font-size: 0.92em;
  font-weight: 500;
}

/* --- Abo status --- */
.carte-abo-section { margin-top: 16px; }

.carte-abo-statut {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-radius: 14px;
}

.carte-abo-statut-label { display: block; font-size: 1.05em; font-weight: 700; }
.carte-abo-type { display: block; font-size: 0.82em; opacity: 0.7; margin-top: 2px; }

/* --- Controls bar --- */
.carte-controls {
  display: flex;
  gap: 10px;
  justify-content: center;
  margin-top: 16px;
}

.carte-btn {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 10px 20px;
  border: 1px solid rgba(0,0,0,0.1);
  border-radius: 12px;
  background: #fff;
  color: var(--carte-accent, #333);
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.25s ease;
}

.carte-btn:hover {
  background: var(--color-background, #f0f0f0);
}

.carte-btn .material-symbols-outlined {
  font-size: 18px;
}

.carte-btn-scan {
  background: var(--carte-accent, var(--color-primary));
  color: #fff;
  border-color: transparent;
  opacity: 0.7;
}

.carte-btn-scan.active {
  opacity: 1;
  box-shadow: 0 4px 16px rgba(0,0,0,0.15);
}

.carte-hint {
  text-align: center;
  font-size: 12px;
  color: var(--color-text-light, #999);
  margin-top: 10px;
  transition: opacity 0.3s;
}

/* --- Scan mode --- */
.carte-scene.scan-mode .carte-flip {
  transform: rotateY(180deg) !important;
  transition: transform 0.5s ease;
}

.carte-scene.scan-mode {
  cursor: default;
}

/* --- External link --- */
.carte-external-link {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-top: 16px;
  padding: 12px;
  text-decoration: none;
  color: var(--carte-link-color, var(--carte-accent, var(--color-primary)));
  font-weight: 600;
  border-radius: 10px;
  transition: all 0.2s;
}

.carte-external-link:hover {
  background: rgba(0,0,0,0.04);
}

/* --- Dark mode support for front face --- */
.carte-front-dark {
  background: linear-gradient(160deg,
    rgba(30, 30, 80, 0.95),
    rgba(20, 20, 60, 0.98),
    rgba(15, 15, 45, 0.95));
  color: #fff;
}

.carte-front-dark .carte-info-label {
  color: rgba(255,255,255,0.4);
}

.carte-front-dark .carte-info-value {
  color: rgba(255,255,255,0.9);
}

/* Light mode front face */
.carte-front-light {
  background: var(--color-surface, #fff);
  color: var(--color-text, #1f2937);
}

.carte-front-light .carte-info-label {
  color: var(--color-text-light, #9ca3af);
}

.carte-front-light .carte-info-value {
  color: var(--color-text, #1f2937);
}

.carte-front-light .carte-club-tag {
  color: var(--color-text-light, #666);
}

/* --- Responsive --- */
@media (max-width: 380px) {
  .carte-scene { max-width: 300px; }
  .carte-name { font-size: 1.1em !important; }
  .carte-front-inner { padding: 18px; }
  .carte-back { padding: 20px; }
}
