/* v1.80: Design tokens */
:root {
  --bg-primary: #1a1a2e;
  --bg-secondary: #16213e;
  --bg-card: #1e2a45;
  --text-primary: #e0e0e0;
  --text-secondary: #aaa;
  --text-muted: #888;
  --accent-green: #4ecca3;
  --accent-blue: #5dade2;
  --accent-red: #e94560;
  --accent-yellow: #f0c040;
  --border-subtle: #333;
  --border-accent: #3a3f6e;
  --sp-xs: 4px; --sp-sm: 8px; --sp-md: 12px; --sp-lg: 16px; --sp-xl: 24px;
  --br-sm: 4px; --br-md: 6px; --br-lg: 8px; --br-xl: 12px;
  --shadow-sm: 0 2px 4px rgba(0,0,0,0.15);
  --shadow-md: 0 4px 8px rgba(0,0,0,0.2);
  --shadow-lg: 0 8px 16px rgba(0,0,0,0.3);
  --cell-h: 55px;
  --font-xs: 11px;
  --font-sm: 12px;
  --font-md: 13px;
  --font-lg: 14px;
  --font-xl: 16px;
}
* { margin:0; padding:0; box-sizing:border-box; }
body { font-family: 'Segoe UI', sans-serif; background: var(--bg-primary); color: var(--text-primary); height: 100vh; overflow: hidden; }
@media (max-width: 768px) { body { height: auto; overflow: auto; } }

