/* 2.23.4 · Devis : « pas cette espèce de fond », « l'onglet Billit visible directement sur l'écran », « je ne veux pas de scroll ».
   Sur ordinateur, la colonne de droite part du haut du devis (à côté de son en-tête) et ne défile plus : ses ombres ne sont plus coupées
   en fond gris. En-tête de l'aperçu sur une ligne, récapitulatif sur deux colonnes, carte Billit resserrée ; l'aperçu prend le reste (qPrevFit). */
@media (min-width:861px){
 .v2-quote.is-live{display:grid;grid-template-columns:minmax(0,1fr) clamp(260px,40%,520px);grid-template-rows:auto 1fr;column-gap:16px;align-items:start}
 .v2-quote.is-live>.v2-q-grid{display:contents}
 .v2-quote.is-live>.v2-qhead{grid-column:1;grid-row:1;min-width:0}
 .v2-quote.is-live .v2-q-main{grid-column:1;grid-row:2}
 .v2-quote.is-live .v2-q-side{grid-column:2;grid-row:1/span 2}
 .v2-q-grid.is-live .v2-q-side{max-height:none;overflow:visible;border-radius:0;gap:12px;container-type:inline-size}
 .v2-q-grid.is-live .v2-q-side.is-tall{position:static}
 .v2-q-grid.is-live .v2-q-live{gap:6px;padding:10px 12px}
 .v2-q-grid.is-live .v2-q-live-head{gap:6px;padding:0 2px}
 .v2-q-grid.is-live .v2-q-live-head .v2-qlay{flex:0 1 auto}
 .v2-q-grid.is-live .v2-q-live-head .v2-qlay>span{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
 .v2-q-grid.is-live .v2-q-live-head .v2-qlay .form-select{height:30px;min-width:0;max-width:180px;font-size:12px}
 .v2-q-grid.is-live .v2-q-live-head>.btn{flex:0 0 auto;width:30px;height:30px;min-height:30px;padding:0;justify-content:center}
 .v2-q-grid.is-live .v2-q-totals,.v2-q-grid.is-live .v2-q-billit{gap:6px;padding:10px 14px}
 .v2-q-grid.is-live .v2-qt-block{gap:3px;padding-top:6px}
 .v2-q-grid.is-live .v2-qt-block:first-child{padding-top:0}
 .v2-q-grid.is-live .v2-qt-block h4{margin-bottom:0}
 .v2-q-grid.is-live .v2-q-billit .v2-qbx-help{display:none}
 .v2-q-grid.is-live .v2-q-billit{grid-template-columns:auto minmax(0,1fr);column-gap:12px;align-items:center}
 .v2-q-grid.is-live .v2-q-billit>*{grid-column:1/-1}
 .v2-q-grid.is-live .v2-q-billit>.section-title{grid-column:1}
 .v2-q-grid.is-live .v2-q-billit>.v2-qbx-done{grid-column:2;justify-content:flex-end;flex-wrap:wrap;text-align:right;font-size:12.5px}
 .v2-q-grid.is-live .v2-qsend{padding:6px 10px}
 .v2-q-grid.is-live .v2-qsend>span{flex-direction:row;flex-wrap:wrap;align-items:baseline;column-gap:8px}
 .v2-q-grid.is-live .v2-qbx-synctx{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
 .v2-q-grid.is-live .v2-qbx-acts [data-q-sync]{width:32px;padding:0;justify-content:center}
 .v2-q-grid.is-live .v2-q-side.is-nopv .v2-qpv-fit{display:none}
 .v2-q-grid.is-live .v2-q-side.is-nopv .v2-q-live-head>.btn{width:auto;padding:0 10px}
 .v2-q-grid.is-live .v2-q-side.is-nopv .v2-q-live-head>.btn .sr-only{position:static;width:auto;height:auto;margin:0 0 0 4px;overflow:visible;clip:auto}
}
@media (min-width:861px) and (max-width:1100px){.v2-quote.is-live{grid-template-columns:minmax(0,1fr) clamp(220px,30%,340px)}}
/* Récapitulatif sur deux colonnes et en-tête de l'aperçu sur une ligne seulement quand la colonne est assez large (pas sur tablette) */
@container (min-width:400px){
 .v2-q-live-head{flex-wrap:nowrap}
 .v2-q-live-head .section-title{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
}
@container (min-width:430px){
 .v2-q-totals [data-q-totals]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:20px;row-gap:6px}
 .v2-q-totals [data-q-totals]>.v2-qt-block{grid-column:1/-1}
 .v2-q-totals [data-q-totals]>.v2-qt-once:not(.is-solo){grid-column:1}
 .v2-q-totals .v2-qt-int{grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:20px}
 .v2-q-totals .v2-qt-int>h4{grid-column:1/-1}
}
/* 2.23.4 · Le bouton « PDF » ne renvoie pas « ⋮ » seul à la ligne dans l'en-tête du devis : icône seule (nom lu par les lecteurs d'écran,
   info-bulle) quand la colonne du devis est étroite. */
@media (min-width:861px) and (max-width:1499px){
 .v2-qhead-acts .v2-qpdf{width:33px;padding:0;justify-content:center}
 .v2-qhead-acts .v2-qpdf .v2-qpdf-tx{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
}
/* 2.23.5 · Historique des actions (« on doit aussi avoir un historique des actions ») : types en pastilles qui filtrent ; mois dans
   « Tout l'historique », à droite, puis en haut en bande défilante quand la page passe sur une colonne. */
.v2-hist-types{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 16px}
.v2-hist-type{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 11px;border:1px solid var(--line2);border-radius:999px;background:var(--surface);color:var(--muted);font:inherit;font-size:12px;font-weight:700;cursor:pointer}
.v2-hist-type b{color:var(--text);font-variant-numeric:tabular-nums}
.v2-hist-type:hover{color:var(--text)}
.v2-hist-type.is-on{border-color:color-mix(in srgb,var(--accent) 55%,var(--line2));background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--text)}
.v2-hist-months{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.v2-hist-month{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:38px;padding:0 10px;border:0;border-radius:10px;background:transparent;color:var(--text);font:inherit;font-size:13px;font-weight:600;text-align:left;cursor:pointer}
.v2-hist-month small{flex:0 0 auto;color:var(--muted);font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.v2-hist-month:hover{background:var(--surface2)}
.v2-hist-month.is-on{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-weight:800}
.v2-hist-wait{display:flex;align-items:center;gap:8px;margin:0;color:var(--muted);font-size:13px}
.v2-hist-retry{margin:10px 0 0;text-align:center}
/* La carte des mois vient avant la liste dans le code (lecteurs d'écran, tabulation) : sur ordinateur, elle reprend sa place à droite. */
@media (max-width:1100px){
 .v2-hist-all{order:-1;margin:0;padding:0;border:0;background:none;box-shadow:none}
 .v2-hist-all .section-head{display:none}
 .v2-hist-months{display:flex;gap:6px;overflow-x:auto;padding:2px 0 6px;scrollbar-width:none}
 .v2-hist-months::-webkit-scrollbar{display:none}
 .v2-hist-month{flex:0 0 auto;width:auto;min-height:32px;padding:0 12px;border:1px solid var(--line2);border-radius:999px;background:var(--surface);white-space:nowrap}
 .v2-hist-month small{font-size:10.5px}
}
/* Téléphone compact : les types aussi sur une ligne qui défile, au lieu de trois lignes de pastilles. */
@media (max-width:600px){
 .v2-hist-types{flex-wrap:nowrap;overflow-x:auto;margin:0 0 12px;padding-bottom:2px;scrollbar-width:none}
 .v2-hist-types::-webkit-scrollbar{display:none}
 .v2-hist-type{flex:0 0 auto}
}
/* 2.23.5 · « ajouter un bouton envoyer tous les rappels » : en tête de « À relancer en premier », poussé à droite avec le lien vers toutes
   les factures échues ; dans « Factures échues », à droite des outils. */
.v2-od-tools .v2-od-dun{margin-left:auto}
/* 2.23.5 · « Mes objectifs » : objectifs réglés sur place, ajout, catégories ajoutées (administrateurs). */
.v2-goals-edit .i{width:14px;height:14px}
.v2-ge-list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:6px}
.v2-ge-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.v2-ge-ico{display:grid;place-items:center;flex:none;width:32px;height:32px;border-radius:10px;background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent)}
.v2-ge-name{flex:1 1 auto;min-width:0;display:grid;gap:1px}
.v2-ge-name strong{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-ge-name small{font-size:11.5px;color:var(--muted)}
.form-input.v2-ge-n{flex:0 0 76px;width:76px;min-height:36px;padding:0 8px;text-align:center;font-variant-numeric:tabular-nums}
.v2-ge-row .icon-btn{flex:0 0 auto;width:34px;height:34px}
.v2-ge-empty{padding:10px;color:var(--muted);font-size:13px}
.v2-ge-add{display:grid;gap:6px;margin-top:16px}
.v2-ge-add-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.v2-ge-add-row .form-select{flex:1 1 150px;min-width:0;min-height:36px}
.v2-ge-add-row .form-select[name=period]{flex:0 1 140px}
.v2-ge-cats{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.v2-ge-cats-head{display:grid;gap:2px}
.v2-ge-cats-head small{color:var(--muted);font-size:12px}
.v2-ge-cats [data-ge-cat-form]{margin-top:12px}
.v2-ge-catform{display:grid;gap:12px;padding:12px;border:1px solid var(--line2);border-radius:14px;background:var(--surface2)}
.v2-ge-catform .form-group{margin:0}
.v2-ge-icons{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;border:0;min-width:0}
.v2-ge-icons legend{margin-bottom:6px;padding:0}
.v2-ge-icons label{position:relative;cursor:pointer}
.v2-ge-icons input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
.v2-ge-icons span{display:grid;place-items:center;width:36px;height:36px;border:1px solid var(--line2);border-radius:10px;background:var(--surface);color:var(--muted)}
.v2-ge-icons input:checked+span{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--surface));color:var(--accent)}
.v2-ge-icons input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}
.v2-ge-catacts{display:flex;justify-content:flex-end;gap:8px}
@media (max-width:600px){.v2-ge-add-row .form-select,.v2-ge-add-row .form-select[name=period]{flex:1 1 100%}.v2-ge-add-row .btn{flex:1 1 auto}}

/* 2.23.5 · le bouton « Envoyer tous les rappels » de « Factures échues » est redessiné avec la liste */
.v2-od-tools [data-od-dun]{display:contents}

/* 2.24.0 · Objectifs par jour et surtout par semaine : « Cette semaine », jours de prospection, graphique semaine par semaine */
.v2-week-top p{margin:0;font-size:12.5px;color:var(--muted)}
.v2-week-days i{display:grid;place-items:center;width:24px;height:24px;border-radius:8px;font-style:normal;font-size:10.5px;font-weight:800;color:var(--subtle);background:color-mix(in srgb,var(--surface3) 45%,transparent)}
.v2-week-name strong{font-size:13.5px}.v2-week-name small{font-size:11.5px;color:var(--muted)}
.v2-week-bar i{display:block;height:100%;border-radius:9px;background:var(--grad);transition:width .5s}
.v2-week-row.is-done .v2-week-bar i{background:var(--green)}
.v2-week-n span{font-size:12px;color:var(--muted);font-weight:600}
.v2-wk-nav strong{min-width:120px;text-align:center;font-size:13.5px;text-transform:capitalize}
.v2-wk-bar>i{display:block;height:calc(var(--h)*100%);min-height:0;border-radius:7px 7px 3px 3px;background:color-mix(in srgb,var(--accent) 55%,transparent);transition:height .45s}
.v2-wk-chart.is-year .v2-wk-bar>i{border-radius:3px 3px 1px 1px}
.v2-wk-bar.is-full>i{background:linear-gradient(180deg,var(--green),color-mix(in srgb,var(--green) 70%,#0ea5e9))}
.v2-wk-bar.is-future>i{height:4px;background:var(--surface3)}
.v2-wk-bar small{position:absolute;left:0;right:0;bottom:-32px;display:grid;text-align:center;font-size:10.5px;font-weight:700;color:var(--subtle);line-height:1.3}
.v2-wk-bar small b{font-size:11.5px;color:var(--text)}
.v2-wk-bar.is-now small{color:var(--accent)}
.v2-wk-goal b{position:absolute;right:0;bottom:2px;padding:1px 6px;border-radius:6px;font-size:10.5px;font-weight:800;color:var(--orange);background:var(--panel-bg)}
.v2-wk-axis span{flex:1;min-width:0;font-size:9.5px;font-weight:700;color:var(--subtle);white-space:nowrap;overflow:visible;text-transform:capitalize}
.v2-ge-days{display:grid;gap:6px;margin:4px 0 12px}.v2-ge-days small{font-size:11.5px;color:var(--muted)}
.v2-ge-dayrow{display:flex;gap:6px;flex-wrap:wrap}
.v2-ge-day{width:36px;height:36px;border-radius:11px;border:1px solid var(--line);background:var(--surface2,transparent);color:var(--muted);font:inherit;font-weight:800;cursor:pointer}
.v2-ge-day.is-on{border-color:transparent;background:var(--accent);color:#fff}
.v2-ge-preset{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px}.v2-ge-preset small{font-size:11.5px;color:var(--muted)}
@media (max-width:600px){
.v2-week-top p{font-size:11.5px}
 .v2-wk-axis span{font-size:8.5px}
}
/* 2.25 · « Deux devis distincts setup et mensuels » : devis liés, mise en place et mensuel */
/* Liste compacte (fiche prospect, fiche client) : l'icône seule, le nom au survol ; la ligne ne déborde plus de la fiche. */
.v2-qmini{grid-template-columns:minmax(0,1fr)}
.v2-qmini .v2-qchip{flex:none}.v2-qmini .v2-qchip.is-pair{width:22px;padding:0;justify-content:center}
.v2-qmini .v2-qchip.is-pair>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.v2-qpair button{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:9px;row-gap:1px;height:auto;min-height:48px;min-width:0;padding:7px 12px;text-align:left}
.v2-qpair button small{margin-left:2px;color:var(--subtle);font-size:12px;font-weight:700}
.v2-qpair button.is-on b{justify-self:start;height:auto;min-width:0;padding:0;border-radius:0;background:none;color:var(--muted);font-size:12px;font-weight:700}
.v2-qpair button.is-on b{color:var(--accent)}
.v2-qpair-box>p{margin:0;font-size:13px;line-height:1.45;color:var(--text)}
.v2-qpair-box>p.v2-field-note{color:var(--muted);font-size:12px}
.v2-qnew-acts{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}
/* 2.26 · Factures : même allure que les devis (liste, éditeur, colonne de droite) ; type de facture, bloc « Facturer », facture verrouillée */
.v2-qchip.is-type{--qc:var(--accent);gap:4px;margin-left:6px}
.v2-qhead-text .v2-qref .v2-qchip.is-type{margin:0 6px 0 0;vertical-align:1px}
.v2-qcard-top .v2-qchip.is-type{margin-left:0}
.v2-qlock{display:flex;align-items:flex-start;gap:8px;margin:12px 0 0;padding:10px 12px;border-radius:12px;font-size:13px;line-height:1.45;color:var(--text);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.v2-qlock .i{flex:0 0 auto;margin-top:2px;color:var(--accent)}
.v2-q-body[inert],.v2-q-info[inert],.v2-q-catcol[inert]{opacity:.78}
.v2-qinv-bar{height:6px;margin:2px 0 8px;border-radius:999px;background:var(--surface2);overflow:hidden}
.v2-qinv-bar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--blue,#4d8fff))}
.v2-qinv-list{margin:10px 0 0}
.v2-q-inv .v2-qbx-acts,.v2-q-rec .v2-qbx-acts{margin-top:12px}
.v2-qinv-opts{display:grid;gap:8px;margin:0;padding:0;border:0;min-width:0}
.v2-qinv-opts legend{margin-bottom:6px}
.v2-qinv-opt{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface2);cursor:pointer}
.v2-qinv-opt input{margin:3px 0 0;accent-color:var(--accent)}
.v2-qinv-opt:has(input:checked){border-color:color-mix(in srgb,var(--accent) 55%,var(--line));background:color-mix(in srgb,var(--accent) 9%,var(--surface2))}
.v2-qinv-opt.is-off{opacity:.55;cursor:not-allowed}
.v2-qinv-opt>span:last-child{display:grid;gap:2px;min-width:0}
.v2-qinv-opt strong{font-size:14px}.v2-qinv-opt small{color:var(--muted);font-size:12.5px;line-height:1.4}
.v2-qinv-ico{display:grid;place-items:center;flex:0 0 30px;width:30px;height:30px;border-radius:9px;color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,transparent)}
.v2-qinv-more{gap:10px}
.v2-qinv-quick{align-self:end}
.v2-qinv-amt{margin:0;font-size:13.5px}.v2-qinv-amt.is-bad{color:var(--orange);font-weight:700}
.v2-itable td small{color:var(--muted);font-weight:600}
@media (max-width:640px){.v2-qinv-more{grid-template-columns:minmax(0,1fr)}}
.v2-qinv-more[hidden],[data-qsend-tpl][hidden]{display:none}
.v2-q-grid.is-live .v2-q-billit .v2-qbx-help.v2-qbx-inv{display:block}
/* 2.26 · « Cette semaine » : choix Jour / Semaine à côté du pourcentage */
.v2-week-view button{min-height:28px;padding:0 12px;font-size:12px}
.v2-q-body{display:grid;gap:14px;min-width:0}
/* 2.27 · Factures récurrentes : pastille « à préparer » du menu, bloc « À préparer », tableau */
.nav-link{position:relative}
.nav-count{position:absolute;left:24px;top:4px;min-width:17px;height:17px;padding:0 4px;border-radius:999px;background:var(--grad);color:var(--gv-on-ink,#fff);font-size:10px;font-weight:800;line-height:17px;text-align:center;box-shadow:0 0 0 2px var(--glass-solid,var(--nav))}
.m-more-item .nav-count{position:static;flex:0 0 auto;min-width:20px;height:20px;line-height:20px;font-size:11px;box-shadow:none}
.v2-t-short{display:none}
@media (max-width:860px){.v2-t-long{display:none}.v2-t-short{display:inline}}
/* 2.27.1 · « souci d'affichage » : cartes de la page espacées, ligne « pas encore » compacte, point vert de Billit rond (pas une barre) */
.v2-recur>.card{margin-bottom:18px}
/* 2.28.0 · « souci d'affichage dans les factures récurrentes » : en mode Cartes, la grille (div.v2-q-list, pas une .card) touchait la carte « Mensualités dans Billit ». */
.v2-recur>.v2-q-list{margin-bottom:18px}.v2-recur>.v2-q-list:last-child{margin-bottom:0}
.v2-rec-empty{display:flex;align-items:center;gap:12px;padding:14px 18px}
.v2-rec-empty>svg{flex:0 0 auto;color:var(--accent)}
.v2-rec-empty p{margin:0;flex:1;min-width:0;font-size:13px;line-height:1.45;color:var(--muted)}.v2-rec-empty p strong{color:var(--text)}
.v2-rec-empty .btn{flex:0 0 auto}
@media (max-width:760px){.v2-rec-empty{flex-wrap:wrap;align-items:flex-start}.v2-rec-empty p{flex:1 1 calc(100% - 40px)}.v2-rec-empty .btn{margin-left:auto}}
.pill.v2-ellipsis>.v2-live{display:inline-block;vertical-align:middle;margin:-2px 6px 0 1px}

/* 2.28.0 · SAV (note de cadrage du 28/10) : liste globale et onglet du projet (mêmes lignes ; cartes sur téléphone, sans défilement de
   côté), détail d'un ticket (conversation, notes internes, compte rendu, historique), bloc Portail client de la fiche client. Variables
   de thème seulement : le sombre et le clair suivent tout seuls. */
.nav-list-top{margin:6px 0 2px}
.v2-sav-notify[hidden],.modal [data-sav-reqname][hidden],.modal [data-sav-dup][hidden],.modal [data-sav-typenote][hidden]{display:none!important}
.v2-sav-kpi{display:inline-flex;align-items:baseline;gap:7px;min-height:34px;padding:5px 12px;border:1px solid var(--line2);border-radius:12px;background:var(--surface);color:var(--muted);font:inherit;font-size:12.5px;font-weight:700;cursor:pointer}
.v2-sav-kpi b{font-size:17px;color:color-mix(in srgb,var(--st) 80%,var(--text));font-variant-numeric:tabular-nums}
.v2-sav-kpi.is-on{border-color:var(--st);background:color-mix(in srgb,var(--st) 12%,var(--surface));color:var(--text)}
.v2-sav-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.v2-sav-tools .v2-psearch{min-height:36px;flex:1 1 220px}
.v2-sav-title strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px}
.v2-sav-title small{color:var(--subtle);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v2-ptabbar b.is-sav{background:color-mix(in srgb,var(--orange) 22%,transparent);color:var(--orange)}
/* Contrôles segmentés à boutons radio (type, visibilité, vérification) : même dessin que .v2-who */
.v2-who label{position:relative;display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 12px;border-radius:999px;color:var(--muted);font-size:12px;font-weight:700;cursor:pointer;white-space:nowrap}
.v2-who label.is-on{background:var(--surface);color:var(--text);box-shadow:0 1px 4px #0b10301a,inset 0 0 0 1px var(--line2)}
.v2-who label input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.v2-who label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:1px}
.v2-sav-seg{border:0;padding:0;margin:0;min-width:0}.v2-sav-seg .v2-who{flex-wrap:wrap;border-radius:16px}
.form-input.is-invalid,.form-select.is-invalid,.form-textarea.is-invalid{border-color:var(--red)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--red) 18%,transparent)}
.v2-sav-reason span{display:grid}.v2-sav-reason small{color:var(--muted);font-size:12px}
.v2-sav-reason.is-off{opacity:.62;cursor:not-allowed}
/* Détail d'un ticket */
.v2-tk-head{display:grid;gap:8px;margin:0 0 14px}
.v2-tk-head h2{margin:0;font-size:20px;line-height:1.25;overflow-wrap:anywhere}
.v2-tk-kick{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0;color:var(--muted);font-size:12.5px}
.v2-sav-work.is-ok{background:color-mix(in srgb,var(--green) 14%,transparent);color:var(--green)}
.v2-tk-closed small{color:var(--muted)}
.v2-tk-text{margin:6px 0 0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:13.5px;line-height:1.55}
.v2-tk-msg{margin:10px 0 0;padding:10px 12px;border:1px solid var(--line);border-radius:14px;background:var(--surface)}
.v2-tk-msg.is-client{background:var(--surface2)}
.v2-tk-msg.is-internal{border-style:dashed;border-color:color-mix(in srgb,var(--orange) 45%,var(--line));background:color-mix(in srgb,var(--orange) 6%,var(--surface))}
.v2-tk-msg header{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:12.5px}
.v2-tk-msg header time{margin-left:auto;color:var(--subtle);font-size:12px}
.v2-tk-sys{margin:10px 0 0;color:var(--subtle);font-size:12px;text-align:center}
.v2-tk-compose{display:grid;gap:8px;margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line)}
.v2-tk-compose-foot{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.v2-tk-compose-foot .btn{margin-left:auto}
.v2-tk-compose-foot small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
.v2-sav-filepick input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
.v2-sav-notify{font-size:12.5px}
.v2-sav-files li{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:5px 9px;border:1px solid var(--line);border-radius:10px;font-size:12.5px}
.v2-sav-files a{display:inline-flex;align-items:center;gap:5px;min-width:0;color:var(--text);font-weight:600;text-decoration:none}
.v2-sav-files small{color:var(--subtle);white-space:nowrap}
.v2-sav-ev p{margin:0;overflow-wrap:anywhere}.v2-sav-ev small{color:var(--subtle);font-size:11.5px}
/* Portail client dans la fiche client */
.v2-portal-list{list-style:none;margin:0 0 6px;padding:0;display:grid;gap:8px}
.v2-portal{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:9px 12px;border:1px solid var(--line);border-radius:14px}
.v2-portal.is-off{opacity:.7;border-style:dashed}
.v2-portal-main{display:grid;flex:1 1 220px;min-width:0}.v2-portal-main small{color:var(--muted);font-size:12px;overflow-wrap:anywhere}
.v2-portal-acts{display:flex;align-items:center;gap:6px;margin-left:auto}
.v2-portal-proj{border:0;padding:0;margin:0;display:grid;gap:6px}
.v2-dev-push{margin-top:14px}
/* Aperçu du portail dans la démo */
.v2-pd{display:grid;gap:10px}
.v2-pd-top p{display:block;margin:0;padding:9px 12px;border-radius:12px;background:color-mix(in srgb,var(--blue) 10%,transparent);color:var(--muted);font-size:12.5px}
.v2-pd-h{margin:4px 0;font-size:17px}
.v2-pd-list{list-style:none;margin:0;padding:0;display:grid}
.v2-pd-row{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:10px 2px;border:0;border-top:1px solid var(--line);background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer}
.v2-pd-row>span:not(.v2-pstatus){display:grid;min-width:0}.v2-pd-row>.v2-pstatus{flex:none}.v2-pd-row small{color:var(--muted);font-size:12px}
.v2-pd-proj{padding:10px 12px;border:1px solid var(--line);border-radius:14px}
.v2-pd-proj .section-head{margin:0 0 6px}
.v2-pd-desc{padding:10px 12px;border-radius:12px;background:var(--surface2)}
/* 2.28.2 : la liste passe en cartes dès 1 140 px de fenêtre (avec le menu, les 8 colonnes ne tenaient plus : Responsable coupé, Activité cachée). */
@media(max-width:1140px){
 .v2-sav-title strong{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
}
@media(max-width:760px){
 .v2-sav-tools .v2-psearch{flex:1 1 100%;max-width:none}
.v2-sav-morebtn b{font-variant-numeric:tabular-nums;color:var(--accent)}
 .v2-tk-head h2{font-size:18px}.v2-tk-compose-foot .btn{margin-left:0}.v2-tk-compose-foot small{max-width:100%}
 .v2-portal-acts{margin-left:0}
}
.v2-sav-pcontact>span{display:inline-flex;align-items:center;gap:6px}.v2-sav-pcontact select{width:auto;min-width:200px;max-width:100%}
/* 2.28.0 · Aperçu du portail (démo) : même suivi de projet que api/portal.php */
.v2-pd-proj{display:grid;gap:8px;margin-bottom:12px}.v2-pd-proj .section-head{margin:0}.v2-pd-savhead{margin-top:6px}
.v2-pd-hero{display:flex;align-items:center;gap:16px}.v2-pd-hero dl{display:grid;gap:4px;margin:0}.v2-pd-hero dl div{display:grid}.v2-pd-hero dt{color:var(--muted);font-size:11.5px}.v2-pd-hero dd{margin:0;font-weight:700;font-size:13.5px}
.v2-pd-ring{--p:0;position:relative;flex:none;width:78px;height:78px;border-radius:50%;background:conic-gradient(var(--accent) calc(var(--p)*1%),var(--line) 0)}
.v2-pd-ring b{position:absolute;inset:8px;display:flex;align-items:center;justify-content:center;gap:1px;border-radius:50%;background:var(--surface);font-size:20px;font-weight:800;line-height:1}.v2-pd-ring b small{font-size:11px;color:var(--muted)}
.v2-pd-next{display:grid;gap:2px;padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:var(--surface2)}.v2-pd-next.is-end{background:color-mix(in srgb,#20c483 8%,var(--surface2))}.v2-pd-next small{color:var(--muted);font-size:12px}
.v2-pd-tasks{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:4px;font-size:12.5px}.v2-pd-tasks li{display:flex;gap:7px;align-items:baseline}.v2-pd-tasks i{flex:none;width:11px;height:11px;border-radius:3px;border:2px solid var(--muted);transform:translateY(1px)}
.v2-pd-tasks li.is-done{color:var(--muted);text-decoration:line-through}.v2-pd-tasks li.is-done i{background:#20c483;border-color:#20c483}
.v2-pd-journey{list-style:none;margin:0;padding:0;display:grid}.v2-pd-journey li{position:relative;display:flex;gap:10px;padding:0 0 10px}.v2-pd-journey li:not(:last-child)::before{content:"";position:absolute;left:7px;top:18px;bottom:0;width:2px;background:var(--line)}
.v2-pd-journey li>i{flex:none;width:16px;height:16px;margin-top:2px;border-radius:50%;border:2px solid var(--line);background:var(--surface)}.v2-pd-journey li>span{display:grid;min-width:0;font-size:13px}.v2-pd-journey small{color:var(--muted);font-size:11.5px}
.v2-pd-journey li.is-done>i{background:#20c483;border-color:#20c483;box-shadow:inset 0 0 0 3px var(--surface)}.v2-pd-journey li.is-done:not(:last-child)::before{background:#20c483}
.v2-pd-journey li.is-now>i{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 25%,transparent)}.v2-pd-journey li.is-more>i{border-style:dashed}
.v2-pd-meet{display:flex;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:12px}.v2-pd-meet>div{display:grid;min-width:0}.v2-pd-meet small{color:var(--muted);font-size:11.5px}.v2-pd-meet>.i{color:var(--accent)}
.v2-pd-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px}.v2-pd-tile{display:flex;gap:8px;align-items:center;padding:9px 10px;border:1px solid var(--line);border-radius:12px}.v2-pd-tile>.i{flex:none;color:var(--accent)}.v2-pd-tile>span{display:grid;min-width:0;font-size:12.5px}.v2-pd-tile small{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v2-pd-cr{border:1px solid var(--line);border-radius:10px;padding:0 10px}.v2-pd-cr summary{cursor:pointer;padding:7px 0;font-size:13px;font-weight:650}.v2-pd-cr summary small{color:var(--muted);font-weight:400}
/* 2.28.0 · « Faite hier / aujourd'hui » : la case d'une action prévue avant aujourd'hui devient deux petits choix dans la ligne. */
.v2-task-when{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;margin-left:4px}.v2-task-when small{color:var(--muted);font-size:12px;font-weight:600}
.v2-task-when .btn{min-height:30px;padding:0 10px;font-size:12.5px;border-radius:99px}
li:has(>.v2-task-when) .icon-btn,.setting-row:has(.v2-task-when) .icon-btn{display:none}
/* 2.28.0 · En haut à droite, aussi sur ordinateur : cloche des notifications, roue des Paramètres, bulle de Mon profil (au bord droit).
   Sur téléphone, la roue reste dans le menu (en-tête compact) ; la cloche prend la taille des autres ronds. */
.top-actions{position:relative}
.topbar .top-profile{display:grid;place-items:center;padding:0;border:0;background:none;border-radius:50%;cursor:pointer}
.topbar .top-notif,.topbar .top-settings{position:relative;flex:none;display:grid;place-items:center;padding:0;border-radius:50%;aspect-ratio:1}
.topbar .top-settings.is-on{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
@media (min-width:861px){.topbar .top-notif,.topbar .top-settings{width:40px;height:40px;min-height:40px}.topbar .top-profile,.topbar .top-profile .avatar{width:40px;height:40px;flex:0 0 40px;border-radius:50%}}
@media (max-width:860px){.topbar .top-settings{display:none}.topbar .top-notif{width:42px;height:42px;min-height:42px}}
@media (max-width:359px){.topbar .top-notif{width:38px;height:38px;min-height:38px}}
.top-notif-n{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:99px;background:var(--red);color:#fff;font-size:10.5px;font-weight:800;line-height:18px;text-align:center;box-shadow:0 0 0 2px var(--surface)}
.v2-notif-pop{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:350px;max-height:min(72vh,540px);overflow:auto;padding:8px;border:1px solid var(--glass-edge,var(--line));border-radius:16px;background:var(--glass-solid,var(--surface));-webkit-backdrop-filter:var(--glass-blur,none);backdrop-filter:var(--glass-blur,none);color:var(--text);box-shadow:0 18px 50px rgba(15,23,42,.18)}
.v2-notif-head{display:flex;align-items:center;gap:4px;padding:6px 8px 8px;font-size:14px}
.v2-notif-list{display:grid;gap:2px}
.v2-notif-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px;border:0;border-radius:11px;background:none;color:var(--text);text-align:left;font:inherit;cursor:pointer}.v2-notif-row:hover,.v2-notif-row:focus-visible{background:var(--surface2)}
.v2-notif-row>span{display:grid;flex:1;min-width:0}.v2-notif-row b{font-size:13px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-notif-row small{color:var(--muted);font-size:11.5px}
.v2-notif-row>.i:first-child{flex:none;width:30px;height:30px;padding:7px;border-radius:9px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}
.v2-notif-row.is-warn>.i:first-child{background:var(--red);color:#fff}.v2-notif-row>.i:last-child{flex:none;color:var(--subtle)}
.v2-notif-empty{display:flex;align-items:center;gap:8px;margin:0;padding:14px 8px;color:var(--muted);font-size:13px}
.v2-notif-foot{margin-top:6px;padding:10px 8px 4px;border-top:1px solid var(--line);font-size:12.5px}.v2-notif-foot .v2-push-row{flex-wrap:wrap}
@media (max-width:860px){.v2-notif-pop{position:fixed;top:calc(env(safe-area-inset-top,0px) + 78px);left:12px;right:12px;width:auto;max-height:calc(100dvh - env(safe-area-inset-top,0px) - 78px - 74px - env(safe-area-inset-bottom,0px) - 8px)}}
/* 2.28.0 · Fiche opportunité : la pastille d'étape et la température s'ouvrent en liste (select natif transparent par-dessus,
   16 px pour que l'iPhone ne zoome pas) ; le chevron dit qu'on peut changer. */
.v2-pillpick{position:relative;cursor:pointer;gap:5px}.v2-pillpick>.i:last-of-type{width:12px;height:12px;opacity:.75;flex:none}
.v2-pillpick>select{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;font-size:16px;-webkit-appearance:none;appearance:none}
.v2-pillpick:hover{filter:brightness(1.04)}.v2-pillpick:focus-within{outline:2px solid var(--accent);outline-offset:2px}
.temperature.v2-pillpick{min-height:30px;padding:6px 11px;border-radius:50px;border:1px solid color-mix(in srgb,currentColor 30%,transparent);background:color-mix(in srgb,currentColor 7%,transparent);font-size:11px}
/* 2.28.0 · Actions du jour : « Fait aujourd'hui » sous ce qui reste à faire, dans la carte Aujourd'hui. */
.v2-plan-today-done{margin-top:6px}
.v2-plan-more{margin:8px 2px 0;font-size:12.5px}

/* 2.28.2 · Revue des espacements (« des blocs qui se chevauchent ou qui sont trop collés ») :
   - fiche client : « Portail client », « Devis »… décollés de la liste du dessus ; le bloc Billit décollé de la dernière ligne de devis ;
   - « 38 % » d'une barre d'avancement sur une seule ligne (les petits textes des lignes de projet passaient chacun à la ligne) ;
   - en-tête du Dashboard : le badge Billit se raccourcit (« … », texte complet au survol) au lieu de pousser les icônes hors de la page ;
   - actions d'un membre (Paramètres) : les boutons ronds ne se touchent plus. */
.v2-client-phead:not(:first-child){margin-top:24px}
.v2-bx-client{margin-top:16px}
.v2-prog .v2-prog-val>small{display:inline;font-size:.72em;color:inherit}
.v2-dash-status .pill{min-width:0;overflow:hidden}.v2-dash-status .pill>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-dash-status .icon-btn{flex:none}
/* 2.29 · Suivi des paiements (Factures → « Suivi des paiements ») : tuiles qui filtrent, lignes des factures avec leurs trois étapes
   (rappel 1, rappel 2, mise en demeure), calendrier et anti-spam. Aucun bord gauche coloré : l'accent est dans la pastille ou l'icône. */
.v2-inv-tabs{margin:0 0 16px}
.v2-ptabbar b.is-warn{background:color-mix(in srgb,var(--orange) 22%,transparent);color:var(--orange)}
.v2-tk-sum{border-color:var(--line);background:var(--surface)}.v2-tk-sum>.i{color:var(--accent)}.v2-tk-sum .v2-warn-text{color:var(--red);font-weight:700}
.v2-tk-sum .pill,.v2-tk-sum .icon-btn{flex:none}.v2-tk-sum>.pill{margin-left:auto}
.v2-tk-tiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:0 0 16px}
.v2-tk-tile{display:grid;gap:4px;align-content:start;min-width:0;padding:14px 16px;border-radius:18px;text-align:left;font:inherit;color:var(--text);cursor:pointer;transition:border-color .15s,background .15s}
.v2-tk-tile>span{font-size:11.5px;font-weight:700;color:var(--muted)}
.v2-tk-tile>strong{font:700 21px 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-tk-tile>small{font-size:11.5px;color:var(--subtle)}
.v2-tk-tile:hover{border-color:color-mix(in srgb,var(--accent) 35%,var(--line2))}
.v2-tk-tile.is-on{border-color:color-mix(in srgb,var(--accent) 55%,var(--line2));background:color-mix(in srgb,var(--accent) 10%,var(--surface))}
.v2-tk-tile.is-red>strong{color:var(--red)}.v2-tk-tile.is-warn>strong{color:var(--orange)}.v2-tk-tile.is-green>strong{color:var(--green)}
.v2-tk-tile:focus-visible{outline:3px solid var(--accent2);outline-offset:2px}
.v2-tk-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.v2-tk-card .v2-psearch{margin:4px 0 6px;max-width:340px}
.v2-tk{grid-template-columns:minmax(0,1fr) minmax(0,1.25fr) auto auto}
.v2-tk.is-doc{grid-template-columns:minmax(0,1fr) auto auto}
.v2-tk.is-today{margin:0 -10px;padding-inline:10px;border-radius:12px;background:color-mix(in srgb,var(--orange) 7%,transparent)}
.v2-tk.is-held{opacity:.72}
.v2-tk-info{display:grid;gap:2px;font-size:12px;font-weight:700;color:var(--text)}.v2-tk-info small{font-weight:600}
.v2-tk-steps{display:flex;flex-wrap:wrap;align-items:center;gap:6px 4px;margin:0;padding:0;list-style:none;min-width:0;container:tksteps/inline-size}
.v2-tk-steps li{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:var(--subtle);white-space:nowrap}
.v2-tk-steps li+li::before{content:'';width:12px;height:1px;background:var(--line2);margin-right:2px}
.v2-tk-steps li>i,.v2-tk-steps li>.i{flex:none;width:20px;height:20px;border-radius:50%;display:inline-grid;place-items:center;font-style:normal;font-size:10.5px;font-weight:800;border:1px solid var(--line2);color:var(--subtle)}
.v2-tk-steps li>.i{padding:3px;box-sizing:border-box}
.v2-tk-steps li>span{display:grid;line-height:1.2}.v2-tk-steps li small{font-size:10.5px;font-weight:600;color:var(--subtle)}
.v2-tk-steps li.is-done{color:var(--muted)}.v2-tk-steps li.is-done>.i{border-color:transparent;background:color-mix(in srgb,var(--green) 18%,transparent);color:var(--green)}
.v2-tk-steps li.is-next{color:var(--text)}.v2-tk-steps li.is-next>i{border-color:color-mix(in srgb,var(--accent) 55%,transparent);color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}
.v2-tk-steps li.is-next small{color:var(--muted)}
.v2-tk-steps li.is-today>i{border-color:transparent;background:var(--orange);color:#fff}.v2-tk-steps li.is-today small{color:var(--orange);font-weight:800}
.v2-tk-steps li.is-off>i{border-style:dashed}
.v2-dun-plan{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:14px 0 0;padding:10px 12px;border:1px dashed var(--line2);border-radius:12px;font-size:12.5px;color:var(--muted)}
.v2-dun-plan>.i{color:var(--accent);flex:none}.v2-dun-plan>span{flex:1 1 18em;min-width:0}.v2-dun-plan b{color:var(--text)}
.v2-dun-lv{display:inline-flex;align-items:center;flex:none;height:22px;padding:0 9px;border-radius:999px;font-size:11px;font-weight:800;white-space:nowrap;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.v2-dun-lv.is-l2{background:color-mix(in srgb,var(--orange) 16%,transparent);color:var(--orange)}.v2-dun-lv.is-l3{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}
.v2-dun-g>label{grid-template-columns:auto minmax(0,1fr) auto auto}
.v2-dns{display:grid;gap:0;margin:8px 0 0;padding:0;list-style:none}
.v2-dns li{display:flex;align-items:flex-start;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);font-size:13px;line-height:1.45}.v2-dns li:last-child{border-bottom:0}
.v2-dns li>.i{flex:none;margin-top:2px}.v2-dns li.is-ok>.i{color:var(--green)}.v2-dns li.is-warn>.i{color:var(--orange)}.v2-dns li.is-ko>.i{color:var(--red)}
/* Colonne étroite (ordinateur moyen, téléphone) : les étapes l'une sous l'autre, la date à côté du nom, sans trait de liaison. */
@container tksteps (max-width:360px){.v2-tk-steps li{flex:1 1 100%}.v2-tk-steps li+li::before{display:none}.v2-tk-steps li>span{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 6px}}
@media (max-width:700px){.v2-tk-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.v2-tk-tile:last-child{grid-column:1/-1}}
/* Relecture 2.29 : de 761 px à un écran moyen, la liste est trop étroite pour quatre colonnes (le client tombait à 70 px) : le nom et le
   montant sur la 1re ligne, les étapes et les boutons sur la 2e. Mesuré sur la largeur de la liste, pas de la fenêtre (menu ouvert ou non). */
.v2-tk-list{container:tklist/inline-size}
@media (min-width:761px){@container tklist (max-width:960px){
 .v2-tk{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"main amt" "steps acts";row-gap:10px}
 .v2-tk>.v2-od-main{grid-area:main}.v2-tk>.v2-tk-steps{grid-area:steps}.v2-tk>.v2-od-amt{grid-area:amt;justify-self:end}.v2-tk>.v2-od-acts{grid-area:acts;justify-self:end}
 .v2-tk.is-doc{grid-template-areas:"main amt" "main acts"}}}
@media (max-width:760px){
 .v2-tk-tiles{gap:10px}.v2-tk-tile{padding:12px 13px;border-radius:16px}.v2-tk-tile>strong{font-size:18px}
 .v2-tk{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name amt" "info info" "steps steps" "acts acts"}
 .v2-tk.is-doc{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name amt" "info info" "acts acts"}.v2-tk.is-doc .v2-od-acts:empty{display:none}
 .v2-tk>.v2-tk-steps{grid-area:steps}.v2-tk .v2-od-main>.v2-tk-info{grid-area:info;min-width:0}.v2-tk .v2-od-acts{justify-self:start}
 .v2-tk-head .v2-who{width:100%}}
/* 2.29.1 · Qui s'en charge, sans ouvrir la tâche : son avatar (ou une silhouette « + » en pointillés), avec un select natif invisible
   par-dessus (clavier, lecteur d'écran, téléphone), dans chaque ligne et à droite de « Ajouter une tâche… ». */
.v2-who-pick{position:relative;flex:none;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;color:var(--subtle);cursor:pointer}
.v2-who-pick:not(.is-set){border:1.5px dashed color-mix(in srgb,var(--muted) 75%,transparent);color:var(--muted)}
.v2-who-pick .avatar{width:26px;height:26px}
.v2-who-pick select{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;font-size:16px;appearance:none;-webkit-appearance:none}
.v2-who-pick:hover,.v2-who-pick:focus-within{color:var(--accent);border-color:var(--accent)}
.v2-who-pick:focus-within{outline:2px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:2px}
.v2-who-pick.is-set:hover,.v2-who-pick.is-set:focus-within{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 50%,transparent)}
/* Téléphone (constat 7) : quand la ligne passe à la ligne, l'avatar reste à droite, jamais collé au bord gauche. */
@media (max-width:760px){.v2-task>.v2-task-who{margin-left:auto}}
/* 2.29.2 · SAV en Kanban (« en plus de l'autre ») : Liste ou Kanban, quatre colonnes (Ouverts, En cours, À valider, Clos), cartes que l'on
   glisse sur ordinateur ; sur téléphone, les colonnes défilent de côté. Accent = point de couleur et contour au survol, jamais de bord gauche. */
.v2-savk{display:grid;grid-template-columns:repeat(4,minmax(230px,1fr));gap:12px;overflow-x:auto;padding-bottom:6px}
.v2-savk-col{--st:#64748b;display:flex;flex-direction:column;gap:8px;min-width:0;padding:10px;border:1px solid var(--line);border-radius:16px;background:var(--surface2);transition:border-color .15s,background .15s}
.v2-savk-col.dragover{border-color:var(--st);background:color-mix(in srgb,var(--st) 9%,var(--surface2))}
.v2-savk-head{display:flex;align-items:center;gap:8px;padding:2px 4px;font-size:13px;font-weight:800}.v2-savk-head>i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--st)}
.v2-savk-head>b{margin-left:auto;min-width:22px;padding:1px 7px;border-radius:99px;background:color-mix(in srgb,var(--st) 16%,transparent);color:color-mix(in srgb,var(--st) 80%,var(--text));font-size:12px;text-align:center;font-variant-numeric:tabular-nums}
.v2-savk-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.v2-savk-card{display:grid;gap:5px;padding:10px 11px;border:1px solid var(--line);border-radius:12px;background:var(--surface);cursor:pointer;transition:border-color .15s,box-shadow .15s}
.v2-savk-card[draggable="true"]{cursor:grab}.v2-savk-card:hover{border-color:color-mix(in srgb,var(--st) 45%,var(--line2))}.v2-savk-card.dragging{opacity:.45}
.v2-savk-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.v2-savk-list>li{min-width:0}.v2-savk-card.is-busy{opacity:.5;pointer-events:none}
.v2-savk-top{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.v2-savk-card strong{font-size:13.5px;line-height:1.3;overflow-wrap:anywhere}.v2-savk-card small{color:var(--muted);font-size:12px;overflow-wrap:anywhere}
.v2-savk-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;color:var(--muted);font-size:12px}.v2-savk-foot time{flex:none}
.v2-savk-as{display:inline-flex;align-items:center;gap:6px;min-width:0}.v2-savk-as>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-savk-as .avatar{width:20px;height:20px;font-size:9px;flex:none}
.v2-savk-empty{margin:4px;color:var(--subtle);font-size:12.5px}.v2-savk-more{align-self:flex-start}
@media (max-width:760px){.v2-savk{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:84%;scroll-snap-type:x mandatory;margin-inline:-4px;padding-inline:4px;scroll-padding-inline:4px}.v2-savk-col{scroll-snap-align:start}}
/* 2.30.0 · Portail client : aperçu plein écran dans la démo, en onglets comme api/portal.php ; bouton « Portail client » d'un projet.
   Pas de bord gauche coloré (préférence de Pierre) : l'accent passe par la pastille, l'icône ou le fond. */
.modal.modal-full{max-width:none;width:100%;height:100%;max-height:100dvh;border-radius:0}
.overlay:has(>.modal-full){padding:0}
.modal-full .modal-body{flex:1 1 auto;padding-inline:max(16px,calc((100% - 820px)/2))}
/* 2.30.6 · Comme le portail : les projets, les onglets et le parcours passent à la ligne, jamais de défilement de côté. */
.v2-pd-projs,.v2-pd-tabs{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 10px}
.v2-pd-projs button{flex:0 1 auto;max-width:100%;text-align:left;padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--text);font:inherit;font-size:13px;font-weight:650;cursor:pointer}
.v2-pd-projs button[aria-current]{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.v2-pd-tabs{padding:4px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.v2-pd-tabs button{flex:1 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 12px;border:0;border-radius:9px;background:none;color:var(--muted);font:inherit;font-size:13.5px;font-weight:650;white-space:nowrap;cursor:pointer}
.v2-pd-tabs button[aria-current]{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.v2-pd-tabs b{min-width:19px;padding:0 6px;border-radius:99px;background:var(--accent);color:#fff;font-size:11px;line-height:1.6;text-align:center}
/* 2.30.14 · Comme le portail (« en mobile revois ceci, ça ne va pas ») : sur tablette et téléphone, des tuiles de même largeur (icône, nom),
   une ligne sur tablette, quatre par ligne au plus sur téléphone avec la dernière ligne centrée. */
.v2-pd-tabs button>svg{display:none}
@media (max-width:860px){.v2-pd-tabs{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr))}.v2-pd-tabs button{position:relative;flex-direction:column;gap:4px;min-width:0;padding:9px 3px 8px;font-size:12px;line-height:1.15;white-space:normal;text-align:center}.v2-pd-tabs button>svg{display:block;width:18px;height:18px}.v2-pd-tabs b{position:absolute;top:3px;left:calc(50% + 6px)}}
/* 2.30.18 · Comme le portail : sur téléphone, les rubriques de l'aperçu passent dans une barre de verre collée en bas (cinq au plus, sinon « Plus »). */
.v2-pd-more{display:none}
@media (max-width:640px){.v2-pd{display:flex;flex-direction:column}
.v2-pd-tabs{order:99;position:sticky;bottom:10px;z-index:3;display:flex;align-items:center;gap:2px;margin:6px 0 0;padding:6px;border:1px solid var(--dock-edge,var(--line));border-radius:999px;background:var(--dock-bg,var(--surface));-webkit-backdrop-filter:blur(26px) saturate(180%);backdrop-filter:blur(26px) saturate(180%);box-shadow:var(--dock-hi,0 0 0 transparent),0 16px 38px #0b0e2e38,0 3px 8px #0b0e2e1f}
.v2-pd-tabs>button,.v2-pd-more>summary{position:relative;flex:1 1 0;min-width:0;height:54px;padding:0 2px;border-radius:999px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:none;color:var(--dock-ink,var(--muted));font-size:10.5px;font-weight:650;line-height:1;white-space:nowrap;cursor:pointer}
.v2-pd-tabs>button>svg,.v2-pd-more>summary>svg{display:block;width:21px;height:21px}
.v2-pd-tabs>button>span,.v2-pd-more>summary>span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.v2-pd-tabs>button[aria-current],.v2-pd-more.is-on>summary,.v2-pd-more[open]>summary{background:var(--dock-on,var(--soft));color:var(--dock-ink-on,var(--accent))}
.v2-pd-tabs>button>b{top:5px;left:calc(50% + 5px)}
.v2-pd-tabs>.tx{display:none}
.v2-pd-more{display:flex;flex:1 1 0;min-width:0}
.v2-pd-more>summary{list-style:none}.v2-pd-more>summary::-webkit-details-marker{display:none}
.v2-pd-menu{position:absolute;right:0;bottom:calc(100% + 10px);display:grid;gap:2px;min-width:210px;padding:6px;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:0 22px 50px -18px #0b0e2e73}
.v2-pd-menu button{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:10px;min-width:0;padding:11px 12px;border:0;border-radius:12px;background:none;color:var(--text);font:inherit;font-size:14.5px;font-weight:600;line-height:1.2;white-space:nowrap;text-align:left;cursor:pointer}
.v2-pd-menu button>svg{display:block;width:19px;height:19px;color:var(--muted)}
.v2-pd-menu button[aria-current]{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}
.v2-pd-menu button[aria-current]>svg{color:var(--accent)}}
@media (max-width:380px){.v2-pd-tabs>button,.v2-pd-more>summary{padding:0 1px;font-size:9.5px;letter-spacing:-.01em}}
/* 2.30.18 · Parrainage de l'aperçu du portail (comme le portail). */
.v2-pd-gift{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line));border-radius:16px;background:linear-gradient(120deg,color-mix(in srgb,var(--accent) 11%,var(--surface)),color-mix(in srgb,var(--accent) 4%,var(--surface)))}
.v2-pd-gift>svg{flex:none;box-sizing:border-box;width:42px;height:42px;padding:10px;border-radius:13px;background:linear-gradient(100deg,#925df3,#627bf8);color:#fff}
/* 2.33.8 : l'offre en grand, au dégradé de la marque (couleur pleine sans background-clip), comme le portail (.gift). */
.v2-pd-gift em{display:block;margin-bottom:4px;font-style:normal;color:color-mix(in srgb,var(--accent) 80%,var(--text));font-size:11.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}
.v2-pd-gift strong{display:inline-block;font:700 clamp(22px,5vw,30px)/1.15 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.01em;color:var(--accent)}
@supports ((-webkit-background-clip:text) or (background-clip:text)){.v2-pd-gift strong{background:linear-gradient(100deg,#925df3,#627bf8);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}}
@media print,(forced-colors:active){.v2-pd-gift strong{background:none;-webkit-text-fill-color:currentColor}}
.v2-pd-gift small{display:block;margin-top:6px;color:var(--muted);font-size:13px;line-height:1.5}
@media (max-width:640px){.v2-pd-gift{flex-direction:column;gap:8px}}
.v2-pd-refsteps{display:grid;gap:10px;margin:0;padding:0;list-style:none;counter-reset:rs}
.v2-pd-refsteps li{position:relative;min-height:28px;padding:2px 0 0 40px;counter-increment:rs}
.v2-pd-refsteps li::before{content:counter(rs);position:absolute;left:0;top:0;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-weight:700;font-size:13px}
.v2-pd-refsteps strong,.v2-pd-refsteps small{display:block}
.v2-pd-refsteps small{color:var(--muted);font-size:12.5px}
.v2-pd-path{position:relative;list-style:none;margin:0;padding:0 0 6px;display:flex;flex-wrap:wrap;row-gap:14px}
.v2-pd-path li{position:relative;flex:1 1 140px;max-width:210px;display:grid;align-content:start;gap:1px;padding:26px 12px 0 0;font-size:13px}
.v2-pd-path li:not(:last-child)::before{content:"";position:absolute;top:8px;left:22px;right:4px;height:2px;background:var(--line)}.v2-pd-path li.is-done::before{background:#20c483}
.v2-pd-path li>i{position:absolute;top:0;left:0;width:18px;height:18px;border-radius:50%;border:2px solid var(--line);background:var(--surface)}
.v2-pd-path li.is-done>i{background:#20c483;border-color:#20c483;box-shadow:inset 0 0 0 3px var(--surface)}.v2-pd-path li.is-now>i{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 25%,transparent)}
.v2-pd-path li.is-now strong{color:var(--accent)}.v2-pd-path li.is-more>i{border-style:dashed}.v2-pd-path li.is-end>i{background:#20c483;border-color:#20c483}.v2-pd-path small{color:var(--muted);font-size:11.5px}
/* 2.30.13 : comme le portail, le parcours tient sur une ligne dès la largeur d'une tablette. */
@media (min-width:768px){.v2-pd-path{flex-wrap:nowrap}.v2-pd-path li{flex:1 1 0;max-width:none;min-width:0}.v2-pd-path strong{overflow-wrap:break-word;hyphens:auto}}
@media (max-width:640px){.v2-pd-path{flex-direction:column;row-gap:0}.v2-pd-path li{flex:none;max-width:none;padding:0 0 14px 30px}.v2-pd-path li>i{top:0}.v2-pd-path li:not(:last-child)::before{top:22px;bottom:2px;left:8px;right:auto;width:2px;height:auto}}
.v2-pd-res{list-style:none;margin:0;padding:0;display:grid;gap:6px}.v2-pd-res li{display:flex;gap:8px;align-items:center;padding:9px 10px;border:1px solid var(--line);border-radius:12px}
.v2-pd-res li>.i{flex:none;color:var(--accent)}.v2-pd-res li>span{display:grid;min-width:0;font-size:12.5px}.v2-pd-res small{color:var(--muted);font-size:11.5px}
.v2-pd-cr h5{margin:8px 0 2px;font-size:12px}.v2-pd-cr[open]{padding-bottom:8px}
/* 2.33.6 : « Autres liens » d'une réunion dans l'aperçu du portail (mlinks). */
.v2-pd-mlinks{margin:2px 0 0;padding-left:16px;font-size:12.5px}.v2-pd-mlinks li+li{margin-top:2px}.v2-pd-mlinks small{color:var(--muted);font-size:11.5px}
.v2-pmenu{position:relative}.v2-pmenu>summary{list-style:none}.v2-pmenu>summary::-webkit-details-marker{display:none}
.v2-pmenu-list{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:240px;max-width:min(320px,calc(100vw - 32px));display:grid;gap:2px;padding:6px;border:1px solid var(--line);border-radius:12px;background:var(--surface);box-shadow:var(--shadow)}
.v2-pmenu-list p{margin:2px 8px 4px;color:var(--muted);font-size:12px}
.v2-pmenu-list button{display:grid;gap:1px;text-align:left;padding:8px 10px;border:0;border-radius:9px;background:none;color:var(--text);font:inherit;cursor:pointer}.v2-pmenu-list button:hover{background:var(--surface2)}
.v2-pmenu-list small{color:var(--muted);font-size:11.5px}
@media (max-width:760px){.v2-pmenu-list{right:auto;left:0}}
/* 2.30.0 · Accès au portail : mot de passe avec « Proposer » et « Copier » sur la même ligne. */
.v2-portal-pwrow{display:flex;align-items:center;gap:6px}.v2-portal-pwrow .form-input{flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.02em}

/* 2.30.0 (Pierre : « on sait pas tout voir ») : sur un écran peu haut, le menu défile (plus rien hors d'atteinte) et se resserre un peu. */
.sidebar{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.sidebar>*{flex-shrink:0}
@media (min-width:861px) and (max-height:900px){.sidebar{padding-top:22px;padding-bottom:16px}.sidebar .brand{padding-bottom:16px}.sidebar .nav-link{padding-top:9px;padding-bottom:9px}.sidebar .nav-section-toggle{margin-top:6px}.sidebar .brand+.nav-section-toggle{margin-top:0}}
/* 2.30.0 : menu « Portail client » de la page projet opaque (le fond givré laissait voir la page) ; « Donner accès à une autre personne » en dernier. */
.v2-pmenu-list{background:linear-gradient(var(--surface),var(--surface)),var(--bg);font-size:14px}
.v2-pmenu-list .v2-pmenu-act{display:flex;align-items:center;gap:8px;white-space:nowrap;margin-top:4px;border-top:1px solid var(--line);border-radius:0 0 9px 9px;padding-top:10px;color:var(--accent);font-size:13px;font-weight:650}
/* 2.30.1 : menu « Portail client » de la page projet, une ligne par personne (état de l'accès, puis « Voir son portail » et « Identifiant et mot de passe »). */
.v2-pmenu-list .v2-pmenu-who{display:grid;gap:2px;padding:8px 10px}
.v2-pmenu-list .v2-pmenu-who+.v2-pmenu-who{border-top:1px solid var(--line)}
.v2-pmenu-list .v2-pmenu-who small b{color:var(--text);font-weight:650}
.v2-pmenu-list .v2-pmenu-btns{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.v2-pmenu-list .v2-pmenu-who+p{margin-top:6px;padding-top:10px;border-top:1px solid var(--line)}
.v2-pmenu-list .v2-pmenu-btns button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;font-weight:600;white-space:nowrap}
/* 2.30.1 : sur téléphone, le menu « Portail client » prend toute la largeur sous les boutons du projet (il sortait de l’écran à droite). */
@media (max-width:860px){.v2-phead-acts{position:relative}.v2-phead-acts>.v2-pmenu{position:static}.v2-phead-acts .v2-pmenu-list{left:0;right:0;max-width:none}}
