  /* SOMA — V1 dashboard de staffing
     Palette PDF guidelines, full-screen 1920x1080, 3 onglets */
  :root{
    --bg:#f0f1f8;
    --bg-2:#e4e5ef;
    --paper:#ffffff;
    --ink:#1a1b4b;
    --ink-2:#2d2e60;
    --ink-3:#787885;
    --ink-4:#c8c9d4;
    --accent:#ca0e56;
    --accent-2:#f12f79;
    --accent-l:#f6adc6;
    --accent-bg:#fde2ed;
    /* statuts matrice */
    --st-match:#9CA8C2;
    --st-pos:#CA0E56;
    --st-go:#22C55E;
    --st-sb:#F97316;
    --st-no:#EF4444;
    /* utilitaires */
    --good:#16a34a;
    --warn:#d97706;
    --alert:#dc2626;
  }
  *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
  html,body{font-family:'Archivo',sans-serif;background:var(--bg);color:var(--ink);font-size:13px;line-height:1.4;-webkit-font-smoothing:antialiased}
  body{min-height:100vh}
  h1,h2,h3,h4{font-weight:800;letter-spacing:-0.02em;line-height:1.1}
  .mono{font-family:'IBM Plex Mono',monospace}
  button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
  select,input{font-family:inherit;color:inherit}
  ul{list-style:none}

  /* ============== TOP BAR ============== */
  .topbar{
    display:flex;align-items:center;gap:18px;
    padding:14px 24px;background:var(--ink);color:#fff;
    border-bottom:2px solid var(--ink);
    position:sticky;top:0;z-index:20;
  }
  .topbar .logo{display:flex;align-items:baseline;gap:10px}
  .topbar .logo .s{font-weight:900;font-size:20px;letter-spacing:-0.04em}
  .topbar .logo .mid{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:0.1em;color:var(--accent-2);font-weight:600;text-transform:uppercase}
  .topbar .sep{width:1px;height:24px;background:rgba(255,255,255,0.2)}
  .topbar .title{font-size:14px;font-weight:600;color:rgba(255,255,255,0.85)}
  .topbar .title span{color:var(--accent-2);font-family:'Caveat',cursive;font-size:20px;font-weight:700;margin:0 4px}
  .topbar .tabs{display:flex;gap:0;margin-left:auto}
  .topbar .tab{
    display:flex;align-items:center;gap:8px;
    padding:8px 18px;font-size:12px;font-weight:600;color:rgba(255,255,255,0.6);
    border-bottom:3px solid transparent;letter-spacing:-0.01em;
    transition:all 0.12s;
  }
  .topbar .tab .n{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--accent-2);font-weight:700;letter-spacing:0.05em}
  .topbar .tab:hover{color:#fff}
  .topbar .tab.active{color:#fff;border-bottom-color:var(--accent-2)}
  .topbar .topright{display:flex;align-items:center;gap:14px;margin-left:18px}
  .topbar .pill{font-family:'IBM Plex Mono',monospace;font-size:10px;padding:3px 8px;border:1px solid rgba(255,255,255,0.3);color:rgba(255,255,255,0.7);text-transform:uppercase;letter-spacing:0.06em}
  .topbar .src{font-family:'IBM Plex Mono',monospace;font-size:10px;color:rgba(255,255,255,0.5);text-transform:uppercase;letter-spacing:0.06em}

  /* ============== TAB CONTENT ============== */
  .tab-content{display:none;padding:24px 28px 60px}
  .tab-content.active{display:block}

  /* ============== HERO HEADER ============== */
  .vw-hero{
    display:flex;align-items:flex-end;justify-content:space-between;gap:32px;
    margin-bottom:20px;padding-bottom:14px;border-bottom:2px solid var(--ink);
  }
  .vw-hero h1{font-size:34px;letter-spacing:-0.03em}
  .vw-hero h1 b{color:var(--accent)}
  .vw-hero .lbl{
    display:inline-flex;align-items:center;gap:10px;margin-bottom:8px;
    font-family:'IBM Plex Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.1em;
  }
  .vw-hero .lbl .num{background:var(--accent);color:#fff;padding:3px 8px;font-weight:700}
  .vw-hero .lbl .tag{color:var(--ink-3);font-weight:500}
  .vw-hero .desc{font-size:13px;color:var(--ink-2);max-width:720px;margin-top:6px;line-height:1.5}
  .vw-hero .desc b{color:var(--ink);font-weight:700}
  .vw-hero .stats{display:flex;gap:20px;flex-shrink:0}
  .vw-hero .stat{text-align:right}
  .vw-hero .stat .v{font-size:32px;font-weight:900;letter-spacing:-0.03em;color:var(--ink);line-height:1}
  .vw-hero .stat .v.acc{color:var(--accent)}
  .vw-hero .stat .v.alert{color:var(--alert)}
  .vw-hero .stat .v.good{color:var(--good)}
  .vw-hero .stat .l{font-family:'IBM Plex Mono',monospace;font-size:9px;text-transform:uppercase;letter-spacing:0.06em;color:var(--ink-3);margin-top:3px;font-weight:600}

  /* ============== TOOLBAR ============== */
  .toolbar{
    display:flex;align-items:center;gap:14px;flex-wrap:wrap;
    padding:12px 16px;background:var(--paper);border:1.5px solid var(--ink);margin-bottom:14px;
  }
  .toolbar .group{display:flex;align-items:center;gap:6px}
  .toolbar label{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);font-weight:600;text-transform:uppercase;letter-spacing:0.06em}
  .toolbar select,.toolbar input[type=text]{
    font-family:'Archivo',sans-serif;font-size:12px;font-weight:500;
    border:1.5px solid var(--ink);background:#fff;padding:5px 10px;
  }
  .toolbar input[type=text]{min-width:200px}
  .toolbar .spacer{flex:1}
  .toolbar .count{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--ink-3);font-weight:600}
  .toolbar .count b{color:var(--ink);font-weight:700}

  /* ============== SECTION HEADER (Bench A/B) ============== */
  .sec-hd{
    display:flex;align-items:center;gap:14px;
    margin:18px 0 10px;padding:10px 14px;background:var(--ink);color:#fff;
  }
  .sec-hd .num{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--accent-2);font-weight:700;letter-spacing:0.08em}
  .sec-hd .ttl{font-size:15px;font-weight:800;letter-spacing:-0.01em}
  .sec-hd .sub{font-size:12px;color:rgba(255,255,255,0.7);font-weight:500}
  .sec-hd .ct{margin-left:auto;font-family:'IBM Plex Mono',monospace;font-size:11px;color:#fff;font-weight:700;background:var(--accent);padding:3px 9px;letter-spacing:0.04em}

  /* ============== TABLE (Bench / Opp) ============== */
  .tbl{
    width:100%;background:var(--paper);border:1.5px solid var(--ink);border-collapse:collapse;
    font-size:12.5px;
  }
  .tbl thead th{
    background:var(--bg-2);color:var(--ink);text-align:left;padding:10px 12px;
    font-family:'IBM Plex Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.06em;
    font-weight:700;border-bottom:2px solid var(--ink);
  }
  .tbl thead th.center{text-align:center}
  .tbl tbody td{padding:9px 12px;border-bottom:1px solid var(--ink-4);vertical-align:middle}
  .tbl tbody tr{cursor:pointer;transition:background 0.1s}
  .tbl tbody tr:hover{background:var(--accent-bg)}
  .tbl tbody tr.disabled{opacity:0.42;background:var(--bg-2)}
  .tbl tbody tr.disabled:hover{background:var(--bg-2)}
  .tbl .nm{font-weight:700;letter-spacing:-0.01em;font-size:13px;color:var(--ink)}
  .tbl .role{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.04em;margin-top:1px;font-weight:500}
  .tbl .nm-row{display:flex;flex-direction:column}

  /* date pills */
  .pill-d{display:inline-block;padding:2px 8px;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.04em}
  .pill-d.now{background:var(--good);color:#fff}
  .pill-d.soon{background:var(--bg-2);color:var(--ink);border:1px solid var(--ink-4)}
  .pill-d.late{background:var(--alert);color:#fff}

  .badge{display:inline-block;padding:2px 8px;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.04em}
  .badge.exp{background:var(--bg-2);color:var(--ink);border:1px solid var(--ink-4)}
  .badge.practice{background:var(--ink);color:#fff}
  .badge.ok{background:var(--good);color:#fff}
  .badge.ko{background:var(--alert);color:#fff}
  .badge.num{background:var(--accent);color:#fff;min-width:24px;text-align:center}
  .badge.num.zero{background:var(--bg-2);color:var(--ink-3);border:1px solid var(--ink-4)}

  /* completeness bar (opportunités) */
  .cpl{display:flex;align-items:center;gap:8px}
  .cpl .bar{width:80px;height:8px;background:var(--bg-2);border:1px solid var(--ink-4);position:relative}
  .cpl .bar .fill{position:absolute;inset:0;background:var(--good)}
  .cpl .bar .fill.med{background:var(--warn)}
  .cpl .bar .fill.low{background:var(--alert)}
  .cpl .pct{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;color:var(--ink);min-width:30px}
  .cpl .pct.med{color:var(--warn)}
  .cpl .pct.low{color:var(--alert)}

  /* toggle */
  .tg{
    position:relative;display:inline-block;width:34px;height:18px;
    background:var(--bg-2);border:1.5px solid var(--ink);cursor:pointer;
    flex-shrink:0;
  }
  .tg::after{
    content:"";position:absolute;top:1px;left:1px;width:13px;height:13px;
    background:var(--ink);transition:left 0.15s;
  }
  .tg.on{background:var(--accent)}
  .tg.on::after{left:18px;background:#fff}
  .tg-cell{display:flex;align-items:center;gap:8px}
  .tg-cell .lbl-tg{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);font-weight:600;letter-spacing:0.04em}
  .tg-cell .lbl-tg.on{color:var(--alert)}

  /* alert tag for bench long */
  .tag-warn{
    display:inline-block;font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;
    background:var(--alert);color:#fff;padding:1px 5px;letter-spacing:0.04em;margin-left:6px;vertical-align:middle;
  }

  /* ============== MATRICE ============== */
  .mx-wrap{
    background:var(--paper);border:1.5px solid var(--ink);overflow:auto;
    max-width:100%;max-height:calc(100vh - 280px);
    position:relative;
  }
  .mx{border-collapse:collapse;font-family:'Archivo',sans-serif;width:max-content}
  .mx th,.mx td{border:1px solid var(--ink-4);background:#fff;vertical-align:top;padding:0;position:relative}

  /* corner */
  .mx thead th.corner{
    background:var(--ink);color:#fff;position:sticky;top:0;left:0;z-index:6;
    text-align:left;padding:10px 12px;
    border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);
    font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:0.08em;
    text-transform:uppercase;font-weight:600;min-width:280px;vertical-align:bottom;
  }
  .mx thead th.corner .big{display:block;font-family:'Archivo',sans-serif;font-size:14px;font-weight:800;letter-spacing:-0.01em;text-transform:none;color:#fff;margin-bottom:1px}
  .mx thead th.corner .mid{display:block;font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:600;color:var(--accent-2);text-transform:uppercase;letter-spacing:0.06em}

  /* consultant column header (top) */
  .mx thead th.csl-col{
    background:var(--bg-2);height:200px;vertical-align:bottom;
    min-width:80px;max-width:80px;padding:0;
    position:sticky;top:0;z-index:3;border-bottom:2px solid var(--ink);
    overflow:hidden;
  }
  .mx thead th.csl-col .rot{
    transform:rotate(-65deg);transform-origin:left bottom;
    white-space:nowrap;position:absolute;left:50%;bottom:10px;
    width:160px;text-align:left;display:flex;flex-direction:column;gap:1px;
    font-size:12.5px;line-height:1.2;
  }
  .mx thead th.csl-col .rot .nm{font-weight:700;letter-spacing:-0.01em;color:var(--ink)}
  .mx thead th.csl-col .rot .pr{font-family:'IBM Plex Mono',monospace;font-size:10.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.05em;font-weight:600}
  .mx thead th.csl-col .rot .dt{font-family:'IBM Plex Mono',monospace;font-size:10.5px;color:var(--good);font-weight:700;letter-spacing:0.04em}
  .mx thead th.csl-col .rot .dt.soon{color:var(--ink-3)}
  .mx thead th.csl-col.disabled{background:repeating-linear-gradient(45deg,var(--bg-2),var(--bg-2) 4px,#d8d9e3 4px,#d8d9e3 8px)}
  .mx thead th.csl-col.disabled .rot{opacity:0.45}
  .mx thead th.csl-col.benchlong::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--alert)}

  /* opp row header (left) */
  .mx tbody th.opp-row{
    background:var(--paper);position:sticky;left:0;z-index:2;
    text-align:left;padding:8px 12px;min-width:280px;max-width:280px;
    border-right:2px solid var(--ink);border-bottom:1px solid var(--ink-4);
    font-weight:500;
  }
  .mx tbody th.opp-row .ref{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;font-weight:600}
  .mx tbody th.opp-row .ttl{font-weight:700;font-size:13px;letter-spacing:-0.01em;color:var(--ink);margin-top:1px}
  .mx tbody th.opp-row .cli{font-size:11px;color:var(--ink-2);margin-top:2px}
  .mx tbody th.opp-row .meta{display:flex;gap:6px;align-items:center;margin-top:4px;font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.04em}
  .mx tbody th.opp-row.uncov{background:#ffe8e8}
  .mx tbody th.opp-row.uncov .ttl{color:var(--alert)}
  .mx tbody th.opp-row.disabled{background:repeating-linear-gradient(45deg,var(--bg-2),var(--bg-2) 4px,#d8d9e3 4px,#d8d9e3 8px);opacity:0.65}
  .mx tbody tr.cli-start td,.mx tbody tr.cli-start th{border-top:2px solid var(--ink)}
  .mx tbody th.opp-row.first-cli .cli-banner{
    font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;
    color:var(--accent);text-transform:uppercase;letter-spacing:0.08em;
    margin-bottom:4px;padding-bottom:4px;border-bottom:1px dashed var(--ink-4);
  }

  /* cell — status colored */
  .mx td.cell{width:80px;height:56px;padding:0;text-align:center;cursor:pointer;transition:transform 0.1s,outline 0.05s;position:relative;user-select:none}
  .mx td.cell:hover{outline:3px solid var(--accent);z-index:1;transform:scale(1.06)}
  .mx td.cell.disabled{opacity:0.25;cursor:not-allowed}
  .mx td.cell.disabled:hover{outline:none;transform:none}
  .mx td.cell.s-empty{background:#fff}
  .mx td.cell.s-match{background:#9CA8C2}
  .mx td.cell.s-pos{background:#CA0E56}
  .mx td.cell.s-go{background:#22C55E}
  .mx td.cell.s-sb{background:#F97316}
  .mx td.cell.s-no{background:#EF4444}

  /* sub-step icon for "positionné" */
  .mx td.cell .ic{
    display:flex;align-items:center;justify-content:center;
    width:100%;height:100%;font-size:14px;color:#fff;line-height:1;
  }
  .mx td.cell.s-empty .ic{color:var(--ink-4);font-size:10px;font-weight:400}
  .mx td.cell.s-match .ic{color:transparent}

  /* row totals */
  .mx td.t-row,.mx th.t-col{
    background:var(--bg-2);font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;
    color:var(--ink);text-align:center;padding:6px;border-left:2px solid var(--ink);min-width:42px;
  }
  .mx td.t-row.zero{background:#ffe8e8;color:var(--alert)}
  .mx tfoot th.foot-l{
    background:var(--ink-2);color:#fff;position:sticky;left:0;z-index:3;
    font-family:'IBM Plex Mono',monospace;font-size:10px;text-align:left;padding:8px 12px;
    text-transform:uppercase;letter-spacing:0.06em;font-weight:700;border-top:2px solid var(--ink);
  }
  .mx tfoot td{
    background:var(--bg-2);font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;
    text-align:center;padding:6px;border-top:2px solid var(--ink);
  }
  .mx tfoot td.alert-cell{background:#ffe8e8;color:var(--alert)}

  /* matrice legend */
  .mx-legend{
    display:flex;align-items:flex-start;gap:24px;flex-wrap:wrap;
    margin-top:14px;padding:14px 18px;background:var(--paper);border:1.5px solid var(--ink);
  }
  .mx-legend .blk{display:flex;flex-direction:column;gap:6px}
  .mx-legend .blk h4{font-size:10px;font-family:'IBM Plex Mono',monospace;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);margin-bottom:2px}
  .mx-legend .row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-2)}
  .mx-legend .sw{width:18px;height:18px;border:1px solid var(--ink);flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:11px}
  .mx-legend .hint{font-size:11px;color:var(--ink-3);max-width:240px;line-height:1.45}

  /* ============== COLONNE AUTRE (TASK-18) ============== */
  .mx thead th.csl-col.autre-col { background:repeating-linear-gradient(135deg,var(--bg-2),var(--bg-2) 4px,#e8e4f8 4px,#e8e4f8 8px) }
  .mx thead th.csl-col.autre-col .rot .nm { color:#7C3AED;font-weight:800 }
  .mx thead th.csl-col.autre-col .rot .dt { color:#7C3AED }
  .mx td.cell.s-ind { background:#7C3AED }
  .mx td.cell.s-stg { background:#0891B2 }
  .mx td.cell.s-alt { background:#059669 }
  .mx td.cell.s-autre { background:#92400E }
  .mx td.cell.autre-cell { cursor:pointer }
  .ic-autre { display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;gap:2px;padding:2px }
  .badge-autre { font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;color:#fff;letter-spacing:0.08em }
  .nm-autre { font-size:8px;color:rgba(255,255,255,0.85);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:74px;text-align:center }
  /* menu contextuel AUTRE */
  .autre-opts { display:flex;flex-direction:column }
  .autre-name-row { padding:6px 10px }
  .autre-name-row input { width:100%;font-family:'Archivo',sans-serif;font-size:12px;padding:5px 8px;border:1.5px solid var(--ink-4);background:var(--paper);color:var(--ink);outline:none }
  .autre-name-row input:focus { border-color:var(--accent) }
  .opt-confirm { background:var(--ink);color:#fff;font-weight:700;text-align:center;justify-content:center }
  .opt-confirm:hover { background:var(--accent) }

  /* ============== MATRICE FULLSCREEN ============== */
  body.mx-fullscreen .topbar,
  body.mx-fullscreen .vw-hero,
  body.mx-fullscreen .toolbar,
  body.mx-fullscreen .mx-legend { display:none !important }
  body.mx-fullscreen .tab-content { padding:0 !important }
  body.mx-fullscreen .mx-wrap {
    position:fixed !important;
    top:0;left:0;width:100vw;height:100vh;
    max-height:100vh !important;
    z-index:200;border:none;
  }
  .mx-fs-btn {
    display:inline-flex;align-items:center;gap:6px;
    font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;
    padding:4px 10px;border:1.5px solid var(--ink);background:var(--paper);
    color:var(--ink);cursor:pointer;letter-spacing:0.04em;text-transform:uppercase;
    transition:background 0.1s;
  }
  .mx-fs-btn:hover { background:var(--ink);color:#fff }
  .mx-fs-exit {
    position:fixed;top:12px;right:16px;z-index:300;
    font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;
    padding:6px 14px;background:var(--ink);color:#fff;border:none;cursor:pointer;
    letter-spacing:0.06em;text-transform:uppercase;box-shadow:0 2px 8px rgba(0,0,0,0.3);
    display:none;
  }
  body.mx-fullscreen .mx-fs-exit { display:block }

  /* ============== CONTEXT MENU (cell click) ============== */
  .ctxm{
    position:fixed;z-index:300;background:var(--paper);border:2px solid var(--ink);
    box-shadow:6px 6px 0 var(--ink);min-width:220px;display:none;
  }
  .ctxm.on{display:block}
  .ctxm .hd{padding:10px 14px;background:var(--ink);color:#fff;font-family:'IBM Plex Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.08em;font-weight:700;display:flex;justify-content:space-between;align-items:center}
  .ctxm .hd .x{cursor:pointer;color:rgba(255,255,255,0.6);font-size:14px;line-height:1}
  .ctxm .hd .x:hover{color:#fff}
  .ctxm .ctx-sub{padding:6px 14px 4px;font-size:11px;color:var(--ink-3);font-weight:500;border-bottom:1px solid var(--ink-4)}
  .ctxm .ctx-sub b{color:var(--ink);font-weight:700}
  .ctxm .opt{
    display:flex;align-items:center;gap:10px;padding:8px 14px;cursor:pointer;
    border-top:1px solid var(--ink-4);font-size:13px;font-weight:600;
    transition:background 0.08s;
  }
  .ctxm .opt:first-of-type{border-top:none}
  .ctxm .opt:hover{background:var(--accent-bg)}
  .ctxm .opt .sw{width:14px;height:14px;border:1px solid var(--ink);flex-shrink:0}
  .ctxm .opt.cur{background:var(--accent-bg)}
  .ctxm .opt.cur::after{content:"●";margin-left:auto;color:var(--accent);font-size:14px}
  .ctxm .opt.sub{padding:6px 14px 6px 36px;font-size:12px;border-top:none;color:var(--ink-2)}
  .ctxm .opt.sub.cur{background:#fde8c7}
  .ctxm .opt.reset{color:var(--alert);border-top:1px solid var(--ink-4)}
  .ctxm .opt.reset .sw{background:#fff;border-color:var(--alert)}

  /* ============== OVERLAY (détail consultant / opp) ============== */
  .ov-back{
    position:fixed;inset:0;background:rgba(26,27,75,0.5);z-index:100;display:none;
  }
  .ov-back.on{display:block}
  .ov-panel{
    position:fixed;top:0;right:0;height:100vh;width:520px;max-width:100%;
    background:var(--paper);border-left:2px solid var(--ink);
    z-index:101;transform:translateX(100%);transition:transform 0.25s ease;
    display:flex;flex-direction:column;overflow:hidden;
  }
  .ov-panel.on{transform:translateX(0)}
  .ov-hd{padding:18px 22px;background:var(--ink);color:#fff;border-bottom:2px solid var(--ink);position:relative;flex-shrink:0}
  .ov-hd .lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--accent-2);font-weight:700;letter-spacing:0.08em;text-transform:uppercase}
  .ov-hd h2{font-size:22px;letter-spacing:-0.02em;margin-top:4px}
  .ov-hd .sub{font-size:13px;color:rgba(255,255,255,0.75);margin-top:6px;font-weight:500}
  .ov-hd .x{
    position:absolute;top:18px;right:22px;width:32px;height:32px;
    background:rgba(255,255,255,0.1);color:#fff;font-size:16px;cursor:pointer;
    display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,0.3);
  }
  .ov-hd .x:hover{background:var(--accent)}
  .ov-bd{padding:22px;overflow-y:auto;flex:1}
  .ov-section{margin-bottom:22px}
  .ov-section h3{font-size:11px;font-family:'IBM Plex Mono',monospace;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--ink-4)}
  .ov-kv{display:grid;grid-template-columns:140px 1fr;row-gap:6px;column-gap:14px;font-size:12.5px}
  .ov-kv dt{color:var(--ink-3);font-weight:500}
  .ov-kv dd{color:var(--ink);font-weight:600}
  .ov-skills{display:flex;flex-wrap:wrap;gap:5px}
  .ov-skills .sk{font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:600;padding:2px 7px;background:var(--bg-2);color:var(--ink);border:1px solid var(--ink-4);letter-spacing:0.03em}
  .ov-hist{display:flex;flex-direction:column;gap:10px}
  .ov-hist .it{display:grid;grid-template-columns:90px 1fr;gap:14px;padding:8px 0;border-bottom:1px solid var(--ink-4)}
  .ov-hist .it:last-child{border-bottom:none}
  .ov-hist .it .dur{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);font-weight:600}
  .ov-hist .it .info b{display:block;font-size:13px;color:var(--ink);margin-bottom:2px}
  .ov-hist .it .info span{font-size:11px;color:var(--ink-2)}
  .ov-pos{display:flex;flex-direction:column;gap:8px}
  .ov-pos .it{
    display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--bg-2);
    border-left:4px solid var(--ink);font-size:12.5px
  }
  .ov-pos .it .sw{width:14px;height:14px;border:1px solid var(--ink);flex-shrink:0}
  .ov-pos .it b{color:var(--ink);font-weight:700;flex:1}

  /* footer notes */
  .vw-notes{
    display:grid;grid-template-columns:1fr 4fr;gap:0;
    background:var(--ink);color:#fff;padding:0;margin-top:24px;
  }
  .vw-notes .side{
    background:var(--accent);padding:18px 20px;
    font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;
    text-transform:uppercase;letter-spacing:0.08em;line-height:1.5;
  }
  .vw-notes .body{padding:18px 24px;font-size:12.5px;line-height:1.55;color:rgba(255,255,255,0.92)}
  .vw-notes .body h4{font-size:13px;color:var(--accent-2);margin-bottom:8px;letter-spacing:0.04em;text-transform:uppercase;font-family:'IBM Plex Mono',monospace}
  .vw-notes .body ul{margin-left:18px;list-style:disc}
  .vw-notes .body ul li{margin-bottom:4px}
  .vw-notes .body b{color:#fff;font-weight:700}

  /* ============== ADD-RESOURCE BUTTON & MODAL ============== */
  .btn-add{
    background:var(--accent);color:#fff;font-weight:700;font-size:12px;
    padding:7px 14px;letter-spacing:-0.005em;border:1.5px solid var(--ink);
    transition:background 0.1s;
  }
  .btn-add:hover{background:var(--ink)}
  .btn-add.sec{background:var(--paper);color:var(--ink);border:1.5px solid var(--ink);font-family:'IBM Plex Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.06em;padding:5px 10px}
  .btn-add.sec:hover{background:var(--ink);color:#fff}

  .modal-back{position:fixed;inset:0;background:rgba(26,27,75,0.55);z-index:200;display:none;align-items:center;justify-content:center;padding:40px}
  .modal-back.on{display:flex}
  .modal{background:var(--paper);border:2px solid var(--ink);box-shadow:8px 8px 0 var(--ink);width:560px;max-width:100%;max-height:90vh;overflow-y:auto}
  .modal-hd{background:var(--ink);color:#fff;padding:18px 22px;display:flex;justify-content:space-between;align-items:flex-start}
  .modal-hd h2{font-size:18px;letter-spacing:-0.01em}
  .modal-hd .lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--accent-2);font-weight:700;letter-spacing:0.08em;text-transform:uppercase;margin-bottom:4px}
  .modal-hd .x{cursor:pointer;color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1);width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,0.2)}
  .modal-hd .x:hover{background:var(--accent);color:#fff}
  .modal-bd{padding:22px}
  .modal-bd .desc{font-size:12.5px;color:var(--ink-2);margin-bottom:16px;line-height:1.5;padding:10px 12px;background:var(--bg);border-left:3px solid var(--accent)}
  .modal-bd .desc b{color:var(--ink)}
  .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .form-grid .full{grid-column:1/-1}
  .form-grid label{display:block;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;margin-bottom:4px}
  .form-grid input,.form-grid select{width:100%;font-family:'Archivo',sans-serif;font-size:13px;border:1.5px solid var(--ink);background:#fff;padding:7px 10px;font-weight:500}
  .form-grid input:focus,.form-grid select:focus{outline:2px solid var(--accent);outline-offset:-1px}
  .form-grid .check{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--ink-2);margin-top:4px;font-weight:500}
  .form-grid .check input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}
  .modal-ft{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px;background:var(--bg);border-top:1.5px solid var(--ink)}
  .modal-ft .btn-cancel{background:transparent;color:var(--ink);font-weight:600;font-size:12px;padding:7px 14px;border:1.5px solid var(--ink)}
  .modal-ft .btn-cancel:hover{background:var(--ink);color:#fff}
  .modal-ft .btn-save{background:var(--accent);color:#fff;font-weight:700;font-size:12px;padding:7px 16px;border:1.5px solid var(--ink)}
  .modal-ft .btn-save:hover{background:var(--ink)}

  /* added-resource badge */
  .badge.manual{background:var(--accent-2);color:#fff}

  /* ============== ANALYSE TAB ============== */
  .an-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:14px}
  .an-card{background:var(--paper);border:1.5px solid var(--ink);padding:18px 20px;display:flex;flex-direction:column;gap:10px}
  .an-card.span-3{grid-column:span 3}
  .an-card.span-4{grid-column:span 4}
  .an-card.span-6{grid-column:span 6}
  .an-card.span-8{grid-column:span 8}
  .an-card.span-12{grid-column:span 12}
  .an-card .hd{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;border-bottom:1px solid var(--ink-4);padding-bottom:10px;margin-bottom:6px}
  .an-card .hd .ttl{font-size:11px;font-family:'IBM Plex Mono',monospace;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em}
  .an-card .hd .num{font-family:'IBM Plex Mono',monospace;font-size:9px;color:var(--accent);font-weight:700;letter-spacing:0.08em}
  .an-card .hd .sub{font-size:11px;color:var(--ink-3);font-weight:500}
  .kpi-big{display:flex;align-items:baseline;gap:8px}
  .kpi-big .v{font-size:38px;font-weight:900;letter-spacing:-0.03em;color:var(--ink);line-height:1}
  .kpi-big .v.acc{color:var(--accent)}
  .kpi-big .v.alert{color:var(--alert)}
  .kpi-big .v.good{color:var(--good)}
  .kpi-big .u{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--ink-3);font-weight:600;text-transform:uppercase}
  .kpi-trend{display:flex;align-items:center;gap:6px;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.04em}
  .kpi-trend.up{color:var(--good)}
  .kpi-trend.down{color:var(--alert)}
  .kpi-trend.flat{color:var(--ink-3)}
  .kpi-foot{font-size:11px;color:var(--ink-3);font-weight:500;line-height:1.4}

  /* horizontal bar chart (taux occupation par month) */
  .bar-chart{display:flex;flex-direction:column;gap:9px;margin-top:6px}
  .bar-chart .bc-row{display:grid;grid-template-columns:60px 1fr 50px;align-items:center;gap:10px}
  .bar-chart .bc-lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);font-weight:600;text-transform:uppercase;letter-spacing:0.04em}
  .bar-chart .bc-track{position:relative;height:22px;background:var(--bg-2);border:1px solid var(--ink-4)}
  .bar-chart .bc-fill{position:absolute;top:0;bottom:0;left:0;background:var(--accent);transition:width 0.3s}
  .bar-chart .bc-fill.good{background:var(--good)}
  .bar-chart .bc-fill.warn{background:var(--warn)}
  .bar-chart .bc-fill.alert{background:var(--alert)}
  .bar-chart .bc-target{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink)}
  .bar-chart .bc-val{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;color:var(--ink);text-align:right}

  /* stacked bar chart (funnel par mois) */
  .stack-chart{display:flex;flex-direction:column;gap:8px;margin-top:6px}
  .stack-chart .sc-row{display:grid;grid-template-columns:60px 1fr 80px;align-items:center;gap:10px}
  .stack-chart .sc-lbl{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--ink-3);font-weight:600;text-transform:uppercase;letter-spacing:0.04em}
  .stack-chart .sc-track{display:flex;height:22px;background:var(--bg-2);border:1px solid var(--ink-4);overflow:hidden}
  .stack-chart .sc-seg{height:100%;display:flex;align-items:center;justify-content:center;color:#fff;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700}
  .stack-chart .sc-tot{font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:700;color:var(--ink);text-align:right}

  /* legend chips */
  .legend-chips{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
  .legend-chips .cp{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-2);font-weight:600}
  .legend-chips .cp .sw{width:12px;height:12px;border:1px solid var(--ink)}

  /* table mini */
  .mini-tbl{width:100%;border-collapse:collapse;font-size:12px}
  .mini-tbl th{text-align:left;padding:6px 8px;font-family:'IBM Plex Mono',monospace;font-size:9px;font-weight:700;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.06em;border-bottom:1.5px solid var(--ink)}
  .mini-tbl th.r{text-align:right}
  .mini-tbl td{padding:7px 8px;border-bottom:1px solid var(--ink-4);vertical-align:middle}
  .mini-tbl td.r{text-align:right;font-family:'IBM Plex Mono',monospace;font-weight:700}
  .mini-tbl td b{font-weight:700;color:var(--ink)}
  .mini-tbl tr:last-child td{border-bottom:none}
  .mini-tbl .pos{color:var(--good)}
  .mini-tbl .neg{color:var(--alert)}

  /* month picker */
  .month-tabs{display:flex;gap:0;border:1.5px solid var(--ink);background:var(--paper)}
  .month-tabs button{
    flex:1;padding:8px 10px;font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;
    letter-spacing:0.06em;text-transform:uppercase;color:var(--ink-3);border-right:1px solid var(--ink-4);
    transition:all 0.1s;
  }
  .month-tabs button:last-child{border-right:none}
  .month-tabs button:hover{background:var(--bg)}
  .month-tabs button.cur{background:var(--ink);color:#fff}
  .month-tabs button.cur::after{content:" ●";color:var(--accent-2)}

  /* responsive guard */
  @media (max-width:1100px){
    .vw-hero{flex-direction:column;align-items:flex-start;gap:16px}
    .vw-hero .stats{align-self:stretch;justify-content:space-between;flex-wrap:wrap}
  }
