:root{--ground: #FAFBFC;--surface: #FFFFFF;--surface-2: #F4F5F7;--line: #E6E7E9;--line-strong: #D1D5DB;--ink: #1F2227;--ink-2: #1F3A5F;--muted: #646E80;--placeholder: #AFB4BF;--navy: #1F3A5F;--navy-deep: #162B47;--brand: #E8892B;--brand-soft: #FCF0E3;--accent: #1F3A5F;--accent-ink: #FFFFFF;--accent-soft: #EDF2F8;--link: #2C5A8C;--good: #1F9E79;--good-ink: #157055;--good-soft: #E6F3EE;--warn: #EBA20F;--warn-ink: #8F5F00;--warn-soft: #FDF5E2;--crit: #D60A1E;--crit-soft: #F9E6E9;--info: #2C5A8C;--info-soft: #EAF0F8;--series: #2C5A8C;--shadow: 0 1px 3px rgba(31,58,95,.08), 0 4px 14px rgba(31,58,95,.05);--sans: "Montserrat", -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;color-scheme:light}*{box-sizing:border-box}html,body{margin:0}body{background:var(--ground);color:var(--ink);font-family:var(--sans);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased;font-feature-settings:"tnum"}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.num{font-variant-numeric:tabular-nums;font-weight:600}h1,h2,h3{margin:0;font-weight:700;color:var(--ink-2)}h1{font-size:22px;line-height:1.25}h2{font-size:15px}h3{font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}.small{font-size:12px;color:var(--ink-2)}.muted{color:var(--muted)}.neg{color:var(--crit)}.pos{color:var(--good-ink)}.r{text-align:right}.nowrap{white-space:nowrap}.mt{margin-top:14px}.mb{margin-bottom:14px}.row-flex{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.spacer{flex:1}.app{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}.side{background:var(--navy);color:#fff;padding:18px 14px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:8px;overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;padding:2px 6px 10px}.brand .mark{width:36px;height:36px;flex:0 0 36px;display:block;border-radius:8px}.side .brand .mark{box-shadow:0 0 0 1px #ffffff2e}.brand strong{display:block;font-size:17px;font-weight:800;color:#fff}.brand span{font-size:11px;color:#ffffff8c}.side select{background:#ffffff14;border:0;border-radius:8px;padding:8px 10px;color:#fff;font-size:12.5px;width:100%}.side select option{color:var(--ink)}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:12px;border-radius:10px;padding:9px 12px;color:#ffffffd9;font-size:13px;font-weight:500;text-decoration:none}.nav a:hover{background:#ffffff0f;color:#fff}.nav a.router-link-active{background:#ffffff1a;color:#fff;font-weight:600;box-shadow:inset 3px 0 0 var(--brand)}.nav .sep{margin:10px 12px 4px;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:#ffffff73}.nav .ico{width:17px;height:17px;flex:0 0 17px;opacity:.9}.user{margin-top:auto;border-top:1px solid rgba(255,255,255,.1);padding:14px 6px 2px;display:flex;gap:10px;align-items:center}.user .av{width:34px;height:34px;border-radius:50%;background:#ffffff1f;display:grid;place-items:center;font-size:11px;font-weight:700}.user strong{font-size:12.5px;display:block}.user span{font-size:11px;color:#ffffff80}.user button{margin-left:auto;background:transparent;border:1px solid rgba(255,255,255,.2);color:#ffffffbf;border-radius:6px;font-size:11px;padding:3px 8px}.main{padding:22px 28px 48px;min-width:0}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap}.topbar .crumb{font-size:12px;color:var(--muted);margin-bottom:2px}.topbar .crumb a{color:var(--muted)}.topbar .actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.topbar .meta{display:flex;gap:22px;flex-wrap:wrap;margin-top:10px}.topbar .meta>div{font-size:11.5px;color:var(--muted)}.topbar .meta>div b{display:block;color:var(--ink);font-weight:600;font-size:12.5px;margin-top:1px}.btn{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:8px 14px;font-size:12.5px;font-weight:600;color:var(--ink-2);box-shadow:0 1px 2px #1f3a5f0f;text-decoration:none;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn:hover:not(:disabled){background:var(--ground)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);box-shadow:none}.btn.primary:hover:not(:disabled){background:var(--navy-deep);border-color:var(--navy-deep)}.btn.danger{color:var(--crit);border-color:var(--crit-soft)}.btn.sm{padding:4px 10px;font-size:12px}.btn.lg{padding:12px 20px;font-size:15px;border-radius:8px}.btn.ghost{border-color:transparent;box-shadow:none;background:transparent}.ctl,select.ctl,input.ctl,textarea.ctl{border:1px solid var(--line);background:var(--surface);border-radius:6px;padding:7px 10px;font-size:12.5px;min-height:36px;width:100%}textarea.ctl{min-height:70px;resize:vertical}.ctl::placeholder{color:var(--placeholder)}.ctl.inline{width:auto}.ctl.num-in{text-align:right;font-variant-numeric:tabular-nums}.ctl.xs{min-height:28px;padding:3px 6px;font-size:12px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.form-grid .full{grid-column:1 / -1}.fld{display:flex;flex-direction:column;gap:4px}.fld>label{font-size:11.5px;color:var(--muted);font-weight:600}.fld .help{font-size:11.5px;color:var(--muted)}.fld .err{font-size:11.5px;color:var(--crit)}.check{display:flex;align-items:center;gap:8px;font-size:12.5px}.filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.filters label{font-size:12px;color:var(--muted)}.filters .ctl{width:auto;min-width:140px}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}.card .hd{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}.card .bd{padding:16px 18px}.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:16px 18px;display:flex;flex-direction:column;gap:4px}.kpi .lbl{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:500}.kpi .val{font-variant-numeric:tabular-nums;font-size:26px;font-weight:700;line-height:1.1;color:var(--ink-2)}.kpi .sub{font-size:12px;color:var(--muted)}.kpi .cmp{display:flex;align-items:baseline;gap:8px}.kpi .pct{font-size:14px;color:var(--muted);font-weight:600}.kpi.accent{border-color:var(--brand);box-shadow:inset 0 3px 0 var(--brand),var(--shadow)}.pill{display:inline-flex;align-items:center;gap:5px;border-radius:8px;padding:2px 8px;font-size:11.5px;font-weight:600;white-space:nowrap;line-height:18px}.pill.ok{background:var(--good-soft);color:var(--good-ink)}.pill.warn{background:var(--warn-soft);color:var(--warn-ink)}.pill.crit{background:var(--crit-soft);color:var(--crit)}.pill.info{background:var(--info-soft);color:var(--info)}.pill.na{background:var(--surface-2);color:var(--muted)}.badges{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.badge{display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:7px 12px 7px 9px;font-size:12.5px;text-align:left;box-shadow:var(--shadow);color:var(--ink-2);font-weight:500}.badge[aria-pressed=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.badge .n{font-weight:600;font-size:14px;min-width:22px;text-align:center;border-radius:4px;padding:0 4px}.badge.crit .n{background:var(--crit-soft);color:var(--crit)}.badge.warn .n{background:var(--warn-soft);color:var(--warn-ink)}.badge.info .n{background:var(--info-soft);color:var(--info)}.ca{display:inline-block;font-size:11px;font-weight:600;padding:1px 6px;border-radius:6px;background:var(--accent-soft);color:var(--link)}.twrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:12.5px}th{text-align:left;font-size:12px;color:var(--ink-2);font-weight:600;padding:10px 11px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--surface)}td{padding:8px 11px;border-bottom:1px solid var(--line);vertical-align:middle}td.wide{min-width:220px}tr:last-child td{border-bottom:0}tbody tr:nth-child(2n) td{background:#f7f8fa}tbody tr:hover td{background:#1f3a5f0d}tbody tr.click{cursor:pointer}th.r,td.r{text-align:right}td.r{font-variant-numeric:tabular-nums;white-space:nowrap}td .sub{display:block;font-size:11.5px;color:var(--muted)}a.lnk,button.lnk{color:var(--link);text-decoration:none;font-weight:600;font-size:12.5px;background:none;border:0;padding:0}a.lnk:hover,button.lnk:hover{text-decoration:underline}.tfoot td,tfoot td{border-top:1px solid var(--line-strong);font-weight:600;background:var(--surface-2)}.empty{padding:28px;text-align:center;color:var(--muted)}.gauge{display:flex;align-items:center;gap:8px}.gauge .trk{flex:1;height:6px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px;overflow:hidden;min-width:60px}.gauge .fill{height:100%;background:var(--series);border-radius:3px}.gauge.over .fill{background:var(--crit)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}.tabs button{background:transparent;border:0;border-bottom:2px solid transparent;padding:10px 16px;font-size:13.5px;color:var(--muted);white-space:nowrap;margin-bottom:-1px;font-weight:500}.tabs button[aria-current=true]{color:var(--ink-2);border-bottom-color:var(--brand);font-weight:600}.tabs button .cnt{font-size:11px;color:var(--muted);margin-left:4px}.grid2{display:grid;grid-template-columns:minmax(0,1.9fr) minmax(0,1fr);gap:16px;align-items:start}.grid2.even{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.legend{display:flex;gap:14px;font-size:11.5px;color:var(--ink-2);align-items:center}.legend i{display:inline-block;width:12px;height:8px;border-radius:2px;background:var(--series);vertical-align:middle;margin-right:5px}.legend em{display:inline-block;width:2px;height:12px;background:var(--ink);vertical-align:middle;margin-right:6px}.bar{position:relative;height:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px;min-width:120px}.bar .f{position:absolute;left:0;top:0;bottom:0;background:var(--series);border-radius:2px}.bar .f.over{background:var(--crit)}.bar .t{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--ink)}.stack{display:flex;flex-direction:column;gap:14px}.list{display:flex;flex-direction:column}.list .row{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);align-items:center}.list .row:last-child{border-bottom:0}.list .row .l{min-width:0}.list .row .l b{font-weight:500;display:block}.list .row .l span{font-size:11.5px;color:var(--muted)}.list .row .rr{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.note{border-left:3px solid var(--link);background:var(--accent-soft);padding:10px 14px;border-radius:0 8px 8px 0;font-size:12.5px;color:var(--ink-2)}.note.warn{border-left-color:var(--warn);background:var(--warn-soft)}.note.crit{border-left-color:var(--crit);background:var(--crit-soft)}.docrow{display:flex;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}.docrow:last-child{border-bottom:0}.docrow .ic{width:38px;height:38px;border-radius:8px;background:var(--accent-soft);color:var(--link);display:grid;place-items:center;font-size:10.5px;font-weight:700}.docrow .m{flex:1;min-width:0}.docrow .m b{display:block;font-weight:600}.docrow .m span{font-size:11.5px;color:var(--muted)}.drop{border:2px dashed var(--line-strong);border-radius:10px;padding:28px;text-align:center;color:var(--muted);background:var(--surface-2)}.drop.over{border-color:var(--accent);background:var(--accent-soft)}table.devis td,table.devis th{padding:5px 7px}table.devis tr.chap td{background:var(--surface-2);font-weight:600}table.devis tr.compo td{font-size:12px;color:var(--ink-2);background:#fbfbfc}table.devis tr.compo td:first-child{padding-left:28px}table.devis tr.txt td{font-style:italic;color:var(--muted)}table.devis .ctl{min-height:28px;padding:3px 6px;font-size:12px}table.devis td.sep,table.devis th.sep{border-left:2px solid var(--line-strong)}.tog{background:none;border:0;width:20px;color:var(--muted);padding:0}.tab-frame{max-width:1080px;margin:0 auto;background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}.tab-body{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.tab-left{padding:18px 22px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:18px}.tab-right{padding:18px 22px;background:var(--surface-2);display:flex;flex-direction:column;gap:14px}.step{display:flex;flex-direction:column;gap:8px}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{border:1px solid var(--line-strong);background:var(--surface);border-radius:999px;padding:10px 18px;font-size:15px}.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.picklist{display:flex;flex-direction:column;gap:6px;max-height:320px;overflow-y:auto}.pick{display:grid;grid-template-columns:90px minmax(0,1fr) auto;gap:12px;align-items:center;text-align:left;border:1px solid var(--line-strong);background:var(--surface);border-radius:10px;padding:12px 14px;font-size:14px}.pick b{font-weight:600}.pick span{font-size:12px;color:var(--muted)}.pick[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}.stepper{display:inline-flex;align-items:center;border:1px solid var(--line-strong);border-radius:10px;overflow:hidden;background:var(--surface)}.stepper button{width:56px;height:56px;border:0;background:transparent;font-size:24px;color:var(--ink-2)}.stepper output{width:100px;text-align:center;font-size:26px;font-weight:600;border-left:1px solid var(--line);border-right:1px solid var(--line);line-height:56px}.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:10px;overflow:hidden}.seg button{border:0;background:var(--surface);padding:10px 20px;font-size:14px;color:var(--ink-2)}.seg.sm button{padding:6px 14px;font-size:12.5px}.seg button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink);font-weight:600}.wk-grid{display:grid;border-top:1px solid var(--line);min-width:900px}.wk-grid .hcell{padding:8px;font-size:12px;font-weight:600;color:var(--ink-2);border-bottom:1px solid var(--line);border-right:1px solid var(--line);background:var(--surface-2)}.wk-grid .cell{padding:6px;border-bottom:1px solid var(--line);border-right:1px solid var(--line);min-height:60px;display:flex;flex-direction:column;gap:4px}.wk-grid .team{padding:8px;font-weight:600;border-bottom:1px solid var(--line);border-right:1px solid var(--line)}.slot{border-radius:5px;padding:4px 6px;font-size:11.5px;line-height:1.3;border-left:3px solid var(--series);background:var(--accent-soft);cursor:pointer;text-align:left;border-top:0;border-right:0;border-bottom:0}.slot.ok{border-left-color:var(--good)}.slot.warn{border-left-color:var(--warn)}.slot.crit{border-left-color:var(--crit)}.gantt{position:relative;min-width:900px}.gantt .grow{display:grid;grid-template-columns:220px 1fr;border-bottom:1px solid var(--line);align-items:center;min-height:34px}.gantt .lab{padding:6px 8px;font-size:12px}.gantt .track{position:relative;height:34px}.gantt .gb{position:absolute;top:9px;height:16px;border-radius:4px;background:var(--series)}.gantt .gb.ok{background:var(--good)}.gantt .gb.warn{background:var(--warn)}.gantt .gb.crit{background:var(--crit)}.gantt .gb.na{background:var(--placeholder)}.gantt .today{position:absolute;top:0;bottom:0;width:2px;background:var(--crit);opacity:.6}.gantt .months{display:grid;grid-template-columns:220px 1fr;border-bottom:1px solid var(--line-strong)}.gantt .mlab{position:absolute;font-size:11px;color:var(--muted);top:6px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#101a2e73;display:grid;place-items:center;z-index:50;padding:20px}.modal{background:var(--surface);border-radius:12px;width:min(640px,100%);max-height:90vh;display:flex;flex-direction:column;box-shadow:0 10px 40px #0003}.modal.wide{width:min(980px,100%)}.modal .mh{padding:14px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.modal .mb{padding:16px 18px;overflow-y:auto}.modal .mf{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.toasts{position:fixed;left:50%;bottom:24px;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;z-index:60;align-items:center}.toast{background:var(--ink);color:#fff;padding:10px 16px;border-radius:8px;font-size:13px;box-shadow:var(--shadow);max-width:560px}.toast.error{background:var(--crit)}.toast.success{background:#17785d}.loading{padding:28px;text-align:center;color:var(--muted)}.error-box{padding:14px 18px;background:var(--crit-soft);color:var(--crit);border-radius:8px;margin-bottom:12px}.picker{position:relative}.picker .dd{position:absolute;z-index:40;left:0;right:0;top:100%;margin-top:2px;background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--shadow);max-height:280px;overflow-y:auto;min-width:280px}.picker .opt{padding:7px 10px;cursor:pointer;display:flex;justify-content:space-between;gap:10px;font-size:12.5px;border:0;background:none;width:100%;text-align:left}.picker .opt:hover,.picker .opt.on{background:var(--accent-soft)}.picker .opt small{color:var(--muted)}.login-wrap{min-height:100vh;display:grid;place-items:center;background:var(--navy)}.login{width:380px;max-width:calc(100vw - 32px);background:var(--surface);border-radius:14px;border-top:4px solid var(--brand);padding:28px;display:flex;flex-direction:column;gap:14px}.pdf-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:16px;align-items:start}.pdf-split iframe{width:100%;height:75vh;border:1px solid var(--line);border-radius:10px;background:#fff}@media(max-width:1100px){.grid2,.pdf-split,.tab-body{grid-template-columns:minmax(0,1fr)}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:760px){.app{grid-template-columns:minmax(0,1fr)}.side{position:static;height:auto}.main{padding:16px}.form-grid,.form-grid.three{grid-template-columns:minmax(0,1fr)}}
