
  :root {
    --bg: #f4f3f0;
    --surface: #ffffff;
    --surface2: #f9f8f6;
    --border: #e2e0da;
    --border2: #cccac3;
    --text: #1a1916;
    --text2: #5a5850;
    --text3: #9a9890;
    --accent: #1a3a5c;
    --accent-light: #e8edf3;
    --green: #1e6b45;
    --green-light: #e6f2ec;
    --amber: #8a5a00;
    --amber-light: #fdf3e0;
    --red: #8a1f1f;
    --red-light: #fde8e8;
    --blue: #1a4a7a;
    --blue-light: #e6eef7;
    --mono: 'IBM Plex Mono', monospace;
    --sans: 'IBM Plex Sans', sans-serif;
  }

  * { box-sizing: border-box; margin: 0; padding: 0; }
  body { font-family: var(--sans); background: var(--bg); color: var(--text); font-size: 13px; line-height: 1.5; min-height: 100vh; }

  /* HEADER */
  .header {
    background: #023F75;
    color: #fff;
    padding: 0 24px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 52px;
    border-bottom: 2px solid rgba(0,0,0,0.25);
  }
  .header-left { display: flex; align-items: center; gap: 16px; }

  /* ── BRAND ── */
  .brand { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
  .brand-logo {
    width: 30px; height: 30px; border-radius: 7px;
    box-shadow: 0 1px 4px rgba(0,0,0,.35);
    flex-shrink: 0;
  }
  .brand-text { display: flex; flex-direction: column; gap: 1px; line-height: 1; }
  .brand-name {
    font-family: var(--sans); font-size: 13px; font-weight: 700;
    letter-spacing: 0.06em; color: #fff; text-transform: uppercase;
  }
  .brand-name span { font-weight: 300; opacity: 0.55; margin-left: 2px; }
  .brand-version {
    font-family: var(--mono); font-size: 9px;
    color: rgba(255,255,255,.3); letter-spacing: 0.05em;
  }
  .brand-divider { width: 1px; height: 22px; background: rgba(255,255,255,.2); flex-shrink: 0; }
  .nav-tabs { display: flex; gap: 3px; }
  .nav-tab {
    padding: 6px 13px; border-radius: 5px; font-size: 12px; font-weight: 500;
    color: #fff; cursor: pointer; transition: all 0.15s; letter-spacing: 0.02em;
    border: 1px solid rgba(255,255,255,0.25); background: rgba(255,255,255,0.1);
  }
  .nav-tab:hover { background: rgba(255,255,255,0.2); border-color: rgba(255,255,255,0.4); }
  .nav-tab.active {
    color: #023F75;
    background: #fff;
    border-color: #fff;
    font-weight: 600;
    box-shadow: 0 1px 4px rgba(0,0,0,.2);
  }
  .header-right { display: flex; align-items: center; gap: 12px; }
  .week-nav { display: flex; align-items: center; gap: 8px; }
  .week-nav button {
    width: 28px; height: 28px; border: 1px solid rgba(255,255,255,0.2);
    background: rgba(255,255,255,0.08); color: #fff; border-radius: 4px;
    cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center;
    transition: background 0.15s;
  }
  .week-nav button:hover { background: rgba(255,255,255,0.18); }
  .week-label { font-family: var(--mono); font-size: 11px; color: rgba(255,255,255,0.7); white-space: nowrap; }
  .btn-add {
    padding: 6px 14px; background: rgba(255,255,255,0.15); border: 1px solid rgba(255,255,255,0.25);
    color: #fff; border-radius: 4px; font-size: 12px; font-weight: 500; cursor: pointer;
    font-family: var(--sans); transition: background 0.15s; letter-spacing: 0.02em;
  }
  .btn-add:hover { background: rgba(255,255,255,0.25); }

  /* TOOLBAR */
  .toolbar {
    background: var(--surface); border-bottom: 1px solid var(--border);
    padding: 8px 24px; display: flex; align-items: center; gap: 16px;
  }
  .filter-group { display: flex; align-items: center; gap: 6px; }
  .filter-label { font-size: 11px; color: var(--text3); text-transform: uppercase; letter-spacing: 0.06em; white-space: nowrap; }
  .chip {
    padding: 4px 10px; border: 1px solid var(--border2); border-radius: 20px;
    font-size: 11px; color: var(--text2); cursor: pointer; transition: all 0.15s;
    background: var(--surface); white-space: nowrap;
  }
  .chip:hover { border-color: var(--accent); color: var(--accent); }
  .chip.active { background: var(--accent-light); border-color: var(--accent); color: var(--accent); font-weight: 500; }
  .toolbar-sep { width: 1px; height: 20px; background: var(--border); margin: 0 4px; }
  .legend { display: flex; align-items: center; gap: 12px; margin-left: auto; }
  .legend-item { display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--text3); }
  .legend-dot { width: 10px; height: 10px; border-radius: 2px; }

  /* PANELS */
  .panel { display: none; }
  .panel.active { display: block; }

  /* GANTT */
  .gantt-wrap { overflow-x: auto; }
  .gantt {
    display: grid;
    grid-template-columns: 200px 1fr;
    min-width: 900px;
  }

  /* Gantt header */
  .gantt-header-spacer {
    background: var(--surface); border-bottom: 1px solid var(--border);
    border-right: 1px solid var(--border2); padding: 10px 16px;
    display: flex; align-items: flex-end;
  }
  .gantt-header-spacer span { font-size: 11px; color: var(--text3); text-transform: uppercase; letter-spacing: 0.06em; }
  .gantt-days {
    background: var(--surface); border-bottom: 1px solid var(--border);
    display: grid; grid-template-columns: repeat(7, 1fr);
  }
  .gantt-day {
    padding: 8px 4px 6px; text-align: center; border-right: 1px solid var(--border);
    font-size: 11px; color: var(--text3);
  }
  .gantt-day.today { background: var(--accent-light); }
  .gantt-day .day-name { text-transform: uppercase; letter-spacing: 0.05em; font-size: 10px; }
  .gantt-day .day-num {
    font-family: var(--mono); font-size: 16px; font-weight: 500; color: var(--text);
    line-height: 1.2; margin-top: 2px;
  }
  .gantt-day.today .day-num { color: var(--accent); }

  /* Gantt sections */
  .section-header-left {
    background: var(--surface2); border-bottom: 1px solid var(--border);
    border-right: 1px solid var(--border2);
    padding: 6px 16px; display: flex; align-items: center; gap: 8px;
  }
  .section-header-right {
    background: var(--surface2); border-bottom: 1px solid var(--border);
    display: grid; grid-template-columns: repeat(7, 1fr);
  }
  .section-header-right div { border-right: 1px solid var(--border); }
  .section-label { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text3); }
  .section-icon { font-size: 12px; }

  /* Gantt rows */
  .gantt-row-left {
    background: var(--surface); border-bottom: 1px solid var(--border);
    border-right: 1px solid var(--border2);
    padding: 0 16px; display: flex; align-items: center; gap: 10px;
    min-height: 52px;
  }
  .gantt-row-right {
    background: var(--surface); border-bottom: 1px solid var(--border);
    display: grid; grid-template-columns: repeat(7, 1fr);
    position: relative; min-height: 52px;
  }
  .gantt-cell { border-right: 1px solid var(--border); position: relative; }
  .gantt-row-left:hover, .gantt-row-left:hover + .gantt-row-right { background: #fafaf8; }

  /* Resource labels */
  .resource-icon {
    width: 32px; height: 32px; border-radius: 6px; display: flex; align-items: center;
    justify-content: center; font-size: 14px; flex-shrink: 0;
    font-family: var(--mono); font-weight: 500; font-size: 11px;
  }
  .resource-icon.heli { background: var(--blue-light); color: var(--blue); }
  .resource-icon.pilot { background: var(--green-light); color: var(--green); }
  .resource-name { font-size: 12px; font-weight: 500; color: var(--text); }
  .resource-sub { font-size: 10px; color: var(--text3); margin-top: 1px; font-family: var(--mono); }

  /* Status badges */
  .status-badge {
    font-size: 10px; font-weight: 500; padding: 3px 8px; border-radius: 4px;
    letter-spacing: 0.02em; white-space: nowrap;
  }
  .s-ok      { background: var(--green-light);  color: var(--green); }
  .s-mel     { background: var(--amber-light);  color: var(--amber); }
  .s-maint   { background: var(--red-light);    color: var(--red); }
  .s-alert   { background: var(--red-light);    color: var(--red); }
  .s-warn    { background: var(--amber-light);  color: var(--amber); }
  .s-option   { background: #fff7ed; color: #ea580c; }
  .s-confirm  { background: #f0fdf4; color: #16a34a; }
  .s-attente  { background: #fefce8; color: #ca8a04; }
  .s-realise  { background: #eff6ff; color: #2563eb; }
  .s-facture  { background: #f5f3ff; color: #7c3aed; }
  .s-cancel   { background: var(--red-light); color: var(--red); }
  /* legacy aliases */
  .s-draft    { background: #fff7ed; color: #ea580c; }
  .s-invoice  { background: #f5f3ff; color: #7c3aed; }
  .s-closed   { background: var(--green-light); color: var(--green); }
  /* Référence modale */
  .modal-ref  { font-size: 9px; font-family: var(--mono); color: var(--text3); opacity: 0.45; letter-spacing: .04em; flex-shrink: 0; user-select: none; }

  /* Gantt blocks */
  .g-block {
    position: absolute; top: 6px; bottom: 6px; border-radius: 4px;
    display: flex; align-items: center; padding: 0 8px; font-size: 10px; font-weight: 500;
    cursor: pointer; transition: filter 0.15s; overflow: hidden; white-space: nowrap;
    z-index: 2;
  }
  .g-block:hover { filter: brightness(0.93); }
  .g-block.mission { background: var(--accent); color: #fff; }
  .g-block.mission-vip { background: #2d5986; color: #fff; }
  .g-block.maintenance { background: var(--red-light); color: var(--red); border: 1px solid #f0b0b0; }
  .g-block.mel { background: var(--amber-light); color: var(--amber); border: 1px dashed #d4a44c; }
  .g-block.standby { background: var(--green-light); color: var(--green); border: 1px solid #a0d4b8; }
  .g-block.repos { background: var(--surface2); color: var(--text3); border: 1px solid var(--border); }
  .g-block.ftl-warn { background: #fff3e0; color: #8a5a00; border: 1px solid #f0c060; }

  /* FTL bar */
  .ftl-bar-wrap { display: flex; align-items: center; gap: 6px; margin-top: 2px; }
  .ftl-bar { height: 3px; border-radius: 2px; background: var(--border); flex: 1; overflow: hidden; }
  .ftl-fill { height: 100%; border-radius: 2px; transition: width 0.3s; }
  .ftl-ok { background: var(--green); }
  .ftl-warn { background: #d4a44c; }
  .ftl-danger { background: var(--red); }
  .ftl-label { font-family: var(--mono); font-size: 9px; color: var(--text3); white-space: nowrap; }

  /* CALENDAR VIEW */
  .cal-wrap { padding: 0; overflow: hidden; }
  .cal-grid {
    display: grid; grid-template-columns: 80px repeat(7, 1fr);
    border-top: 2px solid var(--border2); border-bottom: 2px solid var(--border2);
    overflow: hidden; background: var(--surface);
  }
  .cal-header { background: #eeecea; padding: 10px 8px; text-align: center; border-bottom: 2px solid var(--border2); border-right: 1px solid var(--border2); }
  .cal-header:last-child { border-right: none; }
  .cal-header .ch-name { font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text2); font-weight: 700; }
  .cal-header .ch-date { font-family: var(--mono); font-size: 20px; font-weight: 700; color: var(--text); line-height: 1.2; margin-top: 2px; }
  .cal-header.today .ch-date { color: var(--accent); }
  .cal-header.today { background: #d8e4f0; border-bottom-color: var(--accent); }
  .time-col { border-right: 2px solid var(--border2); background:#f0eee9; }
  .time-slot {
    height: calc((100vh - 188px) / 22); border-bottom: 1px solid var(--border2); padding: 4px 8px;
    font-family: var(--mono); font-size: 10px; font-weight: 600; color: var(--text2); text-align: right;
    display: flex; align-items: flex-start; justify-content: flex-end;
  }
  .cal-day-col { border-right: 1px solid var(--border2); position: relative; }
  .cal-day-col:last-child { border-right: none; }
  .cal-slot { height: calc((100vh - 188px) / 22); border-bottom: 1px solid #dedad3; position: relative; }
  .cal-slot:nth-child(odd) { background: rgba(0,0,0,.012); }
  .cal-event {
    position: absolute; left: 3px; right: 3px; border-radius: 4px;
    padding: 3px 6px; font-size: 10px; font-weight: 600; cursor: pointer;
    transition: filter 0.15s; overflow: hidden; z-index: 2;
    box-shadow: 0 1px 3px rgba(0,0,0,.18);
  }
  .cal-event:hover { filter: brightness(0.91); box-shadow: 0 2px 6px rgba(0,0,0,.25); }
  .cal-event.mission { background: var(--accent); color: #fff; border-left: 3px solid #0d2040; }
  .cal-event.mission-envelope { background: rgba(26,58,92,0.1); color: var(--accent); border: 1px dashed var(--accent); z-index: 1; }
  .cal-event.leg-pax { background: #166534; color: #fff; left: 30%; right: 3px; z-index: 3; border-left: 3px solid #0d4023; }
  .cal-event.ground { background: #d1fae5; color: #065f46; border: 1px solid #6ee7b7; border-left: 3px solid #059669; }
  .cal-event.maintenance { background: #fee2e2; color: #7f1d1d; border: 1px solid #fca5a5; border-left: 3px solid #ef4444; }
  .cal-event.training { background: #dbeafe; color: #1e3a8a; border: 1px solid #93c5fd; border-left: 3px solid #3b82f6; }
  .cal-event-name { font-size: 10px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .cal-event-sub { font-size: 9px; opacity: 0.85; font-weight: 500; }

  /* Navigation plage horaire */
  .cal-hour-nav {
    background: none; border: 1px solid var(--border2); border-radius: 3px;
    color: var(--text2); font-size: 9px; width: 22px; height: 16px;
    cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0;
    transition: background .12s, color .12s;
  }
  .cal-hour-nav:hover:not(:disabled) { background: var(--accent); color: #fff; border-color: var(--accent); }
  .cal-hour-nav:disabled { opacity: .3; cursor: default; }
  .cal-hour-range { font-family: var(--mono); font-size: 9px; color: var(--text3); white-space: nowrap; }

  /* Indicateurs vols hors-plage */
  .ch-name-row { display: flex; align-items: center; justify-content: center; gap: 5px; }
  .cal-out-ind {
    font-size: 11px; font-weight: 900; padding: 1px 5px; border-radius: 4px;
    cursor: pointer; line-height: 1.4; animation: cal-pulse 1.4s ease-in-out infinite;
  }
  .cal-out-early { background: #ef4444; color: #fff; box-shadow: 0 0 0 2px #fca5a5; }
  .cal-out-early:hover { background: #b91c1c; box-shadow: none; }
  .cal-out-late  { background: #ef4444; color: #fff; box-shadow: 0 0 0 2px #fca5a5; }
  .cal-out-late:hover  { background: #b91c1c; box-shadow: none; }
  @keyframes cal-pulse {
    0%, 100% { box-shadow: 0 0 0 2px #fca5a5; }
    50%       { box-shadow: 0 0 0 5px rgba(239,68,68,0); }
  }
  .cal-resize-handle {
    position: absolute; bottom: 0; left: 0; right: 0; height: 6px;
    cursor: ns-resize; background: rgba(255,255,255,0.3); border-radius: 0 0 4px 4px;
  }
  .cal-resize-handle:hover { background: rgba(255,255,255,0.6); }
  .cal-resize-handle-top { top: 0; bottom: auto; border-radius: 4px 4px 0 0; }
  .drag-time-label {
    position: fixed; z-index: 9999; background: var(--accent); color: #fff;
    padding: 3px 10px; border-radius: 4px; font-size: 11px; font-weight: 700;
    pointer-events: none; display: none; white-space: nowrap;
    box-shadow: 0 2px 8px rgba(0,0,0,0.3); letter-spacing: 0.3px;
  }
  .resize-time-label {
    position: absolute; bottom: 10px; left: 0; right: 0; text-align: center;
    font-size: 11px; font-weight: 700; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,0.5);
    pointer-events: none; letter-spacing: 0.3px;
  }

  /* STATS BAR */
  .stats-bar {
    display: flex; align-items: center; height: 44px;
    border-bottom: 1px solid var(--border); background: var(--surface);
    padding: 0 8px; gap: 0; flex-shrink: 0;
  }
  .stat-item {
    display: flex; align-items: center; gap: 10px;
    padding: 0 20px; height: 100%; border-right: 1px solid var(--border);
  }
  .stat-item:last-child { border-right: none; }
  .si-icon { font-size: 15px; line-height: 1; }
  .si-body { display: flex; flex-direction: column; }
  .si-val { font-family: var(--mono); font-size: 17px; font-weight: 600; color: var(--text); line-height: 1; }
  .si-lbl { font-size: 9px; color: var(--text3); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 2px; white-space: nowrap; }
  .stat-item.has-warn .si-val { color: var(--amber); }
  .stat-item.has-alert .si-val { color: var(--red); }

  /* PANELS FULL-HEIGHT */
  #panel-calendar { display:none; flex-direction:column; height:calc(100vh - 96px); overflow:hidden }
  #panel-calendar.active { display:flex }
  #panel-appareils { display:none; flex-direction:column; height:calc(100vh - 52px); overflow:hidden }
  #panel-appareils.active { display:flex }
  #panel-dispatch { display:none; flex-direction:column; height:calc(100vh - 52px); overflow:hidden }
  #panel-dispatch.active { display:flex }
  .cal-toolbar { display:flex; align-items:center; gap:8px; padding:7px 16px; border-bottom:1px solid var(--border); flex-shrink:0; background:var(--surface); }
  .cal-week-label { font-family:var(--mono); font-size:12px; font-weight:600; min-width:190px; text-align:center; color:var(--text); }

  /* ALERT BANNER */
  .alert-banner {
    margin: 12px 24px 0; padding: 8px 14px; border-radius: 6px;
    background: var(--amber-light); border: 1px solid #e8c87a;
    display: flex; align-items: center; gap: 10px; font-size: 11px; color: var(--amber);
  }
  .alert-banner.critical { background: var(--red-light); border-color: #e8a0a0; color: var(--red); }
  .alert-banner strong { font-weight: 600; }

  /* MODAL */
  .modal-overlay {
    position: fixed; inset: 0; background: rgba(0,0,0,0.35);
    display: flex; align-items: center; justify-content: center; z-index: 100;
    opacity: 0; pointer-events: none; transition: opacity 0.2s;
  }
  .modal-overlay.open { opacity: 1; pointer-events: all; }
  .modal {
    background: var(--surface); border-radius: 10px; padding: 24px;
    width: 380px; max-width: 95vw; border: 1px solid var(--border);
    transform: translateY(8px); transition: transform 0.2s;
    box-shadow: 0 8px 32px rgba(0,0,0,0.12);
  }
  .modal-overlay.open .modal { transform: translateY(0); }
  .modal-title { font-size: 14px; font-weight: 600; color: var(--text); margin-bottom: 4px; }
  .modal-sub { font-size: 11px; color: var(--text3); margin-bottom: 16px; font-family: var(--mono); }
  .modal-row { display: flex; justify-content: space-between; align-items: center; padding: 7px 0; border-bottom: 1px solid var(--border); }
  .modal-row:last-of-type { border-bottom: none; }
  .modal-key { font-size: 11px; color: var(--text3); }
  .modal-val { font-size: 12px; font-weight: 500; color: var(--text); font-family: var(--mono); }
  .modal-close { float: right; font-size: 18px; color: var(--text3); cursor: pointer; background: none; border: none; line-height: 1; margin-top: -4px; }
  .modal-footer { margin-top: 16px; display: flex; gap: 8px; justify-content: flex-end; }
  .btn-sm {
    padding: 6px 14px; border-radius: 5px; font-size: 12px; font-family: var(--sans); cursor: pointer; font-weight: 500;
  }
  .btn-primary { background: var(--accent); color: #fff; border: none; }
  .btn-secondary { background: var(--surface); color: var(--text2); border: 1px solid var(--border2); }
  .btn-sm:hover { opacity: 0.85; }

  /* MISSIONS PANEL */
  /* FACTURATION PANEL */
  #panel-missions.active { display: flex; flex-direction: column; height: calc(100vh - 52px); }
  .fact-kpi-bar { display:flex;align-items:stretch;border-bottom:2px solid var(--border);flex-shrink:0;background:var(--surface); }
  .fact-kpi-card { flex:0 0 auto;padding:12px 22px;display:flex;flex-direction:column;gap:2px;border-right:1px solid var(--border);min-width:150px;position:relative;overflow:hidden; }
  .fact-kpi-card::before { content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--border2); }
  .fact-kpi-card.kpi-alert::before { background:#ef4444; }
  .fact-kpi-card.kpi-ok::before { background:#22c55e; }
  .fact-kpi-card.kpi-prev::before { background:#94a3b8; }
  .fact-kpi-card.kpi-warn::before { background:#f59e0b; }
  .fact-kpi-card.kpi-warn .fact-kpi-val { color:#d97706; }
  .fact-kpi-val { font-family:var(--mono);font-size:20px;font-weight:700;color:var(--text);line-height:1.2; }
  .fact-kpi-card.kpi-alert .fact-kpi-val { color:#ef4444; }
  .fact-kpi-lbl { font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--text3); }
  .fact-kpi-actions { flex:1;display:flex;align-items:center;justify-content:flex-end;gap:16px;padding:0 20px; }
  .missions-layout { display:flex;flex:1;min-height:0;overflow:hidden; }
  .stat-quick-btn { background:none;border:1px solid var(--border2);border-radius:3px;padding:2px 7px;font-size:10px;cursor:pointer;color:var(--text2);font-family:var(--sans);transition:all .12s;margin-left:5px; }
  .stat-quick-btn:hover { border-color:var(--accent);color:var(--accent);background:var(--accent-light); }
  .missions-list-col { flex: 1; overflow-y: auto; min-width: 0; }
  .missions-detail-col { width: 580px; border-left: 1px solid var(--border); overflow-y: auto; background: var(--surface); flex-shrink: 0; display: flex; flex-direction: column; }
  #missions-detail { flex: 1; display: flex; flex-direction: column; }
  .missions-list-header {
    display: grid; grid-template-columns: 110px 100px 26px 1fr 65px 75px 70px 85px 130px 22px;
    gap: 6px; padding: 7px 16px; background: var(--surface2);
    border-bottom: 2px solid var(--border); font-size: 10px; font-weight: 600;
    text-transform: uppercase; letter-spacing: .06em; color: var(--text3); position: sticky; top: 0; z-index: 2;
  }
  .mission-row {
    display: grid; grid-template-columns: 110px 100px 26px 1fr 65px 75px 70px 85px 130px 22px;
    gap: 6px; padding: 9px 16px; border-bottom: 1px solid var(--border);
    cursor: pointer; align-items: center; transition: background .1s;
  }
  .mission-row:hover { background: var(--surface2); }
  .mission-row.selected { background: var(--accent-light); }
  .mission-ref { font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--accent); }
  .mission-client { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .mission-legs { font-size: 11px; color: var(--text3); text-align: center; }
  .mission-tdv { font-family: var(--mono); font-size: 11px; }
  .mission-montant { font-family: var(--mono); font-size: 11px; }
  .missions-empty { padding: 48px 24px; text-align: center; color: var(--text3); font-size: 13px; }
  .legs-sum-col { display:flex; flex-direction:column; gap:1px; overflow:hidden; }
  .leg-list-item { font-size:10px; font-family:var(--mono); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--text2); line-height:1.5; }
  .leg-need-tdv { color:#d97706; font-weight:600; cursor:pointer; }
  .leg-need-tdv:hover { text-decoration:underline; }
  .warn-legs { font-size:10px; font-weight:600; color:#d97706; white-space:nowrap; }
  .row-delete-btn { background:none; border:none; cursor:pointer; color:var(--text3); font-size:13px; padding:2px; line-height:1; opacity:0.5; transition:opacity .1s; }
  .row-delete-btn:hover { color:var(--red); opacity:1; }
  .mission-detail-section { padding: 14px 20px; border-bottom: 1px solid var(--border); }
  .mission-detail-section:last-child { border-bottom: none; }
  .mission-detail-title { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: .07em; color: var(--text3); margin-bottom: 10px; }
  .mds-header { padding: 8px 12px; border-bottom: 1px solid var(--border); display:flex; align-items:center; gap:8px; background:var(--surface2); }
  .mds-section { padding: 8px 12px; border-bottom: 1px solid var(--border); }
  .mds-title { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--text2); margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px solid var(--border); }
  .mdt-inp { width:100%;padding:4px 8px;border:1px solid var(--border2);border-radius:5px;font-family:var(--sans);font-size:11px;color:var(--text);background:var(--surface2);outline:none;margin-top:2px; }
  .mdt-inp:focus { border-color: var(--accent); }
  .mdt-lbl { font-size:10px;color:var(--text3);display:block;margin-top:5px; }
  .leg-line { display:flex;align-items:center;gap:6px;padding:3px 0;border-bottom:1px solid var(--border);font-size:11px; }
  .leg-line:last-child { border-bottom:none; }
  .leg-type-badge { padding:2px 6px;border-radius:3px;font-size:10px;font-weight:700;color:#fff;flex-shrink:0; }
  .prestation-row { display:flex;align-items:center;gap:8px;padding:3px 0;font-size:11px;border-bottom:1px solid var(--border); }
  .prestation-row:last-child { border-bottom:none; }
  .tdv-row { display:flex;justify-content:space-between;padding:4px 0;font-size:12px; }
  .statut-btn { padding:5px 12px;border-radius:4px;font-size:11px;font-weight:500;cursor:pointer;font-family:var(--sans);border:1px solid transparent;transition:all .15s; }
  /* DEVIS */
  .devis-table { width:100%;border-collapse:collapse;font-size:11px;margin-top:6px; }
  .devis-table th { text-align:left;color:var(--text3);font-weight:500;padding:3px 6px;border-bottom:1px solid var(--border2);font-size:10px;text-transform:uppercase;letter-spacing:.04em; }
  .devis-table td { padding:4px 6px;vertical-align:middle; }
  .devis-table tr:not(.devis-sep):hover td { background:var(--accent-light); }
  .devis-table .devis-sep td { border-top:1px solid var(--border2);padding-top:6px;padding-bottom:6px; }
  .devis-table .devis-total td { font-weight:600;border-top:2px solid var(--border);padding-top:8px; }
  .devis-unit-inp { width:70px;padding:2px 5px;border:1px solid var(--border2);border-radius:4px;font-size:11px;font-family:var(--mono);text-align:right;background:var(--surface2);color:var(--text); }
  .recap-table { width:100%;border-collapse:collapse;font-size:11px; }
  .recap-table th { color:var(--text3);font-weight:500;padding:3px 6px;border-bottom:1px solid var(--border2);font-size:10px;text-align:left;text-transform:uppercase;letter-spacing:.04em; }
  .recap-table td { padding:4px 6px; }

  /* CALENDAR — anomalies leg */
  .cal-event.leg-anom-critique {
    outline: 2px dashed #ef4444 !important;
    outline-offset: -1px;
  }
  .cal-event.leg-anom-warn {
    outline: 2px dashed #ef4444 !important;
    outline-offset: -1px;
  }
  .leg-anom-ico {
    display: inline-block; font-size: 9px; font-weight: 800;
    margin-right: 3px; vertical-align: middle; line-height: 1;
  }
  .leg-anom-ico.critique { color: #ff6b6b; text-shadow: 0 0 4px rgba(255,0,0,.4); }
  .leg-anom-ico.warn     { color: #ffc107; }
  .leg-anom-sub { font-size: 9px; font-weight: 600; opacity: .9; }
  .leg-anom-sub.critique { color: #ff9999; }
  .leg-anom-sub.warn     { color: #ffe08a; }

  /* Tooltip anomalies */
  .leg-tip {
    position: fixed; z-index: 9999; pointer-events: none; display: none;
    background: #1e293b; color: #e2e8f0; border-radius: 7px;
    padding: 10px 14px; font-size: 11px; line-height: 1.65;
    box-shadow: 0 6px 20px rgba(0,0,0,.45); max-width: 300px;
    border: 1px solid rgba(255,255,255,.08);
  }
  .leg-tip-title { font-weight: 700; font-size: 12px; margin-bottom: 6px; color: #fff; }
  .leg-tip-row { display: flex; align-items: flex-start; gap: 7px; padding: 2px 0; }
  .leg-tip-dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; margin-top: 4px; }
  .leg-tip-dot.critique { background: #f87171; }
  .leg-tip-dot.warn     { background: #fbbf24; }
  .leg-tip-dot.info     { background: #60a5fa; }

  /* Leg — ligne info supplémentaire */
  .cal-event-info { font-size: 9px; opacity: .75; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 1px; font-family: var(--mono); }

  /* Leg — radio statut horizontal */
  .leg-statut-radios { display:flex; gap:6px; margin-top:8px; flex-wrap:wrap; }
  .leg-statut-radios input[type=radio] { display:none; }
  .leg-statut-radios label {
    display:inline-flex; align-items:center; gap:5px; padding:5px 11px;
    border-radius:20px; font-size:11px; font-weight:600; cursor:pointer;
    border:2px solid transparent; transition:all .15s; user-select:none;
  }
  .leg-statut-radios input:checked + label { border-color: currentColor; }
  .lsr-option   { color:#ea580c; background:#fff7ed; }
  .lsr-confirmé { color:#16a34a; background:#f0fdf4; }
  .lsr-réalisé  { color:#2563eb; background:#eff6ff; }
  .lsr-annulé   { color:#dc2626; background:#fef2f2; }
  .lsr-cloturee { color:#475569; background:#f8fafc; }
  .leg-statut-radios input:not(:checked) + label { opacity:.5; }
  .leg-statut-radios input:checked + label.lsr-option   { background:#fff7ed; }
  .leg-statut-radios input:checked + label.lsr-confirmé { background:#f0fdf4; }
  .leg-statut-radios input:checked + label.lsr-réalisé  { background:#eff6ff; }
  .leg-statut-radios input:checked + label.lsr-annulé   { background:#fef2f2; }

  /* Leg — badges statut (petite puce dans le label) */
  .leg-s-badge { font-size: 8px; font-weight: 700; text-transform: uppercase; padding: 1px 4px; border-radius: 3px; letter-spacing: .04em; vertical-align: middle; margin-left: 3px; }
  .leg-s-option    { background: #f1f5f9; color: #64748b; border: 1px solid #cbd5e1; }
  .leg-s-confirmé  { background: #dbeafe; color: #1d4ed8; }
  .leg-s-réalisé   { background: #d1fae5; color: #065f46; }
  .leg-s-annulé    { background: #fee2e2; color: #b91c1c; text-decoration: line-through; }

  /* Leg — style de l'événement selon statut (la pastille emoji indique le statut) */
  .cal-event.ev-s-option  {
    background: #fde68a !important; color: #78350f !important;
  }
  .cal-event.ev-s-option .cal-event-name { color: #78350f; font-weight: 600; }
  .cal-event.ev-s-réalisé {
    filter: brightness(0.86);
  }
  .cal-event.ev-s-annulé  {
    opacity: .55; background: #d4d4d8 !important; color: #3f3f46 !important;
  }
  .cal-event.ev-s-annulé .cal-event-name { text-decoration: line-through; }

  /* Filtres gérés en pré-rendu dans renderCalendar() — pas de CSS nécessaire */

  /* Mission tooltip */
  .mission-tip {
    position: fixed; z-index: 9999; pointer-events: none; display: none;
    background: #1e293b; color: #e2e8f0; border-radius: 7px;
    padding: 10px 14px; font-size: 11px; line-height: 1.7;
    box-shadow: 0 6px 20px rgba(0,0,0,.45); max-width: 280px;
    border: 1px solid rgba(255,255,255,.08);
  }
  .mission-tip-ref { font-weight: 700; font-size: 12px; color: #fff; margin-bottom: 4px; }
  .mission-tip-row { display: flex; justify-content: space-between; gap: 16px; font-size: 10px; }
  .mission-tip-key { color: #94a3b8; }

  /* Mission modal (plus large que le modal standard) */
  .mission-modal { width: 880px; max-width: 98vw; max-height: 96vh; overflow-y: auto; }

  /* ── FILTER CHIPS PLANNING ── */
  .cal-filter-bar { display:flex; align-items:center; gap:5px; flex-wrap:wrap; }
  .cal-chip-ctrl {
    padding: 3px 10px; border-radius: 5px; font-size: 10px; font-weight: 700;
    border: 1.5px solid var(--accent); cursor: pointer;
    background: var(--accent-light, #e0f2fe); color: var(--accent);
    letter-spacing: .02em; transition: background .12s, color .12s;
  }
  .cal-chip-ctrl:hover { background: var(--accent); color: #fff; }
  .cal-filter-label { font-size:9px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--text3); margin-right:2px; }
  .cal-filter-sep { width:1px; height:15px; background:var(--border); margin:0 3px; flex-shrink:0; }

  .cal-chip {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 2px 9px 2px 7px; border-radius: 20px;
    font-size: 10px; font-weight: 600; line-height: 1.4;
    border: 1.5px solid var(--border); cursor: pointer;
    background: var(--bg2); color: var(--text3);
    opacity: .42; transition: opacity .15s, background .15s, border-color .15s, color .15s;
    white-space: nowrap; user-select: none;
  }
  .cal-chip.active { opacity: 1; }

  /* Dot statut */
  .chip-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; display:inline-block; }

  /* Statut — Option */
  .cal-chip.chip-option { border-color:#f59e0b; }
  .cal-chip.chip-option .chip-dot { background:#f59e0b; }
  .cal-chip.chip-option.active { background:#fffbeb; color:#92400e; border-color:#f59e0b; }

  /* Statut — Confirmé */
  .cal-chip.chip-confirme { border-color:#10b981; }
  .cal-chip.chip-confirme .chip-dot { background:#10b981; }
  .cal-chip.chip-confirme.active { background:#d1fae5; color:#065f46; border-color:#10b981; }

  /* Statut — Réalisé */
  .cal-chip.chip-realise { border-color:#3b82f6; }
  .cal-chip.chip-realise .chip-dot { background:#3b82f6; }
  .cal-chip.chip-realise.active { background:#dbeafe; color:#1e3a8a; border-color:#3b82f6; }

  /* Statut — Annulé */
  .cal-chip.chip-annule { border-color:#ef4444; }
  .cal-chip.chip-annule .chip-dot { background:#ef4444; }
  .cal-chip.chip-annule.active { background:#fee2e2; color:#7f1d1d; border-color:#ef4444; }


  /* CALENDAR — leg non assigné */
  .cal-event.leg-unassigned {
    background: repeating-linear-gradient(45deg, #d4d4d8 0px, #d4d4d8 2px, #f4f4f5 2px, #f4f4f5 7px) !important;
    border: 2px dashed #ef4444 !important;
    color: #3f3f46 !important;
  }
  .cal-event.leg-unassigned .cal-event-name { opacity: 1; font-weight: 600; }
  .cal-event.cal-leg-selected {
    outline: 2.5px solid var(--accent) !important;
    outline-offset: 1px;
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 20%, transparent) !important;
  }


/* ══════════════════════════════════════════════════════════════
   PLANNING PILOTES
══════════════════════════════════════════════════════════════ */
#panel-pilotes { display:none;flex-direction:column;height:calc(100vh - 52px);overflow:hidden }
#panel-pilotes.active { display:flex }
.planning-toolbar { display:flex;align-items:center;gap:6px;padding:7px 12px;border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap }
.planning-month-nav { font-size:14px;font-weight:700;min-width:155px;text-align:center;color:var(--text1) }
.planning-type-strip { display:flex;gap:4px;flex-wrap:wrap }
.planning-type-chip { cursor:pointer;padding:3px 9px;border-radius:4px;font-size:11px;font-weight:700;opacity:.5;border:2px solid transparent;transition:all .15s;user-select:none;color:#fff;white-space:nowrap }
.planning-type-chip.active { opacity:1;border-color:rgba(255,255,255,.55);box-shadow:0 0 0 1px rgba(255,255,255,.2) }
.planning-erase-chip { background:#374151!important;color:var(--text2);opacity:.5;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;border:2px solid transparent;cursor:pointer;user-select:none;transition:all .15s }
.planning-erase-chip.active { opacity:1;border-color:rgba(255,255,255,.4) }
.planning-rules-bar { display:none;flex-direction:column;border-bottom:2px solid #7f1d1d;flex-shrink:0;background:#1e1010 }
.planning-rules-bar.has-warn { display:flex }
.planning-rules-summary { display:flex;align-items:center;gap:10px;padding:6px 12px;cursor:pointer;user-select:none }
.planning-rules-summary:hover { background:rgba(255,255,255,.04) }
.planning-rules-toggle { font-size:9px;color:var(--text3);margin-left:auto }
.planning-rules-detail { display:none;padding:0 12px 8px }
.planning-rules-detail.open { display:block }
.planning-rules-table { width:100%;border-collapse:collapse;font-size:11px }
.planning-rules-table th { text-align:left;color:var(--text3);font-weight:500;padding:3px 8px 3px 0;border-bottom:1px solid rgba(255,255,255,.08) }
.planning-rules-table td { padding:4px 8px 4px 0;border-bottom:1px solid rgba(255,255,255,.04);vertical-align:top }
.prt-pilot { font-weight:600;color:#fcd5d5 }
.prt-rule  { color:#fca5a5 }
.prt-val   { color:#fef3f3;font-family:var(--mono);font-size:10px }
.prt-error td { background:rgba(153,27,27,.2) }
.prt-warn  td { background:rgba(127,29,29,.1) }
.planning-table-outer { overflow:auto;flex:1;cursor:cell }
.planning-table { border-collapse:collapse;min-width:100%;table-layout:fixed }
.planning-table th, .planning-table td { border:1px solid var(--border);padding:0 }
.planning-th-pilot { position:sticky;left:0;z-index:6;background:var(--surface2);font-size:11px;font-weight:600;text-align:left;padding:4px 8px;width:130px;white-space:nowrap;border-right:1px solid var(--border) }
.planning-th-day { position:sticky;top:0;z-index:4;background:var(--surface2);text-align:center;padding:2px 0;cursor:default;overflow:hidden }
.planning-th-day .dow { font-size:8px;color:var(--text3);display:block }
.planning-th-day .dn  { font-size:11px;font-weight:600;color:var(--text2);display:block }
.planning-th-day.we { background:#161b2a }
.planning-th-day.today { background:rgba(99,102,241,.22);color:#a5b4fc }
.planning-th-day.today .dn { color:#a5b4fc }
.planning-th-sum { position:sticky;top:0;right:0;z-index:5;background:var(--surface2);font-size:11px;font-weight:600;color:var(--text2);padding:3px 8px;text-align:center;width:90px;min-width:90px;border-left:1px solid var(--border);line-height:1.5 }
.planning-pilot-td { position:sticky;left:0;z-index:3;background:var(--surface2);font-size:11px;padding:0 8px;white-space:nowrap;height:38px;border-right:1px solid var(--border);width:130px;overflow:hidden;text-overflow:ellipsis }
.planning-day-td { height:38px;cursor:cell;position:relative;text-align:center;vertical-align:middle;transition:filter .1s;overflow:hidden }
.planning-day-td.we { background:rgba(0,0,0,.15) }
.planning-day-td.today { outline:1px solid rgba(99,102,241,.5);outline-offset:-1px;z-index:1 }
.planning-day-td:hover { filter:brightness(1.18) }
.planning-day-td.rule-error { box-shadow:inset 0 0 0 2px #ef4444 }
.planning-day-td.rule-warn  { box-shadow:inset 0 0 0 1px #f59e0b }
.planning-act { display:flex;align-items:center;justify-content:center;position:absolute;inset:0;font-size:10px;font-weight:700;color:rgba(255,255,255,.95);letter-spacing:.3px }
.planning-act-leg { position:absolute;top:1px;right:2px;font-size:8px;opacity:.85 }
.planning-act-noton { position:absolute;bottom:1px;left:2px;font-size:8px;color:#fca5a5 }
.planning-sum-td { position:sticky;right:0;z-index:3;background:#1a2035;font-size:11px;padding:4px 8px;text-align:center;border-left:2px solid var(--border);width:90px;min-width:90px;line-height:1.8 }
.planning-sum-on  { color:#fff;font-size:13px;font-weight:700 }
.planning-sum-off { color:#94a3b8;font-size:11px }
.planning-sum-legs { color:#60a5fa;font-size:11px }
.planning-on-count-row td { background:#1a2035;border-top:2px solid var(--border);color:#fff }
.planning-on-count-row td.we { background:#1a2035 }
.planning-on-count-row .planning-pilot-td { font-size:11px;color:#94a3b8;font-weight:600;font-style:italic;background:#1a2035 }
.planning-legend { display:flex;gap:12px;padding:6px 12px;flex-wrap:wrap;border-top:1px solid var(--border);flex-shrink:0 }

/* ══ ADMIN ═══════════════════════════════════════════════════ */
#panel-admin { display:none;flex-direction:column;height:calc(100vh - 52px);overflow:hidden }
#panel-admin.active { display:flex }
.admin-subnav { display:flex;gap:4px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center }
.admin-subtab { padding:5px 16px;border-radius:4px;font-size:12px;cursor:pointer;border:none;background:none;color:var(--text2);font-weight:400 }
.admin-subtab.active { background:var(--accent);color:#fff;font-weight:600 }
.admin-subtab:hover:not(.active) { background:var(--surface2) }
.admin-content { flex:1;overflow-y:auto;padding:20px 24px }
.admin-section-title { font-size:13px;font-weight:600;margin-bottom:12px;display:flex;align-items:center;gap:10px }
.admin-table { width:100%;border-collapse:collapse;font-size:12px }
.admin-table th { background:var(--surface2);padding:8px 10px;text-align:left;font-size:11px;color:var(--text2);font-weight:600;border-bottom:2px solid var(--border);position:sticky;top:0;z-index:2 }
.admin-table td { padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle }
.admin-table tr:hover td { background:var(--surface2) }
.equip-chip { display:inline-flex;align-items:center;gap:3px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:1px 7px;font-size:10px;margin:2px 2px;white-space:nowrap }
.equip-chip-rm { cursor:pointer;color:var(--text3);margin-left:2px;font-size:12px;line-height:1 }
.equip-chip-rm:hover { color:var(--red) }
.peremption-ok     { color:#16a34a;font-weight:600 }
.peremption-warn   { color:#d97706;font-weight:600 }
.peremption-danger { color:#dc2626;font-weight:600 }
.qualif-grid { border-collapse:collapse;font-size:12px;width:100% }
.qualif-grid th,.qualif-grid td { border:1px solid var(--border);padding:6px 10px;text-align:center }
.qualif-grid th:first-child,.qualif-grid td:first-child { text-align:left;position:sticky;left:0;background:var(--surface2);z-index:1;white-space:nowrap;min-width:130px }
.qualif-cell { cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:1px;border-radius:4px;padding:2px 4px;transition:background .1s;user-select:none;min-width:52px }
.qualif-cell:hover { background:var(--surface2) }
.qualif-yes { color:#16a34a;font-size:18px;line-height:1 }
.qualif-no  { color:#d1d5db;font-size:18px;line-height:1 }
.qualif-expiry-ok   { font-size:9px;color:#16a34a }
.qualif-expiry-warn { font-size:9px;color:#d97706 }
.qualif-expiry-danger { font-size:9px;color:#dc2626 }
.role-badge { display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:700;letter-spacing:.02em }
.role-admin      { background:#fef3c7;color:#92400e }
.role-dispatcher { background:#ede9fe;color:#5b21b6 }
.role-instructeur { background:#d1fae5;color:#065f46 }
.role-readonly   { background:#f1f5f9;color:#64748b }
.admin-input { background:var(--surface2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:12px;color:var(--text);width:100% }
.admin-input:focus { outline:none;border-color:var(--accent) }
.perm-row { display:grid;grid-template-columns:1fr 140px 1fr 24px;gap:6px;align-items:center;margin-bottom:6px }
.perm-row input { background:var(--surface2);border:1px solid var(--border);border-radius:5px;padding:5px 8px;font-size:12px;color:var(--text) }
.perm-row input:focus { outline:none;border-color:var(--accent) }
.perm-rm { cursor:pointer;color:var(--text3);font-size:18px;text-align:center;line-height:1 }
.perm-rm:hover { color:var(--red) }
.planning-leg-item { display:flex;align-items:center;gap:5px;font-size:10px;color:var(--text2) }
.planning-leg-dot { width:11px;height:11px;border-radius:3px;flex-shrink:0 }
.planning-painting { user-select:none }

/* ══════════════════════════════════════════════════════════════
   GESTION ALARMES
══════════════════════════════════════════════════════════════ */
#panel-alarmes { display:none;flex-direction:column;height:calc(100vh - 52px);overflow:hidden }
#panel-alarmes.active { display:flex }
.alarmes-toolbar { display:flex;align-items:center;gap:8px;padding:7px 16px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface) }
.al-filters { display:flex;gap:4px;flex-wrap:wrap }
.al-filter { padding:4px 12px;border-radius:20px;border:1px solid var(--border2);font-size:11px;cursor:pointer;background:var(--surface);color:var(--text2);font-family:var(--sans);transition:all .12s }
.al-filter:hover { border-color:var(--accent);color:var(--accent) }
.al-filter.active { background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500 }
.al-badge { display:inline-flex;align-items:center;justify-content:center;background:var(--red);color:#fff;font-size:9px;font-weight:700;border-radius:8px;padding:0 5px;min-width:16px;height:15px;margin-left:5px;vertical-align:middle;font-family:var(--mono);line-height:1 }
.alarmes-list { flex:1;overflow-y:auto }
.al-section-title { padding:8px 16px 4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text3);background:var(--surface2);border-bottom:1px solid var(--border);border-top:2px solid var(--border);position:sticky;top:0;z-index:2 }
.al-row { display:flex;align-items:flex-start;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);transition:background .1s }
.al-row:hover { background:var(--surface2) }
.al-dot { width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:5px }
.al-dot.critique { background:var(--red) }
.al-dot.warn { background:var(--amber) }
.al-dot.info { background:var(--blue) }
.al-body { flex:1;min-width:0 }
.al-title { font-size:12px;font-weight:600;color:var(--text);line-height:1.4 }
.al-detail { font-size:11px;color:var(--text2);margin-top:3px }
.al-meta { font-size:10px;color:var(--text3);margin-top:2px;font-family:var(--mono) }
.al-tag { display:inline-block;font-size:9px;font-weight:700;padding:2px 6px;border-radius:3px;text-transform:uppercase;letter-spacing:.04em;margin-right:6px;vertical-align:middle }
.al-tag.critique { background:var(--red-light);color:var(--red) }
.al-tag.warn { background:var(--amber-light);color:var(--amber) }
.al-tag.info { background:var(--blue-light);color:var(--blue) }
.al-action-btn { flex-shrink:0;background:none;border:1px solid var(--border2);border-radius:4px;padding:4px 10px;font-size:10px;cursor:pointer;color:var(--text2);font-family:var(--sans);transition:all .12s;align-self:center }
.al-action-btn:hover { border-color:var(--accent);color:var(--accent);background:var(--accent-light) }
.al-empty { padding:80px 24px;text-align:center }
.al-empty-icon { font-size:40px;margin-bottom:12px }
.al-empty-text { font-size:15px;font-weight:600;color:var(--green) }
.al-empty-sub { font-size:12px;color:var(--text3);margin-top:4px }


.login-overlay{position:fixed;inset:0;background:var(--accent);display:flex;align-items:center;justify-content:center;z-index:1000;}
.login-box{background:var(--surface);border-radius:12px;padding:32px;width:340px;box-shadow:0 8px 32px rgba(0,0,0,.2);}
.login-logo{font-family:var(--mono);font-size:18px;font-weight:500;color:var(--accent);margin-bottom:6px;}
.login-sub{font-size:12px;color:var(--text3);margin-bottom:24px;}
.login-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--text3);display:block;margin-bottom:4px;}
.login-input{width:100%;padding:9px 12px;border:1px solid var(--border2);border-radius:6px;font-family:var(--sans);font-size:13px;color:var(--text);background:var(--surface2);outline:none;margin-bottom:12px;}
.login-input:focus{border-color:var(--accent);}
.login-btn{width:100%;padding:10px;background:var(--accent);color:#fff;border:none;border-radius:6px;font-family:var(--sans);font-size:13px;font-weight:500;cursor:pointer;margin-top:4px;}
.login-btn:hover{opacity:.9;}
.login-btn:disabled{opacity:.5;cursor:default;}
.login-err{font-size:11px;color:var(--red);margin-top:8px;text-align:center;}

/* ── DISPATCH (Gantt pilotes/appareils) ── */
.dsp-toolbar { display:flex;align-items:center;gap:6px;padding:7px 16px;border-bottom:2px solid var(--border2);flex-shrink:0;background:#f0eee9 }
.dsp-period  { font-size:12px;font-weight:700;font-family:var(--mono);min-width:230px;text-align:center;color:var(--text) }
.dsp-days-btn { padding:3px 10px;border-radius:12px;border:1px solid var(--border2);font-size:11px;cursor:pointer;background:#fff;color:var(--text2);font-family:var(--sans);transition:all .12s;font-weight:600 }
.dsp-days-btn:hover { border-color:var(--accent);color:var(--accent);background:#e8edf3 }
.dsp-days-btn.active { background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700 }
.dsp-body { flex:1;overflow-y:auto;overflow-x:auto;position:relative }
/* Ligne d'axe horaire (sticky en haut) */
.dsp-axis-row { display:flex;align-items:stretch;position:sticky;top:0;z-index:5;background:#eeecea;border-bottom:3px solid #1a1916;height:36px }
/* Titre de section (sticky sous l'axe) */
.dsp-section-hd { padding:6px 0 5px 160px;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.12em;position:sticky;top:36px;z-index:4 }
.dsp-section-ac  { background:#1a3a5c;color:#a8d0f0;border-bottom:1px solid #0d2040;border-top:3px solid #1a1916 }
.dsp-section-pil { background:#5c2600;color:#f0c890;border-bottom:1px solid #3d1500;border-top:3px solid #1a1916 }
/* Lignes de ressource */
.dsp-row { display:flex;align-items:stretch;border-bottom:1px solid var(--border2);min-height:46px;transition:background .1s }
.dsp-row:hover { background:#f5f3ef }
.dsp-row-empty { opacity:.65 }
.dsp-row-over { background:#dbeafe !important;outline:2px dashed var(--accent);outline-offset:-2px }
/* Colonne label gauche */
.dsp-lbl { width:160px;flex-shrink:0;padding:6px 14px;border-right:3px solid var(--border2);display:flex;flex-direction:column;justify-content:center;overflow:hidden;background:#fafaf8 }
.dsp-lbl-main { font-size:12px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis }
.dsp-lbl-sub  { font-size:10px;color:var(--text2);margin-top:2px;white-space:nowrap;font-family:var(--mono);font-weight:600 }
/* Zone timeline */
.dsp-tl { flex:1;position:relative;min-width:0;overflow:hidden }
.dsp-axis { background:#eeecea }
/* Ticks verticaux */
.dsp-tick { position:absolute;top:0;bottom:0;width:1px;background:#d4d0c8;z-index:1;pointer-events:none }
/* Minuit : trait noir épais + fond légèrement teinté */
.dsp-tick.major { background:#1a1916;width:3px;box-shadow:1px 0 0 rgba(0,0,0,.15);z-index:2 }
.dsp-tick-lbl { position:absolute;top:50%;transform:translateY(-50%);left:6px;font-size:10px;color:#6a6860;white-space:nowrap;pointer-events:none;font-family:var(--mono);font-weight:600 }
.dsp-tick.major .dsp-tick-lbl { color:#1a1916;font-weight:800;font-size:11px;background:rgba(255,255,255,.92);padding:1px 4px;border-radius:3px;letter-spacing:.02em }
/* Ligne "maintenant" */
.dsp-now { position:absolute;top:0;bottom:0;width:2px;background:#ef4444;z-index:3;pointer-events:none;box-shadow:0 0 6px rgba(239,68,68,.5) }
.dsp-now::before { content:'▼';position:absolute;top:0;left:-4px;font-size:9px;color:#ef4444;line-height:1 }
/* Blocs leg */
.dsp-leg { position:absolute;top:5px;bottom:5px;border-radius:5px;cursor:grab;display:flex;align-items:center;gap:4px;padding:0 8px;overflow:hidden;min-width:4px;box-shadow:0 2px 6px rgba(0,0,0,.35);z-index:2;user-select:none;transition:filter .1s,box-shadow .1s }
.dsp-leg:hover { filter:brightness(1.12);box-shadow:0 4px 12px rgba(0,0,0,.45) }
.dsp-leg:active { cursor:grabbing }
.dsp-leg-type { font-size:9px;font-weight:800;color:#fff;font-family:var(--mono);border-radius:3px;padding:1px 5px;flex-shrink:0;letter-spacing:.04em;white-space:nowrap;background:rgba(0,0,0,.30) }
.dsp-leg-dot { font-size:10px;color:rgba(255,255,255,.9);flex-shrink:0 }
.dsp-leg-lbl { font-size:12px;font-weight:800;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 4px rgba(0,0,0,.5) }
/* Zone d'indisponibilité (repos pilote / immobilisation appareil) */
.dsp-unavail { position:absolute;top:0;bottom:0;z-index:1;pointer-events:none;background:repeating-linear-gradient(135deg,rgba(0,0,0,.35) 0px,rgba(0,0,0,.35) 3px,#dedad2 3px,#dedad2 11px);border-left:2px solid rgba(0,0,0,.35);border-right:1px solid rgba(0,0,0,.2) }
/* Tooltip enrichi */
.dsp-tooltip { position:fixed;z-index:9999;background:#1e1e2e;color:#e2e8f0;border-radius:10px;padding:11px 14px;min-width:220px;max-width:280px;box-shadow:0 8px 28px rgba(0,0,0,.45);pointer-events:none;font-size:12px;line-height:1.5;border:1px solid rgba(255,255,255,.1) }
.dsp-tip-header { display:flex;align-items:center;gap:6px;margin-bottom:3px }
.dsp-tip-dot { font-size:14px;flex-shrink:0 }
.dsp-tip-route { font-size:14px;font-weight:700;font-family:var(--mono);flex:1;color:#fff }
.dsp-tip-stat { font-size:10px;font-weight:700;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.06em;flex-shrink:0 }
.dsp-ts-opt  { background:#fde68a;color:#78350f }
.dsp-ts-conf { background:#bbf7d0;color:#14532d }
.dsp-ts-real { background:#a7f3d0;color:#064e3b }
.dsp-ts-ann  { background:#d4d4d8;color:#3f3f46 }
.dsp-tip-type { font-size:11px;color:#94a3b8;margin-bottom:2px }
.dsp-tip-dur  { color:#64748b }
.dsp-tip-ref  { font-size:11px;color:#93c5fd;margin-bottom:4px }
.dsp-tip-times { display:flex;flex-direction:column;gap:1px;font-size:11px;color:#cbd5e1;margin-bottom:6px;font-family:var(--mono) }
.dsp-tip-sep  { height:1px;background:rgba(255,255,255,.1);margin:6px 0 }
.dsp-tip-row  { display:flex;justify-content:space-between;gap:8px;font-size:11px;margin-bottom:2px }
.dsp-tip-k    { color:#64748b }
.dsp-tip-v    { color:#e2e8f0;font-weight:600 }
.dsp-tip-pax-list { margin-top:5px;display:flex;flex-direction:column;gap:2px }
.dsp-tip-pax-item { font-size:11px;color:#cbd5e1;padding:1px 0 }
.dsp-tip-vip  { color:#fbbf24;font-size:10px;font-weight:700 }
/* Menu contextuel clic droit (shared gantt + dispatch) */
.leg-ctx-menu { position:fixed;z-index:10000;background:#fff;border:1px solid var(--border2);border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.18);padding:4px 0;min-width:175px }
.ctx-item { padding:8px 16px;font-size:12px;font-weight:600;cursor:pointer;color:var(--text);display:flex;align-items:center;gap:8px;transition:background .1s }
.ctx-item:hover { background:var(--accent-light);color:var(--accent) }
.ctx-separator { height:1px;background:var(--border);margin:3px 0 }

/* ── GANTT ── */
.gantt-layout{display:flex;flex-direction:column;height:100%;overflow:hidden}
.gantt-toolbar{display:flex;align-items:center;gap:8px;padding:8px 16px;border-bottom:1px solid var(--border);flex-shrink:0}
.btn-nav{background:var(--surface2);border:1px solid var(--border);color:var(--text1);padding:4px 10px;border-radius:4px;cursor:pointer;font-size:14px;line-height:1}
.btn-nav:hover{background:var(--surface3,#2a2a2a)}
.gantt-body-wrap{display:flex;flex:1;overflow:hidden}
.gantt-scroll-area{flex:1;overflow:hidden;display:flex;flex-direction:column}
.gantt-outer{overflow:auto;flex:1;position:relative}
.gantt-header-row{display:flex;position:sticky;top:0;z-index:10;background:var(--surface2);border-bottom:2px solid var(--border2)}
.gantt-corner{width:160px;min-width:160px;position:sticky;left:0;z-index:11;background:var(--surface2);border-right:2px solid var(--border2);padding:6px 12px;font-size:10px;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.05em}
.gantt-day-hdr{flex-shrink:0;text-align:center;padding:6px 2px;border-right:1px solid var(--border);font-size:10px;display:flex;flex-direction:column;align-items:center;gap:2px;box-sizing:border-box}
.gantt-day-hdr.gantt-hdr-today{background:rgba(29,78,216,.12);color:var(--accent)}
.gantt-day-hdr.gantt-hdr-we{background:rgba(0,0,0,.07)}
.gantt-hdr-num{font-size:15px;font-weight:700;line-height:1;color:var(--text)}
.gantt-hdr-dow{font-size:9px;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.06em}
.gantt-day-hdr.gantt-hdr-today .gantt-hdr-num{color:var(--accent)}
.gantt-row{display:flex;border-bottom:1px solid var(--border)}
.gantt-row:nth-child(even) .gantt-events-cell{background:rgba(0,0,0,.018)}
.gantt-ac-cell{width:160px;min-width:160px;position:sticky;left:0;z-index:2;background:var(--surface);border-right:2px solid var(--border2);padding:8px 14px;display:flex;flex-direction:column;justify-content:center;gap:2px;box-sizing:border-box}
.gantt-ac-immat{font-size:13px;font-weight:700;color:var(--text);letter-spacing:.01em}
.gantt-ac-type{font-size:10px;color:var(--text3);font-family:var(--mono)}
.gantt-events-cell{position:relative;flex-shrink:0}
.gantt-immo-block{position:absolute;top:8px;bottom:8px;border-radius:5px;cursor:pointer;overflow:hidden;padding:4px 8px;color:#fff;z-index:2;transition:filter .15s;box-sizing:border-box;border-left:4px solid rgba(255,255,255,.4);box-shadow:0 1px 4px rgba(0,0,0,.25)}
.gantt-immo-block:hover{filter:brightness(1.12);box-shadow:0 2px 8px rgba(0,0,0,.35)}
.gantt-immo-block .gantt-immo-label{font-size:10px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.3)}
.gantt-immo-block .gantt-immo-sub{font-size:9px;opacity:.9;white-space:nowrap;overflow:hidden;text-shadow:0 1px 2px rgba(0,0,0,.3)}
.gantt-immo-conflict{outline:2px solid #ef4444;outline-offset:2px;animation:pulse-red 1.5s infinite}
.gantt-immo-selected{outline:2px solid #fff;outline-offset:2px;box-shadow:0 0 0 4px rgba(255,255,255,.25)}
@keyframes pulse-red{0%,100%{outline-color:#ef4444}50%{outline-color:transparent}}
.gantt-detail-col{width:340px;min-width:340px;border-left:2px solid var(--border2);overflow-y:auto;padding:16px;box-sizing:border-box;background:var(--surface)}
.gantt-leg-bar{position:absolute;top:50%;transform:translateY(-50%);border-radius:4px;opacity:.85;z-index:1;cursor:default;transition:opacity .1s,box-shadow .1s;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.gantt-leg-bar:hover{opacity:1;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.gantt-leg-clash{opacity:1!important;box-shadow:0 0 0 2px #ef4444!important}
.gantt-tip{position:fixed;z-index:9999;background:#1e293b;border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:10px 12px;font-size:11px;color:#e2e8f0;pointer-events:none;display:none;max-width:260px;box-shadow:0 6px 20px rgba(0,0,0,.45);line-height:1.7}
.gantt-tip-route{font-size:14px;font-weight:700;color:#fff;margin-bottom:6px;letter-spacing:.01em}
.gantt-tip-client{font-size:11px;font-weight:600;color:#93c5fd;margin-bottom:4px}
.gantt-tip-divider{height:1px;background:rgba(255,255,255,.1);margin:6px 0}
.gantt-tip-row{display:flex;justify-content:space-between;gap:14px;font-size:11px;padding:1px 0}
.gantt-tip-key{color:#64748b;flex-shrink:0}
.gantt-tip-clash{color:#fca5a5;font-weight:600;margin-top:6px;padding-top:6px;border-top:1px solid rgba(252,165,165,.2)}
.gantt-resize-l,.gantt-resize-r{position:absolute;top:0;bottom:0;width:8px;z-index:6;cursor:ew-resize;background:rgba(255,255,255,.2);transition:background .1s}
.gantt-resize-l{left:0;border-radius:5px 0 0 5px}
.gantt-resize-r{right:0;border-radius:0 5px 5px 0}
.gantt-resize-l:hover,.gantt-resize-r:hover{background:rgba(255,255,255,.45)}
.gantt-immo-dragging{cursor:grabbing!important;opacity:.9;z-index:10;box-shadow:0 8px 24px rgba(0,0,0,.55)!important}
.gantt-drag-label{position:fixed;z-index:9998;background:#1e293b;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 10px;font-size:12px;font-weight:600;color:#fff;pointer-events:none;display:none;white-space:nowrap}
.loading-bar{position:fixed;top:0;left:0;width:0%;height:3px;background:var(--accent);transition:width .4s;z-index:9999;}


/* ══════════════════════════════════════════════
   DEVIS MODULE
   ══════════════════════════════════════════════ */

/* Panel */
#panel-devis.active{display:flex;flex-direction:column;height:calc(100vh - 52px)}
.dv-layout{display:flex;flex:1;overflow:hidden}

/* ── Liste gauche ── */
.dv-list-pane{width:300px;min-width:240px;flex-shrink:0;border-right:1px solid var(--border);display:flex;flex-direction:column;background:var(--surface)}
.dv-list-toolbar{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.dv-tabs{display:flex;gap:0;flex:1;background:var(--surface2);border:1px solid var(--border);border-radius:5px;padding:2px}
.dv-tab{background:transparent;border:none;border-radius:3px;color:var(--text2);font-size:11px;font-weight:500;padding:4px 10px;cursor:pointer;transition:background .12s,color .12s;font-family:var(--sans);white-space:nowrap}
.dv-tab:hover{color:var(--text)}
.dv-tab.active{background:var(--surface);color:var(--accent);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.1)}
.dv-badge{display:inline-flex;align-items:center;justify-content:center;min-width:15px;height:15px;padding:0 4px;background:var(--red);color:#fff;border-radius:8px;font-size:9px;font-weight:700;margin-left:4px;vertical-align:middle}
.dv-empty{text-align:center;color:var(--text3);font-size:12px;padding:48px 20px;line-height:1.8}
.dv-empty-sm{font-size:11px;color:var(--text3);padding:12px 16px;font-style:italic}
#devis-list{flex:1;overflow-y:auto;display:flex;flex-direction:column}
.dv-new-btn{padding:11px 14px;background:none;border:none;border-top:1px solid var(--border);color:var(--accent);font-size:12px;font-weight:500;cursor:pointer;text-align:left;font-family:var(--sans);transition:background .1s;margin-top:auto}
.dv-new-btn:hover{background:var(--accent-light)}
.dv-sim-btn{color:var(--text3) !important;font-size:11px !important;border-top:1px dashed var(--border) !important}
.dv-sim-btn:hover{color:var(--accent) !important}
/* Prestations dans les modaux */
.prest-list{display:flex;flex-direction:column;gap:4px}
.prest-row{display:flex;align-items:center;gap:4px}
.prest-del-btn{background:none;border:none;color:var(--text3);cursor:pointer;padding:2px 5px;font-size:13px;flex-shrink:0;line-height:1;transition:color .1s}
.prest-del-btn:hover{color:var(--red)}
.prest-total{display:flex;gap:12px;font-size:11px;padding:5px 2px;color:var(--text2)}
.prest-total strong{color:var(--text)}
/* Table prestations dans le détail */
.prest-table{width:100%;border-collapse:collapse;font-size:12px}
.prest-table thead tr{background:var(--surface2)}
.prest-table th{padding:6px 12px;text-align:left;font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border)}
.prest-table td{padding:7px 12px;border-bottom:1px solid var(--border);color:var(--text)}
.prest-table .prest-alt td{background:var(--surface2)}
.prest-table tfoot td{padding:7px 12px;color:var(--text2);font-size:12px;border-top:1px solid var(--border)}
.dv-filter-bar{display:flex;gap:4px;flex-wrap:wrap;padding:6px 10px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.dv-filter-btn{background:transparent;border:1px solid var(--border2);border-radius:12px;color:var(--text2);font-size:10px;font-weight:500;padding:2px 9px;cursor:pointer;transition:all .12s;font-family:var(--sans);white-space:nowrap}
.dv-filter-btn:hover{background:var(--surface2);color:var(--text)}
.dv-filter-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}

/* Items liste */
.dv-item{padding:10px 12px;cursor:pointer;border-bottom:1px solid var(--border);transition:background .1s;flex-shrink:0}
.dv-item:hover{background:var(--surface2)}
.dv-item.active{background:var(--accent-light);border-left:3px solid var(--accent);padding-left:9px}
.dv-item-header{display:flex;align-items:center;gap:6px;margin-bottom:3px}
.dv-ref{font-weight:600;font-size:11px;color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--mono)}
.dv-statut-badge{font-size:9px;font-weight:700;padding:2px 7px;border-radius:9px;white-space:nowrap;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0}
.dv-s-brouillon{background:var(--surface2);color:var(--text3);border:1px solid var(--border2)}
.dv-s-envoye{background:var(--blue-light);color:var(--blue)}
.dv-s-signe{background:var(--green-light);color:var(--green)}
.dv-s-refuse{background:var(--red-light);color:var(--red)}
.dv-s-expire{background:var(--amber-light);color:var(--amber)}
.dv-item-client{font-size:12px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dv-item-meta{font-size:10px;color:var(--text3);margin-top:3px;display:flex;gap:8px}
.dv-item-montant{font-weight:600;color:var(--text2)}

/* Demandes */
.dv-req-from{font-size:12px;font-weight:500;color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dv-req-subject{font-size:11px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dv-req-email{font-size:10px;color:var(--text3)}
.dv-req-statut{font-size:14px;flex-shrink:0}
.dv-req-date{font-size:10px;color:var(--text3)}

/* ── Détail droite ── */
.dv-detail-pane{flex:1;overflow:hidden;background:var(--bg);display:flex;flex-direction:column}
#devis-detail{flex:1;overflow-y:auto;display:flex;flex-direction:column}
.dv-detail-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text3);font-size:13px;gap:10px}

/* En-tête détail */
.dv-dh{padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-shrink:0}
.dv-dh-left{display:flex;align-items:center;gap:10px}
.dv-dh-ref{font-size:18px;font-weight:700;color:var(--text);font-family:var(--mono);letter-spacing:-.02em}
.dv-dh-validity{font-size:11px;color:var(--text3)}

/* Actions */
.dv-actions-bar{display:flex;gap:8px;padding:10px 24px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center}
.btn-danger-soft{background:var(--red-light);color:var(--red);border:1px solid #f5c6c6}
.btn-danger-soft:hover{background:#fbd5d5}
.btn-confirm{background:var(--green-light);color:var(--green);border:1px solid #b8ddc8}
.btn-confirm:hover{background:#cceedd}
.btn-xs{padding:4px 9px;border-radius:4px;font-size:11px;font-family:var(--sans);cursor:pointer;font-weight:500;border:1px solid var(--border2);background:var(--surface);color:var(--text2)}
.btn-xs:hover{background:var(--surface2)}
.modal-footer button,.modal-footer a{padding:7px 16px;border-radius:5px;font-size:12px;font-family:var(--sans);cursor:pointer;font-weight:500}

/* Body */
.dv-body{padding:20px 24px;display:flex;flex-direction:column;gap:14px}

/* Cards */
.dv-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}
.dv-card-hd{font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.8px;padding:10px 16px 8px;border-bottom:1px solid var(--border)}

/* Client */
.dv-client-row{display:flex;align-items:center;gap:14px;padding:14px 16px}
.dv-client-avatar{width:40px;height:40px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0;letter-spacing:.05em}
.dv-client-info{display:flex;flex-direction:column;gap:2px;min-width:0}
.dv-client-name{font-size:14px;font-weight:600;color:var(--text)}
.dv-client-email{color:var(--accent);font-size:12px;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dv-client-email:hover{text-decoration:underline}
.dv-client-tel{font-size:12px;color:var(--text3)}

/* Route de vol */
.dv-vol-route{display:flex;align-items:stretch;gap:0;padding:16px 16px 12px}
.dv-vol-point{display:flex;align-items:flex-start;gap:10px;flex:1}
.dv-vol-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:3px}
.dv-vol-dot.dep{background:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}
.dv-vol-dot.arr{background:var(--green);box-shadow:0 0 0 3px var(--green-light)}
.dv-vol-loc{font-size:13px;font-weight:600;color:var(--text)}
.dv-vol-time{font-size:11px;color:var(--text3);margin-top:2px}
.dv-vol-line{width:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:16px;padding-bottom:6px}
.dv-vol-meta{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 14px}
.dv-vol-chip{display:inline-flex;align-items:center;gap:4px;background:var(--surface2);border:1px solid var(--border);border-radius:20px;padding:3px 10px;font-size:11px;color:var(--text2)}

/* Prix */
.dv-price-card{padding:16px 20px;display:flex;align-items:baseline;gap:12px}
.dv-price-main{font-size:28px;font-weight:700;color:var(--text);font-family:var(--mono);line-height:1}
.dv-price-main span{font-size:14px;font-weight:400;color:var(--text3);margin-left:3px}
.dv-price-sub{font-size:12px;color:var(--text3)}

/* Notes */
.dv-notes{font-size:12px;color:var(--text2);padding:12px 16px;line-height:1.7;white-space:pre-wrap}

/* Legs — même style que panel Facturation */
.dv-legs-list{display:flex;flex-direction:column;padding:6px 12px 10px}

/* Version badge */
.dv-v-badge{display:inline-block;font-size:10px;font-weight:700;padding:1px 6px;border-radius:4px;background:#f5f3ff;color:#7c3aed;border:1px solid #ddd6fe;margin-left:4px;vertical-align:middle}
/* Timeline */
.dv-tl-list{display:flex;flex-direction:column;margin-bottom:8px;position:relative}
.dv-tl-list::before{content:'';position:absolute;left:9px;top:8px;bottom:8px;width:2px;background:var(--border);z-index:0}
.tl-item{display:flex;align-items:flex-start;gap:10px;padding:6px 0;position:relative;z-index:1}
.tl-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:5px;border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border)}
.tl-dot-in{background:#16a34a}
.tl-dot-out{background:#2563eb}
.tl-content{flex:1;min-width:0}
.tl-header{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.tl-icon{font-size:12px;flex-shrink:0}
.tl-label{font-size:11px;font-weight:600;color:var(--text)}
.tl-detail{font-size:11px;color:var(--text2)}
.tl-actor{font-size:10px;color:var(--text3);font-style:italic}
.tl-date{font-size:10px;color:var(--text3);white-space:nowrap}
.tl-spacer{flex:1}
.tl-email-meta{display:flex;flex-direction:column;flex:1;min-width:0}
.tl-empty{font-size:11px;color:var(--text3);padding:8px 0}
.tl-event .tl-content{padding:4px 8px;border-radius:5px;background:var(--surface2)}
.tl-email .tl-content{border:1px solid var(--border);border-radius:6px;overflow:hidden}
.tl-email .tl-header{padding:6px 10px;background:var(--surface2)}
.tl-email .tl-header:hover{background:var(--accent-light)}
/* Emails */
.dv-emails-list{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}
.dv-email-item{border:1px solid var(--border);border-radius:6px;overflow:hidden}
.dv-email-header{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;cursor:pointer;background:var(--surface2);transition:background .1s}
.dv-email-header:hover{background:var(--accent-light)}
.dv-email-badge{font-size:9px;font-weight:700;padding:2px 6px;border-radius:3px;flex-shrink:0;margin-top:1px;letter-spacing:.04em}
.dv-email-badge.inbound{background:#dcfce7;color:#16a34a}
.dv-email-badge.outbound{background:#dbeafe;color:#2563eb}
.dv-email-meta{flex:1;min-width:0}
.dv-email-from{font-size:11px;font-weight:500;color:var(--text)}
.dv-email-subj{font-size:11px;color:var(--text2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dv-email-date{font-size:10px;color:var(--text3);flex-shrink:0;white-space:nowrap}
.dv-email-tags{display:flex;gap:4px;flex-wrap:wrap;padding:4px 12px;border-top:1px solid var(--border)}
.dv-email-tag{font-size:9px;font-weight:600;padding:2px 7px;border-radius:10px;border:1px solid var(--border2);color:var(--text2);background:var(--surface);cursor:pointer;transition:all .15s;letter-spacing:.04em}
.dv-email-tag:hover{opacity:.8}
.dv-email-body{padding:10px 12px;border-top:1px solid var(--border);background:var(--surface)}
.dv-email-body-html{font-size:12px;color:var(--text);line-height:1.6}
.dv-email-body-text{font-size:11px;color:var(--text2);white-space:pre-wrap;font-family:var(--mono);margin:0}
/* PJ compose */
.dv-compose-pj{border-top:1px solid var(--border);padding-top:10px;margin-top:10px}
.dv-pj-check{display:flex;align-items:center;gap:6px;padding:3px 0;font-size:11px;color:var(--text);cursor:pointer}
.dv-pj-check input{flex-shrink:0;cursor:pointer}
.dv-pj-file-btn{display:inline-block;margin-top:6px;font-size:11px;color:var(--accent);cursor:pointer;padding:3px 8px;border:1px dashed var(--border2);border-radius:4px}
.dv-pj-file-btn:hover{background:var(--accent-light)}
.dv-pj-filelist{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.dv-pj-chip{display:inline-flex;align-items:center;gap:4px;font-size:10px;padding:2px 8px;border-radius:10px;background:var(--surface2);border:1px solid var(--border);color:var(--text2)}
.dv-email-pj{display:flex;flex-wrap:wrap;gap:4px;padding:6px 0 2px}
.dv-compose{border-top:1px solid var(--border);padding-top:10px;margin-top:6px}
.dv-compose-toolbar{display:flex;gap:4px;margin-bottom:6px}
.dv-compose-toolbar button{padding:2px 8px;border:1px solid var(--border2);border-radius:3px;background:var(--surface2);cursor:pointer;font-size:12px;color:var(--text2)}
.dv-compose-toolbar button:hover{background:var(--accent-light)}
.dv-compose-editor{min-height:100px;border:1px solid var(--border2);border-radius:5px;padding:8px 10px;font-size:12px;color:var(--text);background:var(--surface);outline:none;line-height:1.6}
.dv-compose-editor:focus{border-color:var(--accent)}
.dv-compose-editor:empty::before{content:attr(data-placeholder);color:var(--text3);pointer-events:none}

/* IA block */
.dv-ia-block{padding:12px 16px;display:flex;flex-direction:column;gap:5px}
.dv-ia-flight{font-size:12px;font-weight:600;color:var(--green);margin-bottom:4px}
.dv-ia-notflight{font-size:12px;font-weight:600;color:var(--red);margin-bottom:4px}
.dv-ia-extracted{font-size:11px;color:var(--text3);margin-bottom:6px}
.dv-ia-row{display:flex;gap:8px;font-size:12px;align-items:baseline}
.dv-ia-label{color:var(--text3);min-width:130px;font-size:11px;font-weight:600;flex-shrink:0}
.dv-ia-val{color:var(--text)}

/* Client matching */
.dv-client-assoc{padding:12px 16px}
.dv-match-exact{color:var(--green);font-size:12px;font-weight:600;display:flex;align-items:center;gap:6px}
.dv-match-fuzzy{color:var(--amber);font-size:12px;font-weight:600;display:flex;align-items:center;gap:6px}
.dv-match-unknown{color:var(--red);font-size:12px;font-weight:600;display:flex;align-items:center;gap:6px}
.dv-match-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}

/* Modals */
.modal-box{background:var(--surface);border-radius:8px;padding:24px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;position:relative;box-shadow:0 20px 60px rgba(0,0,0,.15)}
.modal-header{font-size:15px;font-weight:700;color:var(--text);margin-bottom:18px;padding-right:24px}
.modal-footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}

/* Formulaires */
.form-row{margin-bottom:14px}
.form-row-2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}
.form-row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:14px}
.form-label{display:block;font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;margin-bottom:4px}
.form-input,.form-select,.form-textarea{width:100%;padding:8px 10px;border:1px solid var(--border2);border-radius:4px;font-size:13px;font-family:var(--sans);color:var(--text);background:var(--surface);outline:none;transition:border-color .15s}
.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--accent)}
.form-textarea{resize:vertical;min-height:64px}
.form-select{appearance:auto}

/* ═══════════════════════════════════════ PASSAGERS ═══════════════════════ */
#panel-passengers.active{display:flex;flex-direction:column;height:calc(100vh - 52px)}
/* Liste */
/* ── PASSAGERS — Liste gauche ── */
.pax-toolbar{padding:10px 12px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.pax-search-wrap{margin-bottom:8px}
.pax-search{width:100%;padding:6px 10px;border:1px solid var(--border2);border-radius:5px;font-size:12px;font-family:var(--sans);color:var(--text);background:var(--surface2);outline:none}
.pax-search:focus{border-color:var(--accent)}
.pax-filters{display:flex;flex-wrap:wrap;gap:4px}
.pax-chip{padding:3px 9px;border-radius:10px;font-size:10px;font-weight:600;border:1px solid var(--border2);background:var(--surface2);color:var(--text2);cursor:pointer;transition:all .15s}
.pax-chip.active,.pax-chip:hover{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}
.pax-chip-vip.active{background:#fef3c7;border-color:#d97706;color:#b45309}
.pax-chip-gold.active{background:#fef9c3;border-color:#ca8a04;color:#854d0e}
.pax-chip-plat.active{background:#f5f3ff;border-color:#7c3aed;color:#5b21b6}
/* Zone items scrollable */
#pax-list{width:400px;min-width:320px}
.pax-items{flex:1;overflow-y:auto;overflow-x:hidden}
/* Bouton fixe en bas de liste */
.pax-list-footer{flex-shrink:0;padding:10px 12px;border-top:1px solid var(--border);background:var(--surface)}
.pax-new-btn{width:100%;padding:9px;border:1px dashed var(--border2);border-radius:6px;background:none;cursor:pointer;font-size:12px;font-weight:600;color:var(--accent);font-family:var(--sans);transition:background .12s}
.pax-new-btn:hover{background:var(--accent-light);border-color:var(--accent)}
.pax-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--border);transition:background .1s}
.pax-item:hover{background:var(--surface2)}
.pax-item.active{background:var(--accent-light);border-left:3px solid var(--accent)}
.pax-avatar{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:#fff;flex-shrink:0;letter-spacing:.5px}
.pax-item-body{flex:1;min-width:0}
.pax-item-name{font-size:12px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pax-item-meta{display:flex;align-items:center;gap:6px;margin-top:2px;flex-wrap:wrap}
.pax-loyalty-badge{font-size:9px;font-weight:700;padding:1px 6px;border-radius:8px;border:1px solid;display:inline-block}
.pax-loyalty-badge.lg{font-size:11px;padding:2px 10px;border-radius:10px}
.pax-empty{padding:24px;text-align:center;font-size:12px;color:var(--text3)}
/* Détail */
/* ── PASSAGERS — Fiche détail ── */
.pax-detail-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text3)}
/* Hero header */
.pax-hero{display:flex;align-items:center;gap:14px;padding:18px 20px;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.pax-hero-left{display:flex;align-items:center;gap:14px;flex:1;min-width:0}
.pax-hero-info{flex:1;min-width:0}
.pax-dh-avatar{border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;color:#fff;flex-shrink:0}
.pax-dh-name{font-size:17px;font-weight:700;color:var(--text)}
.pax-vip-star{font-size:11px;font-weight:700;color:#b45309;background:#fef3c7;padding:2px 8px;border-radius:8px;border:1px solid #fbbf24;margin-left:6px;vertical-align:middle}
.pax-hero-contact{font-size:11px;color:var(--text2);text-decoration:none;display:inline-flex;align-items:center;gap:3px}
.pax-hero-contact:hover{color:var(--accent)}
/* KPI row */
.pax-kpi-row{display:flex;gap:0;border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}
.pax-kpi{flex:1;padding:10px 14px;text-align:center;border-right:1px solid var(--border)}
.pax-kpi:last-child{border-right:none}
.pax-kpi-val{font-size:18px;font-weight:800;color:var(--text);font-family:var(--mono);line-height:1.2}
.pax-kpi-lbl{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--text3);margin-top:2px}
/* Barre fidélité */
.pax-loyalty-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px 16px;flex-shrink:0;margin:14px 14px 0}
.pax-loyalty-bar{height:7px;background:var(--border);border-radius:4px;overflow:hidden;margin:6px 0 3px}
.pax-loyalty-bar-fill{height:100%;border-radius:4px;transition:width .5s}
/* Corps scrollable */
.pax-body{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px}
/* En-tête de card */
.pax-card-hd{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--text2);margin-bottom:8px}
/* Tags préférences */
.pax-pref-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.pax-pref-tag{font-size:11px;font-weight:600;padding:4px 10px;border-radius:20px;background:var(--surface2);border:1px solid var(--border2);color:var(--text);white-space:nowrap}
.pax-pref-note{font-size:11px;color:var(--text2);margin-top:6px;background:#fafaf8;border-radius:5px;padding:6px 10px;border:1px solid var(--border)}
/* Identité / docs — 2 cards côte à côte */
.pax-cards-row{display:flex;gap:10px}
.pax-info-list{display:flex;flex-direction:column;gap:6px}
.pax-info-item{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12px}
.pax-info-k{color:var(--text3);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;flex-shrink:0}
.pax-info-v{color:var(--text);text-align:right}
.pax-info-v.mono{font-family:var(--mono);font-size:11px}
/* Notes ops */
.pax-notes-ops{font-size:12px;color:var(--text);line-height:1.6;background:#fffef5;border-radius:5px;padding:7px 10px;border:1px solid #fde68a}
/* Alertes passeport */
.pax-alert{font-size:9px;font-weight:700;padding:1px 6px;border-radius:4px;margin-left:4px;vertical-align:middle}
.pax-alert.red{background:#fee2e2;color:#dc2626;border:1px solid #fca5a5}
.pax-alert.amber{background:#fef9c3;color:#d97706;border:1px solid #fde68a}
/* Historique */
.pax-histo-card{}
.pax-histo-count{background:var(--accent);color:#fff;font-size:10px;font-weight:700;padding:1px 8px;border-radius:10px}
.pax-histo-list{display:flex;flex-direction:column}
.pax-histo-empty{font-size:11px;color:var(--text3);padding:8px 0;text-align:center}
.pax-histo-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
.pax-histo-row:last-child{border-bottom:none}
.pax-histo-left{flex:1;min-width:0}
.pax-histo-route{font-size:12px;font-weight:700;color:var(--text)}
.pax-histo-meta{font-size:10px;color:var(--text3);margin-top:2px}
.pax-histo-right{display:flex;align-items:center;gap:6px;flex-shrink:0}
.pax-histo-bag{font-size:10px;color:var(--text2);font-family:var(--mono);background:var(--surface2);padding:1px 6px;border-radius:4px}
.pax-hs-badge{font-size:9px;font-weight:700;padding:2px 7px;border-radius:8px;white-space:nowrap}
.pax-hs-conf{background:#d1fae5;color:#065f46}
.pax-hs-real{background:#dbeafe;color:#1e3a8a}
.pax-hs-ann {background:#fee2e2;color:#7f1d1d}
.pax-hs-opt {background:#fef9c3;color:#854d0e}
/* Misc */
.pax-loyalty-badge{font-size:9px;font-weight:700;padding:1px 6px;border-radius:8px;border:1px solid;display:inline-block}
.pax-loyalty-badge.lg{font-size:11px;padding:3px 10px;border-radius:10px}
.pax-empty-sm{font-size:11px;color:var(--text3);padding:2px 0}
.pax-link-btn{background:none;border:none;color:var(--accent);cursor:pointer;font-size:11px;padding:0;font-weight:600;font-family:var(--sans)}
.pax-link-btn:hover{text-decoration:underline}
.pax-fv.link{color:var(--accent);text-decoration:none}

/* ── Audit Historique ─────────────────────────────────────── */
.audit-wrap{display:flex;flex-direction:column;gap:14px;height:100%}
.audit-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px 14px}
.audit-filter-group{display:flex;flex-direction:column;gap:3px}
.audit-filter-group label{font-size:10px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.04em}
.audit-filter-group select,.audit-filter-group input[type=text],.audit-filter-group input[type=date]{height:30px;padding:0 8px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font-size:12px;min-width:110px}
.audit-meta{display:flex;align-items:center;font-size:11px;color:var(--text3);padding:4px 0}
.audit-table .audit-dt{white-space:nowrap;font-size:11px;font-family:var(--mono)}
.audit-table .audit-user{font-size:11px;color:var(--text2);max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.audit-table .audit-label{font-size:12px;font-weight:500;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.audit-badge{font-size:10px;font-weight:700;padding:2px 7px;border-radius:4px;white-space:nowrap;letter-spacing:.03em}
.audit-entity-type{font-size:10px;color:var(--text3);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.audit-detail-cell{padding:0!important;background:var(--surface2)}
.audit-json{margin:0;padding:10px 14px;font-size:11px;font-family:var(--mono);color:var(--text2);white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}
.audit-loading,.audit-empty,.audit-error{padding:40px;text-align:center;color:var(--text3);font-size:13px}
.audit-error{color:#dc2626}


/* ── Bases d'affectation — planning tab bar ──────────────── */
.base-tab-bar{display:flex;align-items:center;gap:4px;flex-shrink:0}
.base-tab{height:24px;padding:0 10px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text2);font-size:11px;font-weight:500;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s,border-color .15s}
.base-tab:hover{background:var(--surface2);color:var(--text)}
.base-tab.active{background:#023F75;color:#fff;border-color:#023F75}

/* ── Affectations base — lignes éditables ────────────────── */
.base-assign-row{display:flex;align-items:center;gap:6px;margin-bottom:4px}
.form-input-sm{height:28px;padding:0 8px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font-size:12px}
.form-input-sm:focus{outline:none;border-color:var(--accent)}
.bar-base{min-width:140px}
.bar-debut,.bar-fin{width:130px}
.bar-del{width:22px;height:22px;background:none;border:none;color:var(--text3);font-size:16px;cursor:pointer;line-height:1;padding:0}
.bar-del:hover{color:#dc2626}
.base-assign-chip{font-size:10px;font-weight:600;padding:1px 6px;border-radius:8px;border:1px solid;white-space:nowrap}
.base-entity-chip{display:inline-block;font-size:11px;padding:1px 7px;border-radius:4px;background:var(--surface2);border:1px solid var(--border);margin:1px 2px 1px 0;white-space:nowrap}
