/* Les styles de Pilotage (pilotage.html), sortis de la page tels quels en v905 (étape 3 du plan).
   Trois blocs, dans leur ordre d'origine : l'ordre compte, une règle plus bas gagne à égalité.
   Le petit bloc de la couleur du mot Hub reste dans la page. */
:root{
  --hov:#F7F4EF; --sel:#EDE7DE; --wash:#F7F4EF;
  --bg:#EFEBE4; --card:#ffffff; --line:#e5e1da; --line2:#EDE7DE;
  --ink:#1E2322; --ink2:#55524d; --ink3:#8E9794;
  --e-atelier:#db8c65; --e-design:var(--acc,#3a7c88); --e-maison:#345c72; --e-crayon:#bf6d62;
  --ok:#1e7a4f; --okbg:#e6f2ec; --warn:#8a5a1f; --warnbg:#f7eee0; --neut:#6b6660; --neutbg:#efece7;
;--acc:#3a7c88}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 "IBM Plex Sans",ui-sans-serif,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:'Inter',ui-sans-serif,sans-serif;font-weight:650;letter-spacing:-.015em;margin:0}
/* le bandeau reste hors du défilement : c'est le corps de page qui défile, l'ascenseur commence sous le bandeau */
html,body{height:100%}
body{display:flex;flex-direction:column;overflow:hidden}
.top{flex:none;z-index:20;background:rgba(250,248,245,.95);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.top-in{padding:10px 20px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.burger{display:none;font:inherit;font-size:18px;border:1px solid var(--line);background:var(--card);border-radius:8px;padding:4px 10px;cursor:pointer}
/* la colonne de gauche tient toute la hauteur : c'est le contenu qui défile, pas la coque entière
   (sinon la barre s'arrêtait à mi-page dès que la page dépassait l'écran) */
.shell{display:flex;flex:1;min-height:0;overflow:hidden}
aside{width:216px;flex:none;border-right:1px solid var(--line);padding:18px 10px 30px;background:var(--hov);overflow-y:auto}
.shell>main{overflow-y:auto;min-height:0}
.sgroup{font-size:10.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink3);margin:18px 10px 6px}
.sgroup:first-child{margin-top:2px}
.sitem{display:flex;align-items:center;gap:9px;width:100%;font:inherit;font-size:13.5px;text-align:left;padding:7px 10px;border:0;background:none;border-radius:8px;cursor:pointer;color:var(--ink2)}
.sitem:hover{background:#eeeae3}
.sitem.on{background:#e9e4dc;color:var(--ink);font-weight:600}
.sitem .ic{width:17px;height:17px;flex:none;opacity:.72;font-size:13px;
 display:inline-flex;align-items:center;justify-content:center;line-height:0}
.sitem.on .ic{opacity:1}
.sitem.soon{color:#b3ada4;cursor:default}
.sitem.soon:hover{background:none}
.sitem .tag{margin-left:auto;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;background:#e5e0d8;color:#8E9794;border-radius:5px;padding:1px 5px}
@media(max-width:880px){
 aside{position:fixed;left:0;top:0;bottom:0;z-index:60;transform:translateX(-100%);transition:transform .2s;box-shadow:8px 0 30px rgba(0,0,0,.25);padding-top:12px;background:var(--hov);overflow-y:auto}
 aside.open{transform:none}
 .burger{display:block;position:fixed;left:0;top:118px;z-index:55;border:none;border-radius:0 10px 10px 0;background:#1E2322;color:var(--acc,#3a7c88);padding:12px 10px 12px 7px;font-size:15px;font-weight:700;line-height:1;box-shadow:2px 2px 12px rgba(0,0,0,.28);opacity:.92;touch-action:none;cursor:grab}
}
.logo{font-family:'Inter',sans-serif;font-size:26px;font-weight:700;letter-spacing:-.03em;margin-right:14px}
.logo small.logosub{font-weight:500;color:var(--ink3);font-size:12px;margin-left:8px;letter-spacing:0}
.menuwrap{position:relative}
.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;color:var(--ink)}
.menu{position:absolute;top:calc(100% + 6px);right:0;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 40px rgba(0,0,0,.12);display:none;min-width:210px;z-index:45;overflow:hidden}
#appmenu{min-width:274px}
#appmenu a{white-space:nowrap}
.menu .grp,.chmenu .grp{margin-top:11px}
.menu a{display:block;padding:10px 14px;color:var(--ink);text-decoration:none;font-size:13px}
.menu a:hover{background:var(--hov)}
.menu a.here{font-weight:600;background:var(--sel)}
.menu .grp{padding:8px 14px 2px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink3)}

.logo span{color:var(--ink3);font-size:12px;letter-spacing:.22em;margin-left:8px;font-family:ui-sans-serif,sans-serif;text-transform:uppercase}
.entsel{display:flex;flex-direction:column;gap:2px;margin:0 0 10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.entbtn{font:inherit;font-size:13.5px;padding:7px 10px;border:none;border-radius:8px;background:none;cursor:pointer;color:var(--ink2);display:flex;align-items:center;gap:9px;text-align:left;width:100%}
.entbtn:hover{background:#eeeae3}
.entbtn .dot{width:8px;height:8px;border-radius:50%}
.entbtn.on{background:var(--ink);color:#fff;font-weight:600}
.spacer{flex:1}
.io button{font:inherit;font-size:12px;padding:5px 10px;border:1px solid var(--line);background:var(--card);border-radius:7px;cursor:pointer;color:var(--ink2)}
main{flex:1;min-width:0;max-width:none;padding:26px 32px 90px}
.demo{font-size:12.5px;color:var(--ink2);background:var(--warnbg);border:1px solid #ead9bf;border-radius:9px;padding:9px 13px;margin:0 0 20px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:0 0 22px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:15px 17px}
.kpi .l{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--ink3);margin-bottom:5px;min-height:30px;display:flex;align-items:flex-end}
.kpi .v{font-size:23px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap;letter-spacing:-.01em}
.kpi .s{font-size:12px;color:var(--ink3);margin-top:3px;font-variant-numeric:tabular-nums;white-space:nowrap}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin:0 0 16px;overflow:hidden}
.card .hd{padding:13px 17px;border-bottom:1px solid var(--line2);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.card .hd h2{font-size:15.5px}
.card .hd .sub{font-size:12.5px;color:var(--ink3)}
table{width:100%;border-collapse:collapse;font-size:13.5px}
th{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);text-align:left;padding:9px 12px;border-bottom:1px solid var(--line2);font-weight:600}
td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:middle}
@media(max-width:700px){.docskpis{display:none}}
table.doctree tr.leaf td:first-child{padding-left:52px;color:var(--ink3);font-size:12px}table.doctree tr.fold:hover td{background:var(--hov)}
th:first-child,td:first-child{padding-left:17px}
tr:last-child td{border-bottom:0}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.entchip{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink2)}
.entchip .dot{width:8px;height:8px;border-radius:50%;flex:none}
.badge{display:inline-block;font-size:11.5px;padding:2px 9px;border-radius:999px;font-weight:600}
.b-sig{background:var(--okbg);color:var(--ok)} .b-pipe{background:var(--warnbg);color:var(--warn)}
.b-neut{background:var(--neutbg);color:var(--neut)} .b-lost{background:#f6e7e7;color:#9c3f3f}
.badge.dk{min-width:96px;text-align:center;box-sizing:border-box;padding:3px 8px}
.dk-proposition{background:color-mix(in srgb,#345c72 14%,var(--card));color:#345c72}
.dk-contrat{background:color-mix(in srgb,var(--acc,#3a7c88) 16%,var(--card));color:#2f6159}
.dk-avenant{background:color-mix(in srgb,#b98a2c 18%,var(--card));color:#8a6116}
.dk-echeancier{background:color-mix(in srgb,#7a5aa6 16%,var(--card));color:#5f4386}
.dk-facture{background:color-mix(in srgb,var(--acc,#3a7c88) 18%,var(--card));color:#c24a1c}
.dk-avoir{background:color-mix(in srgb,#bf4a4a 16%,var(--card));color:#9c3f3f}
.dk-autre{background:var(--neutbg);color:var(--neut)}
/* L'en-tete d'un groupe de type portait exactement la meme pastille qu'un
   document : on ne voyait plus ou finissait le titre et ou commencait la piece.
   La pastille pleine ne signifie plus qu'une chose, « ceci est un document ».
   L'en-tete garde la couleur, reduite a un point, et prend la forme d'un titre. */
table.doctree tr.khd td{background:color-mix(in srgb,var(--ink) 4%,var(--card));border-top:1px solid var(--line2)}
table.doctree tr.khd:hover td{background:var(--hov)}
table.doctree .kdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:currentColor;margin-right:9px;vertical-align:1px}
table.doctree .klab{font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;font-weight:700;color:var(--ink2)}
table.doctree .kn{color:var(--ink3);font-size:12px;margin-left:9px}

a.rowlink{color:inherit;text-decoration:none;font-weight:600;cursor:pointer}
a.rowlink:hover{text-decoration:underline}
.btn{font:inherit;font-size:13px;padding:7px 13px;border-radius:8px;border:1px solid var(--line);background:var(--card);cursor:pointer;color:var(--ink)}
/* le bouton d'ajout de mission vit entre deux cartes : sans largeur ni marge propre il
   flottait, un blanc au-dessus et un autre en dessous. Il prend la largeur des cartes et
   un trait discontinu, comme une ligne à remplir. */
.btn.addmis{display:block;width:100%;margin:-2px 0 16px;padding:11px 13px;border-style:dashed;background:transparent;color:var(--ink2);text-align:center}
.btn.addmis:hover{background:var(--card);color:var(--ink);border-color:var(--ink3)}
.btn:hover{background:var(--hov)}
.btn.pri{background:var(--ink);color:#fff;border-color:var(--ink)}
.btn.pri:hover{background:#333}
.btn.sm{font-size:12px;padding:4px 9px}
.empty{padding:26px 17px;color:var(--ink3);font-size:13.5px}
input,select{font:inherit;font-size:13.5px;padding:6px 9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink)}
select,::picker(select){appearance:base-select}
select{white-space:nowrap;max-width:100%;box-sizing:border-box}
::picker(select){border-radius:10px;border:1px solid var(--line);background:var(--card);box-shadow:0 14px 40px rgba(0,0,0,.14);padding:4px;margin-top:4px}
select option{padding:6px 10px;border-radius:6px;cursor:pointer}
select option{background:var(--card);color:var(--ink)}
select optgroup{background:var(--card);color:var(--ink3);font-style:normal}
select option:hover,select option:focus{background:var(--hov)}
select option:checked{background:var(--sel);font-weight:600}
input:focus,select:focus{outline:2px solid #c9c3ba;outline-offset:0}
input.pct{width:74px;text-align:right}
input.amt{width:110px;text-align:right}
.modal-bg{position:fixed;inset:0;background:rgba(28,27,25,.35);z-index:40;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto}
.helpq{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;border:1.5px solid currentColor;font-weight:800;font-size:13px;line-height:1;cursor:pointer;background:transparent;color:inherit;font-family:inherit;padding:0}
.helpol{margin:0;padding-left:0;list-style:none;counter-reset:h}.helpol li{position:relative;padding:7px 0 7px 34px;font-size:13.5px;line-height:1.6;border-top:1px solid var(--line,#e3e0d9);counter-increment:h}.helpol li:first-child{border-top:0}
.helpol li::before{content:counter(h);position:absolute;left:0;top:8px;width:22px;height:22px;border-radius:50%;background:var(--ink,#1E2322);color:#fff;font-size:11.5px;font-weight:700;display:flex;align-items:center;justify-content:center}

.modal{background:var(--card);border-radius:14px;max-width:640px;width:100%;padding:22px;box-shadow:0 18px 50px rgba(0,0,0,.18);overflow-x:clip}
.modal h3{font-size:17px;margin-bottom:14px}
.frow{display:flex;gap:10px;margin-bottom:11px;flex-wrap:wrap}
.frow label{display:block;font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin-bottom:4px}
.frow>div{flex:1;min-width:130px}
.frow input,.frow select{width:100%;max-width:100%;min-width:0;box-sizing:border-box;text-overflow:ellipsis}
.cellin{width:100%;min-width:64px;box-sizing:border-box;text-align:right;font-size:12px;padding:3px 1px;border:1px solid transparent;background:transparent;border-radius:6px;font-family:inherit;color:inherit;font-variant-numeric:tabular-nums;display:block}
.cellin:hover{border-color:var(--line)}
.cellin:focus{border-color:var(--line);background:var(--card)}
.mact{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}
.bk{font-size:13px;color:var(--ink3);margin-bottom:14px;cursor:pointer}
.bk:hover{color:var(--ink)}
.ph-adv{display:flex;align-items:center;gap:6px;justify-content:flex-end}
.bar{height:5px;border-radius:3px;background:var(--line2);width:76px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--ink);border-radius:3px}
.mission-hd{background:var(--hov);font-weight:600}
.mission-hd td{padding:8px 12px}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--bg);font-size:13px;padding:10px 18px;border-radius:9px;z-index:60;opacity:0;transition:opacity .25s;pointer-events:none}
.toast.on{opacity:1}
/* ---- gantt ---- */
.gantt{padding:6px 17px 16px;overflow-x:auto}
.g-grid{display:grid;grid-template-columns:230px 1fr;min-width:640px}
.g-lab{padding:4px 10px 4px 0;border-bottom:1px solid var(--line2);font-size:12.5px;display:flex;align-items:center;gap:7px;min-height:32px;box-sizing:border-box}
.g-lab.g-mission{padding-left:8px}
.g-lab .pcode{flex:none;min-width:50px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.g-lab .rowlink{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;display:block}
.g-lab .sub{color:var(--ink3);font-size:11px}
.g-track{position:relative;border-bottom:1px solid var(--line2);min-height:40px}
.g-hd{border-bottom:1px solid var(--line)}
.g-hd .g-track{border-bottom:1px solid var(--line)}
.g-month{position:absolute;top:0;bottom:0;border-left:1px solid var(--line2)}
.g-mlab{position:absolute;top:4px;font-size:10.5px;color:var(--ink3);padding-left:5px;text-transform:capitalize;white-space:nowrap}
.g-bar{position:absolute;top:50%;transform:translateY(-50%);height:14px;border-radius:4px;cursor:default}
.g-bar .fill{position:absolute;left:0;top:0;bottom:0;border-radius:4px 0 0 4px}
.g-bar.dragbl{cursor:grab;touch-action:none}
.g-bar.dragbl:active{cursor:grabbing}
.gh{position:absolute;top:-3px;bottom:-3px;width:9px;z-index:2}
.gh.gl{left:-2px;cursor:w-resize}.gh.gr{right:-2px;cursor:e-resize}
.g-dia{position:absolute;top:50%;display:inline-flex;align-items:center;gap:5px;cursor:pointer;font-size:13px;z-index:3;line-height:1;text-shadow:0 0 2px #fff}
.g-dia em{font-style:normal;font-size:10.5px;font-weight:600;color:var(--ink2);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis;background:rgba(255,255,255,.75);border-radius:5px;padding:1px 4px}
.g-dia:hover,.g-dia:hover em{color:var(--acc,#3a7c88)}
.phgrab{cursor:grab;color:var(--ink3);width:18px;text-align:center;user-select:none}
.phgrab:active{cursor:grabbing}
tr.rowdrop td{border-top:2px solid var(--acc,#3a7c88)}
.phlab{display:flex;align-items:center;gap:8px;flex-wrap:nowrap}
/* Les deux dates etaient l'une sous l'autre : chaque phase prenait deux
   hauteurs de champ, et le planning se lisait sur deux ecrans. Cote a cote,
   il tient d'un coup d'oeil. Le code de la phase suffit a gauche, son nom
   complet reste en infobulle. */
.phlab>b{width:66px;flex:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.phdates{display:flex;flex-direction:row;gap:5px;align-items:center}
.phdates input.date{width:118px;padding-left:6px;padding-right:2px}
.pjrow{display:flex;gap:16px;align-items:flex-start}
.pjmain{flex:1;min-width:0}
.pjside{width:460px;flex:none;position:sticky;top:16px}
@media(max-width:1150px){.pjrow{flex-wrap:wrap}.pjside{width:100%;position:static}}
.fk{padding:8px 16px}
.fk3{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr) minmax(0,1.2fr) minmax(0,.95fr);gap:0 8px;align-items:start}.fk3>.fk+.fk{border-left:1px solid var(--line2,#EDE7DE)}
.fk3 .fkrow label.fxd{flex:0 0 96px;min-width:96px}.fk3 .fkrow input.drv{width:56px}.fk3 .fkrow input.drv+.unit{flex:0 0 62px;width:62px}.fk3 .fkrow{overflow:hidden}.fk3 .fkrow input{width:100px}
.fk3 .fkhead{padding-top:4px}
.fkstrip{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:12px 16px 6px}.fkstrip>.fk{background:var(--wash);border-radius:10px;padding:10px 14px 8px !important}
.fkstrip .fkrow{border-bottom:none;padding:0;flex-wrap:wrap;align-items:baseline;gap:2px 8px}.fkstrip .fkrow label{flex:1 1 100%;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);font-weight:600}.fkstrip .fkrow input{order:2;width:auto;min-width:0;flex:1 1 auto;text-align:left;font-size:21px;font-weight:700;padding:2px 0}.fkstrip .fkrow input:disabled{padding:2px 0}.fkstrip .fkrow .unit{order:3;flex:none;width:auto;margin:0;font-size:11.5px;color:var(--ink3)}
/* lignes alignées d'une colonne à l'autre : même hauteur de rangée partout */
.fk3 .fkrow{min-height:46px;box-sizing:border-box;padding:4px 0}
@media(max-width:1500px){.fk3{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.fk3>.fk:nth-child(3){border-left:none}.fk3>.fk:nth-child(n+3){border-top:1px solid var(--line2,#EDE7DE)}}
@media(max-width:900px){.fk3{grid-template-columns:1fr}.fk3>.fk+.fk{border-left:none;border-top:1px solid var(--line2,#EDE7DE)}}
.fkhead{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink3);padding:9px 0 3px}
.fktot{background:var(--wash);border-radius:9px;padding:2px 10px;margin:8px -10px 2px}
.fktot .fkrow{border-bottom:none}
.fktot label{font-weight:700;color:var(--ink)}
.fktot input:disabled{font-size:15px}
.fktot input{font-weight:700;font-size:15px}
.fkrow{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line2,#EDE7DE)}
.fkrow:last-child{border-bottom:none}
.fkrow label{font-size:12px;color:var(--ink2);flex:1 1 auto;min-width:0}
.fkrow .sp{flex:1 1 0;min-width:4px}
.fkrow label.fxd{flex:0 0 108px;min-width:108px}
.fkrow>span{white-space:nowrap;display:inline-flex;align-items:center}
.fkrow input.drv{width:64px}
.fkrow input.drv+.unit{flex:0 0 80px;width:80px;text-align:left;margin-left:0}
.fkrow input{width:112px;flex:none;text-align:right;font:inherit;font-size:13.5px;padding:5px 7px;border:1px solid var(--line);border-radius:7px;font-variant-numeric:tabular-nums}
.fkrow .unit{text-align:left}
.fkrow input:disabled{background:transparent;border-color:transparent;color:var(--ink);font-weight:600;opacity:1}
.fkrow .unit{font-size:11px;color:var(--ink3);flex:none;text-align:right}
.fkamt{flex:none;text-align:right;font-weight:700;font-size:13.5px;white-space:nowrap;font-variant-numeric:tabular-nums;display:inline-flex;justify-content:flex-end;align-items:center;gap:5px}
.fkamt .dt{font-weight:400;color:var(--ink3);font-size:11px}
.fkrow input.slim{width:96px}
.fkrow .unit.slim{width:auto;min-width:14px}
#qsel{font:inherit;font-size:12.5px;width:260px;max-width:34vw;margin:0 10px 0 0;padding:5px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink2);cursor:pointer}
body.aethos .top #qsel{background:transparent;border-color:rgba(255,255,255,.4);color:#fff}body.aethos .top .helpq{color:#fff;border-color:rgba(255,255,255,.55)}body.t-calque .top .helpq{color:var(--ink);border-color:rgba(38,36,31,.45)}body.aethos .top #qsel option{color:var(--ink);background:var(--card)}
@media(max-width:800px){#qsel{display:none}}
#qsel:hover,#qsel:focus{color:var(--ink);outline:none}
/* Un long nom de projet débordait de sa boîte sous Safari et passait sous le choix du style :
   le texte d'un menu de l'en-tête reste dans sa boîte, coupé par des points de suite. */
#qsel,#thbtn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;contain:paint;min-width:0;padding-right:28px}
#qsel.cur{font-weight:600;border-radius:999px}
body.aethos.t-epure .top #qsel,body.t-epure .top #qsel,body.t-calque .top #qsel{color:var(--ink);border-color:var(--line);background:var(--card)}
.g-bar.click{cursor:pointer}
.g-bar.pipe{opacity:.5;border:1.5px dashed currentColor;background:transparent !important}
.g-today{position:absolute;top:0;bottom:0;width:0;border-left:1.5px solid var(--ink);opacity:.5}
.g-mission{background:var(--hov);font-weight:600;font-size:11.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink2)}
input.date{font-size:11px;padding:2px 4px;width:106px;border:1px solid var(--line);border-radius:5px;color:var(--ink2)}
/* ---- bar charts ---- */
.hchart{padding:12px 17px 16px}
/* charge de l'équipe */
.chgen{padding:0 17px 12px;font-size:12px;color:var(--ink3)}
.chfrees{display:flex;gap:10px;flex-wrap:wrap;padding:12px 17px 16px}
.chfree{flex:1 1 150px;min-width:140px;border:1px solid var(--line);border-radius:10px;padding:9px 11px}
.chfree .m{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);margin-bottom:6px}
.chfree .p{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;padding:2px 0}
.chfree .p b{font-variant-numeric:tabular-nums}
.chfree .p.none{color:var(--ink3);font-style:italic}
.chfree .g{margin-top:7px;padding-top:6px;border-top:1px solid var(--line2);font-size:11px;color:var(--ink3)}
.chfree .g.up{color:#9c3f3f}
.chtbl{width:100%;border-collapse:collapse;font-size:12.5px}
.chtbl th{font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink3);font-weight:600;text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.chtbl th.num,.chtbl td.num{text-align:right}
.chtbl td{padding:5px 8px;border-bottom:1px solid var(--line2);vertical-align:middle;font-variant-numeric:tabular-nums}
.chtbl td.chp{white-space:nowrap;min-width:150px}
.chtbl td.chp em{font-style:normal;color:var(--ink3);font-size:11px;margin-left:5px}
.chtbl tr.tot td{font-weight:600;background:var(--wash);border-top:1px solid var(--line)}
.chtbl tr.rest td{font-size:11.5px;color:var(--ink3)}
.chtbl tr.rest td.up{color:#9c3f3f;font-weight:600}.chtbl tr.rest td.dn{color:#2e7d5b}
.chtbl.mini td,.chtbl.mini th{padding:4px 6px}
.chc{min-width:62px;text-align:right;cursor:default}
.chc .chb{height:5px;border-radius:3px;background:var(--line2);overflow:hidden;display:flex;margin-bottom:3px}
.chc .chb i{display:block;height:100%;background:#7fa88f}
.chc .chb u{display:block;height:100%;background:#c0705a}
.chc.full .chb i{background:#d6a94e}
.chc.over .chb i{background:#c0705a}
.chc span{font-size:11.5px;white-space:nowrap}
.chc span em{font-style:normal;color:var(--ink3);font-size:10.5px}
.chc.idle span{color:var(--ink3)}
.chc.over span{color:#9c3f3f;font-weight:600}
.chn{min-width:62px;text-align:right;cursor:pointer}
.chn:hover{background:var(--hov,#EDE7DE)}
.chn b{display:block;font-size:13px;font-weight:600}
.chn.z b{color:var(--ink3);font-weight:400}
.chn .af{display:block;font-size:10.5px;color:var(--ink3)}
.chn .ms{display:block;font-size:10.5px}
.chn .ms.up{color:#9c3f3f}.chn .ms.dn{color:#2e7d5b}
.chn i.ov{font-style:normal;font-size:10px;color:var(--ink3);margin-left:3px}
.edot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:middle}
.h-row{display:grid;grid-template-columns:150px 52px 1fr 92px;gap:9px;align-items:center;margin:3px 0}
.h-row .serie{font-size:11px;color:var(--ink3);text-align:right}
.h-row .val{font-size:12.5px;font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}
.h-bar{height:14px;border-radius:0 4px 4px 0;min-width:2px}
.h-bar.tex{background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.55) 0 3px,transparent 3px 6px)}
.vchart{display:flex;align-items:flex-end;gap:6px;height:150px;padding:12px 17px 4px}
svg.vpline{position:absolute;left:17px;top:12px;width:calc(100% - 34px);height:calc(100% - 16px);pointer-events:none;overflow:visible}
.vpldots{position:absolute;left:17px;right:17px;top:12px;bottom:4px;pointer-events:none}.vpldots span{position:absolute;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:var(--card,#fff);border:1.6px solid #1E2322;pointer-events:auto;cursor:default}
.vcol{flex:1;display:flex;flex-direction:column-reverse;gap:2px;min-width:14px}
.vseg{border-radius:4px 4px 0 0}.vseg[onclick]:hover{filter:brightness(1.15);outline:1px solid rgba(0,0,0,.25)}
.vlabs{display:flex;gap:6px;padding:2px 17px 14px}
.vlabs span{flex:1;font-size:10.5px;color:var(--ink3);text-align:center;text-transform:capitalize;min-width:14px}
.vpair{flex:1;display:flex;gap:2px;align-items:stretch;min-width:20px;height:100%}
.vhalf{flex:1;height:100%;display:flex;flex-direction:column-reverse;gap:2px}
.syn{display:grid;grid-template-columns:1fr 260px 300px;gap:16px;padding:14px 17px;align-items:start}
.syn>div:nth-child(2){display:grid;grid-auto-rows:auto;gap:6px;align-self:stretch;align-content:space-between}
.syn>div:nth-child(2) .stat{padding:7px 11px}
.syn>div:nth-child(2) .stat .pb{margin:5px 0 3px}
.syn>div:nth-child(2) .stat .s{line-height:1.45}
.synbrief .aibrief{margin-bottom:0}
.synbrief .aibrief .txt{max-height:none}
@media(max-width:1500px){.syn{grid-template-columns:1fr 260px}.synbrief{grid-column:1/-1}.synbrief .aibrief .txt{max-height:none}}
@media(max-width:760px){.syn{grid-template-columns:1fr}}
.aibrief{border:1px solid var(--line2);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--wash)}
body.t-nuit .aibrief{background:#2b2e31;border-color:#3d4144}
body.t-beton .aibrief{background:#e6e6e3;border-radius:0}
body.t-calque .aibrief{background:#f1eee6;border-radius:4px}
body.t-riviera .aibrief{background:#f1ecdd}
.aibrief .t{font-size:12px;color:var(--ink2);display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:6px}
.aibrief .txt{font-size:13px;line-height:1.65;color:var(--ink2);white-space:pre-wrap;max-height:none}
.aibrief .txt .aih{display:block;font-size:11px;font-weight:800;letter-spacing:.1em;color:var(--ink);margin:6px 0 -10px;padding-top:8px;border-top:1px solid var(--line2)}
.aibrief .txt .aih:first-child{border-top:none;padding-top:0;margin-top:-4px}
.stat{border:1px solid var(--line2);border-radius:10px;padding:10px 12px;margin-bottom:8px}
.syn>div:nth-child(2) .stat{margin-bottom:0}
.stat .t{font-size:12px;color:var(--ink2);display:flex;justify-content:space-between}
.stat .t b{font-variant-numeric:tabular-nums;white-space:nowrap}
.stat .pb{height:5px;border-radius:3px;background:var(--line2);margin:6px 0 4px;overflow:hidden}
.stat .pb i{display:block;height:100%;border-radius:3px;background:var(--ink)}
.stat .s{font-size:11px;color:var(--ink3);font-variant-numeric:tabular-nums}
.vprev{background:#ddd7cc;border-radius:4px 4px 0 0}
.leg{display:flex;gap:14px;flex-wrap:wrap;padding:0 17px 12px;font-size:12px;color:var(--ink2)}
.chsw{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:12.5px;margin:0;text-transform:none;letter-spacing:0;color:var(--ink2)}.chsw input{position:absolute;opacity:0;width:0;height:0}
.chsw span{width:34px;height:20px;border-radius:99px;background:#cfd3d6;position:relative;transition:background .15s;flex:none}.chsw span::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:99px;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform .15s}
.chsw input:checked+span{background:var(--acc,#3a7c88)}.chsw input:checked+span::after{transform:translateX(14px)}
.leg .sw{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.chsum{padding:0 17px 14px;font-size:12.5px;color:var(--ink2);font-variant-numeric:tabular-nums}
.mini{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink2);font-variant-numeric:tabular-nums;white-space:nowrap;justify-content:flex-end}
.minibar{width:40px;height:4px;border-radius:2px;background:var(--line2);overflow:hidden;flex:none}
.minibar i{display:block;height:100%;border-radius:2px}
.g-r{display:flex;flex-direction:column;gap:2px;justify-content:center;padding:3px 14px 3px 12px;border-bottom:1px solid var(--line2);min-height:40px;box-sizing:border-box}
.g-r .mini{line-height:1.15}
.g-rh{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);display:flex;align-items:flex-end;padding:0 14px 2px 12px;border-bottom:1px solid var(--line)}
.kb{display:flex;gap:10px;padding:14px 17px;overflow-x:auto;align-items:flex-start}
.kbcol{flex:1;min-width:158px;background:var(--hov);border:1px solid var(--line);border-radius:10px;padding:8px}
.kbhd{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);display:flex;justify-content:space-between;padding:2px 4px 6px}
.kbcard{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin:0 0 6px;cursor:grab;font-size:12.5px}
.kbcard:active{cursor:grabbing}
.kbcol.kbdrop{outline:2px dashed #b8b2a8;outline-offset:-3px;background:var(--hov)}
.kbcard:hover{border-color:#c9c3ba}
.kbcard .t{font-weight:600;margin-bottom:2px}
.kbcard .a{color:var(--ink2);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px}
.kbfoot{font-size:11.5px;color:var(--ink2);padding:4px 4px 0;font-variant-numeric:tabular-nums;white-space:nowrap}
tr.stghd td{background:var(--hov);font-weight:600;font-size:12px;color:var(--ink2)}
tr.stgtot td{color:var(--ink2);font-size:12.5px;border-bottom:2px solid var(--line)}
.seg{display:flex;gap:2px;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.badge.click{cursor:pointer}
.fbuild{display:flex;gap:16px;align-items:flex-start}
.fbmain{flex:1;min-width:0}
.ftot td{padding-top:6px;padding-bottom:6px;background:var(--wash,transparent)}
.fbprev{width:470px;flex:none;position:sticky;top:16px}
.fbframe{overflow:hidden;height:648px;background:#e7e4df;border-radius:0 0 12px 12px}
.fbframe iframe{width:794px;height:1123px;border:0;transform:scale(0.565);transform-origin:0 0;pointer-events:none}
@media(max-width:1400px){.fbuild{flex-wrap:wrap}.fbprev{width:100%;position:static}}
.lt-fix td:nth-child(-n+2){overflow-wrap:anywhere}
.lt-fix{min-width:1120px}
.lt-fix col.lt-c-act{width:385px}
.lt-fix col.lt-c-pj{width:12%}.lt-fix col.lt-c-m{width:7%}.lt-fix col.lt-c-st{width:6.5%}.lt-fix col.lt-c-n{width:11.5%}.lt-fix col.lt-c-due{width:8.5%}
.lt-fix td.lt-act{white-space:nowrap}
/* écran plus étroit : les boutons passent sur deux lignes plutôt que de faire défiler le tableau */
@media (max-width:1600px){.lt-fix{min-width:900px}.lt-fix col.lt-c-act{width:215px}.lt-fix col.lt-c-pj{width:11%}.lt-fix col.lt-c-m{width:9%}.lt-fix col.lt-c-st{width:8%}.lt-fix col.lt-c-n{width:10.5%}.lt-fix col.lt-c-due{width:9.5%}.lt-fix td.lt-act{white-space:normal;line-height:1.9}.lt-fix td.lt-act .btn{margin:1px 0 1px 3px}}
.lt-fix .rowcols{display:flex;flex-wrap:nowrap;max-width:100%}
.lt-fix .rowcols .lbl{min-width:0;flex:1 1 auto}
.rowcols{display:inline-flex;align-items:center;gap:8px;min-width:0}
.rowcols .entcol{flex:0 0 58px}
/* un code long (INTRA-DESIGN) prend sa largeur au lieu d'écraser le titre en une lettre par ligne */
.rowcols .pcode{flex:0 0 auto;min-width:46px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.rowcols .lbl{min-width:0}
/* la colonne Projet : un code long (INTRA-DESIGN) passe le titre à la ligne au lieu de l'écraser en une lettre par ligne */
.rowcols.pcol,.lt-fix .rowcols.pcol{flex-wrap:wrap;row-gap:1px}
.rowcols.pcol .lbl,.lt-fix .rowcols.pcol .lbl{flex:1 1 7em;min-width:7em}
.sbtgl{font:inherit;font-size:11px;width:64px;margin-left:5px;text-align:left;border:none;background:transparent;color:var(--ink3);cursor:pointer;padding:0}
.sbtgl:hover{color:var(--ink)}
.sbtgl:disabled{cursor:default;color:var(--ink3)}
.tagchip{font:inherit;font-size:11.5px;padding:3px 11px;border:1px solid var(--line);border-radius:999px;background:var(--card);cursor:pointer;color:var(--ink2)}
.tagchip.on{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:600}
@keyframes mshake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}
.echnow{background:var(--sel)}
td.echclk{cursor:pointer}
td.echclk:hover{background:var(--sel);box-shadow:inset 0 0 0 1px var(--line)}
.echov{color:#b06030;font-weight:600;border-bottom:1px dotted #b06030}
tr.echsub td{font-weight:600;background:var(--wash)}
tr.echtot td{font-weight:700;border-top:2px solid var(--ink)}
td.echind{padding-left:22px;color:var(--ink2)}
.seg button{font:inherit;font-size:12px;padding:5px 11px;border:0;background:var(--card);cursor:pointer;color:var(--ink3)}
.seg button.on{background:#e9e4dc;color:var(--ink);font-weight:600}
#tip{position:fixed;z-index:70;background:var(--ink);color:var(--bg);font-size:12px;padding:7px 11px;border-radius:8px;pointer-events:none;display:none;max-width:260px;line-height:1.45}
.trrow{display:inline-flex;align-items:center;gap:6px;font-size:12.5px}
.tru{color:var(--ink3)}
.trf{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--ink3);margin:0;text-transform:none;letter-spacing:0}
.trf input{margin:0;width:auto}
@media(max-width:700px){
 .trrow{display:flex;width:100%;max-width:340px}
 .trrow .trn{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .trrow input{flex:none;width:92px!important;text-align:right}
 .trrow .tru{flex:none;width:30px}

 .top-in{padding:8px 12px;gap:10px;row-gap:8px}
 main{padding:18px 12px 80px}
 #btnSave,#btnLoad,#syncst{display:none}
 .logo{font-size:18px}
 .kpis{grid-template-columns:1fr 1fr}
 .kpi .l{min-height:46px}
 .kpi .v{font-size:20px}
 .kpi .s{white-space:normal}
 .card{overflow-x:auto}
 .card table{min-width:620px}
}

/* ===== Style « Aethos », même charte que le Hub, bascule partagée ===== */
body.aethos{--bg:#EFEBE4;--card:#ffffff;--ink:#1E2322;--ink2:#5B6563;--ink3:#8E9794;--line:#DFD8CE;--line2:#EDE7DE}
body.aethos .top{background:#1E2322;border-bottom:none;backdrop-filter:none}
body.aethos .top-in{padding:12px 24px}
/* meme raison : Epure et Studio ont un en-tete clair, le blanc y disparait */
body.aethos:not(.t-epure):not(.t-studio) .logo{color:#fff}
body.aethos:not(.t-epure):not(.t-studio) .logo small.logosub{color:rgba(255,255,255,.55)}
body.aethos:not(.t-epure):not(.t-studio) .logo span{color:rgba(255,255,255,.55)}
body.aethos .entbtn{border-radius:999px;padding:8px 14px}
body.aethos .entbtn:hover{background:var(--hov)}
body.aethos .entbtn.on{background:#1E2322;color:#fff}
body.aethos #qsel{border-radius:10px}
body.aethos .io button{background:transparent;border-color:rgba(255,255,255,.4);color:#fff}
body.aethos .io button:hover{background:rgba(255,255,255,.12)}
body.aethos #syncst{color:rgba(255,255,255,.55)!important}
body.aethos .burger{background:transparent;color:#fff;border-color:rgba(255,255,255,.4)}
body.aethos .top .avbtn{border-color:rgba(255,255,255,.45);background:transparent;color:#fff}
body.aethos .top .btn{background:transparent;border-color:rgba(255,255,255,.4);color:#fff}
body.aethos .top .btn:hover{background:rgba(255,255,255,.12)}
body.aethos aside{background:var(--card);border-right:1px solid var(--line);padding-top:18px} /* blanche comme la barre des sept autres applications : elle etait la seule
    a rester grise, d'ou l'impression de changer d'outil en changeant de page */ /* le bord est ce sur quoi vient se poser l'onglet de repli :
    sans lui, la petite languette flottait toute seule au milieu du vide */
@media(max-width:880px){body.aethos aside{background:var(--hov);border-right:1px solid var(--line);padding-top:12px}
 body.aethos .burger{background:#1E2322;color:var(--acc,#3a7c88);border:none}}
body.aethos .sitem{border-radius:999px;padding:8px 14px}
body.aethos .sitem:hover{background:var(--hov)}
body.aethos .sitem.on{background:#1E2322;color:#fff;font-weight:600}
body.aethos .sgroup{color:var(--ink);font-weight:700}
body.aethos .card{border:none;border-radius:18px;box-shadow:0 2px 12px rgba(42,46,48,.08)}
body.aethos .hd{border-bottom:1px solid var(--line2)}
body.aethos h1{color:var(--ink);font-weight:800;letter-spacing:-.02em}
body.aethos main .btn{border-radius:999px;border-color:#ddd7cc}
body.aethos main .btn:hover{border-color:var(--acc,#3a7c88);background:#e9f2f0}
body.aethos main .btn.pri,body.aethos .modal .btn.pri{background:var(--acc,#3a7c88);border-color:var(--acc,#3a7c88);color:#fff;font-weight:600}
body.aethos .seg{border-radius:999px;background:var(--card);overflow:hidden}
body.aethos .seg button.on{background:#1E2322;color:#fff}
body.aethos .kpi{border:none;border-radius:16px;box-shadow:0 1px 8px rgba(42,46,48,.08)}
body.aethos .modal{border-radius:18px}


/* ===== Thèmes supplémentaires, variantes du style Aethos ===== */
body.t-nuit{--hov:#2c2f31;--sel:#3a3f43;--wash:#26292c;--bg:#191b1d;--card:#232628;--ink:#e8e6e1;--ink2:#b3b1ab;--ink3:#83817b;--line:#34383b;--line2:#2c2f31;--ok:#5abf8a;--okbg:#1e3228;--warn:#d9a75a;--warnbg:#372e1c;--neut:#9a958d;--neutbg:#2c2f31}
body.t-nuit .top{background:#101214}
body.t-nuit .sitem .tag{background:#33373a;color:#b3b1ab}

body.t-nuit input,body.t-nuit select{background:#2b2e31;color:var(--ink);border-color:#3d4144}
body.t-nuit .cellin{background:transparent;border-color:transparent}
body.t-nuit .cellin:hover{border-color:#3d4144}
body.t-nuit .cellin:focus{background:#2b2e31;border-color:#3d4144}
body.t-nuit .seg{background:#232628;border-color:#3d4144}
body.t-nuit .seg button{color:var(--ink2)}
body.t-nuit .seg button.on{background:var(--acc,#3a7c88);color:#fff}
body.t-nuit .sitem.on,body.t-nuit .entbtn.on{background:var(--acc,#3a7c88);color:#fff}
body.t-nuit .sitem:hover,body.t-nuit .entbtn:hover{background:#2c2f31}
body.t-nuit .card{box-shadow:0 2px 16px rgba(0,0,0,.5)}
body.t-nuit .kpi{box-shadow:0 1px 8px rgba(0,0,0,.45)}
body.t-nuit main .btn{background:#232628;border-color:#3d4144;color:var(--ink)}
body.t-nuit main .btn:hover{border-color:var(--acc,#3a7c88);background:#1d2b29}
body.t-nuit .menu{background:#232628;border-color:#3d4144}
body.t-nuit .badge{background:#2c2f31;color:#c9c6bf}
body.t-nuit .modal{background:#232628}
@media(max-width:880px){body.t-nuit aside{background:#1f2224;border-color:#34383b}body.t-nuit .burger{background:#101214;color:var(--acc,#3a7c88)}}
body.t-nuit svg [stroke="#1E2322"]{stroke:#d8d5cf}
body.t-nuit svg text[fill="#1E2322"]{fill:#d8d5cf}
body.t-nuit svg line[stroke="#f1eee9"]{stroke:#2e3134}
body.t-nuit svg line[stroke="#f4eeee"]{stroke:#342c2c}
body.t-nuit svg line[stroke="#d8d2c9"]{stroke:#4a4e52}
body.t-nuit svg text[fill="#6d675f"]{fill:#9a968f}
body.t-nuit svg text[fill="#b3a3a3"]{fill:#a98f8f}


/* ---------- Épuré : la clarté des sites Apple et Pixel. Beaucoup de blanc, des angles très arrondis,
   pas de traits durs, une seule couleur d'action, une typographie serrée et sombre. ---------- */
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;--rad:14px;
 font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI Variable Text","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
 letter-spacing:-.011em}

/* ---------- Studio : l'entre-deux. Ni le noir de Classique, ni le blanc froid d'Épuré.
   Un gris chaud de papier, des encres profondes mais pas noires, des traits doux.
   Il reprend les formes d'Épuré (angles arrondis, chrome léger) et n'en change
   que la palette : le corps porte donc les deux classes. ---------- */
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;--rad:12px;
 letter-spacing:-.005em}
body.t-studio .card{box-shadow:0 1px 2px rgba(38,42,44,.04),0 8px 22px -18px rgba(38,42,44,.30)}

body.t-epure h1,body.t-epure h2,body.t-epure h3,body.t-epure h4{letter-spacing:-.022em;font-weight:600}
body.t-epure .card,body.t-epure .hcard,body.t-epure .gc{border:0;border-radius:18px;box-shadow:0 1px 2px rgba(0,0,0,.04),0 8px 24px rgba(0,0,0,.05)}
body.t-epure .kpi{border:0;border-radius:16px;box-shadow:0 1px 2px rgba(0,0,0,.04),0 6px 18px rgba(0,0,0,.045)}
body.t-epure .modal{border:0;border-radius:20px;box-shadow:0 24px 64px rgba(0,0,0,.18)}
body.t-epure .btn,body.t-epure .rbtn{border-radius:980px;border-color:var(--line);font-weight:500}
body.t-epure .btn:hover,body.t-epure .rbtn:hover{background:var(--hov);border-color:#dcdce1}
body.t-epure .btn.pri{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:500}
body.t-epure .btn.pri:hover{background:#2f6a76;border-color:#2f6a76}
body.t-epure input,body.t-epure select,body.t-epure textarea{border-radius:12px;border-color:var(--line);background:var(--card)}
body.t-epure input:focus,body.t-epure select:focus,body.t-epure textarea:focus{border-color:var(--acc);box-shadow:0 0 0 3px rgba(65,123,116,.18);outline:0}
body.t-epure .seg{border-radius:980px;background:var(--hov);border:0;padding:2px}
body.t-epure .seg button{border-radius:980px;border:0;font-weight:500;background:transparent;padding:5px 11px;line-height:1.5}
body.t-epure .seg button.on{background:var(--acc);color:#fff;font-weight:600;box-shadow:none}
/* Le survol du segment posait var(--line2) sur une piste var(--hov) : deux gris
   voisins, donc rien de visible. Sur ce thème la piste est grise, la pastille
   survolée passe en blanc. */
body.t-epure .seg button:hover:not(.on){background:var(--card);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.06)}
body.t-epure .seg button.on:hover{background:#2f6a76}
body.t-epure .pill,body.t-epure .tag,body.t-epure .oc-tag,body.t-epure .chip,body.t-epure .st,body.t-epure .ct{border-radius:980px}
body.t-epure table th{background:transparent;border-bottom:1px solid var(--line);color:var(--ink3);font-weight:500;text-transform:none;letter-spacing:0}
body.t-epure table tr.tot td,body.t-epure table tr.tot th{background:transparent;border-top:1px solid var(--line)}
body.t-epure .hd{border-bottom:1px solid var(--line2)}
body.t-epure .sub{color:var(--ink3)}
body.t-epure .ico{border-radius:980px}
body.t-epure .swrow .sw i,body.t-epure .sw i{border-radius:980px}
body.t-epure table td{border-bottom:1px solid var(--line2)}
body.t-epure table td,body.t-epure table th{border-left:0;border-right:0}
body.t-epure .hint,body.t-epure .empty{border-radius:12px;color:var(--ink3)}
body.t-epure .menu,body.t-epure .ctx,body.t-epure .chmenu,body.t-epure .pjmenu{border-radius:14px;border:0;box-shadow:0 12px 40px rgba(0,0,0,.16)}
body.t-epure a{color:var(--ink)}
body.t-epure .rowlink{color:var(--ink)}
body.t-epure a:hover{color:var(--ink)}
body.t-epure header,body.t-epure .top{background:rgba(255,255,255,.82);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid var(--line);color:var(--ink)}
body.t-epure .wordmark,body.t-epure .wm,body.t-epure .who,body.t-epure .logo{color:var(--ink);font-weight:600;letter-spacing:-.022em}
body.t-epure header .wordmark small,body.t-epure header .wm small{color:var(--ink3)}

body.t-epure .logo{color:var(--ink);font-weight:600;letter-spacing:-.022em}
body.t-epure .logo small.logosub,body.t-epure .logo span{color:var(--ink3)}
body.t-epure #syncst{color:var(--ink3)!important}
body.t-epure #qsel,body.t-epure .io button,body.t-epure .top .btn,body.t-epure .top .avbtn,body.t-epure header .btn,body.t-epure header .avbtn,body.t-epure .burger{color:var(--ink);border-color:var(--line);background:var(--card)}
body.t-epure .top .helpq{color:var(--ink2);border-color:var(--line)}
body.t-epure .io button:hover,body.t-epure .top .btn:hover{background:var(--hov)}
body.t-epure .sitem,body.t-epure .entbtn{border-radius:10px;font-weight:500}
body.t-epure .sitem.on,body.t-epure .entbtn.on{background:var(--sel);color:var(--acc);font-weight:600;box-shadow:none}
body.t-epure .sgroup{text-transform:uppercase;letter-spacing:.05em;color:var(--ink3);font-weight:600}
@media(max-width:880px){body.t-epure aside{background:var(--card)}body.t-epure .burger{background:var(--card);color:var(--ink);border:1px solid var(--line)}}

body.t-calque{--bg:#f7f5f0;--card:#fdfcf9;--ink:#26241f;--ink2:#565248;--ink3:#8f8a7f;--line:#d8d2c4;--line2:#eae5da}
body.t-calque .top{background:var(--bg);border-bottom:1px solid var(--ink)}
body.t-calque .logo{color:var(--ink)}
body.t-calque .logo small.logosub,body.t-calque .logo span{color:rgba(38,36,31,.5)}
body.t-calque #syncst{color:rgba(38,36,31,.5)!important}
body.t-calque #qsel,body.t-calque .io button,body.t-calque .top .btn,body.t-calque .top .avbtn,body.t-calque .burger{color:var(--ink);border-color:rgba(38,36,31,.35);background:transparent}
body.t-calque .io button:hover,body.t-calque .top .btn:hover{background:rgba(38,36,31,.07)}
body.t-calque .card{border:1px solid var(--line);border-radius:4px;box-shadow:none}
body.t-calque .kpi{border:1px solid var(--line);border-radius:4px;box-shadow:none}
body.t-calque .modal{border-radius:6px}
body.t-calque .sitem,body.t-calque .entbtn,body.t-calque .seg,body.t-calque main .btn,body.t-calque #qsel,body.t-calque input,body.t-calque select{border-radius:3px}
body.t-calque .sitem.on,body.t-calque .entbtn.on{background:transparent;color:#35635E;box-shadow:inset 0 0 0 1.2px #35635E;font-weight:600}
body.t-calque .seg button.on{background:#26241f;color:#fdfcf9}
body.t-calque main .btn:hover{border-color:#35635E;background:#f7e9e4}
body.t-calque main .btn.pri,body.t-calque .modal .btn.pri{background:#35635E;border-color:#35635E;color:#fff}
body.t-calque .sgroup{letter-spacing:.14em}
@media(max-width:880px){body.t-calque aside{background:#f3f0e9}body.t-calque .burger{background:var(--bg);color:#35635E;border:1px solid var(--line)}}

body.t-beton{--bg:#cfd0cd;--card:#e3e4e1;--ink:#141414;--ink2:#38393a;--ink3:#65676a;--line:#a4a6a3;--line2:#c3c5c2}
body.t-beton .top{background:#141414}
body.t-beton .card,body.t-beton .kpi,body.t-beton .modal,body.t-beton .seg,body.t-beton .sitem,body.t-beton .entbtn,body.t-beton main .btn,body.t-beton .btn,body.t-beton .menu,body.t-beton input,body.t-beton select,body.t-beton #qsel{border-radius:0}
body.t-beton .card{border:1.5px solid #141414;box-shadow:5px 5px 0 rgba(20,20,20,.85)}
body.t-beton .kpi{border:1.5px solid #141414;box-shadow:3px 3px 0 rgba(20,20,20,.85)}
body.t-beton .modal{border:1.5px solid #141414}
body.t-beton .sitem.on,body.t-beton .entbtn.on{background:#141414;color:#ff4f00}
body.t-beton .seg button.on{background:#141414;color:#fff}
body.t-beton main .btn{border-color:#141414;color:#141414}
body.t-beton main .btn:hover{background:#141414;color:#fff;border-color:#141414}
body.t-beton main .btn.pri,body.t-beton .modal .btn.pri{background:#ff4f00;border-color:#141414;color:#141414;font-weight:700}
body.t-beton .sgroup{text-transform:uppercase;letter-spacing:.14em}
@media(max-width:880px){body.t-beton aside{background:#e6e6e3;border-right:1.5px solid #141414}body.t-beton .burger{background:#141414;color:#ff4f00}}

body.t-riviera{--bg:#f6f2e8;--card:#fffdf8;--ink:#2c3226;--ink2:#535a48;--ink3:#8b9080;--line:#e0dac6;--line2:#eee9da}
body.t-riviera .top{background:#3d4a33}
body.t-riviera .card{box-shadow:0 2px 12px rgba(61,74,51,.12)}
body.t-riviera .kpi{box-shadow:0 1px 8px rgba(61,74,51,.12)}
body.t-riviera .sitem.on,body.t-riviera .entbtn.on{background:#3d4a33;color:#fffdf8}
body.t-riviera .seg button.on{background:#3d4a33;color:#fff}
body.t-riviera .sitem:hover,body.t-riviera .entbtn:hover{background:#efe9d8}
body.t-riviera main .btn:hover{border-color:#c4562e;background:#f8e9df}
body.t-riviera main .btn.pri,body.t-riviera .modal .btn.pri{background:#c4562e;border-color:#c4562e;color:#fff}
@media(max-width:880px){body.t-riviera aside{background:#f1ecdd}body.t-riviera .burger{background:#3d4a33;color:#f6f2e8}}


/* ===== Thème Lagune ===== */
/* Un bleu-vert de fond de piscine méditerranéenne, tenu bas : le bandeau en pétrole profond,
   le papier légèrement verdi, un accent laiton pour ce qui appelle l'action. Sobre de près,
   reconnaissable de loin, ce qu'aucun de nos blancs cassés n'arrivait à être. */
body.t-lagune{--bg:#eaefee;--card:#fbfdfc;--ink:#16211f;--ink2:#3f4f4c;--ink3:#7d8d89;
 --line:#cfdcd8;--line2:#e2eae7;--ok:#2f7d63;--okbg:#dfeee7;--warn:#a6752c;--warnbg:#f6ecd8;
 --neut:#7d8d89;--neutbg:#e2eae7}
body.t-lagune header{background:#17332f}
body.t-lagune .sitem.on,body.t-lagune .sideents .enttab.on{background:#17332f;color:#eaefee}
body.t-lagune .sitem:hover,body.t-lagune .sideents .enttab:hover{background:#dfe8e5}
body.t-lagune .kbcol{background:#e0e9e6}
body.t-lagune .seg button.on{background:#17332f;color:#fff}
body.t-lagune .card,body.t-lagune .projcard,body.t-lagune .kbcard{box-shadow:0 2px 12px rgba(23,51,47,.09)}
body.t-lagune .btn.pri{background:#0e7a6b;border-color:#0e7a6b;color:#fff}
body.t-lagune .btn.pri:hover{background:#0b6559}
body.t-lagune .tcald.today{border-color:#0e7a6b}
@media(max-width:900px){body.t-lagune aside{background:#e4ece9}body.t-lagune .burger{background:#17332f;color:#eaefee}}

body.aethos .io select{background:transparent;border:1px solid rgba(255,255,255,.4);color:#fff;border-radius:8px}
body.t-calque .io select{color:var(--ink);border-color:rgba(38,36,31,.35);background:transparent}
body.t-calque .io select{border-radius:3px}

/* calendriers d'heures */
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.calgrid .wd{font-size:10.5px;color:var(--ink3);text-transform:uppercase;letter-spacing:.06em;text-align:center;padding:2px 0}
.calc{border:1px solid var(--line2);border-radius:8px;min-height:64px;padding:5px 7px;font-size:11.5px;background:var(--card);min-width:0;overflow:hidden}
.calc .d{font-size:10.5px;color:var(--ink3)}
.calc b{display:block;font-size:13px;margin:1px 0}
.calc .en{color:var(--ink2);font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.calc.off{background:transparent;border-color:transparent;min-height:0}
.calc.we{background:var(--hov)}
.cgrid{width:100%}
.cgrid td,.cgrid th{padding:5px 4px}
.cgrid td:first-child,.cgrid th:first-child{padding-left:17px}
.cgrid .cellin{min-width:0;font-size:11.5px;padding:2px 1px}
.cgrid .clab{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;font-size:12.5px}
.cgrid .clinks{font-size:10.5px;white-space:nowrap;color:var(--ink3)}
.heur{font-size:10.5px;color:var(--ink3);white-space:nowrap;font-weight:400}
.duo{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start}
@media(max-width:1150px){.duo{grid-template-columns:1fr}}
.chartbox svg{width:100%;height:auto;display:block}
.finwrap{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:14px;align-items:start;margin-bottom:16px}
.pair2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start;margin-bottom:16px}.pair2>.card{margin-bottom:0;height:100%}
@media(max-width:1100px){.pair2{grid-template-columns:1fr}}
.finside{display:grid;gap:10px;grid-auto-rows:1fr;align-self:stretch}
.finside .kpi{display:flex;flex-direction:column;justify-content:flex-start}
.finside .kpi .s{white-space:normal;font-size:13px;line-height:1.55}
.finside .stat .t{font-size:14px}
.finside .stat .t b{font-size:15px}
.finside .stat>.s{font-size:12.5px}
@media(max-width:1200px){.finwrap{grid-template-columns:1fr}.finside{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}}
.leaflet-tile-pane .osm-soft{filter:grayscale(.8) saturate(.9) contrast(.92) brightness(1.04)}
#map{position:relative;z-index:0;isolation:isolate}
tr.rowclk{cursor:pointer}tr.rowclk:hover>td{background:var(--hov)!important;box-shadow:inset 0 0 0 9999px rgba(0,0,0,.035)}

.rbar{display:flex;height:8px;border-radius:999px;background:var(--line2);overflow:hidden}
.rbar i{display:block;height:100%}

/* signalétique de chantier pour les titres, chasse fixe pour ce qui se compte */
h1,h2,h3,h4,.hd h2,.sgroup,.seg button{font-family:"Barlow Semi Condensed","Arial Narrow",Arial,system-ui,sans-serif;letter-spacing:.005em}
h1,h2,h3,h4{font-weight:600}
.kpi .v,.num,.ct,td.num,.su-num{font-family:"Chivo Mono",ui-monospace,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums}

/* ---------- les fiches en surimpression : factures reçues, consultants ----------
   Le reste du module vit dans des cartes ; une fiche est un formulaire, elle a
   besoin de ses propres colonnes et de ses propres respirations. */
.modal>.hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:0 0 12px;margin-bottom:14px;border-bottom:1px solid var(--line)}
.modal>.hd h2{font-size:17px;margin:0}
.modal>.hd .sub{font-size:12.5px;color:var(--ink3)}
.modal>.bd{display:block}
.modal>.bd>label,.modal .grid2 label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin:0 0 4px;font-weight:600}
.modal>.bd>input,.modal>.bd>select,.modal>.bd>textarea,.modal .grid2 input,.modal .grid2 select,.modal .grid2 textarea{width:100%;box-sizing:border-box}
.modal>.bd>textarea,.modal .grid2 textarea{font:inherit;font-size:13.5px;padding:6px 9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink);resize:vertical}
.modal>.bd>label{margin-top:14px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;align-items:start}
@media(max-width:620px){.grid2{grid-template-columns:1fr}}
.sechd{font-family:"Barlow Semi Condensed","Arial Narrow",Arial,sans-serif;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--ink3);margin:22px 0 10px;padding-bottom:5px;border-bottom:1px solid var(--line2)}
.modal .kpis{margin-bottom:12px;grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}
.modal .hint{font-size:12.5px;color:var(--ink2);line-height:1.5;margin:8px 0 0}
.modal .tbl{margin-top:2px}
.modal>.mact{margin-top:20px;padding-top:14px;border-top:1px solid var(--line);align-items:center}
/* pendant le chargement : un message plutôt qu'un tableau de bord à zéro, qui laissait croire
   que les chiffres étaient vides */
body.su-charge #main>*{visibility:hidden}
body.su-charge #main{position:relative;min-height:60vh}
body.su-charge #main::before{content:attr(data-charge);position:absolute;left:0;right:0;top:18vh;text-align:center;font-size:14px;color:var(--ink3,#8a8f93);visibility:visible;z-index:2}
body.su-charge #main::after{content:"";position:absolute;left:50%;top:calc(18vh - 38px);width:22px;height:22px;margin-left:-11px;border-radius:50%;border:2px solid var(--line,#e3e0d9);border-top-color:var(--ink2,#5b6166);animation:suTourne .8s linear infinite}
@keyframes suTourne{to{transform:rotate(360deg)}}
/* ---------- replier le menu latéral : le même geste et la même mémoire partout ---------- */
.sidefold{position:fixed;left:216px;top:50%;transform:translateY(-50%);z-index:21;width:16px;height:44px;border:1px solid var(--line);border-left:0;border-radius:0 8px 8px 0;background:var(--card);color:var(--ink3);font-size:9px;cursor:pointer;padding:0;display:none;align-items:center;justify-content:center;box-shadow:2px 0 8px rgba(0,0,0,.06);transition:left .2s}
.sidefold:hover{color:var(--ink);background:var(--hov,#EDE7DE)}
@media(min-width:901px){.sidefold{display:flex}body.sidefolded .sidefold{left:0}}
/* Replié, le menu disparaissait : pour atteindre une autre page il fallait le
   rouvrir. Il se réduit maintenant à une colonne d'icônes large comme un doigt,
   comme dans Maquette, Métré, Temps, Direction et Transformation. Les intitulés
   restent en infobulle, et les libellés s'effacent par la taille de police, car
   ils sont écrits en texte nu à côté de l'icône, sans balise à masquer. */
@media(min-width:901px){
 body.sidefolded aside{width:54px;min-width:54px;flex:0 0 54px;padding-left:7px;padding-right:7px;overflow-x:hidden}
 body.sidefolded aside a,body.sidefolded aside button.sitem,body.sidefolded aside button.nv{
  font-size:0;justify-content:center;text-align:center;padding:9px 0;gap:0;white-space:nowrap}
 body.sidefolded aside .ic{font-size:15px;margin:0;flex:none}
 body.sidefolded aside .lb{display:none}
 body.sidefolded aside .dot{margin:0;flex:none}
 /* les intitulés de section deviennent un filet, les compléments s'effacent */
 body.sidefolded aside .sgroup{height:1px;padding:0;margin:9px 5px 8px;background:var(--line);
  text-indent:-9999px;overflow:hidden;border:0}
 body.sidefolded aside .navmore,
 body.sidefolded aside .sfoot,body.sidefolded aside .sidefoot,
 body.sidefolded aside .soon,body.sidefolded aside .sitem.sub{display:none}
 /* le choix d'entité restait en toutes lettres dans le rail, « Toutes, Ate, De,
    Ma, Cr » les unes sous les autres : il se réduit à sa pastille de couleur,
    et le nom reste en infobulle. « Toutes » devient un rond vide. */
 body.sidefolded aside .entbtn{justify-content:center;padding:8px 0;gap:0;font-size:0;
  border-radius:9px;position:relative}
 body.sidefolded aside .entbtn .dot{width:11px;height:11px;flex:none}
 body.sidefolded aside .entbtn:not(.on){opacity:.75}
 body.sidefolded aside .entbtn.on .dot{box-shadow:0 0 0 2px var(--card)}
 body.sidefolded aside .entbtn:first-child:before{content:"";width:11px;height:11px;
  border-radius:50%;border:1.5px solid currentColor;display:block}
 body.sidefolded .sidefold{left:54px}
}
body.nosidebar .sidefold{display:none!important}
/* Le sélecteur de style de l'en-tête suivait la règle sombre même en thème clair : blanc sur blanc.
   Cette règle passe en dernier, donc elle gagne quel que soit l'ordre des blocs au-dessus. */
body.t-epure header select,body.t-epure header .btn,body.t-epure header .avbtn,
body.t-epure .top select,body.t-epure .top .btn,body.t-epure .top .avbtn{color:var(--ink);border-color:var(--line);background:var(--card)}
body.t-epure header select:hover,body.t-epure .top select:hover{background:var(--hov,#EDE7DE)}

/* Sur un téléphone, l'en-tête doit garder son menu : les sélecteurs cèdent la place. */
@media(max-width:700px){
 header{padding:10px 12px;gap:8px}
 header .wordmark small{display:none}
 header select{min-width:0}
 header #projsel{flex:1 1 70px;max-width:150px;min-width:0;text-overflow:ellipsis}
 header .spacer{flex:1 1 auto;min-width:0}
 header .menuwrap{flex:none}
}
@media(max-width:520px){
 header #thbtn{display:none}
 header #projsel{max-width:120px}
}

/* Appels d'offres (v1238) */
.aofil{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-end;padding:12px 17px 14px;border-bottom:1px solid var(--line);margin-bottom:12px}
.aofil label,.aofil .aogrp{display:flex;flex-direction:column;gap:4px;font-size:11.5px;color:var(--ink3);margin:0}
.aofil .aolab{font-size:11.5px;color:var(--ink3)}
.aofil input:not([type=checkbox]),.aofil select{height:32px;box-sizing:border-box;margin:0;padding:0 10px;font-size:13px}
.aofil label:first-child input{width:230px}
.aofil label input[placeholder]{min-width:150px}
.aofil select{min-width:110px}
.aofil .seg{height:32px;display:inline-flex;align-items:center}
.aofil .aocats{display:flex;gap:14px;align-items:center;height:32px}
.aofil label.aock{flex-direction:row;align-items:center;gap:6px;font-size:13px;color:var(--ink2);white-space:nowrap}
.badge.aoted{background:var(--bg2,#eef0f2);color:var(--ink2);border:1px solid var(--line);font-weight:600;white-space:nowrap}
.aofil label.aock input{width:auto;height:auto;margin:0;flex:none}
.aohd{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;padding:0 17px 10px}
.aofil2{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;flex:1 1 300px}
table.aotab td{vertical-align:top}
table.aotab td.aoobj{min-width:320px;max-width:620px;white-space:normal}
table.aotab td.aoobj>a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.35}
table.aotab td:nth-child(4){min-width:150px;max-width:220px;white-space:normal}
table.aotab td:nth-child(-n+3){white-space:nowrap}
.aopt .rowlink{text-transform:none;letter-spacing:0;margin-left:8px;font-weight:400;cursor:pointer}
.aochip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);border-radius:999px;padding:2px 4px 2px 10px;font-size:12.5px}
.aochip a{cursor:pointer}
.aochip .ico{border:0;background:none;cursor:pointer;color:var(--ink3);font-size:14px;line-height:1;padding:0 4px}
.aourg{color:var(--bad,#b3261e);font-weight:600}
.aoia{margin-top:3px}.aoia3{color:var(--ok)}.aoia0{color:var(--ink3)}
tr.aost-non td{opacity:.55}
@media (max-width:700px){.aofil input:not([type=checkbox]),.aofil select{min-width:0;width:100%}.aofil label{flex:1 1 140px}}
/* v1310 : factures reçues, ce qui est facturé sous le fournisseur, projet et validation depuis la liste */
.recobj{font-size:12.5px;color:var(--ink2,#5b5654);margin-top:3px;max-width:520px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
select.recsel{width:auto;max-width:220px;margin:0;padding:4px 8px;font-size:13px;border:1px solid var(--line2,#e6e3df);border-radius:7px;background:transparent}
select.recsel.vide{color:#96691e;border-color:#ecd9b8}
/* la pièce à côté de la fiche d'une facture reçue */
.recgrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:18px;align-items:start}
.recprev{order:2;position:sticky;top:0;height:min(78vh,1000px);border:1px solid var(--line2,#e6e3df);border-radius:10px;overflow:hidden;background:#f6f5f3;display:flex;align-items:center;justify-content:center}
.recprev iframe{width:100%;height:100%;border:0}.recprev img{max-width:100%;max-height:100%;object-fit:contain}
@media (max-width:1000px){.recgrid{grid-template-columns:1fr}.recprev{position:static;height:60vh}}
input.recch{width:100%}
/* v1312 : heures dans Temps et répartition d'une facture reçue entre projets */
.rechd{display:flex;align-items:center;gap:10px;margin:4px 0 6px;font-weight:600}.rechd input{width:auto;margin:0}
.rectab{margin:2px 0 6px}.rectab td{padding:5px 8px}.rectab tr.tot td{font-weight:700;border-top:1px solid var(--line2,#e6e3df)}
.rectab input{margin:0}
/* la fiche avec la pièce à côté : le formulaire n'est plus enfant direct de .modal, mêmes règles */
.recgrid>.bd{display:block}
.recgrid>.bd>label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink3);margin:14px 0 4px;font-weight:600}
.recgrid>.bd>input,.recgrid>.bd>select,.recgrid>.bd>textarea{width:100%;box-sizing:border-box;display:block}
.recgrid>.bd>textarea{font:inherit;font-size:13.5px;padding:6px 9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink);resize:vertical}
/* la liste des factures reçues, rangée : filtres en segments, état en pastille, l'action dans sa colonne */
.recbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px}
.recseg{display:inline-flex;background:var(--line2,#eeeceb);border-radius:999px;padding:3px;gap:2px;flex-wrap:wrap}
.recseg button{border:0;background:transparent;border-radius:999px;padding:5px 12px;font:inherit;font-size:13px;color:var(--ink2,#5b5654);cursor:pointer}
.recseg button b{font-weight:700;margin-left:3px}
.recseg button.on{background:var(--card,#fff);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.rectbl td{vertical-align:middle}
.rectbl td:nth-child(2){width:230px}.rectbl .recdue{white-space:nowrap;width:100px}
.rectbl td:nth-child(6){width:110px}.rectbl td.recact{width:120px;text-align:right}
.recqui{font-size:11.5px;color:var(--ink3);font-weight:400;margin-left:6px}
.recst{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap;background:#eeeceb;color:#5b5654}
.recst.st-a_valider{background:#fdf0e1;color:#a35a10}.recst.st-validee,.recst.st-a_payer{background:#e3edf8;color:#2f5f93}
.recst.st-payee{background:#dff3e8;color:#1e7a50}.recst.st-refusee{background:#fdebd3;color:#96691e}
select.recsel{width:100%;max-width:220px;border-color:transparent;background:transparent;padding:4px 6px}
select.recsel:hover,select.recsel:focus{border-color:var(--line2,#e6e3df);background:var(--card,#fff)}
select.recsel.vide{border-color:#ecd9b8;color:#96691e}
.recproj{display:inline-block;padding:4px 6px;font-size:13px}.recproj.vide{color:#96691e}
.recconf{border:1px solid #ecd9b8;background:#fffaf2;margin-bottom:12px}.recconf .mono{font-family:ui-monospace,monospace;letter-spacing:.05em}
.fgtog{display:inline-block;width:18px;flex:none;color:var(--ink3);cursor:pointer;text-decoration:none}.fgtog:hover{color:var(--ink)}
.fencadre{position:fixed;inset:0;z-index:300;background:rgba(20,24,26,.45);display:flex;align-items:center;justify-content:center;padding:3vh 3vw}
.fencadre .fencb{background:var(--card,#fff);border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:min(1100px,100%);height:100%;display:flex;flex-direction:column;overflow:hidden}
.fencadre .fench{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line)}
.fencadre iframe{flex:1;border:0;width:100%;background:#fff}
.recvent-l{display:flex;flex-wrap:wrap;gap:6px;padding:6px 0}
/* v1343 : appels d'offres, groupes et volet d'aperçu */
table.aotab tr.aogh td{background:var(--bg2,#f4f5f3);padding:9px 10px;border-top:1px solid var(--line)}
table.aotab tr.aogh a{cursor:pointer;font-size:13px}
table.aotab td.aoobj{cursor:pointer}
table.aotab tr.aosel td{background:color-mix(in srgb,var(--acc,#417b74) 9%,transparent)}
.card.aoouvert{margin-right:min(560px,44vw)}
.card.aoouvert table.aotab td.aoobj{min-width:220px}
.card.aoouvert table.aotab th:nth-child(6),.card.aoouvert table.aotab td:nth-child(6){display:none}
.aopan{position:fixed;top:calc(var(--hdrh,60px) + 10px);right:10px;bottom:10px;width:min(540px,calc(100vw - 20px));background:var(--card,#fff);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 40px rgba(20,30,30,.16);display:flex;flex-direction:column;z-index:2500}
.aopan-hd,.aopan-ft{display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid var(--line)}
.aopan-ft{border-bottom:0;border-top:1px solid var(--line);flex-wrap:wrap}
.aopan-hd .ico{border:0;background:none;cursor:pointer;font-size:16px;color:var(--ink2);padding:2px 7px;border-radius:6px}
.aopan-hd .ico:hover{background:var(--bg2,#f1f2f0)}
.aopan-bd{overflow:auto;padding:14px 18px 18px;flex:1}
.aopan-bd h3{margin:0 0 4px;font-size:17px;line-height:1.3;text-wrap:balance}
.aopfs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}
.aopf{border:1px solid var(--line);border-radius:8px;padding:7px 10px;display:flex;flex-direction:column;gap:2px;min-width:0}
.aopf>span{font-size:11px;color:var(--ink3);text-transform:uppercase;letter-spacing:.04em}
.aopf b{font-weight:600;font-size:13px;overflow-wrap:anywhere}
.aopsec{margin:14px 0 0}
.aopt{font-size:11px;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px;cursor:default}
details.aopsec summary{cursor:pointer}
.aorec{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:5px;font-size:13.5px;line-height:1.45}
.aorec li.aofit{list-style:none;margin-left:-18px;margin-top:4px;padding:7px 10px;border-radius:8px;background:color-mix(in srgb,var(--acc,#417b74) 10%,transparent);font-weight:500}
.aodesc{font-size:13px;line-height:1.5;white-space:pre-line;color:var(--ink2)}
.aolst{margin:0;padding-left:18px;font-size:12.5px;line-height:1.45;color:var(--ink2);display:flex;flex-direction:column;gap:4px}
@media (max-width:900px){.card.aoouvert{margin-right:0}}
.aotypes{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:0 17px 12px}
.aotypes .aolab{font-size:11.5px;color:var(--ink3);margin-right:4px}
.aotype{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:4px 11px 4px 9px;font-size:12.5px;color:var(--ink3);cursor:pointer;margin:0;user-select:none}
.aotype input{width:auto;height:auto;margin:0}
.aotype.on{color:var(--ink);border-color:color-mix(in srgb,var(--acc,#417b74) 45%,var(--line));background:color-mix(in srgb,var(--acc,#417b74) 7%,transparent)}
.aotype.vide{opacity:.55}
.cvirtrow td{background:color-mix(in srgb,var(--acc,#417b74) 5%,transparent)}
.cvirt{font-size:12.5px}
.cvirtdet td{font-size:12px;color:var(--ink2);background:color-mix(in srgb,var(--acc,#417b74) 3%,transparent)}
.cvirtdet td:first-child .clab{padding-left:34px;font-size:12px}
.cvprov{font-size:10.5px;color:var(--ink3);font-style:italic}
