:root{--hov:#F7F4EF;--sel:#EDE7DE;--wash:#F7F4EF;--bg:#EFEBE4;--card:#fff;--ink:#1E2322;--ink2:#5B6563;--ink3:#8E9794;--line:#DFD8CE;--line2:#EDE9E2;--acc:#3a7c88}
*{box-sizing:border-box;margin:0}
body{background:var(--bg);color:var(--ink);font:14px/1.5 "IBM Plex Sans",system-ui,sans-serif;-webkit-font-smoothing:antialiased}
body.nuit{--bg:#131615;--card:#1B1F1E;--wash:#222725;--hov:#222725;--sel:#17332F;--ink:#EDE9E3;--ink2:#A6AFAC;--ink3:#767F7C;--line:#2E3432;--line2:#252A29;--acc:#7FB3BC}
/* les styles de l'agence : la page lit tout depuis ces variables. Classique = le :root
   ci-dessus ; Nuit = body.nuit. Épuré avant Studio et Terracotta, qui portent aussi t-epure. */
body.t-epure{--bg:#f5f5f7;--card:#ffffff;--ink:#1d1d1f;--ink2:#424245;--ink3:#86868b;--line:#e5e5ea;--line2:#f1f1f4;--acc:#3a7c88;--hov:#f0f0f3;--wash:#fafafb;--sel:#E4EEF0}
body.t-studio{--bg:#F1F0EC;--card:#FFFFFF;--ink:#262A2C;--ink2:#565E61;--ink3:#8D9499;--line:#E1DFD9;--line2:#EDEBE5;--acc:#3a7c88;--hov:#EDEBE6;--wash:#FAF9F6;--sel:#E4EEF0}
body.t-terre{--bg:#F3EDE6;--card:#FFFDFA;--ink:#2a2422;--ink2:#5d4f47;--ink3:#8f7e73;--line:#E2D6C9;--line2:#EFE7DD;--acc:#9a6a4a;--hov:#F2E9DF;--wash:#FAF6F1;--sel:#EEDFD0}
header{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line);background:var(--card);position:sticky;top:0;z-index:6}
/* L'en-tête sur téléphone et tablette : la règle commune de hub-ui.css (« la barre du haut, une seule règle »). */
#thbtn{border:1px solid var(--line);background:var(--card);color:var(--ink2);border-radius:8px;padding:5px 8px;font-size:12.5px}
#logomenu{min-width:300px;padding:8px}
.logogrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;padding:4px}
.logotile{border:1px solid var(--line);border-radius:10px;padding:8px 6px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;cursor:pointer;background:var(--card);text-align:center;min-height:66px}
.logotile:hover{border-color:var(--acc)}
.logotile.on{border-color:var(--acc);box-shadow:inset 0 0 0 1px var(--acc)}
.logotile img{max-width:100%;max-height:38px;object-fit:contain}
.logotile .none{height:38px;display:flex;align-items:center;font-size:18px;color:var(--ink3)}
.logotile small{font-size:10.5px;color:var(--ink2);line-height:1.2}
.logotile.up{border-style:dashed;color:var(--ink2);text-transform:none;letter-spacing:0;font-weight:400;margin:0}.logotile.up span{font-size:18px}
.logotile.up small{text-transform:none;letter-spacing:0}

/* ---------- phase 2 : le zonage ---------- */
.zwrap{display:grid;grid-template-columns:290px 1fr;gap:16px;align-items:start}
@media(max-width:900px){.zwrap{grid-template-columns:1fr}}
.zkpi{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;padding:10px 12px 4px}
.zkpi>div{background:var(--wash);border-radius:9px;padding:7px 6px;text-align:center}
.zkpi b{display:block;font-size:16px;font-variant-numeric:tabular-nums}
.zkpi small{font-size:9.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em;line-height:1.2;display:block}
.zkpi .non b{color:#9c3f3f}.zkpi .sous b{color:#8a6a1f}.zkpi .ok b{color:#1e6a42}
.zleg{display:flex;flex-wrap:wrap;gap:4px 10px;padding:6px 12px 0;font-size:11px;color:var(--ink2)}
.zleg i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px}
.zlist{padding:10px;display:flex;flex-direction:column;gap:6px;min-height:90px}
.zchip{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:6px 11px 6px 8px;cursor:grab;touch-action:none;user-select:none;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.zchip.ro{cursor:default}.zchip:active{cursor:grabbing}
.zchip i{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
.zchip .nm{flex:1;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.zchip b{font-size:12px;font-variant-numeric:tabular-nums;color:var(--ink2)}
.zchip.pop{animation:zpop .38s cubic-bezier(.2,1.5,.4,1)}
@keyframes zpop{0%{transform:scale(.55);opacity:.3}100%{transform:scale(1);opacity:1}}
.zghost{position:fixed;z-index:99;pointer-events:none;opacity:.92;box-shadow:0 10px 30px rgba(0,0,0,.22);width:200px}
.zright{min-width:0}
.zcanvas{position:relative;margin:10px;border-radius:12px;background:var(--wash);background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:22px 22px;overflow:hidden}
.zbulle{position:absolute;background:color-mix(in srgb,var(--zc) 10%,var(--card));border:2px solid color-mix(in srgb,var(--zc) 55%,var(--card));border-radius:22px;box-shadow:0 6px 20px rgba(0,0,0,.06);display:flex;flex-direction:column;transition:box-shadow .15s}
.zbulle.zover{box-shadow:0 0 0 4px color-mix(in srgb,var(--zc) 35%,transparent),0 10px 26px rgba(0,0,0,.12)}
.zbulle.zlift{box-shadow:0 16px 40px rgba(0,0,0,.18);z-index:5}
.zbulle.non{border-color:#c9776a}
.zhd{display:flex;align-items:center;gap:6px;padding:9px 12px 4px;cursor:grab;touch-action:none;user-select:none}
.zhd input{flex:1;border:1px solid transparent;background:transparent;font:600 14px "IBM Plex Sans";color:var(--ink);border-radius:7px;padding:3px 6px;min-width:0}
.zhd input:hover{border-color:var(--line)}.zhd input:focus{border-color:var(--acc);background:var(--card);outline:0}
.zhd b{flex:1;font-size:14px}
.zgrip{color:var(--ink3);font-size:15px;line-height:1;cursor:grab;padding:0 2px}
.zbulle{cursor:grab}.zbulle.zlift{cursor:grabbing}
.zx{color:var(--ink3);cursor:pointer;font-size:15px;padding:0 4px}.zx:hover{color:#9c3f3f}
.zbody{display:flex;flex-wrap:wrap;gap:6px;padding:4px 10px 8px;min-height:44px;align-content:flex-start}
.zbody .zchip{max-width:100%}
.zvide{color:var(--ink3);font-size:12px;text-align:center;padding:8px;width:100%}
.zfoot{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 12px 9px;font-size:12px;color:var(--ink2);border-top:1px solid color-mix(in srgb,var(--zc) 25%,var(--card))}
.zfoot b{font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums}.zfoot small{color:var(--ink3)}
.zcap{width:54px;border:1px solid var(--line);border-radius:7px;padding:2px 6px;font-size:12px;text-align:center;background:var(--card)}
.zbar{height:6px;margin:0 12px 10px;background:color-mix(in srgb,var(--zc) 18%,var(--card));border-radius:3px;overflow:hidden}
.zbar i{display:block;height:100%;background:var(--zc);border-radius:3px}
.zliens{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:3}
.zliens line{stroke:#1e6a42;stroke-width:2.5;stroke-linecap:round;opacity:.75}.zliens line.loin{stroke:#9c3f3f;stroke-dasharray:6 6}
.zliens .zlab{pointer-events:auto}.zliens .zlab rect{fill:var(--card);stroke:var(--line);stroke-width:1}.zliens .zlab text{font:600 11px "IBM Plex Sans";fill:var(--ink2);text-anchor:middle}.zliens .zlx{fill:var(--ink3);cursor:pointer;font-size:13px}.zliens .zlx:hover{fill:#9c3f3f}
.zcanvas.zlienmode .zbulle{cursor:crosshair}.zbulle.zsel{box-shadow:0 0 0 4px color-mix(in srgb,var(--acc) 45%,transparent)}
.zhint{margin:8px 10px -4px;padding:8px 12px;background:color-mix(in srgb,var(--acc) 10%,var(--card));border-radius:9px;font-size:12.5px;display:flex;align-items:center;gap:10px}
.btn.on{background:var(--ink);color:var(--card);border-color:var(--ink)}
tr.lock td{background:color-mix(in srgb,var(--wash) 70%,var(--card))}tr.lock input.lab{color:var(--ink2)}.lk{font-size:11px;opacity:.7}
button.x.lk{opacity:.45}button.x.lk.on{opacity:1}
.pubopts{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:0 16px 12px}
.popt{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:12.5px;color:var(--ink);text-decoration:none;background:var(--card)}
.popt.on{background:var(--ink);color:var(--card);border-color:var(--ink)}.popt.off{color:var(--ink3);border-style:dashed;cursor:default}
a.popt:hover{border-color:var(--acc)}
/* ---------- phase 3 : les niveaux ---------- */
.nbat{padding:6px 10px 10px;display:flex;flex-direction:column;gap:10px}
.nfloor{border:1.5px solid var(--line);border-radius:14px;background:var(--card);overflow:hidden;transition:box-shadow .12s}
.nfloor.non{border-color:#c9776a}.nfloor.zover{box-shadow:0 0 0 4px color-mix(in srgb,var(--acc) 30%,transparent)}
.nhd{display:flex;align-items:center;gap:10px;padding:8px 12px 6px;flex-wrap:wrap}
.nhd input.nm{width:110px;border:1px solid transparent;background:transparent;font:600 14px "IBM Plex Sans";color:var(--ink);border-radius:7px;padding:3px 6px}
.nhd input.nm:hover{border-color:var(--line)}.nhd input:focus{border-color:var(--acc);background:var(--card);outline:0}
.nhd b.nm{font-size:14px;width:110px}
.nsu{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink2)}.nsu small{color:var(--ink3)}
.nhd input.su{width:72px;border:1px solid var(--line);border-radius:7px;padding:3px 6px;font-size:13px;text-align:right;background:var(--card);font-variant-numeric:tabular-nums}
.nreste{margin-left:auto;font-size:12.5px;font-weight:600;color:#1e6a42;font-variant-numeric:tabular-nums}.nreste.non{color:#9c3f3f}
.nstack{height:12px;margin:2px 12px 4px;border-radius:4px;background:var(--wash);display:flex;overflow:hidden}
.nstack i{display:block;height:100%;border-right:1px solid var(--card)}
.nbody{display:flex;flex-wrap:wrap;gap:6px;padding:6px 12px 10px;min-height:46px;align-content:flex-start}
.nchip{display:flex;align-items:baseline;gap:7px;background:color-mix(in srgb,var(--zc) 14%,var(--card));border:1.5px solid color-mix(in srgb,var(--zc) 55%,var(--card));border-radius:11px;padding:6px 11px;cursor:grab;touch-action:none;user-select:none;max-width:100%}
.nchip.ro{cursor:default}.nchip:active{cursor:grabbing}
.nchip .nm{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.nchip b{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}.nchip small{font-size:11px;color:var(--ink3);white-space:nowrap}
.nchip.pop{animation:zpop .38s cubic-bezier(.2,1.5,.4,1)}
.zlist .nchip{width:100%}
.nchip.esp{border-style:dashed;background:color-mix(in srgb,var(--zc) 7%,var(--card))}
.pwrap{position:relative;margin:10px;border-radius:12px;overflow:hidden;background:var(--wash);line-height:0}
.pwrap img{width:100%;height:auto;display:block;user-select:none;-webkit-user-drag:none}
.pwrap.pechmode{cursor:crosshair}
.pline{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.pline line{stroke:#9c3f3f;stroke-width:3;stroke-linecap:round}.pline text{font:700 12px "IBM Plex Sans";fill:#9c3f3f;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:4px}.pline circle{fill:#9c3f3f}
.pblob{position:absolute;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:4px 6px;border-radius:10px;line-height:1.15;text-align:center;overflow:hidden;cursor:grab;touch-action:none;user-select:none;
 background:color-mix(in srgb,var(--zc) 55%,#fff);border:2px solid color-mix(in srgb,var(--zc) 85%,#000);box-shadow:0 4px 14px rgba(0,0,0,.14)}
.pblob.esp{background:color-mix(in srgb,var(--zc) 40%,#fff);border-style:dashed;background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.35) 0 4px,transparent 4px 8px)}
.pblob.ro{cursor:default}.pblob.zlift{cursor:grabbing;box-shadow:0 12px 30px rgba(0,0,0,.25);z-index:5}
.pblob .nm{font-size:12.5px;font-weight:700;color:#1d2224;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pblob small{font-size:10.5px;color:#2b3234;white-space:nowrap}
.pblob .let{display:inline-block;min-width:16px;height:16px;line-height:16px;border-radius:4px;color:#fff;font-size:9.5px;font-weight:700;font-style:normal}
.btn.ghost{opacity:.65}
.nliens{padding:4px 12px 12px;display:flex;flex-direction:column;gap:6px;font-size:12px}
.nliens>div{display:grid;grid-template-columns:16px 1fr;gap:2px 6px;align-items:baseline;background:var(--wash);border-radius:8px;padding:6px 8px}
.nliens i{font-style:normal;font-weight:700;color:var(--ink3)}.nliens .ok i{color:#1e6a42}.nliens .non i{color:#9c3f3f}
.nliens small{grid-column:2;color:var(--ink3)}.nliens .non small{color:#9c3f3f;font-weight:600}
.nchip .let{display:inline-block;min-width:18px;height:18px;line-height:18px;border-radius:5px;color:#fff;font-size:10.5px;font-weight:700;text-align:center;font-style:normal;align-self:center}
.nstack i.esp{background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.35) 0 3px,transparent 3px 6px)}
.zbulle.non .zbar i{background:#b3453a}
.phaseseg{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:2px;background:var(--wash);margin-left:10px;vertical-align:middle}
.phaseseg button{border:0;background:transparent;border-radius:999px;padding:4px 12px;font:600 12px "IBM Plex Sans";color:var(--ink2);cursor:pointer;white-space:nowrap}
.phaseseg button.on{background:var(--card);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
/* les champs de l'en-tête : les intitulés sur deux lignes ne décalent plus les champs */
.formgrid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:10px 16px;align-items:start}
.formgrid>div>label{min-height:3.2em;margin-top:0;display:flex;align-items:flex-end}
@media(max-width:720px){.formgrid{grid-template-columns:1fr 1fr}}
.wordmark{font-weight:700;font-size:18px;letter-spacing:-.02em;font-family:"Barlow Semi Condensed",sans-serif;cursor:pointer}
.wordmark small{font-weight:500;color:var(--ink3);font-size:12px;margin-left:8px}
.spacer{flex:1}
select,input,textarea{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px 9px}
select:focus,input:focus,textarea:focus{outline:0;border-color:var(--acc)}
.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:7px 14px;font:inherit;font-size:12.5px;font-weight:500;cursor:pointer}
.btn:hover{border-color:var(--acc);color:var(--acc)}
.btn.pri{background:var(--acc);border-color:var(--acc);color:#fff}
.btn.sm{padding:4px 10px;font-size:12px}
.avbtn{width:30px;height:30px;border-radius:50%;overflow:hidden;border:1px solid var(--line);padding:0;background:var(--card);cursor:pointer;display:flex;align-items:center;justify-content:center}
main{max-width:none;margin:0;padding:20px 26px 90px}
.deux{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:20px;align-items:start}
@media(max-width:1000px){.deux{grid-template-columns:1fr}}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:14px;overflow:hidden}
.hd{display:flex;align-items:baseline;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.hd h2{font-size:14px;font-weight:600}
.hd .sub{font-size:12px;color:var(--ink3)}
.pad{padding:14px 16px}
.empty{padding:26px 16px;text-align:center;color:var(--ink3);font-size:13px}
.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:#22282b;color:#fff;padding:9px 16px;border-radius:999px;font-size:13px;opacity:0;transition:opacity .25s;z-index:99;pointer-events:none;max-width:92vw}
.prow{display:flex;gap:12px;align-items:center;padding:11px 16px;border-bottom:1px solid var(--line2);cursor:pointer}
.prow:hover{background:var(--hov)}
.prow b{font-size:14px}
.prow .m{font-size:12px;color:var(--ink3)}
.cat{border-bottom:1px solid var(--line2)}
.cat:last-child{border-bottom:0}
.cath{display:flex;align-items:center;gap:9px;padding:10px 16px;background:var(--wash)}
.cath .let{width:24px;height:24px;border-radius:7px;color:#fff;font-weight:700;font-size:12.5px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.cath input{border:0;background:transparent;font-weight:600;font-size:13.5px;flex:1;min-width:0;padding:2px 4px}
.cath .tot{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:13px;font-weight:600;white-space:nowrap}
table.lg{width:100%;border-collapse:collapse;font-size:13px}
table.lg th{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);font-weight:600;text-align:left;padding:6px 8px}
table.lg td{padding:2px 6px;border-top:1px solid var(--line2)}
table.lg input{width:100%;border:1px solid transparent;background:transparent;border-radius:6px;padding:5px 7px}
table.lg select{border:1px solid transparent;background:transparent;padding:4px 4px;font-size:12px;color:var(--ink2);width:100%}
table.lg input:hover,table.lg select:hover{border-color:var(--line)}
table.lg input:focus{border-color:var(--acc);background:var(--card)}
/* la page client : les libellés ne sont pas des champs, seule la colonne Nombre se remplit */
table.lg input[readonly]{border-color:transparent!important;background:transparent!important;cursor:default}
table.lg input.pubnb{border:1.5px solid var(--line);background:var(--card);border-radius:9px;box-shadow:inset 0 1px 2px rgba(0,0,0,.04)}
table.lg input.pubnb:hover{border-color:var(--acc)}
table.lg input.pubnb:focus{border-color:var(--acc);box-shadow:0 0 0 3px rgba(58,124,136,.16)}
table.lg input.pubnb::placeholder{color:var(--ink3);font-weight:400}
table.lg td.n input{text-align:center;font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:12.5px}
table.lg td.t{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:12.5px;text-align:center;white-space:nowrap;color:var(--ink2)}
table.lg .x,table.lg .mv{border:0;background:transparent;color:var(--ink3);cursor:pointer;font-size:12px;padding:2px 4px;border-radius:6px;line-height:1}
table.lg .x:hover{background:var(--hov);color:#9c3f3f}
table.lg .mv:hover{background:var(--hov);color:var(--acc)}
table.lg td.grip{cursor:grab;color:var(--ink3);text-align:center;user-select:none;width:20px}
table.lg tr td.grip{visibility:hidden}
table.lg tr:hover td.grip{visibility:visible}
tr.dropon td{border-top:2px solid var(--acc)}
.cath.dropon{outline:2px dashed var(--acc);outline-offset:-2px}
.addl{margin:7px 16px 11px;padding:4px 12px}
.stick{position:sticky;top:76px}
.big{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:30px;font-weight:600;letter-spacing:-.02em}
.big small{font-size:14px;color:var(--ink3);font-weight:400;font-family:"IBM Plex Sans",sans-serif}
.verdict{border-radius:10px;padding:11px 14px;font-weight:600;font-size:13.5px;margin-top:10px;margin-bottom:18px}
.verdict.ok{background:#E5F2E9;color:#1e6a42}
.verdict.non{background:#F7E4E1;color:#9c3f3f}
body.nuit .verdict.ok{background:#17332a;color:#7fceA0}
body.nuit .verdict.non{background:#3a2320;color:#e09a8e}
.verdict small{display:block;font-weight:400;font-size:12px;margin-top:3px;opacity:.85}
.leg{display:flex;flex-direction:column;gap:5px;margin-top:12px}
.leg .l{display:flex;align-items:center;gap:8px;font-size:12.5px}
.leg .l i{width:11px;height:11px;border-radius:3px;flex:0 0 auto}
.leg .l b{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-weight:600;margin-left:auto;font-size:12px}
.leg .l small{color:var(--ink3);font-size:11px;width:38px;text-align:right}
.kpis2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.kpi2{background:var(--wash);border-radius:9px;padding:8px 10px}
.kpi2 .v{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:15.5px;font-weight:600}
.kpi2 .l{font-size:10.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em}
.leg2{margin-top:12px;font-size:12.5px}.leg2 .r{display:grid;grid-template-columns:22px minmax(0,1fr) auto 38px;gap:8px;align-items:center;margin-bottom:5px}
.leg2 .lb{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.leg2 b{font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px}.leg2 small{color:var(--ink3);text-align:right;font-size:11px}
.leg2 i{width:11px;height:11px;border-radius:3px;justify-self:center}.leg2 .let{display:inline-block;min-width:20px;height:20px;line-height:20px;border-radius:6px;color:#fff;font-weight:700;font-size:11px;text-align:center;justify-self:center}
.lect{margin-top:14px;padding-top:12px;border-top:1px solid var(--line2)}.lect>b{display:block;font-size:12.5px;color:var(--ink2)}.lect>span{display:block;font-size:11.5px;color:var(--ink3);margin-bottom:8px}
.stack{display:flex;height:14px;border-radius:5px;overflow:hidden;margin-bottom:8px}.stack i{display:block;height:100%}
.sbar{display:flex;height:16px;border-radius:8px;overflow:hidden;margin:8px 0 6px;background:var(--line2)}
.sbar i{display:block;height:100%}
.sleg{display:flex;flex-wrap:wrap;gap:3px 12px;font-size:11px;color:var(--ink2)}
.sleg i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px}
.gbar{display:flex;align-items:center;gap:8px;margin-top:5px}
.gbar span{width:132px;font-size:11px;color:var(--ink2);flex:0 0 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gbar .r{flex:1;height:10px;background:var(--line2);border-radius:5px;overflow:hidden}
.gbar .r i{display:block;height:100%;border-radius:5px}
.gbar b{font-family:"IBM Plex Sans",system-ui,sans-serif;font-variant-numeric:tabular-nums;font-size:12px;width:38px;text-align:right;flex:0 0 auto}
.pubok{opacity:0;transition:opacity .35s;color:#1e6a42;font-size:12.5px;font-weight:600;align-self:center}
body.nuit .pubok{color:#7fcea0}
.pubok.on{opacity:1}
.merci{display:none;background:#E5F2E9;color:#1e6a42;border-radius:10px;padding:11px 14px;font-weight:600;font-size:13px;margin:10px 16px 14px}
body.nuit .merci{background:#17332a;color:#7fcea0}
/* l'aperçu du rapport : la page A4 à l'écran, avant d'imprimer ou d'enregistrer en PDF */
#rapprev{position:fixed;inset:0;background:rgba(20,22,23,.55);z-index:60;display:none;flex-direction:column}
#rapprev.on{display:flex}
#rapbar{display:flex;gap:8px;align-items:center;padding:10px 14px;background:var(--card);border-bottom:1px solid var(--line)}
#rapbar b{font-family:"Barlow Semi Condensed",sans-serif;font-size:15px}
#rapbar{flex-wrap:wrap}.rapopts{display:inline-flex;gap:6px;align-items:center;margin-left:10px;flex-wrap:wrap}.rapopts .rolab{font:600 11px "IBM Plex Sans";color:var(--ink3);text-transform:uppercase;letter-spacing:.06em}
.rochip{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:4px 11px;font:500 12px "IBM Plex Sans";color:var(--ink2);cursor:pointer;display:inline-flex;align-items:center;gap:6px;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prow .tag{margin-left:8px;font:600 10.5px "IBM Plex Sans";color:var(--acc);background:var(--wash);border:1px solid var(--line);border-radius:999px;padding:1px 8px;white-space:nowrap}
.rochip.on{border-color:var(--acc);color:var(--ink);font-weight:600}.rochip i{font-style:normal;background:var(--acc);color:#fff;border-radius:50%;min-width:16px;height:16px;line-height:16px;font-size:10px;text-align:center}
#rapscroll{flex:1;overflow:auto;display:flex;justify-content:center;align-items:flex-start;padding:22px;background:#565a5c}
#rapframe{width:calc(210mm + 60px);min-height:297mm;height:297mm;border:0;background:transparent;flex:0 0 auto;overflow:hidden}
#rapprev.pays #rapframe{width:calc(297mm + 60px);min-height:210mm;height:210mm}
/* quand la page est plus large que l'écran (téléphone, debout ou couché) : elle garde sa vraie taille, réduite à la largeur de l'écran ; on pince pour zoomer, on glisse
   pour se déplacer (une couche posée sur l'aperçu reçoit les gestes, que la page du rapport avalait) */
#rapzoom{position:relative;flex:0 0 auto}#rapzoomv{display:none;position:absolute;inset:0;touch-action:pan-x pan-y}
#rapprev.ajuste #rapscroll{display:block;padding:6px}#rapprev.ajuste #rapzoom{margin:0 auto;overflow:hidden}#rapprev.ajuste #rapframe{transform-origin:0 0}#rapprev.ajuste #rapzoomv{display:block}
.fdz{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1.5px dashed var(--line);border-radius:10px;padding:22px;cursor:pointer;text-align:center}
.fdz.on{border-color:var(--acc);background:var(--wash)}
.fdz b{font-size:13.5px}.fdz small{color:var(--ink3);font-size:12px}
.modal-bg{position:fixed;inset:0;background:rgba(24,26,27,.45);display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}
.modal{background:var(--card);border-radius:14px;max-width:900px;width:100%;max-height:88vh;overflow:auto;padding:18px}
.mact{display:flex;gap:8px;margin-top:14px;align-items:center}
.mini{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.tmeta{font-size:12px;color:var(--ink3)}
.pad input,.pad select,.pad textarea{width:100%}
label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin:10px 0 4px;font-weight:600}
.cmpgrid{display:grid;gap:14px}
.cmpcol .big{font-size:24px}
#login{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:100}
#login .bx{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:28px;width:340px}
#login h1{font-size:20px;margin-bottom:14px;font-family:"Barlow Semi Condensed",sans-serif}
#login input{width:100%;margin-bottom:8px}
.pubwrap{max-width:1100px;margin:0 auto}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px;padding:16px}
.pcard{border:1px solid var(--line2);border-radius:12px;overflow:hidden;cursor:pointer;background:var(--card);transition:box-shadow .15s,transform .15s}
.pcard:hover{box-shadow:0 8px 22px rgba(0,0,0,.10);transform:translateY(-1px)}
.pimg{height:110px;background:var(--wash);background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center}
.pnom{padding:10px 12px}
.pnom b{display:block;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pnom small{color:var(--ink3);font-size:11.5px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.menuwrap{position:relative;display:inline-flex}
.menu{display:none;position:absolute;right:0;top:40px;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.16);min-width:280px;max-height:78vh;overflow:auto;padding:6px;z-index:40}
.menuwrap.open .menu{display:block}
.menu a{display:block;padding:8px 12px;border-radius:8px;font-size:13px;color:var(--ink);cursor:pointer;text-decoration:none;white-space:nowrap}
.menu a:hover{background:var(--hov)}
.menu a.on{font-weight:700}
.phaseseg button.ferme{color:var(--ink3);font-weight:500}
.phaseseg button.ferme.on{color:var(--ink)}
.menu .grp{font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink3);padding:10px 12px 3px}
@media print{header,.noprint{display:none!important}}
/* v1109 : les surfaces de la maquette Revit */
td.surfm,.tot.surfm{text-align:center;font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--ink3)}
.tot.surfm{margin-left:10px;font-weight:500}
td.surfm.s-ok{color:#2c6b5f;font-weight:600}td.surfm.s-att{color:#a26a06;font-weight:600}td.surfm.s-hors{color:#b23b2e;font-weight:600}td.surfm.s-manq{color:var(--ink3)}
.surfban .pad{font-size:13px;line-height:1.7}.surfban .muted{color:var(--ink3)}
