/* TrackR · styles du module dashboard (nettoyage, étape 4b) : ses règles, sorties de la base par _local/outils/etape4-ecran/ranger-par-module.js
   sans rien réécrire, dans leur ordre d'origine. Chargé après la base, dans l'ordre fixe des balises d'index.html, avant Givre. */
/* 2.30.9 · Fiche prospect, « Faites » : un long « Quoi ? » ou une note sans espace (une adresse web…) passe à … */
.v2-dc{display:flex;flex-direction:column}
.v2-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:6px;font-size:11px;color:var(--muted)}
.v2-tip span{display:inline-flex;align-items:center;gap:6px}
.v2-key{display:inline-block;width:16px;height:2px;border-radius:2px;background:var(--accent)}
.v2-key-prev{background:repeating-linear-gradient(90deg,var(--subtle) 0 4px,transparent 4px 7px)}
.v2-chart{flex:1;display:grid;grid-template-columns:40px minmax(0,1fr);grid-template-rows:190px auto}
.v2-chart-y{position:relative}
.v2-chart-plot{position:relative;grid-column:2}
.v2-grid{position:absolute;left:0;right:0;height:0;border-top:1px solid var(--line)}
.v2-line,.v2-line-prev{fill:none;stroke-width:2;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round}
.v2-line{stroke:var(--accent)}.v2-line-prev{stroke:var(--subtle);stroke-dasharray:5 5}
.v2-area{fill:var(--accent);opacity:.09}
.v2-end-dot,.v2-hit-dot{position:absolute;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}
.v2-hits{position:absolute;inset:0;display:grid;grid-template-columns:repeat(12,minmax(0,1fr))}
.v2-hit{position:relative;outline:none;cursor:crosshair}
.v2-hit::before{content:"";position:absolute;top:0;bottom:0;left:50%;border-left:1px solid var(--line2);opacity:0}
.v2-hit-dot{left:50%;opacity:0}.v2-hit-dot-prev{background:var(--subtle)}
.v2-tip{position:absolute;top:-8px;left:50%;z-index:3;display:none;flex-direction:column;gap:4px;min-width:160px;padding:10px 12px;border:1px solid var(--line2);border-radius:13px;background:var(--surface);box-shadow:var(--shadow);color:var(--text);font-size:12px;white-space:nowrap;pointer-events:none;transform:translate(-50%,-100%)}
.v2-hit:hover .v2-tip,.v2-hit:focus .v2-tip{display:flex}
.v2-hit:hover::before,.v2-hit:focus::before,.v2-hit:hover .v2-hit-dot,.v2-hit:focus .v2-hit-dot{opacity:1}
.v2-hit:nth-child(-n+2) .v2-tip{left:0;transform:translateY(-100%)}
.v2-hit:nth-child(n+11) .v2-tip{left:auto;right:0;transform:translateY(-100%)}
.v2-chart-x{grid-column:2;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));padding-top:10px;font-size:10px;color:var(--subtle);text-align:center}
.v2-chart-x .is-now{color:var(--text);font-weight:800}
.v2-bill-ttc{display:block;font-weight:700;color:var(--text)}
.v2-bill-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.v2-bill{display:flex;flex-direction:column;gap:5px;min-width:0;padding:14px;border:1px solid var(--line);border-radius:16px;background:var(--surface2)}
@media (max-width:760px){.v2-bill-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.v2-bill:last-child{grid-column:1/-1}.v2-chart{grid-template-columns:34px minmax(0,1fr);grid-template-rows:180px auto}.v2-chart-x span:nth-child(even){visibility:hidden}}
/* V2.10.4 : entre tablette et petit portable (menu affiché), 2 tuiles par ligne pour ne pas couper les montan … */
/* Filtre Mois / Trimestre / Année de la Facturation (V2.10.6) */
.v2-dc .section-head>.v2-who{flex:0 0 auto}
@media (max-width:760px){.v2-dc .section-head:has(>.v2-who){flex-wrap:wrap;gap:12px}}
/* V2.10.7 : Dashboard plus compact. « Évolution du CA » et « À traiter » à la même hauteur (celle du graphiqu … */
.v2-todo-body{display:flex;flex-direction:column;gap:10px;min-height:0;flex:1}
.v2-todo-body .v2-todo-list{flex:0 1 auto;min-height:0;overflow:auto;gap:6px}
.v2-todo-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:auto;font-size:12px;color:var(--muted)}
@media (min-width:1101px){.v2-todo-card{contain:size}}
.v2-bill{padding:10px 12px;gap:2px;border-radius:14px}
/* V2.10.8 : la Trésorerie en carte bancaire (puce, sans contact, IBAN masqué), même rendu en clair et en somb … */
.v2-bankcard .metric-top .label{color:#ffffffdb}
.v2-bank-chip{display:block;position:relative;width:30px;height:22px;margin-top:8px;border-radius:5px;background:linear-gradient(135deg,#f6e2a6,#cba253 52%,#efd58e);box-shadow:inset 0 0 0 1px #7d5f2266}
.v2-bank-chip:before{content:"";position:absolute;inset:7px 0;border-block:1px solid #7d5f2259}
.v2-bank-chip:after{content:"";position:absolute;inset:0 10px;border-inline:1px solid #7d5f2259}
.v2-dash .v2-bankcard .metric-foot{color:#ffffffc7}
.v2-bankcard .v2-dk-link{color:#fff}
.v2-bank-iban{font-family:'Space Grotesk',ui-monospace,monospace;letter-spacing:.1em;color:#fff;white-space:nowrap}
.v2-bankcard:after{content:"";position:absolute;inset:-40% auto -40% -60%;width:45%;transform:translateX(0) rotate(18deg);background:linear-gradient(90deg,transparent,#ffffff2e,transparent);pointer-events:none;opacity:0}
@media (hover:hover){
 .v2-bankcard:hover:after{animation:v2BankShine .9s ease}}
.page-enter .v2-bankcard:after{animation:v2BankShine 1.1s .55s ease}
@media (prefers-reduced-motion:reduce){.v2-bankcard:after{display:none}}
/* V2.10.8 : sorties du compte bancaire (fenêtre ouverte depuis la carte Trésorerie) */
.v2-bank-links{display:block;margin-top:2px}
/* 2.30.7 · Lien ou fichier d'un élément du Cockpit : ligne du process, choix en trois boutons, fichiers lâché … */
.v2-tip{background:var(--glass-solid);-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur)}
.v2-tip{border-color:var(--glass-edge)}
@media(prefers-reduced-transparency:reduce){
 .v2-tip{-webkit-backdrop-filter:none;backdrop-filter:none}
}
/* 2.14 (« trop gros, revois les tailles ») : sur téléphone, le montant et deux boutons à droite (Rappel en ic … */
/* Objectif à droite de Facturation (2.12) : la carte suit sa propre largeur (container query), pas celle de l'écran.
   « Plus grand le graphique par rapport à la card » : --ring suit la largeur de la carte ; réalisé et légende à droite de
   l'anneau, dessous quand la carte est étroite. */
.v2-goal{container-type:inline-size}
/* 2.21.2 · « on voit juste la portion prise par Billit, pas la partie que j'ai rajoutée manuellement » : la c … */
.v2-goal-body{--ring:clamp(124px,32cqw,170px);flex:1;display:grid;grid-template-columns:var(--ring) minmax(0,1fr);grid-template-areas:"ring sum" "ring legend" "month month";gap:12px 22px;align-items:center;align-content:center}
.v2-goal-ring{grid-area:ring;position:relative;width:var(--ring);aspect-ratio:1}
.v2-goal-ring circle{fill:none}
.v2-ring-track{stroke:color-mix(in srgb,var(--accent) 13%,var(--surface2));stroke-width:15}
.v2-goal-ring .v2-ring-inner{fill:color-mix(in srgb,var(--accent) 7%,transparent);stroke:color-mix(in srgb,var(--accent) 16%,transparent);stroke-width:1}
.v2-ring-billit,.v2-ring-extra{stroke-width:21}
.v2-ring-billit{stroke:url(#v2-ring-grad)}.v2-ring-extra{stroke:var(--goal-extra)}
.v2-ring-pace,.v2-ring-pace-bg{fill:none;stroke-linecap:round}
.v2-ring-pace{stroke:var(--text);stroke-width:3.5}.v2-ring-pace-bg{stroke:var(--glass-solid,var(--surface));stroke-width:8}
.v2-goal-mid{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;text-align:center;pointer-events:none}
.v2-goal-sum{grid-area:sum;align-self:end;min-width:0}
.v2-goal-label{font-size:12px;font-weight:800;color:var(--muted)}
.v2-goal-big{display:block;margin:3px 0 2px;font:700 clamp(24px,5.5cqw,34px)/1.05 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.04em;font-variant-numeric:tabular-nums}
.v2-goal-of{font-size:13px;color:var(--muted)}
.v2-goal-legend{grid-area:legend;align-self:start;list-style:none;margin:0;padding:0;display:grid;gap:6px;width:100%;max-width:380px}
.v2-sq{display:inline-block;width:14px;height:14px;border-radius:4px;flex:none}
.v2-sq.is-billit{background:linear-gradient(135deg,#a368ff,var(--accent2))}.v2-sq.is-extra{background:var(--goal-extra)}
.v2-sq.is-left{background:color-mix(in srgb,var(--accent) 13%,var(--surface2));box-shadow:inset 0 0 0 1px var(--line)}.v2-sq.is-over{background:var(--green)}
/* 2.13 : en petit (mobile, tiers du Dashboard), l'anneau à côté du total, la légende en lignes et le mois en … */
@container (max-width:399px){.v2-goal-body{--ring:clamp(96px,30cqw,118px);grid-template-areas:"ring sum" "legend legend" "month month";gap:12px 14px}
 .v2-goal-sum{align-self:center}.v2-goal-big{font-size:clamp(23px,8cqw,30px)}.v2-goal-sum .v2-dd{margin-top:5px}
 .v2-goal-legend{gap:5px;max-width:none}
 .v2-gm-val{font-size:21px}}
@container (min-width:720px){.v2-goal-body{--ring:clamp(136px,16cqw,170px);grid-template-columns:var(--ring) minmax(0,1fr) minmax(260px,1.05fr);grid-template-areas:"ring sum month" "ring legend month";gap:10px 32px}.v2-gm{align-self:center}}
/* Facturation à côté de l'objectif : 3 + 2 tuiles qui remplissent leurs lignes, 2 par ligne quand la carte est étroite. */
.v2-bill-card{container-type:inline-size}
/* 2.28.2 : cinq tuiles côte à côte seulement à partir de 760 px de carte (en dessous, les montants étaient coupés « 19802 €… ») ; sinon 3 + 2. */
@container (min-width:760px){.v2-bill-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}}
@container (min-width:481px) and (max-width:759px){.v2-bill-grid{grid-template-columns:repeat(6,minmax(0,1fr))}.v2-bill-grid>.v2-bill{grid-column:span 2}.v2-bill-grid>.v2-bill:nth-child(n+4){grid-column:span 3}}
/* 2.14 (« les cartes À envoyer, Facturé ce mois… c'est trop gros ») : sur téléphone aussi 3 + 2, en petit (ch … */
@container (max-width:480px){.v2-bill-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:7px}.v2-bill-grid>.v2-bill{grid-column:span 2}.v2-bill-grid>.v2-bill:nth-child(n+4){grid-column:span 3}
 .v2-bill{padding:8px 9px;gap:1px;border-radius:12px}.v2-bill-ttc{font-size:10px;line-height:1.3}.v2-unpaid-all{font-size:12px}.v2-unpaid-all .v2-ua-l{display:none}.v2-unpaid-all .v2-ua-s{display:inline}}
@container (max-width:300px){.v2-bill-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.v2-bill-grid>.v2-bill{grid-column:auto}.v2-bill-grid>.v2-bill:last-child{grid-column:1/-1}}
.v2-ua-s{display:none}
@media (max-width:760px){.v2-bill-head>.v2-who{flex:0 0 auto;margin:0}}
/* 2.30.18 (Pierre : « un voir plus après quelques lignes ») : description du projet sur 4 lignes, « Voir plus … */
.v2-dl{font-weight:700}
/* 2.30.4 · Champ de « ＋ Nouvelle … », sous son menu, ouvert en choisissant cette option. */
.v2-dproj-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.v2-dproj-list button:hover{border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}
.v2-dproj-list strong{display:block;font-size:14px}
.v2-dproj-list small{display:block;color:var(--muted);font-size:12px}
@media (max-width:760px){
 .v2-dproj-list button{grid-template-columns:minmax(0,1fr) auto}.v2-dproj-list .v2-prog{grid-column:1/-1}
 .v2-dproj-list .v2-team{display:none}}
.v2-dproj-list button{border-color:var(--glass-edge,var(--line));box-shadow:var(--glass-hi,none)}
/* 2.21 (« le menu de statut de la tâche est tout à droite, loin du titre ») : le statut suit le titre ; échéa … */
.v2-unpaid-top{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.v2-unpaid-all{display:inline-flex;align-items:center;gap:6px;padding:4px 0;border:0;background:none;color:var(--accent);font:700 13px/1.2 inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.v2-unpaid-all:hover{color:var(--text)}
.v2-bill-btn{font:inherit;color:inherit;text-align:left;cursor:pointer;transition:border-color .15s,transform .15s}
@media (hover:hover) and (pointer:fine){.v2-bill-btn:hover{border-color:color-mix(in srgb,var(--red) 55%,var(--line));transform:translateY(-1px)}}
.v2-bill-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Évolution du CA : 3e année (il y a deux ans), pointillés fins. */
.v2-area-extra{fill:var(--goal-extra);opacity:.42}.v2-key-extra{background:var(--goal-extra);height:8px;border-radius:2px}
.v2-key-prev2{background:repeating-linear-gradient(90deg,color-mix(in srgb,var(--accent2) 60%,var(--subtle)) 0 2px,transparent 2px 5px)}
.v2-line-prev2{fill:none;stroke:color-mix(in srgb,var(--accent2) 55%,var(--subtle));stroke-width:1.6;stroke-dasharray:2 4;vector-effect:non-scaling-stroke;stroke-linecap:round;opacity:.85}
.v2-hit-dot-prev2{background:color-mix(in srgb,var(--accent2) 55%,var(--subtle))}
/* 2.28.2 · « bug d'affichage » : la ligne Billit sous le nom, sur toute la largeur (à droite, elle écrasait l … */
.v2-bank-asof{display:flex;align-items:center;gap:5px;margin-top:3px;font-size:11px;font-weight:700;color:#ffffffc9}.v2-bank-asof.is-old{color:#ffd59a}
.v2-gm{grid-area:month;min-width:0;padding:11px 14px 12px;border-radius:15px;background:color-mix(in srgb,var(--accent) 6%,var(--surface2));border:1px solid color-mix(in srgb,var(--accent) 14%,var(--line))}
.v2-gm-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.v2-gm-pct{font-size:12px;font-weight:800;color:var(--accent);white-space:nowrap;font-variant-numeric:tabular-nums}
.v2-gm-mid{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;margin-top:3px}
.v2-gm-val{font:700 21px/1.15 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.035em;font-variant-numeric:tabular-nums}
.v2-gm-bar{height:7px;margin-top:9px;border-radius:99px;background:color-mix(in srgb,var(--accent) 12%,var(--surface3));overflow:hidden}
.v2-gm-note{margin:7px 0 0;font-size:12px;line-height:1.45;color:var(--muted)}.v2-gm-note strong{color:var(--text)}
.v2-goal-of{display:block}.v2-goal-sum .v2-dd{display:flex;margin-top:6px}
.v2-goal-ring.is-empty svg{filter:none}.v2-goal-ring.is-empty .v2-ring-track{stroke-dasharray:3 6;stroke-width:6}
.v2-goal-set{pointer-events:auto;display:grid;justify-items:center;gap:6px;max-width:calc(var(--ring) * .62);padding:8px;border:0;border-radius:14px;background:none;color:var(--accent);font-family:inherit;font-size:12px;font-weight:800;line-height:1.25;cursor:pointer}.v2-goal-set:hover span{text-decoration:underline}
.v2-dproj{container-type:inline-size}
@container (max-width:560px){.v2-dproj-list .v2-prog{grid-column:1/-1;grid-row:2}.v2-dproj-list .v2-team{grid-column:2;grid-row:1}}
@container (max-width:399px){.v2-goal .section-sub{display:none}
 .v2-goal-legend{grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:8px;padding-top:12px;border-top:1px solid var(--line)}
 .v2-goal-legend li>.v2-sq{grid-area:sq;width:9px;height:9px}.v2-goal-legend li>span{grid-area:lab;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v2-goal-legend li>strong{grid-area:val;font-size:14.5px}
 .v2-lg-x,.v2-gm-x{display:none}
 .v2-gm{padding:12px 0 0;border:0;border-top:1px solid var(--line);border-radius:0;background:none}
 .v2-gm-mid{justify-content:space-between}.v2-gm-val{font-size:19px}
 .v2-gm-bar{height:6px;margin-top:8px}.v2-gm-note{margin-top:6px}}
@media (max-width:860px){.v2-goal .v2-goal-legend,.v2-goal .v2-gm,.v2-goal .section-sub,.v2-goal .v2-goal-sum>.v2-goal-label{display:none}
 .v2-goal>.v2-goal-body{--ring:116px;display:contents}
 /* 2.17 (« pas une énorme carte ») : l'anneau à gauche avec le pourcentage ; à droite le titre, le CA réalisé, l'objectif et l'écart
    avec l'an dernier. 2.17.1 (« sors le CA du graphique, mets-le avec le texte ») : le CA n'est plus dans l'anneau. */
 .v2-goal:has(>.v2-goal-body){display:grid;grid-template-columns:var(--ring,116px) minmax(0,1fr);grid-template-areas:"ring head" "ring sum";gap:2px 16px;align-items:center;padding:14px 16px;--ring:116px}
 .v2-goal:has(>.v2-goal-body)>.section-head{grid-area:head;align-self:end;margin:0}
 .v2-goal:has(>.v2-goal-body)>.section-head .section-title{font-size:16px}
 .v2-goal>.v2-goal-body>.v2-goal-ring{grid-area:ring}
 .v2-goal>.v2-goal-body>.v2-goal-sum{grid-area:sum;align-self:start}
 .v2-goal .v2-goal-big{margin:2px 0 1px;font-size:22px}.v2-goal .v2-goal-of{font-size:12.5px}.v2-goal .v2-goal-sum .v2-dd{margin-top:4px;font-size:11.5px}}
/* 2.17 (« les cartes sont trop grandes, mal dimensionnées ») : sur téléphone, l'objectif sur toute la largeur … */
/* Titre court (« Objectif 2026 ») seulement si « Objectif de CA 2026 » ne tient pas sur une ligne. */
@container (max-width:150px){.v2-gt-x{display:none}}
.v2-asof-s{display:none}
@container (max-width:124px){
 .v2-asof-x{display:none}.v2-asof-s{display:inline}
}
/* 2.22.8 · l'aperçu en direct sur tablette en paysage et ordinateur (dès 861 px, comme l'en-tête collant) ; i … */.v2-c1{--c:var(--s1)}
.v2-sw{display:inline-block;flex:0 0 auto;width:10px;height:10px;border-radius:3px;background:var(--c)}
.v2-key-goal{background:repeating-linear-gradient(90deg,var(--text) 0 4px,transparent 4px 7px);opacity:.7}
/* Barres empilées : ancrées en bas, 2 px de surface entre segments, bout arrondi de 4 px ; ligne pointillée = coûts fixes. */
.v2-ib-cols{position:absolute;inset:0;display:grid;grid-template-columns:repeat(12,minmax(0,1fr))}
.v2-ib-col{position:relative;outline:none;cursor:crosshair;border-radius:8px}
.v2-ib-col:hover,.v2-ib-col:focus-visible{background:color-mix(in srgb,var(--text) 5%,transparent)}
.v2-ib-bar{position:absolute;left:22%;right:22%;bottom:0;top:0;display:flex;flex-direction:column-reverse;pointer-events:none}
.v2-ib-seg{display:block;flex:0 0 auto;background:var(--c);min-height:2px}
.v2-ib-seg+.v2-ib-seg{border-bottom:2px solid var(--surface)}
.v2-ib-seg:last-child{border-radius:4px 4px 0 0}
.v2-ib-col.is-now .v2-ib-seg{opacity:.82}
.v2-ib-goal{position:absolute;left:0;right:0;height:0;border-top:2px dashed color-mix(in srgb,var(--text) 62%,transparent);z-index:1;pointer-events:none}
.v2-ib-col .v2-tip{top:-6px}
.v2-ib-col:hover .v2-tip,.v2-ib-col:focus .v2-tip{display:flex}
.v2-ib-col:nth-child(-n+2) .v2-tip{left:0;transform:translateY(-100%)}
.v2-ib-col:nth-child(n+11) .v2-tip{left:auto;right:0;transform:translateY(-100%)}
/* 2.17 : mois prochain (prévu) = 13e colonne hachurée (à facturer, HTVA) et deux chiffres sous le graphique, … */
.v2-ib-13 .v2-ib-cols,.v2-ib-13 .v2-chart-x{grid-template-columns:repeat(13,minmax(0,1fr))}
.v2-ib-col.is-next .v2-ib-plan{background:repeating-linear-gradient(135deg,var(--c) 0 3px,color-mix(in srgb,var(--c) 30%,transparent) 3px 7px);box-shadow:inset 0 0 0 1.5px var(--c)}
.v2-chart-x .is-next{font-style:italic}
.v2-inc-next{display:flex;flex-wrap:wrap;gap:6px 22px;align-items:flex-start;margin-top:12px;padding:10px 12px;border:1px dashed var(--line2);border-radius:12px;font-size:12.5px}
.v2-inc-table{margin-top:12px}.v2-inc-table .v2-ctable{font-size:12.5px}.v2-inc-table .v2-ctable td,.v2-inc-table .v2-ctable th{padding:7px 10px}
.v2-cov-main{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;margin:2px 0 12px}
.v2-cov-state{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800}
.v2-cov-meter{position:relative;height:10px;border-radius:99px;background:var(--surface3)}
.v2-cov-scale{display:flex;justify-content:space-between;gap:10px;margin:7px 0 14px;font-size:11px;color:var(--muted)}
.v2-cov-list{list-style:none;margin:0;padding:0;display:grid;gap:0}
.v2-cov-more{margin-top:10px;align-self:flex-start}
.v2-mix-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.v2-mix-head{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:30px;margin:0 0 10px}.v2-mix-head .v2-mix-title{margin:0}
.v2-mix-title{margin:0 0 10px;font-size:12px;font-weight:800;letter-spacing:.04em;color:var(--muted);text-transform:uppercase}
.v2-dn-wrap{position:relative;width:132px;height:132px;margin:0 auto 12px}
.v2-dn{width:100%;height:100%;display:block}
.v2-dn-track{fill:none;stroke:var(--surface3);stroke-width:13}
.v2-dn-seg{fill:none;stroke:var(--c);stroke-width:13}
.v2-dn-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}
.v2-dn-legend{list-style:none;margin:0;padding:0;display:grid;gap:6px}
@media (max-width:1100px) and (min-width:861px){.v2-mix-grid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:520px){.v2-mix-grid{grid-template-columns:minmax(0,1fr)}}
.v2-pf-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px}
.v2-pf-kpi{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border:1px solid var(--line);border-radius:16px;background:var(--surface2);min-width:0}
.v2-pf-kpi.is-hero{background:color-mix(in srgb,var(--green) 10%,var(--surface2));border-color:color-mix(in srgb,var(--green) 30%,var(--line))}
.v2-pf-list{list-style:none;margin:0;padding:0}
.v2-pf-list li.is-total{font-weight:800;border-top:1px solid var(--line2);background:color-mix(in srgb,var(--text) 3%,transparent);padding:8px 8px;margin:0 -8px;border-radius:8px}
.v2-pf-notes{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:5px}
@media (max-width:760px){.v2-pf-kpis{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.v2-pf-kpi.is-hero{grid-column:1/-1}.v2-profit-sw{width:100%;overflow-x:auto}}
/* 2.16 : thème clair / sombre / auto (Paramètres → Apparence) */
@media (max-width:860px){
 .v2-ib .v2-tip{min-width:0;max-width:min(240px,68vw);white-space:normal}
 .v2-dash .v2-asof-x{display:none}.v2-dash .v2-asof-s{display:inline}
}
.v2-tile-hit{position:absolute;inset:0;z-index:1;display:block;width:100%;height:100%;margin:0;padding:0;border:0;border-radius:inherit;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent}
.v2-tile-hit:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.v2-pmini{display:flex;align-items:flex-end;gap:3px;height:12px;margin-top:5px}
.v2-pmini i.is-late{background:linear-gradient(to top,var(--orange) var(--p),color-mix(in srgb,var(--orange) 22%,transparent) var(--p))}
@media (hover:hover) and (pointer:fine){.v2-bill-btn:not(.bad):hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}}
.v2-dun-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:10px}
.v2-bill-head .v2-dun-btn{width:auto;margin:0 0 0 auto}
/* 2.20.2 : limité à la case à cocher (label) ; sur .v2-check tout court, il décentrait le « + » rond des obje … */
@media (max-width:860px){
 .v2-dash .v2-goal>.v2-goal-body{--ring:84px}
 .v2-dash .v2-goal:has(>.v2-goal-body){--ring:84px;gap:0 12px;padding:10px 12px}
 .v2-dash .v2-goal:has(>.v2-goal-body)>.section-head .section-title{font-size:14px}
 .v2-dash .v2-goal .v2-goal-big{font-size:19px}
 .v2-dash .v2-goal .v2-goal-of{font-size:11.5px}
 .v2-dash .v2-goal:not(.is-nogoal) .v2-goal-mid strong{font-size:21px}
 .v2-dash .v2-goal .v2-goal-mid span{margin-top:1px;font-size:9.5px}
  .v2-dash .v2-bill-card{padding:10px 12px}
 .v2-dash .v2-bill-card>.v2-bill-head{margin-bottom:8px;align-items:center}
 .v2-dash .v2-bill-card>.v2-bill-head .section-title{font-size:15px}
 .v2-dash .v2-bill-head .v2-dun-btn{min-height:30px;padding:4px 10px;font-size:12px}
 .v2-dash .v2-bill em{display:block;overflow:hidden;text-overflow:ellipsis}
}
@media (max-width:860px){
 .v2-dash.is-sync-bill>.page-heading{display:none}
 .v2-bill-sync{margin-left:auto;gap:4px;width:auto}
 .v2-bill-sync .pill{min-height:24px;padding:3px 8px;font-size:11px}
 .v2-bill-sync+.v2-dun-btn{margin-left:6px}
 .v2-dash .v2-bill .v2-bill-head{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
 .v2-dash .v2-bill .v2-bill-head .i{display:none}
 .v2-dash .v2-bill em{white-space:nowrap}
}
@media (max-width:860px){
 .v2-dash .v2-goal>.v2-goal-body{--ring:76px}
 .v2-dash .v2-goal:has(>.v2-goal-body){--ring:76px;padding:8px 12px}
 .v2-dash .v2-goal:not(.is-nogoal) .v2-goal-mid strong{font-size:19px}
 .v2-dash .v2-bill-card{padding:9px 10px}
 .v2-dash .v2-bill-card>.v2-bill-head{margin-bottom:6px}
 .v2-dash .v2-bill-grid{gap:6px}
 .v2-dash .v2-bill{padding:6px 8px}
}
@media (max-width:860px){.v2-dash .v2-goal:not(.is-nogoal) .v2-goal-mid span{display:none}}
/* 2.18 · Dashboard sur téléphone (« c'est très moche en mobile », 26/10/2026) : une seule forme de case et un … */
@media (max-width:860px){
 .v2-dash .v2-tile-hit:active,.v2-dash .v2-bill-btn:active{background:color-mix(in srgb,var(--text) 6%,transparent)}
 .v2-dash .v2-bankcard>.v2-tile-hit:active{background:#ffffff1a}
 .v2-dash .v2-goal:not(.is-nogoal)>.v2-goal-body,.v2-dash .v2-goal:not(.is-nogoal):has(>.v2-goal-body){--ring:64px}
 .v2-dash .v2-goal:has(>.v2-goal-body){gap:0 12px;padding:8px 12px}
 .v2-dash .v2-goal:has(>.v2-goal-body)>.section-head .section-title{font-size:12px;line-height:16px}
 .v2-dash .v2-goal .v2-goal-sum{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:6px;min-width:0}
 .v2-dash .v2-goal .v2-goal-big{flex:0 0 100%;margin:2px 0 1px;font-size:20px;line-height:24px}
 .v2-dash .v2-goal .v2-goal-of,.v2-dash .v2-goal .v2-goal-sum .v2-dd{margin:0;font-size:11.5px;line-height:15px;white-space:nowrap}
 .v2-dash .v2-goal:not(.is-nogoal) .v2-goal-mid strong{font-size:16px}
 .v2-dash .v2-goal :is(.v2-ring-pace,.v2-ring-pace-bg){display:none}
 .v2-dash .v2-bill-card{padding:8px 0 4px;overflow:hidden}
 .v2-dash .v2-bill-card>.v2-bill-head{min-height:30px;margin:0 12px 4px}
 .v2-dash .v2-bill-card>.v2-dc-empty{margin:0 12px 6px}
 .v2-dash .v2-bill-sync .pill-lime{min-height:0;padding:0 2px;border:0;background:none;box-shadow:none;color:var(--muted);font-weight:600}
 .v2-dash .v2-bill-sync .icon-btn{width:30px;height:30px;border-radius:50%}
 .v2-dash .v2-bill-card>.v2-bill-head .v2-dun-btn{min-height:30px}
 .v2-dash .v2-bill-card .v2-bill{gap:0;min-width:0;padding:6px 10px 6px 12px;border:0;border-radius:0;background:none}
 .v2-dash .v2-bill-card .v2-bill>.v2-bill-head{margin:0;font-size:11px;line-height:15px;font-weight:600;color:var(--muted)}
 .v2-dash .v2-bill-card .v2-bill>strong{margin-top:1px;font-size:16px;line-height:20px;letter-spacing:-.03em}
 .v2-dash .v2-bill-card .v2-bill>em{margin-top:1px;font-size:11px;line-height:15px}
 .v2-dash .v2-bill-ttc{display:none}
}
@media (min-width:340px) and (max-width:860px){
 .v2-dash .v2-bill-card .v2-bill-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:0}
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill{grid-column:span 2}
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill:nth-child(n+4){grid-column:span 3;border-top:1px solid var(--line)}
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill:is(:nth-child(2),:nth-child(3),:nth-child(5)){border-left:1px solid var(--line)}
}
@media (min-width:400px) and (max-width:860px){
 .v2-dash .v2-goal:not(.is-nogoal):has(>.v2-goal-body){grid-template-columns:var(--ring) minmax(0,1fr) auto;grid-template-areas:"ring head left" "ring sum left"}
 .v2-dash .v2-goal:not(.is-nogoal)>.v2-goal-body>.v2-goal-legend{display:block;grid-area:left;align-self:center;max-width:none;margin:0;padding:0 0 0 12px;border:0;border-left:1px solid var(--line);text-align:right}
 .v2-dash .v2-goal .v2-goal-legend>li:not(:last-child),.v2-dash .v2-goal .v2-goal-legend .v2-sq{display:none}
 .v2-dash .v2-goal .v2-goal-legend>li:last-child{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
 .v2-dash .v2-goal .v2-goal-legend>li>span{font-size:11px;font-weight:600;color:var(--muted)}
 .v2-dash .v2-goal .v2-goal-legend>li>strong{font:700 16px/20px 'Space Grotesk',system-ui,sans-serif;font-variant-numeric:tabular-nums}
}
/* 2.18.3 · Dashboard du téléphone refait (« refais-moi un truc en mode designer », 26/10/2026), même DA. Une … */
@media (max-width:860px){
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal),.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal){--ring:70px;position:relative;overflow:hidden;padding:12px 14px 12px 16px;border-radius:22px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal):has(>.v2-goal-body),.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal):has(>.v2-goal-body){grid-template-columns:minmax(0,1fr) var(--ring);grid-template-areas:"head ring" "sum ring";gap:2px 14px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal)>.v2-goal-body,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal)>.v2-goal-body{--ring:70px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .section-title,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .section-title{font-size:12.5px;line-height:16px;font-weight:650;color:var(--muted)}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .v2-goal-big,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .v2-goal-big{margin:2px 0 4px;font-size:28px;line-height:30px;letter-spacing:-.04em}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .v2-goal-sum .v2-dd,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .v2-goal-sum .v2-dd{padding:1px 7px;border-radius:999px;background:color-mix(in srgb,currentColor 11%,transparent)}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal)>.v2-goal-body>.v2-goal-legend,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal)>.v2-goal-body>.v2-goal-legend{display:none!important}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .v2-goal-mid strong,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .v2-goal-mid strong{font-size:18px;line-height:20px}
}
/* 2.18.3 (suite) · le mois prochain dans les récurrentes, la Facturation en une carte, « Devis à faire » en f … */
@media (max-width:860px){
 .v2-dash .v2-bill-card.is-m{padding:12px}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head{min-height:28px;margin:0 2px 8px}
}
/* 2.18.4 : « HTVA » écrit à côté des montants de la Facturation (« on ne sait pas ce qu'il en est ») ; dans P … */
.v2-bill strong .v2-ht{margin-left:5px;font:600 11px/1 system-ui,sans-serif;letter-spacing:0;color:var(--muted)}
/* 2.18.4 : téléphones peu hauts (iPhone SE, Safari avec ses barres) : tout se resserre pour tenir sans défile … */
@media (max-width:860px) and (max-height:760px){
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal),.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal){--ring:58px;padding:9px 14px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal)>.v2-goal-body,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal)>.v2-goal-body{--ring:58px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .v2-goal-big,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .v2-goal-big{margin:1px 0 2px;font-size:24px;line-height:26px}
 .v2-dash .v2-dash-grid>.v2-goal:not(.is-nogoal) .v2-goal-mid strong,.v2-dash .v2-dash-grid>.v2-m-fin>.v2-goal:not(.is-nogoal) .v2-goal-mid strong{font-size:15px;line-height:17px}
 .v2-dash .v2-bill-card.is-m{padding:10px}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head{margin-bottom:6px}
}
/* 2.18.7 : Dashboard du téléphone sans aucun défilement (« je ne veux pas de scroll sur cette page mobile, mê … */
@media (max-width:860px){
 .v2-dash.fit-1 .v2-bill-card.is-m{padding:9px 10px}
 .v2-dash.fit-1 .v2-bill-card.is-m>.v2-bill-head{min-height:24px;margin-bottom:5px}
 .v2-dash.fit-2 .v2-bill-card.is-m>.v2-bill-head .section-title{font-size:15px}
 /* fit-3 (iPhone SE dans Safari) : le titre « Facturation » s'efface, les cases disent déjà ce qu'elles montrent. */
 .v2-dash.fit-3 .v2-bill-card.is-m>.v2-bill-head{display:none}
}
/* 2.20 · Dashboard du téléphone d'après la maquette de Pierre (« garde cette idée-là », « c'est pas grave si … */
@media (max-width:860px){
 .v2-m-sec{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:32px;margin:0 4px -4px}
 .v2-m-sec .v2-money-btn{width:32px;height:32px}
 .v2-dash .v2-dash-grid>.v2-hero{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"main ring" "foot foot";gap:14px 12px;padding:18px 18px 14px;border-radius:24px;overflow:hidden;
  background:linear-gradient(150deg,color-mix(in srgb,var(--accent) 17%,var(--surface)),color-mix(in srgb,var(--accent2) 7%,var(--surface)) 70%)!important;border-color:color-mix(in srgb,var(--accent) 24%,var(--line))!important}
 .v2-hero-main{grid-area:main;display:flex;flex-direction:column;min-width:0}
 .v2-hero .v2-eyebrow{color:var(--accent)}
 .v2-hero-title{margin:6px 0 0;font-size:15px;line-height:19px;font-weight:700;color:var(--text)}
 .v2-hero-val{margin-top:6px;font:700 33px/37px 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--text)}
 .v2-hero-of{margin-top:4px;font-size:12.5px;line-height:16px;color:var(--muted)}
 .v2-hero .v2-hero-ring{--ring:108px;grid-area:ring;align-self:center}
 .v2-hero .v2-goal-mid span{margin-top:2px}
 .v2-hero-foot{grid-area:foot;display:flex;align-items:center;gap:10px;min-width:0;font-size:11.5px;color:var(--subtle)}
 .v2-hero-foot>span:last-child{white-space:nowrap}
 .v2-hero-foot .v2-dd{flex-wrap:nowrap;padding:3px 9px;border-radius:999px;background:color-mix(in srgb,currentColor 12%,transparent);white-space:nowrap}
 .v2-hero-foot:has(.v2-hero-extra){flex-wrap:wrap;row-gap:6px}
 .v2-hero-extra{display:inline-flex;align-items:center;gap:5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-weight:700}
 .v2-hero-extra>.v2-sq{width:8px;height:8px;border-radius:50%}
 .v2-dash .v2-dash-grid>.v2-hero.is-wait{grid-template-areas:none;grid-template-columns:minmax(0,1fr)}
 .v2-dash .v2-bill-card.is-m{padding:0;border:0!important;border-radius:0;background:none!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;overflow:visible}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head{align-items:flex-end;min-height:0;margin:8px 4px 10px}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head>div:first-child{flex:1;min-width:0}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head .v2-eyebrow{white-space:nowrap}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head .section-title{margin-top:3px;font-size:21px;line-height:25px;font-weight:750}
}
@media (max-width:359px){
 .v2-dash .v2-dash-grid>.v2-hero{padding:16px 14px 12px}
 .v2-hero-val{font-size:28px;line-height:32px}
 .v2-hero .v2-hero-ring{--ring:92px}
}
/* 2.20 · relecture : case « Garder » vraiment cachée sur ordinateur, échelle des graphiques masquée avec les … */
html[data-money-hidden] .v2-chart-y span{visibility:hidden}

/* 2.20.2 · Carte de l'objectif du téléphone : l'anneau prend la hauteur de la carte (à côté du CA et de l'écart avec l'an dernier),
   un peu plus grand ; le texte du rythme sous la carte est retiré. */
@media (max-width:860px){
 .v2-dash .v2-dash-grid>.v2-hero{grid-template-areas:"main ring" "foot ring"}
 .v2-hero .v2-hero-ring{--ring:128px}
}
@media (max-width:359px){
 .v2-hero .v2-hero-ring{--ring:108px}
}
/* 2.20.3 · Anneau de l'objectif du téléphone encore un peu plus grand (« je le trouve toujours très petit ») : la carte gagne la place
   sur ses marges et l'écart entre le CA et l'anneau. */
@media (max-width:860px){
 .v2-dash .v2-dash-grid>.v2-hero{padding:18px 14px 14px 16px;column-gap:8px}
 .v2-hero .v2-hero-ring{--ring:min(146px,39vw)}
 .v2-hero-val{font-size:min(32px,8.5vw);line-height:1.12}
}
@media (max-width:359px){
 .v2-hero .v2-hero-ring{--ring:118px}
 .v2-hero-val{font-size:27px;line-height:31px}
}
/* 2.20.9 · Dashboard du téléphone à la même échelle qu'Objectifs et Actions (« les éléments sont trop grands … */
@media (max-width:860px){
 .v2-m-sec{min-height:30px}
 .v2-dash .v2-dash-grid>.v2-hero{gap:12px 8px;padding:16px 14px 14px 16px;border-radius:22px}
 .v2-hero-title{margin-top:5px;font-size:14px;line-height:18px}
 .v2-hero-val{margin-top:4px;font-size:26px;line-height:31px}
 .v2-hero-of{font-size:12px}
 .v2-hero .v2-hero-ring{--ring:min(124px,34vw)}
 .v2-hero-foot{font-size:11px}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head{margin:6px 4px 8px}
 .v2-dash .v2-bill-card.is-m>.v2-bill-head .section-title{margin-top:2px;font-size:16px;line-height:20px;font-weight:700}
}
@media (max-width:359px){
 .v2-hero-val{font-size:23px;line-height:28px}
 .v2-hero .v2-hero-ring{--ring:104px}
}
/* 2.20.9 · « D'où vient le récurrent » (ordinateur) : l'interrupteur Service / Nature passe dans l'en-tête de … */
.v2-mix>.section-head>.v2-mix-sw{flex:none}
/* 2.20.9 · « À traiter » (ordinateur) : la liste qui défile collait au pied de carte, la ligne coupée touchait « dont 1 action en retard ». */
.v2-todo-body>.v2-todo-foot{padding-top:8px;border-top:1px solid var(--line)}
/* 2.23.5 · « ajouter un bouton envoyer tous les rappels » : en tête de « À relancer en premier », poussé à dr … */
.v2-unpaid-top .v2-dun-btn{width:auto;margin:0 0 0 auto}
.v2-unpaid-top .v2-dun-btn+.v2-unpaid-all{margin-left:4px}
.v2-unpaid-top:has(.v2-dun-btn) .v2-ua-l{display:none}
.v2-unpaid-top:has(.v2-dun-btn) .v2-ua-s{display:inline}

/* 2.30.15 · Dashboard du téléphone refait (Pierre, 29/10 : « le design de cette partie-là, c'est vraiment hyp … */
@media (max-width:860px){
 .v2-dash.is-ph{--ph-sh:0 1px 2px #1d2b5c0f,0 14px 28px -20px #1d2b5c59;--ph-line:var(--line)}
 [data-theme="dark"] .v2-dash.is-ph{--ph-sh:0 1px 2px #00000040,0 16px 30px -20px #000000b3}
 .v2-dash.is-ph .v2-dash-grid{gap:12px}
 .v2-dash.is-ph .v2-dash-grid>.v2-m-sec{margin:0 4px -2px}
 .v2-profit-m>.v2-profit{margin:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
 .v2-profit-m>.v2-profit>.section-head .section-title{display:none}
 .v2-dash.is-ph .v2-bill-card.is-m{padding:0;border:0;border-radius:0;background:none;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;overflow:visible}
 .v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-head{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:32px;margin:4px 4px 10px}
 .v2-dash.is-ph .v2-mb-pay{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 14px;margin:14px 0 0;padding:0}
 .v2-dash.is-ph .v2-mb-pay>.v2-mb-bar{grid-column:1/-1;display:block;height:8px;margin:0;border-radius:999px;background:color-mix(in srgb,var(--green) 16%,transparent)}
 .v2-dash.is-ph .v2-mb-pay>.v2-mb-bar>i{display:block;height:100%;border-radius:inherit;background:var(--green)}
 .v2-dash.is-ph .v2-mb-leg{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"dot lab" "val val";align-items:center;column-gap:6px;row-gap:2px;min-width:0;font-size:12px;line-height:15px;color:var(--muted);white-space:nowrap}
 .v2-dash.is-ph .v2-mb-leg>i{grid-area:dot;width:8px;height:8px;border-radius:50%;background:color-mix(in srgb,var(--green) 30%,transparent)}
 .v2-dash.is-ph .v2-mb-leg.is-paid>i{background:var(--green)}
 .v2-dash.is-ph .v2-mb-leg>b{grid-area:val;justify-self:start;margin:0;overflow:hidden;font:700 15px/19px 'Space Grotesk',system-ui,sans-serif;color:var(--text);font-variant-numeric:tabular-nums;text-overflow:ellipsis}
}
/* 2.30.31 · Mensualités Billit : « Reprendre dans TrackR » sous la mensualité ; alerte orange tant que Billit … */
.v2-dash .v2-dash-grid .v2-dc{border-radius:var(--dz-r)}
.v2-kgrid{display:flex;flex-wrap:wrap;gap:16px}
.v2-kgrid>.metric{position:relative;flex:1 1 calc(25% - 12px);min-width:200px;min-height:140px;margin:0;padding:18px 20px 16px;display:flex;flex-direction:column;border-radius:var(--dz-r)}
.v2-kgrid>.metric>.metric-top{display:flex;align-items:center;gap:10px;margin:0;min-height:30px}
.v2-kgrid>.metric>.metric-top>.label{order:2;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:18px;font-weight:650;letter-spacing:0;text-transform:none;color:var(--muted)}
.v2-kgrid>.metric>.metric-top>.metric-icon{order:1;flex:none;display:grid;place-items:center;width:30px;height:30px;margin:0;border:0;border-radius:10px;background:color-mix(in srgb,var(--k,var(--accent)) 13%,transparent);color:var(--k,var(--accent))}
.v2-kgrid>.metric>.metric-top>.metric-icon svg{width:16px;height:16px}
.v2-kgrid>.metric>.metric-val{margin:auto 0 0;padding-top:14px;font:700 28px/32px 'Space Grotesk',system-ui,sans-serif;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-kgrid>.metric>.metric-val small{margin-left:5px;font:600 13px/1 Inter,system-ui,sans-serif;letter-spacing:0;color:var(--muted)}
.v2-kgrid>.metric>.metric-foot{margin:6px 0 0;padding:0;border:0;min-height:17px;font-size:12.5px;line-height:17px;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.v2-dstack{display:flex;flex-direction:column;gap:var(--dz-gap)}
.v2-dstack>.v2-dcol{display:contents}
@media (min-width:1280px){.v2-dstack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
 .v2-dstack>.v2-dcol{display:flex;flex-direction:column;gap:var(--dz-gap);min-width:0}}
@media (max-width:860px){
 .v2-kgrid{gap:10px}
 .v2-kgrid>.metric{flex:1 1 calc(50% - 5px);min-width:0;min-height:122px;padding:14px 15px 13px}
 .v2-kgrid>.metric>.metric-top{gap:8px;min-height:26px}
 .v2-kgrid>.metric>.metric-top>.metric-icon{width:26px;height:26px;border-radius:9px}
 .v2-kgrid>.metric>.metric-top>.metric-icon svg{width:14px;height:14px}
 .v2-kgrid>.metric>.metric-top>.label{font-size:12.5px;white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-height:15px}
 .v2-kgrid>.metric>.metric-val{padding-top:10px;font-size:22px;line-height:26px}
 .v2-kgrid>.metric>.metric-foot{font-size:11.5px;line-height:15px;-webkit-line-clamp:1;white-space:nowrap;display:block;text-overflow:ellipsis}}
.v2-kgrid>.metric>.metric-top{justify-content:flex-start}
.v2-dash .v2-todo-card{contain:none}
.v2-dash .v2-todo-body{flex:none}
.v2-dash .v2-todo-body .v2-todo-list{max-height:400px}
/* Trésorerie : la carte bancaire bleu nuit garde son allure, à la taille des autres cases (la puce dorée à la place de l'icône). */
.v2-kgrid>.metric.v2-bankcard{overflow:hidden;border-color:transparent;color:#fff;box-shadow:0 16px 32px -20px #0c1022d9;
 background:radial-gradient(circle at 112% 118%,transparent 52px,#ffffff17 53px,#ffffff17 54px,transparent 55px),radial-gradient(circle at 112% 118%,transparent 78px,#ffffff0f 79px,#ffffff0f 80px,transparent 81px),radial-gradient(120% 140% at 100% 0,#8e9bff47,transparent 55%),radial-gradient(90% 120% at 0 100%,#5b3fd12e,transparent 60%),linear-gradient(135deg,#0c1022,#18204a 52%,#2b3580)}
.v2-kgrid>.metric.v2-bankcard>.metric-top{justify-content:space-between;padding-left:40px}
.v2-kgrid>.metric.v2-bankcard>.metric-top>.label{order:0;color:#ffffffdb}
.v2-kgrid>.metric.v2-bankcard>.v2-bank-chip{position:absolute;top:22px;left:20px;width:30px;height:22px;margin:0}
.v2-kgrid>.metric.v2-bankcard>.metric-val{color:#fff;text-shadow:0 1px 10px #0003}
.v2-kgrid>.metric.v2-bankcard>.v2-bank-asof{margin-top:4px}
.v2-kgrid>.metric.v2-bankcard>.metric-foot{margin-top:3px;color:#ffffffc7;display:flex;flex-wrap:wrap;gap:0 10px;-webkit-line-clamp:unset}
.v2-kgrid>.metric.v2-bankcard .v2-bank-links{display:inline;margin:0}
.v2-dc-ico{display:inline-grid;place-items:center;width:30px;height:30px;margin:-4px 10px -4px 0;vertical-align:middle;border-radius:10px;background:color-mix(in srgb,var(--k,var(--accent)) 13%,transparent);color:var(--k,var(--accent))}
.v2-dash .v2-dc>.section-head{align-items:center}
.v2-dash .v2-dc>.section-head .section-sub{margin-left:40px}
@media (max-width:860px){.v2-dc-ico{width:26px;height:26px;margin:-3px 8px -3px 0;border-radius:9px}
 .v2-dash .v2-dc>.section-head .section-sub{margin-left:34px}}
/* Bandeau de l'objectif : « Bénéfice <année> · estimé » (après impôts, marge nette) sous le mois en cours ; un clic ouvre la rentabilité. */
.v2-dash .v2-goal.is-hero .v2-goal-body{grid-template-areas:"ring sum" "ring legend" "month month" "profit profit"}
@container (min-width:720px){.v2-dash .v2-goal.is-hero .v2-goal-body{grid-template-areas:"ring sum month" "ring legend profit";align-items:stretch}
 .v2-dash .v2-goal.is-hero .v2-goal-body>.v2-goal-ring{align-self:center}
 .v2-dash .v2-goal.is-hero .v2-goal-body>:is(.v2-goal-sum,.v2-goal-legend){align-self:center}}
.v2-gm.is-profit{position:relative;grid-area:profit}
.v2-gm.is-profit .v2-gm-mid{align-items:baseline}
.v2-gm-sub{font-size:12px;color:var(--muted)}
.v2-gm.is-profit.is-neg .v2-gm-val{color:var(--red)}
.v2-gm.is-profit:hover{border-color:color-mix(in srgb,var(--accent) 34%,var(--line))}
/* 2.30.34 · « À encaisser » sur téléphone (Pierre : « ce qui m'intéresse c'est de voir ce qui va rentrer ») : la barre des échéances,
   vert = pas encore échu, rouge = échu, et les deux montants dessous. */
.v2-dash.is-ph .v2-mb-pay.is-due>.v2-mb-bar{background:color-mix(in srgb,var(--red) 78%,transparent)}
.v2-dash.is-ph .v2-mb-leg.is-late>i{background:var(--red)}
.v2-dash.is-ph .v2-mb-leg.is-late>b{color:var(--red)}

/* 2.31.1 · Facturation du Dashboard : « Brouillons » à côté de « À envoyer » (Pierre, 01/11 : « les factures brouillons sur la même ligne
   que les factures à envoyer »). Six cases : six de front sur une carte large, sinon deux lignes de trois (Brouillons, À envoyer depuis la
   2.32.1, Facturé / Payé, À encaisser, Échu). */
@container (min-width:760px){.v2-bill-grid{grid-template-columns:repeat(6,minmax(0,1fr))}}
@container (min-width:301px) and (max-width:759px){.v2-bill-grid>.v2-bill,.v2-bill-grid>.v2-bill:nth-child(n+4){grid-column:span 2}}
@media (min-width:340px) and (max-width:860px){
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill:nth-child(n+4){grid-column:span 2}
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill:is(:nth-child(2),:nth-child(3),:nth-child(5),:nth-child(6)){border-left:1px solid var(--line)}
 .v2-dash .v2-bill-card .v2-bill-grid>.v2-bill:nth-child(4){border-left:0}
}
/* 2.31.1 · Dashboard du téléphone sur un seul écran (Pierre, 01/11 : « tout sur le même écran sans scroll ») : mêmes cases et mêmes
   chiffres, en plus serré. Objectif en bande basse, cases de 74 px, Facturation en deux rangées (À encaisser, puis Brouillons, À envoyer
   et Échu côte à côte depuis la 2.32.1). Depuis la 2.32.1, chaque taille est en --px (1 px × --ph-z, voir plus bas) : dashFill() agrandit
   ou réduit le tout pour remplir la hauteur de l'écran. */
.v2-dash.is-ph .v2-dash-grid{gap:calc(7*var(--px));min-height:0}
.v2-dash.is-ph .v2-dash-grid>.v2-m-sec{min-height:calc(24*var(--px));margin:calc(-12*var(--px)) calc(4*var(--px)) calc(-2*var(--px))}
.v2-dash.is-ph .v2-dash-grid>.v2-m-sec .icon-btn,.v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-head .icon-btn{width:calc(26*var(--px));height:calc(26*var(--px));min-height:calc(26*var(--px))}
.v2-dash.is-ph .v2-dash-grid>.v2-hero{gap:calc(2*var(--px)) calc(8*var(--px));padding:calc(8*var(--px)) calc(12*var(--px)) calc(7*var(--px)) calc(14*var(--px));border-radius:calc(18*var(--px))}
.v2-dash.is-ph .v2-hero .v2-hero-ring{--ring:calc(88*var(--px))} /* 2.32.3 : 72 → 88 px (« mets le graphique du CA un peu plus grand sur mobile ») */
/* 2.32.5 (Pierre, 01/11 : « je voulais le graphique du CA en mobile plus grand, on a la place dans la card ») : l’anneau passe de 88 à 112 px
   (en --px) et prend toute la hauteur de la carte, à droite du titre et du bas ; « Objectif 2026 » et « Chiffre d’affaires » l’un sous
   l’autre. Seulement si tout le Dashboard tient encore sur l’écran : sinon dashFill() pose .is-ph-tight et la carte reste celle d’avant. */
.v2-dash.is-ph:not(.is-ph-tight) .v2-dash-grid>.v2-hero{grid-template-areas:"main ring" "foot ring"}
.v2-dash.is-ph:not(.is-ph-tight) .v2-hero .v2-hero-ring{--ring:calc(112*var(--px))}
.v2-dash.is-ph:not(.is-ph-tight) .v2-hero-main>.v2-eyebrow{display:flex}
.v2-dash.is-ph:not(.is-ph-tight) .v2-hero-main>.v2-hero-title{display:block;margin:calc(1*var(--px)) 0 0}
.v2-dash.is-ph .v2-hero-main>.v2-eyebrow{font-size:calc(10*var(--px));line-height:calc(12*var(--px))}
.v2-dash.is-ph .v2-hero-title{margin-top:1px;font-size:calc(12.5*var(--px));line-height:calc(15*var(--px))}
.v2-dash.is-ph .v2-hero-val{margin-top:1px;font-size:calc(21*var(--px));line-height:calc(25*var(--px))}
.v2-dash.is-ph .v2-hero-of{font-size:calc(11*var(--px));line-height:calc(14*var(--px))}
.v2-dash.is-ph .v2-hero-foot{gap:calc(4*var(--px)) calc(8*var(--px));font-size:calc(10.5*var(--px));line-height:calc(14*var(--px))}
.v2-dash.is-ph .v2-hero-foot .v2-dd{padding:1px calc(6*var(--px))}
.v2-dash.is-ph .v2-kgrid{gap:calc(7*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric{min-height:0;padding:calc(8*var(--px)) calc(11*var(--px)) calc(7*var(--px));border-radius:calc(16*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-top{gap:calc(7*var(--px));min-height:calc(20*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-top>.metric-icon{width:calc(20*var(--px));height:calc(20*var(--px));border-radius:calc(6*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-top>.metric-icon svg{width:calc(13*var(--px));height:calc(13*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-top>.label{font-size:calc(11.5*var(--px));line-height:calc(14*var(--px));-webkit-line-clamp:1}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-val{padding-top:calc(3*var(--px));font-size:calc(18*var(--px));line-height:calc(22*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-val small{font-size:calc(10.5*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-foot{min-height:0;margin-top:1px;font-size:calc(10.5*var(--px));line-height:calc(13*var(--px))}
.v2-dash.is-ph .v2-kgrid>.metric.v2-ph-bank>.v2-bank-chip,.v2-dash.is-ph .v2-kgrid>.metric>.v2-bank-chip{top:calc(12*var(--px));left:calc(12*var(--px));width:calc(24*var(--px));height:calc(18*var(--px))}
.v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-head{min-height:calc(24*var(--px));margin:0 calc(4*var(--px)) calc(6*var(--px))}
.v2-dash.is-ph .v2-mb-pay{grid-template-columns:minmax(0,auto) minmax(0,auto);justify-content:space-between;gap:calc(3*var(--px)) calc(10*var(--px));margin-top:calc(6*var(--px))}
.v2-dash.is-ph .v2-mb-pay>.v2-mb-bar{height:calc(6*var(--px))}
.v2-dash.is-ph .v2-mb-leg{grid-template-columns:auto auto minmax(0,1fr);grid-template-areas:"dot lab val";column-gap:calc(5*var(--px));min-width:0;font-size:calc(10*var(--px));line-height:calc(14*var(--px))}
.v2-dash.is-ph .v2-mb-leg>b{font-size:calc(12*var(--px));line-height:calc(14*var(--px))}
.v2-dash.is-ph .v2-hero-main{display:block}
.v2-dash.is-ph .v2-hero-main>.v2-eyebrow,.v2-dash.is-ph .v2-hero-main>.v2-hero-title{display:inline}
.v2-dash.is-ph .v2-hero-main>:is(.v2-hero-val,.v2-hero-of){display:block}
.v2-dash.is-ph .v2-hero-main>.v2-hero-title{margin-left:calc(6*var(--px))}
.v2-dash.is-ph .v2-kgrid .v2-pmini{display:inline-flex;height:calc(10*var(--px));margin-left:calc(6*var(--px));vertical-align:-1px}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-foot .v2-dk-link{font-size:inherit;line-height:inherit}
/* Petites cases : le montant seul (HTVA, comme toute la Facturation : la ligne sous « À encaisser » le dit), une seule ligne en bas ; toute
   la case s'ouvre (pas de « Voir »), « Relancer » prend la place du nombre de factures (le nombre à relancer reste dans la pastille). */
.v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-head .v2-bill-sync{display:flex;align-items:center;gap:calc(6*var(--px))}
.v2-dash.is-ph .v2-dash-grid>.v2-hero:first-child{margin-top:calc(-6*var(--px))}
/* 2.32.1 · Dashboard du téléphone sur toute la hauteur (Pierre, 01/11 : « que ça descende jusqu'en bas, mais … */
.v2-dash.is-ph{--ph-z:1;--px:calc(1px*var(--ph-z))}
.v2-dash.is-ph .v2-dash-grid{min-height:var(--ph-h,0px)!important}
.v2-dash.is-ph .v2-dash-grid>*{flex:var(--ph-g,0) 0 auto!important}
.v2-dash.is-ph .v2-dash-grid>.v2-hero{align-content:center}
/* Les tailles venues d'avant la 2.31.1 suivent aussi --px (titre et état de la Facturation, pastilles, « atteint », légendes). */
.v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-head{gap:calc(10*var(--px))}
.v2-dash.is-ph .v2-bill-head>.v2-eyebrow{gap:calc(7*var(--px));font-size:calc(10*var(--px));line-height:calc(13*var(--px))}
.v2-dash.is-ph .v2-hero-main>.v2-eyebrow{gap:calc(7*var(--px))}
.v2-dash.is-ph .v2-eyebrow>i,.v2-dash.is-ph .v2-bill-sync .pill>i{width:calc(7*var(--px));height:calc(7*var(--px))}
.v2-dash.is-ph .v2-bill-sync .pill{gap:calc(5*var(--px));padding:0 calc(2*var(--px));font-size:calc(11*var(--px))}
.v2-dash.is-ph :is(.v2-bill-sync .icon-btn,.v2-mb-ico) svg{width:calc(15*var(--px));height:calc(15*var(--px))}
.v2-dash.is-ph .v2-hero-main>.v2-hero-of{margin-top:calc(4*var(--px))}
.v2-dash.is-ph .v2-hero-foot .v2-dd{gap:calc(3*var(--px)) calc(6*var(--px));font-size:calc(11*var(--px))}
.v2-dash.is-ph .v2-hero-foot .v2-dd>small{font-size:calc(11*var(--px))}
.v2-dash.is-ph .v2-hero-extra{gap:calc(5*var(--px))}
.v2-dash.is-ph .v2-hero-extra>.v2-sq,.v2-dash.is-ph .v2-mb-leg>i{width:calc(8*var(--px));height:calc(8*var(--px))}
.v2-dash.is-ph .v2-goal-mid>span{margin-top:calc(2*var(--px));font-size:calc(10.5*var(--px))}
/* La légende du paiement en em de .v2-mb-pay : dashFit() la rapetisse d'un bloc si elle déborde. */
.v2-dash.is-ph .v2-mb-pay{font-size:calc(10*var(--px))}
.v2-dash.is-ph .v2-mb-leg{font-size:1em}
.v2-dash.is-ph .v2-mb-leg>b{font-size:1.2em}
/* Le nom d'une case garde ses deux lignes (« Factures récurrentes » ne tient plus sur une ligne une fois agrandi). */
.v2-dash.is-ph .v2-kgrid>.metric>.metric-top>.label{-webkit-line-clamp:2}
/* Mini-barres des Projets en cours : largeur nulle depuis la 2.31.1 (la ligne passait en inline-flex), de nouveau visibles. */
.v2-dash.is-ph .v2-kgrid .v2-pmini{gap:calc(2*var(--px))}
.v2-dash.is-ph .v2-kgrid .v2-pmini i{flex:0 0 calc(4*var(--px));border-radius:calc(2*var(--px))}
/* 2.32.2 · Facturation du téléphone en cartes séparées (Pierre, 01/11 : « peux tu diviser la partie facturation en 4 cards stp », puis « je
   veux la grande comme avant avec la barre de progression et 3 petites cards en dessous ») : les cartes de .v2-kgrid (même fond, bord et
   ombre que Trésorerie et TVA, en Classique et en Givre) ; « À encaisser » sur toute la largeur comme avant (montant sur la ligne du titre,
   HTVA · TVAC · nombre, barre et légende), puis Brouillons, À envoyer et Échu en trois petites cartes. Allongées par dashGrow(), elles
   gardent leur titre en haut et leur montant en bas (la barre en bas de la grande). */
.v2-dash.is-ph .v2-bill-card.is-m>.v2-bill-tiles{flex:1 0 auto}
.v2-dash.is-ph .v2-bill-tiles>.is-big{flex:1 1 100%;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto minmax(0,1fr);grid-template-areas:"top val" "foot foot" "pay pay";align-items:baseline;column-gap:calc(10*var(--px));padding:calc(9*var(--px)) calc(14*var(--px)) calc(10*var(--px))}
.v2-dash.is-ph .v2-bill-tiles>.is-big>.metric-top{grid-area:top}
.v2-dash.is-ph .v2-bill-tiles>.is-big>.metric-top>.label{font-size:calc(12.5*var(--px));line-height:calc(16*var(--px))}
.v2-dash.is-ph .v2-bill-tiles>.is-big>.metric-val{grid-area:val;margin:0;padding:0;font-size:calc(22*var(--px));line-height:calc(26*var(--px))}
.v2-dash.is-ph .v2-bill-tiles>.is-big>.metric-foot{grid-area:foot}
.v2-dash.is-ph .v2-bill-tiles>.is-big>.v2-mb-pay{grid-area:pay;align-self:end}
.v2-dash.is-ph .v2-bill-tiles>.metric:not(.is-big){flex:1 1 calc((100% - 14*var(--px))/3);padding-inline:calc(10*var(--px))}
.v2-dash.is-ph .v2-bill-tiles>.metric:not(.is-big)>.metric-val{font-size:calc(16*var(--px));line-height:calc(20*var(--px))}
.v2-dash.is-ph .v2-bill-tiles>.is-bad>.metric-val{color:var(--red)}
.v2-dash.is-ph .v2-bt-badge{order:3;display:grid;place-items:center;flex:none;min-width:calc(18*var(--px));height:calc(18*var(--px));margin-left:auto;padding:0 calc(6*var(--px));border-radius:999px;background:var(--red);color:#fff;font-size:calc(10.5*var(--px));font-weight:800;line-height:1}
.v2-dash.is-ph .v2-kgrid>.metric>.metric-foot .v2-bt-rel{color:var(--red)}
/* 2.32.3 · Entrées du compte (Pierre, 01/11 : « dans la tréso, je veux aussi voir les entrées d'argent ») : l … */
.v2-dash.is-ph .v2-kgrid>.metric.v2-ph-bank>.metric-val>.v2-ph-top{display:block;overflow:hidden;text-overflow:ellipsis;font:500 calc(10.5*var(--px))/calc(13*var(--px)) Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;letter-spacing:-.012em;color:var(--muted)}
.v2-dash.is-ph .v2-ph-top .v2-dk-link{position:relative;z-index:2;font:inherit;font-weight:700} /* au-dessus de la zone qui ouvre la case (.v2-tile-hit) */
.v2-dash.is-ph .v2-ph-top>.v2-ph-asof.is-old{font-weight:700;color:#d97706} /* orange de la 2.30.15, perdu avec .v2-ph-grid */
.v2-dash.is-ph .v2-ca-chart .v2-chart{grid-template-columns:calc(34*var(--px)) minmax(0,1fr);grid-template-rows:minmax(calc(200*var(--px)),1fr) auto}

/* 2.32.6 · Teintes vives des barres et des points de la facturation (rouge et vert de Pierre : voir la fin de base-7.css). */
.v2-dash.is-ph .v2-mb-pay>.v2-mb-bar>i,.v2-dash.is-ph .v2-mb-leg.is-paid>i{background:var(--vif-ok)}
.v2-dash.is-ph .v2-mb-pay.is-due>.v2-mb-bar,.v2-dash.is-ph .v2-mb-leg.is-late>i{background:var(--vif-ko)}
