/* Page d'accueil (index.html). Les jetons, la nav, les boutons et le pied de
   page sont dans base.css et ne sont jamais redéfinis ici.

   Système : une trame d'un seul filet (1px) structure la page ; les blocs sont
   des cellules d'une même grille, pas des cartes indépendantes. L'accent vert
   ne sert qu'à ce que QAP détecte et à ce sur quoi on clique. */

/* ══ Trame de page ══════════════════════════════════════ */
.section{padding:clamp(60px,8.5vh,104px) var(--gutter)}
/* Cibles des ancres de la nav : la barre collante ne doit pas les recouvrir. */
.section[id]{scroll-margin-top:88px}
.section--card{background:var(--card);border-block:1px solid var(--rule)}
.section--ink{background:var(--ink);color:rgba(255,255,255,.72)}
.in{max-width:var(--page-max);margin:0 auto}
.in--narrow{max-width:820px}

.h2{font-family:var(--font-display);font-weight:700;font-size:var(--t-h2);line-height:1.08;letter-spacing:-.028em;color:var(--ink);text-wrap:balance}
.h3{font-family:var(--font-display);font-weight:600;font-size:var(--t-h3);line-height:1.25;letter-spacing:-.015em;color:var(--ink)}
.lead{font-size:var(--t-lead);line-height:1.6;color:var(--body);max-width:56ch}
.lead--under{margin:14px 0 clamp(28px,4vw,40px)}
/* Chapeau tenu sur une seule ligne : il court sur toute la colonne au lieu
   de se replier à 56ch. Il se replie normalement quand la place manque. */
