:root{--ink:#1C2430;--muted:#5B6676;--line:#D9DDE3;--line2:#ECEEF1;--bg:#F4F5F7;--panel:#fff;--nav:#1C2430;--accent:#E0661A;--accent-ink:#1C2430;--sel:#FDE7D6;--mo:#E3EEFB;--mo-i:#14467A;--mat:#E6F4EA;--mat-i:#1E5631;--st:#F1E8FB;--st-i:#4B2378;--warn-bg:#FFF6E5;--warn-b:#F0C36D;--warn-i:#5C3D00;--ok:#1E7B34;--err:#B42318}
*{box-sizing:border-box}
html,body{margin:0;font-family:Inter,"Segoe UI",system-ui,-apple-system,sans-serif;color:var(--ink);background:var(--bg);font-size:14px}
button,input,select,textarea{font:inherit;color:inherit}
a{color:#B4500F}
.top{background:var(--nav);color:#fff;display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:10px 20px;position:sticky;top:0;z-index:50}
.logo{font-weight:700;font-size:16px;color:#fff;text-decoration:none;display:flex;gap:8px;align-items:baseline}
.logo span{font-weight:400;font-size:12px;color:#C9CFD8}
.top nav{display:flex;gap:4px;flex-wrap:wrap}
.top nav a{color:#C9CFD8;text-decoration:none;padding:7px 11px;border-radius:6px}
.top nav a.on,.top nav a:hover{background:#3A4656;color:#fff}
.sep{flex:1}
.who{color:#C9CFD8;font-size:12px}
.btn{border:1px solid #C9CFD8;background:#fff;border-radius:7px;padding:7px 12px;text-decoration:none;display:inline-flex;align-items:center;gap:6px;cursor:pointer;color:var(--ink);font-size:13px;min-height:34px}
.btn:hover{background:#F1F3F6}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}
.btn.primary:hover{background:#C9590F}
.btn.dark{background:var(--ink);border-color:var(--ink);color:#fff}
.btn.ghost{background:transparent;color:#fff;border-color:#5B6676}
.btn.danger{color:var(--err);border-color:#F2B8B5}
.btn.small{padding:4px 8px;min-height:28px;font-size:12px}
.btn.big{padding:11px 18px;font-size:15px}
.btn:disabled{opacity:.5;cursor:default}
.loading{padding:40px;color:var(--muted)}
main{min-height:calc(100vh - 56px)}
.page{max-width:1280px;margin:0 auto;padding:22px 24px;display:flex;flex-direction:column;gap:16px}
h1{font-size:22px;margin:0}h2{font-size:17px;margin:0}h3{font-size:15px;margin:0}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.muted{color:var(--muted)}.small{font-size:12px}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px}
.card.flat{padding:0;overflow:hidden}
.scrollx{overflow-x:auto}
table.t{width:100%;border-collapse:collapse;font-size:13px}
.t th{text-align:left;font-weight:600;color:#525C6B;font-size:12px;padding:8px 8px;border-bottom:1px solid var(--line);background:#FAFBFC;white-space:nowrap}
.t td{padding:5px 8px;border-bottom:1px solid var(--line2);vertical-align:middle}
.t tr.click{cursor:pointer}.t tr.click:hover td{background:#F7F8FA}
.t tr.lot td{background:#FAFBFC;font-weight:600;padding:8px}
.t .n,.n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.t input,.t select{border:1px solid transparent;background:transparent;border-radius:5px;padding:4px 6px;width:100%;min-width:0}
.t input:hover,.t select:hover{border-color:var(--line)}
.t input:focus,.t select:focus{border-color:#7FA6D1;background:#fff;outline:none}
.t input.n{text-align:right}
.ro .t input,.ro .t select{pointer-events:none}
.ro .edit{display:none!important}
.pill{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap}
.pill.mo{background:var(--mo);color:var(--mo-i)}.pill.mat{background:var(--mat);color:var(--mat-i)}.pill.st{background:var(--st);color:var(--st-i)}.pill.note{background:#EEF0F3;color:#3E4855}
.pill.brouillon{background:#FDE7D6;color:#7A3409}.pill.envoye{background:var(--mo);color:var(--mo-i)}.pill.accepte{background:var(--mat);color:var(--mat-i)}.pill.refuse{background:#FDE2E1;color:#912018}.pill.archive{background:#EEF0F3;color:#3E4855}
.pill.vieux{background:#FFF1D6;color:#6B4700}
select.type{font-size:12px;font-weight:600;border-radius:999px;padding:3px 6px}
select.type.mo{background:var(--mo);color:var(--mo-i)}select.type.mat{background:var(--mat);color:var(--mat-i)}select.type.st{background:var(--st);color:var(--st-i)}select.type.note{background:#EEF0F3}
label.f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#3E4855}
label.f input,label.f select,label.f textarea,.inp{border:1px solid #C9CFD8;border-radius:6px;padding:7px 9px;background:#fff;font-size:14px;color:var(--ink)}
textarea{resize:vertical}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.grid4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.warn{background:var(--warn-bg);border:1px solid var(--warn-b);border-radius:8px;padding:12px;color:var(--warn-i);font-size:13px;line-height:1.5}
.info{background:#F4F5F7;border-radius:8px;padding:12px;font-size:13px;line-height:1.5}
/* estimation */
.est{display:flex;flex-wrap:wrap;min-height:calc(100vh - 56px)}
.est .side{flex:1 1 230px;max-width:270px;background:#fff;border-right:1px solid var(--line);padding:16px;display:flex;flex-direction:column;gap:8px}
.est .mid{flex:999 1 560px;min-width:0;padding:18px 22px;display:flex;flex-direction:column;gap:14px}
.est .tot{flex:1 1 260px;max-width:310px;background:#fff;border-left:1px solid var(--line);padding:18px;display:flex;flex-direction:column;gap:12px}
.cap{font-size:11px;font-weight:600;color:#525C6B;text-transform:uppercase;letter-spacing:.05em}
.pc{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:9px 11px;border-radius:8px;cursor:pointer;border:none;background:transparent;text-align:left;width:100%}
.pc:hover{background:#F4F5F7}.pc.on{background:var(--sel)}
.pc b{font-weight:500;display:block}.pc.on b{font-weight:600}
.pc small{color:var(--muted);font-size:12px}
.add{border:1px dashed #A9B1BC;background:transparent;border-radius:8px;padding:9px 11px;text-align:left;cursor:pointer;color:#3E4855}
.add:hover{background:#F7F8FA}
.trow{display:flex;justify-content:space-between;gap:8px;font-size:14px}
.trow.b{font-weight:700;border-top:1px solid var(--line);padding-top:8px}
.ph{display:grid;grid-template-columns:220px 1fr 70px;gap:10px;align-items:center;font-size:13px;padding:4px 0}
.phbar{height:20px;position:relative;background:#F4F5F7;border-radius:4px}
.phbar span{position:absolute;top:0;bottom:0;border-radius:4px;background:#3F6FA8}
.phbar span.st{background:#8B5CC2}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.tabs button{border:none;background:transparent;padding:9px 14px;cursor:pointer;border-bottom:2px solid transparent;color:var(--muted);font-weight:500}
.tabs button.on{border-bottom-color:var(--accent);color:var(--ink)}
.big-n{font-size:34px;font-weight:700;font-variant-numeric:tabular-nums}
.dark-card{background:var(--ink);color:#fff;border-radius:12px;padding:22px;display:flex;flex-direction:column;gap:6px}
.dark-card .muted{color:#C9CFD8}
.seg{display:inline-flex;border:1px solid #C9CFD8;border-radius:6px;overflow:hidden}
.seg button{border:none;background:#fff;padding:7px 11px;cursor:pointer;font-size:13px}
.seg button+button{border-left:1px solid #C9CFD8}
.seg button.on{background:var(--ink);color:#fff}
.lib{display:flex;flex-wrap:wrap;min-height:calc(100vh - 100px)}
.lib .side{flex:1 1 240px;max-width:290px;background:#fff;border-right:1px solid var(--line);padding:14px;display:flex;flex-direction:column;gap:4px}
.lib .mid{flex:999 1 560px;min-width:0;padding:18px 22px;display:flex;flex-direction:column;gap:14px}
.ai{padding:8px 10px;border-radius:6px;cursor:pointer;border:none;background:transparent;text-align:left;width:100%}
.ai:hover{background:#F4F5F7}.ai.on{background:var(--sel);font-weight:600}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:12px}
/* modal & toasts */
.modal{position:fixed;inset:0;background:rgba(20,26,36,.45);display:flex;align-items:flex-start;justify-content:center;z-index:100;padding:40px 16px;overflow:auto}
.modal[hidden]{display:none}
.mbox{background:#fff;border-radius:12px;max-width:900px;width:100%;box-shadow:0 20px 50px rgba(0,0,0,.25)}
.mhead{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line)}
.mbody{padding:18px;display:flex;flex-direction:column;gap:14px}
.toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:200}
.toast{background:var(--ink);color:#fff;padding:10px 14px;border-radius:8px;font-size:13px;max-width:380px}
.toast.err{background:var(--err)}
/* connexion */
body.login{display:flex;align-items:center;justify-content:center;min-height:100vh}
.lbox{background:#fff;border:1px solid var(--line);border-radius:12px;padding:32px;max-width:420px;text-align:center;display:flex;flex-direction:column;gap:14px;align-items:center}
.lbox .logo{color:var(--ink);font-size:20px;justify-content:center}.lbox .logo span{color:var(--muted)}
.lmsg{color:var(--err)}.ver{color:var(--muted);font-size:12px}.help{font-size:12px}
/* soumission imprimable */
body.imp{background:#E9ECF0}
.impbar{max-width:820px;margin:16px auto;display:flex;gap:8px}
.feuille{max-width:820px;margin:0 auto 40px;background:#fff;padding:48px 56px;font-size:13px;line-height:1.5}
.feuille .ent{display:flex;justify-content:space-between;gap:20px;border-bottom:2px solid var(--ink);padding-bottom:14px}
.feuille .ent .r{text-align:right}.feuille h1{font-size:24px}
.feuille .cli{margin:18px 0}
.feuille h2{font-size:15px;margin:20px 0 6px}
table.st{width:100%;border-collapse:collapse}
.st td{padding:5px 0;border-bottom:1px solid var(--line2)}
.st tr.sous td{font-weight:700;border-bottom:none}
.st.tot{margin-top:20px;border-top:2px solid var(--ink)}
.pre{white-space:pre-line}
.sign{display:flex;justify-content:space-between;margin-top:40px}
@media print{
  body{background:#fff!important}
  .top,.impbar,.noprint,.toasts{display:none!important}
  .feuille{margin:0;padding:0;max-width:none}
  .page{max-width:none;padding:0}
}
@media (max-width:700px){.grid2,.grid3,.grid4{grid-template-columns:minmax(0,1fr)}.est .side,.est .tot,.lib .side{max-width:none}}