/* v1.80: Accessibilité — focus visible */
:focus-visible { outline: 2px solid #90caf9; outline-offset: 2px; }
input:focus, select:focus, textarea:focus, button:focus { outline: none; }
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible { outline: 2px solid #90caf9; outline-offset: 2px; }

/* v1.80: Accessibilité — prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* HEADER */
.header { background: linear-gradient(135deg, #16213e 0%, #1a2744 50%, #16213e 100%); padding: 8px 20px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(90,141,239,0.3); box-shadow: 0 2px 12px rgba(0,0,0,0.3); position: relative; overflow: visible; z-index: 100; }
.header h1 { font-size: 17px; color: #e8e8e8; letter-spacing: 0.5px; font-weight: 600; }
.header h1 span.header-accent { color: #e94560; font-weight: 700; }
.header-right { display: flex; align-items: center; gap: 12px; }
#globalSearchWrap { display:inline-flex; align-items:center; gap:4px; background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.12); border-radius:8px; padding:2px 8px; min-width:100px; max-width:220px; flex:1; transition:border-color 0.2s; color:#666; position:relative; }
#globalSearchWrap:focus-within { border-color:rgba(91,141,239,0.5); background:rgba(255,255,255,0.09); }
#globalSearchInput { background:none; border:none; color:#e0e0e0; font-size:12px; outline:none; flex:1; min-width:60px; padding:5px 0; font-family:inherit; }
#globalSearchInput::placeholder { color:#555; }
@media (max-width:768px) { #globalSearchWrap { max-width:140px; } }
.week-nav { display: flex; align-items: center; gap: 2px; }
.week-nav button { background: rgba(90,141,239,0.12); color: #e8e8e8; border: 1px solid rgba(90,141,239,0.25); padding: 5px 10px; border-radius: 6px; cursor: pointer; font-size: 14px; transition: background 0.15s, border-color 0.15s; }
.week-nav button:hover { background: rgba(90,141,239,0.3); border-color: rgba(90,141,239,0.5); color: #fff; }
.week-label { font-size: 13px; color: #8899aa; min-width: 200px; text-align: center; font-weight: 500; }
.status-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.status-dot.connected { background: #4ecca3; box-shadow: 0 0 6px rgba(78,204,163,0.5); transition: box-shadow 0.2s; }
.status-dot.connected:hover { box-shadow: 0 0 10px rgba(78,204,163,0.8); }
.status-dot.disconnected { background: #e94560; box-shadow: 0 0 6px rgba(233,69,96,0.5); }
@keyframes dotPulse { 0%,100% { transform:scale(1); } 50% { transform:scale(1.8); box-shadow: 0 0 12px rgba(78,204,163,0.9); } }
.btn-add { background: #4ecca3; color: #1a1a2e; border: none; padding: 6px 14px; border-radius: 6px; cursor: pointer; font-weight: bold; font-size: 13px; }
.btn-add:hover { background: #3dbb91; }
/* Header icon buttons */
.btn-voice { background:none; border:1px solid rgba(255,255,255,0.15); border-radius:50%; width:32px; height:32px; cursor:pointer; font-size:16px; display:flex; align-items:center; justify-content:center; transition:all 0.2s; position:relative; }
.btn-voice:hover { background:rgba(78,204,163,0.15); border-color:rgba(78,204,163,0.4); }
/* Marquee Easter egg */
#headerMarquee { flex: 1; overflow: hidden; pointer-events: none; margin: 0 12px; height: 20px; position: relative; }
#headerMarquee span { position: absolute; white-space: nowrap; font-size: 15px; color: rgba(233,69,96,0.7); font-style: italic; letter-spacing: 0.5px; transform: translateX(100%); }

/* UTILITIES - GPU Optimization and Reusable Effects */
.gpu-optimized {
  transform-origin: center;
  backface-visibility: hidden;
  contain: layout;
}

.hover-lift {
  transition: all 0.12s ease;
}
.hover-lift:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.25);
}

.hover-scale-sm:hover { transform: scale(1.05); }
.hover-scale-md:hover { transform: scale(1.08); }
.hover-scale-lg:hover { transform: scale(1.15); }

/* LAYOUT */
.container { display: flex; height: calc(100vh - 45px - 36px); }

/* SIDEBAR */
.sidebar { width: 260px; background: #16213e; border-right: 1px solid #333; overflow-y: auto; flex-shrink: 0; }
.sidebar-section { border-bottom: 1px solid #333; }
.sidebar-header { padding: 10px 12px; font-size: 13px; font-weight: bold; cursor: pointer; display: flex; justify-content: space-between; align-items: center; user-select: none; }
.sidebar-header .count { background: rgba(255,255,255,0.15); padding: 1px 8px; border-radius: 10px; font-size: 11px; }
.sidebar-body { min-height: 40px; padding: 4px 8px; }
.sidebar-body.collapsed { display: none; }

.cat-encours .sidebar-header { color: #2196f3; border-left: 3px solid #2196f3; }
.cat-cour .sidebar-header { color: #4ecca3; border-left: 3px solid #4ecca3; }
.cat-nonplan .sidebar-header { color: #aaa; border-left: 3px solid #888; }
.cat-retrait .sidebar-header { color: #e94560; border-left: 3px solid #e94560; }
.cat-ferme .sidebar-header { color: #666; border-left: 3px solid #555; }

/* CASE CARD */
.case-card {
  background: #1e2a45;
  border-radius: 5px;
  padding: var(--card-padding, 6px 8px);
  margin-bottom: 4px;
  cursor: grab;
  border-left: 3px solid #888;
  font-size: var(--card-font, 11px);
  transition: all 0.12s ease;
  position: relative;
  /* Fix jitter : stabilité des transformations */
  transform-origin: center;
  /* Évite les recalculs/paint inutiles pour les longues listes de cartes */
  contain: layout paint style;
  content-visibility: auto;
  contain-intrinsic-size: 54px;
  /* Fix blur : optimize GPU composition */
  backface-visibility: hidden;
}
.case-card:hover {
  /* Fix blur : transformation sans scale fractionnaire + translateY entier */
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.25);
  z-index: 1;
  /* Légère surbrillance au lieu d'un agrandissement trop visible */
}
/* v2.12: Multi-day ghost cards */
.case-card.ghost-card {
  border-left-style: dashed;
  cursor: pointer;
  opacity: 0.7;
}
.case-card.ghost-card:hover {
  /* Fix jitter : pas de transform, juste légère opacité */
  transform: none;
  opacity: 0.85;
}
/* v2.12: Badge jour (1/3, 2/3, 3/3) */
.day-badge { position: absolute; bottom: 2px; right: 3px; font-size: 8px; font-weight: bold; padding: 1px 5px; border-radius: 3px; color: #fff; z-index: 2; background: rgba(0,0,0,0.7); }
.case-card:has(.day-badge) .assign-badge { display: none; }
/* v2.12: Barre dégradée de continuité en bas de la carte */
.multiday-bar { height: 3px; border-radius: 2px; margin-top: 4px; }
/* v2.12: Handle de stretch (desktop only) */
.stretch-handle { position: absolute; right: -2px; top: 8px; bottom: 8px; width: 5px; border-radius: 0 3px 3px 0; cursor: ew-resize; opacity: 0.4; transition: opacity 0.15s; z-index: 2; }
.stretch-handle:hover { opacity: 0.8; }
@media (pointer: coarse) { .stretch-handle { display: none; } }
/* v2.12: Highlight pendant stretch */
.cal-cell.stretch-highlight { background: #2a3a3e; outline: 2px dashed #e67e22; }
.case-card:active { cursor: grabbing; }
.case-card .unit { font-weight: bold; font-size: 12px; }
.case-card .customer { color: #e8e8e8; font-size: 12px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.case-card .complaint { color: #888; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
.case-card.card-note {
  cursor: default;
  content-visibility: visible;
  contain-intrinsic-size: auto;
}
.case-card.card-note .complaint {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  overflow-wrap: anywhere;
  line-height: 1.35;
  color: #d6d9e6;
}
.case-card .card-actions { position: absolute; top: 3px; right: 5px; display: none; }
.case-card:hover .card-actions { display: flex; gap: 3px; }
.card-actions button { background: none; border: none; color: #888; cursor: pointer; font-size: 12px; padding: 2px; }
.card-actions button:hover { color: #e94560; }

.case-card.cat-cour { border-left-color: #4ecca3; }
.case-card.cat-nonplan { border-left-color: #888; }
.case-card.cat-retrait { border-left-color: #e94560; }
.case-card.cat-ferme { border-left-color: #555; }
.case-card.cal-card { border-left-color: #5dade2; }
.case-card.cal-card.card-ferme { background: rgba(180,30,30,0.22) !important; border-left-color: #c0392b !important; }
.case-card.cal-card.card-ferme .unit { color: #ff7675; }
.case-card.card-pret { background: rgba(46,125,50,0.18) !important; border-left-color: #4caf50 !important; }
.flag-badge-pret { font-size:9px; font-weight:700; color:#fff; background:#4caf50; padding:0 4px; border-radius:3px; line-height:14px; }
.case-card.card-auto-ready { background: rgba(34,197,94,0.22) !important; border-left: 4px solid #22c55e !important; box-shadow: 0 0 6px rgba(34,197,94,0.45); }
.flag-badge-auto-ready { font-size:9px; font-weight:700; color:#fff; background:#22c55e; padding:0 4px; border-radius:3px; line-height:14px; animation: autoReadyPulse 1.8s ease-in-out infinite; }
@keyframes autoReadyPulse { 0%,100%{ opacity:1; } 50%{ opacity:0.55; } }
.flag-badge-hpp { font-size:9px; font-weight:700; color:#1a1a2e; background:#ff9800; padding:0 4px; border-radius:3px; line-height:14px; }
.assign-badge { position:absolute; bottom:2px; right:3px; font-size:9px; font-weight:700; padding:1px 5px; border-radius:3px; color:#fff; line-height:13px; letter-spacing:0.5px; opacity:0.92; pointer-events:none; white-space:nowrap; }
.flag-badge-sms { font-size:11px; background:#2196f3; padding:0 3px; border-radius:3px; line-height:14px; animation: smsPulse 2s infinite; }
@keyframes smsPulse { 0%,100%{ opacity:1; } 50%{ opacity:0.4; } }
.sms-mech-quick { padding:4px 8px; background:#2a3a2a; border:1px solid #4ecca3; border-radius:4px; color:#4ecca3; font-size:11px; cursor:pointer; transition:background 0.15s; }
.sms-mech-quick:hover { background:#3a5a3a; }
/* Travail en cours — vert */
.case-card.card-active { border-left-color: #4ecca3 !important; background: rgba(78,204,163,0.13) !important; }
/* Dans la cour — jaune */
.case-card.card-dans-la-cour { border-left: 4px solid #00e676 !important; }
/* Pièces en commande — orange (override sauf ferme/pret) */
.case-card.card-pieces { border-left: 4px solid #ff9800 !important; background: rgba(255,152,0,0.16) !important; }
/* v3.119: Non terminé — jaune */
.case-card.card-non-termine { border-left: 4px solid #fdd835 !important; background: rgba(253,216,53,0.20) !important; }
    .cour-dot { display:inline-block; width:8px; height:8px; border-radius:50%; background:#00e676; margin-right:4px; vertical-align:middle; animation: courPulse 1.5s ease-in-out infinite; }
    @keyframes courPulse { 0%,100%{ opacity:1; box-shadow:0 0 4px #00e676; } 50%{ opacity:0.4; box-shadow:0 0 8px #00e676; } }
    .urgent-dot { display:inline-block; width:8px; height:8px; border-radius:50%; background:#e94560; margin-right:4px; vertical-align:middle; animation: urgentPulse 0.8s ease-in-out infinite; }
    @keyframes urgentPulse { 0%,100%{ opacity:1; box-shadow:0 0 4px #e94560; } 50%{ opacity:0.3; box-shadow:0 0 10px #e94560; } }
/* Badge mécanicien coin haut-droite */
.tech-badge-br { position:absolute; top:3px; right:28px; background:#2196f3; color:#fff; font-size:9px; font-weight:bold; padding:1px 5px; border-radius:3px; pointer-events:none; line-height:1.4; }

/* CALENDAR */
.calendar-wrapper { flex: 1; overflow-x: auto; overflow-y: auto; }
.calendar { display: grid; grid-template-columns: 50px repeat(5, minmax(170px, 1fr)); min-width: 100%; }
.cal-header { background: #16213e; padding: 8px; text-align: center; font-weight: bold; font-size: 13px; border-bottom: 2px solid rgba(90,141,239,0.5); position: sticky; top: 0; z-index: 10; }
.cal-header:first-child { position: sticky; left: 0; z-index: 20; }
.cal-hour-label { background: #16213e; padding: 4px; text-align: center; font-size: 11px; color: #888; border-right: 1px solid #333; border-bottom: 1px solid #222; display: flex; align-items: center; justify-content: center; position: sticky; left: 0; z-index: 5; min-width: 50px; }
.cal-header.today-col { background: #1a3558 !important; color: #58a6ff; border-bottom: 2px solid #58a6ff; }
.cal-cell.today-col { background: #161e30 !important; }
.cal-cell {
  border-right: 1px solid #282840;
  border-bottom: 1px solid #222;
  min-height: var(--cell-h);
  padding: 3px;
  background: #1a1a2e;
  transition: background 0.15s;
  position: relative;
  /* Fix jitter : évite les recalculs lors des transformations des cartes */
  contain: layout style;
  /* Assure une position stable pour les transformations des enfants */
  overflow: visible;
  /* Fix superposition : layout flexbox pour multiples cartes */
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.cal-cell:hover { background: #1e2a45; }
.cal-cell .case-card {
  /* Suppression margin-bottom : remplacé par gap du flexbox */
  margin-bottom: 0;
  /* Assure que les transformations ne perturbent pas le flow */
  isolation: isolate;
  /* Fix superposition : force un flex-shrink pour éviter débordements */
  flex-shrink: 0;
}
/* Fix superposition ghost cards : force les cartes multi-jours à respecter le flexbox */
.cal-cell .case-card.ghost-card {
  position: relative !important;
  z-index: auto !important;
}
/* Fix superposition hover : évite que les cartes en hover recouvrent complètement les autres */
.cal-cell:hover .case-card:not(:hover) {
  opacity: 0.85;
}
.cal-cell .case-card:hover {
  z-index: 10;
  position: relative;
}
/* FIX RADICAL superposition : force la suppression des positions problématiques */
.cal-cell .case-card {
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  position: relative !important;
}
.day-note-label { background:#16213e; padding:4px; text-align:center; font-size:11px; color:#888; border-right:1px solid #333; border-bottom:2px solid #333; display:flex; align-items:center; justify-content:center; position:sticky; left:0; z-index:5; min-width:50px; }
.day-note-cell { background:#12121f; border-right:1px solid #282840; border-bottom:2px solid #333; padding:4px; }
.day-note-cell textarea { width:100%; height:70px; background:#1a1a2e; color:#ccc; border:1px solid #333; border-radius:4px; padding:4px 6px; font-size:12px; resize:vertical; font-family:inherit; line-height:1.4; box-sizing:border-box; }
.day-note-cell textarea:focus { outline:none; border-color:#5dade2; background:#1e2a45; }
.day-note-cell textarea::placeholder { color:#444; font-style:italic; }
.cal-cell.drag-over { background: #2a3a5e; outline: 2px dashed #5dade2; }
/* v3.552: bac « Dans la journée » (RDV sans heure) */
.cal-daybin-label { background:#1d1a10; padding:4px; text-align:center; font-size:13px; color:#c9a23a; border-right:1px solid #333; border-bottom:2px solid #3a3320; display:flex; align-items:center; justify-content:center; position:sticky; left:0; z-index:5; min-width:50px; }
.cal-daybin { background:#181610; border-right:1px solid #282840; border-bottom:2px solid #3a3320; padding:4px; min-height:30px; display:flex; flex-direction:row; flex-wrap:wrap; gap:3px; align-content:flex-start; }
.cal-daybin .daybin-count { flex-basis:100%; font-size:9px; text-transform:uppercase; letter-spacing:0.5px; color:#8a7a3a; font-weight:600; margin-bottom:2px; }
.cal-daybin.daybin-empty { min-height:24px; opacity:0.55; }
.cal-daybin .case-card { flex:1 1 100%; max-width:100%; min-width:0; }

/* Échelle z-index — toujours utiliser ces variables, jamais de magic number. */
:root {
  --z-base: 1; --z-sticky: 5;
  --z-modal: 1000; --z-modal-tall: 1100; --z-changelog: 2000;
  --z-vehmodal: 8000;
  --z-taskbar: 8400;
  --z-floating: 8500;        /* floating-win, chatHub, aiPanel, activityPanel, overlays secondaires */
  --z-floating-top: 8600;    /* sms-float (au-dessus du chatHub) */
  --z-revision: 9000;
  --z-revfab: 9100;
  --z-toast: 9500;
  --z-dropdown-global: 9600; /* globalSearchDropdown */
  --z-bcdetail: 9700;        /* bcd-win cascade (au-dessus du search dropdown) */
  --z-popup-top: 9999;       /* ctx menus, scan popup, trash modal, user dropdown, drag ghost */
  --z-prefs: 10000;
  --z-ctxmenu-dtc: 10001;    /* menu contextuel DTC au-dessus du scan popup */
  --z-login: 99999;          /* écran de login et touch drag ghost plein écran */
}

/* v2.47: bouton fermeture × réutilisable — position absolue top-right. */
.modal-x {
  position: absolute; top: 10px; right: 12px;
  background: none; border: none; color: #8892b0;
  font-size: 22px; line-height: 1; cursor: pointer;
  padding: 2px 8px; border-radius: 4px; transition: color 0.15s, background 0.15s;
  z-index: 2;
}
.modal-x:hover { color: #e94560; background: rgba(233,69,96,0.1); }

/* MODAL */
.modal-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.7); z-index: var(--z-modal); justify-content: center; align-items: center; }
.modal-overlay.active { display: flex; }
.modal { background: #1c1f38; border-radius: 10px; padding: 24px; width: 420px; max-width: 90vw; border: 1px solid #3a3f6e; }
.modal h2 { color: var(--accent-blue); margin: 0 0 16px 0; font-size: 16px; }
.file-upload-modal { width: 520px; position: relative; }
.file-upload-dropzone {
  border: 1px dashed #4ecca3;
  border-radius: 8px;
  min-height: 154px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  background: rgba(78,204,163,0.06);
  color: #e2e8f0;
  cursor: pointer;
  transition: border-color .15s ease, background .15s ease, transform .15s ease;
  text-align: center;
  padding: 18px;
  outline: none;
}
.file-upload-dropzone:hover,
.file-upload-dropzone:focus,
.file-upload-dropzone.is-dragover {
  background: rgba(78,204,163,0.12);
  border-color: #7ddfc4;
  transform: translateY(-1px);
}
.file-upload-icon { font-size: 30px; line-height: 1; }
.file-upload-title { font-size: 14px; font-weight: 700; color: #f8fafc; }
.file-upload-path { font-size: 12px; color: #8aa4b8; }
.file-upload-list {
  margin-top: 12px;
  max-height: 190px;
  overflow-y: auto;
  border: 1px solid #2a2f5a;
  border-radius: 8px;
  background: #171a2d;
}
.file-upload-empty,
.file-upload-row {
  min-height: 40px;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  color: #cbd5e1;
  font-size: 13px;
}
.file-upload-empty { color: #778195; }
.file-upload-row + .file-upload-row { border-top: 1px solid #24294a; }
.file-upload-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.file-upload-size { flex: 0 0 auto; color: #8aa4b8; font-size: 12px; }
.file-upload-remove {
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  border: none;
  border-radius: 6px;
  background: transparent;
  color: #9aa7b5;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
}
.file-upload-remove:hover { color: #e94560; background: rgba(233,69,96,0.1); }
.file-upload-status {
  min-height: 18px;
  margin-top: 10px;
  color: #9aa7b5;
  font-size: 12px;
}
.file-upload-status.error { color: #ff8a9a; }
.file-upload-status.success { color: #4ecca3; }
.hpp-overdue-result {
  margin-top: 10px;
  font-size: 12px;
  color: #cbd5e1;
}
.hpp-overdue-summary,
.hpp-overdue-counts,
.hpp-overdue-error {
  padding: 8px 10px;
  border: 1px solid #2a2f5a;
  background: #171a2d;
}
.hpp-overdue-summary { border-radius: 8px 8px 0 0; font-weight: 700; }
.hpp-overdue-counts { border-top: 0; color: #9fb0c3; line-height: 1.45; }
.hpp-overdue-error { border-top: 0; color: #ff8a9a; }
.hpp-overdue-download {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  margin-top: 10px;
  padding: 0 12px;
  border: 0;
  border-radius: 6px;
  background: #4ecca3;
  color: #112;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
}
.hpp-overdue-download:hover { background: #7ddfc4; }
/* v1.80: Modal responsive padding */
@media (max-width: 600px) { .modal { padding: 16px; } }
/* v1.55: Floating window system — modals become independent draggable windows */
.floating-win { position: fixed !important; z-index: var(--z-floating); box-shadow: 0 8px 32px rgba(0,0,0,0.6); max-height: 92vh !important; overflow-y: auto; min-width: 260px; min-height: 150px; border-radius: 10px; border: 1px solid #3a3f6e; padding-top: 0 !important; height: auto !important; resize: both; }
/* v2.77: modal RDV garde hauteur fixe même en floating-win → buttons toujours visibles */
/* v3.36: laisse 90px vertical (40 top + 50 bottom = taskbar 36px + gap). Sur Cassy (~768px) */
/* le bas de la modal débordait sur le taskbar → contenu bas invisible. */
#createApptOverlay .modal.floating-win { height: calc(100vh - 90px) !important; max-height: calc(100vh - 90px) !important; }
/* v2.88: Refonte header modal RDV — cockpit industriel (IBM Plex + accents ciblés) */
.appt-header-bar {
  position:relative; display:flex; align-items:center; gap:18px;
  padding:14px 4px 16px; flex-shrink:0;
  background:
    radial-gradient(ellipse 700px 120% at 50% 0%, rgba(79,195,247,0.05), transparent 65%),
    linear-gradient(180deg, rgba(30,40,70,0.18) 0%, transparent 100%);
}
.appt-header-bar::after {
  content:''; position:absolute; inset:auto 0 0 0; height:1px;
  background:linear-gradient(90deg, transparent 0%, rgba(79,195,247,0.28) 18%, rgba(78,204,163,0.4) 50%, rgba(245,166,35,0.3) 82%, transparent 100%);
}
/* Brand (titre seulement) */
.appt-brand { display:flex; align-items:center; margin-right:auto; }
.appt-title {
  font-family:'IBM Plex Sans Condensed', 'Segoe UI Condensed', sans-serif;
  font-weight:700; font-size:23px; line-height:1; letter-spacing:-0.4px; color:#e8ecff; margin:0;
}
/* Date + Heure — à gauche, ancre temporelle */
.appt-when {
  display:flex; align-items:stretch; gap:0; flex-shrink:0;
  padding:6px 4px; background:rgba(15,20,40,0.55); border:1px solid rgba(120,140,200,0.16);
  border-radius:10px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.03), 0 2px 6px rgba(0,0,0,0.25);
  transition:border-color 0.18s, box-shadow 0.18s;
}
.appt-when:focus-within {
  border-color:rgba(79,195,247,0.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.04), 0 0 0 3px rgba(79,195,247,0.12);
}
.appt-when-block { display:flex; flex-direction:column; gap:2px; padding:4px 16px; cursor:pointer; user-select:none; }
.appt-when-block:hover .appt-when-label { color:#8a93b8; }
.appt-when-label {
  font-family:'IBM Plex Mono', ui-monospace, monospace; font-size:9px; font-weight:500;
  color:#5a6288; letter-spacing:1.6px; text-transform:uppercase; transition:color 0.15s;
}
.appt-when-input {
  font-family:'IBM Plex Mono', ui-monospace, monospace; font-size:14.5px; font-weight:600;
  background:none; border:none; color:#e8ecff; padding:0; outline:none; cursor:pointer;
  font-variant-numeric:tabular-nums; min-width:120px;
}
.appt-when-input::-webkit-calendar-picker-indicator { filter:invert(0.55); opacity:0.4; cursor:pointer; margin-left:4px; }
select.appt-when-input {
  appearance:none; -webkit-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%235a6288' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right center; padding-right:18px; min-width:85px;
}
.appt-when-sep { width:1px; background:linear-gradient(180deg, transparent, rgba(120,140,200,0.22), transparent); margin:4px 0; }
/* Actions — toutes uniformisées (même shape, même font, même taille) */
.appt-actions { display:flex; align-items:center; gap:8px; flex-shrink:0; }
.appt-actions > * { align-self:center; }
/* v2.91: Specificité bumpée via .appt-header-bar parent — .modal label { font-size:12px } vainquait
   .appt-pill (spécificité class+tag > class) et faisait rendre SMS/Clé en 12px au lieu de 13px,
   créant aussi le décalage vertical de 3 px par rapport aux boutons IA et CTA (13 px). */
.appt-header-bar .appt-btn-ai, .appt-header-bar .appt-pill, .appt-header-bar .appt-btn-cta {
  font-family:'IBM Plex Sans Condensed', 'Segoe UI Condensed', sans-serif;
  font-size:13px; font-weight:600; letter-spacing:0.3px; line-height:1;
  border-radius:18px; cursor:pointer; white-space:nowrap;
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  height:36px; padding:0 16px; margin:0;
  box-sizing:border-box; vertical-align:middle;
  appearance:none; -webkit-appearance:none;
  -webkit-font-smoothing:antialiased;
  transition:background 0.18s, border-color 0.18s, color 0.18s, box-shadow 0.18s, transform 0.12s, filter 0.15s;
}
/* Icône : box carrée fixe pour que tous les emojis (🔑, 🔔, ✨) aient la même emprise visuelle */
.appt-btn-ai-ico, .appt-pill-ico {
  display:inline-flex; align-items:center; justify-content:center;
  width:16px; height:16px; line-height:1; font-size:13px; flex-shrink:0;
}
.appt-btn-ai {
  background:rgba(185,124,255,0.1);
  border:1px solid rgba(185,124,255,0.32); color:#c9a5ff;
}
.appt-btn-ai:hover {
  background:rgba(185,124,255,0.18);
  border-color:rgba(185,124,255,0.55); color:#e5cfff;
  box-shadow:0 3px 14px rgba(185,124,255,0.22);
}
.appt-btn-ai .appt-btn-ai-ico { animation:apptSparkle 3s ease-in-out infinite; }
@keyframes apptSparkle { 0%,100%{opacity:0.85;} 50%{opacity:1;} }
.appt-pills { display:flex; gap:8px; }
.appt-pill {
  position:relative;
  background:rgba(255,255,255,0.025); border:1px solid rgba(120,140,200,0.16); color:#5a6288;
  user-select:none;
  /* v2.90: SMS et Clé = largeur identique — on force min-width pour que les 2 pilules de toggle
     soient strictement de même taille, peu importe la longueur du texte (qui peut varier selon
     les caractères accentués comme É). */
  min-width:170px;
}
.appt-pill input { position:absolute; opacity:0; pointer-events:none; width:0; height:0; }
.appt-pill:hover { background:rgba(255,255,255,0.05); color:#8a93b8; border-color:rgba(120,140,200,0.26); }
.appt-pill .appt-pill-ico { opacity:0.55; transition:opacity 0.15s; }
.appt-pill.is-on {
  background:rgba(79,195,247,0.11); border-color:rgba(79,195,247,0.52); color:#8fd7fa;
  box-shadow:inset 0 0 0 1px rgba(79,195,247,0.12);
}
.appt-pill.is-on .appt-pill-ico { opacity:1; }
.appt-pill.appt-pill-key.is-on {
  background:rgba(245,166,35,0.11); border-color:rgba(245,166,35,0.55); color:#ffc671;
  box-shadow:inset 0 0 0 1px rgba(245,166,35,0.12);
}
.appt-pill.appt-pill-confirm.is-on {
  background:rgba(78,204,163,0.11); border-color:rgba(78,204,163,0.55); color:#7eddb8;
  box-shadow:inset 0 0 0 1px rgba(78,204,163,0.12);
}
/* CTA primaire — même format que les autres, se distingue par gradient vert + poids 700 */
.appt-btn-cta {
  position:relative;
  background:linear-gradient(135deg, #4ecca3 0%, #3dba92 55%, #35a582 100%);
  border:1px solid rgba(78,204,163,0.55); color:#081020;
  font-weight:700;
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.28), 0 0 0 1px rgba(78,204,163,0.18), 0 4px 14px rgba(78,204,163,0.3);
}
.appt-btn-cta:hover {
  transform:translateY(-1px); filter:brightness(1.06);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.32), 0 0 0 1px rgba(78,204,163,0.3), 0 8px 22px rgba(78,204,163,0.48);
}
.appt-btn-cta:active { transform:translateY(0); filter:brightness(0.94); }
.appt-btn-cta:disabled { opacity:0.45; cursor:not-allowed; transform:none; filter:grayscale(0.4); box-shadow:none; }
.appt-btn-cta .appt-arrow { font-size:16px; line-height:1; transition:transform 0.18s; display:inline-block; }
.appt-btn-cta:hover .appt-arrow { transform:translateX(4px); }
/* Responsive — wrap sous 1160px */
@media (max-width: 1160px) {
  .appt-header-bar { flex-wrap:wrap; gap:12px; padding:12px 4px 14px; }
  .appt-actions { flex-wrap:wrap; }
}
/* v2.88: Fix clip du focus outline à gauche des inputs de col-gauche (overflow:hidden parent).
   On remplace l'outline global (qui dépasse et se fait couper) par un changement border-color +
   box-shadow inset, qui reste à l'intérieur de l'input et ne se fait jamais couper. */
#createApptOverlay input:focus, #createApptOverlay textarea:focus, #createApptOverlay select:focus {
  outline:none;
  border-color:#4fc3f7;
  box-shadow:inset 0 0 0 1px rgba(79,195,247,0.5);
}
#createApptOverlay .appt-when-input:focus {
  box-shadow:none;
}
/* ===== v3.547: Prise de RDV — mode mobile optimisé ===== */
.appt-chevron { display:none; margin-right:6px; font-size:11px; transition:transform 0.15s; }
@media (max-width: 768px) {
  /* Grille 3 colonnes -> empilement bloc (évite les rangées de hauteur fixe du grid) */
  #createApptOverlay .appt-grid {
    display: block !important;
    overflow-y: auto !important;
    padding-bottom: 76px !important; /* dégage la place sous le bouton Créer fixe */
  }
  #createApptOverlay .appt-col {
    border-right: none !important;
    padding-right: 0 !important;
    overflow: visible !important;
    min-height: 0 !important;
    margin-bottom: 14px; /* le gap grid ne s'applique plus en bloc */
  }
  /* Les sections ne doivent plus grandir (flex:1 desktop) — taille naturelle empilée */
  #createApptOverlay .appt-ops-section { flex: none !important; min-height: 0 !important; }
  #createApptOverlay .appt-section-body { min-height: 0 !important; }
  /* Champs tactiles + anti-zoom auto iOS (font-size >= 16px) */
  #createApptOverlay input,
  #createApptOverlay select,
  #createApptOverlay textarea {
    font-size: 16px !important;
    min-height: 44px !important;
  }
  #createApptOverlay textarea { min-height: 80px !important; }
  /* Listes : hauteur bornée au lieu de flex:1 dans un parent désormais auto */
  #createApptOverlay #apptSearchResults { flex: none !important; min-height: 120px !important; max-height: 40vh !important; }
  #createApptOverlay #apptOpsContainer { max-height: 50vh !important; }
  #createApptOverlay #apptVinHistory { max-height: 50vh !important; }
  /* Sections repliables (Opérations / Historique) */
  #createApptOverlay .appt-section-head { cursor: pointer; display: flex; align-items: center; min-height: 40px; }
  #createApptOverlay .appt-chevron { display: inline-block; }
  #createApptOverlay .appt-collapsed > .appt-section-body { display: none !important; }
  #createApptOverlay .appt-collapsed .appt-chevron { transform: rotate(-90deg); }
  /* Bouton IA : caché dans l'entête, présenté dans l'expander Opérations */
  #createApptOverlay .appt-header-bar .appt-btn-ai { display: none !important; }
  #createApptOverlay .appt-ops-ai-mobile { display: flex !important; }
  /* Entête : tout contraint à la largeur écran (sinon Date/Heure + pills débordent) */
  #createApptOverlay .appt-header-bar { gap: 10px !important; padding: 8px 4px 12px !important; }
  #createApptOverlay .appt-when { width: 100%; flex-wrap: nowrap; }
  #createApptOverlay .appt-when-block { flex: 1 1 0; padding: 4px 10px !important; }
  #createApptOverlay .appt-when-input { min-width: 0 !important; width: 100%; }
  #createApptOverlay .appt-actions { width: 100%; }
  /* Pills : pleine largeur, sans le min-width 170 du desktop */
  #createApptOverlay .appt-pills { flex-wrap: wrap; gap: 6px; width: 100%; }
  #createApptOverlay .appt-pill { min-width: 0 !important; flex: 1 1 auto; }
  /* Bouton Créer : fixé en bas, pleine largeur */
  #createApptOverlay .appt-btn-cta {
    position: fixed !important; left: 8px !important; right: 8px !important; bottom: 8px !important;
    width: auto !important; height: 50px !important; font-size: 16px !important; z-index: 60 !important;
  }
}

/* v2.95: Popup au survol d'une tuile RDV */
#bcHoverPopup {
  position:fixed; width:380px; max-height:480px; overflow-y:auto;
  background:linear-gradient(180deg, #1c1f38 0%, #151730 100%);
  border:1px solid #3a3f6e; border-radius:8px;
  box-shadow:0 12px 40px rgba(0,0,0,0.55), 0 0 0 1px rgba(79,195,247,0.08);
  padding:12px 14px; z-index:10000;
  pointer-events:none; display:none;
  font-family:'Segoe UI', sans-serif; font-size:12px; color:#e0e0e0;
  line-height:1.35;
}
#bcHoverPopup::before {
  content:''; position:absolute; inset:0 0 auto 0; height:2px;
  background:linear-gradient(90deg, transparent, #4fc3f7 30%, #4ecca3 70%, transparent);
  border-radius:8px 8px 0 0;
}
#bcHoverPopup .bc-hover-title {
  font-family:'IBM Plex Sans Condensed', sans-serif;
  font-size:16px; font-weight:700;
  color:#8fd7fa; letter-spacing:0.4px; margin-bottom:2px;
}
#bcHoverPopup .bc-hover-veh { color:#aaa; font-size:11px; margin-bottom:4px; }
#bcHoverPopup .bc-hover-meta {
  display:flex; gap:6px; flex-wrap:wrap; margin-bottom:4px;
}
#bcHoverPopup .bc-hover-chip {
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 7px; border-radius:10px; font-size:10.5px;
  font-family:'IBM Plex Mono', ui-monospace, monospace;
  background:rgba(79,195,247,0.1); color:#8fd7fa;
  border:1px solid rgba(79,195,247,0.2);
}
#bcHoverPopup .bc-hover-section {
  font-family:'IBM Plex Mono', ui-monospace, monospace;
  font-size:9px; font-weight:600;
  color:#5dade2; letter-spacing:1.6px; text-transform:uppercase;
  border-bottom:1px solid rgba(79,195,247,0.15);
  padding-bottom:3px; margin:10px 0 6px;
}
#bcHoverPopup .bc-hover-op {
  display:flex; gap:8px; padding:5px 0;
  border-bottom:1px dashed rgba(255,255,255,0.04);
}
#bcHoverPopup .bc-hover-op:last-child { border-bottom:none; }
#bcHoverPopup .bc-hover-op-letter {
  flex-shrink:0; min-width:20px;
  font-family:'IBM Plex Mono', monospace; font-weight:700;
  color:#4ecca3; padding-top:1px; font-size:12px;
}
#bcHoverPopup .bc-hover-op-body { flex:1; min-width:0; }
#bcHoverPopup .bc-hover-op-title {
  color:#e8ecff; font-weight:600; font-size:12px;
  white-space:normal; word-wrap:break-word;
}
#bcHoverPopup .bc-hover-op-desc { color:#aaa; font-size:11px; margin-top:2px; white-space:normal; word-wrap:break-word; }
#bcHoverPopup .bc-hover-op-cmt {
  color:#ffc671; font-size:10.5px; margin-top:3px;
  padding:3px 6px; background:rgba(245,166,35,0.06);
  border-left:2px solid rgba(245,166,35,0.4); border-radius:0 3px 3px 0;
  white-space:normal; word-wrap:break-word;
}
#bcHoverPopup .bc-hover-op-cat {
  display:inline-block; font-size:9px; font-weight:600;
  padding:0 5px; margin-left:6px; border-radius:3px;
  font-family:'IBM Plex Mono', monospace;
  vertical-align:middle;
}
#bcHoverPopup .bc-hover-op-cat.cat-G { background:rgba(255,152,0,0.14); color:#ffb74d; }
#bcHoverPopup .bc-hover-op-cat.cat-I { background:rgba(150,150,150,0.14); color:#bbb; }
#bcHoverPopup .bc-hover-parts { font-size:11px; color:#ccc; }
#bcHoverPopup .bc-hover-part {
  padding:2px 0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  font-family:'IBM Plex Mono', ui-monospace, monospace;
}
#bcHoverPopup .bc-hover-part-qty { color:#5dade2; margin-left:4px; }
#bcHoverPopup .bc-hover-more { color:#888; font-size:10px; padding-top:3px; font-style:italic; }
#bcHoverPopup .bc-hover-loading, #bcHoverPopup .bc-hover-err {
  color:#888; font-size:11px; padding:6px 0; font-style:italic;
}
#bcHoverPopup .bc-hover-err { color:#e94560; }
@keyframes bcHoverFade { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }
#bcHoverPopup.is-visible { display:block; animation:bcHoverFade 0.15s ease-out; }
.floating-win h2, .floating-win h3, .floating-win .drag-handle, #sms-header { cursor: move; user-select: none; }
/* v2.10: Taskbar */
#taskbar { position:fixed; bottom:0; left:0; right:0; z-index:var(--z-taskbar); height:36px; background:linear-gradient(180deg,#232946 0%,#1a1e2e 100%); border-top:1px solid #3a3f6e; display:flex; align-items:center; padding:0 6px; gap:3px; }
.tb-fixed { display:flex; align-items:center; gap:2px; flex-shrink:0; border-left:1px solid #3a3f6e; padding-left:6px; margin-left:2px; }
.tb-fixed button { background:none; border:none; color:#8892b0; font-size:16px; cursor:pointer; width:32px; height:30px; border-radius:4px; display:flex; align-items:center; justify-content:center; transition:background 0.15s; position:relative; }
.tb-fixed button:hover { background:rgba(255,255,255,0.1); color:#fff; }
.tb-fixed button.tb-active { background:rgba(91,141,239,0.2); color:#5b8def; }
.tb-items { display:flex; align-items:center; gap:3px; flex:1; overflow-x:auto; }
.tb-item { display:flex; align-items:center; gap:4px; background:#1c1f38; border:1px solid #3a3f6e; border-radius:4px; padding:2px 6px 2px 8px; font-size:11px; color:#b8c0e0; cursor:pointer; white-space:nowrap; max-width:180px; transition:background 0.15s; flex-shrink:0; height:26px; }
.tb-item:hover { background:#2a3050; border-color:#5b8def; }
.tb-item.tb-active { background:rgba(91,141,239,0.15); border-color:#5b8def; }
.tb-item .tb-icon { font-size:12px; }
.tb-item .tb-label { overflow:hidden; text-overflow:ellipsis; }
.tb-item .tb-close { background:none; border:none; color:#555; font-size:12px; cursor:pointer; padding:0 2px; line-height:1; margin-left:2px; }
.tb-item .tb-close:hover { color:#e94560; }
.tb-clock { margin-left:auto; flex-shrink:0; color:#8892b0; font-size:11px; font-family:monospace; padding:0 8px; border-left:1px solid #3a3f6e; }
.tb-badge { position:absolute; top:2px; right:2px; background:#e94560; color:#fff; font-size:8px; min-width:12px; height:12px; border-radius:6px; display:flex; align-items:center; justify-content:center; padding:0 2px; font-weight:700; }
.drag-handle { cursor: move; user-select: none; }
.modal label { display: block; color: #aaa; font-size: 12px; margin-bottom: 4px; margin-top: 10px; }
.modal input, .modal select, .modal textarea { width: 100%; padding: 8px; background: #1a1a2e; border: 1px solid #333; color: #e0e0e0; border-radius: 4px; font-size: 13px; }
.modal textarea { height: 60px; resize: vertical; }
.modal-buttons { display: flex; gap: 6px; margin-top: 16px; justify-content: flex-end; position: sticky; bottom: 0; background: inherit; padding: 10px 0 4px; z-index: 2; border-top: 1px solid #2a2f5a; flex-wrap: wrap; }
.modal-buttons button { padding: 8px 18px; border: none; border-radius: 4px; cursor: pointer; font-size: 13px; flex: 1 1 auto; min-width: 0; white-space: nowrap; }
.btn-save { background: #4ecca3; color: #1a1a2e; font-weight: bold; }
.btn-cancel { background: #333; color: #e0e0e0; }
.btn-delete { background: #e94560; color: white; }

/* v2.05: Mode IA */
/* v2.08: Bouton IA flottant + panneau mini-chat */
#aiBubble { display:none !important; }
#aiBubble:hover { transform:scale(1.08); box-shadow:0 6px 20px rgba(79,195,163,0.5); }
#aiBubble.ai-busy { animation:aiPulse 1.5s infinite; }
@keyframes aiPulse { 0%,100% { box-shadow:0 4px 16px rgba(79,195,163,0.35); } 50% { box-shadow:0 4px 24px rgba(79,195,163,0.7),0 0 0 8px rgba(79,195,163,0.12); } }
#aiPanel { display:none; position:fixed; bottom:44px; right:140px; width:420px; max-height:560px; background:#1c1f38; border:1px solid #3a3f6e; border-radius:10px; z-index:var(--z-floating); flex-direction:column; overflow:hidden; box-shadow:0 12px 40px rgba(0,0,0,0.6); animation:chatSlideUp 0.25s ease; }
#aiPanel.open { display:flex; }
.ai-panel-header { display:flex; align-items:center; gap:8px; padding:10px 14px; background:linear-gradient(180deg,#232946 0%,#1c1f38 100%); border-bottom:1px solid #3a3f6e; flex-shrink:0; }
.ai-panel-header .ai-panel-icon { width:22px; height:22px; flex-shrink:0; }
.ai-panel-header h3 { margin:0; font-size:13px; color:#4ecca3; font-weight:700; flex:1; }
#aiBcBadge { display:none; background:rgba(79,195,163,0.2); color:#4ecca3; font-size:10px; padding:1px 6px; border-radius:4px; cursor:pointer; white-space:nowrap; flex-shrink:0; }
#aiBcBadge:hover { background:rgba(233,69,96,0.2); color:#e94560; }
.ai-panel-header button.ai-close { background:none; border:none; color:#555; font-size:18px; cursor:pointer; flex-shrink:0; padding:0 2px; }
.ai-panel-header button.ai-close:hover { color:#e94560; }
.ai-panel-body { flex:1; overflow-y:auto; min-height:0; max-height:380px; }
.ai-panel-footer { padding:8px 12px; border-top:1px solid rgba(79,195,163,0.15); display:flex; gap:6px; align-items:center; flex-shrink:0; }
.ai-panel-footer input { flex:1; background:#1a1a2e; color:#e0e0e0; border:1px solid #3a3f6e; border-radius:8px; padding:8px 10px; font-size:12px; font-family:inherit; outline:none; }
.ai-panel-footer input:focus { border-color:rgba(79,195,163,0.5); }
.ai-panel-footer input::placeholder { color:#555; }
.ai-panel-footer input:disabled { opacity:0.5; }
.ai-panel-footer button.ai-send { background:#4ecca3; color:#1a1a2e; border:none; border-radius:8px; padding:8px 14px; font-size:12px; font-weight:600; cursor:pointer; white-space:nowrap; }
.ai-panel-footer button.ai-send:hover { background:#3dbb92; }
#aiSpinner { display:none; width:14px; height:14px; border:2px solid #333; border-top:2px solid #4ecca3; border-radius:50%; animation:spin 0.8s linear infinite; flex-shrink:0; }
.ai-response-body { font-size:13px; color:#e0e0e0; line-height:1.6; padding:12px 16px; white-space:pre-wrap; word-break:break-word; }
.ai-response-body strong { color:#4fc3f7; }
.ai-response-body code { background:rgba(255,255,255,0.08); padding:1px 4px; border-radius:3px; font-size:12px; }
.ai-actions { display:flex; gap:6px; flex-wrap:wrap; padding:8px 16px 12px; border-top:1px solid #2a2f5a; }
.ai-action-btn { padding:6px 14px; border:none; border-radius:6px; cursor:pointer; font-size:12px; font-weight:600; }
.ai-action-btn.primary { background:#4ecca3; color:#1a1a2e; }
.ai-action-btn.primary:hover { background:#3dbb92; }
.ai-action-btn.secondary { background:#333; color:#e0e0e0; }
.ai-action-btn.secondary:hover { background:#444; }
.ai-cursor { display:inline-block; width:2px; height:14px; background:#4ecca3; margin-left:2px; vertical-align:text-bottom; animation:blink 0.8s step-end infinite; }
@keyframes blink { 50% { opacity:0; } }
.ai-thinking { color:#888; font-size:12px; padding:4px 0; }
.ai-thinking .ai-dots::after { content:''; animation:aidots 1.5s steps(4,end) infinite; }
@keyframes aidots { 0% { content:''; } 25% { content:'.'; } 50% { content:'..'; } 75% { content:'...'; } }
.ai-history-btn { background:none; border:none; color:#666; font-size:11px; cursor:pointer; padding:2px 6px; }
.ai-history-btn:hover { color:#aaa; }
.ai-history-dropdown { position:absolute; top:100%; right:0; background:#1c1f38; border:1px solid #3a3f6e; border-radius:6px; padding:4px; min-width:200px; max-width:350px; z-index:10; display:none; }
.ai-history-dropdown.show { display:block; }
.ai-history-item { padding:6px 8px; color:#aaa; font-size:11px; cursor:pointer; border-radius:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ai-history-item:hover { background:rgba(255,255,255,0.08); color:#e0e0e0; }
.ai-stats { font-size:10px; color:#555; padding:4px 16px 8px; }
@media (max-width: 768px) { #aiBubble { width:38px; height:38px; font-size:16px; bottom:14px; right:118px; } #aiPanel { width:calc(100vw - 16px); right:8px; bottom:60px; max-height:70vh; } }

/* DRAG GHOST */
.drag-ghost { position: fixed; pointer-events: none; z-index: var(--z-popup-top); opacity: 0.85; }

/* ===== TOUCH INTERFACE ===== */
.case-card { touch-action: manipulation; user-select: none; -webkit-user-select: none; }
.case-card * { user-select: none; -webkit-user-select: none; }
.sidebar .case-card { touch-action: manipulation; }

/* Hold feedback: carte "attrapée" prête à glisser — glow rapide 1.2s */
.case-card.press-hold {
  /* Fix jitter : transformation moins agressive */
  transform: translateY(-2px) scale(1.03) !important;
  transition: transform 0.12s ease;
  animation: pressGlow 1.2s ease-out forwards;
  z-index: 10;
}
@keyframes pressGlow {
  0%   { box-shadow: 0 0 0 0px  rgba(78,204,163,0.0); }
  15%  { box-shadow: 0 0 4px 2px rgba(78,204,163,0.5); }
  50%  { box-shadow: 0 0 8px 3px rgba(78,204,163,0.8); }
  100% { box-shadow: 0 0 12px 5px rgba(78,204,163,1.0); }
}
.case-card.drag-ready {
  /* Fix jitter : transformation contrôlée */
  transform: translateY(-3px) scale(1.04) !important;
  box-shadow: 0 6px 20px rgba(78,204,163,0.8);
  z-index: 15;
  transition: all 0.15s ease;
  touch-action: none;
  /* v3.533: cue explicite « prête à glisser » — contour pointillé + oscillation */
  outline: 2px dashed #4ecca3;
  outline-offset: 2px;
  animation: dragWiggle 0.5s ease-in-out infinite alternate;
}
@keyframes dragWiggle {
  from { rotate: -0.8deg; }
  to { rotate: 0.8deg; }
}

/* Scroll fluide (iOS momentum) */
.main-content { }
.sidebar { }

/* Touch targets plus grands sur écrans tactiles */
@media (pointer: coarse) {
  .card-actions button { min-width: 32px; min-height: 32px; font-size: 15px; }
  .sidebar-header { min-height: 42px; cursor: pointer; }
  .btn-week, .btn-today, .header-right button { min-height: 40px; min-width: 40px; }
  input, select { font-size: 16px !important; }
}

/* (pinch zoom supprimé) */

/* ===== RESPONSIVE MOBILE ===== */
@media (max-width: 768px) {
  .sidebar { display: none; }
  .container { flex-direction: column; overflow: visible; height: auto; min-height: calc(100vh - 45px); }
  .calendar-wrapper { width: 100vw; overflow-x: auto; overflow-y: visible; flex: none; }
  .calendar { min-width: 900px; }
  .header h1 { font-size: 14px; }
  .week-label { font-size: 12px; min-width: 140px; }
  .header { padding: 6px 10px; flex-wrap: wrap; gap: 4px; overflow: hidden; }
  .header-right { flex-wrap: wrap; justify-content: flex-end; flex: 1; min-width: 0; }
  #headerMarquee { display: none; }
  .modal { width: 95vw; max-width: 95vw; padding: 16px; }
  /* v2.07: Fenêtres flottantes plein écran sur mobile.
     dvh = dynamic viewport height (exclut barres navigateur), fallback 85vh. */
  .floating-win {
    left: 0 !important; top: 0 !important; bottom: 0 !important;
    width: 100vw !important; max-width: 100vw !important;
    height: 100vh !important; height: 100dvh !important;
    max-height: 100vh !important; max-height: 100dvh !important;
    min-width: unset !important; resize: none !important;
    border-radius: 0 !important; border: none !important;
  }
  /* Toutes les modals : flex column pour que le contenu scrolle et le footer reste */
  .floating-win { display: flex !important; flex-direction: column !important; overflow: hidden !important; }
  .floating-win > *:not(.win-header) { flex-shrink: 0; }
  .floating-win .ai-response-body,
  .floating-win .modal-body,
  .floating-win > div[style*="overflow"]:not(#vehProgressBar) { flex: 1 1 0 !important; overflow-y: auto !important; min-height: 0 !important; }
  /* Cacher les boutons flottants quand une fenêtre modale est ouverte sur mobile */
  .modal-overlay.active ~ #chatBubble,
  .modal-overlay.active ~ #activityBubble,
  .modal-overlay.active ~ #viewModeBtn { display: none !important; }
  /* v2.07: Menu contextuel plein écran sur mobile — classe .ctx-open ajoutée par JS */
  #ctx-menu.ctx-open {
    left: 0 !important; right: 0 !important; top: 0 !important; bottom: 0 !important;
    width: 100vw !important; max-width: 100vw !important;
    height: 100vh !important; height: 100dvh !important;
    max-height: 100vh !important; max-height: 100dvh !important;
    border-radius: 0 !important;
    padding: 0 8px 20px !important;
    animation: ctxSlideUp 0.2s ease-out;
    display: flex !important; flex-direction: column !important;
    overflow-y: auto !important;
  }
  #ctx-menu.ctx-open .ctx-mobile-titlebar { display: flex !important; }
  @keyframes ctxSlideUp { from { transform: translateY(100%); } to { transform: translateY(0); } }
  /* Chat hub mobile */
  #chatHub { width: calc(100vw - 12px) !important; right: 6px !important; bottom: 60px !important; max-height: 75vh !important; max-height: 75dvh !important; }
  /* v1.17: Smooth scroll indicator */
  .calendar-wrapper::-webkit-scrollbar { height: 4px; }
  .calendar-wrapper::-webkit-scrollbar-track { background: #111; }
  .calendar-wrapper::-webkit-scrollbar-thumb { background: #5b8def; border-radius: 2px; }
}
@media (min-width: 769px) and (max-width: 1024px) {
  .sidebar { width: 200px; }
}

/* ===== VUE JOUR ===== */
.day-view-container { display: flex; flex-direction: column; height: 100%; overflow-y: auto; }
.dv-header { background: #0d1b36; padding: 10px 16px; font-size: 15px; font-weight: bold; color: #4ecca3; border-bottom: 2px solid rgba(90,141,239,0.5); text-align: center; cursor: pointer; letter-spacing: 0.3px; }
.dv-header:hover { background: #132240; }
.dv-row { display: flex; align-items: stretch; border-bottom: 1px solid #222; min-height: 60px; }
.dv-time { width: 50px; flex-shrink: 0; padding-top: 8px; text-align: center; font-size: 12px; color: #888; background: #16213e; }
.dv-cell.cal-cell { flex: 1; min-height: 60px; }
.dv-cell.cal-cell .case-card { margin: 3px 4px; }

/* ===== VUE MOIS ===== */
.month-view-container { overflow-y: auto; }
.mv-month-header { display: grid; grid-template-columns: 28px repeat(5, 1fr); background: #16213e; border-bottom: 2px solid rgba(90,141,239,0.5); position: sticky; top: 0; z-index: 10; }
.mv-hdr-cell { padding: 7px 4px; text-align: center; font-size: 12px; font-weight: bold; color: #e0e0e0; }
.mv-week-row { display: grid; grid-template-columns: 28px repeat(5, 1fr); border-bottom: 1px solid #222; }
.mv-day-cell { border-right: 1px solid #1e1e3f; min-height: 68px; padding: 3px; background: #1a1a2e; cursor: pointer; }
.mv-day-cell:hover, .mv-day-cell:active { background: #1e2a45; }
.mv-day-cell.today-col { background: #161e30 !important; outline: 1px solid #58a6ff; }
.mv-daynum { font-size: 11px; color: #888; display: block; margin-bottom: 2px; font-weight: bold; }
.mv-wk-num { font-size: 9px; color: #5dade2; writing-mode: vertical-rl; display: flex; align-items: center; justify-content: center; padding: 2px; }
.mv-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; margin: 1px; }

/* ===== ZONES NAVIGATION BORD ===== */
#edgeNavLeft, #edgeNavRight {
  position: fixed; top: 48px; bottom: 0; width: 52px; z-index: 600;
  display: flex; align-items: center; justify-content: center;
  opacity: 0.6; transition: opacity 0.15s; pointer-events: auto;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
#edgeNavLeft  { left:  0; background: linear-gradient(to right, rgba(90,141,239,0.18), transparent); }
#edgeNavRight { right: 0; background: linear-gradient(to left,  rgba(90,141,239,0.18), transparent); }
#edgeNavLeft.nav-active, #edgeNavRight.nav-active { opacity: 1; }
@media (pointer: fine) { #edgeNavLeft, #edgeNavRight { display: none !important; } }
.edge-nav-arrow { font-size: 26px; color: rgba(90,141,239,0.9); text-shadow: 0 0 8px rgba(90,141,239,0.6); }

/* ===== BOUTON RETOUR SEMAINE ===== */
#viewModeBtn {
  position: fixed; bottom: 80px; right: 20px; z-index: 1001;
  background: rgba(22,33,62,0.93); color: #4ecca3;
  padding: 8px 16px; border-radius: 20px; font-size: 12px; font-weight: 600;
  border: 1px solid rgba(78,204,163,0.5); cursor: pointer;
  display: none; box-shadow: 0 4px 12px rgba(0,0,0,0.45);
  user-select: none; -webkit-user-select: none;
}

  /* ===== BOITE A SUGGESTIONS ===== */

    /* ── Vehicle popup v1.77 redesign ── */
    #vehModal { display:none; position:fixed; inset:0; z-index:var(--z-vehmodal); background:rgba(0,0,0,0.72); align-items:center; justify-content:center; }
    #vehModal.open { display:flex; }
    #vehBox { background:#1c1f38; border:1px solid #3a3f6e; border-radius:10px; padding:20px 22px; width:620px; max-width:96vw; max-height:92vh; overflow-y:auto; display:flex; flex-direction:column; }
    #vehBox h3 { margin:0; font-size:15px; color:#fff; cursor:move; user-select:none; }
    /* Compact info header */
    .veh-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
    .veh-info-compact { display:grid; grid-template-columns:auto 1fr auto 1fr; gap:4px 10px; align-items:center; font-size:11px; margin-bottom:8px; padding:8px 10px; background:rgba(255,255,255,0.03); border-radius:8px; border:1px solid #2a2f5a; }
    .veh-info-compact .veh-lbl { color:#889; font-size:10px; text-transform:uppercase; letter-spacing:0.3px; }
    .veh-info-compact .veh-val { color:#e0e0e0; font-size:12px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .veh-edit-pen { color:#60a5fa; cursor:pointer; font-size:11px; margin-left:4px; opacity:0.5; transition:opacity 0.15s; }
    .veh-edit-pen:hover { opacity:1; }
    .veh-grid { display:grid; grid-template-columns:auto 1fr; gap:7px 16px; align-items:start; }
    .veh-lbl { color:#888; font-size:11px; white-space:nowrap; padding-top:1px; }
    .veh-val { color:#e8e8e8; font-size:12px; font-weight:600; word-break:break-word; }
    .veh-divider { grid-column:1/3; border:none; border-top:1px solid #2a2f5a; margin:10px 0; }
    .veh-section-title { grid-column:1/3; color:#f0c040; font-size:11px; font-weight:700; letter-spacing:.04em; }
    #vehLoading { color:#888; font-size:11px; margin-top:10px; }
    /* Tabs */
    .veh-tabs { display:flex; gap:0; border-bottom:2px solid #2a2f5a; margin:6px 0 0; }
    .veh-tab { padding:8px 14px; cursor:pointer; color:#889; font-size:11px; font-weight:600; border-bottom:2px solid transparent; margin-bottom:-2px; transition:all .15s; white-space:nowrap; }
    .veh-tab:hover { color:#aaa; }
    .veh-tab.active { color:#90caf9; border-bottom-color:#90caf9; }
    .veh-tab-badge { background:#ff9800; color:#1a1a2e; font-size:9px; font-weight:700; padding:1px 5px; border-radius:8px; margin-left:4px; }
    .veh-tab-content { flex:1; overflow-y:auto; min-height:80px; padding:8px 0; }
    /* v1.70: Historique client */
    #vehHistorySection { margin-top:0; padding-top:0; }
    .hist-list { overflow-y:auto; font-size:11px; }
    .hist-item { display:flex; align-items:center; gap:8px; padding:6px 8px; border-bottom:1px solid #222; cursor:pointer; flex-wrap:wrap; }
    .hist-item:hover { background:rgba(90,140,230,0.15); }
    /* BC detail floating window — multi-fenêtres cascade (v2.56), au-dessus du dropdown globalSearch */
    /* v3.542: entête de fenêtre unifiée (.win-header) — remplace progressivement
       .bcd-header / .fw-titlebar / .ai-panel-header / .appt-header-bar / .dv-header. */
    .win-header { display:flex; align-items:center; gap:10px; padding:10px 14px; background:linear-gradient(180deg,#232946 0%,#1c1f38 100%); border-bottom:1px solid var(--border-accent); border-radius:10px 10px 0 0; cursor:move; user-select:none; flex-shrink:0; position:sticky; top:0; z-index:var(--z-base); }
    .win-header__icon { font-size:16px; line-height:1; opacity:.9; flex-shrink:0; }
    .win-header__title { margin:0; font-size:14px; font-weight:600; color:var(--text-primary); flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .win-header__actions { display:flex; align-items:center; gap:6px; margin-left:auto; flex-shrink:0; }
    .win-header__btn { background:transparent; border:1px solid var(--border-accent); color:var(--text-secondary); font-size:12px; padding:3px 8px; border-radius:6px; cursor:pointer; }
    .win-header__btn:hover { color:var(--text-primary); border-color:var(--accent-blue); }
    .win-header__min, .win-header__close { background:transparent; border:0; color:var(--text-secondary); font-size:18px; line-height:1; cursor:pointer; padding:2px 6px; border-radius:6px; }
    .win-header__close { font-size:20px; }
    .win-header__min:hover, .win-header__close:hover { background:rgba(255,255,255,.08); color:var(--text-primary); }

    .bcd-win { display:block; position:fixed; top:60px; right:20px; width:420px; max-height:92vh; background:#16213e; border:1px solid #4ecca3; border-radius:10px; box-shadow:0 8px 32px rgba(0,0,0,0.6); z-index:var(--z-bcdetail); overflow-y:auto; font-size:12px; }
    .bcd-win .bcd-body { padding:10px 14px; }
    .bcd-win .bcd-vehicle { background:rgba(78,204,163,0.08); border:1px solid #2a4a3a; border-radius:6px; padding:8px 10px; margin-bottom:10px; }
    .bcd-win .bcd-vehicle .bcd-km { color:#90caf9; font-weight:700; font-size:13px; }
    .bcd-win .bcd-op { background:rgba(78,204,163,0.05); border:1px solid #2a3a2a; border-radius:6px; padding:8px 10px; margin-bottom:8px; }
    .bcd-win .bcd-op-header { display:flex; align-items:center; gap:8px; margin-bottom:4px; }
    .bcd-win .bcd-op-letter { background:#4ecca3; color:#1a2744; font-weight:800; padding:2px 7px; border-radius:4px; font-size:12px; }
    .bcd-win .bcd-op-cat { font-size:10px; padding:1px 6px; border-radius:3px; font-weight:600; }
    .bcd-cat-G { background:#f0c040; color:#3a3000; } .bcd-cat-I { background:#e94560; color:#fff; } .bcd-cat-C { background:#5dade2; color:#1a1a2e; }
    .bcd-win .bcd-op-title { color:#e0e0e0; font-weight:600; flex:1; }
    .bcd-win .bcd-op-desc { color:#aaa; padding:2px 0 2px 28px; line-height:1.4; white-space:pre-wrap; }
    .bcd-win .bcd-part { display:flex; align-items:center; gap:6px; padding:3px 0 3px 28px; color:#f0c040; font-size:11px; }
    .bcd-win .bcd-part-no { font-weight:700; min-width:100px; }
    .bcd-win .bcd-part-desc { color:#ccc; flex:1; }
    .bcd-win .bcd-part-qty { color:#aaa; min-width:30px; text-align:right; }
    .bcd-win .bcd-noops { color:#666; padding:10px; font-style:italic; }
    .hist-bc { font-weight:700; color:#90caf9; min-width:62px; }
    .hist-date { color:#888; min-width:80px; }
    .hist-status { font-size:10px; padding:1px 6px; border-radius:3px; font-weight:600; }
    .hist-status.st-ferme { background:#c0392b33; color:#e74c3c; }
    .hist-status.st-actif { background:#27ae6033; color:#2ecc71; }
    .hist-status.st-planifie { background:#2980b933; color:#5dade2; }
    .hist-desc { color:#aaa; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .hist-unit { color:#f0c040; font-size:10px; font-weight:600; }
    #vehCommentWrap { margin-top:14px; }
    #vehCommentWrap .postit-label { font-size:11px; color:#bba; margin-bottom:4px; display:flex; align-items:center; gap:5px; }
    #vehCommentWrap .postit-label .postit-saved { font-size:10px; color:#5dade2; opacity:0; transition:opacity 0.3s; }
    #vehCommentWrap .postit-label .postit-saved.show { opacity:1; }
    #vehCommentTA { width:100%; min-height:60px; max-height:150px; resize:vertical; background:#fef9e7; color:#333; border:1px solid #d4ac0d; border-radius:6px; padding:8px 10px; font-size:13px; font-family:inherit; box-sizing:border-box; box-shadow:2px 2px 6px rgba(0,0,0,0.2); }
    #vehCommentTA:focus { outline:none; border-color:#f0c040; box-shadow:2px 2px 8px rgba(240,192,64,0.4); }
    #vehCommentTA::placeholder { color:#999; font-style:italic; }
    #vehCloseBtn { padding:10px 0; background:#c62828; border:none; border-radius:8px; color:#fff; cursor:pointer; font-size:13px; font-weight:600; }
    #vehCloseBtn:hover { background:#e53935; }
    .veh-op-block { margin-bottom:10px; padding:4px 8px 4px 10px; border-left:3px solid transparent; border-radius:4px; }
    .veh-op-block.op-done { border-left-color:#4ecca3; background:rgba(78,204,163,0.06); }
    .veh-op-block.op-in-progress { border-left-color:#f0c040; background:rgba(240,192,64,0.06); }
    .veh-op-hours { color:#90caf9; font-size:10px; font-weight:500; margin-left:6px; }
    .veh-op-parts-total { color:#4ecca3; font-size:10px; font-weight:600; margin-left:6px; }
    .veh-op-done-check { color:#4ecca3; font-size:12px; font-weight:bold; margin-left:4px; }
    .veh-op-header { display:flex; align-items:center; gap:6px; padding:4px 0; font-weight:bold; color:#60a5fa; font-size:12px; }
    .veh-op-header .cat-badge { font-size:9px; font-weight:bold; padding:1px 5px; border-radius:3px; }
    .veh-op-header .cat-gar { background:rgba(74,222,128,0.2); color:#4ade80; }
    .veh-op-header .cat-int { background:rgba(251,146,60,0.2); color:#fb923c; }
    .veh-op-header .op-edit-btn { background:rgba(96,165,250,0.1); border:1px solid transparent; border-radius:4px; cursor:pointer; padding:3px 5px; display:flex; align-items:center; justify-content:center; transition:all 0.15s; }
    .veh-op-header .op-edit-btn:hover { background:rgba(96,165,250,0.25); border-color:rgba(96,165,250,0.4); }
    .veh-op-header .op-edit-btn svg { width:13px; height:13px; stroke:#60a5fa; fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
    .veh-op-desc { color:#aaa; font-size:11px; padding:1px 0 2px 18px; }
    .veh-op-part { display:flex; justify-content:space-between; align-items:center; padding:2px 0 2px 18px; border-bottom:1px solid #1a1d30; font-size:11px; }
    .soum-table { width:100%; border-collapse:collapse; font-size:11px; color:#e0e0e0; margin:6px 0 10px; }
    .soum-table th { text-align:left; color:#90caf9; font-weight:600; padding:4px 6px; border-bottom:1px solid #2a2a4e; font-size:10px; }
    .soum-table td { padding:3px 6px; border-bottom:1px solid #1a1d30; }
    .soum-table td.num { text-align:right; font-variant-numeric:tabular-nums; color:#cbd5e1; }
    .soum-row-input { display:flex; align-items:center; gap:8px; padding:6px 0; }
    .soum-row-input label { flex:0 0 140px; color:#aaa; font-size:11px; }
    .soum-row-input input { background:#0d1117; border:1px solid #2a2a4e; color:#e0e0e0; padding:6px 10px; border-radius:4px; font-size:12px; width:100px; font-variant-numeric:tabular-nums; }
    .soum-totals { border-top:2px solid #2a2a4e; padding-top:8px; margin-top:8px; }
    .soum-line { display:flex; justify-content:space-between; padding:3px 0; font-size:12px; }
    .soum-line.grand { font-weight:700; color:#4ecca3; font-size:14px; padding-top:6px; border-top:1px solid #2a2a4e; margin-top:4px; }
    .veh-op-part b { color:#e8e8e8; }
    .veh-op-part .part-del { background:rgba(233,69,96,0.1); border:1px solid transparent; border-radius:4px; color:#e94560; cursor:pointer; font-size:11px; padding:2px 5px; display:inline-flex; align-items:center; justify-content:center; transition:all 0.15s; line-height:1; }
    .veh-op-part .part-del:hover { background:rgba(233,69,96,0.25); border-color:rgba(233,69,96,0.4); }
    .op-del-btn { background:rgba(233,69,96,0.1); border:1px solid transparent; border-radius:4px; cursor:pointer; padding:3px 5px; display:flex; align-items:center; justify-content:center; margin-left:4px; transition:all 0.15s; }
    .op-del-btn:hover { background:rgba(233,69,96,0.25); border-color:rgba(233,69,96,0.4); }
    .op-soumission-btn { background:rgba(240,192,64,0.1); border:1px solid transparent; border-radius:4px; cursor:pointer; padding:2px 6px; font-size:13px; margin-left:auto; transition:all 0.15s; }
    .op-soumission-btn:hover { background:rgba(240,192,64,0.25); border-color:rgba(240,192,64,0.4); }
    .op-del-btn svg { width:13px; height:13px; stroke:#e94560; fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
    .freq-part-chip { display:inline-block; background:rgba(96,165,250,0.1); border:1px solid rgba(96,165,250,0.25); border-radius:12px; padding:3px 10px; margin:2px 4px 2px 0; font-size:11px; color:#90caf9; cursor:pointer; transition:all 0.15s; white-space:nowrap; }
    .freq-part-chip:hover { background:rgba(96,165,250,0.25); border-color:rgba(96,165,250,0.5); color:#fff; }
    .freq-part-chip b { color:#60a5fa; }
    .veh-op-add-part { background:none; border:1px dashed #444; color:#60a5fa; cursor:pointer; font-size:10px; padding:3px 8px; border-radius:4px; margin:4px 0 0 18px; }
    .veh-op-add-part:hover { border-color:#60a5fa; background:rgba(96,165,250,0.1); }
    .veh-inline-add { position:relative; margin:4px 0 0 0; }
    .veh-inline-add input { width:100%; box-sizing:border-box; background:#fff; border:1px solid #999; border-radius:5px; color:#1a1a2e; font-size:13px; padding:7px 10px; outline:none; transition:border-color 0.2s; }
    .veh-inline-add input:focus { border-color:#60a5fa; background:#fff; box-shadow:0 0 0 2px rgba(96,165,250,0.3); }
    .veh-inline-add input::placeholder { color:#999; font-size:12px; }
    .veh-ac-dropdown { position:absolute; left:0; right:0; top:100%; background:#1e293b; border:1px solid #334155; border-radius:0 0 6px 6px; max-height:200px; overflow-y:auto; z-index:50; box-shadow:0 8px 24px rgba(0,0,0,0.5); display:none; }
    .veh-ac-dropdown.show { display:block; }
    .veh-ac-item { padding:5px 8px; cursor:pointer; font-size:11px; color:#cbd5e1; border-bottom:1px solid rgba(255,255,255,0.04); display:flex; justify-content:space-between; align-items:center; }
    .veh-ac-item:hover, .veh-ac-item.active { background:rgba(96,165,250,0.15); color:#fff; }
    .veh-ac-item .ac-pn { font-weight:600; color:#60a5fa; margin-right:6px; }
    .veh-ac-item .ac-desc { flex:1; color:#94a3b8; font-size:10px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .veh-ac-item .ac-stock { font-size:9px; margin-left:6px; white-space:nowrap; }
    .veh-ac-item .ac-stock.in { color:#22c55e; }
    .veh-ac-item .ac-stock.out { color:#e94560; }
    .veh-ac-sep { padding:3px 8px; font-size:9px; color:#64748b; font-weight:600; text-transform:uppercase; background:rgba(255,255,255,0.02); letter-spacing:0.5px; }
    .veh-inline-status { font-size:10px; margin-top:2px; min-height:14px; }
    .veh-inline-confirm { display:flex; align-items:center; gap:6px; margin-top:3px; padding:4px 6px; background:rgba(96,165,250,0.08); border:1px solid rgba(96,165,250,0.2); border-radius:4px; font-size:11px; }
    .veh-inline-confirm .ic-part { color:#60a5fa; font-weight:600; }
    .veh-inline-confirm .ic-desc { color:#94a3b8; font-size:10px; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .veh-inline-confirm input.ic-qty { width:36px; background:rgba(255,255,255,0.08); border:1px solid #444; border-radius:3px; color:#e0e0e0; font-size:11px; padding:2px 4px; text-align:center; outline:none; }
    .veh-inline-confirm input.ic-qty:focus { border-color:#60a5fa; }
    .veh-inline-confirm .ic-btn { background:#2563eb; color:#fff; border:none; border-radius:3px; padding:3px 10px; font-size:10px; cursor:pointer; font-weight:600; }
    .veh-inline-confirm .ic-btn:hover { background:#3b82f6; }
    .veh-inline-confirm .ic-cancel { background:none; border:none; color:#64748b; cursor:pointer; font-size:13px; padding:0 2px; }
    .veh-inline-confirm .ic-cancel:hover { color:#e94560; }
    .veh-add-op-btn { display:block; width:100%; margin-top:8px; background:none; border:1px dashed #444; color:#4ade80; cursor:pointer; font-size:11px; padding:6px; border-radius:4px; }
    .veh-add-op-btn:hover { border-color:#4ade80; background:rgba(74,222,128,0.1); }
    .veh-op-block.drag-over-op { outline:2px dashed #60a5fa; background:rgba(96,165,250,0.08); border-radius:6px; }
    .veh-op-part[draggable="true"] { cursor:grab; }
    .veh-op-part.dragging { opacity:0.4; }

    /* ── v2.09: AI tips inline popup ── */
    .ai-tip { color:#b39ddb; font-size:10px; font-style:italic; }
    .ai-tip-time { display:inline-block; background:rgba(179,157,219,0.12); border:1px solid rgba(179,157,219,0.2); border-radius:4px; padding:1px 6px; margin:2px 0 2px 8px; color:#b39ddb; font-size:10px; font-style:italic; }
    .ai-tip-time.override { color:#f0c040; border-color:rgba(240,192,64,0.3); background:rgba(240,192,64,0.08); }
    .ai-tip-part { display:flex; align-items:center; gap:6px; padding:2px 8px 2px 20px; color:#b39ddb; font-size:10px; font-style:italic; border-left:2px solid rgba(179,157,219,0.2); margin:2px 0; }
    .ai-tip-part button { background:rgba(179,157,219,0.2); color:#b39ddb; border:1px solid rgba(179,157,219,0.3); border-radius:3px; padding:1px 6px; font-size:9px; cursor:pointer; white-space:nowrap; }
    .ai-tip-part button:hover { background:rgba(179,157,219,0.35); }
    .ai-ctx-menu { position:fixed; z-index:var(--z-popup-top); background:#1e2235; border:1px solid rgba(179,157,219,0.3); border-radius:6px; box-shadow:0 4px 16px rgba(0,0,0,0.5); padding:4px 0; min-width:160px; font-size:11px; }
    .ai-ctx-menu div { padding:6px 14px; color:#ccc; cursor:pointer; }
    .ai-ctx-menu div:hover { background:rgba(179,157,219,0.15); color:#fff; }

    /* ── Sidebar search ── */
    #sidebarSearchWrap { padding: 10px 10px 6px; position: sticky; top: 0; background: #16213e; z-index: 6; border-bottom: 1px solid rgba(255,255,255,0.06); }
    #sidebarSearch { width: 100%; padding: 9px 34px 9px 34px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 20px; color: #e8e8e8; font-size: 13px; outline: none; box-sizing: border-box; transition: border-color 0.2s, background 0.2s, box-shadow 0.2s; }
    #sidebarSearch:focus { border-color: rgba(240,192,64,0.5); background: rgba(255,255,255,0.09); box-shadow: 0 0 0 3px rgba(240,192,64,0.1); }
    #sidebarSearch::placeholder { color: #778; font-size: 12px; }
    #sidebarSearchIcon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); font-size: 13px; pointer-events: none; color: #778; line-height: 1; display: flex; align-items: center; }
    #sidebarSearchCount { color: #667; font-size: 10px; text-align: center; padding: 2px 0 0; min-height: 13px; }
    #sidebarSearchClear { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); background: rgba(255,255,255,0.1); border: none; color: #999; cursor: pointer; font-size: 11px; padding: 2px 6px; display: none; line-height: 1; border-radius: 50%; transition: background 0.15s; }
    #sidebarSearchClear:hover { background: rgba(255,255,255,0.2); color: #fff; }
    #sidebarSearchClear.visible { display: block; }
    .case-card.search-dim { opacity: 0.15; transition: opacity 0.2s; }
    .case-card.search-hit { box-shadow: 0 0 0 2px #f0c040; transition: box-shadow 0.2s; }
    .case-card.search-focus { box-shadow: 0 0 0 3px #ff6600, 0 0 12px rgba(255,102,0,0.5); z-index:10; position:relative; transition: box-shadow 0.2s; }
    #searchNavWrap { display:none; align-items:center; gap:4px; margin-top:4px; justify-content:center; }
    #searchNavWrap.visible { display:flex; }
    #searchNavWrap button { background: rgba(255,255,255,0.07); color:#aab; border:1px solid rgba(255,255,255,0.1); border-radius:14px; padding:3px 12px; cursor:pointer; font-size:13px; line-height:1; transition: background 0.15s; }
    #searchNavWrap button:hover { background: rgba(255,255,255,0.15); color:#fff; }
    #searchNavPos { color:#aab; font-size:12px; min-width:50px; text-align:center; }

  /* === RESPONSIVE MOBILE / TABLETTE === */
  #btnMenu { display:none; background:#2a2f5a; border:none; color:#e8e8e8; width:36px; height:36px; border-radius:6px; cursor:pointer; font-size:20px; line-height:1; flex-shrink:0; align-items:center; justify-content:center; }
  #sidebarBackdrop { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.55); z-index:99; }
  @media (max-width: 900px) {
    #btnMenu { display:flex; }
    .sidebar { position:fixed; left:0; top:45px; bottom:0; z-index:100; transform:translateX(-100%); transition:transform 0.25s ease; box-shadow:4px 0 20px rgba(0,0,0,0.5); }
    .sidebar.open { transform:translateX(0); }
    #sidebarBackdrop.open { display:block; }
    .calendar-wrapper { overflow-x:auto; min-width:0; }
  }
  @media (max-width: 600px) {
    .header { padding:6px 10px; }
    .header h1 { font-size:12px; }
    .week-nav button { padding:4px 8px; font-size:11px; }
    .week-label { min-width:130px; font-size:11px; }
    .btn-add { padding:4px 8px; font-size:11px; }
  }

  .version-badge {
    display:inline-block; margin-left:10px; padding:2px 8px;
    background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.35);
    border-radius:12px; font-size:12px; font-weight:600; color:#d0e8ff;
    cursor:pointer; vertical-align:middle; letter-spacing:0.03em;
    transition:background 0.2s, border-color 0.2s;
  }
  .version-badge:hover { background:rgba(255,255,255,0.28); border-color:rgba(255,255,255,0.6); }

  /* v1.45: Mechanics availability badges */
  .mech-badge {
    display:inline-block; font-size:9px; font-weight:bold;
    padding:1px 5px; border-radius:3px; color:#fff; cursor:default;
    margin-left:3px; vertical-align:middle; transition:transform 0.15s;
  }
  .mech-badge:hover { transform:scale(1.15); }
  /* v2.54: 3 états — absent (pas là) / present (punché journée, dispo) / busy (sur BC) */
  .mech-badge.absent { background:#3a3a3a; color:#777; opacity:0.6; }
  .mech-badge.present { background:#27ae60; } /* vert = disponible */
  .mech-badge.available { background:#2196f3; } /* legacy 2 états — fallback */
  .mech-badge.busy { background:#e94560; cursor:pointer; } /* rouge = sur un BC */


  #changelogModal {
    display:none; position:fixed; inset:0; background:rgba(0,0,0,0.6);
    z-index:var(--z-changelog); justify-content:center; align-items:center;
  }
  #changelogModal.open { display:flex; }
  #changelogBox {
    background:#1e2a38; border:1px solid #2e4060; border-radius:10px;
    width:min(540px,92vw); max-height:80vh; overflow-y:auto;
    padding:24px 28px; box-shadow:0 8px 32px rgba(0,0,0,0.5); position:relative;
  }
  #changelogBox h2 { margin:0 0 18px; font-size:16px; color:#90caf9; letter-spacing:0.04em; }
  .cl-version { margin-bottom:18px; }
  .cl-ver-header { display:flex; align-items:baseline; gap:10px; margin-bottom:6px; }
  .cl-badge {
    background:#1a3a5c; border:1px solid #2e6096; border-radius:10px;
    padding:2px 9px; font-size:12px; font-weight:700; color:#64b5f6;
  }
  .cl-date { font-size:11px; color:#7a8fa0; }
  .cl-version ul { margin:0; padding-left:20px; }
  .cl-version ul li { font-size:13px; color:#c0cfe0; margin-bottom:3px; line-height:1.5; }
  #changelogClose {
    position:absolute; top:14px; right:16px; background:none; border:none;
    color:#7a8fa0; font-size:20px; cursor:pointer; line-height:1;
  }
  #changelogClose:hover { color:#c0cfe0; }

  /* ── Context menu v1.77 redesign ── */
  #ctx-menu { position:fixed; z-index:var(--z-popup-top); background:#1c1f38; border:1px solid #3a3f6e; border-radius:10px; padding:6px; min-width:220px; max-height:70vh; overflow-y:auto; box-shadow:0 8px 28px rgba(0,0,0,0.65); display:none; user-select:none; }
  #ctx-menu .ctx-item { padding:8px 12px; cursor:pointer; color:#e0e0e0; font-size:12px; white-space:nowrap; border-radius:5px; }
  #ctx-menu .ctx-item:hover { background:rgba(255,255,255,0.1); }
  #ctx-menu .ctx-sep { height:1px; background:#2a2d4e; margin:4px 0; }
  /* v1.80: Badges secondaires — visibles au hover seulement (sauf pret/hpp/sms) */
  .flag-badges { position:absolute; top:2px; right:2px; display:flex; gap:2px; pointer-events:none; }
  .flag-badge { font-size:11px; line-height:1; opacity:0; transition:opacity 0.15s; }
  .flag-badge-pret, .flag-badge-hpp, .flag-badge-sms, .flag-badge-voiture, .flag-badge-location { opacity:0.92 !important; }
  .badge-ent, .badge-hpp { display:inline-block; color:#1a1a2e; font-size:8px; font-weight:800; padding:1px 4px; border-radius:3px; letter-spacing:0.5px; margin-left:4px; vertical-align:middle; }
  .badge-ent { background:#4ecca3; }
  .badge-hpp { background:#ff9800; animation: hppPulse 2s ease-in-out infinite; }
  @keyframes hppPulse { 0%,100% { opacity:1; } 50% { opacity:0.6; } }
  .case-card:hover .flag-badge { opacity:0.92; }
  /* Actions rapides — rangée horizontale */
  #ctx-menu .ctx-quick-row { display:flex; gap:2px; padding:2px 0; }
  #ctx-menu .ctx-quick-btn { flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; padding:8px 4px; cursor:pointer; border-radius:6px; color:#ccc; font-size:10px; text-align:center; line-height:1.2; }
  #ctx-menu .ctx-quick-btn:hover { background:rgba(255,255,255,0.1); }
  #ctx-menu .ctx-quick-btn .ctx-qi { font-size:18px; }
  /* Flags — grille 3x2 */
  #ctx-menu .ctx-flags-grid { display:grid; grid-template-columns:1fr 1fr; gap:2px; padding:2px 0; }
  #ctx-menu .ctx-flag-btn { display:flex; align-items:center; gap:5px; padding:6px 8px; cursor:pointer; border-radius:5px; color:#999; font-size:11px; transition:all .15s; }
  #ctx-menu .ctx-flag-btn:hover { background:rgba(255,255,255,0.08); color:#ccc; }
  #ctx-menu .ctx-flag-btn.ctx-flag-on { background:rgba(78,204,163,0.15); color:#4ecca3; }
  /* SERTI — rangée compacte */
  #ctx-menu .ctx-serti-row { display:flex; gap:2px; padding:2px 0; }
  #ctx-menu .ctx-serti-btn { flex:1; display:flex; align-items:center; justify-content:center; gap:4px; padding:7px 4px; cursor:pointer; border-radius:5px; color:#90caf9; font-size:11px; white-space:nowrap; }
  #ctx-menu .ctx-serti-btn:hover { background:rgba(144,202,249,0.12); }
  #ctx-menu .ctx-group-title { padding:4px 8px 2px; font-size:9px; color:#778; text-transform:uppercase; letter-spacing:0.8px; font-weight:700; }
  /* Note card — style post-it Sharpie */
  .case-card.card-note {
    border-left:3px solid #d4b830 !important; border-top:none !important; border-right:none !important; border-bottom:none !important;
    background: linear-gradient(160deg, #f7e87d 0%, #f0dc5a 50%, #e8d44d 100%) !important;
    color:#2a2200 !important; font-style:normal;
    font-family:'Permanent Marker', 'Marker Felt', 'Comic Sans MS', cursive;
    box-shadow: 2px 3px 7px rgba(0,0,0,0.35), inset 0 -1px 2px rgba(0,0,0,0.08);
    position:relative; padding:6px 8px !important;
  }
  .case-card.card-note::after { content:''; position:absolute; top:0; right:0; width:12px; height:12px; background:linear-gradient(135deg, transparent 50%, rgba(0,0,0,0.06) 50%, #ddc940 52%); pointer-events:none; }
  .case-card.card-note .customer, .case-card.card-note .complaint, .case-card.card-note .unit { color:#3a3000 !important; }
  .case-card.card-note .complaint { font-size:12px; }
  .case-card.card-note .unit span { color:#5a4800 !important; background:transparent !important; }
  /* Post-it icon for comments */
.note-badge { position:absolute; top:3px; left:3px; font-size:10px; line-height:1; pointer-events:auto; cursor:pointer; opacity:0.8; }
/* v3.533: badge vieillissement sidebar */
.age-badge { font-size:9px; font-weight:bold; padding:0 4px; border-radius:3px; margin-left:3px; }
.age-badge.age-yellow { background:#f0c040; color:#1a1a2e; }
.age-badge.age-orange { background:#e67e22; color:#fff; }
.age-badge.age-red { background:#e94560; color:#fff; }
/* Move-to mini calendar */
.mt-cal { font-size:12px; color:#ccc; }
.mt-cal table { width:100%; border-collapse:collapse; }
.mt-cal th { font-size:10px; color:#888; padding:2px; text-align:center; }
.mt-cal td { text-align:center; padding:4px 2px; cursor:pointer; border-radius:4px; }
.mt-cal td:hover { background:#2a3a5e; }
.mt-cal td.today { border:1px solid #5dade2; }
.mt-cal td.selected { background:#e94560; color:#fff; }
.mt-cal td.other-month { color:#555; }
.mt-cal .mt-nav { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.mt-cal .mt-nav button { background:none; border:none; color:#5dade2; cursor:pointer; font-size:16px; padding:2px 8px; }
.mt-cal .mt-nav span { font-size:13px; font-weight:bold; }
/* Toast notification */
  .toast { position:fixed; bottom:20px; right:20px; background:var(--accent-red); color:#fff; padding:10px 18px; border-radius:6px; font-size:13px; z-index:var(--z-popup-top); opacity:0; transition:opacity 0.3s; pointer-events:none; max-width:350px; white-space:pre-line; }
  .toast.show { opacity:1; }

  /* v1.80: Empty state calendrier */
  .empty-week-state { display:none; grid-column:1/-1; text-align:center; padding:60px 20px; color:#667; }
  .empty-week-state.visible { display:block; }
  .empty-week-state .ews-icon { font-size:40px; margin-bottom:12px; opacity:0.5; }
  .empty-week-state .ews-title { font-size:15px; color:#889; margin-bottom:6px; font-weight:600; }
  .empty-week-state .ews-sub { font-size:12px; color:#556; }
  

@media (max-width: 768px) {
  .sidebar {
    display: block !important;
    position: fixed; top: 45px; left: 0; bottom: 0;
    width: 280px; z-index: 900;
    transform: translateX(-100%);
    transition: transform 0.25s ease;
    overflow-y: auto;
  }
  /* Better calendar layout on mobile - default to day view */
  .calendar { min-width: auto !important; }
  .calendar-wrapper { overflow-x: auto; }
  /* Header compact */
  .header { padding: 6px 8px; }
  .header h1 { font-size: 13px; }
  #btnMenu { display: flex !important; }
  /* Edge nav zones bigger on mobile */
  #edgeNavLeft, #edgeNavRight { width: 36px; }
  /* Bigger touch targets for cards */
  .case-card { padding: 8px 10px; margin-bottom: 5px; min-height: 44px; }
}
@media (min-width: 769px) {
  #btnMenu { display: none !important; }
}


/* v1.16: 3-dot menu visible on touch */
@media (pointer: coarse) {
  .case-card .card-actions { display: flex !important; }
  .case-card .card-actions .btn-ctx {
    min-width: 28px; min-height: 28px;
    display: flex; align-items: center; justify-content: center;
    font-size: 16px; color: #888;
  }
}


/* v1.16: Day view mobile fixes */
@media (max-width: 768px) {
  .dv-header { font-size: 16px; padding: 12px 16px; white-space: nowrap; overflow: visible; }
  .day-view-container { width: 100%; }
  .dv-row { min-height: 65px; }
  .dv-cell.cal-cell { min-height: 65px; }

  /* Header mobile en 3 rangées : (1) burger+logo+h1, (2) week-nav+filtre,
     (3) search+IA+user. flex-start évite space-between qui étalait la rangée 1. */
  .header {
    padding: 4px 8px !important;
    flex-wrap: wrap !important;
    justify-content: flex-start !important;
    gap: 4px 6px !important;
    align-items: center !important;
  }
  #btnMenu { order: 1; flex-shrink: 0; }
  .header > img { order: 2; height: 28px !important; margin: 0 !important; flex-shrink: 0; }
  .header h1 { order: 3; flex: 0 1 auto !important; min-width: 0; max-width: 50%; font-size: 12px !important; margin: 0 !important; gap: 4px !important; overflow: hidden; }
  .vigie-pill { order: 4; flex-shrink: 0; margin-left: auto !important; }
  #userBadge { order: 6; flex-shrink: 0; }
  #mechanicsPanel, #ubityPresencePanel, #punchDoneBadge,
  .header-right .btn-voice, .header-right #statusDot { display: none !important; }
  .version-badge { font-size: 10px !important; padding: 2px 6px !important; }
  .header-right {
    order: 6 !important;
    width: 100% !important;
    flex: 1 1 100% !important;
    flex-basis: 100% !important;
    flex-wrap: wrap !important;
    justify-content: flex-start !important;
    gap: 4px 6px !important;
    margin-top: 2px;
  }
  .week-nav { gap: 2px !important; flex-shrink: 0; }
  .week-nav button { padding: 4px 6px !important; font-size: 12px !important; min-width: 28px; min-height: 30px; }
  .week-label { font-size: 11px !important; min-width: 80px !important; padding: 0 2px; }
  .toggle-ferme-wrap { flex-shrink: 0; }
  .toggle-ferme-wrap select { font-size: 10px !important; padding: 3px 4px !important; }
  #globalSearchWrap { flex: 1 1 100px; min-width: 100px; max-width: none; }
  #globalSearchInput { font-size: 12px; padding: 4px 0; }
}


/* v1.16: Day view spans full calendar grid */
.day-view-container {
  grid-column: 1 / -1 !important;
  width: 100% !important;
}


/* v1.17: Mobile notes modal */
#notesModal {
  display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.7); z-index: var(--z-modal-tall); justify-content: center; align-items: center;
}
#notesModal.open { display: flex; }
#notesModalBox {
  background: #16213e; border-radius: 10px; padding: 20px; width: 380px; max-width: 92vw;
  border: 1px solid #5dade2;
}
#notesModalTitle { color: #5dade2; font-size: 15px; font-weight: bold; margin-bottom: 12px; }
#notesModalTA {
  width: 100%; height: 120px; background: #1a1a2e; color: #ccc; border: 1px solid #333;
  border-radius: 6px; padding: 8px 10px; font-size: 14px; resize: vertical;
  font-family: inherit; line-height: 1.5;
}
#notesModalTA:focus { outline: none; border-color: #5dade2; background: #1e2a45; }
#notesModalActions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 14px; }
#notesModalActions button {
  padding: 8px 18px; border: none; border-radius: 5px; cursor: pointer; font-size: 13px;
}
#notesModalSave { background: #4ecca3; color: #1a1a2e; font-weight: bold; }
#notesModalClose { background: #333; color: #e0e0e0; }

/* v1.17: Hint for notes access on mobile */
@media (pointer: coarse) {
  .cal-header:not(:first-child)::after {
    content: ' \1F4CB';
    font-size: 10px;
    opacity: 0.4;
  }
}
.trash-modal-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.6); z-index:var(--z-popup-top); justify-content:center; align-items:center; }
.trash-modal-overlay.active { display:flex; }
.trash-modal { background:#1a1a2e; border-radius:12px; padding:20px; width:90%; max-width:500px; max-height:70vh; overflow-y:auto; border:1px solid var(--border-accent); }
.trash-modal h2 { color:var(--accent-blue); margin:0 0 15px; font-size:16px; }
.trash-item { display:flex; justify-content:space-between; align-items:center; padding:10px; margin:5px 0; background:#16213e; border-radius:8px; }
.trash-item-info { flex:1; }
.trash-item-info .ti-label { color:#fff; font-weight:bold; font-size:13px; }
.trash-item-info .ti-date { color:#888; font-size:11px; }
.trash-restore-btn { background:#4ecca3; color:#fff; border:none; padding:6px 12px; border-radius:6px; cursor:pointer; font-size:12px; }
.trash-restore-btn:hover { background:#3ba882; }
.trash-empty { color:#888; text-align:center; padding:20px; }

/* === MODULE CHAT UNIFIÉ v1.92 === */
#chatBubble { display:none !important; }
#chatBubble:hover { transform:scale(1.08); box-shadow:0 6px 20px rgba(91,141,239,0.5); }
#chatBubble.has-unread { animation:chatPulse 2s infinite; }
@keyframes chatPulse { 0%,100% { box-shadow:0 4px 16px rgba(91,141,239,0.35); } 50% { box-shadow:0 4px 24px rgba(91,141,239,0.7), 0 0 0 8px rgba(91,141,239,0.12); } }
.chat-badge { position:absolute; top:-4px; right:-4px; background:#e94560; color:#fff; font-size:11px; font-weight:bold; min-width:20px; height:20px; border-radius:10px; display:flex; align-items:center; justify-content:center; padding:0 5px; box-shadow:0 2px 8px rgba(233,69,96,0.5); }
.chat-badge.hidden { display:none; }
@keyframes badgePop { from { transform:scale(0); } to { transform:scale(1); } }
@keyframes chatSlideUp { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes msgFadeIn { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:translateY(0); } }
/* Hub principal */
#chatHub { display:none; position:fixed; bottom:44px; right:20px; width:400px; max-height:560px; background:#1c1f38; border:1px solid #3a3f6e; border-radius:10px; z-index:var(--z-floating); flex-direction:column; overflow:hidden; box-shadow:0 12px 40px rgba(0,0,0,0.6); animation:chatSlideUp 0.25s ease; }
#chatHub.open { display:flex; }
.hub-tabs { display:flex; background:#1a1e2e; flex-shrink:0; }
.hub-tab { flex:1; padding:10px 6px; text-align:center; font-size:12px; font-weight:600; color:#666; cursor:pointer; border-bottom:2px solid transparent; transition:color 0.15s, border-color 0.15s; position:relative; user-select:none; }
.hub-tab:hover { color:#aaa; }
.hub-tab.active { color:#8ab4f8; border-bottom-color:#5b8def; }
.hub-tab .tab-badge { position:absolute; top:4px; right:12px; background:#e94560; color:#fff; font-size:9px; font-weight:700; min-width:16px; height:16px; border-radius:8px; display:flex; align-items:center; justify-content:center; padding:0 4px; }
.hub-content { flex:1; overflow:hidden; display:flex; flex-direction:column; }
.hub-pane { display:none; flex:1; flex-direction:column; overflow:hidden; }
.hub-pane.active { display:flex; }
/* Header commun */
.msg-header { display:flex; align-items:center; justify-content:space-between; padding:10px 14px; background:linear-gradient(180deg,#232946 0%,#1c1f38 100%); border-bottom:1px solid #3a3f6e; cursor:grab; user-select:none; flex-shrink:0; }
.msg-header:active { cursor:grabbing; }
.msg-header h3 { margin:0; font-size:13px; font-weight:700; letter-spacing:0.3px; color:#8ab4f8; }
.msg-header button { background:none; border:none; color:#555; font-size:18px; cursor:pointer; padding:0 4px; line-height:1; }
.msg-header button:hover { color:#8ab4f8; }
/* Zone messages */
.msg-list { flex:1; overflow-y:auto; padding:8px 10px; display:flex; flex-direction:column; gap:4px; min-height:180px; max-height:380px; background:#131820; scroll-behavior:smooth; }
.msg-date-sep { text-align:center; font-size:9px; color:#444; margin:10px 0 4px; text-transform:uppercase; letter-spacing:1px; }
/* Bulles communes */
.msg-bubble { max-width:82%; padding:8px 12px; border-radius:14px; font-size:13px; line-height:1.45; word-wrap:break-word; }
.msg-bubble .msg-sender { font-size:10px; font-weight:600; margin-bottom:2px; color:#8ab4f8; }
.msg-bubble .msg-time { font-size:9px; color:#3a3f4b; margin-top:3px; text-align:right; }
.msg-bubble.msg-in { align-self:flex-start; background:#1c2333; color:#d0d7de; border-bottom-left-radius:4px; border:1px solid #283040; }
.msg-bubble.msg-out { align-self:flex-end; background:linear-gradient(135deg,rgba(91,141,239,0.18),rgba(91,141,239,0.08)); color:#e6e6e6; border-bottom-right-radius:4px; border:1px solid rgba(91,141,239,0.22); }
.msg-bubble.msg-out .msg-sender { color:#c4a7f7; }
.msg-bubble.msg-new { animation:msgFadeIn 0.3s ease; }
/* Variante SMS client */
.msg-bubble.sms-client-in { background:#1c2333; border-color:#283040; }
.msg-bubble.sms-client-out { background:#1565c0; color:#fff; border-color:rgba(21,101,192,0.4); }
.msg-bubble.sms-client-out .msg-time { color:rgba(255,255,255,0.4); }
.msg-bubble.sms-client-in .msg-time { color:#666; }
/* Variante SMS mécanicien */
.msg-bubble.sms-mech-in { background:#16213e; border-color:#2a4a6a; }
.msg-bubble.sms-mech-out { background:#1a3a1a; border-color:#2d5a2d; }
.msg-bubble.sms-mech-out .msg-sender { color:#66bb6a; }
/* Input commun */
.msg-input-area { border-top:1px solid #283040; background:#131820; padding:8px 10px; flex-shrink:0; }
.msg-input-bar { display:flex; align-items:flex-end; gap:6px; }
.msg-input-bar textarea { flex:1; padding:8px 12px; background:#161b22; border:1px solid #30363d; border-radius:16px; color:#d0d7de; font-size:13px; outline:none; resize:none; max-height:80px; min-height:34px; line-height:1.35; font-family:inherit; }
.msg-input-bar textarea:focus { border-color:#5b8def; }
.msg-input-bar .msg-btn { width:32px; height:32px; border-radius:50%; border:none; color:#fff; font-size:14px; cursor:pointer; display:flex; align-items:center; justify-content:center; flex-shrink:0; transition:opacity 0.15s; }
.msg-input-bar .msg-btn:hover { opacity:0.8; }
.msg-btn-send { background:linear-gradient(135deg,#5b8def,#3a6fd8); }
.msg-btn-send.mech { background:#4ecca3; }
/* Réponses rapides */
.quick-replies { display:flex; flex-wrap:wrap; gap:4px; padding:4px 10px; }
.quick-reply-btn { background:#161b22; border:1px solid #30363d; color:#aaa; font-size:11px; padding:4px 10px; border-radius:12px; cursor:pointer; transition:border-color 0.15s, color 0.15s; }
.quick-reply-btn:hover { border-color:#5b8def; color:#e0e0e0; }
.quick-reply-btn.mech:hover { border-color:#4ecca3; }
/* Liste conversations hub */
.conv-list { flex:1; overflow-y:auto; }
.conv-item { display:flex; align-items:center; gap:10px; padding:10px 14px; cursor:pointer; border-bottom:1px solid #1c2333; transition:background 0.15s; }
.conv-item:hover { background:#1c2333; }
.conv-item .conv-avatar { width:36px; height:36px; border-radius:50%; background:#283040; display:flex; align-items:center; justify-content:center; font-size:16px; flex-shrink:0; color:#8ab4f8; }
.conv-item .conv-info { flex:1; min-width:0; }
.conv-item .conv-name { font-size:12px; font-weight:600; color:#e0e0e0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.conv-item .conv-preview { font-size:11px; color:#666; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; margin-top:2px; }
.conv-item .conv-meta { text-align:right; flex-shrink:0; }
.conv-item .conv-time { font-size:9px; color:#555; }
.conv-item .conv-unread { background:#e94560; color:#fff; font-size:9px; font-weight:700; min-width:18px; height:18px; border-radius:9px; display:flex; align-items:center; justify-content:center; margin-top:4px; margin-left:auto; }
.conv-item.mech .conv-avatar { background:rgba(78,204,163,0.15); color:#4ecca3; }
/* Fenêtre flottante SMS */
.sms-float { display:none; position:fixed; width:360px; max-height:480px; background:#1c1f38; border-radius:10px; z-index:var(--z-floating-top); flex-direction:column; overflow:hidden; box-shadow:0 12px 40px rgba(0,0,0,0.6); animation:chatSlideUp 0.25s ease; }
.sms-float.open { display:flex; }
.sms-float.client { border:1px solid #3a3f6e; }
.sms-float.mech { border:1px solid #3a3f6e; }
.sms-float.client .msg-header { border-bottom-color:#3a3f6e; }
.sms-float.mech .msg-header { border-bottom-color:#3a3f6e; }
.sms-float.client .msg-header h3 { color:#90caf9; }
.sms-float.mech .msg-header h3 { color:#4ecca3; }
.sms-float.mech .msg-input-area { border-top-color:rgba(78,204,163,0.15); }
.sms-float.mech textarea:focus { border-color:#4ecca3; }
/* Chat équipe — aliases pour renderChatMessages (utilise innerHTML avec anciennes classes) */
.chat-msg { max-width:82%; padding:8px 12px; border-radius:14px; font-size:13px; line-height:1.45; word-wrap:break-word; }
.chat-msg .chat-name { font-size:10px; font-weight:600; margin-bottom:2px; color:#8ab4f8; }
.chat-msg .chat-time { font-size:9px; color:#3a3f4b; margin-top:3px; text-align:right; }
.chat-msg.other { align-self:flex-start; background:#1c2333; color:#d0d7de; border-bottom-left-radius:4px; border:1px solid #283040; }
.chat-msg.mine { align-self:flex-end; background:linear-gradient(135deg,rgba(91,141,239,0.18),rgba(91,141,239,0.08)); color:#e6e6e6; border-bottom-right-radius:4px; border:1px solid rgba(91,141,239,0.22); }
.chat-msg.mine .chat-name { color:#c4a7f7; }
.chat-msg.new-msg { animation:msgFadeIn 0.3s ease; }
.chat-msg .chat-attachment { margin-top:6px; }
.chat-msg .chat-attachment img { max-width:200px; max-height:160px; border-radius:8px; cursor:pointer; transition:opacity 0.15s; }
.chat-msg .chat-attachment img:hover { opacity:0.85; }
.chat-msg .chat-attachment a { color:#8ab4f8; font-size:11px; text-decoration:none; }
/* Chat équipe — éléments spécifiques */
.chat-input-area { border-top:1px solid #283040; background:#131820; padding:6px 10px; }
.chat-input-area.drag-over { background:#1a2035; border-top-color:#5b8def; }
.chat-emoji-picker { display:none; padding:6px; background:#161b22; border:1px solid #30363d; border-radius:10px; margin-bottom:4px; flex-wrap:wrap; gap:2px; max-height:80px; overflow-y:auto; }
.chat-emoji-picker.open { display:flex; }
.chat-emoji-picker span { cursor:pointer; font-size:18px; padding:2px 4px; border-radius:4px; transition:background 0.12s; }
.chat-emoji-picker span:hover { background:#2a3a5e; }
.chat-attach-preview { display:flex; align-items:center; gap:8px; padding:4px 8px; margin-bottom:4px; background:#161b22; border:1px solid #30363d; border-radius:10px; font-size:11px; color:#aaa; }
.chat-attach-preview img { max-width:60px; max-height:40px; border-radius:6px; object-fit:cover; }
.chat-attach-preview .chat-attach-remove { cursor:pointer; color:#e94560; font-weight:bold; margin-left:auto; font-size:14px; }
.chat-load-more { text-align:center; padding:6px; }
.chat-load-more button { background:none; border:1px solid #21262d; color:#666; font-size:11px; padding:4px 14px; border-radius:12px; cursor:pointer; }
.chat-load-more button:hover { border-color:#5b8def; color:#aaa; }
.msg-bubble .msg-attachment { margin-top:6px; }
.msg-bubble .msg-attachment img { max-width:200px; max-height:160px; border-radius:8px; cursor:pointer; transition:opacity 0.15s; }
.msg-bubble .msg-attachment img:hover { opacity:0.85; }
.msg-bubble .msg-attachment a { color:#8ab4f8; font-size:11px; text-decoration:none; }
.msg-bubble .msg-attachment a:hover { text-decoration:underline; }
.chat-bc-link { color:#f0c040; cursor:pointer; font-weight:600; text-decoration:underline; text-decoration-style:dotted; }
.chat-bc-link:hover { color:#8ab4f8; }
@media (max-width: 768px) {
  #chatBubble { width:38px; height:38px; font-size:16px; bottom:14px; right:14px; }
  #chatHub { width:calc(100vw - 16px); right:8px; bottom:66px; max-height:70vh; }
  .sms-float { width:calc(100vw - 16px); left:8px !important; right:8px !important; }
  #activityBubble { width:38px !important; height:38px !important; font-size:15px !important; bottom:14px !important; right:66px !important; }
  #activityPanel { width:calc(100vw - 16px); right:8px; bottom:60px; }
  #activityToast { right:66px; bottom:56px; max-width:calc(100vw - 80px); }
}
.toggle-ferme-wrap { display:flex; align-items:center; gap:6px; margin-right:4px; }
.toggle-ferme-wrap label { color:#aaa; font-size:11px; white-space:nowrap; cursor:pointer; }
.toggle-switch { position:relative; width:36px; height:20px; }
.toggle-switch input { opacity:0; width:0; height:0; }
.toggle-switch .slider { position:absolute; cursor:pointer; top:0; left:0; right:0; bottom:0; background:#444; border-radius:20px; transition:.3s; }
.toggle-switch .slider:before { position:absolute; content:""; height:14px; width:14px; left:3px; bottom:3px; background:#aaa; border-radius:50%; transition:.3s; }
.toggle-switch input:checked + .slider { background:#c0392b; }
.toggle-switch input:checked + .slider:before { transform:translateX(16px); background:#fff; }

/* LOGIN SCREEN v1.76 */
#loginOverlay { position:fixed; top:0; left:0; width:100%; height:100%; background:#1a1a2e; z-index:var(--z-login); display:flex; align-items:center; justify-content:center; }
#loginOverlay.hidden { display:none; }
#loginBox { background:#16213e; border:1px solid #333; border-radius:12px; padding:40px; text-align:center; box-shadow:0 8px 32px rgba(0,0,0,0.5); min-width:280px; }
#loginBox h2 { color:#e94560; margin-bottom:8px; font-size:18px; }
#loginBox p { color:#888; font-size:13px; margin-bottom:20px; }
#loginBox input { width:100%; padding:12px 14px; font-size:14px; background:#2a2a2a; border:2px solid #444; border-radius:8px; color:#fff; outline:none; margin-bottom:10px; box-sizing:border-box; }
#loginBox input:focus { border-color:#e94560; }
#loginBox input.shake { animation: loginShake 0.4s ease; border-color:#ff4444; }
@keyframes loginShake { 0%,100%{transform:translateX(0)} 20%,60%{transform:translateX(-8px)} 40%,80%{transform:translateX(8px)} }
#loginBox button { background:linear-gradient(135deg,#e94560,#c0392b); color:#fff; border:none; padding:12px 28px; border-radius:8px; font-size:14px; font-weight:600; cursor:pointer; width:100%; margin-top:4px; }
#loginBox button:hover { opacity:0.9; }
#loginError { color:#ff6b6b; font-size:12px; margin-top:10px; min-height:18px; }
/* ACTIVITY LOG BUTTON */
#activityBubble { display:none !important; }
#activityBubble:hover { transform:scale(1.08); background:linear-gradient(135deg,#3a4a6e,#2a3a5e); }
#activityPanel { display:none; position:fixed; bottom:44px; right:80px; width:360px; max-height:420px; background:#1c1f38; border:1px solid #3a3f6e; border-radius:10px; z-index:var(--z-floating); flex-direction:column; overflow:hidden; box-shadow:0 12px 40px rgba(0,0,0,0.6); }
#activityPanel.open { display:flex; }
.activity-header { display:flex; align-items:center; justify-content:space-between; padding:10px 14px; background:linear-gradient(180deg,#232946 0%,#1c1f38 100%); border-bottom:1px solid #3a3f6e; cursor:move; user-select:none; }
.activity-header h3 { margin:0; font-size:13px; color:#90caf9; font-weight:700; }
.activity-header button { background:none; border:none; color:#555; font-size:18px; cursor:pointer; }
.activity-list { flex:1; overflow-y:auto; padding:6px 10px; max-height:360px; }
.activity-entry { padding:6px 8px; border-bottom:1px solid #1a2030; font-size:11px; display:grid; grid-template-columns:auto 1fr auto; gap:4px 8px; align-items:center; transition:background 0.15s; }
.activity-entry[data-case-id]:hover { background:rgba(144,202,249,0.1); }
.activity-entry:last-child { border-bottom:none; }
.activity-user { color:#f0c040; font-weight:600; font-size:10px; }
.activity-action { color:#d0d7de; }
.activity-time { color:#555; font-size:9px; white-space:nowrap; }
.activity-detail { grid-column:1/4; color:#888; font-size:10px; margin-top:1px; }
/* LAST ACTIVITY TOAST — persistent above activity button */
#activityToast { position:fixed; bottom:72px; right:60px; background:#1a2030; border:1px solid #3a4a6e; border-radius:10px; padding:8px 28px 8px 12px; font-size:11px; color:#ccc; z-index:var(--z-taskbar); max-width:300px; box-shadow:0 4px 16px rgba(0,0,0,0.5); display:none; cursor:pointer; animation:actToastIn 0.3s ease; line-height:1.4; }
#activityToast.show { display:block; }
#activityToast .at-close { position:absolute; top:4px; right:8px; color:#555; font-size:14px; }
#activityToast .at-close:hover { color:#aaa; }
@keyframes actToastIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }

/* (ancien SMS panel supprimé — v1.92 utilise .sms-float) */

/* v1.90: User dropdown menu */
.user-dropdown { position:fixed; background:var(--bg-secondary); border:1px solid var(--border-accent); border-radius:8px; min-width:245px; max-height:calc(100vh - 72px); overflow-y:auto; box-shadow:var(--shadow-lg); z-index:var(--z-popup-top); animation:dropIn 0.15s ease-out; }
@keyframes dropIn { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }
.user-dropdown .ud-header { padding:10px 14px; border-bottom:1px solid var(--border-subtle); font-size:12px; color:var(--text-secondary); }
.user-dropdown .ud-item { padding:9px 14px; font-size:13px; color:var(--text-primary); cursor:pointer; display:flex; align-items:center; gap:8px; transition:background 0.12s; }
.user-dropdown .ud-item:hover { background:rgba(78,204,163,0.1); }
.user-dropdown .ud-sep { height:1px; background:var(--border-subtle); margin:4px 0; }
.user-dropdown .ud-group-title { padding:7px 14px 3px; font-size:10px; color:#888; text-transform:uppercase; letter-spacing:0.5px; font-weight:600; }

/* v1.90: Preferences modal */
.prefs-overlay { display:none; position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,0.7); z-index:var(--z-prefs); justify-content:center; align-items:center; }
.prefs-overlay.active { display:flex; }
.prefs-modal { background:var(--bg-secondary); border:1px solid var(--border-accent); border-radius:12px; width:480px; max-width:92vw; max-height:88vh; overflow-y:auto; box-shadow:var(--shadow-lg); }
.prefs-modal-header { display:flex; align-items:center; justify-content:space-between; padding:16px 20px; border-bottom:1px solid var(--border-subtle); }
.prefs-modal-header h2 { color:var(--accent-blue); font-size:16px; margin:0; }
.prefs-modal-close { background:none; border:none; color:var(--text-muted); font-size:20px; cursor:pointer; padding:4px 8px; border-radius:4px; }
.prefs-modal-close:hover { background:rgba(233,69,96,0.2); color:#e94560; }
.prefs-section { padding:16px 20px; border-bottom:1px solid var(--border-subtle); }
.prefs-section:last-child { border-bottom:none; }
.prefs-section h3 { font-size:13px; color:var(--text-secondary); margin-bottom:12px; text-transform:uppercase; letter-spacing:0.5px; }
.prefs-row { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.prefs-row:last-child { margin-bottom:0; }
.prefs-label { font-size:13px; color:var(--text-primary); }

/* Toggle switch for prefs */
.pref-toggle { position:relative; width:44px; height:24px; cursor:pointer; }
.pref-toggle input { opacity:0; width:0; height:0; }
.pref-toggle .ptgl { position:absolute; top:0; left:0; right:0; bottom:0; background:#333; border-radius:12px; transition:background 0.2s; }
.pref-toggle .ptgl::after { content:''; position:absolute; left:3px; top:3px; width:18px; height:18px; background:#888; border-radius:50%; transition:all 0.2s; }
.pref-toggle input:checked + .ptgl { background:var(--accent-green); }
.pref-toggle input:checked + .ptgl::after { transform:translateX(20px); background:#fff; }

/* Color swatches */
.prefs-colors { display:flex; gap:8px; flex-wrap:wrap; }
.pref-color { width:32px; height:32px; border-radius:50%; cursor:pointer; border:3px solid transparent; transition:all 0.15s; }
.pref-color:hover { transform:scale(1.15); }
.pref-color.selected { border-color:#fff; box-shadow:0 0 8px rgba(255,255,255,0.3); }

/* Radio button group */
.prefs-radio-group { display:flex; gap:6px; }
.pref-radio { padding:6px 14px; border-radius:6px; border:1px solid var(--border-subtle); background:transparent; color:var(--text-secondary); font-size:12px; cursor:pointer; transition:all 0.15s; }
.pref-radio:hover { border-color:var(--accent-green); color:var(--text-primary); }
.pref-radio.selected { background:var(--accent-green); color:#1a1a2e; border-color:var(--accent-green); font-weight:600; }

/* Avatar grid */
.prefs-avatars { display:flex; gap:8px; flex-wrap:wrap; }
.pref-avatar { width:40px; height:40px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:22px; background:rgba(255,255,255,0.05); border:2px solid transparent; cursor:pointer; transition:all 0.15s; }
.pref-avatar:hover { background:rgba(255,255,255,0.12); transform:scale(1.1); }
.pref-avatar.selected { border-color:var(--accent-green); background:rgba(78,204,163,0.15); }

/* Chat avatar preview */
.prefs-chat-preview { background:var(--bg-primary); border-radius:8px; padding:10px 14px; margin-top:10px; }
.prefs-chat-preview .chat-msg-preview { font-size:12px; color:var(--text-secondary); }
.prefs-chat-preview .chat-msg-preview .avatar-emoji { margin-right:4px; }

/* ============ Vigie IA ============ */
/* z-index 900 = deliberately below --z-modal (1000) : le panel est secondaire, les modaux gardent la priorité */
.vigie-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px; border-radius: 999px;
  background: var(--bg-secondary); color: var(--text-primary);
  cursor: pointer; font-size: 13px; user-select: none;
  transition: background 150ms;
}
.vigie-pill:hover { background: #243055; }
.vigie-pill.has-critical { background: #7a1f1f; color: #fff; }
.vigie-pill.has-warning  { background: #8a6b0f; color: #fff; }
.vigie-pill.has-info     { background: #1f4a7a; color: #fff; }
.vigie-pill .count { font-weight: bold; }

#vigiePanel {
  position: fixed; top: 0; right: 0; width: 360px; height: 100vh;
  background: var(--bg-primary); border-left: 1px solid var(--border-accent);
  box-shadow: -4px 0 12px rgba(0,0,0,0.4);
  z-index: 900;
  transform: translateX(100%); transition: transform 200ms ease-out;
  display: flex; flex-direction: column;
}
#vigiePanel.open { transform: translateX(0); }
#vigiePanel .vg-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-bottom: 1px solid var(--border-subtle); font-weight: bold; color: var(--text-primary); }
#vigiePanel .vg-close { background: none; border: none; color: var(--text-primary); font-size: 22px; cursor: pointer; padding: 0 6px; }
#vigiePanel .vg-filters { padding: 8px 12px; display: flex; gap: 6px; flex-wrap: wrap; border-bottom: 1px solid var(--border-subtle); }
#vigiePanel .vg-filter { padding: 3px 10px; border-radius: 999px; background: var(--bg-secondary); color: var(--text-secondary); cursor: pointer; font-size: 12px; }
#vigiePanel .vg-filter.active { background: var(--border-accent); color: #fff; }
#vigiePanel .vg-list { flex: 1; overflow-y: auto; padding: 8px; }
#vigiePanel .vg-empty { padding: 40px 20px; text-align: center; color: var(--text-secondary); }

.vg-card { background: var(--bg-secondary); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; border-left: 3px solid var(--border-subtle); }
.vg-card.pri-3 { border-left-color: #e04444; }
.vg-card.pri-2 { border-left-color: #e0a444; }
.vg-card.pri-1 { border-left-color: #4488e0; }
.vg-card .vg-title { font-weight: 600; font-size: 13px; margin-bottom: 3px; color: var(--text-primary); }
.vg-card .vg-detail { font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; line-height: 1.35; }
.vg-card .vg-meta { font-size: 10px; color: var(--text-secondary); margin-bottom: 6px; opacity: 0.7; }
.vg-card .vg-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.vg-card .vg-actions button { font-size: 11px; padding: 3px 8px; border-radius: 4px; background: var(--bg-primary); color: var(--text-primary); border: 1px solid var(--border-subtle); cursor: pointer; }
.vg-card .vg-actions button:hover { background: #243055; }
.vg-card.vg-highlight { animation: vgFlash 1s ease-out; }
@keyframes vgFlash { 0% { background: var(--border-accent); } 100% { background: var(--bg-secondary); } }

/* Badge tuile BC avec alerte Vigie active */
.case-card.has-vigie-alert { position: relative; }
.vigie-card-alert-badge {
  position: absolute; top: 4px; right: 4px; z-index: 6;
  min-width: 22px; height: 18px; padding: 0 6px;
  border: 1px solid rgba(255,255,255,0.34); border-radius: 4px;
  background: #b91c1c; color: #fff;
  font-size: 9px; line-height: 16px; font-weight: 800;
  cursor: pointer; box-shadow: 0 2px 8px rgba(0,0,0,0.36);
}
.vigie-card-alert-badge.pri-2 { background: #b7791f; }
.vigie-card-alert-badge.pri-1 { background: #2563eb; }
.vigie-card-alert-badge:hover { filter: brightness(1.14); }
.vigie-card-alert-menu {
  position: fixed; z-index: 100000; width: 330px; max-height: min(520px, calc(100vh - 20px));
  overflow-y: auto; background: #181b32; border: 1px solid #3a3f6e; border-radius: 8px;
  box-shadow: 0 16px 44px rgba(0,0,0,0.62); padding: 8px; color: #e8e8e8;
  font: 12px/1.35 system-ui, -apple-system, Segoe UI, sans-serif;
}
.vigie-card-alert-menu-title { font-weight: 800; font-size: 13px; padding: 3px 4px 8px; color: #fff; }
.vigie-card-alert-menu-row { border-left: 3px solid #2563eb; background: #202541; border-radius: 5px; padding: 8px; margin-bottom: 7px; }
.vigie-card-alert-menu-row.pri-2 { border-left-color: #b7791f; }
.vigie-card-alert-menu-row.pri-3 { border-left-color: #b91c1c; }
.vigie-card-alert-menu-alert-title { font-weight: 750; color: #f8fafc; margin-bottom: 3px; }
.vigie-card-alert-menu-detail { color: #cbd5e1; font-size: 11px; margin-bottom: 7px; white-space: pre-wrap; }
.vigie-card-alert-menu-actions { display: flex; gap: 5px; flex-wrap: wrap; }
.vigie-card-alert-menu-actions button {
  border: 1px solid #3a3f6e; background: #111529; color: #e5e7eb; border-radius: 4px;
  padding: 3px 8px; font: inherit; font-size: 11px; cursor: pointer;
}
.vigie-card-alert-menu-actions button.primary { background: #3454b4; border-color: #5b8def; color: #fff; }
.vigie-card-alert-menu-actions button:hover { background: #273158; }