.lead--line{max-width:none}
.p{font-size:var(--t-body);line-height:1.65;color:var(--body);max-width:68ch}
.p + .p{margin-top:14px}
.section--ink .h2,.section--ink .h3{color:#fff}
.section--ink .lead,.section--ink .p{color:rgba(255,255,255,.72)}

/* Ouverture de section : titre à gauche, mise en perspective à droite,
   séparés du contenu par le filet. Même dispositif partout. */
.opener{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:clamp(20px,5vw,80px);align-items:end;padding-bottom:clamp(30px,4.5vw,52px);border-bottom:1px solid var(--rule);margin-bottom:clamp(34px,5vw,60px)}
.opener .h2{max-width:17ch}
.section--ink .opener{border-bottom-color:rgba(255,255,255,.16)}
@media(max-width:820px){.opener{grid-template-columns:1fr;gap:18px;align-items:start}}

/* ══ Héros ══════════════════════════════════════════════ */
.hero{padding:clamp(44px,7vh,86px) var(--gutter) clamp(36px,5vh,64px)}
.hero__grid{max-width:var(--page-max);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:clamp(36px,5vw,76px);align-items:center}
@media(max-width:980px){.hero__grid{grid-template-columns:1fr;gap:38px}}
.hero__title{font-family:var(--font-display);font-weight:700;font-size:var(--t-h1);line-height:1.02;letter-spacing:-.04em;color:var(--ink);max-width:15ch;text-wrap:balance}
.hero__sub{margin-top:22px;font-size:var(--t-lead);line-height:1.58;color:var(--body);max-width:44ch}
.hero__actions{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-top:32px}
.hero__note{margin-top:24px;font-size:var(--t-small);color:var(--body);max-width:40ch}

/* ── Le schéma : ce que QAP lit, ce que QAP en déduit ─── */
.schema{background:var(--card);border:1px solid var(--rule);border-radius:var(--radius-tile);padding:clamp(14px,2vw,22px)}
.schema svg{width:100%;height:auto}

.s-panel{fill:#FBFBF9;stroke:rgba(18,16,56,.13)}
.s-rule{stroke:rgba(18,16,56,.1)}
.s-key{fill:#676C81;font-family:var(--font);font-size:11.5px}
.s-val{fill:#2C2E52;font-family:var(--font);font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums}
.s-head{fill:#121038;font-family:var(--font);font-size:11px;font-weight:700;letter-spacing:.02em}
.s-node{fill:#0B7D62}
.s-hit{fill:#0B7D62}
.s-need{fill:#121038;font-family:var(--font);font-size:12.5px;font-weight:600}
.s-gap{fill:#676C81;font-family:var(--font);font-size:10.5px;font-weight:600}

/* ── Le moment auteur de la page ─────────────────────────
   Trois temps, l'un après l'autre, qui rejouent ce que fait le produit :
   1. QAP relit le dossier — les valeurs à problème passent au vert ;
   2. le signal part de la ligne concernée — une tête de 9 unités file
      le long du tracé qui se dessine derrière elle ;
   3. la conclusion se pose à l'arrivée du trait, jamais avant.
   Rien d'autre sur la page n'est animé au chargement. */
.s-stop-a{stop-color:var(--cyan)}
.s-stop-b{stop-color:var(--accent-line)}

/* Temps 1 — la relecture. */
.s-hit{fill:#2C2E52;animation:hit .28s ease forwards;animation-delay:var(--d)}
@keyframes hit{to{fill:#0B7D62}}

/* Temps 2 — le tracé et sa tête de signal. */
/* Le trait part 70 ms après la tête : on voit le signal filer et le fil se poser
   derrière lui, au lieu des deux confondus sur le même pixel. */
.s-trace{fill:none;stroke:url(#qapTrace);stroke-width:1.5;stroke-linecap:round;stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:trace .44s cubic-bezier(.16,1,.3,1) forwards;animation-delay:calc(var(--dt) + .07s)}
/* La tête doit se détacher du trait qu'elle laisse derrière elle, qui est de la
   même couleur : d'où le halo court, borné à ces quatre traits. */
.s-spark{fill:none;stroke:var(--accent-line);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:7 var(--len);stroke-dashoffset:7;opacity:0;filter:drop-shadow(0 0 2px rgba(15,160,126,.8));animation:spark .46s cubic-bezier(.16,1,.3,1) forwards;animation-delay:var(--dt)}
@keyframes trace{to{stroke-dashoffset:0}}
@keyframes spark{
  0%{stroke-dashoffset:7;opacity:1}
  80%{opacity:1}
  100%{stroke-dashoffset:calc(-1 * var(--len));opacity:0}
}

/* Temps 3 — la conclusion, posée à l'arrivée du trait. */
.s-out{opacity:0;transform:translateY(5px);animation:appear .34s cubic-bezier(.16,1,.3,1) forwards;animation-delay:var(--do)}
@keyframes appear{to{opacity:1;transform:translateY(0)}}

/* Une liaison = un index, porté par la valeur, le tracé, la tête et la conclusion.
   `--len` est la longueur réelle du chemin (getTotalLength arrondi au-dessus) :
   modifier un `d` oblige à la remesurer. */
.s-1{--len:121;--d:.12s;--dt:.52s;--do:.92s}
.s-2{--len:110;--d:.18s;--dt:.67s;--do:1.07s}
.s-3{--len:100;--d:.24s;--dt:.82s;--do:1.22s}
.s-4{--len:95;--d:.30s;--dt:.97s;--do:1.37s}

/* Mouvement réduit : le schéma est déjà lu, déjà relié, déjà conclu. */
@media(prefers-reduced-motion:reduce){
  .s-hit{fill:#0B7D62}
  .s-trace{stroke-dashoffset:0}
  .s-spark{display:none}
  .s-out{opacity:1;transform:none}
}

/* ── Bandeau de chiffres : un filet, pas quatre cartes ── */
/* La phrase qui pose QAP, juste au-dessus du filet des chiffres. */
.stats__claim{max-width:var(--page-max);margin:clamp(44px,6vw,72px) auto 16px;font-family:var(--font-display);font-weight:600;font-size:clamp(19px,2vw,24px);line-height:1.25;letter-spacing:-.018em;color:var(--ink);text-wrap:balance}
.stats__claim + .stats{margin-top:0}
.stats{max-width:var(--page-max);margin:clamp(44px,6vw,72px) auto 0;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--rule)}
.stat{padding:22px 24px 4px;border-left:1px solid var(--rule)}
.stat:first-child{border-left:0;padding-left:0}
.stat__n{font-family:var(--font-display);font-weight:700;font-size:clamp(28px,3.4vw,40px);line-height:1;letter-spacing:-.03em;color:var(--ink);font-variant-numeric:tabular-nums}
.stat__l{margin-top:8px;font-size:var(--t-small);color:var(--muted);line-height:1.4}
@media(max-width:720px){
  .stats{grid-template-columns:1fr 1fr}
  .stat{padding:20px 18px 4px}
  .stat:nth-child(odd){border-left:0;padding-left:0}
  .stat:nth-child(n+3){border-top:1px solid var(--rule);margin-top:18px;padding-top:20px}
}

/* ══ Le constat : trois causes, en liste réglée ═════════ */
.causes{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.cause{background:var(--card);padding:clamp(26px,3vw,38px) clamp(22px,2.4vw,32px)}
.cause__h{font-family:var(--font-display);font-weight:600;font-size:var(--t-h3);line-height:1.2;letter-spacing:-.015em;color:var(--ink)}
.cause__p{margin-top:12px;font-size:var(--t-small);line-height:1.65;color:var(--body)}
@media(max-width:860px){.causes{grid-template-columns:1fr}}

/* ══ Couverture : lattis de huit domaines ═══════════════ */
.domains{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.domain{background:var(--card);padding:26px 22px 28px;border-top:2px solid transparent;transition:border-top-color .15s ease}
.domain:hover{border-top-color:var(--accent-line)}
.domain__ico{width:24px;height:24px;stroke:var(--ink-2);fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.domain__h{margin-top:18px;font-family:var(--font-display);font-weight:600;font-size:17px;line-height:1.25;letter-spacing:-.012em;color:var(--ink)}
.domain__p{margin-top:6px;font-size:var(--t-small);line-height:1.5;color:var(--muted)}
@media(max-width:940px){.domains{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.domains{grid-template-columns:1fr}}

/* ══ La méthode : une séquence, donc numérotée ══════════ */
.method{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,4vw,60px)}
@media(max-width:900px){.method{grid-template-columns:1fr;gap:34px}}
.step{position:relative;padding-top:30px}
/* Le trait qui relie les étapes reprend le motif du schéma. */
.step::before{content:'';position:absolute;top:5px;left:0;right:calc(-1 * clamp(24px,4vw,60px));height:1px;background:var(--rule)}
.step:last-child::before{right:0}
.step::after{content:'';position:absolute;top:1px;left:0;width:9px;height:9px;border-radius:50%;background:var(--accent)}
@media(max-width:900px){.step::before{right:0}}
.step__n{font-family:var(--font-display);font-weight:700;font-size:var(--t-small);letter-spacing:.04em;color:var(--accent);font-variant-numeric:tabular-nums}
.step__h{margin-top:6px;font-family:var(--font-display);font-weight:600;font-size:var(--t-h3);line-height:1.2;letter-spacing:-.015em;color:var(--ink)}
.step__p{margin-top:12px;font-size:var(--t-small);line-height:1.65;color:var(--body)}
.step__kpi{margin-top:20px;padding-top:14px;border-top:1px solid var(--rule)}
.step__kpi b{display:block;font-family:var(--font-display);font-weight:700;font-size:26px;line-height:1;letter-spacing:-.02em;color:var(--ink)}
.step__kpi span{display:block;margin-top:6px;font-size:var(--t-micro);line-height:1.45;color:var(--muted);max-width:26ch}
.step__kpi span + b{margin-top:14px}

/* ══ Vidéo ══════════════════════════════════════════════ */
.video{max-width:900px;margin:0 auto;border:1px solid var(--rule);border-radius:var(--radius-tile);overflow:hidden;background:var(--ink)}
.ratio{position:relative;padding-bottom:56.25%;height:0}
.ratio iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

/* ══ Écosystème ═════════════════════════════════════════ */
.families{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.family{background:var(--card);padding:26px 22px 30px}
.family__h{font-family:var(--font-display);font-weight:600;font-size:17px;line-height:1.25;letter-spacing:-.012em;color:var(--ink)}
.family__p{margin-top:8px;font-size:var(--t-small);line-height:1.55;color:var(--body)}
@media(max-width:940px){.families{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.families{grid-template-columns:1fr}}

/* ══ Partenaires ════════════════════════════════════════
   Seize marques aux formats très différents. La grille reprend
   la trame de .families juste au-dessus : mêmes quatre colonnes,
   mêmes filets d'1px, la section garde une seule ossature.
   Chaque logo est ramené à une surface optique comparable
   (--h, réglé plus bas), pas à une hauteur commune : un bloc
   plein et un mot long ne pèsent pas la même chose.
   Tout est en encre — la couleur reste réservée à l'accent.   */
.partners{margin-top:clamp(40px,5vw,64px);border-top:1px solid var(--rule)}
.partners__h{padding:22px 0 20px;font-size:var(--t-small);color:var(--muted);max-width:60ch}
.partners__list{--logo-scale:1;display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.partner{display:grid;place-items:center;background:var(--card);min-height:104px;padding:16px 20px}
.partner img{--h:28;--o:.72;--b:1;height:calc(var(--h) * var(--logo-scale) * 1px);width:auto;max-width:100%;object-fit:contain;filter:grayscale(1) contrast(1.02) brightness(var(--b));opacity:var(--o)}
/* Partenaire sans logo fourni : le nom composé tient le même poids. */
.partner__n{font-family:var(--font-display);font-weight:600;font-size:17px;letter-spacing:-.018em;color:var(--ink);opacity:.62}

/* Chaque marque est réglée sur deux axes. --h vise une surface optique
   comparable, amortie pour les marques pleines (AXA, Assurinco) qui portent
   plus d'encre à surface égale. --o, et --b pour les tracés les plus fins,
   égalisent le poids perçu : mesuré en niveaux de gris, AXA pèse sept fois
   Isatis, et un mur d'un seul ton ne tient pas sans cette correction. */
.partner--abeille-assurances img{--h:32;--o:.76}
.partner--suravenir img{--h:25;--o:.80}
.partner--uaf-life-patrimoine img{--h:32;--o:.85;--b:.84}
.partner--swiss-life img{--h:46;--o:.85;--b:.88}
.partner--april img{--h:26;--o:.78}
.partner--alptis img{--h:28;--o:.74}
.partner--metlife img{--h:25}
.partner--assurinco img{--h:60;--o:.79}
.partner--eres img{--h:27;--o:.63}
.partner--eleva-capital img{--h:29;--o:.85;--b:.84}
.partner--altaroc img{--h:25;--o:.60}
.partner--isatis-capital img{--h:28;--o:.85;--b:.74}
.partner--stoik img{--h:30;--o:.60}
.partner--axa img{--h:38;--o:.55}

@media(max-width:940px){.partners__list{grid-template-columns:repeat(2,1fr);--logo-scale:.92}}
@media(max-width:520px){.partners__list{--logo-scale:.82}.partner{min-height:80px;padding:14px}}

/* ══ Témoignages ════════════════════════════════════════ */
.quotes{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}
.quote{background:var(--card);padding:clamp(26px,3vw,40px);display:flex;flex-direction:column}
.quote__q{font-family:var(--font-display);font-weight:600;font-size:clamp(18px,1.9vw,23px);line-height:1.32;letter-spacing:-.018em;color:var(--ink);text-wrap:pretty}
.quote__p{margin-top:18px;font-size:var(--t-small);line-height:1.65;color:var(--body)}
.quote__by{margin-top:auto;padding-top:22px;font-size:var(--t-small);line-height:1.5}
.quote__by b{display:block;color:var(--ink-2);font-weight:600}
.quote__by span{display:block;color:var(--muted);font-size:var(--t-micro)}
@media(max-width:820px){.quotes{grid-template-columns:1fr}}

/* ══ ADN : mission, vision, principes ═══════════════════ */
.adn{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,4vw,64px)}
@media(max-width:860px){.adn{grid-template-columns:1fr;gap:36px}}
.adn__col{border-left:1px solid var(--rule-strong);padding-left:clamp(20px,2.4vw,30px)}
.adn__q{font-family:var(--font-display);font-weight:600;font-size:clamp(18px,1.9vw,22px);line-height:1.35;letter-spacing:-.018em;color:var(--ink);margin-top:10px}
.adn__col .p{margin-top:16px;font-size:var(--t-small);line-height:1.68}
.principles{margin-top:clamp(44px,5vw,68px);border-top:1px solid var(--rule);display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--rule)}
.principles li{background:var(--card);padding:22px 24px 24px;font-family:var(--font-display);font-weight:600;font-size:16px;line-height:1.3;letter-spacing:-.012em;color:var(--ink)}
@media(max-width:860px){.principles{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.principles{grid-template-columns:1fr}}

/* ══ Équipe ═════════════════════════════════════════════ */
.team{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,3.5vw,48px)}
@media(max-width:820px){.team{grid-template-columns:1fr;gap:32px}}
.member img{width:100%;max-width:190px;aspect-ratio:1;object-fit:cover;border:1px solid var(--rule);border-radius:var(--radius-tile);background:var(--card);filter:grayscale(1) contrast(1.02)}
.member__n{margin-top:18px;font-family:var(--font-display);font-weight:600;font-size:var(--t-h3);letter-spacing:-.018em;color:var(--ink)}
.member__t{margin-top:6px;font-size:var(--t-micro);font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.member__r{margin-top:4px;font-size:var(--t-small);color:var(--accent);font-weight:600}
.member__b{margin-top:10px;font-size:var(--t-small);line-height:1.6;color:var(--body);max-width:34ch}

/* ══ FAQ ════════════════════════════════════════════════ */
.faq{border-top:1px solid var(--rule)}
.faq details{border-bottom:1px solid var(--rule)}
.faq summary{list-style:none;cursor:pointer;display:flex;gap:24px;align-items:baseline;justify-content:space-between;padding:22px 0;font-family:var(--font-display);font-weight:600;font-size:clamp(16px,1.7vw,19px);line-height:1.35;letter-spacing:-.015em;color:var(--ink)}
.faq summary::-webkit-details-marker{display:none}
/* Le marqueur : deux barres, dont la verticale se replie à l'ouverture. */
.faq summary::after{content:'';flex:none;width:13px;height:13px;margin-top:6px;background-image:linear-gradient(currentColor,currentColor),linear-gradient(currentColor,currentColor);background-position:center,center;background-repeat:no-repeat;background-size:13px 1.5px,1.5px 13px;transition:background-size .24s cubic-bezier(.16,1,.3,1)}
.faq details[open] summary::after{background-size:13px 1.5px,1.5px 0}
/* La réponse arrive au lieu d'apparaître : c'est ce qui rend l'ouverture lisible. */
.faq__a{padding:0 0 26px;font-size:var(--t-small);line-height:1.7;color:var(--body);max-width:72ch}
.faq details[open] .faq__a{animation:answer .26s cubic-bezier(.16,1,.3,1) both}
@keyframes answer{from{opacity:0;transform:translateY(-4px)}}
/* Là où la boîte elle-même sait s'animer, elle le fait ; ailleurs, rien ne casse. */
@supports (interpolate-size: allow-keywords){
  .faq details::details-content{block-size:0;overflow:hidden;transition:block-size .28s cubic-bezier(.16,1,.3,1),content-visibility .28s allow-discrete}
  .faq details[open]::details-content{block-size:auto}
}

/* ══ Demande de démo (bande sombre de clôture) ══════════ */
.demo{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:clamp(34px,5vw,80px);align-items:start}
@media(max-width:900px){.demo{grid-template-columns:1fr;gap:40px}}
.form{display:grid;grid-template-columns:1fr 1fr;gap:26px 28px}
.field{display:grid;gap:7px;min-width:0}
.field--wide{grid-column:1/-1}
@media(max-width:560px){.form{grid-template-columns:1fr}.field--wide{grid-column:auto}}
.field label{font-size:var(--t-micro);color:rgba(255,255,255,.62);letter-spacing:.02em}
.field input,.field select{
  width:100%;border:0;border-bottom:1px solid rgba(255,255,255,.28);background:transparent;
  color:#fff;font-family:inherit;font-size:var(--t-body);padding:8px 2px;border-radius:0;
  caret-color:var(--accent-line);
  transition:border-bottom-color .16s ease,box-shadow .16s ease;
}
.field select option{color:var(--ink)}
/* Le focus épaissit la ligne sans déplacer le champ : pas de saut de mise en page. */
.field input:focus,.field select:focus{outline:none;border-bottom-color:var(--accent-line);box-shadow:0 1px 0 0 var(--accent-line)}
.field input::placeholder{color:rgba(255,255,255,.35)}
/* Piège à robots : hors écran, jamais annoncé aux lecteurs d'écran. */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.demo__aside{border-left:1px solid rgba(255,255,255,.18);padding-left:clamp(20px,2.4vw,32px)}
.checks{margin-top:18px;display:grid;gap:13px}
.checks li{display:grid;grid-template-columns:16px 1fr;gap:11px;font-size:var(--t-small);line-height:1.55;color:rgba(255,255,255,.78)}
.checks li::before{content:'';width:8px;height:8px;margin-top:8px;border-radius:50%;background:var(--accent-line)}
.demo__direct{margin-top:26px;padding-top:18px;border-top:1px solid rgba(255,255,255,.18);font-size:var(--t-small);color:rgba(255,255,255,.6)}
.demo__direct a{color:#fff;border-bottom:1px solid rgba(255,255,255,.4);padding-bottom:1px}
.demo__direct a:hover{border-bottom-color:var(--accent-line);color:var(--accent-line)}
.demo__submit{grid-column:1/-1;display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-top:6px}
.demo__submit .btn{background:#fff;color:var(--ink);border-color:#fff}
.demo__submit .btn:hover{background:var(--accent-line);border-color:var(--accent-line);color:var(--ink)}
.form__status{font-size:var(--t-small);font-weight:600;line-height:1.45;max-width:38ch}
.form__status.ok,.form__status.err{animation:answer .3s cubic-bezier(.16,1,.3,1) both}
.form__status.ok{color:var(--accent-line)}
.form__status.err{color:#FF9E93}

/* ── Le schéma en version étroite : l'éventail SVG devient une pile ── */
.schema__stack{display:none}
@media(max-width:780px){
  .schema svg{display:none}
  .schema__stack{display:block}
}
.schema__lbl{font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--ink);margin-bottom:10px}
.sm-rows{border:1px solid var(--rule);border-radius:var(--radius-tile);background:#FBFBF9;margin:0 0 26px}
.sm-rows > div{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:11px 14px;border-top:1px solid var(--rule)}
.sm-rows > div:first-child{border-top:0}
.sm-rows dt{font-size:13px;color:var(--muted)}
.sm-rows dd{margin:0;font-size:13px;font-weight:600;color:var(--ink-2);text-align:right;font-variant-numeric:tabular-nums}
.sm-rows .sm-hit{color:var(--accent)}
.sm-needs{display:grid;gap:16px}
.sm-needs li{position:relative;padding-left:20px}
.sm-needs li::before{content:'';position:absolute;left:0;top:7px;width:7px;height:7px;border-radius:50%;background:var(--accent)}
.sm-needs b{display:block;font-size:14px;font-weight:600;color:var(--ink);line-height:1.3}
.sm-needs span{display:block;margin-top:2px;font-size:12.5px;color:var(--muted);line-height:1.4}
