/* Compta Manager — design v2 (sidebar sombre, contenu clair sur cartes) */
:root{
  --ground:#F4F6F2; --surface:#FFFFFF; --line:#E4E8E0; --line2:#EFF2EC;
  --ink:#1C2621; --muted:#65706A;
  --side:#152A22; --side-ink:#E7EFE9; --side-muted:#8FA69A; --side-hover:#1E3A2F;
  --accent:#1F5E4B; --accent-soft:#E3EFE8;
  --ok:#2F7D53; --ok-soft:#E1F2E7;
  --warn:#B07A1F; --warn-soft:#F7EDDA;
  --danger:#B54530; --danger-soft:#F9E8E3;
  --perso:#6B4FA3; --perso-soft:#EDE7F7;
  --r:14px; --r-s:9px;
  /* alias héritage (styles inline) */
  --found:var(--warn); --found-soft:var(--warn-soft);
  --sent:var(--ok); --sent-soft:var(--ok-soft);
  --miss:var(--danger); --miss-soft:var(--danger-soft);
  --ink2:var(--muted); --panel:var(--surface); --panel2:var(--line2); --paper:var(--ground);
  --shadow:0 1px 2px rgba(18,26,22,.05), 0 1px 6px rgba(18,26,22,.04);
  --shadow-up:0 6px 18px rgba(18,26,22,.10);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--ground); color:var(--ink);
  font:14.5px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  -webkit-font-smoothing:antialiased;}
.num{font-variant-numeric:tabular-nums; font-feature-settings:"tnum";}

/* ---------- layout ---------- */
.layout{display:flex; min-height:100vh;}
aside.side{width:242px; flex:0 0 242px; background:var(--side); color:var(--side-ink);
  display:flex; flex-direction:column; position:sticky; top:0; height:100vh; overflow-y:auto;}
.brand{padding:22px 20px 14px; display:flex; align-items:center; gap:10px;}
.brand .logo{width:34px; height:34px; border-radius:10px; background:var(--accent);
  display:grid; place-items:center; font-size:17px;}
.brand b{font-size:15px; letter-spacing:.02em;}
.brand .sub{font-size:10.5px; color:var(--side-muted); display:block; margin-top:1px;}
nav.tabs{display:flex; flex-direction:column; gap:2px; padding:8px 12px; flex:1;}
nav.tabs .navlbl{font-size:10px; letter-spacing:.09em; text-transform:uppercase; color:var(--side-muted);
  padding:14px 10px 5px;}
nav.tabs button{appearance:none; border:none; background:none; color:var(--side-ink);
  padding:8px 11px; border-radius:9px; cursor:pointer; font-size:13.5px; font-weight:500;
  text-align:left; display:block; width:100%; transition:background .12s;}
nav.tabs button:hover{background:var(--side-hover);}
nav.tabs button.on{background:var(--accent); font-weight:650;}
nav.tabs button .mini{display:block; height:3px; border-radius:2px; background:rgba(255,255,255,.10);
  margin-top:6px; overflow:hidden;}
