:root{
  --bg:#F2F4F3; --panel:#FFFFFF; --ink:#17202C; --ink2:#4E5968; --ink3:#7D8796; --rule:#D8DDE3; --rule2:#E9ECEF;
  --accent:#25507A; --accent-soft:#E4EBF3;
  --l1:#25507A; --l2:#7C98BA; --l3:#2F7263; --l4:#9B6A2E; --l5:#C9A062; --li:#B3BAC3; --off:#DADFE4;
  --warn:#8A5A00; --warn-bg:#FBF0DA; --breach:#B42318; --breach-bg:#FBE9E7; --ok:#2E6B4F; --ok-bg:#E6F1EB;
  --serif:"Iowan Old Style","Charter","Palatino Linotype",Georgia,serif;
  --sans:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,system-ui,sans-serif;
  box-sizing:border-box; padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px);
}
@media (prefers-color-scheme:dark){ :root:not([data-theme="light"]){
  --bg:#10151B; --panel:#171D25; --ink:#E4E8EE; --ink2:#A6B0BD; --ink3:#7C8795; --rule:#2B333E; --rule2:#212832;
  --accent:#86ACD4; --accent-soft:#1F2C3B;
  --l1:#6E9ACB; --l2:#9FB7D4; --l3:#5FA592; --l4:#C8964F; --l5:#DDB77A; --li:#5E6875; --off:#2A313A;
  --warn:#E3B55E; --warn-bg:#2E2616; --breach:#F08A7E; --breach-bg:#3A1F1C; --ok:#7CC3A0; --ok-bg:#16291F; } }
:root[data-theme="dark"]{
  --bg:#10151B; --panel:#171D25; --ink:#E4E8EE; --ink2:#A6B0BD; --ink3:#7C8795; --rule:#2B333E; --rule2:#212832;
  --accent:#86ACD4; --accent-soft:#1F2C3B;
  --l1:#6E9ACB; --l2:#9FB7D4; --l3:#5FA592; --l4:#C8964F; --l5:#DDB77A; --li:#5E6875; --off:#2A313A;
  --warn:#E3B55E; --warn-bg:#2E2616; --breach:#F08A7E; --breach-bg:#3A1F1C; --ok:#7CC3A0; --ok-bg:#16291F; }
*,*::before,*::after{ box-sizing:inherit; }
html{ height:100%; scroll-padding-top:env(safe-area-inset-top,0px); }
body{ margin:0; height:100%; background:var(--bg); color:var(--ink); font:14px/1.5 var(--sans); font-variant-numeric:tabular-nums; -webkit-font-smoothing:antialiased; }
button,input,select{ font:inherit; color:inherit; }
:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; border-radius:3px; }
a{ color:var(--accent); }

.app{ display:grid; grid-template-columns:220px 1fr; height:100%; }
.nav{ border-right:1px solid var(--rule); background:var(--panel); display:flex; flex-direction:column; padding:22px 14px 16px; overflow-y:auto; }
.brand{ font-family:var(--serif); font-size:19px; font-weight:600; letter-spacing:-.01em; padding:0 10px 2px; }
.brand-sub{ color:var(--ink3); font-size:12.5px; padding:0 10px 20px; }
.nav ul{ list-style:none; margin:0; padding:0; }
.nav li a{ display:flex; justify-content:space-between; align-items:center; padding:7px 10px; border-radius:6px; color:var(--ink2); text-decoration:none; }
.nav li a:hover{ background:var(--rule2); color:var(--ink); }
.nav li a[aria-current="page"]{ background:var(--accent-soft); color:var(--ink); font-weight:600; }
.nav .sep{ height:1px; background:var(--rule2); margin:10px 10px; }
.badge{ font-size:11.5px; min-width:20px; text-align:center; padding:0 6px; border-radius:10px; background:var(--breach-bg); color:var(--breach); font-weight:600; }
.nav-foot{ margin-top:auto; padding:14px 10px 0; border-top:1px solid var(--rule2); font-size:12.5px; color:var(--ink3); display:grid; gap:6px; }
.nav-foot select{ background:transparent; border:1px solid var(--rule); border-radius:6px; padding:3px 6px; }
.dot{ display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--ok); margin-right:6px; vertical-align:1px; }

main{ overflow-y:auto; height:100%; }
.page{ max-width:1320px; margin:0 auto; padding:30px 36px 60px; }
.page-head{ display:flex; justify-content:space-between; align-items:flex-end; gap:20px; flex-wrap:wrap; margin-bottom:6px; }
h1{ font-family:var(--serif); font-weight:600; font-size:29px; line-height:1.15; letter-spacing:-.015em; margin:0; }
.lead{ font-family:var(--serif); font-size:18.5px; line-height:1.5; color:var(--ink2); max-width:68ch; margin:10px 0 26px; }
.lead strong{ color:var(--ink); font-weight:600; }
h2{ font-size:14.5px; font-weight:650; margin:0 0 10px; }
h2 .h2-note{ font-weight:400; color:var(--ink3); margin-left:8px; }
.sect{ margin:0 0 30px; }
.muted{ color:var(--ink3); }
.small{ font-size:12.5px; }

/* chiffres traçables */
[data-trace]{ cursor:pointer; text-decoration:underline dotted var(--ink3); text-underline-offset:3px; text-decoration-thickness:1px; }
tr[data-trace]{ text-decoration:none; }
[data-trace]:hover{ text-decoration-color:var(--accent); color:var(--accent); }
.fig{ font-family:var(--serif); font-size:30px; font-weight:600; line-height:1.1; letter-spacing:-.01em; }
.fig-l{ color:var(--ink3); font-size:12.5px; margin-top:4px; }
.rule-code{ font-size:11.5px; font-weight:600; color:var(--accent); background:var(--accent-soft); border-radius:4px; padding:1px 6px; white-space:nowrap; }

/* boutons, contrôles */
.btn{ border:1px solid var(--rule); background:var(--panel); border-radius:6px; padding:6px 12px; cursor:pointer; }
.btn:hover{ border-color:var(--ink3); }
.btn-primary{ background:var(--accent); border-color:var(--accent); color:var(--panel); font-weight:600; }
.btn-primary:hover{ filter:brightness(1.08); }
.seg{ display:inline-flex; border:1px solid var(--rule); border-radius:6px; overflow:hidden; }
.seg button{ border:0; background:var(--panel); padding:5px 11px; cursor:pointer; border-right:1px solid var(--rule); }
.seg button:last-child{ border-right:0; }
.seg button[aria-pressed="true"]{ background:var(--accent-soft); font-weight:600; }
.tools{ display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
label.chk{ display:inline-flex; gap:6px; align-items:center; color:var(--ink2); cursor:pointer; }
.field{ display:grid; gap:4px; }
.field label{ font-size:12.5px; color:var(--ink2); }
.field input,.field select{ border:1px solid var(--rule); border-radius:6px; padding:6px 8px; background:var(--panel); min-width:0; }

/* tableaux */
.tbl-wrap{ overflow-x:auto; border:1px solid var(--rule); border-radius:8px; background:var(--panel); }
table{ border-collapse:collapse; width:100%; }
th,td{ padding:8px 10px; text-align:left; border-bottom:1px solid var(--rule2); white-space:nowrap; }
th{ font-weight:600; font-size:12.5px; color:var(--ink2); background:var(--panel); position:sticky; top:0; }
td.num,th.num{ text-align:right; }
tr:last-child td{ border-bottom:0; }
tbody tr.click{ cursor:pointer; }
tbody tr.click:hover td{ background:var(--rule2); }
tr.sel td{ background:var(--accent-soft); }
tfoot td{ font-weight:650; border-top:1px solid var(--rule); border-bottom:0; }
.est{ color:var(--ink3); font-style:italic; }
.tag{ font-size:11.5px; border-radius:4px; padding:1px 6px; background:var(--rule2); color:var(--ink2); white-space:nowrap; }
.tag.ok{ background:var(--ok-bg); color:var(--ok); } .tag.warn{ background:var(--warn-bg); color:var(--warn); } .tag.breach{ background:var(--breach-bg); color:var(--breach); }
.sw{ display:inline-block; width:10px; height:10px; border-radius:2px; margin-right:7px; vertical-align:-1px; }

/* couleurs de lignes */
.c-l1{ --c:var(--l1); } .c-l2{ --c:var(--l2); } .c-l3{ --c:var(--l3); } .c-l4{ --c:var(--l4); } .c-l5{ --c:var(--l5); } .c-li{ --c:var(--li); }
.sw{ background:var(--c); }

/* cockpit */
.cockpit{ display:grid; grid-template-columns:1.25fr 1fr; gap:34px 44px; }
.today-row{ display:grid; grid-template-columns:120px 1fr; gap:14px; padding:10px 0; border-bottom:1px solid var(--rule2); }
.today-row:last-child{ border-bottom:0; }
.q-strip{ display:flex; gap:3px; flex-wrap:wrap; }
.q-strip span{ font-size:12.5px; padding:2px 8px; border-radius:4px; background:color-mix(in srgb,var(--c) 16%,transparent); border-left:3px solid var(--c); }
.figs{ display:grid; grid-template-columns:repeat(3,1fr); gap:18px; }
.anom{ display:grid; grid-template-columns:auto 1fr auto; gap:6px 12px; align-items:baseline; padding:9px 0; border-bottom:1px solid var(--rule2); }
.anom:last-child{ border-bottom:0; }
.lvl{ width:8px; height:8px; border-radius:50%; background:var(--warn); display:inline-block; }
.lvl.alerte{ background:var(--breach); }
.bar{ height:8px; border-radius:4px; background:var(--rule2); position:relative; overflow:hidden; }
.bar > i{ position:absolute; top:0; bottom:0; left:0; background:var(--accent); }
.bar > i.b2{ background:color-mix(in srgb,var(--accent) 40%,transparent); }

/* workload */
.wl{ border:1px solid var(--rule); border-radius:8px; background:var(--panel); overflow-x:auto; }
.wl-grid{ display:grid; min-width:max-content; }
.wl-hd{ font-size:11.5px; color:var(--ink3); text-align:center; padding:6px 0 4px; border-bottom:1px solid var(--rule2); }
.wl-hd b{ display:block; color:var(--ink2); font-size:12.5px; font-weight:600; }
.wl-hd.we,.wl-cell.we{ background:repeating-linear-gradient(135deg,transparent 0 4px,var(--rule2) 4px 5px); }
.wl-hd.today b{ color:var(--accent); }
.wl-name{ padding:10px 12px; font-weight:600; border-bottom:1px solid var(--rule2); position:sticky; left:0; background:var(--panel); z-index:1; display:flex; flex-direction:column; justify-content:center; }
.wl-name small{ font-weight:400; color:var(--ink3); }
.wl-cell{ padding:6px 3px; border-bottom:1px solid var(--rule2); border-left:1px solid var(--rule2); display:flex; flex-direction:column; gap:2px; cursor:pointer; }
.wl-cell.over{ box-shadow:inset 0 0 0 2px var(--breach); }
.wl-cell.drop{ background:var(--accent-soft); }
.qs{ height:13px; border-radius:2px; }
.qs.st{ background:var(--c); }
.qs.st.probable{ background:repeating-linear-gradient(135deg,var(--c) 0 3px,color-mix(in srgb,var(--c) 35%,transparent) 3px 6px); }
.qs.st[draggable="true"]{ cursor:grab; }
.qs.free{ border:1px dashed var(--rule); }
.qs.pipe{ border:1.5px solid var(--l1); background:transparent; }
.qs.off{ background:repeating-linear-gradient(135deg,var(--off) 0 2px,transparent 2px 5px); }
.wl-sum{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; margin-top:22px; }
.legend{ display:flex; gap:16px; flex-wrap:wrap; font-size:12.5px; color:var(--ink2); margin:12px 0 0; }
.legend i{ display:inline-block; width:18px; height:10px; border-radius:2px; margin-right:6px; vertical-align:-1px; }
.yr td.cellbar{ min-width:78px; }
.stack{ display:flex; height:22px; border-radius:3px; overflow:hidden; background:var(--rule2); }
.stack i{ display:block; height:100%; }

/* temps réel */
.tps input{ width:64px; text-align:right; border:1px solid var(--rule); border-radius:5px; padding:4px 6px; background:var(--panel); }
.tps input.prop{ color:var(--ink3); font-style:italic; border-style:dashed; }
.tps input.err{ border-color:var(--breach); background:var(--breach-bg); }
.tps td.miss{ background:var(--warn-bg); }
.tps th.dayh{ text-align:right; }

/* missions */
.tj3{ display:grid; grid-template-columns:repeat(3,1fr); gap:0; border:1px solid var(--rule); border-radius:8px; background:var(--panel); }
.tj3 > div{ padding:14px 18px; border-right:1px solid var(--rule2); }
.tj3 > div:last-child{ border-right:0; }
.budget{ margin:18px 0 8px; }
.budget-bar{ position:relative; height:26px; border-radius:4px; background:var(--rule2); overflow:visible; }
.budget-bar i{ position:absolute; top:0; bottom:0; }
.budget-bar .mark{ position:absolute; top:-6px; bottom:-6px; width:2px; background:var(--ink); }
.budget-legend{ display:flex; gap:18px; flex-wrap:wrap; font-size:12.5px; color:var(--ink2); margin-top:12px; }
.two{ display:grid; grid-template-columns:1fr 1fr; gap:30px; }
.kv{ display:grid; grid-template-columns:1fr auto; gap:6px 16px; }
.kv dt{ color:var(--ink2); } .kv dd{ margin:0; text-align:right; }

/* facturation & finance */
.months{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:16px; }
.months button{ border:1px solid var(--rule); background:var(--panel); border-radius:6px; padding:5px 11px; cursor:pointer; }
.months button[aria-pressed="true"]{ border-color:var(--accent); background:var(--accent-soft); font-weight:600; }
.status-line{ display:flex; justify-content:space-between; align-items:center; gap:14px; flex-wrap:wrap; padding:12px 16px; border:1px solid var(--rule); border-radius:8px; background:var(--panel); margin-bottom:16px; }
.charts{ display:grid; grid-template-columns:1.3fr 1fr; gap:26px; margin-bottom:28px; }
.chart{ border:1px solid var(--rule); border-radius:8px; background:var(--panel); padding:14px 16px 8px; }
.chart svg{ width:100%; height:auto; display:block; }
.chart text{ font-family:var(--sans); font-size:11px; fill:var(--ink3); }
.fin td.lbl{ position:sticky; left:0; background:var(--panel); font-weight:500; }
.fin tr.strong td{ font-weight:650; }
.fin tr.gap td{ border-top:1px solid var(--rule); }
.fin td.fut{ color:var(--ink2); font-style:italic; }

/* scénarios */
.scen{ display:grid; grid-template-columns:320px 1fr; gap:34px; align-items:start; }
.scen form{ display:grid; gap:12px; padding:18px; border:1px solid var(--rule); border-radius:8px; background:var(--panel); }
.answer{ font-family:var(--serif); font-size:22px; line-height:1.35; margin:0 0 18px; }
.answer.no{ color:var(--breach); }

/* journal */
.ev-type{ font-size:12px; color:var(--ink2); }
.delta{ color:var(--ink2); }
.delta b{ color:var(--ink); font-weight:600; }

/* tiroir de traçabilité */
.drawer{ position:fixed; top:0; right:0; bottom:0; width:min(420px,100%); background:var(--panel); border-left:1px solid var(--rule); box-shadow:-12px 0 30px rgba(10,20,30,.08); transform:translateX(102%); transition:transform .22s ease; z-index:20; display:flex; flex-direction:column; padding-top:env(safe-area-inset-top,0px); }
.drawer.open{ transform:none; }
.drawer-head{ display:flex; justify-content:space-between; align-items:flex-start; gap:12px; padding:20px 22px 14px; border-bottom:1px solid var(--rule2); }
.drawer-head h3{ font-family:var(--serif); font-size:19px; margin:0; font-weight:600; }
.drawer-body{ padding:18px 22px 30px; overflow-y:auto; }
.drawer .val{ font-family:var(--serif); font-size:32px; font-weight:600; margin:4px 0 14px; }
.formula{ display:grid; grid-template-columns:1fr auto; gap:6px 14px; padding:12px 14px; background:var(--bg); border-radius:6px; margin:10px 0 18px; }
.formula .res{ border-top:1px solid var(--rule); padding-top:6px; font-weight:650; }
.src{ padding:8px 0; border-bottom:1px solid var(--rule2); font-size:13px; }
.src .muted{ display:block; font-size:12px; }
.x{ border:0; background:transparent; font-size:22px; line-height:1; cursor:pointer; color:var(--ink3); padding:2px 6px; }
.scrim{ position:fixed; inset:0; background:rgba(10,20,30,.18); opacity:0; pointer-events:none; transition:opacity .2s; z-index:15; }
.scrim.open{ opacity:1; pointer-events:auto; }

/* modale, toast */
.modal{ position:fixed; inset:0; display:none; place-items:center; z-index:30; background:rgba(10,20,30,.28); padding:20px; }
.modal.open{ display:grid; }
.modal-box{ background:var(--panel); border-radius:10px; max-width:520px; width:100%; padding:24px 26px; border:1px solid var(--rule); }
.modal-box h3{ font-family:var(--serif); font-size:21px; margin:0 0 10px; }
.modal-actions{ display:flex; justify-content:flex-end; gap:10px; margin-top:20px; }
.toast{ pointer-events:none; position:fixed; left:50%; bottom:calc(22px + env(safe-area-inset-bottom,0px)); transform:translate(-50%,20px); background:var(--ink); color:var(--panel); padding:10px 16px; border-radius:8px; opacity:0; transition:all .2s; z-index:40; max-width:min(560px,92vw); font-size:13.5px; }
.toast.on{ opacity:1; transform:translate(-50%,0); }
.toast.bad{ background:var(--breach); color:#fff; }

.banner{ font-size:12.5px; color:var(--ink2); background:var(--warn-bg); border-bottom:1px solid var(--rule); padding:7px 36px; }

@media (max-width:980px){
  .cockpit,.two,.charts,.scen,.wl-sum{ grid-template-columns:1fr; }
}
@media (max-width:760px){
  .app{ grid-template-columns:1fr; grid-template-rows:auto 1fr; }
  .nav{ flex-direction:row; align-items:center; overflow-x:auto; padding:10px 12px; border-right:0; border-bottom:1px solid var(--rule); gap:10px; }
  .brand-sub,.nav-foot,.nav .sep{ display:none; }
  .brand{ padding:0 8px 0 0; white-space:nowrap; font-size:16px; }
  .nav ul{ display:flex; gap:2px; }
  .nav li a{ white-space:nowrap; }
  .page{ padding:20px 16px 50px; }
  .figs,.tj3,.today-row{ grid-template-columns:1fr; }
  .tj3 > div{ border-right:0; border-bottom:1px solid var(--rule2); }
  .banner{ padding:7px 16px; }
}
@media (prefers-reduced-motion:reduce){ *{ transition:none !important; } }

/* ---------- v2 : workload à 7 cases ---------- */
.c-l6{ --c:var(--l6); }
:root{ --l6:#5A6FA8; --lock:#C0282D; --ext-bg:color-mix(in srgb,var(--ink3) 7%,transparent); }
.wl2{ display:grid; grid-template-columns:270px 1fr; gap:18px; align-items:start; }
.rs{ position:sticky; top:12px; border:1px solid var(--rule); border-radius:8px; background:var(--panel); }
.rs h2{ padding:12px 14px 4px; margin:0; }
.rs .rs-note{ padding:0 14px 8px; font-size:12px; color:var(--ink3); }
.rs-item{ display:grid; grid-template-columns:auto 1fr auto; gap:2px 9px; padding:9px 14px; border-top:1px solid var(--rule2); cursor:pointer; align-items:baseline; }
.rs-item:hover{ background:var(--rule2); }
.rs-item .n{ font-weight:600; }
.rs-item .v{ font-family:var(--serif); font-size:18px; font-weight:600; text-align:right; }
.rs-item .v.neg{ color:var(--breach); }
.rs-item .sub{ grid-column:2 / 4; font-size:12px; color:var(--ink3); }
.wlg-wrap{ border:1px solid var(--rule); border-radius:8px; background:var(--panel); overflow-x:auto; user-select:none; -webkit-user-select:none; }
.wlg{ display:grid; min-width:max-content; }
.wlg .wk{ font-size:12px; font-weight:600; color:var(--ink2); padding:7px 6px 3px; border-left:1px solid var(--rule); }
.wlg .dh{ text-align:center; font-size:11px; color:var(--ink3); padding:2px 0 5px; border-bottom:1px solid var(--rule2); }
.wlg .dh b{ display:block; font-size:12px; color:var(--ink2); }
.wlg .dh.today b{ color:var(--accent); }
.wlg .dh.we{ background:var(--rule2); }
.wlg .nm{ position:sticky; left:0; z-index:2; background:var(--panel); padding:8px 10px; border-bottom:1px solid var(--rule2); font-weight:600; display:flex; flex-direction:column; justify-content:flex-start; }
.wlg .nm small{ font-weight:400; color:var(--ink3); font-size:11.5px; line-height:1.35; margin-top:3px; }
.wlg .per{ position:sticky; left:96px; z-index:2; background:var(--panel); font-size:10px; color:var(--ink3); display:grid; grid-template-rows:repeat(7,12px); gap:2px; padding:6px 6px 0 0; text-align:right; border-bottom:1px solid var(--rule2); }
.wlg .per span.g{ margin-top:3px; }
.day{ padding:6px 2px 0; border-left:1px solid var(--rule2); border-bottom:1px solid var(--rule2); display:grid; grid-template-rows:repeat(7,12px); gap:2px; }
.day.wkstart{ border-left:1px solid var(--rule); }
.day.today{ background:color-mix(in srgb,var(--accent) 7%,transparent); }
.day.past{ background:color-mix(in srgb,var(--ink3) 4%,transparent); }
.sl{ border-radius:2px; position:relative; }
.sl.g{ margin-top:3px; }
.sl.e{ border:1px dashed color-mix(in srgb,var(--ink3) 45%,transparent); }
.sl.x{ background:var(--ext-bg); }
.sl.m{ background:var(--c); }
.sl.m.probable{ background:repeating-linear-gradient(135deg,var(--c) 0 3px,color-mix(in srgb,var(--c) 30%,transparent) 3px 6px); }
.sl.i{ background:repeating-linear-gradient(135deg,var(--ti) 0 2px,transparent 2px 5px); }
.t-tp{ --ti:#A9B1BB; } .t-em{ --ti:#C98A3A; } .t-je{ --ti:#9A7FC0; } .t-cp{ --ti:#7F9CBB; } .t-ma{ --ti:#B8807A; } .t-fe{ --ti:#C4CAD1; }
.sl.lock{ box-shadow:inset 0 0 0 2px var(--lock); }
.sl.lock::after{ content:""; position:absolute; right:1px; top:1px; width:4px; height:4px; background:var(--lock); border-radius:1px; }
.sl.st-b{ outline:1.5px dashed var(--ink); outline-offset:-1px; }
.sl.st-p{ outline:1.5px dashed var(--accent); outline-offset:-1px; opacity:.8; }
.sl.com::before{ content:""; position:absolute; left:2px; top:3px; width:5px; height:5px; border-radius:50%; background:var(--panel); box-shadow:0 0 0 1px var(--ink); }
.sl.sel{ box-shadow:0 0 0 2px var(--accent); z-index:1; }
.sl.moved{ box-shadow:0 0 0 2px var(--ok); }
.rc{ height:20px; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:600; border-left:1px solid var(--rule2); border-bottom:1px solid var(--rule2); cursor:pointer; }
.rc span{ border-radius:3px; padding:0 3px; line-height:15px; }
.rc .valide{ background:var(--ok); color:var(--panel); }
.rc .conforme{ color:var(--ok); box-shadow:inset 0 0 0 1.5px var(--ok); }
.rc .ecart,.rc .manquant{ background:var(--warn-bg); color:var(--warn); }
.wsum{ font-size:11.5px; color:var(--ink2); padding:5px 6px 8px; border-left:1px solid var(--rule); border-bottom:1px solid var(--rule); }
.wsum b{ color:var(--ink); }
.toolbar{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin:0 0 12px; }
.toolbar select{ border:1px solid var(--rule); border-radius:6px; padding:5px 8px; background:var(--panel); max-width:260px; }
.actionbar{ position:sticky; bottom:12px; z-index:5; margin-top:14px; display:flex; flex-wrap:wrap; gap:8px 12px; align-items:center; padding:10px 14px; background:var(--panel); border:1px solid var(--ink); border-radius:8px; box-shadow:0 6px 20px rgba(10,20,30,.12); }
.actionbar .grp{ display:flex; gap:4px; align-items:center; flex-wrap:wrap; }
.actionbar .lbl{ font-size:12.5px; color:var(--ink2); margin-right:4px; }
.actionbar select{ border:1px solid var(--rule); border-radius:6px; padding:5px 6px; background:var(--panel); }
.pending{ position:sticky; bottom:12px; z-index:6; margin-top:12px; display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; padding:10px 14px; border-radius:8px; background:var(--ink); color:var(--panel); }
.pending .btn{ background:transparent; color:var(--panel); border-color:color-mix(in srgb,var(--panel) 40%,transparent); }
.pending .btn-primary{ background:var(--panel); color:var(--ink); border-color:var(--panel); }
.legend2{ display:flex; flex-wrap:wrap; gap:6px 16px; font-size:12px; color:var(--ink2); margin:10px 0 0; }
.legend2 i{ display:inline-block; width:18px; height:10px; border-radius:2px; margin-right:6px; vertical-align:-1px; position:relative; }
.chk-ok{ display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border-radius:4px; border:1.5px solid var(--rule); background:var(--panel); cursor:pointer; font-size:12px; color:transparent; vertical-align:-4px; padding:0; }
.chk-ok.on{ background:var(--ok); border-color:var(--ok); color:var(--panel); }
.fin2 td.ok{ background:var(--ok-bg); }
.fin2 td.ov .cv{ color:var(--accent); font-weight:600; }
.fin2 td .cv{ cursor:text; border-bottom:1px dotted var(--ink3); }
.fin2 td input{ width:92px; text-align:right; border:1px solid var(--accent); border-radius:4px; padding:2px 4px; }
.ann td,.ann th{ text-align:right; }
.ann td:first-child,.ann th:first-child{ text-align:left; }
.ann .delta{ display:block; font-size:11.5px; color:var(--ink3); }
.ann tr.strong td{ font-weight:650; }
.sig{ display:grid; grid-template-columns:auto 1fr; gap:8px 10px; padding:8px 0; border-bottom:1px solid var(--rule2); align-items:baseline; }
.sig .lvl.fragilite{ background:var(--warn); } .sig .lvl.surveiller{ background:var(--ink3); }
.prj-clos td{ color:var(--ink3); }
.slot-list{ display:grid; grid-template-columns:86px 1fr; gap:4px 10px; font-size:13px; }
.slot-list .per{ color:var(--ink3); font-size:12px; }
.comm{ font-size:12.5px; color:var(--ink2); }
.comm::before{ content:"“"; } .comm::after{ content:"”"; }
@media (max-width:1100px){ .wl2{ grid-template-columns:1fr; } .rs{ position:static; } }

.tps input.draft{ border:1.5px dashed var(--ink); }

/* ---------- v3 : workload au clavier ---------- */
.page.wide{ max-width:none; padding-left:24px; padding-right:24px; }
.wl3{ display:grid; grid-template-columns:minmax(0,1fr) 236px; grid-template-areas:'g s' 'b s'; gap:16px; align-items:start; }
.wlg-wrap{ padding:6px 10px 8px; }
.wlg3{ display:grid; }
.wlg3 .dh{ text-align:center; font-size:11px; color:var(--ink3); padding:4px 0 5px; border-radius:4px 4px 0 0; }
.wlg3 .dh b{ display:block; font-size:12.5px; color:var(--ink2); }
.wlg3 .dh.we{ opacity:.65; }
.wlg3 .dh.vac{ background:color-mix(in srgb,#D9A441 30%,transparent); }
.wlg3 .dh.fer{ background:var(--breach-bg); color:var(--breach); } .wlg3 .dh.fer b{ color:var(--breach); }
.wlg3 .dh.today b{ color:var(--accent); text-decoration:underline; text-underline-offset:3px; }
.wlg3 .nm{ font-weight:650; padding:9px 4px; border-top:1px solid var(--rule); }
.wlg3 .per{ display:grid; grid-template-rows:repeat(7,18px); gap:2px; font-size:10px; color:var(--ink3); text-align:right; padding:6px 5px 4px 0; border-top:1px solid var(--rule); }
.wlg3 .per span{ line-height:18px; } .wlg3 .per span.g,.wlg3 .sl.g{ margin-top:3px; }
.wlg3 .day{ display:grid; grid-template-rows:repeat(7,18px); gap:2px; padding:6px 1px 4px; border-top:1px solid var(--rule); border-left:1px solid var(--rule2); border-bottom:none; }
.wlg3 .day.we{ background:color-mix(in srgb,var(--ink3) 7%,transparent); }
.wlg3 .day.today{ background:color-mix(in srgb,var(--accent) 8%,transparent); }
.wlg3 .sl{ font-size:9.5px; line-height:18px; font-weight:650; text-align:center; overflow:hidden; white-space:nowrap; letter-spacing:-.02em; cursor:cell; border-radius:2px; }
.wlg3 .sl.g{ line-height:15px; }
.sl.m{ color:#fff; } .sl.m.c-li,.sl.m.c-l5,.sl.m.c-l2{ color:var(--ink); }
.sl.i{ color:var(--ink); background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--ti) 70%,transparent) 0 2px,color-mix(in srgb,var(--ti) 22%,transparent) 2px 5px); }
.t-fo{ --ti:#4F8F8A; } .t-pe{ --ti:#8C7BA8; } .t-rd{ --ti:#B89A5A; }
.wlg3 .sl.sel{ box-shadow:inset 0 0 0 2px var(--accent); }
.wlg3 .sl.e.sel,.wlg3 .sl.x.sel{ background:color-mix(in srgb,var(--accent) 24%,transparent); }
.wlg3 .sl.cur{ outline:2px solid var(--ink); outline-offset:0; z-index:2; }
.wlg3 .sl.clip{ outline:1.5px dashed var(--accent); outline-offset:1px; }
.wlg3 .sl.lock{ box-shadow:inset 0 0 0 2px var(--lock); }
.rl{ font-size:10px; color:var(--ink3); display:flex; align-items:center; justify-content:flex-end; padding-right:5px; }
.stf{ font-size:10.5px; text-align:center; line-height:18px; border-left:1px solid var(--rule2); color:var(--ink3); }
.stf.lo{ background:var(--ok-bg); color:var(--ok); font-weight:600; } .stf.hi{ background:var(--breach-bg); color:var(--breach); font-weight:650; }
.wlg3 .rc{ border-bottom:none; }
.imp{ font-size:9.5px; line-height:12px; text-align:center; padding:1px 0 5px; color:var(--warn); font-weight:600; border-left:1px solid var(--rule2); display:flex; flex-direction:column; min-height:12px; white-space:nowrap; overflow:hidden; }
.imp .q{ font-weight:400; margin-bottom:2px; }
.imp.ok{ color:var(--ink3); font-weight:400; }
.legend3{ display:flex; flex-wrap:wrap; gap:6px 14px; font-size:12px; color:var(--ink2); padding:10px 2px 2px; border-top:1px solid var(--rule); margin-top:4px; }
.legend3 i{ display:inline-block; width:18px; height:10px; border-radius:2px; margin-right:6px; vertical-align:-1px; }
.k-fer::before,.k-vac::before{ content:""; display:inline-block; width:18px; height:10px; border-radius:2px; margin-right:6px; vertical-align:-1px; }
.k-fer::before{ background:var(--breach-bg); box-shadow:inset 0 0 0 1px var(--breach); } .k-vac::before{ background:color-mix(in srgb,#D9A441 30%,transparent); }
#selinfo{ margin-left:auto; }
.box{ border:1px solid var(--rule); border-radius:8px; background:var(--panel); padding:12px 14px; overflow-x:auto; }
.box h2{ margin:0 0 8px; }
.sc-row{ display:grid; grid-template-columns:28px 42px minmax(0,1fr) 16px; gap:6px; align-items:center; margin:4px 0; }
.sc-key{ width:28px; height:24px; text-align:center; font-weight:650; border:1px solid var(--rule); border-radius:4px; background:var(--panel); font-family:ui-monospace,Menlo,monospace; }
.sc-row select{ min-width:0; width:100%; font-size:12px; border:1px solid var(--rule); border-radius:4px; padding:2px 3px; background:var(--panel); color:var(--ink); }
.sc-x{ border:none; background:none; color:var(--ink3); cursor:pointer; font-size:16px; padding:0; }
.sw2{ display:inline-block; min-width:42px; height:18px; line-height:18px; border-radius:2px; font-size:9.5px; font-weight:650; text-align:center; vertical-align:middle; }
.sw2.m{ background:var(--c); color:#fff; } .sw2.m.c-li,.sw2.m.c-l5,.sw2.m.c-l2{ color:var(--ink); }
.sw2.i{ color:var(--ink); background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--ti) 70%,transparent) 0 2px,color-mix(in srgb,var(--ti) 22%,transparent) 2px 5px); }
.rs-row .sw2{ min-width:12px; width:12px; height:10px; margin-right:7px; }
.sc-fix{ font-size:12px; color:var(--ink2); display:grid; gap:6px; border-top:1px solid var(--rule2); padding-top:10px; }
.sc-fix .sc-key{ height:20px; width:24px; font-size:11px; }
kbd{ font-family:ui-monospace,Menlo,monospace; font-size:11px; border:1px solid var(--rule); border-bottom-width:2px; border-radius:4px; padding:0 4px; background:var(--bg); }
.wl-bottom{ display:grid; grid-template-columns:minmax(190px,.9fr) minmax(330px,1.7fr) minmax(250px,1.1fr); gap:16px; align-items:start; }
.rs-row{ display:flex; justify-content:space-between; align-items:baseline; padding:7px 4px; border-top:1px solid var(--rule2); cursor:pointer; font-size:14px; }
.rs-row b{ font-family:var(--serif); font-size:18px; font-weight:600; } .rs-row b.neg{ color:var(--breach); } .rs-row.on{ background:var(--accent-soft); }
.rs-row.cg{ text-decoration:none; }
.chart-head{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:6px; } .chart-head h2{ margin:0 auto 0 0; }
.chart-head select{ border:1px solid var(--rule); border-radius:6px; padding:4px 6px; background:var(--panel); color:var(--ink); font-size:12.5px; max-width:210px; }
.chart3 svg{ width:100%; height:auto; display:block; } .chart3 .ax{ font-size:11px; fill:var(--ink3); } .chart3 .vl{ font-size:10px; fill:var(--ink2); font-weight:600; }
table.cap{ width:100%; border-collapse:collapse; font-size:13px; } table.cap td:first-child{ white-space:nowrap; } table.cap th{ font-weight:600; font-size:12px; color:var(--ink3); text-align:left; padding:4px; } table.cap td{ padding:6px 4px; border-top:1px solid var(--rule2); } table.cap .num{ text-align:right; }
input.env{ width:58px; text-align:right; border:1px solid var(--rule); border-radius:4px; padding:3px 5px; background:var(--panel); color:var(--ink); }
@media (max-width:1150px){ .wl3{ grid-template-columns:1fr; grid-template-areas:'g' 's' 'b'; } .wl-bottom{ grid-template-columns:1fr; } }
.wlg3 .dh.we b{ font-size:10px; letter-spacing:-.05em; } .wlg3 .dh.we{ font-size:9.5px; overflow:hidden; }

.nav li a{ color:var(--ink3); }
.nav li a.key{ color:var(--ink); font-weight:650; }
.months button.unissued{ color:var(--warn); background:var(--warn-bg); font-weight:600; }
.months{ flex-wrap:wrap; }
.gap-alert{ border:1px solid var(--warn); background:var(--warn-bg); color:var(--ink); border-radius:8px; padding:10px 14px; margin:10px 0 4px; font-size:13.5px; display:grid; gap:4px; }
.fac-t td,.fac-t th{ white-space:nowrap; }
.fac-t input.fin-in{ text-align:right; border:1px solid var(--rule); border-radius:4px; padding:3px 5px; background:var(--panel); color:var(--ink); font:inherit; font-size:13px; }
.fac-t input.fac-in{ font-weight:700; }
.fac-t input.dt{ border:1px solid var(--rule); border-radius:4px; padding:2px 4px; background:var(--panel); color:var(--ink); font-size:12.5px; }
.fac-t .ck{ font-size:12px; color:var(--ink2); margin-left:4px; }
.btn-mini{ border:1px solid var(--rule); background:var(--panel); border-radius:4px; padding:1px 6px; cursor:pointer; color:var(--ink2); }
.warn-t{ color:var(--warn); }
.nowrap{ white-space:nowrap; }
.split{ display:grid; gap:6px; margin-top:8px; } .split > div{ display:grid; grid-template-columns:1fr 130px; align-items:center; gap:10px; }
.split input{ text-align:right; border:1px solid var(--rule); border-radius:4px; padding:4px 6px; }
.split b{ text-align:right; }
.imp{ position:relative; }
.rc-fix{ font-size:9px; border:1px solid var(--warn); color:var(--warn); background:var(--panel); border-radius:3px; padding:0 2px; margin:1px auto 2px; cursor:pointer; line-height:13px; }
.wlg3 .rc{ cursor:pointer; }
.fac-t td,.fac-t th{ padding-left:5px; padding-right:5px; } .fac-t th{ vertical-align:bottom; line-height:1.25; }
.fac-t input.dt{ width:112px; font-size:12px; } .fac-t{ font-size:13px; } .fac-t .ctr{ text-align:center; } .fac-t .btn-mini{ margin-left:3px; }
.imp > div{ display:flex; flex-direction:column; }

/* v5 */
.wlg3 .dh.now{ box-shadow:inset 0 0 0 2px var(--breach); border-radius:4px; }
.wlg3 .sl.sel{ box-shadow:inset 0 0 0 2px var(--ink); }
.wlg3 .sl.e.sel,.wlg3 .sl.x.sel{ background:color-mix(in srgb,var(--ink) 14%,transparent); }
.wlg3 .sl.cur{ outline:2.5px solid var(--ink); }
.imp{ padding:0 1px 4px; }
.imp.tall{ min-height:0; }
.imp .day.mini{ border:none; padding:2px 0 0; background:none; }
.imp .sl{ cursor:default; }
.imp .sl.diff{ box-shadow:inset 0 0 0 2px var(--warn); }
.rc-fix{ display:block; width:100%; }
.cv.ovv{ color:var(--accent); font-weight:600; }
.fin2 td input#fin-in{ width:100px; text-align:right; border:1px solid var(--accent); border-radius:4px; padding:2px 4px; }
.ann td{ white-space:nowrap; }
.obj-grid{ display:grid; gap:16px; margin-top:16px; }
.obj-t,.obj-m{ width:100%; border-collapse:collapse; font-size:13.5px; } .obj-t th,.obj-m th{ font-size:12px; color:var(--ink3); font-weight:600; padding:4px 6px; } .obj-t td,.obj-m td{ padding:6px; border-top:1px solid var(--rule2); }
.obj-t td:first-child,.obj-m td:first-child{ white-space:nowrap; }
.obj-in{ width:86px; text-align:right; border:1px solid var(--rule); border-radius:4px; padding:3px 5px; background:var(--panel); color:var(--ink); font:inherit; font-size:13px; }
.st-ok{ background:var(--ok-bg); color:var(--ok); font-weight:600; } .st-near{ background:var(--warn-bg); color:var(--warn); font-weight:600; } .st-ko{ background:var(--breach-bg); color:var(--breach); font-weight:600; }
.pill{ padding:1px 8px; border-radius:10px; }
dl.kv dd .obj-in{ width:100px; }

/* ---------- application ---------- */
#view{ overflow-y:auto; height:100%; } main{ height:100%; overflow:hidden; display:flex; flex-direction:column; } main #view{ flex:1; }
.page.wide{ max-width:none; padding-left:24px; padding-right:24px; }
.nav-off{ display:flex; justify-content:space-between; align-items:center; padding:7px 10px; color:var(--ink3); font-size:13.5px; cursor:default; }
.badge.warn{ background:var(--warn-bg); color:var(--warn); }
.dot.ok{ background:var(--ok); } .dot.local,.dot.encours{ background:var(--ink3); } .dot.erreur,.dot.connexion{ background:var(--breach); }
.vide{ margin-top:30px; padding:28px; border:1px dashed var(--rule); border-radius:8px; background:var(--panel); max-width:640px; }
.connexion{ max-width:520px; margin:12vh auto; padding:0 24px; } .btn-lg{ padding:11px 20px; font-size:15px; }
.grid2{ display:grid; grid-template-columns:1fr 1fr; gap:10px 14px; }
.field{ display:flex; flex-direction:column; gap:4px; } .field label{ font-size:12.5px; color:var(--ink2); }
.field input,.field select,.inp{ border:1px solid var(--rule); border-radius:6px; padding:6px 8px; background:var(--panel); color:var(--ink); }
.inp.num{ width:90px; text-align:right; }
.modal-box{ max-width:640px; width:calc(100vw - 32px); max-height:86vh; overflow-y:auto; }
.prj-clos td{ color:var(--ink3); } .nowrap{ white-space:nowrap; }
.demo{ background:var(--warn-bg); color:var(--warn); padding:6px 16px; font-size:12.5px; }
@media (max-width:760px){ .grid2{ grid-template-columns:1fr; } }
.badge.mvp{ background:var(--rule2); color:var(--ink3); font-weight:500; }
#sync a{ margin-left:4px; }
