:root{
  --blue:#0B3AE6; --blue-700:#082daf; --ink:#0a0f1c; --slate:#5b6472;
  --line:#e4e7ee; --mist:#f4f6fb; --white:#fff; --ok:#0a7d33; --err:#c0362c;
  --radius:14px; --radius-sm:9px; --shadow:0 6px 24px rgba(10,15,28,.08);
}

/* Carte de contrôle cadastral : l'image reste le fond officiel, le SVG porte
   uniquement les géométries de travail versionnées. */
.measurement-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem;margin:1rem 0}
.measurement-summary .card{display:flex;flex-direction:column;gap:.25rem;margin:0}
.measurement-summary strong{font-size:1.2rem}.measurement-summary small{color:var(--slate)}
.measurement-workspace{overflow:hidden}.measurement-toolbar,.measurement-actions{display:flex;gap:.55rem;align-items:center;flex-wrap:wrap}
.measurement-map{position:relative;max-width:900px;margin:.75rem auto;background:#dfe4e8;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
.measurement-map img{display:block;width:100%;height:auto}.measurement-map svg{position:absolute;inset:0;width:100%;height:100%;cursor:crosshair;touch-action:none}
.measurement-road{stroke:#fff;stroke-width:11;stroke-opacity:.72}.measurement-take{fill:#16a34a;fill-opacity:.18;stroke:#15803d;stroke-width:2}
.measurement-parcel{fill:none;stroke:#dc2626;stroke-width:2.5}.measurement-front{stroke:#0757d9;stroke-width:6;stroke-linecap:round}
.measurement-auto-front{stroke:#7c3aed;stroke-width:9;stroke-opacity:.42;stroke-dasharray:12 8}
.measurement-normal{stroke:#f59e0b;stroke-width:2;stroke-dasharray:8 6}.measurement-depth{stroke:#c2410c;stroke-width:5;stroke-linecap:round}
.measurement-handle{fill:#fff;stroke:#0757d9;stroke-width:3}.measurement-label{font-size:14px;font-weight:700;fill:#7c2d12;paint-order:stroke;stroke:#fff;stroke-width:4px}
.measurement-front-label{font-size:14px;font-weight:800;fill:#0757d9;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:4px}
.measurement-parcel-number-bg{fill:#0a0f1c;stroke:#fff;stroke-width:2}.measurement-parcel-number{fill:#fff;font-size:16px;font-weight:800;text-anchor:middle}
.measurement-scale-halo{stroke:#fff;stroke-width:7}.measurement-scale{stroke:#0a0f1c;stroke-width:3}.measurement-scale-label{fill:#0a0f1c;font-size:13px;font-weight:800;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:4px}
.carte--selection{cursor:crosshair}
.measurement-legend{display:flex;gap:1rem;flex-wrap:wrap;padding:0;list-style:none;font-size:.86rem}.measurement-legend li{display:flex;gap:.35rem;align-items:center}
.measurement-key{display:inline-block;width:24px;height:8px;border-radius:4px;background:#dfe4e8}.measurement-key--parcel{background:#dc2626}.measurement-key--take{background:#16a34a}.measurement-key--front{background:#0757d9}.measurement-key--normal{background:#f59e0b}
.measurement-actions{margin:1rem 0}.measurement-validation-form{display:flex;gap:.55rem;align-items:end;flex-wrap:wrap;flex:1}.measurement-validation-form label{min-width:260px;flex:1}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;color:var(--ink);background:var(--mist);line-height:1.5}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
h1{font-size:1.5rem;margin:0 0 .2rem}
h3{margin:0 0 .4rem}
.muted{color:var(--slate)}
.environment-banner{position:sticky;top:0;z-index:1000;padding:.38rem 1rem;background:#7a2400;color:#fff;text-align:center;font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}

/* Barre supérieure */
.topbar{display:flex;align-items:center;gap:1.5rem;background:var(--white);border-bottom:1px solid var(--line);padding:.7rem 1.2rem;flex-wrap:wrap}
.brand{font-weight:800;font-size:1.15rem;color:var(--ink)}
.brand span{color:var(--blue)}
.brand--big{font-size:1.5rem;display:block;margin-bottom:1rem}
.mainnav{display:flex;gap:.3rem;flex-wrap:wrap;flex:1}
.navspaces{display:flex;gap:.3rem;padding-right:.35rem;margin-right:.15rem;border-right:1px solid var(--line)}
.mainnav a.navspace{color:var(--ink);font-weight:800;letter-spacing:.025em}
.mainnav a.navspace.on{color:#fff}
.mainnav a{padding:.45rem .7rem;border-radius:var(--radius-sm);color:var(--slate);font-weight:600}
.mainnav a:hover{background:var(--mist);text-decoration:none}
.mainnav a.on{background:var(--blue);color:#fff}
.nav-count{display:inline-flex;min-width:1.25rem;height:1.25rem;align-items:center;justify-content:center;padding:0 .32rem;border-radius:999px;background:var(--err);color:#fff;font-size:.72rem;font-weight:800;line-height:1}
.timesheet-attention--blue{background:#2563eb}.timesheet-attention--red{background:#b42318}
@media(max-width:760px){.navspaces{width:100%;border-right:0;border-bottom:1px solid var(--line);padding-bottom:.35rem}}
.communication-menu-quotas{display:flex;align-items:center;gap:.35rem}
.communication-menu-quota{position:relative;min-height:2.25rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--ink);white-space:nowrap}
.communication-menu-quota summary{display:flex;align-items:center;gap:.3rem;min-height:2.2rem;padding:.35rem .55rem;cursor:pointer;list-style:none}
.communication-menu-quota summary::-webkit-details-marker{display:none}
.communication-menu-quota strong{font-size:.82rem}.communication-quota-icon{width:1rem;height:1rem;color:var(--blue);flex:0 0 auto}
.communication-menu-quota--unavailable{color:var(--muted)}.communication-menu-quota--unavailable .communication-quota-icon{color:var(--muted)}
.communication-menu-quota-detail{display:none;position:absolute;z-index:20;top:calc(100% + .35rem);right:0;width:max-content;max-width:min(26rem,calc(100vw - 2rem));padding:.45rem .6rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;box-shadow:var(--shadow);color:var(--slate);font-size:.76rem;white-space:normal}
.communication-menu-quota:first-child .communication-menu-quota-detail{left:0;right:auto}.communication-menu-quota:last-child .communication-menu-quota-detail{right:0;left:auto}
.communication-menu-quota:hover .communication-menu-quota-detail,.communication-menu-quota:focus-within .communication-menu-quota-detail,.communication-menu-quota[open] .communication-menu-quota-detail{display:block}
@media(max-width:760px){.communication-menu-quotas{margin-left:0}.communication-menu-quota{min-height:2rem}.communication-menu-quota summary{min-height:1.95rem;padding:.25rem .45rem}}
.who{display:flex;align-items:center;gap:.8rem;font-size:.85rem;color:var(--slate)}
.inline{display:inline}
.linkbtn{background:none;border:none;color:var(--blue);cursor:pointer;font:inherit;padding:0}
.linkbtn:hover{text-decoration:underline}
.contact-confirmations{display:flex;flex-wrap:wrap;gap:.55rem;margin-top:.8rem;padding-top:.8rem;border-top:1px solid var(--line)}
.contact-initials{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;min-width:2.2rem;font-size:.78rem;font-weight:800;color:var(--slate)}
.contact-check{color:var(--ok);font-size:.82rem;line-height:1}
.contact-check--pending{color:#a8afba}

/* Signalements privés : navigation et conversation utilisables sans script.
   FIXED/CLOSED restent lisibles par un badge texte et un titre barré. */
.bug-launcher{display:flex;flex-direction:column;align-items:center;gap:.2rem}
.bug-report-link{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--line);border-radius:var(--radius-sm);padding:.45rem .6rem;font-size:.85rem;font-weight:700}
.bug-report-icon{color:var(--blue);width:1rem;height:1rem;flex:0 0 auto}
.bug-report-link[aria-current=page]{background:var(--blue);color:#fff}
.bug-report-link[aria-current=page] .bug-report-icon{color:#fff}
.bug-attention{background:var(--ink);color:#fff;border-radius:999px;min-width:1.4rem;padding:.05rem .35rem;text-align:center;font-size:.75rem}
.bug-list,.bug-thread,.bug-new,.bug-reply,.bug-upload,.bug-actions,.bug-history{margin-top:1.2rem}
.bug-card .head-row,.bug-message .head-row{margin-bottom:.5rem}
.bug-card h3{margin:0}.bug-card h1,.bug-card h3,.bug-message{overflow-wrap:anywhere}
.bug-card--fixed{background:#eceff3;color:#4b5563;border-color:#d1d5db;box-shadow:none}
.bug-card--fixed a{color:#4b5563}
.bug-status{display:inline-block;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);padding:.2rem .6rem;font-size:.78rem;font-weight:700;white-space:nowrap}
.bug-card--fixed .bug-status{background:#e1e5eb;color:#374151;border-color:#c5cbd4}
.bug-message-body,.bug-event-detail{white-space:pre-wrap;overflow-wrap:anywhere}
.bug-message--internal{border-left:4px solid #795400;background:#fff8e8}
.bug-dictation{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;padding:.7rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#f8fafc}
.bug-dictation .btnrow{margin:0}.bug-dictation__status{margin:0}
.bug-dictation__status--error{color:var(--err);font-weight:700}
.bug-attachment{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;border-top:1px solid var(--line);padding-top:.65rem;margin-top:.75rem}
.bug-upload summary,.bug-transition summary,.bug-history summary{cursor:pointer;font-weight:700}
.bug-transition{border-top:1px solid var(--line);padding-top:1rem;margin-top:1rem}
.bug-events{padding-left:1.4rem}.bug-events li+li{margin-top:.85rem}
.bug-event-detail{margin:.3rem 0}
.bug-reply textarea:focus,.bug-actions textarea:focus,.bug-new textarea:focus{outline:2px solid var(--blue)}
.bug-report-link:focus-visible,.bug-upload summary:focus-visible,.bug-transition summary:focus-visible,.bug-history summary:focus-visible{outline:2px solid var(--blue);outline-offset:3px}
@media(max-width:560px){.bug-message .head-row{align-items:flex-start}.bug-launcher{align-items:flex-start}.bug-status{white-space:normal}}

/* Contenu */
.wrap{max-width:1000px;margin:1.6rem auto;padding:0 1.2rem}
.wrap--auth{max-width:420px;margin-top:8vh}
/* CALENDAR : trois mois à gauche, accès modules à droite (user, 12/09/2026).
   Les liens natifs restent utilisables au clavier et sans JavaScript. */
.wrap--calendar{max-width:1600px}
.dashboard-layout{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:2rem;align-items:start;margin-top:1.5rem}
.dashboard-layout--modules{display:block}.dashboard-modules .grid{grid-template-columns:1fr}
.dashboard-modules .card{margin:0;min-height:88px;padding:1rem 1.2rem}
.dashboard-calendar{min-width:0}.dashboard-calendar h2,.calendar-warnings h2,.calendar-upcoming h2,.calendar-toolbar h2{font-size:1.1rem;margin:0}
.calendar-eyebrow{margin:0 0 .3rem;font-size:.72rem;color:var(--slate);letter-spacing:.08em;text-transform:uppercase;font-weight:700}
.calendar-preview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem;align-items:start}
.calendar-month{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.calendar-grid{width:100%;border-collapse:collapse;table-layout:fixed}
.calendar-grid caption{padding:.9rem;text-align:left;font-size:1.1rem;font-weight:750;background:#fff}
.calendar-grid th{padding:.5rem .2rem;font-size:.78rem;color:var(--slate);background:#f8f9fc;font-weight:650}
.calendar-grid abbr{text-decoration:none}.calendar-grid td{border:1px solid var(--line);vertical-align:top;padding:.35rem;height:120px}
.calendar-grid td:first-child{border-left:0}.calendar-grid td:last-child{border-right:0}.calendar-grid tr:last-child td{border-bottom:0}
.calendar-grid .calendar-empty{background:#f8f9fc}.calendar-cell--today{box-shadow:inset 0 0 0 2px var(--blue)}
.calendar-date{display:flex;align-items:center;justify-content:space-between;gap:.1rem;min-height:28px;font-size:.85rem;font-weight:700;padding:.15rem .3rem;color:var(--ink);border-radius:5px}
.calendar-cell--today .calendar-date{color:var(--blue)}.calendar-date:hover{background:#e9eeff;text-decoration:none}
.calendar-day-count{font-size:.6rem;min-width:1rem;padding:0 .15rem;border-radius:999px;background:var(--blue);color:#fff;text-align:center}
.calendar-month--compact .calendar-grid caption{font-size:.95rem;padding:.8rem .7rem}
.calendar-month--compact .calendar-grid th{font-size:.64rem;padding:.45rem 0}
.calendar-month--compact .calendar-grid td{height:42px;padding:.1rem;border-color:#f0f1f5}
.calendar-month--compact .calendar-date{font-size:.76rem;padding:.15rem;min-height:36px;flex-wrap:wrap;justify-content:center}
.calendar-month--compact .calendar-cell--occupied{background:#f0f4ff}
.calendar-day.is-weekend{background:#e8edf7}
.calendar-day.is-holiday{background:#ffedb0}
.calendar-holiday-label{display:block;color:#7a4b00;font-size:.78rem;font-weight:650}
.calendar-mini .calendar-holiday-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.calendar-day-events{list-style:none;margin:.35rem 0 0;padding:0;font-size:.78rem}
.calendar-day-events li+li{margin-top:.45rem}.calendar-day-events a{display:block;padding:.35rem;background:#eef2ff;border-radius:5px;overflow-wrap:anywhere}
.calendar-project{display:block;color:var(--slate);font-weight:650;font-size:.73rem}
.calendar-event-meta{display:block;color:var(--slate);font-size:.72rem;margin:.25rem 0 0}
.calendar-day-events .calendar-overflow{background:#fff;font-weight:750}
.calendar-toolbar,.calendar-period-nav,.calendar-view-switch{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.calendar-toolbar{justify-content:space-between;margin:1.5rem 0 1rem}.calendar-period-nav h2{margin:0 .4rem}
.calendar-view-switch{border:1px solid var(--line);border-radius:8px;padding:.25rem;background:white}
.calendar-view-switch a{padding:.4rem .8rem;border-radius:5px}.calendar-view-switch [aria-current]{background:var(--blue);color:#fff}
.calendar-filters{padding:1rem;background:#fff;border:1px solid var(--line);border-radius:var(--radius);margin-bottom:1rem}
.calendar-filters summary{cursor:pointer;font-weight:700}.calendar-filters form{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;margin-top:1rem}
.calendar-filters label{display:flex;flex-direction:column;gap:.2rem;font-size:.78rem;color:var(--slate);min-width:0}
.calendar-filters input,.calendar-filters select{min-width:0;width:100%;padding:.55rem;border:1px solid #c4cbd7;border-radius:6px;background:#fff;color:var(--ink);font:inherit}
.calendar-filter-actions{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;align-self:end}
.calendar-scroll{overflow-x:auto;border-radius:var(--radius)}.calendar-scroll .calendar-month{min-width:850px}
.calendar-holidays-dialog{width:min(980px,calc(100% - 2rem));max-height:calc(100% - 2rem);padding:1.25rem;border:0;border-radius:var(--radius);box-shadow:0 18px 60px #17213a55;color:var(--ink)}
.calendar-holidays-dialog::backdrop{background:#17213a88}.dialog-close{float:right}.dialog-close button{font-size:1.5rem;background:transparent;border:0;cursor:pointer;color:var(--ink)}
.calendar-holiday-filter,.calendar-holiday-form,.calendar-holiday-actions{display:flex;align-items:end;gap:.6rem;flex-wrap:wrap}.calendar-holiday-filter{margin-bottom:1rem}.calendar-holiday-form{margin-top:1rem}.calendar-holiday-actions{align-items:center}
.calendar-holiday-form label{display:flex;flex-direction:column;gap:.2rem}.calendar-holiday-form input,.calendar-holiday-form select{padding:.5rem;border:1px solid #c4cbd7;border-radius:6px;background:#fff;color:var(--ink)}
.calendar-holiday-table{margin-top:.8rem}.calendar-holiday-table details{min-width:8rem}.calendar-holiday-table form{margin:.5rem 0}.calendar-holiday-warning{margin:1rem 0}.calendar-holiday-warning a{font-weight:700}
.calendar-event-list{list-style:none;padding:0;margin:0;background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.calendar-event-row{display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:1rem;align-items:start;padding:1rem;border-bottom:1px solid var(--line)}
.calendar-event-row:last-child{border:0}.calendar-event-row--late{border-left:3px solid #a53b24}
.calendar-event-date{font-size:.8rem;font-weight:650}.calendar-event-date small{display:block;font-size:.72rem;color:var(--slate);font-weight:400}
.calendar-event-title{display:block;font-weight:650;overflow-wrap:anywhere;margin-top:.2rem}
.calendar-status{padding:.2rem .55rem;border-radius:5px;font-size:.7rem;background:#f0f2f6;max-width:150px}
.calendar-event-row--late .calendar-status{background:#fff1ec;color:#8a2b15}
.calendar-warnings,.calendar-upcoming{margin-top:1.6rem}.calendar-warnings .head-row,.calendar-upcoming .head-row{margin-bottom:.5rem}
.calendar-warnings>p{font-size:.8rem}.calendar-warning-counts{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.6rem;padding:0;margin:0}
.calendar-warning-counts a{display:flex;flex-direction:column;padding:.8rem;background:#fff;border:1px solid var(--line);border-radius:9px;color:var(--slate);font-size:.72rem;height:100%}
.calendar-warning-counts strong{font-size:1.35rem;color:var(--ink)}.calendar-warning-counts .calendar-warning-active{border-color:#d7ac6b;background:#fff9ed;color:#714600}
.calendar-no-events{padding:1.2rem;background:#fff;border:1px dashed #b6c0d0;border-radius:var(--radius);color:var(--slate)}
.calendar-description{white-space:pre-wrap;overflow-wrap:anywhere}.calendar-detail dd{margin:0 0 .8rem;overflow-wrap:anywhere}.calendar-detail dt{font-size:.75rem;color:var(--slate)}
.wrap--calendar a:focus-visible,.wrap--calendar button:focus-visible,.wrap--calendar summary:focus-visible,.calendar-scroll:focus-visible{outline:3px solid var(--blue);outline-offset:3px}
@media(max-width:1150px){.dashboard-layout{grid-template-columns:minmax(0,1fr) 220px;gap:1rem}.calendar-preview{grid-template-columns:1fr}.calendar-month--compact .calendar-grid td{height:38px}.calendar-month--compact .calendar-date{justify-content:space-between;flex-wrap:nowrap;padding:.1rem .6rem}.calendar-filters form{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){.navspaces{flex-wrap:wrap}.dashboard-layout{grid-template-columns:1fr}.calendar-preview{grid-template-columns:1fr}.dashboard-modules .grid{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-warning-counts{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-filters form{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-event-row{grid-template-columns:1fr;gap:.45rem}.calendar-event-date small{display:inline;margin-left:.5rem}.calendar-period-nav h2{font-size:1rem}.calendar-period-nav .btn{padding:.4rem .6rem}}
@media(max-width:420px){.dashboard-modules .grid,.calendar-filters form{grid-template-columns:1fr}.calendar-filter-actions{padding-top:.4rem}}
@media(max-width:760px){.calendar-shell .topbar{gap:.65rem}.calendar-shell .mainnav{order:3;flex-basis:100%;gap:.15rem}.calendar-shell .mainnav a{padding:.35rem .45rem;font-size:.8rem}.calendar-shell .who{order:4}.calendar-shell .navtools{margin-left:auto}}
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.3rem}
.card+.card{margin-top:1rem}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.8rem;margin:1rem 0}
.cards .card{margin:0}
.cards--compact .card{padding:.9rem}
.head-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}
/* Les camemberts de dépenses : autant de blocs que de business plans, alignés
   tant qu'ils tiennent, repliés ensuite. */
.tartes{display:flex;flex-wrap:wrap;gap:1.2rem;margin:1rem 0}
.tarte-bloc{flex:1 1 190px;min-width:0;max-width:260px}
.tarte-bloc h4{margin:0 0 .4rem;font-size:.9rem}
.tarte{display:block;margin:0 auto .4rem}
.tbl--nu td{padding:.15rem .3rem;border:0;font-size:.8rem}
.tbl--nu svg{vertical-align:-1px;margin-right:.3rem}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem}
.card--link{display:flex;flex-direction:column;justify-content:space-between;min-height:110px;color:var(--ink)}
.card--link:hover{border-color:var(--blue);text-decoration:none;box-shadow:0 8px 28px rgba(11,58,230,.14)}
.sales-sections{margin:1rem 0}
.sales-property-summary p{margin:.3rem 0}
.crm-pipeline{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:.8rem;margin-top:1rem;align-items:start}
.crm-stage{min-width:0;padding:1rem}.crm-stage__list{list-style:none;margin:.6rem 0 0;padding:0}.crm-stage__list li{padding:.55rem 0;border-top:1px solid var(--line)}
.crm-actions,.crm-history{margin-top:1rem}.crm-actions .card,.crm-history .card{margin:0}.crm-history ul{padding-left:1.1rem}
.publication-preview{margin-top:1rem}.publication-missing{border-left:3px solid var(--err);background:#fdecea;padding:.7rem 1rem;margin:1rem 0}.publication-missing ul{margin:.35rem 0 0}
.arw{color:var(--blue);font-weight:700;margin-top:.6rem}
.placeholder p{margin:.2rem 0}
.resource-meta{display:flex;flex-wrap:wrap;gap:.25rem 1rem;font-size:.86rem;color:var(--slate)}
.resource-contacts{margin-top:.8rem;border-top:1px solid var(--line);padding-top:.7rem}
.resource-contacts summary{cursor:pointer;font-weight:700}
.resource-contacts ul{margin:.6rem 0 0;padding-left:1.2rem}
.mobile-actions{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;margin:.45rem 0}
.review-row{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(14rem,2fr);gap:1rem}
@media(max-width:700px){.review-row{grid-template-columns:1fr}}

/* Formulaires */
.stack{display:flex;flex-direction:column;gap:.9rem}
.stack--tight{gap:.35rem}
.narrow{max-width:460px}
label{font-weight:600;font-size:.9rem;display:flex;flex-direction:column;gap:.35rem}
/* MAX-WIDTH:100% : sans lui, un <select> prend la largeur de sa PLUS LONGUE
   option — « M3+M2 — 5 maisons · 42 m (reste 3 m) » — et pousse sa colonne de
   grille au-dela de la boite, qu'il faut alors lire de gauche a droite. */
input,select{font:inherit;padding:.6rem .7rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;max-width:100%}
input:focus,select:focus{outline:2px solid var(--blue);border-color:var(--blue)}
.check{flex-direction:row;align-items:center;gap:.5rem;font-weight:500}
.check input{width:auto}
.btn{background:var(--blue);color:#fff;border:none;border-radius:var(--radius-sm);padding:.65rem 1.1rem;font-weight:700;cursor:pointer}
.btn:hover{background:#082daf}
.btn--block{width:100%}
/* LE BOUTON SECONDAIRE EXISTAIT DANS LE HTML, PAS DANS LA FEUILLE. « btn--ghost »
   etait ecrit a soixante-cinq endroits — Annuler, Retour, Selectionner — et
   sortait bleu plein, exactement comme l'action principale a cote de laquelle il
   se trouve. Deux boutons identiques cote a cote, c'est un clic de travers. */
.btn--ghost{background:transparent;color:var(--blue);box-shadow:0 0 0 1px var(--line) inset}
.btn--ghost:hover{background:var(--mist)}
.auth-card{padding:1.8rem}
.fineprint{font-size:.8rem;color:var(--slate);margin:1rem 0 0}
.resend{margin-top:.8rem;text-align:center}
.linkback{font-size:.9rem}

/* Tableau */
.tbl{width:100%;border-collapse:collapse}
.tbl th,.tbl td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--line);font-size:.9rem}
.tbl th{color:var(--slate);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}

/* Upload / formulaires module */
.uprow{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin-bottom:1rem}
.uprow input[type=file]{flex:1;min-width:220px}
.newprop{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:1rem}
.newprop input,.newprop select{flex:1;min-width:130px}
/* MINMAX(0,1FR) ET NON 1FR. « 1fr » vaut minmax(AUTO,1fr) : la colonne ne
   descend jamais sous le min-content de ce qu'elle porte, et le min-content d'un
   <select> est sa PLUS LONGUE option. Une option comme « 3 mitoyennes + 2
   mitoyennes — 5 maisons · 39,50 m (reste 2,50 m) » elargissait donc la grille,
   la boite, et forcait a lire le formulaire de gauche a droite. */
.form2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.9rem}
@media(max-width:560px){.form2{grid-template-columns:minmax(0,1fr)}}
textarea{font:inherit;padding:.6rem .7rem;border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;resize:vertical}
.linkbtn--danger{color:var(--err)}

/* Étiquettes (tags) */
.mt{margin-top:1.2rem}
.nowrap{white-space:nowrap}
.fieldset-title{display:block;font-weight:700;font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--slate);margin-bottom:.4rem}
.chips{display:flex;flex-wrap:wrap;gap:.4rem}
.chip{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .75rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);font-size:.88rem;font-weight:600}
.chip:hover{border-color:var(--blue);text-decoration:none}
.chip--on{background:var(--blue);border-color:var(--blue);color:#fff}
.chip__n{font-size:.75rem;opacity:.7}
.tag{display:inline-block;padding:.12rem .55rem;border-radius:999px;font-size:.76rem;font-weight:600;margin:.1rem .2rem .1rem 0}
.tag--projet{background:#e8edff;color:#0b3ae6}
.tag--doctype{background:#eef1f6;color:#5b6472}
.tagpick{display:flex;flex-direction:column;gap:.25rem;max-height:170px;overflow:auto;border:1px solid var(--line);border-radius:var(--radius-sm);padding:.5rem;margin-bottom:.5rem}
.tagpick .check{font-size:.88rem}
.tagedit{display:inline-block;margin-right:.6rem}
.tagedit summary{cursor:pointer;color:var(--blue);font-size:.88rem}
.tagedit__form{background:var(--mist);border:1px solid var(--line);border-radius:var(--radius-sm);padding:.8rem;margin-top:.5rem;min-width:240px}
.tagrow{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin-bottom:.3rem}
.tagrow input[type=text]{flex:1;min-width:180px}
.btn--sm{padding:.4rem .8rem;font-size:.85rem}
.hint{font-size:.78rem;color:var(--slate);display:block;margin:.2rem 0 .4rem}
.tag--metier{background:#eaf6ec;color:#0a7d33}
.btnrow{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.split2{display:grid;grid-template-columns:2fr 1fr;gap:1rem;align-items:start}
@media(max-width:860px){.split2{grid-template-columns:1fr}}
.uprow select,.uprow input[type=text]{min-width:150px}
.mt-s{margin-top:.4rem}
.person{display:grid;grid-template-columns:1.1fr 1.1fr 1fr;gap:1rem;padding:.9rem 0;border-top:1px solid var(--line);align-items:start}
.person:first-of-type{border-top:none}
@media(max-width:860px){.person{grid-template-columns:1fr}}
.person__contract{background:var(--mist);border-radius:var(--radius-sm);padding:.7rem;display:flex;flex-direction:column;gap:.4rem}
.person__contract label{font-size:.8rem}
/* Consultations : barre d'état par soumissionnaire (orange = négociation, vert = attribué) */
.statusbar{display:inline-block;width:8px;height:34px;border-radius:4px;background:var(--line);vertical-align:middle}
.statusbar--submitted{background:#9aa4b2}
.statusbar--negotiation{background:#e08a00}
.statusbar--awarded{background:#0a7d33}
.statusbar--declined{background:#d8dbe2}
.badge{display:inline-block;padding:.15rem .6rem;border-radius:999px;font-size:.78rem;font-weight:700;background:var(--mist);color:var(--slate)}
.badge--sent{background:#e8edff;color:#0b3ae6}
.badge--negotiation{background:#fff1da;color:#8a4b00}
.badge--awarded{background:#e6f5ea;color:#0a7d33}
.badge--closed{background:#eceff3;color:#5b6472}
.badge--warning{background:#fff1da;color:#8a4b00}
.badge--danger{background:#fde2e2;color:#8b1d1d}
/* Timesheets : saisie compacte au quart d’heure et tableau lisible sur mobile. */
.timesheet-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem}
.timesheet-fields--when{grid-template-columns:repeat(4,minmax(0,1fr))}
.timesheet-table td{vertical-align:top}.timesheet-description{min-width:14rem;white-space:pre-wrap;overflow-wrap:anywhere}
.timesheet-status--draft{background:#eef1f6;color:#5b6472}.timesheet-status--submitted{background:#e8edff;color:#0b3ae6}
.timesheet-status--approved,.timesheet-status--closed{background:#e6f5ea;color:#0a7d33}.timesheet-status--rejected{background:#fde2e2;color:#8b1d1d}
@media(max-width:850px){.timesheet-fields,.timesheet-fields--when{grid-template-columns:repeat(2,minmax(0,1fr))}.timesheet-entry{padding:1rem}}
@media(max-width:520px){.timesheet-fields,.timesheet-fields--when{grid-template-columns:1fr}.timesheet-table{min-width:960px}}
.timesheet-review-list{display:grid;gap:1rem}.timesheet-review-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(17rem,1fr);gap:1rem;padding:1rem;border:1px solid var(--line);border-radius:var(--radius-sm)}
.timesheet-review-row h3,.timesheet-review-row p{margin:.15rem 0}.timesheet-review-actions{display:flex;flex-direction:column;gap:.7rem;align-items:stretch}
.timesheet-team-filter{display:flex;align-items:end;gap:.75rem;flex-wrap:wrap}.timesheet-team-filter label{min-width:13rem}.timesheet-team-totals strong{display:block;margin:.25rem 0}
.timesheet-week-grid{display:grid;grid-template-columns:repeat(7,minmax(13rem,1fr));gap:.7rem;overflow-x:auto;padding-bottom:.35rem}.timesheet-day{display:flex;flex-direction:column;min-height:13rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#f8f9fd;padding:.7rem}.timesheet-day>header,.timesheet-day>footer{display:flex;justify-content:space-between;gap:.5rem}.timesheet-day>footer{margin-top:auto;padding-top:.65rem;border-top:1px solid var(--line)}.timesheet-day-entry{display:grid;gap:.15rem;margin:.55rem 0;padding:.55rem;border-left:4px solid #98a2b3;border-radius:.35rem;background:var(--white)}.timesheet-day-entry--submitted{border-left-color:#2452d6}.timesheet-day-entry--approved,.timesheet-day-entry--closed{border-left-color:#208c55}.timesheet-day-entry--rejected{border-left-color:#c33}
@media(max-width:760px){.timesheet-review-row{grid-template-columns:1fr}.timesheet-team-filter label{min-width:100%}}
.timesheet-own-rate{display:inline-block;margin:.2rem 0 1rem;padding:.55rem .8rem;border:1px solid var(--line);border-radius:999px;background:#fff}
.timesheet-consultant-fields{display:none;gap:.8rem;margin-top:.8rem}.timesheet-consultant-config:has(input[name="timesheet_consultant"]:checked) .timesheet-consultant-fields{display:grid}
.communication-quotas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin:1rem 0}.communication-quota{display:flex;flex-direction:column;gap:.3rem}.communication-quota strong{font-size:1.6rem}.communication-quota small{color:var(--muted)}@media(max-width:600px){.communication-quotas{grid-template-columns:1fr}}
.timesheet-rate-card .timesheet-fields{align-items:end}.timesheet-field-action{display:flex;align-items:end;padding-bottom:.05rem}
.timesheet-close-filter{display:grid;grid-template-columns:minmax(14rem,2fr) minmax(10rem,1fr) auto;gap:1rem;align-items:end}
.timesheet-month-nav{margin-top:1rem;justify-content:center}.timesheet-close-totals{display:flex;gap:1rem;flex-wrap:wrap;font-size:1.1rem}
.timesheet-final-approval{margin-top:1.2rem;padding:1rem;border:2px solid #2441df;border-radius:var(--radius-sm);background:#f4f6ff}
@media(max-width:700px){.timesheet-close-filter{grid-template-columns:1fr}.timesheet-field-action .btn{width:100%}.timesheet-close-totals{flex-direction:column;gap:.25rem}}
.access-summary{margin-bottom:1.2rem}.access-summary .head-row{align-items:flex-start}
.access-overdue{background:#fff7f7}
.portal-area{border-top:3px solid var(--blue)}
.portal-area__scope{margin:0 0 .35rem;color:var(--blue);font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.scope-note{margin:-.4rem 0 1rem;padding:.75rem 1rem;border-left:4px solid var(--blue);background:var(--mist);color:var(--slate)}
.pre{white-space:pre-wrap}
.small{font-size:.82rem}
.best{color:#0a7d33}
.ok{color:#0a7d33;font-weight:600}
.err{color:var(--err);font-weight:600}
.mini{padding:.25rem .4rem;font-size:.82rem}
.btn--lg{padding:.8rem 1.4rem;font-size:1rem}
.btn--icon{display:inline-flex;align-items:center;justify-content:center;width:2.1rem;padding:.4rem 0}
.doclist{margin:0;padding-left:1.1rem}
.doclist li{margin:.2rem 0}
.tag--corps{background:#fff2df;color:#8a4b00}
.tag--lot{background:#f0e8ff;color:#5b21b6}
.tagpick--wide{max-height:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.2rem .8rem}
.form3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem}
@media(max-width:860px){.form3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.form3{grid-template-columns:minmax(0,1fr)}}
.totals{display:flex;gap:1.4rem;flex-wrap:wrap;margin-top:.8rem;padding-top:.8rem;border-top:1px solid var(--line);font-size:.92rem}
.invoice-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:1rem}
.invoice-summary div{display:flex;flex-direction:column;gap:.2rem}
.allocation-table{min-width:150rem}
.allocation-table select,.allocation-table input{min-width:9rem}
.allocation-table td{vertical-align:top}
.allocation-balance{display:flex;gap:1.5rem;flex-wrap:wrap;padding:.8rem;border-radius:var(--radius-sm);background:var(--mist)}
.allocation-balance--ok{background:#e6f5ea;color:#0a6130}
.allocation-balance--error{background:#fff1da;color:#8a4b00}
.lot{border:1px solid var(--line);border-radius:var(--radius-sm);margin:.4rem 0;padding:.5rem .7rem}
.lot summary{cursor:pointer}
.lot__body{padding-top:.6rem}

/* Messages */
.flash{background:#fff7d6;border:1px solid #f0dd8a;border-radius:var(--radius-sm);padding:.6rem .9rem;margin-bottom:1rem;font-size:.9rem}


/* ---------- GEOC — Search, Select and Sign ---------- */
.tblwrap{overflow-x:auto}
/* Colonne de cases à cocher : le titre se centre AU-DESSUS de la case. Aligné
   à droite (.num), il se décalait de la case, elle-même posée à gauche par le
   flex de .check — on ne savait plus quelle colonne on cochait. */
/* La ligne « tout » : elle sert la colonne au-dessus, elle ne fait pas partie
   des données — assez discrète pour qu'on ne la lise pas comme un bien. */
.toutrow td{padding:.15rem .5rem;border-bottom:1px solid var(--line)}
.tbl .tout{font-size:.75rem;text-decoration:underline}
/* La marque d'une réponse posée. Verte, discrète : elle se lit d'un coup d'œil
   sur dix onglets, et le cercle vide dit ce qui manque au survol. */
/* Un champ et son unité : « 2.000 » et « € » à côté. L'unité n'entre jamais
   dans le champ — elle repartirait au serveur avec le nombre. */
.champ-unite{display:flex;align-items:center;gap:.4rem}
.champ-unite input{flex:1 1 auto;min-width:0}
.champ-unite i{font-style:normal;color:var(--slate);font-size:.85rem;white-space:nowrap}

/* Le choix « rythme commun / rythme par scénario » : les deux boutons radio
   sont frères des deux blocs, et c'est le CSS qui montre celui qui correspond —
   la console interdit le JavaScript en ligne, elle n'interdit pas :checked. */
.rychoix{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .5rem;margin:.2rem 0 .6rem}
.rychoix > label{margin-right:1.2rem;font-weight:500;cursor:pointer}
.rychoix > input[type=radio]{width:auto;margin:0}
.rychoix > .ry-bloc{flex-basis:100%;display:none;margin-top:.3rem}
.rychoix > input[value="0"]:checked ~ .ry-g,
.rychoix > input[value="1"]:checked ~ .ry-s{display:block}
/* Le bloc commun garde sa grille meme quand il devient visible : « display:block »
   ecraserait le « display:grid » de .form2 sans cette reprise. */
.rychoix > input[value="0"]:checked ~ .ry-g.form2{display:grid}
/* Une ligne par scenario : les deux memes parametres cote a cote. Lus en
   colonnes, on comparait les unites du premier aux mois du second. */
.rysc{margin-bottom:.4rem}
/* Rempli, mais pas encore valide : ni vert ni vide. La nuance est le sujet. */
.pret{color:var(--slate);font-weight:700}
/* Relancer se distingue d'effacer : meme taille, mais l'un ne detruit rien. */
.pilerap__r{padding:.15rem .4rem;line-height:1}
/* Son nom mene a son profil : souligne au survol, pour qu'on voie que ca clique. */
.who__moi{color:inherit;text-decoration:none;font-weight:600}
.who__moi:hover{text-decoration:underline}
.who__role{color:var(--slate)}
/* Les deux fichiers d'une atmosphere, cote a cote : l'ambiance se regarde, la
   facade se mesure — on doit les voir ensemble pour juger qu'ils vont bien. */
.archi{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}
.archi__bloc h4{margin:.2rem 0 .4rem}
.archi__img{max-width:100%;height:auto;border-radius:var(--radius-sm);display:block;
            margin-bottom:.3rem}
.form1{display:grid;gap:.5rem;margin-bottom:.9rem}
.form1 textarea{width:100%;font:inherit;padding:.4rem}
/* La grille de commercialisation : le nom du bien prend la place, les colonnes
   de chiffres ne sont plus larges de leur seul en-tete. */
.grille th.vert{height:8.5rem}
.grille th.vert span small{font-weight:400;opacity:.75}
/* L'echeancier deplie, sous sa ligne : un tableau nu, sans cadre, pour qu'on
   voie qu'il appartient a la ligne du dessus. */
.tbl tr.detail > td{background:rgba(0,0,0,.03);padding:.3rem .6rem .6rem}
.tbl--nu{width:100%;font-size:.85rem}
.tbl--nu td,.tbl--nu th{border:0;padding:.15rem .5rem}
.tbl--nu tfoot th{border-top:1px solid rgba(0,0,0,.15)}

/* UN BOUTON DESACTIVE DOIT EN AVOIR L'AIR (user, 30/08/2026) : sans style, il
   restait bleu et cliquable a l'oeil — on cliquait, rien ne se passait, et on
   concluait que le bouton etait casse. */
.btn:disabled,.btn[disabled]{background:var(--line);color:var(--slate);
  border-color:var(--line);box-shadow:none;cursor:not-allowed}
.btn:disabled:hover,.btn[disabled]:hover{background:var(--line)}
.ok{color:var(--ok);font-weight:700}
.todo{color:var(--slate);font-weight:700}
.etapes .ok,.etapes .todo{margin-left:.15rem}
/* Titre de colonne à la verticale, lu de bas en haut. writing-mode plutôt qu'une
   rotation : la cellule prend alors la BONNE largeur toute seule, là où un
   transform laisse la place de l'horizontale et ne fait rien gagner. */
.tbl td.nowrap{white-space:nowrap}
/* LE CALENDRIER DES PHASES : une case par mois. Pas de barre de largeur
   calculée — la politique de sécurité interdit le style posé sur la ligne, et
   une case par mois se lit de toute façon mieux qu'un trait proportionnel. */
.gantt th.gantt__t{padding:.2rem 0;font-size:.7rem;color:var(--slate);font-weight:400;min-width:1.1rem}
.gantt td.gantt__c{padding:0;min-width:1.1rem;border-left:1px solid rgba(0,0,0,.06)}
.gantt td[class*=gantt__c--]{background:var(--slate)}
.gantt td.gantt__c--etudes,.gantt td.gantt__c--preparatoire{background:#4b7bec}
.gantt td.gantt__c--permis{background:#c0362c}
.gantt td.gantt__c--commercial{background:#8e44ad}
.gantt td.gantt__c--voirie{background:#e08e0b}
.gantt td.gantt__c--construction{background:#1e7a46}
/* Une case a cocher et son libelle qui ne se separent pas en fin de ligne. */
.chx{display:inline-flex;align-items:center;gap:.3rem;white-space:nowrap}
/* Les ensembles constructifs : une ligne par bloc, jamais par maison. */
.blocs{list-style:none;margin:.3rem 0 .8rem;padding:0}
.blocs li{padding:.2rem 0}

/* Un compte qui ne tombe pas juste se voit : étiquette et total en rouge. */
.tag--alerte{background:#fdecea;color:#c0362c}
.mauvais{color:#c0362c}
.tbl th.vert{vertical-align:bottom;padding:.4rem .15rem;height:7rem}
/* Un titre debout au-dessus d'une colonne de chiffres se centre sur elle : le
   chiffre est cale a droite, le titre tourne n'a pas de cote. */
.tbl th.num.vert{text-align:center}
.tbl th.vert span{writing-mode:vertical-rl;transform:rotate(180deg);display:inline-block;
  text-align:left;letter-spacing:.03em}
.tbl th.ctr,.tbl td.ctr{text-align:center;white-space:nowrap}
.tbl td.ctr .check{justify-content:center}
.tbl td.num,.tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.sss-phases{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:1.2rem}
@media(max-width:700px){.sss-phases{grid-template-columns:repeat(2,1fr)}}
.sss-phase{background:#fff;padding:.7rem .85rem;display:flex;flex-direction:column;gap:.15rem;text-decoration:none;color:var(--ink)}
.sss-phase:hover{background:var(--mist)}
.sss-phase.on{background:var(--mist);box-shadow:inset 3px 0 0 var(--blue)}
.sss-phase__n{font-size:.72rem;color:var(--slate);font-variant-numeric:tabular-nums}
.sss-phase__t{font-weight:700}
.sss-phase__q{font-size:.8rem;color:var(--slate)}
.sss-demo{background:var(--mist);border:1px solid var(--line);border-radius:var(--radius-sm);padding:.6rem .8rem;font-size:.9rem;margin:0 0 1rem}
.sss-rejet{border-left:3px solid var(--err);padding-left:.9rem}
.sss-rejet ul{margin:.4rem 0 0;padding-left:1.1rem}
.sss-calcul{margin:0;padding-left:1.2rem;display:flex;flex-direction:column;gap:.45rem}
.sss-lettre{white-space:pre-wrap;font:inherit;background:var(--mist);border:1px solid var(--line);border-radius:var(--radius-sm);padding:.9rem 1rem;margin:.5rem 0;overflow-x:auto}

/* Boutons d'outils dans la barre : pleins, a droite, avant le compte. */
.navtools{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}
.navbtn{display:inline-flex;align-items:center;gap:.35rem;padding:.45rem .9rem;border-radius:var(--radius-sm);background:var(--blue);color:#fff;font-weight:700;letter-spacing:.02em;white-space:nowrap}
.navbtn:hover{filter:brightness(1.08);text-decoration:none;color:#fff}
.pdf-reader{width:min(96vw,1200px);height:min(94vh,900px);padding:0;border:0;border-radius:var(--radius);box-shadow:0 18px 60px rgba(10,15,28,.35)}
.pdf-reader::backdrop{background:rgba(10,15,28,.7)}
.pdf-reader__head,.pdf-reader__nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.8rem 1rem;background:#fff}
.pdf-reader__head{border-bottom:1px solid var(--line)}
.pdf-reader__nav{border-top:1px solid var(--line);justify-content:center}
.pdf-reader__body{height:calc(100% - 122px);overflow:auto;padding:1rem;background:var(--mist);text-align:center}
.pdf-reader__body canvas{display:block;max-width:100%;height:auto;margin:auto;background:#fff;box-shadow:var(--shadow)}
.document-upload-preview{display:grid;grid-template-columns:minmax(16rem,1fr) minmax(0,1fr);gap:1rem;align-items:start}
.document-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));gap:.8rem}
.document-card{min-width:0;margin:0}
.document-card figcaption{margin-top:.35rem;font-size:.82rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.document-thumb{display:flex;width:100%;min-width:0;flex-direction:column;gap:.35rem;padding:.45rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;color:var(--ink);text-decoration:none;text-align:left;cursor:pointer}
.document-thumb:hover{border-color:var(--blue);text-decoration:none}
.document-thumb__visual{position:relative;display:flex;align-items:center;justify-content:center;height:8rem;overflow:hidden;border-radius:calc(var(--radius-sm) - 2px);background:var(--mist)}
.document-thumb__visual img{display:block;width:100%;height:100%;object-fit:contain;background:#fff}
.document-thumb__placeholder{font-weight:800;letter-spacing:.08em;color:var(--slate)}
.document-thumb__visual img+ .document-thumb__placeholder{display:none}
.document-thumb[data-preview-status="A_GENERER"] .document-thumb__visual img,
.document-thumb[data-preview-status="ERREUR"] .document-thumb__visual img{display:none}
.document-thumb[data-preview-status="A_GENERER"] .document-thumb__visual img+ .document-thumb__placeholder,
.document-thumb[data-preview-status="ERREUR"] .document-thumb__visual img+ .document-thumb__placeholder{display:block}
.document-thumb__status{min-height:1.2em;font-size:.75rem}
@media(max-width:760px){.document-upload-preview{grid-template-columns:1fr}}
.pastille{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;border-radius:50%;color:#fff;font-size:.72rem;font-weight:700;vertical-align:middle;margin-right:.35rem}

/* ---------- GEOC — variantes retenues et production du dossier ---------- */
.sss-retenue td{background:#fffbe6;font-weight:600}
.sss-retenue td:first-child{box-shadow:inset 3px 0 0 var(--blue)}
.prod-jauge{height:.75rem;background:var(--mist);border-radius:999px;overflow:hidden;border:1px solid var(--line)}
/* ⚠️ LE DEGRADE EST CALE SUR LA PISTE, PAS SUR LA PARTIE REMPLIE (user,
   31/08/2026). La barre doit passer du rouge au vert AVEC le %, donc a 25 % on
   doit voir le premier quart d'un degrade rouge→vert, pas un degrade complet
   comprime dans un quart de barre. C'est le role du « background-size » pose
   par chaque classe de largeur, plus bas : 100/pct. Sans lui, toutes les barres
   se ressembleraient — rouge a gauche, vert a droite, quel que soit
   l'avancement, ce qui ne dirait plus rien. */
.prod-jauge i{display:block;height:100%;width:0;
  background:linear-gradient(90deg,var(--err) 0%,#F59E0B 50%,#16A34A 100%) no-repeat left center;
  transition:width .4s ease,background-size .4s ease}
.prod-jauge.fini i{background:#16A34A}
.prod-jauge.echec i{background:var(--err)}
.prod-pct{font-variant-numeric:tabular-nums;font-weight:700;font-size:1.6rem;line-height:1}
.prod-liste{list-style:none;margin:.8rem 0 0;padding:0;display:flex;flex-direction:column;gap:.15rem}
.prod-liste li{display:grid;grid-template-columns:1.4rem 1fr auto;gap:.6rem;align-items:baseline;padding:.3rem .4rem;border-radius:var(--radius-sm)}
.prod-liste li[data-etat="EN_COURS"]{background:var(--mist)}
.prod-liste li[data-etat="ECHEC"],.prod-liste li[data-etat="IMPOSSIBLE"]{background:#fff1f1}
.prod-liste .pm{font-size:.82rem;color:var(--slate);grid-column:2/-1}
.prod-liste .ps{font-size:.78rem;color:var(--slate);font-variant-numeric:tabular-nums}

/* ---------- GEOC — scénarios exacts ----------
   S1 est fixe. Pour S2, le glisser-déposer ne fait que réordonner les groupes
   de la composition choisie ; sans JavaScript, le champ texte reste utilisable. */
.sc-jeton{display:inline-flex;flex-direction:column;gap:.1rem;padding:.45rem .7rem;border-radius:var(--radius-sm);background:var(--blue);color:#fff;cursor:grab;user-select:none;position:relative;line-height:1.15}
.sc-jeton small{font-size:.72rem;opacity:.85;white-space:nowrap}
.sc-jeton.sc-porte{opacity:.45}
.sc-rangee{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;min-height:3.4rem;padding:.5rem;border:2px dashed var(--line);border-radius:var(--radius-sm);background:var(--mist)}
.sc-rangee.sc-survol{border-color:var(--blue);background:#eef2ff}
.sc-rangee:empty::after{content:'Choisissez une composition ci-dessus';color:var(--slate);font-size:.85rem}
.sc-bilan{font-size:.85rem;margin:.35rem 0 0;font-variant-numeric:tabular-nums}
.sc-scenario{margin-bottom:1rem}
.sc-scenario--fixed{border-bottom:1px solid var(--line);padding-bottom:.7rem}
.sc-sequence{font-size:1.05rem;margin:.4rem 0}
.sc-target-form{display:flex;flex-wrap:wrap;gap:.7rem;align-items:end;margin:.5rem 0 1rem}
.sc-target-form label{margin:0;min-width:15rem}
.sc-choices{border:0;padding:0;margin:.7rem 0 1rem}
.sc-choices legend{font-weight:700;margin-bottom:.4rem}
.sc-choice{display:flex;gap:.65rem;align-items:flex-start;margin:.35rem 0;padding:.55rem .65rem;border:1px solid var(--line);border-radius:var(--radius-sm);cursor:pointer}
.sc-choice:has(input:checked){border-color:var(--blue);background:#eef2ff}
.sc-choice input{width:auto;margin-top:.2rem}
.sc-choice span{display:flex;flex-direction:column;gap:.15rem}
.sc-choice small{color:var(--slate)}
.sc-order{margin:1rem 0}
/* Sans JS, seul le champ texte est offert ; avec JS, il passe en second rôle. */
.sc-rangee,.sc-actif .sc-repli{display:none}
.sc-actif .sc-rangee{display:flex}
.sc-actif .sc-champ{opacity:.75;font-size:.85rem}
/* Fil des trois étapes du configurateur, entre la phase 1 et la phase 2. */
.etapes{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:.2rem 0 1rem;font-size:.9rem}
/* Le retour au flux se pose AU-DESSUS des onglets, a droite : il quitte le
   dossier, il n'en fait pas partie. */
.etapes__retour{margin:.1rem 0 .3rem;text-align:right}
/* LA TRACE DES RAPPORTS. Produit : le nom cliquable et sa date. Pas produit :
   gris, et sans lien — un lien mort vaut moins qu'un mot gris. Le bouton de
   production reste actif dans les deux cas, depuis n'importe quel onglet. */
.rapbar{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:.1rem 0 .5rem;font-size:.82rem}
.rapbar__lab{color:var(--slate);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem}
.rap{display:inline-flex;align-items:center;gap:.35rem;padding:.15rem .2rem .15rem .6rem;
     border:1px solid var(--line);border-radius:999px}
.rap i{font-style:normal;color:var(--slate);font-size:.72rem}
.rap b{font-weight:400;color:var(--slate)}
.rap--ok{border-color:#BBF7D0;background:#F0FDF4}
.rap--off{background:var(--mist)}
.rap--futur{opacity:.55;border-style:dashed}
.rap__go{border:0;background:none;cursor:pointer;color:var(--blue);font-size:.9rem;
         padding:.1rem .4rem;border-radius:999px}
.rap__go:hover{background:var(--line)}
/* LA VALIDATION PERIMEE. Le meme signe, l'autre couleur : ce qui a ete signe
   n'est plus tout a fait ce que le dossier dit. */
.etapes .perime{color:var(--err);margin-left:.15rem}
.valbar{margin:.1rem 0 .6rem;border:1px solid #FECACA;background:#FEF2F2;border-radius:var(--radius-sm);
        padding:.4rem .7rem;font-size:.86rem}
.valbar>summary{cursor:pointer;color:var(--err)}
.valbar__n{display:inline-block;min-width:1.4rem;text-align:center;background:var(--err);color:#fff;
           border-radius:999px;padding:0 .35rem;font-size:.78rem}
.valbar__bloc{margin:.6rem 0;padding-top:.5rem;border-top:1px solid #FECACA}
.valbar__t{margin:0 0 .3rem}
.valbar__l{margin:.2rem 0 .4rem;padding-left:1.1rem}
.valbar__l li{margin:.1rem 0}
.valbar__c{color:var(--slate)}
/* LE CATALOGUE : un lot de metre se replie, l'aller-retour Excel se detache du
   formulaire pour qu'on ne confonde pas « enregistrer » et « importer ». */
.cat-lot{margin:.4rem 0;border:1px solid var(--line);border-radius:var(--radius-sm);padding:.4rem .7rem}
.cat-lot>summary{cursor:pointer}
.cat-xl{margin-top:.9rem;padding-top:.7rem;border-top:1px dashed var(--line)}
/* Une description ou un titre d'annonce ne tient pas dans un tiers de ligne. */
.form3__large{grid-column:1 / -1}
.form3__large textarea{width:100%;font:inherit;padding:.4rem .5rem;border:1px solid var(--line);
  border-radius:var(--radius-sm)}

/* ---- LA ZONE DE GLISSER-DEPOSER (user, 01/09/2026) -------------------------
   Elle ENTOURE le champ natif, elle ne le remplace pas : cliquer ouvre toujours
   le selecteur de fichiers, et sans JavaScript il reste seul et fonctionne.
   Le pointille dit « on peut lacher ici » sans qu'il faille l'ecrire. */
.drop{display:inline-flex;align-items:center;gap:.6rem;flex-wrap:wrap;cursor:pointer;
      padding:.55rem .8rem;border:1.5px dashed var(--line);border-radius:var(--radius-sm);
      background:var(--white);transition:border-color .15s,background .15s}
.drop:hover{border-color:var(--blue)}
.drop__txt{color:var(--slate);font-size:.86rem}
/* Pendant le survol d'un fichier : c'est le seul moment ou la zone doit sauter
   aux yeux — sinon on lache a cote. */
.drop--on{border-color:var(--blue);border-style:solid;background:#F0F4FF}
.drop--on .drop__txt{color:var(--blue)}
/* UN REFUS SE VOIT. Un fichier avale en silence donnerait, trois clics plus
   loin, une erreur de serveur que personne ne rattache au glisser-deposer. */
.drop--refus{border-color:var(--err);background:#FEF2F2}
.drop--refus .drop__txt{color:var(--err)}
.etapes a,.etapes strong{padding:.3rem .7rem;border-radius:999px;border:1px solid var(--line)}
.etapes strong{background:var(--blue);color:#fff;border-color:var(--blue)}
/* Bascule « prix individuels » : en CSS seul, la politique de sécurité du site
   interdisant le script en ligne et ce réglage ne méritant pas un fichier JS. */
.bascule{display:inline-block;margin:0 0 .6rem .35rem;cursor:pointer}
.sc-bascule{vertical-align:middle}
.sc-individuels{display:none}
.sc-bascule:checked ~ .sc-individuels{display:block}

/* ---------- GEOC — fiche de parcelle au clic, et pastilles de rapport ----------
   La fiche est rendue par le serveur : pas de script, donc pas de dépendance à
   JavaScript pour un geste aussi central que choisir une parcelle. */
.popup{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:rgba(10,15,28,.55);padding:1rem}
.popup__boite{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.2rem 1.4rem;max-width:32rem;width:100%;max-height:90vh;overflow:auto}
.tbl--fiche th{text-align:left;width:9rem;color:var(--slate);font-weight:600}
/* ✓1 et ✓2 : un dossier déjà rapporté ne doit pas être retraité par distraction. */
.rap{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;height:1.5rem;padding:0 .3rem;border-radius:999px;font-size:.75rem;font-weight:700;margin-right:.2rem;background:#F59E0B;color:#fff}
.rap--2{background:#0a7d33}
.rap--non{background:transparent;color:var(--line);border:1px dashed var(--line)}

/* Cases a cocher des vues historiques : une grille, parce qu'une liste de 22
   lignes obligerait a faire defiler pour en cocher six. */
.cases-histo{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.35rem .9rem;margin:.5rem 0 .9rem}
.case-histo{display:flex;gap:.5rem;align-items:flex-start;font-size:.86rem;line-height:1.3}
.case-histo input{margin-top:.2rem;flex:none}
.case-histo code{font-size:.72rem}

/* La carte de selection : le curseur dit ce que le geste fera. Sans carte.js la
   classe n'est pas posee et le viseur du clic de selection reste, ce qui est
   exact — c'est alors le clic nu qui selectionne. */
[data-carte]{cursor:crosshair}
.carte--pilotee{cursor:grab}
.carte--prise,.carte--glisse{cursor:grabbing}

/* Le selecteur de prise, dans une cellule de tableau : il ne doit pas etirer
   la colonne au point de repousser le proprietaire hors de l'ecran. */
.sel-sm{font-size:.82rem;padding:.15rem .3rem;max-width:210px}

/* Le compte des vues historiques : vert quand il tombe juste, orange sinon. */
.ok-txt{color:#16a34a;font-weight:600}
.ko-txt{color:#ea580c;font-weight:600}
.btn--attention{box-shadow:0 0 0 2px #ea580c inset}

/* La carte de selection est pilotee au pointeur : le navigateur ne doit ni la
   glisser comme une image, ni happer le geste pour faire defiler la page, ni
   selectionner quoi que ce soit autour. Sans « touch-action: none », le geste
   est annule en cours de route sur pave tactile. */
[data-carte]{touch-action:none;-webkit-user-drag:none;user-select:none}

/* Le flux des quatre phases sur l'accueil : une colonne par phase, le compte en
   gros, le detail qui se deplie. */
.flux{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.6rem;margin:.6rem 0}
.flux__et{border:1px solid var(--line);border-radius:var(--radius-sm);padding:.55rem .7rem;background:#fff;
  /* min-width:0 : sans lui, un element de grille prend la largeur de son plus
     large contenu — une vignette de 420 px elargissait la colonne et debordait
     sur les voisines. */
  min-width:0}
.flux__carte{display:block;margin-top:.5rem}
.flux__carte img{display:block;width:100%;height:auto;border-radius:6px}
/* LA CARTE EN GRAND, SANS UNE LIGNE DE SCRIPT. Une cible d'ancre suffit :
   #carte-phase-2 affiche le calque, « # » le referme. La politique de securite
   du serveur interdit le JavaScript en ligne — autant s'en passer tout a fait. */
.cartepop{display:none}
.cartepop:target{display:flex;position:fixed;inset:0;z-index:80;align-items:center;
  justify-content:center;background:rgba(10,15,28,.72);padding:1rem}
.cartepop__b{background:#fff;border-radius:var(--radius);padding:.9rem;
  max-width:min(96vw,1340px);max-height:92vh;overflow:auto;box-shadow:0 18px 60px rgba(10,15,28,.35)}
.cartepop__b img{display:block;width:100%;height:auto;border-radius:6px}
/* La boite qui pose des questions, un peu plus etroite qu'une carte : une ligne
   de formulaire de 1340 px ne se lit pas — mais a 760 px, les deux listes de
   scenarios et les six champs du programme obligeaient a pousser la page de
   gauche a droite. */
.cartepop__b--form{max-width:min(96vw,1180px)}
/* La pile des rapports produits : un par ligne, du plus ancien au plus recent. */
.pilerap{margin:0 0 .5rem}
.pilerap:last-child{margin-bottom:0}
.pilerap .btn{margin-right:.3rem}
/* Le pictogramme d'effacement : carre, discret, a cote du telechargement. */
.pilerap__x{padding:.25rem .45rem;line-height:1;font-size:.95rem}
/* LES JAUGES, PAR PAS DE 5 %. La politique de securite du site interdit le style
   en ligne : une largeur calculee ne peut pas s'ecrire dans le HTML, elle se
   choisit ici.
   LE SELECTEUR PORTE « .prod-jauge i » : sans lui, « .prod-jauge i{width:0} »
   l'emportait en specificite et la barre restait desesperement vide pendant que
   le pourcentage, lui, montait. */
.prod-jauge i.jauge--0{width:0}
.prod-jauge i.jauge--5{width:5%;background-size:2000% 100%}
.prod-jauge i.jauge--10{width:10%;background-size:1000% 100%}
.prod-jauge i.jauge--15{width:15%;background-size:666.667% 100%}
.prod-jauge i.jauge--20{width:20%;background-size:500% 100%}
.prod-jauge i.jauge--25{width:25%;background-size:400% 100%}
.prod-jauge i.jauge--30{width:30%;background-size:333.333% 100%}
.prod-jauge i.jauge--35{width:35%;background-size:285.714% 100%}
.prod-jauge i.jauge--40{width:40%;background-size:250% 100%}
.prod-jauge i.jauge--45{width:45%;background-size:222.222% 100%}
.prod-jauge i.jauge--50{width:50%;background-size:200% 100%}
.prod-jauge i.jauge--55{width:55%;background-size:181.818% 100%}
.prod-jauge i.jauge--60{width:60%;background-size:166.667% 100%}
.prod-jauge i.jauge--65{width:65%;background-size:153.846% 100%}
.prod-jauge i.jauge--70{width:70%;background-size:142.857% 100%}
.prod-jauge i.jauge--75{width:75%;background-size:133.333% 100%}
.prod-jauge i.jauge--80{width:80%;background-size:125% 100%}
.prod-jauge i.jauge--85{width:85%;background-size:117.647% 100%}
.prod-jauge i.jauge--90{width:90%;background-size:111.111% 100%}
.prod-jauge i.jauge--95{width:95%;background-size:105.263% 100%}
.prod-jauge i.jauge--100{width:100%;background-size:100% 100%}
.pilerap__prod{margin:0 0 .5rem}
.pilerap__prod .prod-jauge{max-width:160px;margin:.2rem 0}
.prod-jauge--large{max-width:220px}
/* ⚠️ LA JAUGE DE QUOTA NE PREND PAS LE DEGRADE. Elle mesure ce qui est
   CONSOMME : une barre pleine y est une mauvaise nouvelle, et la peindre en
   vert dirait exactement le contraire de ce qu'elle mesure. */
.prod-jauge--quota i{background:var(--blue)}
.cartepop__b--form h4{margin:.6rem 0 .3rem}
.cartepop__x{float:right;font-weight:600;text-decoration:none;margin-left:.8rem}
/* ---- Cartes de suivi : le nom des dossiers posé sur l'image -----------------
   Les positions viennent du script : la politique de sécurité du site interdit
   le style en ligne, rien de dynamique ne peut donc vivre dans le HTML. */
.carteplan{position:relative;display:block}
.carteplan img{display:block;width:100%;height:auto;border:1px solid var(--line);
  border-radius:var(--radius-sm)}
.carteplan__c{position:absolute;inset:0;pointer-events:none}
.carteplan__p{position:absolute;pointer-events:auto;white-space:nowrap;text-decoration:none;
  font-size:.74rem;font-weight:600;line-height:1;color:#0b1220;background:rgba(255,255,255,.88);
  border-radius:4px;padding:.14rem .32rem;box-shadow:0 1px 3px rgba(10,15,28,.28)}
.carteplan__p:hover,.carteplan__p:focus{background:#fff;text-decoration:underline}
.carteplan__liste{margin:.6rem 0 .2rem;padding-left:1.4rem;font-size:.86rem;columns:2;
  column-gap:1.6rem}
.carteplan__liste li{margin:.15rem 0;break-inside:avoid}
.btnrow--carte{margin-bottom:.6rem;align-items:baseline}
/* La légende des couleurs. Elles répondent à opp_couleurs_phases() : changer
   l'une demande de changer l'autre, elles ne se déduisent pas l'une de l'autre. */
.legende{display:flex;flex-wrap:wrap;gap:.2rem 1rem;margin:.5rem 0 0}
.legende__e{display:inline-flex;align-items:center;gap:.3rem}
.pastille{display:inline-block;width:.85rem;height:.85rem;border-radius:50%;
  border:3px solid transparent;box-sizing:border-box}
.pastille--1{background:#0B3AE6;border-color:#0B3AE6}
.pastille--2{background:#16A34A;border-color:#16A34A}
.pastille--3{background:#EA580C;border-color:#EA580C}
.pastille--4{background:#7C3AED;border-color:#7C3AED}
.pastille--creux{background:#fff}
/* La ligne qu'on vient d'atteindre depuis une carte : sans repère, on cherche
   dans le tableau ce qu'on venait justement d'y désigner. */
.tbl tr:target>td{background:#fff8d8}
.flux__et--vide{opacity:.55}
.flux__et>summary{cursor:pointer;list-style:none;display:grid;grid-template-columns:auto 1fr auto;
  gap:.4rem;align-items:baseline}
.flux__et>summary::-webkit-details-marker{display:none}
.flux__n{font-size:.72rem;font-weight:700;color:var(--muted)}
.flux__t{font-weight:600}
.flux__c{font-size:1.5rem;font-weight:700;line-height:1;grid-row:1;grid-column:3}
.flux__q{grid-column:1/4;font-size:.76rem;color:var(--muted);line-height:1.25}
.flux__l{margin:.5rem 0 0;padding-left:1.1rem;font-size:.86rem}
.flux__l li{margin:.2rem 0}
/* Le journal : beaucoup de lignes courtes, on serre. */
.tbl--journal td,.tbl--journal th{font-size:.82rem;padding:.3rem .5rem;vertical-align:top}
.nowrap{white-space:nowrap}
.filtres{display:flex;gap:.8rem;align-items:flex-end;flex-wrap:wrap}
.filtres label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem}
.pager{display:flex;gap:.5rem;margin-top:.8rem}

/* ---- LE POP-UP, EN CSS PUR (user, 30/08/2026) -------------------------------
   La politique de securite du site interdit le JavaScript en ligne : une boite
   de dialogue pilotee par un script inline ne s'ouvrirait pas, sans le moindre
   message d'erreur. « :target » ouvre celle que l'adresse vise, et un lien vers
   #_ la referme. La validation reste une navigation ordinaire : elle marche au
   clavier, elle se met en signet, elle survit a un rechargement. */
.modal{display:none;position:fixed;inset:0;z-index:50;padding:2rem 1rem;overflow:auto}
/* ⚠️ « display:block » d'une feuille d'AUTEUR l'emporte sur l'attribut « hidden »,
   qui vient de la feuille du NAVIGATEUR. C'est ce qui permet de poser « hidden »
   sur la boite : sans feuille de style — la premiere visite apres une mise a
   jour, un reseau qui coupe — le pop-up reste ferme au lieu de s'etaler dans la
   page, et il s'ouvre normalement des que la feuille est la. */
.modal:target{display:block}
.modal__fond{position:fixed;inset:0;background:rgba(10,15,28,.55)}
.modal__boite{position:relative;max-width:860px;margin:0 auto;background:var(--white);
  border-radius:var(--radius);box-shadow:var(--shadow);padding:1.4rem}

/* Le mode d'emploi : discret a cote du titre, il ne doit pas concurrencer les
   boutons d'action de la meme ligne. */
.notice__btn{font-size:.8rem;color:var(--slate);text-decoration:none;border:1px solid var(--line);
  border-radius:999px;padding:.15rem .6rem;white-space:nowrap;align-self:center}
.notice__btn:hover{border-color:var(--blue);color:var(--blue)}
.notice h4{margin:1.1rem 0 .3rem}
.notice ul{margin:0;padding-left:1.1rem}
.notice li{margin:.3rem 0}
.analytical-reconciliation__form{min-width:18rem}
.analytical-reconciliation .searchbar{margin-bottom:1rem}

/* Une societe se distingue d'une personne d'un coup d'oeil dans le carnet. */
.tag--societe{background:var(--mist);border:1px solid var(--line);color:var(--slate)}

/* La boite des hypotheses generales. Ces marges etaient posees en « style= »
   dans le gabarit : la politique de securite du site interdit les styles en
   ligne, elles ne s'appliquaient donc pas. */
.bpop__t{margin:0 0 .2rem}
.bpop__s{margin:0 0 .8rem}
.bpop__n{margin:.3rem 0 .6rem}
.bpop__f{margin:.5rem 0 0}
.bpop__actions{margin-top:1rem}
.bp__t{margin-top:0}
/* Le lien vers le bareme : une ligne, pas une carte — il ne doit pas
   concurrencer la liste des dossiers qui le suit. */
.barlien{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin:.8rem 0 1.2rem}

/* ---- LE CALAGE D'UN PLAN DE MAISON TYPE (user, 31/08/2026) -------------------
   La toile porte l'image et ses marqueurs. Ceux-ci sont POSITIONNES PAR LE
   SCRIPT — la politique de securite interdit le style en ligne dans le HTML,
   mais un script a le droit de deplacer un element. Leur apparence, elle, reste
   ici : c'est de la feuille de style, et elle doit pouvoir changer sans
   toucher au script. */
.mplan__toile{position:relative;display:inline-block;max-width:100%;
  border:1px solid var(--line);overflow:hidden;background:#fff}
.mplan__toile img{display:block;max-width:100%;height:auto;cursor:crosshair;
  user-select:none;-webkit-user-drag:none}
.mplan__pt{position:absolute;width:13px;height:13px;margin:-7px 0 0 -7px;border-radius:50%;
  border:2px solid #fff;background:#dc2626;box-shadow:0 0 0 1px #dc2626;pointer-events:none}
.mplan__pt--2{background:#0b3ae6;box-shadow:0 0 0 1px #0b3ae6}
.mplan__rect{position:absolute;border:2px dashed #0b3ae6;background:rgba(11,58,230,.12);
  pointer-events:none}
.mplan-bloc{border-top:1px solid var(--line);padding-top:.9rem;margin-top:.9rem}
.form4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.7rem}
@media(max-width:900px){.form4{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Offres versionnees des cuisinistes et de Desco. Deux colonnes gardent les
   six cartes comparables ; sur telephone elles reprennent toute la largeur. */
.offres-titre{margin-top:0}
.offres-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.offre-fournisseur{min-width:0;border:1px solid var(--line);border-radius:var(--radius-sm);
  padding:1rem;background:#fff}
.offre-fournisseur h4,.offre-fournisseur h5{margin:.1rem 0}
.offre-active{padding:.55rem .65rem;border-radius:var(--radius-sm);background:var(--mist);
  font-size:.84rem}
.offre-form{display:grid;grid-template-columns:minmax(8rem,1fr) minmax(9rem,1fr);gap:.55rem;
  align-items:end;margin:.7rem 0}
.offre-form label{display:flex;flex-direction:column;gap:.2rem;font-size:.82rem}
.offre-form__large{grid-column:1/-1}
.offre-categorie{border-top:1px solid var(--line);padding:.7rem 0;margin-top:.45rem}
.offre-categorie .document-gallery{margin:.5rem 0}
.offre-doc-actions{display:flex;flex-wrap:wrap;gap:.2rem .8rem;margin-bottom:.5rem}
.offre-decision{display:flex;gap:.8rem;align-items:flex-end;flex-wrap:wrap;margin-top:.8rem}
.offre-decision form{display:flex;gap:.5rem;align-items:flex-end;flex-wrap:wrap}
.revision-progress{display:block;width:100%;height:1rem;accent-color:var(--blue)}
.revision-cell>summary{cursor:pointer;list-style-position:inside;margin-bottom:.6rem}
.revision-cell[open]>summary{padding-bottom:.65rem;border-bottom:1px solid var(--line)}
@media(max-width:900px){.offres-grid{grid-template-columns:1fr}}
@media(max-width:520px){.offre-form{grid-template-columns:1fr}.offre-form__large{grid-column:auto}}

/* Paramétrage transversal : la roue reste dans la zone compte et les rubriques
   se lisent comme des points d'entrée, pas comme un nouveau module métier. */
.settings-link{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;
  border:1px solid var(--line);border-radius:50%;text-decoration:none;color:var(--slate);font-size:1.1rem}
.settings-link:hover,.settings-link:focus,.settings-link.on{border-color:var(--blue);color:var(--blue);background:var(--mist)}
.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:.8rem}
.settings-card{position:relative;padding-left:3.4rem}
.settings-card__icon{position:absolute;left:1.1rem;top:1.05rem;font-size:1.25rem;color:var(--slate)}
.settings-card h3,.settings-value h3,.settings-connector h3{margin:.1rem 0}
.settings-value__head,.settings-connector{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start}
.settings-form{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(12rem,1fr);gap:.7rem;align-items:end;margin-top:.8rem}
.settings-form label{display:flex;flex-direction:column;gap:.25rem}
.settings-form__actions{display:flex;align-items:center;gap:.8rem;grid-column:1/-1}
.settings-connector form{flex:none}
.settings-activation{display:flex;align-items:flex-end;gap:.5rem}
.settings-activation label{display:flex;flex-direction:column;gap:.2rem}
.settings-domain dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.6rem;margin:.7rem 0}
.settings-domain dl div{padding:.5rem .6rem;background:var(--mist);border-radius:var(--radius-sm)}
.settings-domain dt{font-size:.76rem;color:var(--muted)}.settings-domain dd{margin:.15rem 0 0;font-weight:600}
.ai-settings{display:grid;gap:.8rem}.ai-task-group{display:grid;gap:.55rem}.ai-task-group h4{margin:0}.ai-task-card{padding:.8rem;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff}.ai-task-card--future{background:var(--mist);color:var(--muted)}.ai-task-card h5{margin:.1rem 0}.ai-capabilities{font-size:.85rem;color:var(--slate)}
@media(max-width:720px){
  .settings-value__head,.settings-connector{display:block}
  .settings-form{grid-template-columns:1fr}
  .settings-form__actions{grid-column:auto}
  .settings-connector form{margin-top:.7rem}.settings-activation{align-items:stretch;flex-direction:column}
  .ai-task-card .settings-form{margin-top:.7rem}
}

/* Commercial Specification — sources, contrôles, aperçu et historique. */
.eyebrow{margin:0 0 .25rem;color:var(--muted);font-size:.72rem;font-weight:700;letter-spacing:.08em}
.btn-row{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.commercial-spec-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.commercial-spec-facts{display:grid;grid-template-columns:minmax(8rem,.7fr) 1.3fr;gap:.55rem;margin:0}
.commercial-spec-facts dt{color:var(--muted)}.commercial-spec-facts dd{margin:0;font-weight:600}
.commercial-spec-warning{margin:.55rem 0;padding:.65rem;border-left:4px solid #c98910;background:#fff8e6}
.commercial-spec-warning--blocking{border-color:var(--err);background:#fdecea;color:#7d1717}
.commercial-spec-actions form{margin:0}.commercial-spec-actions .btn-row{margin:.75rem 0}
.commercial-spec-preview{display:block;width:100%;min-height:720px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff}
@media(max-width:720px){.commercial-spec-grid{grid-template-columns:1fr}.commercial-spec-preview{min-height:520px}}

/* Portfolio — matrice indépendante fourniture/main-d'œuvre. */
.analytics-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.75rem;margin:1rem 0}
.analytics-kpi{display:flex;flex-direction:column;gap:.35rem;margin:0}
.analytics-kpi strong{font-size:1.05rem}
.analytics-filters{display:flex;align-items:end;flex-wrap:wrap;gap:.75rem}
.analytics-filters label{min-width:9rem}
.analytics-tree>details{border-bottom:1px solid var(--line);padding:.7rem 0}
.analytics-code{margin:.6rem 0 .6rem 1rem}
.analytics-documents{margin:.5rem 0 1rem}
.pc-date{display:flex;gap:.55rem;align-items:flex-end;flex-wrap:wrap}
.pc-date label,.pc-action label{display:flex;flex-direction:column;gap:.2rem}
.pc-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem}
.pc-summary div{display:flex;flex-direction:column;gap:.2rem}.pc-summary strong{font-size:1.25rem}
.pc-matrix td{min-width:280px;vertical-align:top}.pc-amount{font-weight:700;margin:.1rem 0 .45rem}
.pc-matrix details>summary{cursor:pointer;color:var(--blue)}
.pc-action{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;
  padding:.65rem 0;border-top:1px solid var(--line);margin-top:.5rem}
.pc-action button{align-self:end}
@media(max-width:720px){.pc-summary{grid-template-columns:1fr}.pc-action{grid-template-columns:1fr}}
.sp-form{display:grid;grid-template-columns:repeat(2,minmax(10rem,1fr));gap:.45rem;padding:.55rem 0}
.sp-form label{display:flex;flex-direction:column;gap:.15rem}.sp-form button{align-self:end}
@media(max-width:720px){.sp-form{grid-template-columns:1fr}}

/* Business Plan — les variantes et décisions restent lisibles sans script ni
   styles injectés, y compris sur une table analytique volontairement large. */
.budget-subtitle,.budget-meta{margin:.15rem 0 0}
.budget-variants{display:flex;flex-wrap:wrap;gap:.45rem;margin:0 0 1rem}
.budget-status--draft{background:#fff1da;color:#8a4b00}
.budget-status--submitted{background:#e8edff;color:#0b3ae6}
.budget-status--approved{background:#e6f5ea;color:#0a7d33}
.budget-status--rejected{background:#fdecea;color:var(--err)}
.budget-table th,.budget-table td,.budget-compare th,.budget-compare td{vertical-align:top}
.budget-table{min-width:1120px}.budget-compare{min-width:1180px}
.budget-decision{display:flex;align-items:flex-end;gap:.7rem;flex-wrap:wrap}
.budget-decision__reason{flex:1 1 18rem}
.budget-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.budget-actions .budget-decision{align-items:stretch;flex-direction:column}
.budget-actions button{align-self:flex-start}
.is-negative{color:var(--err)}.is-positive{color:var(--ok)}
.impact--favourable{color:var(--ok)}
.impact--unfavourable{color:var(--err)}
.impact--neutral{color:inherit}
.impact-label{font-size:.78em;font-weight:600;margin-left:.35rem}
@media(max-width:720px){.budget-actions{grid-template-columns:1fr}}

/* Paiements : conformité séparée, ventilation large et avertissement explicite
   afin qu'une confirmation comptable ne soit jamais prise pour un virement. */
.badge--ok{background:#e6f5ea;color:#0a6130}
.payment-warning{border-left:4px solid #8a4b00;background:#fffaf0}
.payment-warning p{margin:.35rem 0 0}
.compliance-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}
.compliance-grid section{border:1px solid var(--line);border-radius:var(--radius-sm);padding:.8rem}
.compliance-grid h3{margin:.1rem 0 .4rem}
.payment-control-form{margin-top:1rem;border-top:1px solid var(--line);padding-top:.8rem}
.payment-control-form>summary{cursor:pointer;font-weight:700;color:var(--blue)}
.payment-table{min-width:1050px}.payment-table select,.payment-table input{min-width:8rem}
@media(max-width:720px){.compliance-grid{grid-template-columns:1fr}}
.regional-import{margin-top:1.25rem}.comparison-block{margin-bottom:1rem}.status-pill{font-size:.75rem;font-weight:700;letter-spacing:.04em;padding:.35rem .55rem;border-radius:999px;background:#edf0f7}.status-pill--approved,.status-pill--up_to_date{background:#dcf7e7;color:#17653a}.status-pill--review_required,.status-pill--source_changed{background:#fff2cc;color:#6e5200}.status-pill--rejected,.status-pill--unavailable{background:#fde2e2;color:#8b1d1d}
/* Les libellés, codes et dates rendent le constat lisible sans la couleur. */
.compliance-badges{display:flex;flex-wrap:wrap;gap:.5rem;margin:.65rem 0}
.compliance{display:flex;flex-direction:column;gap:.2rem;max-width:100%;padding:.55rem .7rem;border:1px solid currentColor;border-radius:.4rem;overflow-wrap:anywhere}
.compliance--ok{color:#14532d;background:#f0fdf4}
.compliance--danger{color:#991b1b;background:#fef2f2}
.compliance--neutral{color:#374151;background:#f3f4f6}
.compliance--warning{color:#78350f;background:#fffbeb}

/* Réalisé comptable : contrôles et décisions restent utilisables sans script. */
.accounting-batches,.accounting-rows{min-width:1100px}.accounting-rows td{vertical-align:top}
.accounting-actions{display:flex;gap:.65rem;align-items:center;flex-wrap:wrap;margin:1rem 0}
.accounting-actions form{margin:0}.accounting-resolution{display:grid;gap:.35rem;min-width:260px}
.accounting-resolution label{display:grid;grid-template-columns:6rem minmax(10rem,1fr);gap:.35rem;align-items:center}
.accounting-reject{display:grid;gap:.35rem;min-width:180px}.accounting-errors{margin:.4rem 0 0;padding-left:1rem;color:var(--err)}
.accounting-status--approved,.accounting-status--ready{background:#e6f5ea;color:#0a6130}
.accounting-status--needs_mapping,.accounting-status--parsed{background:#fff1da;color:#8a4b00}
.accounting-status--failed,.accounting-status--rejected{background:#fdecea;color:var(--err)}
@media(max-width:720px){.accounting-resolution label{grid-template-columns:1fr}}
/* PROJECT — common shell, without inline style or script. */
.development-filters,.development-create{display:flex;align-items:end;gap:.75rem;flex-wrap:wrap}
.development-filters label,.development-create label{display:flex;flex-direction:column;gap:.25rem;min-width:12rem}
.development-tabs{margin-bottom:1rem}.development-checklist{margin-bottom:1rem}
.development-checks{display:flex;gap:.45rem;flex-wrap:wrap}.development-overview dl{margin-bottom:0}
.development-overview dt{color:var(--muted);font-size:.78rem}.development-overview dd{margin:.1rem 0 .7rem;font-weight:600}
.development-map-image{max-width:100%;height:auto;border:1px solid var(--line);border-radius:var(--radius-sm)}
@media(max-width:720px){.development-filters,.development-create{align-items:stretch;flex-direction:column}}
.devopp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-bottom:1rem}
.variant-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-bottom:1rem}
.variant-card{border:1px solid var(--line);border-radius:var(--radius);padding:1rem;background:var(--white)}
.variant-card--not-selected{background:#f4f5f8;color:var(--muted)}
.development-opportunity-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-bottom:0}
.development-opportunity-summary dt{color:var(--muted);font-size:.78rem}
.development-opportunity-summary dd{margin:.1rem 0;font-weight:600}
.development-comparison-scroll{max-width:100%;overflow-x:auto}
.development-comparison-table{min-width:1500px}.development-comparison-table td{vertical-align:top}
@media(max-width:720px){.devopp-grid,.development-opportunity-summary{grid-template-columns:1fr}}

/* Portfolio Workflow — server-rendered dashboards, calendar and review forms. */
.workflow-filters,.workflow-review-form{display:flex;align-items:flex-end;gap:.7rem;flex-wrap:wrap}
.workflow-filters label,.workflow-review-form label{display:flex;flex-direction:column;gap:.2rem;min-width:11rem}
.workflow-table{min-width:1080px}.workflow-table td small,.workflow-calendar td small{display:block;color:var(--muted);margin-top:.2rem}
.workflow-domain-grid,.workflow-evidence-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}
.workflow-domain-grid>div,.workflow-evidence-grid>div{padding:.7rem;border:1px solid var(--line);border-radius:var(--radius-sm)}
.workflow-domain-grid span{display:block;color:var(--muted);margin-top:.25rem}
.workflow-calendar{min-width:1180px}.workflow-calendar td{vertical-align:top}
.workflow-task-grid,.workflow-compare-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.workflow-task-grid dl{margin:0}.workflow-task-grid dl div{margin-bottom:.65rem}
.workflow-task-grid dt{font-size:.78rem;color:var(--muted)}.workflow-task-grid dd{margin:.1rem 0;font-weight:600}
.workflow-proposal{padding:.8rem 0;border-top:1px solid var(--line)}.workflow-proposal:first-of-type{border-top:0}
/* LEGAL : textes officiels conservés, colonnes lisibles et contrastes explicites. */
.legal-card{padding:1rem;margin:1rem 0;overflow-wrap:anywhere}
.legal-nav,.legal-actions,.legal-filters{display:flex;flex-wrap:wrap;align-items:end;gap:.8rem;margin:1rem 0}
.legal-form,.legal-filters label{display:flex;flex-direction:column;gap:.4rem}
.legal-form{max-width:44rem;margin-top:1rem;gap:.8rem}.legal-form label{display:flex;flex-direction:column;gap:.3rem}
.legal-form button{align-self:start}.legal-form textarea{min-height:5rem}
.legal-status{display:inline-block;padding:.2rem .45rem;border-radius:.3rem;background:#e9eef5;color:#243751;font-size:.85rem;font-weight:600}
.legal-pending,.nav-count.legal-pending{background:#a91c28;color:#fff;border-radius:.35rem;padding:.2rem .45rem;font-weight:700}
.legal-source-warning{padding:1rem;border:2px solid #956008;background:#fff4d9;color:#513400;border-radius:.4rem}
.legal-source-warning a{color:#513400;text-decoration:underline}
.legal-list{padding-left:1.3rem}.legal-list>li{padding:.5rem 0;overflow-wrap:anywhere}
.legal-diff{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.legal-diff__old,.legal-diff__new{min-width:0;padding:.8rem;border:1px solid #c6cdd6;border-radius:.35rem}
.legal-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65}
.legal-paragraph-changed{background:#fff0ba;box-decoration-break:clone}
.legal-diff__old .legal-paragraph-changed{background:#fde0df;color:#611d20}
.legal-diff__new .legal-paragraph-changed{background:#dff1e5;color:#16492b}
.legal-impact{border-top:1px solid var(--line);padding:1rem 0}
.legal-procedure-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:.8rem}
.legal-procedure-facts dt{color:var(--muted);font-size:.85rem}.legal-procedure-facts dd{margin:.2rem 0;overflow-wrap:anywhere}
.legal-procedure-rule{border-top:1px solid var(--line);padding:1rem 0}.legal-procedure-rule h4{margin-bottom:.4rem}
.legal-card summary{cursor:pointer;font-weight:600;overflow-wrap:anywhere}
.legal-card :focus-visible,.legal-nav :focus-visible,.legal-filters :focus-visible{outline:3px solid #1756b9;outline-offset:3px}
@media(max-width:720px){.legal-diff{grid-template-columns:1fr}.legal-filters{align-items:stretch;flex-direction:column}.legal-form{max-width:100%}}
.workflow-proposal details>summary,.workflow-editor>summary{cursor:pointer;font-weight:700;color:var(--blue)}
.workflow-form-grid{display:grid;grid-template-columns:repeat(2,minmax(12rem,1fr));gap:.65rem;margin-top:.8rem}
.workflow-form-grid label{display:flex;flex-direction:column;gap:.2rem}.workflow-form-grid .workflow-form-wide{grid-column:1/-1}
.workflow-form-grid button{align-self:end;justify-self:start}
.analytics-kpi progress{width:100%;accent-color:var(--blue)}
.urban-source-counts{display:flex;flex-wrap:wrap;gap:.35rem;justify-content:flex-end}
.urban-source-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:.8rem 0}
.urban-source-meta>div{border:1px solid var(--line);border-radius:var(--radius-sm);padding:.65rem}
.urban-source-meta dt{font-size:.78rem;color:var(--muted)}.urban-source-meta dd{margin:.15rem 0 0;font-weight:600}
.urban-source-list{display:grid;gap:.4rem;margin:.8rem 0}.urban-source-item{align-items:baseline}
.urban-source-item small{color:var(--muted)}
.urban-source-upload{display:flex;align-items:flex-end;gap:.7rem;flex-wrap:wrap;margin-top:.8rem}
.urban-source-upload label{display:flex;flex:1 1 22rem;flex-direction:column;gap:.3rem}
.urban-state{text-decoration:none}.urban-state--approved{background:#dcfce7;color:#166534}
.urban-state--stale,.urban-state--rejected{background:#fee2e2;color:#991b1b}
.urban-state--draft,.urban-state--pending_review{background:#fef3c7;color:#92400e}
.urban-review-grid{display:grid;grid-template-columns:1.05fr 1.35fr 1.1fr .7fr;gap:1rem;padding:.8rem 0;border-top:1px solid var(--line)}
.urban-review-grid--head{border-top:0;color:var(--muted);font-size:.8rem;text-transform:uppercase}
.urban-review-grid blockquote{margin:.45rem 0 0;padding-left:.7rem;border-left:3px solid var(--line);color:var(--muted)}
.urban-recommendation+.urban-recommendation{border-top:1px solid var(--line);padding-top:.7rem}
@media(max-width:720px){
  .workflow-filters,.workflow-review-form{align-items:stretch;flex-direction:column}
  .workflow-task-grid,.workflow-compare-grid,.workflow-form-grid{grid-template-columns:1fr}
  .workflow-form-grid .workflow-form-wide{grid-column:auto}
  .urban-source-meta{grid-template-columns:1fr}.urban-source-counts{justify-content:flex-start}
  .urban-review-grid{grid-template-columns:1fr}.urban-review-grid--head{display:none}
}
/* Les douze emplacements restent lisibles comme un inventaire visuel, sans
   script ni style en ligne sous la CSP de production. */
.street-context-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:1rem}
.street-context-slot{display:flex;flex-direction:column;gap:.75rem}
.street-context-slot h2{font-size:1rem;margin:0}
.street-context-preview{align-items:center;aspect-ratio:16/9;background:#eef0f2;border-radius:.45rem;display:flex;justify-content:center;overflow:hidden}
.street-context-preview img{height:100%;object-fit:cover;width:100%}
.street-context-proof{display:grid;grid-template-columns:minmax(7rem,auto) 1fr;gap:.3rem .75rem;margin:0}
.street-context-proof dt{font-weight:700}.street-context-proof dd{margin:0;overflow-wrap:anywhere}
.street-context-form{display:grid;gap:.65rem}
.street-context-form label{display:grid;gap:.25rem}
.street-context-metadata summary{cursor:pointer;font-weight:700}
.street-context-form .check{display:flex;align-items:flex-start;gap:.45rem}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.report1-readiness{border:1px solid var(--line);border-left:5px solid #c98208;border-radius:var(--radius);background:var(--white);padding:1rem;margin:1rem 0}
.report1-readiness--ready{border-left-color:var(--ok);background:#f0fdf4}.report1-readiness--stale{border-left-color:var(--err);background:#fff7f6}
.report1-readiness__head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.report1-readiness__head h2{font-size:1.15rem;margin:0}.report1-readiness__head p{margin:.15rem 0 0}
.report1-readiness__status{color:#805400}.report1-readiness--ready .report1-readiness__status{color:var(--ok)}.report1-readiness--stale .report1-readiness__status{color:var(--err)}
.report1-readiness__steps{display:grid;gap:.55rem;list-style:none;margin:1rem 0 0;padding:0}
.report1-readiness__step{display:grid;grid-template-columns:1.6rem minmax(0,1fr) auto;align-items:center;gap:.65rem;padding:.65rem;border-top:1px solid var(--line)}
.report1-readiness__step:first-child{border-top:0}.report1-readiness__icon{display:grid;place-items:center;width:1.5rem;height:1.5rem;border-radius:50%;background:#fff0cf;color:#805400;font-weight:800}
.report1-readiness__step--complete .report1-readiness__icon{background:#dff6e7;color:var(--ok)}.report1-readiness__step--stale .report1-readiness__icon{background:#fde5e2;color:var(--err)}
.report1-readiness__copy{display:grid;min-width:0}.report1-readiness__copy>span{color:var(--muted);font-size:.88rem}
.report1-readiness--compact{min-width:15rem;padding:.65rem;margin:0}.report1-readiness--compact .report1-readiness__head{display:block}.report1-readiness--compact .report1-readiness__head h2{font-size:.9rem}.report1-readiness--compact .report1-readiness__status{display:block;font-size:.86rem;margin-top:.3rem}.report1-readiness__blocker{font-size:.82rem;margin:.45rem 0 0}.report1-readiness__blocker a{margin-left:.35rem}
.report1-ready-mark{display:inline-grid;place-items:center;margin-left:.35rem;width:1.35rem;height:1.35rem;border-radius:50%;background:var(--ok);color:#fff;font-weight:800}
@media(max-width:720px){.report1-readiness__head{display:block}.report1-readiness__status{display:block;margin-top:.5rem}.report1-readiness__step{grid-template-columns:1.6rem minmax(0,1fr)}.report1-readiness__step .btn{grid-column:2;justify-self:start}}
.retrofit-evidence { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 32rem; overflow: auto; }
.retrofit-hash { overflow-wrap: anywhere; }
.service-mission-weights{display:flex;flex-wrap:wrap;align-items:end;gap:1rem}
.service-mission-weights input{max-width:8rem}
.service-mission-offers{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,22rem),1fr));gap:1rem;align-items:start}
.service-mission-offer{min-width:0;overflow-wrap:anywhere}
.service-mission-score{font-size:1.6rem;font-weight:700}
.service-mission-facts{display:grid;grid-template-columns:minmax(6rem,1fr) 2fr;gap:.5rem}
.service-mission-facts dd{margin:0}
.service-mission-text{white-space:pre-wrap;overflow-wrap:anywhere}
.service-mission-warnings{padding-left:1.3rem;border-left:3px solid #b7791f}
.service-mission-form{display:grid;gap:.7rem;margin-top:1rem}
.service-mission-form label{display:grid;gap:.25rem}
.service-mission-form fieldset label{display:block}
.service-mission-form input,.service-mission-form select,.service-mission-form textarea{max-width:100%;box-sizing:border-box}
.service-mission-summary{min-width:0;overflow-wrap:anywhere}
.service-mission-summary .head-row{flex-wrap:wrap;gap:.75rem}
.service-mission-links{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;list-style:none;padding:0}
.service-mission-links a{display:inline-block;padding:.35rem 0}
.service-mission-blockers summary{cursor:pointer;padding:.5rem 0}
.service-mission-summary a:focus-visible,.service-mission-blockers summary:focus-visible{outline:3px solid currentColor;outline-offset:3px}
.document-event-review-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.75rem}
.document-event-proof{border-left:3px solid var(--line);padding-left:.8rem}
.document-event-warning{color:var(--err)}

/* GEN. REPORT — un axe partagé, lisible sans JavaScript et enrichi par SVG. */
.gr-filters{display:flex;align-items:end;gap:.7rem;flex-wrap:wrap;margin-bottom:1rem}
.gr-filters label{display:grid;gap:.25rem;min-width:10rem}
.gr-dashboard{display:grid;gap:1rem}.gr-scroll{max-width:100%;overflow-x:auto}
.gr-scroll:focus-visible,.gr-task summary:focus-visible,.gr-chart-bar:focus-visible{outline:3px solid var(--blue);outline-offset:3px}
.gr-timeline{min-width:1200px}.gr-timeline th:first-child{position:sticky;left:0;background:var(--white);z-index:1}
.gr-timeline td{min-width:92px;vertical-align:top;padding:.35rem}
.gr-task{border-left:4px solid #8691a5;border-radius:.3rem;background:#f4f5f8;padding:.35rem;margin:.2rem 0}
.gr-task summary{cursor:pointer;font-weight:700}.gr-task p{font-size:.8rem;margin:.35rem 0}
.gr-task--done{border-color:#218447;background:#e8f5ec}.gr-task--in_progress{border-color:#255dd9;background:#eaf0ff}
.gr-task--at_risk{border-color:#d38a00;background:#fff4d6}.gr-task--overdue{border-color:#b72f36;background:#fdebec}
.gr-task--future{border-color:#8691a5;background:#f4f5f8}
.gr-chart{display:block;min-height:320px;background:#fff}.gr-chart-axis{stroke:#6d7788;stroke-width:1}
.gr-chart-label{fill:#4c596d;font-size:10px}.gr-chart-bar{cursor:pointer;stroke:#fff;stroke-width:1}
.gr-chart-bar--forecast{fill-opacity:.58}.gr-chart-hatch{stroke:#233047;stroke-width:2}
.gr-chart-hatch-overlay{cursor:pointer;opacity:.48}
.gr-chart-line{fill:none;stroke-width:2.5}.gr-chart-line--actual{stroke:#161f34}
.gr-chart-line--forecast{stroke:#7756d8;stroke-dasharray:7 4}
.gr-finance-table{min-width:760px}.gr-finance-table caption{text-align:left;font-weight:700;padding:.6rem 0}
.gr-impact-legend{display:flex;flex-wrap:wrap;gap:.5rem 1rem;font-size:.85rem}
.gr-checks ul{margin-bottom:0}.gr-check--blocking{color:#8f1f28}.gr-check--warning{color:#765200}
.gr-dialog{max-width:min(44rem,calc(100% - 2rem));border:0;border-radius:var(--radius);box-shadow:0 18px 70px #17213a55}
.gr-dialog::backdrop{background:#17213a99}
@media(max-width:720px){.gr-filters{align-items:stretch;flex-direction:column}.gr-filters label{min-width:0}}
.gr-report-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.8rem;align-items:end}
.gr-report-form label{display:grid;gap:.3rem}.gr-report-table{min-width:1100px}
.gr-run-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:1rem;margin-bottom:1rem}
.gr-run-summary .card{margin:0}.gr-run-summary code{overflow-wrap:anywhere;font-size:.75rem}
.land-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.65rem;list-style:none;padding:0}
.land-steps li{background:#f4f5f8;border-left:4px solid #8691a5;border-radius:.4rem;padding:.8rem}.land-steps .land-step--done{background:#e8f5ec;border-color:#218447}
.land-parcel{border-top:1px solid var(--line);padding:1rem 0}.land-inline-form{align-items:end;display:flex;flex-wrap:wrap;gap:.65rem}
.land-inline-form label,.land-form-grid label{display:grid;gap:.25rem}.land-inline-form input[type=number]{max-width:5.5rem}
.land-owner-public{width:min(760px,calc(100% - 2rem));margin:2rem auto 4rem}.land-owner-public .card{margin-top:1rem}
.land-owner-public__intro{text-align:left}.land-owner-public__map{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:10px;margin:1rem 0}
.land-owner-public__parcels{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.7rem}.land-owner-public__parcels article{padding:.8rem;border:1px solid var(--line);border-radius:8px;background:#f7f8fb}
.land-owner-public__form{display:grid;gap:1rem}.land-owner-public__form label{display:grid;gap:.35rem}.land-owner-public__form textarea{box-sizing:border-box;width:100%;font:inherit;padding:.7rem;border:1px solid var(--line);border-radius:var(--radius-sm)}
.land-owner-public__form .check{display:flex;align-items:flex-start;gap:.65rem}.land-owner-public__form .check input{margin-top:.3rem;flex:none}.land-owner-public__success{border-left:5px solid var(--ok)}
@media(max-width:600px){.land-owner-public{width:min(100% - 1rem,760px);margin:.5rem auto 2rem}.land-owner-public .card{padding:1rem}.land-owner-public button{width:100%;min-height:48px}}
.land-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.75rem;padding:1rem 0}.land-form-grid .land-form-wide{grid-column:1/-1}
.land-new-owner summary{cursor:pointer;font-weight:700;padding:.7rem 0}
.land-campaign{border-top:1px solid var(--line);margin-top:1rem;padding-top:.75rem}
@media(max-width:720px){.land-inline-form{align-items:stretch;flex-direction:column}.land-form-grid{grid-template-columns:1fr}.land-form-grid .land-form-wide{grid-column:auto}}
.gr-run-checks{margin-bottom:0}.gr-decision-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:1rem}
.gr-decision-grid form{display:grid;gap:.7rem}.gr-decision-grid label{display:grid;gap:.3rem}.gr-decision-grid textarea{min-height:7rem}
.gr-snapshot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:1rem}.gr-snapshot-grid div{border-left:3px solid var(--blue);padding-left:.7rem}
.gr-snapshot-grid dt{color:var(--muted)}.gr-snapshot-grid dd{margin:.25rem 0 0;font-weight:700}.gr-event-list li{margin:.5rem 0}.gr-event-list time{display:inline-block;min-width:9rem;color:var(--muted)}