nav.tabs button .mini.zero{display:none;}
nav.tabs button .mini i{display:block; height:100%; background:#5FBF8F;}
nav.tabs button:focus-visible{outline:2px solid #5FBF8F; outline-offset:1px;}
.side-foot{padding:14px 12px 18px; display:flex; flex-direction:column; gap:6px; border-top:1px solid rgba(255,255,255,.08);}
.side-foot a,.side-foot button{appearance:none; border:none; background:none; color:var(--side-muted);
  font-size:12.5px; padding:6px 11px; border-radius:8px; cursor:pointer; text-align:left; text-decoration:none;}
.side-foot a:hover,.side-foot button:hover{background:var(--side-hover); color:var(--side-ink);}

.content{flex:1; min-width:0;}
main{padding:26px 32px 90px; max-width:1180px; margin:0 auto;}
.pagehead{display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin-bottom:4px;}
.pagehead h1{font-size:21px; font-weight:750; letter-spacing:-.015em; margin:0;}
.pagehead .sub{color:var(--muted); font-size:12.5px;}

/* ---------- cartes ---------- */
.cards{display:grid; grid-template-columns:repeat(auto-fill,minmax(252px,1fr)); gap:14px;}
.card{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  padding:16px 18px; cursor:pointer; box-shadow:var(--shadow); transition:box-shadow .15s, transform .15s;}
.card:hover{box-shadow:var(--shadow-up); transform:translateY(-1px);}
.card h3{margin:0 0 1px; font-size:14.5px; font-weight:650;}
.card .bank{color:var(--muted); font-size:11.5px;}
.card .big{font-size:26px; font-weight:750; margin-top:10px; letter-spacing:-.02em;}
.card .lbl{font-size:11.5px; color:var(--muted);}
.bar{height:5px; background:var(--line2); border-radius:3px; overflow:hidden; margin-top:12px; display:flex;}
.bar .s{background:var(--ok); height:100%;}
.bar .f{background:var(--warn); height:100%;}

/* ---------- alertes / sections ---------- */
.alert{background:var(--danger-soft); border:1px solid #EBD0C7; border-radius:var(--r-s);
  padding:11px 15px; margin:14px 0; font-size:13.5px;}
.alert.ok{background:var(--ok-soft); border-color:#CBE6D3;}
.alert.info{background:var(--accent-soft); border-color:#CDDFD5;}
h2.sec{font-size:16px; font-weight:700; letter-spacing:-.01em; margin:28px 0 12px;
  display:flex; align-items:center; gap:8px; flex-wrap:wrap; text-wrap:balance;}

/* ---------- filtres / chips ---------- */
.toolbar{display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin:14px 0;}
.chip{border:1px solid transparent; background:#E9EDE6; border-radius:99px; padding:5.5px 13px;
  font-size:12.5px; font-weight:550; cursor:pointer; color:var(--ink); transition:background .12s;}
.chip:hover{background:#DFE5DC;}
.chip.on{background:var(--ink); color:#fff;}
.chip:focus-visible{outline:2px solid var(--accent); outline-offset:1px;}
input[type=search]{border:1px solid var(--line); border-radius:99px; padding:7px 14px; font-size:13.5px;
  min-width:200px; background:var(--surface); color:var(--ink); box-shadow:var(--shadow);}
input[type=search]:focus{outline:2px solid var(--accent); border-color:transparent;}

/* ---------- groupes / tables ---------- */
.grp{background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
  margin-bottom:12px; overflow:hidden; box-shadow:var(--shadow);}
.grp>summary{list-style:none; display:flex; align-items:center; gap:10px; padding:12px 16px; cursor:pointer; flex-wrap:wrap;}
.grp>summary::-webkit-details-marker{display:none}
.grp>summary::before{content:"›"; color:var(--muted); font-size:15px; transition:transform .15s; margin-right:-2px;}
.grp[open]>summary::before{transform:rotate(90deg);}
.grp>summary:hover{background:#FBFCFA;}
.grp .gname{font-weight:650; font-size:13.5px;}
.grp .gmeta{color:var(--muted); font-size:12px;}
.grp .gsum{margin-left:auto; display:flex; gap:6px; align-items:center;}
.gbar{flex:0 0 84px; height:4px; background:var(--line2); border-radius:2px; overflow:hidden; display:inline-block;}
.gbar i{display:block; height:100%; background:var(--ok);}
.gbtn{border:1px solid var(--line); background:var(--surface); border-radius:7px; font-size:11px;
  padding:3.5px 9px; cursor:pointer; color:var(--muted); transition:all .12s;}
.gbtn:hover{border-color:var(--accent); color:var(--accent); background:var(--accent-soft);}
table.tx{width:100%; border-collapse:collapse; font-size:13px;}
table.tx td{padding:8px 12px; border-top:1px solid var(--line2); vertical-align:top;}
table.tx tr:hover td{background:#FAFBF8;}
td.dt{white-space:nowrap; color:var(--muted); width:76px;}
td.amt{text-align:right; white-space:nowrap; font-weight:650; width:108px;}
td.amt.pos{color:var(--ok);}
td.st{white-space:nowrap; width:236px; text-align:right;}
.sup{font-weight:600;}
.dtl{color:var(--muted); font-size:11.5px; margin-top:2px; display:none; word-break:break-word;}
tr.open .dtl{display:block;}
tr.hasdoc td{background:#F3F9F4;}
tr.hasdoc td:first-child{box-shadow:inset 3px 0 0 var(--ok);}
tr.droptarget td{background:var(--accent-soft) !important; box-shadow:inset 0 0 0 2px var(--accent);}

/* ---------- badges / statuts ---------- */
.badge{display:inline-block; font-size:10px; padding:2px 8px; border-radius:99px; font-weight:650;
  letter-spacing:.03em; vertical-align:1px; white-space:nowrap;}
.since{display:block; font-size:10px; color:var(--muted); margin-top:2px;}
.badge.clos{background:var(--danger-soft); color:var(--danger);}
.badge.card{background:var(--line2); color:var(--muted);}
.badge.dep{background:var(--ok-soft); color:var(--ok);}
.stbtn{border:1px solid var(--line); border-radius:99px; background:var(--surface); font-size:11px;
  padding:3.5px 10px; cursor:pointer; color:var(--muted); font-weight:550;}
.stbtn.f{background:var(--warn-soft); color:var(--warn); border-color:transparent; font-weight:650;}
.stbtn.e{background:var(--ok-soft); color:var(--ok); border-color:transparent; font-weight:650;}
.stbtn.i{background:var(--danger-soft); color:var(--danger); border-color:transparent; font-weight:650;}
.pbtn,.attbtn{border:1px solid var(--line); border-radius:99px; background:var(--surface); font-size:11px;
  padding:3.5px 9px; cursor:pointer; color:var(--muted); margin-left:4px;}
.pbtn.on{background:var(--perso-soft); color:var(--perso); border-color:transparent; font-weight:650;}
.attbtn.has{background:var(--accent-soft); color:var(--accent); border-color:transparent; font-weight:650;}
.unlk{border:none; background:none; color:var(--muted); cursor:pointer; font-size:11px; padding:0 2px;}
.unlk:hover{color:var(--danger);}
.count-pill{background:var(--accent-soft); color:var(--accent); font-weight:700; border-radius:99px;
  padding:2px 10px; font-size:11.5px;}

/* ---------- loyers : lignes locataires + pastilles annuelles ---------- */
.units{padding:2px 0 10px;}
.urow{display:grid; grid-template-columns:minmax(190px,1.3fr) 92px 296px 118px 72px;
  gap:16px; align-items:center; padding:12px 18px; border-top:1px solid var(--line2);}
.urow:hover{background:#FBFCFA;}
.urow.uhead{border-top:none; padding-top:8px; padding-bottom:6px; font-size:10px; letter-spacing:.06em;
  text-transform:uppercase; color:var(--muted); font-weight:650;
  position:sticky; top:46px; z-index:25; background:var(--surface);
  box-shadow:0 1px 0 var(--line);}
.urow.uhead .ystrip i{font-size:10px; font-weight:750; color:var(--ink);}
.urow.uhead .ystrip i.curm{color:var(--accent);}
.urow.uhead:hover{background:none;}
.urow.former{opacity:.55;}
.urow.late{box-shadow:inset 3px 0 0 var(--danger);}
.urow.vacant{background:#FBF6F4;}
.uname{font-weight:700; font-size:13px;}
/* le lot porte la couleur de son immeuble (volets) — la structure est colorée, la personne en encre */
.bsec .uname{color:var(--ba);}
/* survol d'une ligne : la teinte pâle des volets de SON immeuble — on sait toujours où on est */
.bsec .urow:hover{background:var(--bh);}
.ulink{cursor:pointer;}
.ulink:hover{text-decoration:underline dotted; text-underline-offset:3px;}
.tname{font-size:13.5px; margin-top:1px;}
.tname a{color:inherit; text-decoration:none; font-weight:650;}
.tname a:hover{color:var(--accent);}
.tnote{font-size:10.5px; color:var(--warn); margin-top:2px;}
.notetip{color:var(--muted); cursor:help; border-bottom:1px dotted var(--line);}
/* fiche du mois : bandeau d'état + paiements en lignes claires, brut replié */
.cm-status{display:flex; gap:12px; align-items:center; margin:14px 0 4px; padding:12px 14px; border-radius:12px;}
.cm-status .cm-ico{font-size:19px; font-weight:800; line-height:1;}
.cm-status b{font-size:13.5px;}
.cm-status .cm-sub{font-size:12px; color:var(--muted); font-weight:500; margin-top:1px;}
.cm-status.s-ok{background:var(--ok-soft);} .cm-status.s-ok .cm-ico{color:var(--ok);}
.cm-status.s-cafp{background:#EDF6EF;} .cm-status.s-cafp .cm-ico{color:#4F9E6B;}
.cm-status.s-warn{background:var(--warn-soft);} .cm-status.s-warn .cm-ico{color:var(--warn);}
.cm-status.s-danger{background:var(--danger-soft);} .cm-status.s-danger .cm-ico{color:var(--danger);}
.cm-status.s-muted{background:var(--line2);} .cm-status.s-muted .cm-ico{color:var(--muted);}
.cm-pay{display:grid; grid-template-columns:44px 1fr auto minmax(130px,auto); gap:10px; align-items:center;
  padding:9px 2px; border-top:1px solid var(--line2); font-size:13px;}
.cm-pay .cm-d{color:var(--muted); font-weight:650; font-size:12px;}
.cm-pay .cm-a{font-size:13.5px;}
.cm-note{font-size:12px; color:var(--perso); margin-top:10px;}
.cm-tech{margin-top:14px;}
.cm-tech summary{cursor:pointer; font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; font-weight:650; color:var(--muted);}
.cm-tech > div{margin-top:8px; font-size:12px; color:var(--ink2);}
.cm-tech code{display:block; margin-top:3px; white-space:pre-wrap;}
.urent{text-align:right; font-weight:700; font-size:13.5px;}
.ystrip{display:grid; grid-template-columns:repeat(12,1fr); gap:4px; align-items:center;}
.ystrip i{font-style:normal; text-align:center; font-size:9px; color:var(--muted);}
.ystrip i.curm{color:var(--accent); font-weight:800;}
.dot{display:inline-block; width:100%; height:22px; border-radius:7px; background:var(--line2); cursor:pointer;
  transition:transform .1s;}
.dot:hover{transform:scale(1.16);}
.dot.d-ok{background:var(--ok);}
.dot.d-caf{background:var(--ok); box-shadow:inset 0 0 0 2px #fff, inset 0 0 0 3.5px var(--ok);}
.dot.d-cafp{background:#8FC7A3;}
.dot.d-part{background:var(--warn);}
.dot.d-miss{background:var(--danger);}
.dot.d-unk{background:repeating-linear-gradient(45deg,#EDEFEA,#EDEFEA 3px,#E0E4DD 3px,#E0E4DD 6px); }
.dot.d-na{cursor:default; box-shadow:inset 0 0 0 1.2px #D6DBD3;
  background:linear-gradient(135deg, transparent 44%, #DEE3DB 44%, #DEE3DB 56%, transparent 56%);}
/* mois à venir : aucune information → un point discret mais toujours visible */
.dot.d-fut{background:transparent; position:relative;}
.dot.d-fut::after{content:""; position:absolute; top:50%; left:50%; width:6.5px; height:6.5px;
  border-radius:50%; background:#C3CAC1; transform:translate(-50%,-50%);}
.mcell.d-fut{background:var(--line2); opacity:.5;}
.vmin{opacity:.5; font-size:11.5px; cursor:help; vertical-align:1px;}
.dot.curm{outline:2px solid var(--accent); outline-offset:1.5px;}
.badge.vproc{background:var(--warn-soft); color:var(--warn);}
.badge.vcov{background:var(--accent-soft); color:var(--accent);}
.badge.vrisk{background:var(--danger); color:#fff;}
.badge.vnone{background:var(--line2); color:var(--muted); border:1px dashed var(--line);}
.balchip{display:inline-block; padding:3px 11px; border-radius:99px; font-weight:750; font-size:12px;}
.balok{background:var(--ok-soft); color:var(--ok);}
.balko{background:var(--danger-soft); color:var(--danger);}
.balquiet{color:var(--ok); font-weight:650; font-size:12.5px;}
.ubal{text-align:right;}
.uacts{text-align:right; display:flex; gap:6px; justify-content:flex-end;}
/* actions secondaires : présentes mais silencieuses, révélées au survol de la ligne */
.hoveracts{opacity:0; transition:opacity .15s;}
.urow:hover .hoveracts, summary:hover .hoveracts, .cm-pay:hover .hoveracts{opacity:1;}
@media (hover:none){.hoveracts{opacity:.65;}}
/* chips Visale : informatives et calmes — la couleur seulement quand elle alerte */
.vchip{display:inline-block; font-size:10.5px; font-weight:650; padding:2px 9px; border-radius:99px;
  border:1px solid var(--line); color:var(--muted); vertical-align:1px;}
.vchip.vproc{border-color:transparent; background:var(--warn-soft); color:var(--warn);}
.vchip.vcov{border-color:transparent; background:var(--accent-soft); color:var(--accent);}
.vchip.vnone{border-style:dashed;}
.vchip.vrisk{border-color:transparent; background:var(--danger); color:#fff;}
/* jauge d'encaissement du mois dans l'en-tête d'immeuble */
.bscore{display:inline-block; width:56px; height:5px; border-radius:3px; background:var(--line2);
  overflow:hidden; vertical-align:2px;}
.bscore i{display:block; height:100%; border-radius:3px; background:var(--ok);}
.bscore i.mid{background:var(--warn);}
.bscore i.low{background:var(--danger);}
.bscore-t{font-size:11.5px; font-weight:700; color:var(--ink);}
.bscore-t em{font-style:normal; font-weight:500; color:var(--muted);}
.legend .dot{width:16px; height:16px; flex:none;}
@media (max-width:900px){
  .urow{grid-template-columns:1fr 80px; grid-template-areas:none;}
  .ystrip{grid-column:1/-1;}
  .urow.uhead .ystrip{display:none;}
}

/* ---------- loyers ---------- */
.rentwrap{overflow-x:auto; border-radius:var(--r); box-shadow:var(--shadow); border:1px solid var(--line); background:var(--surface);}
table.rent{border-collapse:collapse; font-size:12.5px; min-width:900px; width:100%;}
table.rent th,table.rent td{padding:7px 8px; border-bottom:1px solid var(--line2); text-align:center; border-right:1px solid #F5F7F3;}
table.rent td.cell{position:relative; min-width:76px; cursor:pointer; font-variant-numeric:tabular-nums; padding:8px 6px 10px;}
td.cell .cv{font-weight:700; font-size:12.5px; line-height:1.2;}
td.cell .cs{font-size:9px; line-height:1.25; opacity:.85; margin-top:1px;}
td.cell .cb{position:absolute; left:0; bottom:0; height:3px; background:currentColor; opacity:.45; border-radius:0 2px 0 0;}
td.cell.c-ok{background:var(--ok-soft); color:var(--ok);}
td.cell.c-caf{background:var(--ok-soft); color:var(--ok); box-shadow:inset 0 0 0 1.5px #9CCBAD;}
td.cell.c-cafp{background:#EDF6EF; color:var(--ok);}
td.cell.c-cafp .cs{color:var(--perso);}
td.cell.c-part{background:var(--warn-soft); color:var(--warn);}
td.cell.c-miss{background:var(--danger-soft); color:var(--danger); font-weight:800;}
td.cell.c-na{color:#C2C9C2; cursor:default;}
td.cell.c-unk{background:repeating-linear-gradient(45deg,#FAFBF8,#FAFBF8 5px,#F3F5F0 5px,#F3F5F0 10px);}
td.cell.curm, table.rent th.curm{box-shadow:inset 0 0 0 2px var(--accent-soft);}
table.rent th.curm{color:var(--accent);}
.legend{display:flex; gap:14px; flex-wrap:wrap; align-items:center; font-size:11.5px; color:var(--muted); margin:-4px 0 14px;}
.legend .lg{display:inline-block; padding:3px 9px; border-radius:6px; font-weight:700; font-size:11px;}
.legend .lg i{font-style:normal; font-size:9px; display:block;}
.legend .c-ok{background:var(--ok-soft); color:var(--ok);}
.legend .c-caf{background:var(--ok-soft); color:var(--ok); box-shadow:inset 0 0 0 1.5px #9CCBAD;}
.legend .c-cafp{background:#EDF6EF; color:var(--ok);}
.legend .c-part{background:var(--warn-soft); color:var(--warn);}
.legend .c-miss{background:var(--danger-soft); color:var(--danger);}
table.rent th{background:#FAFBF8; font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); position:sticky; top:0;}
table.rent td.payer{text-align:left; font-weight:650; white-space:nowrap;}
table.rent td.tenant{text-align:left; min-width:170px;}
table.rent td{vertical-align:middle;}
select{border:1px solid var(--line); border-radius:8px; padding:5px 8px; font-size:12px; background:#fff; color:var(--ink);}
td.paid{background:var(--ok-soft); color:var(--ok); font-weight:650;}
td.nopaid{background:var(--danger-soft); color:var(--danger); font-weight:750;}
td.na{color:#C2C9C2;}
td.cafcell{background:#EAF4EC; color:var(--ok); font-weight:650; cursor:pointer; box-shadow:inset 2px 0 0 #BEDCC6;}
td.cafcell .cafsub{font-size:8.5px; font-weight:550; color:var(--perso);}

/* ---------- boutons / formulaires ---------- */
.btn{border:none; background:var(--accent); color:#fff; border-radius:10px; padding:9px 16px;
  font-size:13px; cursor:pointer; font-weight:650; box-shadow:var(--shadow); transition:filter .12s;}
.btn:hover{filter:brightness(1.08);}
.btn.ghost{background:var(--surface); color:var(--accent); border:1px solid var(--line);}
.btn.ghost:hover{background:var(--accent-soft); filter:none;}
.btn:focus-visible{outline:2px solid var(--ink); outline-offset:1px;}
form.perso{display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:8px;
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r); padding:16px; margin:12px 0; box-shadow:var(--shadow);}
form.perso input,form.perso select,.upzone select,.upzone input{border:1px solid var(--line); border-radius:8px;
  padding:7.5px 10px; font-size:13px; background:#fff; color:var(--ink);}
form.perso input:focus,form.perso select:focus{outline:2px solid var(--accent); border-color:transparent;}
form.perso label{font-size:10.5px; color:var(--muted); display:flex; flex-direction:column; gap:2px;}

/* ---------- zones de dépôt ---------- */
.upzone{border:1.5px dashed #C9D2C8; border-radius:var(--r); background:var(--surface);
  padding:26px; text-align:center; margin:14px 0; transition:all .15s;}
.upzone.drag{border-color:var(--accent); background:var(--accent-soft); transform:scale(1.005);}
.upzone.slim{padding:14px 18px; text-align:left; display:flex; align-items:center; gap:13px; flex-wrap:wrap;}
.upzone.slim .hint{color:var(--muted); font-size:12px;}
.upzone .row{display:flex; gap:10px; justify-content:center; flex-wrap:wrap; margin-top:12px;}
#soc-status ul{margin:8px 0 0; padding:10px 14px; list-style:none; text-align:left;
  background:var(--ground); border-radius:10px; max-height:170px; overflow-y:auto;}
#soc-status li{padding:2.5px 0; border-bottom:1px solid var(--line2); font-size:12.5px;}
#soc-status li:last-child{border-bottom:none;}
#soc-status .ok,.uplsum .ok{color:var(--ok);}
#soc-status .warn,.uplsum .warn{color:var(--warn);}
#soc-status .ko{color:var(--muted);}
.uplsum{font-size:13px; display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:4px;}

/* ---------- documents ---------- */
.doclist{width:100%; border-collapse:collapse; font-size:13px; background:var(--surface);}
.doclist td{padding:9px 12px; border-top:1px solid var(--line2);}
.cloud{font-size:11px; color:var(--accent);}

/* ---------- login ---------- */
#login{max-width:360px; margin:16vh auto; background:var(--surface); border:1px solid var(--line);
  border-radius:18px; padding:32px; box-shadow:var(--shadow-up); text-align:center;}
#login .logo{width:52px; height:52px; border-radius:15px; background:var(--accent); color:#fff;
  display:grid; place-items:center; font-size:25px; margin:0 auto 14px;}
#login h1{margin:0 0 4px; font-size:19px; font-weight:750;}
#login p{color:var(--muted); font-size:12.5px; margin:0 0 18px;}
#login input{width:100%; border:1px solid var(--line); border-radius:10px; padding:11px 13px;
  font-size:15px; margin-bottom:12px; text-align:center;}
#login input:focus{outline:2px solid var(--accent); border-color:transparent;}
#login .err{color:var(--danger); font-size:12.5px; min-height:18px; margin-bottom:6px;}
.footer-note{color:var(--muted); font-size:11.5px; margin-top:34px; border-top:1px solid var(--line); padding-top:12px;}
.spin{color:var(--muted); padding:60px; text-align:center;}

.analyse>summary .gname{color:var(--warn);}
.checklist{margin:0; padding:4px 18px 12px 22px; font-size:13px;}
.checklist li{padding:5px 0; border-bottom:1px solid var(--line2); line-height:1.5;}
.checklist li:last-child{border-bottom:none;}

/* ---------- sous-navigation Loyers ---------- */
.subnav{position:sticky; top:0; z-index:40; background:var(--ground); padding:8px 0 10px;
  display:flex; gap:8px; align-items:center; border-bottom:1px solid var(--line); margin-bottom:6px;}
.subnav .chip b{margin-left:3px;}
.bsec>summary{padding:14px 16px;}
/* identité d'immeuble : couleur des volets en touche (liseré + échantillon + teinte 4 %) */
.bsec{border-top:3px solid var(--ba);}
.bsec>summary{background:var(--bt);}
.bsec>summary:hover{background:var(--bt);}
.bswatch{width:11px; height:11px; border-radius:3.5px; background:var(--ba); flex:none;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);}
.bmini{display:flex; align-items:center; flex:none;}
.bid{display:flex; flex-direction:column; gap:1px; min-width:0;}
.baddr{color:var(--muted); font-size:11.5px; font-weight:500;}
.bstats{margin-left:auto; display:flex; flex-direction:column; align-items:flex-end; gap:2px;}
.bgauge{display:flex; align-items:center; gap:7px;}
.bstat{font-size:11.5px; color:var(--muted); font-weight:600;}
.bstat.barr{color:var(--danger);}
/* fiche locataire */
.tm-sub{color:var(--muted); font-size:12.5px; margin-top:4px;}
.tm-contacts{display:flex; gap:8px; flex-wrap:wrap; margin:12px 0 2px;}
.tm-chip{display:inline-flex; align-items:center; gap:5px; font-size:12.5px; font-weight:600;
  padding:6px 12px; border-radius:99px; border:1px solid var(--line); color:var(--ink);
  text-decoration:none; background:var(--surface);}
.tm-chip:hover{border-color:var(--accent); color:var(--accent);}
.tm-chip.off{color:var(--muted); border-style:dashed; font-weight:500;}
.tm-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:10px; margin-top:12px;}
.tblk{background:var(--ground); border-radius:10px; padding:9px 12px;}
.tblk h4{margin:0 0 3px; font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--muted); font-weight:650;}
.tblk div{font-size:13px;}
.tm-quits{display:flex; gap:8px; flex-wrap:wrap; margin-top:2px;}
.qpair{display:inline-flex; gap:2px;}
/* fiche locataire : sections secondaires repliées, état résumé sur la ligne de titre */
.tmsec{border-top:1px solid var(--line2); margin-top:12px; padding-top:2px;}
.tmsec>summary{list-style:none; cursor:pointer; display:flex; align-items:center; gap:8px;
  font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; font-weight:650;
  color:var(--muted); padding:9px 0 7px;}
.tmsec>summary::-webkit-details-marker{display:none}
.tmsec>summary::before{content:"›"; font-size:13px; transition:transform .15s;}
.tmsec[open]>summary::before{transform:rotate(90deg);}
.tmsec>summary:hover{color:var(--ink);}
.vdoss{display:flex; flex-direction:column;}
.vdrow{display:flex; align-items:center; gap:10px; padding:8px 2px; border-top:1px solid var(--line2); font-size:13px; flex-wrap:wrap;}
.vdrow:first-child{border-top:none;}
.vdrow .vdacts{margin-left:auto; display:flex; gap:6px; align-items:center; flex-wrap:wrap;}
.tm-acts{display:flex; gap:8px; align-items:center; margin-top:14px; padding-top:12px;
  border-top:1px solid var(--line2);}
/* formulaire locataire : l'édition reprend les cartes champ de la fiche (même langage) */
.tform2{display:grid; grid-template-columns:repeat(6,1fr); gap:9px; margin-top:4px;}
.tform2 .cm-sec{margin:10px 0 0;}
.fcard{background:var(--ground); border-radius:10px; padding:8px 12px 7px; border:1.5px solid transparent;
  transition:border-color .12s, background .12s;}
.fcard:focus-within{border-color:var(--accent); background:var(--surface);}
.fcard h5{margin:0 0 2px; font-size:9.5px; letter-spacing:.08em; text-transform:uppercase;
  color:var(--muted); font-weight:650; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.fcard input,.fcard select{border:none; background:transparent; font-size:13.5px; width:100%;
  padding:1px 0; color:var(--ink); font-weight:600; font-family:inherit;}
.fcard input:focus,.fcard select:focus{outline:none;}
.fcard input[type=number]::-webkit-outer-spin-button,.fcard input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none; margin:0;}
.fcard input[type=date]{cursor:pointer;}
.fcard input[type=date]::-webkit-calendar-picker-indicator{opacity:.5; cursor:pointer;}
.fcard.w2{grid-column:span 2}.fcard.w3{grid-column:span 3}.fcard.w4{grid-column:span 4}.fcard.w6{grid-column:span 6}
.tform-acts{grid-column:1/-1; display:flex; gap:8px; margin-top:10px; padding-top:12px; border-top:1px solid var(--line2);}
@media (max-width:760px){.fcard.w2{grid-column:span 3}.fcard.w4{grid-column:span 6}}
.bsec .urow.uhead{background:linear-gradient(var(--bt),var(--bt)), var(--surface);}
/* badges d'état neutres (PARTI, VACANT…) : contour fin, sans aplat */
.urow .badge.card, .urow .badge.clos{background:transparent; border:1px solid var(--line);
  color:var(--muted); font-weight:650;}
.grp.bsec{overflow:visible;}

/* ---------- captures & validation ---------- */
.capcard{display:flex; align-items:center; gap:12px; flex-wrap:wrap; background:var(--surface);
  border:1px solid var(--line); border-radius:12px; padding:10px 14px; margin-bottom:8px; box-shadow:var(--shadow); font-size:13px;}
.capico{font-size:20px;}
.capmeta{font-size:11px; color:var(--muted);}
.capacts{margin-left:auto; display:flex; gap:5px; align-items:center;}
tr.prow{cursor:pointer;}
tr.prow.pknown td{background:#F5FAF6;}
.ptitle{font-weight:650; font-size:13.5px; display:flex; align-items:center; gap:7px; flex-wrap:wrap;}
.pdate{color:var(--muted); font-weight:500; font-size:11.5px; display:inline-flex; align-items:center; gap:5px;}
.pdate input{border:1px solid var(--line); border-radius:7px; padding:2.5px 6px; font-size:11.5px; color:var(--ink);}
.praw{display:none;}
.praw.open{display:block;}
.praw code{display:block; font-size:11px; background:var(--ground); padding:6px 9px; border-radius:6px;
  word-break:break-all; color:var(--muted);}
.pamt{width:88px; text-align:right; border:1px solid var(--line); border-radius:8px; padding:5px 7px;
  font-size:13px; font-weight:650;}
.pctrl select{max-width:210px;}

/* ---------- modale détail cellule ---------- */
.overlay{position:fixed; inset:0; background:rgba(18,26,22,.42); z-index:80;
  display:grid; place-items:center; padding:18px;}
.modal{background:var(--surface); border-radius:16px; box-shadow:var(--shadow-up);
  padding:20px 22px; max-width:640px; width:100%; max-height:80vh; overflow-y:auto;}
.cm-sec{font-size:10.5px; letter-spacing:.07em; text-transform:uppercase; color:var(--muted);
  margin:16px 0 6px; font-weight:650;}
.cm-line{font-size:13px; padding:7px 0; border-bottom:1px solid var(--line2);}
.cm-line:last-child{border-bottom:none;}
.cm-line code{display:block; font-size:11px; background:var(--ground); padding:4px 8px;
  border-radius:6px; margin-top:4px; word-break:break-all; color:var(--muted);}

/* ---------- responsive ---------- */
@media (max-width:820px){
  .layout{flex-direction:column;}
  aside.side{width:100%; flex:none; height:auto; position:static; padding-bottom:4px;}
  .brand{padding:14px 16px 8px;}
  nav.tabs{flex-direction:row; overflow-x:auto; padding:4px 10px 10px; gap:4px;}
  nav.tabs .navlbl{display:none;}
  nav.tabs button{white-space:nowrap; width:auto; font-size:12.5px; padding:7px 11px;}
  .side-foot{flex-direction:row; border-top:none; padding:0 10px 10px;}
  main{padding:16px 14px 70px;}
  td.st{width:auto;}
}
@media (prefers-reduced-motion:reduce){
  .card,.upzone,.btn,.chip{transition:none;}
}

/* ---------- chat d'analyse ---------- */
.achat{margin-top:12px; border-top:1px dashed var(--line); padding-top:12px;}
.achat-thread{display:flex; flex-direction:column; gap:8px; max-height:360px; overflow-y:auto; padding:2px 2px 4px;}
.achat-empty{font-size:13px; color:var(--muted); background:var(--ground); border:1px dashed var(--line);
  border-radius:12px; padding:10px 14px; line-height:1.5;}
.bub{max-width:82%; padding:9px 13px; border-radius:14px; font-size:13.5px; line-height:1.5; white-space:pre-wrap; word-break:break-word;}
.bub.user{align-self:flex-end; background:var(--accent); color:#fff; border-bottom-right-radius:4px;}
.bub.assistant{align-self:flex-start; background:var(--ground); border:1px solid var(--line2); border-bottom-left-radius:4px;}
.bub.typing{color:var(--muted); font-style:italic; animation:achat-pulse 1.4s ease-in-out infinite;}
@keyframes achat-pulse{0%,100%{opacity:.45;}50%{opacity:1;}}
.bub-acts{margin-top:7px; padding-top:6px; border-top:1px solid var(--line2);
  display:flex; flex-direction:column; gap:3px; font-size:12.5px; font-weight:600; color:var(--ok);}
.achat-bar{display:flex; gap:8px; margin-top:10px;}
.achat-bar input{flex:1; padding:10px 13px; border:1px solid var(--line); border-radius:11px; font:inherit;
  font-size:13.5px; background:var(--surface); color:var(--ink);}
.achat-bar input:focus{outline:2px solid var(--accent); border-color:transparent;}
.achat-bar input:disabled{opacity:.55;}
@media (prefers-reduced-motion:reduce){ .bub.typing{animation:none;} }

/* bouton flottant du chat d'analyse (page Loyers) */
.fab{
  position:fixed; right:24px; bottom:24px; z-index:80;
  width:54px; height:54px; border:none; border-radius:50%;
  background:var(--accent); color:#fff; font-size:22px; line-height:54px; text-align:center;
  box-shadow:0 8px 22px rgba(21,42,34,.32); cursor:pointer;
  transition:transform .15s ease, box-shadow .15s ease;
}
.fab:hover{ transform:scale(1.07); box-shadow:0 10px 26px rgba(21,42,34,.4); }
.fab i{
  position:absolute; top:-3px; right:-3px; font-style:normal; font-weight:700; font-size:11px;
  background:var(--warn); color:#fff; min-width:19px; height:19px; line-height:19px;
  border-radius:10px; padding:0 5px; box-shadow:0 0 0 2px #fff;
}
@media (prefers-reduced-motion: reduce){ .fab{ transition:none; } }

/* panneau latéral analyse + chat (page Loyers) */
.drawer-scrim{
  position:fixed; inset:0; background:rgba(15,25,20,.32); z-index:90;
  opacity:0; pointer-events:none; transition:opacity .22s ease;
}
.drawer-scrim.show{ opacity:1; pointer-events:auto; }
.drawer{
  position:fixed; top:0; right:0; height:100%; width:470px; max-width:94vw;
  background:#fff; z-index:95; display:flex; flex-direction:column;
  box-shadow:-14px 0 40px rgba(21,42,34,.22);
  transform:translateX(105%); transition:transform .28s cubic-bezier(.2,.8,.25,1);
}
.drawer.open{ transform:translateX(0); }
.drawer-head{ display:flex; align-items:flex-start; gap:10px; padding:16px 18px 12px; border-bottom:1px solid var(--line); flex-shrink:0; }
.drawer-head b{ font-size:16px; }
.drawer-sub{ font-size:12.5px; color:var(--muted); margin-top:3px; line-height:1.4; }
.drawer-x{
  margin-left:auto; flex-shrink:0; border:none; background:var(--ground); border-radius:8px;
  width:30px; height:30px; cursor:pointer; font-size:13px; color:var(--muted);
}
.drawer-x:hover{ background:var(--line2); color:var(--ink); }
.drawer-checks{ padding:10px 18px; overflow:auto; max-height:38%; border-bottom:1px solid var(--line); flex-shrink:0; }
.drawer-checks .checklist{ margin:0; }
.drawer .achat{ flex:1; display:flex; flex-direction:column; min-height:0; margin:0; padding:12px 18px 14px; }
.drawer .achat-thread{ flex:1; max-height:none; }
.fab.hidden{ display:none; }
@media (max-width:820px){ .drawer{ width:100vw; max-width:100vw; } }
@media (prefers-reduced-motion: reduce){ .drawer, .drawer-scrim{ transition:none; } }

/* vue « Façade » — l'immeuble dessiné étage par étage, du toit au sol */
.tower{ padding:0; overflow:hidden; }
.tower summary.roof{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap; cursor:pointer; list-style:none;
  background:linear-gradient(180deg, #1B3A2E, #152A22);
  color:#fff; padding:14px 18px;
  border-bottom:4px solid #0E1F19;
}
.tower summary.roof::-webkit-details-marker{ display:none; }
.roof-name{ font-size:16px; font-weight:700; letter-spacing:.2px; }
.roof-soc{ font-size:11px; background:rgba(255,255,255,.14); padding:3px 9px; border-radius:99px; }
.roof-addr{ font-size:12px; color:rgba(255,255,255,.65); }
.roof-score{ font-size:11.5px; font-weight:700; padding:3px 10px; border-radius:99px; margin-left:auto; color:#fff; }
.roof-score.all{ background:#2F7D53; } .roof-score.some{ background:#B07A1F; } .roof-score.none{ background:#A43D3D; }
.tower .gsum{ display:flex; gap:6px; }
.roofbtn{ background:rgba(255,255,255,.12); color:#fff; border-color:transparent; }
.roofbtn:hover{ background:rgba(255,255,255,.24); }
.tower-body{ background:linear-gradient(180deg, #F2F5EF, #E9EEE4); }
.flr{ display:flex; align-items:stretch; border-bottom:3px solid #DCE3D6; }
.flr:last-of-type{ border-bottom:none; }
.flr-tag{
  flex:0 0 56px; display:flex; align-items:center; justify-content:center;
  font-weight:800; font-size:13px; color:var(--muted);
  background:repeating-linear-gradient(45deg, #E7ECE2 0 6px, #EDF1E9 6px 12px);
  border-right:2px dashed #D5DCCE;
}
.flr-apts{ flex:1; display:flex; flex-wrap:wrap; gap:12px; padding:14px; }
.apt{
  flex:1 1 300px; max-width:440px; min-width:260px; background:#fff;
  border:1px solid var(--line); border-radius:12px; padding:11px 13px;
  display:flex; flex-direction:column; gap:6px;
  box-shadow:0 2px 6px rgba(21,42,34,.06); transition:box-shadow .15s ease, transform .15s ease;
}
.apt:hover{ box-shadow:0 6px 16px rgba(21,42,34,.13); transform:translateY(-1px); }
.apt.late{ border-left:4px solid var(--danger); }
.apt.former{ opacity:.55; }
.apt.vacant{
  border-style:dashed; align-items:flex-start; justify-content:center; min-height:96px;
  background:repeating-linear-gradient(45deg, #fff 0 10px, #FAF7F8 10px 20px);
}
.apt-top{ display:flex; align-items:center; gap:8px; width:100%; }
.apt-name{ font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.5px; color:var(--muted); }
.apt-top .balchip{ margin-left:auto; }
.apt-ten{ display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
.apt-ten a{ font-weight:700; font-size:14px; color:var(--ink); text-decoration:none; }
.apt-ten a:hover{ text-decoration:underline; }
.apt-badges{ display:flex; gap:5px; flex-wrap:wrap; }
.apt-meta{ font-size:12.5px; color:var(--ink2); display:flex; gap:8px; align-items:baseline; flex-wrap:wrap; }
.apt-strip{ margin-top:2px; }
.apt-vac{ font-size:12px; font-weight:700; color:#B08A96; letter-spacing:1.5px; }
.apt-acts{ margin-top:auto; display:flex; gap:6px; justify-content:flex-end; width:100%; }
.flr-form{ padding:0 14px 14px; background:#fff; border-bottom:3px solid #DCE3D6; }
.tower-ground{ height:12px; background:linear-gradient(180deg, #CBD3C3, #AEB8A2); }
@media (max-width:820px){
  .flr{ flex-direction:column; }
  .flr-tag{ flex:0 0 auto; padding:5px; border-right:none; border-bottom:2px dashed #D5DCCE; }
  .apt{ min-width:0; max-width:none; }
}
@media (prefers-reduced-motion: reduce){ .apt{ transition:none; } }

/* vue « Immeuble » — scène immersive : façade SVG + panneau fiche */
.scene{ display:flex; gap:18px; margin:0 0 26px; align-items:flex-start; }
.scene-svg{
  flex:0 0 46%; max-width:560px; height:auto; border-radius:16px;
  background:linear-gradient(180deg, #96C0E2, #D7E9F4 58%, #E9F2F8);
  box-shadow:0 12px 30px rgba(21,42,34,.18);
}
.swin:hover .wframe{ stroke:#2F7D53; stroke-width:2.5; }
.swin.sel .wframe{ stroke:#2F7D53; stroke-width:3.5; }
.scene-side{ flex:1; min-width:0; display:flex; flex-direction:column; gap:12px; position:sticky; top:12px; }
.street-plaque{
  align-self:flex-start; background:linear-gradient(180deg, #27508A, #1D3E6E); color:#fff;
  border:3px solid #fff; outline:2px solid #16305A; border-radius:6px;
  padding:8px 20px 9px; display:flex; flex-direction:column; gap:1px; text-align:center;
  box-shadow:0 4px 12px rgba(0,0,0,.2);
}
.street-plaque small{ font-size:9px; letter-spacing:2.5px; opacity:.72; }
.street-plaque b{ font-size:17px; letter-spacing:1.4px; text-transform:uppercase; }
.street-plaque span{ font-size:11px; opacity:.85; }
.scene-stats{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.scene-detail{
  background:#fff; border:1px solid var(--line); border-radius:14px; padding:14px;
  display:flex; flex-direction:column; gap:10px; box-shadow:0 2px 8px rgba(21,42,34,.07);
}
.scene-detail .apt{ box-shadow:none; max-width:none; min-width:0; }
.scene-dhead{ display:flex; align-items:center; justify-content:space-between; font-size:14px; }
.scene-hint{ color:var(--muted); font-size:13px; padding:12px 6px; line-height:1.5; }
.legend .wchip{
  display:inline-block; width:14px; height:17px; border-radius:2px; margin:0 4px -4px 10px;
  border:2px solid #F6F1E7; box-shadow:0 0 0 1px rgba(0,0,0,.14);
}
.wchip.wok{ background:linear-gradient(#FFF0C0, #EBC97F); }
.wchip.wlate{ background:linear-gradient(#E9A8A2, #C2635B); }
.wchip.wamb{ background:linear-gradient(#F6D89B, #D9A75C); }
.wchip.wvac{ background:linear-gradient(#5B6663, #39413F); }
@media (max-width:900px){
  .scene{ flex-direction:column; }
  .scene-svg{ flex:none; width:100%; max-width:100%; }
  .scene-side{ position:static; }
}

/* vue « Immeuble » v2 — grille de cartes-façades + fiche en panneau coulissant */
.bgrid{ columns:2 340px; column-gap:20px; margin:0 0 26px; }
.bgrid .bcard{ break-inside:avoid; margin-bottom:20px; }
.bcard{
  border-radius:18px; overflow:hidden; background:#fff;
  border:1px solid var(--line); box-shadow:0 6px 20px rgba(21,42,34,.1);
  display:flex; flex-direction:column;
  transition:box-shadow .2s ease, transform .2s ease;
}
.bcard:hover{ box-shadow:0 12px 30px rgba(21,42,34,.16); transform:translateY(-2px); }
.bcard-svg{
  display:block; width:100%; height:auto;
  background:linear-gradient(180deg, #A9C6DC, #DCE9F0 62%, #EAF1F4);
}
.swin .wframe{ transition:stroke .12s; }
.swin:hover .wframe{ stroke:#2F7D53; stroke-width:2.5; }
.swin.sel .wframe{ stroke:#2F7D53; stroke-width:3.5; }
.bfoot{
  display:flex; align-items:center; gap:10px; padding:12px 16px;
  border-top:1px solid var(--line); background:#fff;
}
.bfoot-id{ display:flex; flex-direction:column; min-width:0; }
.bfoot-id b{ font-size:14.5px; letter-spacing:.2px; }
.bfoot-id span{ font-size:11.5px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bfoot .badge{ margin-left:auto; }
.bfoot-acts{ display:flex; gap:6px; flex-shrink:0; }
.unit-drawer{ z-index:97; }
.unit-body{ flex:1; overflow:auto; padding:14px 18px; display:flex; flex-direction:column; gap:10px; }
.unit-body .apt{ box-shadow:none; max-width:none; min-width:0; }

/* le quartier : vignettes + immeuble sélectionné + fiche à côté */
.quartier{ margin:0 0 26px; }
.q-thumbs{ display:flex; gap:10px; flex-wrap:wrap; margin-bottom:14px; }
.q-thumb{
  position:relative; display:flex; align-items:center; gap:9px;
  background:#fff; border:1.5px solid var(--line); border-radius:12px;
  padding:7px 13px 7px 9px; cursor:pointer; font-size:12.5px; font-weight:600; color:var(--ink);
  transition:border-color .15s, box-shadow .15s;
}
.q-thumb:hover{ border-color:var(--accent); }
.q-thumb.on{ border-color:var(--accent); box-shadow:0 0 0 2.5px rgba(31,94,75,.14); background:#F4F8F5; }
.q-alert{
  position:absolute; top:-7px; right:-7px; background:#A43D3D; color:#fff;
  font-size:10.5px; font-weight:700; min-width:19px; height:19px; line-height:19px;
  text-align:center; border-radius:10px; padding:0 4px; box-shadow:0 0 0 2px #fff;
}
.q-main{ display:flex; gap:20px; align-items:flex-start; }
.q-facade{ flex-shrink:0; }
.q-svg{
  display:block; width:100%; height:auto; border-radius:16px;
  background:linear-gradient(180deg, #A9C6DC, #DCE9F0 62%, #EAF1F4);
  box-shadow:0 10px 26px rgba(21,42,34,.16);
}
.q-side{
  flex:1; min-width:0; background:#fff; border:1px solid var(--line); border-radius:16px;
  padding:14px 16px; display:flex; flex-direction:column; gap:10px;
  box-shadow:0 2px 8px rgba(21,42,34,.07);
}
.q-head{ display:flex; align-items:center; gap:10px; padding-bottom:10px; border-bottom:1px solid var(--line); }
.q-head b{ font-size:15px; }
.q-head .badge{ margin-left:auto; }
.q-rows{ display:flex; flex-direction:column; }
.q-row{
  display:flex; align-items:center; gap:10px; width:100%; text-align:left;
  background:none; border:none; border-bottom:1px solid var(--line2);
  padding:9px 6px; cursor:pointer; font-size:13.5px; color:var(--ink); border-radius:8px;
}
.q-row:last-child{ border-bottom:none; }
.q-row:hover{ background:var(--ground); }
.q-fl{
  flex-shrink:0; width:34px; text-align:center; font-size:11px; font-weight:800;
  color:var(--muted); background:var(--ground); border-radius:7px; padding:3px 0;
}
.q-nm{ flex:1; min-width:0; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.q-nm.muted{ color:var(--muted); font-weight:500; }
.q-row .balchip, .q-row .badge{ flex-shrink:0; }
.balchip.qvac{ background:var(--line2); color:var(--muted); }
.q-dhead{ display:flex; align-items:center; gap:10px; font-size:14px; }
.q-side .apt{ box-shadow:none; max-width:none; min-width:0; }
@media (max-width:900px){
  .q-main{ flex-direction:column; }
  .q-facade{ flex-basis:auto !important; width:100%; max-width:340px; margin:0 auto; }
}

/* scène panoramique : un seul monde — ciel, immeuble sur trottoir, panneaux de verre */
.q-scene{
  position:relative; border-radius:20px; overflow:hidden;
  background:linear-gradient(180deg, #9FBFDA 0%, #C3D9E8 34%, #E3EDF3 72%, #EDF3F6 100%);
  padding:18px 24px 64px; box-shadow:0 12px 32px rgba(21,42,34,.16);
}
.q-scene::after{
  content:""; position:absolute; left:0; right:0; bottom:0; height:36px;
  background:linear-gradient(180deg, #E2E4E3, #D9DCDA);
  border-top:1px solid rgba(0,0,0,.08);
}
.q-scene .q-thumbs{ position:relative; z-index:2; margin-bottom:16px; }
.q-scene .q-thumb{
  background:#fff; border:1px solid rgba(0,0,0,.07); box-shadow:0 1px 2px rgba(0,0,0,.04);
}
.q-scene .q-thumb:hover{ border-color:rgba(0,0,0,.16); }
.q-scene .q-thumb.on{ border-color:var(--accent); box-shadow:0 0 0 3px rgba(31,94,75,.12); }
.q-stage{ position:relative; z-index:1; display:flex; gap:26px; align-items:flex-end; }
.q-facade{ flex-shrink:0; margin-bottom:-16px; }
.q-svg{ display:block; width:100%; height:auto; background:none; border-radius:0; box-shadow:none; }
.q-panel{
  flex:1; min-width:0; display:flex; flex-direction:column; gap:12px;
  align-self:flex-start;
}
.g-card{
  background:#fff; border:1px solid rgba(0,0,0,.06); border-radius:16px;
  padding:14px 18px; box-shadow:0 1px 2px rgba(0,0,0,.04);
}
.g-card.q-head{ display:flex; align-items:center; gap:10px; border-bottom:none; padding-bottom:13px; }
.q-content{ display:flex; flex-direction:column; gap:10px; }
.q-content .q-row{ border-bottom-color:rgba(0,0,0,.05); }
.q-content .q-row:hover{ background:#F5F6F5; }
.q-content .apt{ background:#fff; border-color:rgba(0,0,0,.07); }
@media (max-width:900px){
  .q-stage{ flex-direction:column; align-items:center; }
  .q-facade{ margin-bottom:0; width:auto !important; max-width:280px; }
  .q-panel{ align-self:stretch; }
}

/* fiche : les 12 mois en cases lisibles (initiale + couleur d'état) */
.mstrip{ display:flex; gap:5px; flex-wrap:wrap; margin-top:4px; }
.mcell{
  width:27px; height:29px; border-radius:8px; display:flex; align-items:center; justify-content:center;
  font-size:11px; font-weight:800; cursor:pointer; user-select:none;
  background:var(--line2); color:var(--muted); transition:transform .12s, box-shadow .12s;
}
.mcell:hover{ transform:scale(1.12); box-shadow:0 3px 8px rgba(21,42,34,.2); }
.mcell.d-ok, .mcell.d-caf{ background:rgba(47,125,83,.34); color:#0E5130; }
.mcell.d-caf{ box-shadow:inset 0 0 0 2px rgba(31,107,66,.55); }
.mcell.d-cafp{ background:rgba(47,125,83,.07); color:#4C9067; border:1.5px dashed rgba(47,125,83,.4); }
.mcell.d-part{ background:rgba(176,122,31,.26); color:#7A5407; }
.mcell.d-miss{ background:rgba(178,52,52,.32); color:#8A1F1F; }
.mcell.d-unk{ background:repeating-linear-gradient(45deg, #EDEFE9 0 6px, #E2E5DE 6px 12px); color:var(--muted); }
.mcell.d-na{ background:#EFF0EE; color:#B2B6B0; cursor:default; position:relative; }
.mcell.d-na::after{ content:""; position:absolute; left:5px; right:5px; top:50%; height:1.5px; background:#C4C8C2; transform:rotate(-32deg); }
.mcell.curm{ outline:2.5px solid var(--accent); outline-offset:1.5px; }

/* scène : lumière, nuages diffus, ombre portée de l'immeuble, survol des fenêtres */
.q-scene{
  border-radius:22px;
  background:linear-gradient(180deg, #F7F8FA 0%, #EFF1F3 60%, #EAECEE 100%);
  border:1px solid rgba(0,0,0,.05);
  box-shadow:0 1px 2px rgba(0,0,0,.04), 0 8px 28px rgba(30,42,36,.07);
}
.q-facade{ position:relative; }
.q-facade::after{
  content:""; position:absolute; left:-6%; right:-10%; bottom:-20px; height:24px;
  background:radial-gradient(ellipse at 50% 50%, rgba(30,42,36,.18), transparent 70%);
  filter:blur(5px); pointer-events:none;
}
.swin{ transition:filter .15s ease; }
.swin:hover{ filter:brightness(1.07); }

/* ---------- Loyers Manager : tableau de bord (fidèle à la maquette) ---------- */
.lstats{display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:14px; margin-top:6px;}
.lstat{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); padding:16px 18px; box-shadow:var(--shadow);}
.lstat .l{font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); font-weight:650;}
.lstat .b{font-size:26px; font-weight:750; letter-spacing:-.02em; margin-top:6px;}
.lstat .s{font-size:11.5px; color:var(--muted); margin-top:2px;}
.lstat .lg{height:5px; background:var(--line2); border-radius:3px; overflow:hidden; margin-top:10px;}
.lstat .lg i{display:block; height:100%; background:var(--ok); border-radius:3px;}
.lgrid{display:grid; grid-template-columns:1fr 1fr; gap:0 18px; align-items:start;}
@media (max-width:980px){.lgrid{grid-template-columns:1fr;}}
.lcard{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden;}
.lrow{display:flex; align-items:center; gap:12px; padding:12px 16px; border-top:1px solid var(--line2); font-size:13.5px;}
.lrow:first-child{border-top:none;}
.lrow .lic{font-size:16px; flex:none;}
.lrow .s2{display:block; color:var(--muted); font-size:11.5px;}
.lrow .lgo{margin-left:auto; white-space:nowrap; flex:none;}
.lrow .lamt{margin-left:auto; color:var(--danger); font-size:13.5px; white-space:nowrap;}
.lrow .vchip{flex:none;}
.lcycle{display:flex; padding:16px 12px 8px;}
.lstep{flex:1; text-align:center; position:relative; font-size:11.5px; color:var(--muted);}
.lstep::before{content:""; position:absolute; top:13px; left:-50%; right:50%; height:2px; background:var(--line);}
.lstep:first-child::before{display:none;}
.lstep .p{width:28px; height:28px; border-radius:50%; margin:0 auto 6px; display:grid; place-items:center;
  background:var(--line2); color:var(--muted); font-weight:750; font-size:12px; position:relative; z-index:1;}
.lstep.done .p{background:var(--ok); color:#fff;}
.lstep.done{color:var(--ink);}
.lstep.next .p{background:var(--surface); border:2px solid var(--accent); color:var(--accent);}
.lstep b{display:block; font-size:12.5px; color:var(--ink);}
table.ltab{width:100%; border-collapse:collapse; font-size:13px;}
.ltab th{font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); font-weight:650;
  text-align:left; padding:10px 16px 7px;}
.ltab th.n,.ltab td.n{text-align:right;}
.ltab td{padding:9px 16px; border-top:1px solid var(--line2);}
.ltab tr.tot td{font-weight:750; border-top:1.5px solid var(--ink);}
/* --- chips journal emails --- */
.kchip{font-size:10.5px; font-weight:650; padding:2px 9px; border-radius:99px; white-space:nowrap;}
.kchip.kavis{background:#E8EDF6; color:#4A5F85;}
.kchip.kquit{background:var(--ok-soft,#E1F2E7); color:var(--ok,#2F7D53);}
.kchip.krel{background:#F7EDDA; color:#B07A1F;}
.kchip.kmed{background:#F9E8E3; color:#B54530;}
/* --- actions du mois (checklist tableau de bord) --- */
.lrow.task{gap:10px;}
.lrow.task .tck{width:17px; height:17px; accent-color:var(--accent); flex:none; cursor:pointer; margin:0;}
.lrow.task .tlabel{min-width:0;}
.lrow.tdone .tlabel{color:var(--muted); text-decoration:line-through;}
.lrow.task .tdel{margin-left:auto; border:none; background:none; color:var(--muted); cursor:pointer; font-size:13px; opacity:0; padding:2px 6px; border-radius:6px;}
.lrow.task:hover .tdel{opacity:1;}
.lrow.task .tdel:hover{background:#F9E8E3; color:var(--danger);}
.tin{flex:1; border:1px solid var(--line); border-radius:8px; padding:6px 10px; font:inherit; color:inherit; background:#fff; min-width:0;}
.tin:focus{outline:none; border-color:var(--accent);}
/* --- sous-taches Visale dans Actions du mois --- */
.vtask{border-left:3px solid var(--warn); background:#FDFAF2; border-top:1px solid var(--line2);}
.vtask.vdone{border-left-color:var(--ok); background:#F6FAF6;}
.vtask .vhead{padding-bottom:4px;}
.vprog{flex:none; font-size:11px; font-weight:750; background:#F1E7D0; color:#8A6516; border-radius:99px; padding:2px 9px;}
.vtask.vdone .vprog{background:#E1F2E7; color:var(--ok);}
.vtask .vsub{padding:8px 18px 8px 34px; border-top:1px dashed var(--line2);}
.vtask .vsub .s2{display:block;}
/* --- page Emails : cycle par locataire --- */
.mst{display:inline-block; font-size:11px; font-weight:650; padding:2px 9px; border-radius:99px; white-space:nowrap;}
.mok{background:#E1F2E7; color:#2F7D53;}
.mwait{background:#F1F3EF; color:#65706A;}
.mwarn{background:#F7EDDA; color:#B07A1F;}
.mbad{background:#F9E8E3; color:#B54530;}
.mst.krel{background:#F7EDDA; color:#B07A1F;}
.mst.kmed{background:#F9E8E3; color:#B54530;}
.mmut{color:#9AA29C; font-size:11.5px;}
.mtab td{vertical-align:middle;}
tr.mrow-off td{opacity:.55;}
/* --- page Emails : mini-frise par locataire --- */
.trow{display:flex; align-items:center; gap:16px; padding:13px 18px; border-top:1px solid var(--line2);}
.trow:first-child{border-top:none;}
.trow .tinfo{flex:0 0 280px; min-width:0;}
.mcycle{display:flex; flex:1; align-items:flex-start; min-width:340px;}
.mstep{flex:1; text-align:center; position:relative; font-size:10.5px; color:var(--muted); min-width:72px;}
.mstep::before{content:""; position:absolute; top:10px; left:-50%; right:50%; height:2px; background:var(--line);}
.mstep:first-child::before{display:none;}
.mstep .p{width:22px; height:22px; border-radius:50%; margin:0 auto 4px; display:grid; place-items:center;
  background:var(--line2); color:var(--muted); font-weight:700; font-size:10.5px; position:relative; z-index:1;}
.mstep.done .p{background:var(--ok); color:#fff;}
.mstep.done{color:var(--ink);}
.mstep.wdone .p{background:#B07A1F; color:#fff;}
.mstep.wdone{color:var(--ink);}
.mstep.rdone .p{background:#B54530; color:#fff;}
.mstep.rdone{color:var(--ink);}
.mstep.next .p{background:#fff; border:2px solid var(--accent); color:var(--accent);}
.mstep.na{opacity:.4;}
.mstep b{display:block; font-size:11px;}
.mstep .mq{font-size:10.5px; padding:2px 8px; margin-top:1px;}
@media (max-width:1100px){.trow{flex-wrap:wrap;} .trow .tinfo{flex:1 1 100%;}}
/* --- dossiers : procédures en cours + fiche allégée --- */
.proccard{margin-bottom:14px;}
.pchips{display:flex; flex-wrap:wrap; gap:8px; padding:2px 18px 14px;}
.pchip{display:inline-flex; align-items:center; gap:5px; font-size:12px; font-weight:600; padding:4px 11px; border-radius:99px; border:1px solid var(--line); background:#fff; color:var(--muted); text-decoration:none; cursor:pointer; font-family:inherit; line-height:1.4;}
.pchip.pok{background:#E1F2E7; color:#2F7D53; border-color:transparent;}
.pchip.pold{background:#F7EDDA; color:#B07A1F; border-color:transparent;}
.pchip.pmiss{background:#F9E8E3; color:#B54530; border-color:transparent;}
.tm-visale{display:flex; align-items:center; gap:10px; padding:10px 0 2px; flex-wrap:wrap;}
