:root{--bg:#f6f7f9;--panel:#ffffff;--panel-2:#fbfcfd;--ink:#101828;--ink-2:#475467;--ink-3:#8a94a6;--line:#e4e7ec;--line-2:#eff1f4;--brand:#1b3a6b;--brand-2:#2c5aa0;--brand-ink:#ffffff;--accent:#0e7490;--ok:#15803d;--ok-bg:#ecfdf3;--ok-line:#abefc6;--warn:#b54708;--warn-bg:#fffaeb;--warn-line:#fedf89;--bad:#b42318;--bad-bg:#fef3f2;--bad-line:#fecdca;--cell:#ffffff;--cell-hi:#eef4ff;--cell-line:#e4e7ec;--shadow:0 1px 2px rgba(16,24,40,.05), 0 1px 3px rgba(16,24,40,.06);--shadow-lg:0 8px 24px rgba(16,24,40,.1), 0 2px 6px rgba(16,24,40,.06);--r:10px;--r-sm:7px}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg:#0e1420;--panel:#151d2c;--panel-2:#1a2333;--ink:#eaeef6;--ink-2:#a3aec2;--ink-3:#78849b;--line:#263148;--line-2:#1e2739;--brand:#16233a;--brand-2:#3b6fc0;--brand-ink:#eef4ff;--accent:#22a5c4;--ok:#75e0a7;--ok-bg:#0d2a1c;--ok-line:#1f5f3f;--warn:#fdb022;--warn-bg:#2b1f08;--warn-line:#6b4b0c;--bad:#fda29b;--bad-bg:#2d1412;--bad-line:#6b2f2a;--cell:#151d2c;--cell-hi:#1d2b45;--cell-line:#263148;--shadow:0 1px 2px rgba(0,0,0,.4);--shadow-lg:0 10px 30px rgba(0,0,0,.5)}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Inter,Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased}button,input,select{font:inherit;color:inherit}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.flag{background:linear-gradient(90deg,#2b1f08,#3a2a12);color:#fdd48a;text-align:center;padding:7px 16px;font-size:12.5px;letter-spacing:.01em;position:relative;z-index:5}.flag b{color:#fec84b}.shell{display:flex;min-height:calc(100vh - 32px)}.side{width:246px;flex:none;background:var(--brand);color:var(--brand-ink);display:flex;flex-direction:column;padding:18px 12px 14px}.brand{padding:4px 10px 18px;display:flex;align-items:baseline;gap:9px}.brand .mark{font-size:19px;font-weight:750;letter-spacing:.09em}.brand .sub{font-size:10.5px;opacity:.62;letter-spacing:.02em}.navgroup{margin-bottom:16px}.navgroup h4{font-size:10px;text-transform:uppercase;letter-spacing:.1em;opacity:.5;margin:0 0 6px 10px;font-weight:650}.navitem{display:flex;align-items:center;gap:10px;width:100%;background:none;border:0;text-align:left;cursor:pointer;padding:8px 10px;border-radius:var(--r-sm);color:inherit;font-size:13.5px;opacity:.8;transition:background .12s,opacity .12s}.navitem:hover{background:#ffffff14;opacity:1}.navitem[aria-current=true]{background:#ffffff26;opacity:1;font-weight:600}.navitem .dot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.45;flex:none}.navitem[aria-current=true] .dot{opacity:1;background:#7cc4ff}.side .foot{margin-top:auto;padding:12px 10px 0;font-size:11px;opacity:.5;line-height:1.5}.main{flex:1;min-width:0;display:flex;flex-direction:column}.top{background:var(--panel);border-bottom:1px solid var(--line);padding:10px 22px;display:flex;gap:16px;align-items:center;flex-wrap:wrap}.ctx{display:flex;flex-direction:column;gap:2px}.ctx label{font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:650}.ctx select{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 9px;font-size:13px;min-width:150px}.top .spacer{flex:1}.badge-mode{border:1px solid var(--line);background:var(--panel-2);border-radius:999px;padding:4px 11px;font-size:11.5px;color:var(--ink-2)}.content{padding:22px;max-width:1240px;width:100%}.page-h{margin-bottom:18px}.page-h h1{font-size:20px;margin:0 0 3px;letter-spacing:-.01em;font-weight:680}.page-h p{margin:0;color:var(--ink-2);max-width:80ch;font-size:13.5px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);margin-bottom:16px;overflow:hidden}.card-h{padding:12px 16px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:12px}.card-h h3{margin:0;font-size:13.5px;font-weight:650}.card-h .sp{flex:1}.card-b{padding:16px}.card-b.flush{padding:0}.scroll{overflow-x:auto}table{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}th,td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--line-2)}thead th{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:650;background:var(--panel-2);position:sticky;top:0;white-space:nowrap}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:var(--panel-2)}td.c,th.c{text-align:center}td.r,th.r{text-align:right}tr.group td{background:var(--panel-2);font-weight:650}td.proj{padding-left:26px;color:var(--ink-2)}.cell{cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;min-width:56px;border-left:1px solid var(--cell-line);background:var(--cell);transition:background .1s,transform .06s}.cell:hover{background:var(--cell-hi)}.cell:active{transform:scale(.96)}.cell.on{background:var(--cell-hi);font-weight:650;color:var(--brand-2)}.cell.zero{color:var(--ink-3)}.cell.lock{cursor:not-allowed;background:var(--line-2);color:var(--ink-3)}td.tot{background:var(--panel-2);font-weight:650;text-align:center}td.over{background:var(--bad-bg);color:var(--bad)}.pill{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:600;border:1px solid transparent;white-space:nowrap}.pill.ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok-line)}.pill.warn{background:var(--warn-bg);color:var(--warn);border-color:var(--warn-line)}.pill.bad{background:var(--bad-bg);color:var(--bad);border-color:var(--bad-line)}.pill.mut{background:var(--panel-2);color:var(--ink-2);border-color:var(--line)}.pill.cir{background:#eef4ff;color:#2c5aa0;border-color:#cddcf7}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .pill.cir{background:#1d2b45;color:#8ab4f8;border-color:#2f4670}}.btn{border:1px solid transparent;background:var(--brand-2);color:#fff;border-radius:var(--r-sm);padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:filter .12s,background .12s}.btn:hover{filter:brightness(1.08)}.btn:disabled{background:var(--line);color:var(--ink-3);cursor:not-allowed;filter:none}.btn.ghost{background:transparent;border-color:var(--line);color:var(--ink)}.btn.ghost:hover{background:var(--panel-2)}.btn.sm{padding:5px 10px;font-size:12px}.btn.danger{background:transparent;border-color:var(--bad-line);color:var(--bad)}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:16px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;box-shadow:var(--shadow)}.kpi .k{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:650}.kpi .n{font-size:27px;font-weight:700;letter-spacing:-.02em;margin-top:4px;line-height:1.1}.kpi .h{font-size:12px;color:var(--ink-2);margin-top:4px}.note{border:1px solid var(--line);border-left:3px solid var(--brand-2);background:var(--panel-2);border-radius:0 var(--r-sm) var(--r-sm) 0;padding:11px 14px;font-size:12.5px;color:var(--ink-2);margin:14px 0}.note.w{border-left-color:var(--warn);background:var(--warn-bg);color:var(--warn);border-color:var(--warn-line)}.note b{color:var(--ink)}.note.w b{color:var(--warn)}.exp{display:flex;align-items:center;gap:14px;padding:13px 16px;border-bottom:1px solid var(--line-2)}.exp:last-child{border-bottom:0}.ic{width:38px;height:38px;border-radius:8px;display:grid;place-items:center;font-size:10px;font-weight:750;color:#fff;flex:none}.ic.xl{background:#106b3f}.ic.pdf{background:#93251c}.exp .t{flex:1;min-width:0}.exp .t b{display:block;font-size:13.5px}.exp .t span{color:var(--ink-2);font-size:12.5px}.empty{padding:34px 16px;text-align:center;color:var(--ink-2)}.empty h4{margin:0 0 4px;color:var(--ink);font-size:14px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182873;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:grid;place-items:center;padding:20px;z-index:50}.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lg);width:min(520px,100%);overflow:hidden}.modal-h{padding:15px 18px;border-bottom:1px solid var(--line-2);display:flex;align-items:center}.modal-h h3{margin:0;font-size:15px}.modal-h .x{margin-left:auto;background:none;border:0;cursor:pointer;color:var(--ink-3);font-size:19px;line-height:1}.modal-b{padding:18px}.modal-f{padding:13px 18px;border-top:1px solid var(--line-2);display:flex;gap:9px;justify-content:flex-end;background:var(--panel-2)}.field{margin-bottom:13px}.field label{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);font-weight:650;margin-bottom:4px}.field input,.field select{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--panel-2)}.field input:focus,.field select:focus{outline:2px solid var(--brand-2);outline-offset:-1px}.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:60}.toast{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--brand-2);border-radius:var(--r-sm);box-shadow:var(--shadow-lg);padding:11px 14px;font-size:12.5px;max-width:340px;animation:slide .18s ease-out}@keyframes slide{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.drawer{position:fixed;inset:0 auto 0 0;width:270px;z-index:70;display:flex;transform:translate(-100%);visibility:hidden;pointer-events:none;transition:transform .22s cubic-bezier(.2,.7,.3,1),visibility 0s linear .22s}.drawer.open{transform:none;visibility:visible;pointer-events:auto;transition-delay:0s}.drawer .side{width:100%;height:100%;overflow-y:auto;padding-top:calc(16px + env(safe-area-inset-top))}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#10182880;z-index:65;animation:fade .18s}@keyframes fade{0%{opacity:0}to{opacity:1}}.appbar{position:sticky;top:0;z-index:30;background:var(--brand);color:var(--brand-ink);display:flex;align-items:center;gap:12px;padding:9px 12px}.appbar-t{flex:1;min-width:0;line-height:1.25}.appbar-t b{display:block;font-size:15px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.appbar-t span{display:block;font-size:11px;opacity:.66;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.appbar .btn.ghost{border-color:#ffffff47;color:var(--brand-ink)}.appbar .btn.ghost:hover{background:#ffffff1a}.burger{width:40px;height:40px;flex:none;border:0;background:#ffffff1a;border-radius:9px;display:grid;place-content:center;gap:4px;cursor:pointer}.burger span{display:block;width:17px;height:2px;background:currentColor;border-radius:2px}.top-mob{display:grid;grid-template-columns:1fr 1fr;gap:10px;border-bottom:1px solid var(--line);animation:fade .15s}.top-mob .ctx:first-child{grid-column:1 / -1}.top-mob select{width:100%}.cards{display:flex;flex-direction:column}.rowcard{padding:14px 16px;border-bottom:1px solid var(--line-2)}.rowcard:last-child{border-bottom:0}.rowcard-h{display:flex;align-items:baseline;gap:8px;margin-bottom:9px;flex-wrap:wrap}.rowcard-h b{font-size:15px}.kv{display:flex;gap:10px;padding:3px 0;font-size:13px;align-items:baseline}.kv-k{flex:none;width:104px;color:var(--ink-3);font-size:10px;font-weight:650;text-transform:uppercase;letter-spacing:.06em;padding-top:2px}.kv-v{flex:1;min-width:0}.rowcard .actions{margin-top:11px;display:flex;gap:8px}.rowcard .actions .btn{flex:1}@media (max-width:860px){.shell{display:block}.content{padding:14px 12px calc(24px + env(safe-area-inset-bottom))}.flag{font-size:11.5px;padding:6px 12px;text-align:left}.page-h{margin-bottom:14px}.page-h h1{font-size:18px}.page-h p{font-size:13px}.card-h{padding:11px 14px;flex-wrap:wrap;gap:9px}.card-h .btn{width:100%}.card-b{padding:14px}.kpis{grid-template-columns:1fr 1fr;gap:10px}.kpi{padding:12px}.kpi .n{font-size:22px}.note{font-size:12.5px;padding:10px 12px}table{font-size:12.5px}th,td{padding:8px 9px}.scroll{-webkit-overflow-scrolling:touch;background:linear-gradient(90deg,var(--panel) 30%,rgba(255,255,255,0)) left/24px 100% no-repeat,linear-gradient(270deg,var(--panel) 30%,rgba(255,255,255,0)) right/24px 100% no-repeat}.sticky-first th:first-child,.sticky-first td:first-child{position:sticky;left:0;z-index:2;background:var(--panel);box-shadow:1px 0 0 var(--line)}.sticky-first thead th:first-child{z-index:3;background:var(--panel-2)}.sticky-first tr.group td:first-child,.sticky-first td.proj{background:var(--panel-2)}.cell{min-width:46px}.overlay{align-items:flex-end;padding:0}.modal{width:100%;border-radius:14px 14px 0 0;max-height:92vh;overflow-y:auto;animation:up .2s cubic-bezier(.2,.7,.3,1);padding-bottom:env(safe-area-inset-bottom)}@keyframes up{0%{transform:translateY(14px);opacity:.6}to{transform:none;opacity:1}}.modal-f{position:sticky;bottom:0}.modal-f .btn{flex:1}.toasts{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom))}.toast{max-width:none}.exp{padding:12px 14px;gap:11px;flex-wrap:wrap}.exp .btn{width:100%}}@media (max-width:380px){.kpis{grid-template-columns:1fr}.kv-k{width:88px}}.attente{min-height:100dvh;display:grid;place-items:center;color:var(--ink-3);font-size:14px;letter-spacing:.02em}.porte{min-height:100dvh;display:grid;place-items:center;padding:24px;background:var(--bg)}.porte-b{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px 24px 24px;box-shadow:0 1px 2px #0000000a,0 12px 32px -12px #00000029}.porte-brand{margin-bottom:22px}.porte-env{margin:-12px 0 20px;padding:7px 10px;border-radius:8px;background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn-line);font-size:11.5px;line-height:1.45;font-weight:600}.porte-b .field{margin-bottom:14px}.porte-err{margin:4px 0 14px}.porte-go{width:100%;justify-content:center;margin-top:4px}.porte-p{margin:18px 0 0;padding-top:16px;border-top:1px solid var(--line);font-size:12px;line-height:1.55;color:var(--ink-3)}.flag.w{background:var(--warn-bg);color:var(--warn);border-bottom-color:var(--warn-line)}@media (max-width: 480px){.porte{padding:0;place-items:stretch}.porte-b{max-width:none;min-height:100dvh;border:0;border-radius:0;box-shadow:none;padding:32px 20px;display:flex;flex-direction:column}.porte-p{margin-top:auto}}.detail-tech{margin-top:8px}.detail-tech>summary{cursor:pointer;font-size:11.5px;opacity:.75;letter-spacing:.02em}.detail-tech{font-size:11.5px;line-height:1.5;opacity:.9}
