/* Self-hosted fonts (no third-party CDN; CNIL/GDPR friendly). One display+text
   face: Archivo (modern grotesque) for everything Latin; Noto Sans Arabic for
   ar/ur; Atkinson Hyperlegible for the accessibility "readable font" option. */
@font-face { font-family:"Noto Sans Arabic"; font-style:normal; font-weight:400; font-display:swap; src:url("../fonts/NotoSansArabic-400.ttf") format("truetype"); unicode-range:U+0600-06FF,U+0750-077F,U+0870-089F,U+08A0-08FF,U+FB50-FDFF,U+FE70-FEFF; }
@font-face { font-family:"Noto Sans Arabic"; font-style:normal; font-weight:500; font-display:swap; src:url("../fonts/NotoSansArabic-500.ttf") format("truetype"); unicode-range:U+0600-06FF,U+0750-077F,U+0870-089F,U+08A0-08FF,U+FB50-FDFF,U+FE70-FEFF; }
@font-face { font-family:"Noto Sans Arabic"; font-style:normal; font-weight:600; font-display:swap; src:url("../fonts/NotoSansArabic-600.ttf") format("truetype"); unicode-range:U+0600-06FF,U+0750-077F,U+0870-089F,U+08A0-08FF,U+FB50-FDFF,U+FE70-FEFF; }
@font-face { font-family:"Atkinson Hyperlegible"; font-style:normal; font-weight:400; font-display:swap; src:url("../fonts/AtkinsonHyperlegible-Regular.ttf") format("truetype"); }
@font-face { font-family:"Atkinson Hyperlegible"; font-style:normal; font-weight:700; font-display:swap; src:url("../fonts/AtkinsonHyperlegible-Bold.ttf") format("truetype"); }
@font-face { font-family:"Atkinson Hyperlegible"; font-style:italic; font-weight:400; font-display:swap; src:url("../fonts/AtkinsonHyperlegible-Italic.ttf") format("truetype"); }
@font-face { font-family:"Schibsted Grotesk"; font-style:normal; font-weight:400 900; font-display:swap; src:url("../fonts/SchibstedGrotesk-var.ttf") format("truetype-variations"); }
@font-face { font-family:"Public Sans"; font-style:normal; font-weight:400 900; font-display:swap; src:url("../fonts/PublicSans-var.ttf") format("truetype-variations"); }

/* ============================================================
   LegalAidCompass, editorial light UI + obsidian dark map
   Palette: white + light blue + deep navy. Flat surfaces,
   hairline borders, generous space. No gradients-as-decoration,
   no glassmorphism. The map is the dark jewel.
   ============================================================ */

:root {
  /* Brand: dark blue + light blue + white. Variable names kept (--green*) for
     a clean recolor; they now carry the blue scale. */
  --paper:        #ffffff;   /* pure white base */
  --paper-2:      #ffffff;   /* pure white cards */
  --paper-3:      #e8edfd;   /* light royal-blue surface */
  --ink:          #0e1947;   /* deep royal-navy ink */
  --ink-2:        #2c3a80;   /* darkened for stronger contrast on white + tints */
  --ink-3:        #475497;   /* >=5.5:1 on white and >=4.8:1 on the royal tints */
  --line:         #dde3f7;
  --line-strong:  #c5ceef;
  --green:        #182663;   /* bleu marine: primary action + accents (DA marine, plus de bleu roi) */
  --green-2:      #2a3a70;   /* marine plus clair: hover/active */
  --navy:         #182663;   /* deep royal navy kept for grounding surfaces */
  --green-ink:    #0e1947;   /* deep royal text on tint */
  --green-tint:   #e6ebfd;   /* light royal tint */
  --clay:         #182663;   /* accent marine, AA-contrast for small text */
  --focus:        #182663;

  /* themeable map (light defaults; flipped under [data-theme=dark]) */
  --obs:          #e7ecf6;   /* map background */
  --obs-2:        #ffffff;   /* map surfaces: popup / controls / legend */
  --obs-line:     #d3dcee;
  --obs-text:     #0e1947;
  --obs-text-2:   #485380;
  --obs-hover:    #eaeefb;
  --marker-ring:  #ffffff;
  --marker-shadow: 0 0 0 1.5px rgba(14,25,71,.55), 0 1px 5px rgba(14,25,71,.5);
  --cluster-bg:   rgba(255,255,255,.94);
  --cluster-border: rgba(24,38,99,.5);
  --cluster-text: #182663;
  --cluster-shadow: 0 4px 16px -6px rgba(14,25,71,.5);
  --map-shadow:   0 14px 44px -24px rgba(14,25,71,.4);
  --nav-bg:       rgba(255,255,255,.92);
  /* Wayfinding palette, kept in sync with data/taxonomy.json (provider_type
     colours). Pins get their colour inline from the taxonomy; these vars feed
     the globe hint dot and any non-JS fallback. */
  --cat-clinic:  #2fae6a;
  --cat-probono: #e3b02c;
  --cat-network: #3f7fd6;
  --cat-ngo:     #e0503f;

  --maxw: 1280px;
  --radius: 12px;
  --radius-sm: 10px;
  --radius-tag: 6px;
  --radius-pill: 999px;

  --serif: "Schibsted Grotesk", var(--sans);  /* titres + sous-titres */
  --sans: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;   /* paragraphes + UI */

  /* layered, navy-tinted depth (soft, modern, no glassmorphism) */
  --shadow-xs: 0 1px 2px rgba(14,25,71,.04);
  --shadow-sm: 0 1px 2px rgba(14,25,71,.04), 0 3px 8px -3px rgba(14,25,71,.06);
  --shadow-md: 0 2px 4px -2px rgba(14,25,71,.05), 0 12px 30px -14px rgba(14,25,71,.15);
  --shadow-lg: 0 6px 14px -6px rgba(14,25,71,.07), 0 28px 60px -22px rgba(14,25,71,.20);
  --shadow-pop: 0 20px 54px -20px rgba(10,18,50,.5);

  /* spacing scale */
  --sp-1: 6px; --sp-2: 12px; --sp-3: 18px; --sp-4: 28px; --sp-5: 44px; --sp-6: 72px; --sp-7: 104px;

  /* motion tokens — short, consistent, no bounce */
  --dur: .18s;
  --dur-slow: .28s;
  --ease: cubic-bezier(.4, 0, .2, 1);
  --ease-out: cubic-bezier(.16, 1, .3, 1);
}

/* ---------- dark theme (JS resolves "system" to light/dark) ---------- */
:root[data-theme="dark"] {
  --paper: #080f2e; --paper-2: #0f1940; --paper-3: #16224f;
  --ink: #eef1fc; --ink-2: #bcc6ef; --ink-3: #a6b2dd;   /* AA+ on dark royal cards/tints */
  --line: #20305e; --line-strong: #324373;
  --green: #6f86f2; --green-2: #8ea0f6; --green-ink: #d4dbfb; --green-tint: rgba(110,134,242,.18);
  --clay: #a9cbff; --focus: #7e93f4;   /* clay = written labels/links: lighter, clearer blue on navy (was #7e93f4 periwinkle) */
  --obs: #060d28; --obs-2: #0d1838; --obs-line: #20305e; --obs-text: #e7ecfa; --obs-text-2: #a4b0d2; --obs-hover: #14224a;
  --marker-ring: #060d28; --marker-shadow: 0 0 7px 1px currentColor;
  --cluster-bg: rgba(110,134,242,.18); --cluster-border: rgba(110,134,242,.7); --cluster-text: #e7ecfa; --cluster-shadow: 0 0 14px -2px rgba(110,134,242,.5);
  --map-shadow: 0 20px 60px -30px rgba(0,0,0,.6);
  --nav-bg: rgba(8,15,46,.86);
  --shadow-sm: 0 1px 2px rgba(0,0,0,.3);
  --shadow-md: 0 10px 28px -14px rgba(0,0,0,.6);
  --shadow-pop: 0 18px 50px -18px rgba(0,0,0,.72);
}
:root[data-theme="dark"] .footer { background: #0a1533; }
:root[data-theme="dark"] .contribute { background: #0a1533; }
:root[data-theme="dark"] .btn-light { background: var(--paper-2); color: var(--green-2); }
:root[data-theme="dark"] .form-status--err { background: #3a241c; color: #f0c3ad; }
:root[data-theme="dark"] .form-status--ok { background: rgba(110,134,242,.16); color: var(--green-ink); }
/* Dark mode: the written labels and links used --green-2 (#8ea0f6), a mid-tone
   periwinkle that reads violet and low-contrast on the navy background. Lift just
   the TEXT usages to a clear light blue; --green-2 stays saturated for button
   backgrounds so white-on-accent buttons keep their contrast. */
:root[data-theme="dark"] .hero__eyebrow,
:root[data-theme="dark"] .hub-eyebrow,
:root[data-theme="dark"] .assoc__eyebrow,
:root[data-theme="dark"] .assoc__prog-label,
:root[data-theme="dark"] .filters__eyebrow,
:root[data-theme="dark"] .prog__name,
:root[data-theme="dark"] .nav__links a.is-current { color: #a9cbff; }
:root[data-theme="dark"] a:hover,
:root[data-theme="dark"] .nav__links a:hover { color: #c6d8ff; }

*, *::before, *::after { box-sizing: border-box; }
[hidden] { display: none !important; }
html { scroll-behavior: smooth; font-size: 100%; }  /* a11y text-size anchor: rem scales from here */
body {
  margin: 0; background: var(--paper); color: var(--ink);
  font-family: var(--sans); font-size: 1rem; line-height: 1.6;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
h1, h2, h3 { font-family: var(--serif); font-weight: 500; letter-spacing: -0.01em; margin: 0; font-optical-sizing: auto; color: var(--green); }
a { color: var(--green); text-decoration: none; transition: color var(--dur) var(--ease); }
a:hover { color: var(--green-2); }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; border-radius: 2px; }
button { font-family: inherit; cursor: pointer; transition: background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease); }
input, select, textarea { transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background var(--dur) var(--ease); }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; }
  html { scroll-behavior: auto; }
}
.linklike { background: none; border: 0; color: var(--green); text-decoration: underline; padding: 0; font: inherit; }

.skip-link { position: absolute; left: -999px; top: 0; z-index: 1200; background: var(--ink); color: var(--paper); padding: 10px 16px; }
.skip-link:focus { left: 0; }

/* ---------- nav ---------- */
.nav { position: sticky; top: 0; z-index: 1000; background: var(--paper); border-bottom: 1px solid var(--line); }
.nav__inner { max-width: 1360px; margin: 0 auto; padding: 14px 24px; display: flex; align-items: center; justify-content: flex-start; gap: 16px; flex-wrap: nowrap; }
.brand { display: flex; align-items: center; gap: 12px; color: var(--green); flex: none; transition: opacity var(--dur) var(--ease); }
.brand:hover { color: var(--green); opacity: .82; }
.brand__mark { width: 28px; height: 28px; border-radius: var(--radius-tag); flex: none; background: var(--green); color: var(--paper); display: flex; align-items: center; justify-content: center; box-shadow: inset 0 0 0 1px rgba(255,255,255,.12); }
.brand__mark svg { width: 17px; height: 17px; display: block; }
.brand__text { display: flex; flex-direction: column; line-height: 1.05; }
.brand__name { font-family: var(--sans); font-size: 1.1875rem; font-weight: 700; letter-spacing: -0.02em; }
.brand__tag { font-size: 0.71875rem; color: var(--ink-3); letter-spacing: .02em; }
.nav__links { display: flex; align-items: center; gap: 14px; flex-wrap: nowrap; white-space: nowrap; min-width: 0; }
.nav__links a { white-space: nowrap; }
.nav__links a { color: var(--ink-2); font-size: 0.90625rem; font-weight: 500; }
.nav__links a:hover { color: var(--ink); }
/* Nav bar bleu marine, continue avec le hero (pas de separateur), se detache au defilement. */
.nav { background: #0a1533; border-bottom: 0; transition: box-shadow .3s var(--ease); }
.nav.is-scrolled { box-shadow: 0 12px 32px -18px rgba(0,0,0,.85); }
.nav .brand, .nav .brand:hover { color: #f4f6ff; }
.nav .brand__mark { background: rgba(255,255,255,.13); color: #fff; box-shadow: inset 0 0 0 1px rgba(255,255,255,.16); }
.nav__links a { color: #ffffff; }
.nav__links a:hover, .nav__links a.is-current { color: #9db2ff; }
.nav__links a.nav__cta { border: 1px solid rgba(255,255,255,.32); border-radius: 999px; color: #fff; }
.nav__links a.nav__cta:hover, .nav__links a.nav__cta.is-current { background: rgba(255,255,255,.12); color: #fff; border-color: rgba(255,255,255,.55); }
.nav .select-wrap--lang select { color: #f4f6ff; background: rgba(255,255,255,.09); border-color: rgba(255,255,255,.22); }
.nav .select-wrap::after { border-color: rgba(233,238,255,.75); }
.nav .a11y-toggle { color: #eef2ff; border-color: rgba(255,255,255,.28); background: rgba(255,255,255,.09); }
.nav .a11y-toggle:hover { color: #fff; border-color: rgba(255,255,255,.5); background: rgba(255,255,255,.16); }
.nav .a11y-toggle[aria-expanded="true"] { color: #9db2ff; border-color: rgba(157,178,255,.6); }
.nav .nav__toggle { color: #f4f6ff; }
/* theme + language controls live at the right end of the single navbar row */
.nav__links { margin-left: auto; }
.nav__tools { display: inline-flex; align-items: center; gap: 8px; flex: none; }
.nav__tools .select-wrap--lang { margin: 0; max-width: 104px; }
.nav__tools .select-wrap--lang select { text-overflow: ellipsis; }
.nav__links a.nav__cta { padding-left: 14px; padding-right: 14px; }

/* ---------- hero ---------- */
.hero { position: relative; overflow: hidden; border-bottom: 1px solid var(--line); background: var(--paper); }
.hero__inner { position: relative; z-index: 1; max-width: 1080px; margin: 0 auto; padding: var(--sp-7) 24px var(--sp-6); }
.hero__eyebrow { display: inline-flex; align-items: center; gap: 10px; margin: 0 0 22px; text-transform: uppercase; letter-spacing: .2em; font-size: 0.75rem; font-weight: 700; color: var(--green-2); }
.hero__eyebrow::before { content: ""; width: 24px; height: 1.5px; background: currentColor; opacity: .55; }
.hero__title { font-size: clamp(2.6rem, 6.2vw, 4.6rem); line-height: 1.0; margin: 0 0 22px; letter-spacing: -0.038em; }
.hero__lede { font-size: clamp(1.08rem, 1.6vw, 1.3rem); line-height: 1.55; color: var(--ink-2); max-width: 52ch; margin: 0 0 30px; }
/* Hero toujours sombre (quel que soit le theme) pour faire ressortir les particules.
   Selecteurs .hero X pour gagner en specificite sur les regles claires. */
.hero { background: #0a1533; border-bottom-color: rgba(255,255,255,.08); }
.hero .hero__eyebrow { color: #9db2ff; }
.hero .hero__eyebrow::before { background: #9db2ff; opacity: .8; }
.hero .hero__title { color: #f4f6ff; font-weight: 700; }
.hero .hero__lede { color: #c3cbef; }
.hero .hero__stats { background: rgba(255,255,255,.035); border-color: rgba(255,255,255,.16); }
.hero .stat { border-color: rgba(255,255,255,.12); }
.hero .stat dt { color: #9aa6d6; }
.hero .stat dd { color: #eef2ff; }
.hero .hero__btn--ghost { color: #eef1fc; border-color: rgba(255,255,255,.34); }
.hero .hero__btn--ghost:hover { background: rgba(255,255,255,.08); color: #fff; border-color: rgba(255,255,255,.6); }
/* Bouton principal du hero : clair pour ressortir sur le fond marine (le marine sur marine serait invisible). */
.hero .hero__btn { background: #eef2ff; color: #0a1533; }
.hero .hero__btn:hover { background: #fff; color: #0a1533; box-shadow: 0 10px 22px -8px rgba(0,0,0,.5); }
/* faint compass meridians, top-right; on-brand wayfinding motif, not decoration-slop */
.hero__bg { position: absolute; top: -140px; right: -150px; width: 660px; height: 660px; z-index: 0; pointer-events: none; color: var(--green); opacity: .055; }
/* Champ de particules facon liaisons atomiques derriere le hero (repris d'ATOM).
   Fondu en CSS pur (pas de dependance a une classe JS) pour garantir l'etat final. */
#atomfield { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; opacity: 0; animation: atomfade 1.4s ease .15s forwards; }
@keyframes atomfade { to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { #atomfield { animation: none; opacity: 1; } }
.hero__bg svg { width: 100%; height: 100%; display: block; }
@media (max-width: 760px) {
  .hero__inner { padding: var(--sp-6) 20px var(--sp-5); }
  .hero__bg { width: 440px; height: 440px; right: -170px; top: -90px; opacity: .045; }
}

/* guided search */
.guide { display: grid; grid-template-columns: 1.3fr 1fr auto; gap: 12px; align-items: end; background: var(--paper-2); border: 1px solid var(--line-strong); border-radius: var(--radius); padding: 16px; box-shadow: var(--shadow-md); max-width: 760px; }
.guide__field { display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.guide__field label { font-size: 0.75rem; font-weight: 600; color: var(--ink-2); letter-spacing: .01em; padding-left: 2px; }
.guide__field input, .guide select { width: 100%; font-family: var(--sans); font-size: 0.9375rem; color: var(--ink); padding: 12px 14px; border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--paper); }
.guide__field input::placeholder { color: var(--ink-3); }
.guide__field input:focus, .guide select:focus { border-color: var(--green); outline: none; box-shadow: 0 0 0 3px rgba(43,102,184,.18); }
.guide__go { background: var(--green); color: var(--paper); border: 0; border-radius: var(--radius-sm); padding: 13px 22px; font-size: 0.9375rem; font-weight: 600; height: 46px; white-space: nowrap; }
.guide__go:hover { background: var(--green-2); }

.hero__stats { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 0; margin: 40px 0 0; max-width: 780px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); overflow: hidden; box-shadow: var(--shadow-sm); }
.stat { padding: 20px 22px; border-right: 1px solid var(--line); }
.stat:last-child { border-right: 0; }
.stat dt { font-size: 0.6875rem; text-transform: uppercase; letter-spacing: .1em; color: var(--ink-3); margin: 0 0 6px; }
.stat dd { margin: 0; font-family: var(--sans); font-size: 2.3rem; font-weight: 800; color: var(--green); letter-spacing: -0.02em; font-variant-numeric: lining-nums tabular-nums; line-height: 1; }
/* fade-in to accompany the count-up; staggered by column for fluidity */
.hero__stats .stat { opacity: 0; transform: translateY(6px); transition: opacity .5s var(--ease), transform .5s var(--ease); }
.hero__stats.is-revealed .stat { opacity: 1; transform: none; }
.hero__stats.is-revealed .stat:nth-child(2) { transition-delay: .08s; }
.hero__stats.is-revealed .stat:nth-child(3) { transition-delay: .16s; }
.hero__stats.is-revealed .stat:nth-child(4) { transition-delay: .24s; }
@media (prefers-reduced-motion: reduce) {
  .hero__stats .stat { opacity: 1; transform: none; }
}

/* ---------- explore ---------- */
.explore { max-width: var(--maxw); margin: 0 auto; padding: 32px 24px 8px; }
.explore__bar { margin-bottom: 24px; }

/* filter card, a deliberate "advanced search" module, not a row of dropdowns */
.filters { display: flex; flex-direction: column; gap: 18px; background: var(--paper-2); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 20px 22px; box-shadow: var(--shadow-md); }
.filters__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.filters__eyebrow { margin: 0; font-size: 0.71875rem; font-weight: 700; text-transform: uppercase; letter-spacing: .14em; color: var(--green); }

/* search */
.filters__search { position: relative; }
.filters__search svg { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: var(--ink-3); }
#filter-search { width: 100%; font-family: var(--sans); font-size: 0.96875rem; color: var(--ink); padding: 15px 16px 15px 46px; border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--paper); }
#filter-search::placeholder { color: var(--ink-3); }
#filter-search:focus { border-color: var(--green); outline: none; box-shadow: 0 0 0 3px rgba(43,102,184,.18); }

/* labeled facet grid: Practice area · Country · City */
.facets { display: grid; grid-template-columns: repeat(auto-fit, minmax(165px, 1fr)); gap: 12px 14px; }
.facet { display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.facet__label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-3); padding-left: 1px; }
.facet .select-wrap, .facet .ms { width: 100%; }
.facet select { width: 100%; min-width: 0; }
.facet--type { gap: 9px; }

/* selects */
.select-wrap { position: relative; }
.select-wrap::after { content: ""; position: absolute; right: 14px; top: 50%; width: 7px; height: 7px; border-right: 1.6px solid var(--ink-3); border-bottom: 1.6px solid var(--ink-3); transform: translateY(-65%) rotate(45deg); pointer-events: none; }
select { appearance: none; -webkit-appearance: none; font-family: var(--sans); font-size: 0.875rem; color: var(--ink); padding: 11px 34px 11px 14px; border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--paper); }
select:focus { border-color: var(--green); outline: none; box-shadow: 0 0 0 3px rgba(43,102,184,.18); }
select:disabled { opacity: .5; cursor: not-allowed; }

/* multiselect (practice area) */
.ms { position: relative; }
.ms__btn { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; text-align: left; background: var(--paper); border: 1px solid var(--line-strong); border-radius: var(--radius-sm); padding: 11px 14px; font-size: 0.875rem; color: var(--ink); }
.ms__btn:hover { border-color: var(--green); }
.ms__btn .ms__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms__btn svg { width: 15px; height: 15px; color: var(--ink-3); flex: none; }
.ms__btn[aria-expanded="true"] { border-color: var(--green); box-shadow: 0 0 0 3px rgba(43,102,184,.18); }
.ms__count { background: var(--green); color: var(--paper); font-size: 0.6875rem; font-weight: 600; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; flex: none; }
.ms__panel { position: absolute; z-index: 800; top: calc(100% + 6px); left: 0; width: min(320px, 92vw); max-height: 360px; overflow-y: auto; background: var(--paper-2); border: 1px solid var(--line-strong); border-radius: var(--radius); box-shadow: var(--shadow-md); padding: 8px; }
.ms__opt { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 0.875rem; color: var(--ink); }
.ms__opt:hover { background: var(--paper-3); }
.ms__opt input { accent-color: var(--green); width: 16px; height: 16px; }
.ms__opt .ms__dot { width: 9px; height: 9px; border-radius: 50%; flex: none; box-shadow: inset 0 0 0 1px rgba(0,0,0,.12); }
.ms__opt .ms__n { margin-left: auto; color: var(--ink-3); font-size: 0.78125rem; }

/* type chips — square corners, editorial */
.chips { display: flex; flex-wrap: wrap; gap: 7px; }
.chip { font-family: var(--sans); font-size: 0.8125rem; font-weight: 500; color: var(--ink-2); background: var(--paper); border: 1px solid var(--line-strong); padding: 7px 12px; border-radius: var(--radius-sm); transition: background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease); display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.chip:hover { border-color: var(--ink-3); color: var(--ink); }
.chip[aria-pressed="true"] { background: var(--green); border-color: var(--green); color: var(--paper); }
.chip[aria-pressed="true"] .chip__dot { box-shadow: 0 0 0 2px rgba(255,255,255,.55); }
.chip__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c, var(--green)); flex: none; }

/* active filter tokens */
.filters__active { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding-top: 15px; border-top: 1px solid var(--line); }
.filters__active-label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-3); }
.tokens { display: flex; flex-wrap: wrap; gap: 7px; }
.token { display: inline-flex; align-items: center; gap: 6px; font-size: 0.78125rem; font-weight: 500; color: var(--green-ink); background: var(--green-tint); border: 1px solid var(--line-strong); padding: 4px 5px 4px 11px; border-radius: 999px; }
.token__x { width: 17px; height: 17px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: rgba(24,38,99,.12); color: var(--green); border: 0; font-size: 0.875rem; line-height: 1; padding: 0; cursor: pointer; }
.token__x:hover { background: var(--green); color: var(--paper); }
.filters__reset { background: none; border: 0; color: var(--clay); font-size: 0.8125rem; font-weight: 600; padding: 4px 2px; text-decoration: underline; text-underline-offset: 3px; }

/* "Understood as": transparence de l'interpretation de la requete libre */
.understood { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin: 2px 0 14px; }
.understood__label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-3); margin-right: 2px; }
.understood__chip { display: inline-flex; align-items: center; gap: 6px; font-size: 0.78125rem; font-weight: 500; color: var(--ink-2); background: var(--panel-2, rgba(24,38,99,.05)); border: 1px solid var(--line); padding: 3px 5px 3px 10px; border-radius: 999px; }
.understood__chip--resolved { color: var(--green-ink); background: var(--green-tint); border-color: var(--line-strong); }
.understood__chip--not { color: var(--clay); background: transparent; border-style: dashed; }
.understood__chip--not .understood__x, .understood__chip--not { text-decoration: line-through; text-decoration-color: rgba(0,0,0,.35); }
.understood__chip--not .token__x { text-decoration: none; }

@media (max-width: 760px) { .facets { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 460px) { .facets { grid-template-columns: 1fr; } }

/* ---------- advanced (v2 taxonomy) filters ---------- */
.filters__adv { border-top: 1px solid var(--line); padding-top: 14px; }
.filters__adv-toggle { display: inline-flex; align-items: center; gap: 8px; background: none; border: 0; padding: 2px 0; font-size: 0.78125rem; font-weight: 600; letter-spacing: .02em; text-transform: uppercase; color: var(--ink-2); }
.filters__adv-toggle:hover { color: var(--ink); }
.filters__adv-toggle svg { width: 15px; height: 15px; transition: transform var(--dur) var(--ease); }
.filters__adv-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.filters__adv-count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; background: var(--green); color: var(--paper); border-radius: 999px; font-size: 0.6875rem; font-weight: 600; }
.adv-panel { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 22px; margin-top: 14px; animation: detail-reveal .28s var(--ease); }
.adv-axis { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.adv-axis--depth .select-wrap { max-width: 280px; }
.chips--sm { gap: 6px; }
.chips--sm .chip { font-size: 0.75rem; padding: 5px 10px; }
@media (max-width: 620px) { .adv-panel { grid-template-columns: 1fr; } }

/* detail panel: collecte auto (neutre, pas de coche verte) + v2 axis badges */
.map-detail__row--meta { color: var(--ink-3); font-size: 0.75rem; }
.map-detail__badge--area.is-unconfirmed { opacity: .72; border-style: dashed; }
.map-detail__v2 { display: flex; flex-direction: column; gap: 12px; margin: 4px 0 14px; }
.map-detail__axis { display: flex; flex-direction: column; gap: 6px; }
.map-detail__axislbl { font-size: 0.625rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); }
.map-detail__badge--axis { background: var(--paper-3); color: var(--ink-2); border: 1px solid var(--line); }
:root[data-theme="dark"] .map-detail__badge--axis { background: rgba(255,255,255,.04); color: var(--obs-text-2); border-color: var(--obs-line); }

/* grid: list + sticky dark map */
.explore__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 26px; align-items: start; }
.panel { min-width: 0; }
.panel__head { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 13px; margin-bottom: 14px; border-bottom: 1px solid var(--line); }
.panel__count { margin: 0; font-size: 0.875rem; color: var(--ink-2); }
.panel__count b { color: var(--ink); font-weight: 600; }
.panel__sort { display: flex; align-items: center; gap: 10px; }
.select-wrap--sort select { min-width: 0; padding: 8px 32px 8px 12px; font-size: 0.84375rem; }
.nearme { display: inline-flex; align-items: center; gap: 6px; background: var(--paper-2); border: 1px solid var(--line-strong); border-radius: var(--radius-sm); padding: 8px 12px; font-size: 0.8125rem; font-weight: 500; color: var(--ink-2); }
.nearme:hover { border-color: var(--green); color: var(--ink); }
.nearme.is-on { background: var(--green); border-color: var(--green); color: var(--paper); }
.nearme svg { width: 14px; height: 14px; }

.cards { list-style: none; margin: 0; padding: 0 6px 0 0; display: flex; flex-direction: column; gap: 11px; max-height: calc(100vh - 130px); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; }
.cards::-webkit-scrollbar { width: 8px; }
.cards::-webkit-scrollbar-thumb { background: var(--line-strong); border-radius: 2px; }

.card { border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); padding: 20px 22px; cursor: pointer; box-shadow: var(--shadow-xs); transition: border-color var(--dur) var(--ease), box-shadow var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); position: relative; }
.card:hover { border-color: var(--line-strong); box-shadow: var(--shadow-md); transform: translateY(-2px); }
.card.is-active { border-color: var(--green); box-shadow: inset 0 0 0 1px var(--green), var(--shadow-md); }
.card.is-active::before { content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; width: 2px; background: var(--green); border-radius: 2px; }
.card__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px 14px; flex-wrap: wrap; }
.card__name { font-family: var(--serif); font-size: 1.125rem; font-weight: 600; line-height: 1.22; letter-spacing: -0.015em; }
.card__inst { font-size: 0.8125rem; color: var(--ink-2); margin-top: 3px; }
.card__type { flex: 0 1 auto; min-width: 0; display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 0.625rem; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; padding: 3px 9px 3px 7px; border-radius: var(--radius-tag); white-space: normal; background: var(--paper-3); color: var(--ink-2); border: 1px solid var(--line); }
.card__type-dot { width: 7px; height: 7px; border-radius: 50%; flex: none; }
.card__type-more { color: var(--ink-3); font-weight: 600; }
.card__meta { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 11px; font-size: 0.8125rem; color: var(--ink-2); }
.card__meta span { display: inline-flex; align-items: center; gap: 6px; }
.card__meta svg { width: 14px; height: 14px; color: var(--ink-3); flex: none; }
.card__desc { font-size: 0.84375rem; color: var(--ink-2); margin: 10px 0 0; line-height: 1.5; }
.card__areas { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.tag { font-size: 0.71875rem; color: var(--ink-2); background: var(--paper-3); border: 1px solid var(--line); padding: 3px 8px; border-radius: var(--radius-tag); }
.card__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 13px; }
.card__link { font-size: 0.8125rem; font-weight: 600; display: inline-flex; align-items: center; gap: 5px; }
.card__link svg { width: 13px; height: 13px; }
.card__dist { font-size: 0.75rem; color: var(--ink-3); }
.panel__empty { padding: 40px 8px; color: var(--ink-2); font-size: 0.9375rem; }
.panel__note { margin: 0 0 12px; padding: 10px 13px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-3); color: var(--ink-2); font-size: 0.8125rem; line-height: 1.45; }

/* ---------- obsidian map ---------- */
.map-wrap { position: sticky; top: 84px; }
.map-stage { position: relative; transition: padding .85s var(--ease); }
#map { height: calc(100vh - 130px); min-height: 540px; border: 1px solid var(--obs-line); border-radius: var(--radius); background: var(--obs); box-shadow: var(--map-shadow); z-index: 1; transition: height .85s var(--ease), max-width .85s var(--ease), border-radius .85s var(--ease), box-shadow .85s var(--ease), margin .85s var(--ease); }
.map-note { margin: 10px 2px 0; font-size: 0.75rem; color: var(--ink-3); }
.map-legend { position: absolute; z-index: 600; left: 14px; bottom: 40px; background: var(--obs-2); border: 1px solid var(--obs-line); border-radius: var(--radius); padding: 10px 13px; display: flex; flex-direction: column; gap: 6px; box-shadow: var(--map-shadow); opacity: 1; transition: opacity .35s var(--ease); }
.map-legend .lg { display: flex; align-items: center; gap: 8px; font-size: 0.71875rem; color: var(--obs-text-2); }
.map-legend .lg b { width: 9px; height: 9px; border-radius: 50%; flex: none; }
/* Keep the legend from covering the map on tablet/phone */
@media (max-width: 980px) {
  .map-legend { left: 10px; bottom: 10px; padding: 7px 9px; gap: 4px; max-width: 46vw; }
  .map-legend .lg { font-size: 0.65rem; gap: 6px; }
  .map-legend .lg b { width: 8px; height: 8px; }
  [dir=rtl] .map-legend { left: auto; right: 10px; }
}
@media (max-width: 560px) {
  .map-legend { left: 8px; bottom: 8px; padding: 6px 8px; gap: 3px; max-width: 64vw; max-height: 42%; overflow-y: auto; border-radius: var(--radius-sm); }
  .map-legend .lg { font-size: 0.625rem; gap: 5px; }
  .map-legend .lg b { width: 7px; height: 7px; }
  [dir=rtl] .map-legend { left: auto; right: 8px; }
}

/* ---------- globe mode (initial state, before any user filter) ---------- */
.map-stage.is-globe { padding: 26px 8px; }
.map-stage.is-globe #map {
  height: min(560px, 72vw);
  max-width: min(560px, 72vw);
  margin: 0 auto;
  border-radius: 50%;
  border-color: transparent;
  /* clip-path reliably clips Leaflet's transformed tile/marker panes to the
     circle while panning (border-radius alone leaks the rectangle). circle(50%)
     is relative to the box, so it tracks the open/close size transition. */
  -webkit-clip-path: circle(50% at 50% 50%);
  clip-path: circle(50% at 50% 50%);
  box-shadow: none;
}
/* glow + rim live on a pseudo-element so clip-path on #map doesn't erase them */
.map-stage.is-globe::after {
  content: "";
  position: absolute; left: 50%; top: 26px;
  width: min(560px, 72vw); height: min(560px, 72vw);
  transform: translateX(-50%);
  border-radius: 50%;
  pointer-events: none; z-index: 0;
  box-shadow:
    0 34px 90px -34px rgba(0,0,0,.55),
    0 0 0 1px rgba(43,102,184,.18),
    0 0 70px -8px rgba(43,102,184,.30);
}
.map-stage.is-globe .map-legend { opacity: 0; pointer-events: none; }
.map-stage.is-globe .leaflet-control-zoom { opacity: 0; pointer-events: none; transition: opacity .35s var(--ease); }
.map-stage.is-globe .leaflet-control-attribution { opacity: 0; pointer-events: none; }
/* atmosphere ring (sits behind the sphere) */
.map-stage.is-globe::before {
  content: "";
  position: absolute; left: 50%; top: 50%;
  width: min(620px, 80vw); height: min(620px, 80vw);
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: radial-gradient(closest-side, transparent 63%, rgba(110,134,242,.16) 70%, transparent 79%);
  pointer-events: none;
  z-index: 0;
  animation: globe-halo 7s var(--ease) infinite;
}
@keyframes globe-halo {
  0%, 100% { opacity: .7; transform: translate(-50%, -50%) scale(1); }
  50%      { opacity: 1;  transform: translate(-50%, -50%) scale(1.015); }
}
/* sphere shading overlay: a static specular highlight + limb shadow that makes
   the disc read as a 3D globe. pointer-events:none so pins stay clickable and,
   crucially, markers DO NOT move — they stay locked to their real coordinates. */
.map-stage.is-globe .map-globe-shade {
  position: absolute; left: 50%; top: 26px;
  width: min(560px, 72vw); height: min(560px, 72vw);
  transform: translateX(-50%);
  border-radius: 50%;
  pointer-events: none;
  z-index: 500;
  opacity: 1;
  transition: opacity .5s var(--ease);
  background:
    radial-gradient(120% 120% at 30% 24%, rgba(255,255,255,.14), rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 72% 82%, rgba(0,0,0,.34), rgba(0,0,0,0) 52%);
}
.map-globe-shade { opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: reduce) {
  .map-stage.is-globe::before { animation: none; }
}

.map-globe-hint {
  position: absolute; left: 50%; bottom: 18px; transform: translateX(-50%);
  z-index: 650;
  display: inline-flex; align-items: center; gap: 9px;
  background: var(--obs-2); color: var(--obs-text);
  border: 1px solid var(--obs-line);
  border-radius: 999px;
  padding: 8px 16px 8px 12px;
  font-size: 0.78125rem; font-weight: 500;
  box-shadow: 0 8px 24px -10px rgba(0,0,0,.4);
  opacity: 0; transform: translate(-50%, 10px);
  pointer-events: none;
  transition: opacity .4s var(--ease), transform .4s var(--ease);
}
.map-stage.is-globe .map-globe-hint { opacity: 1; transform: translate(-50%, 0); }
.map-globe-hint__dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--cat-clinic);
  box-shadow: 0 0 0 0 rgba(47,174,106,.55);
  animation: hint-pulse 2.1s ease-out infinite;
}
@keyframes hint-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(47,174,106,.45); }
  70%  { box-shadow: 0 0 0 10px rgba(47,174,106,0); }
  100% { box-shadow: 0 0 0 0 rgba(47,174,106,0); }
}
@media (prefers-reduced-motion: reduce) { .map-globe-hint__dot { animation: none; } }

.leaflet-container { font-family: var(--sans); background: var(--obs); }
.leaflet-tile { filter: none; }
.leaflet-control-zoom a { border-radius: var(--radius-sm) !important; color: var(--obs-text) !important; border: 1px solid var(--obs-line) !important; background: var(--obs-2) !important; transition: background var(--dur) var(--ease) !important; }
.leaflet-control-zoom a:hover { background: var(--obs-hover) !important; }
.leaflet-bar { box-shadow: 0 6px 22px -10px rgba(0,0,0,.7) !important; border: 0 !important; }
.leaflet-control-attribution { background: var(--obs-2) !important; color: var(--obs-text-2) !important; font-size: 0.65625rem !important; border-radius: var(--radius-tag) 0 0 0; }
.leaflet-control-attribution a { color: var(--green-2) !important; }

/* ---------- Category legend accordion (before the directory) ---------- */
.cat-legend { border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); box-shadow: var(--shadow-sm); margin: 0 0 18px; overflow: hidden; }
.cat-legend__summary { display: flex; align-items: center; gap: 12px; padding: 14px 18px; cursor: pointer; list-style: none; user-select: none; }
.cat-legend__summary::-webkit-details-marker { display: none; }
.cat-legend__summary:focus-visible { outline: 2px solid var(--green); outline-offset: -2px; }
.cat-legend__title { display: inline-flex; align-items: center; gap: 9px; font-family: var(--serif); font-weight: 600; font-size: 0.9375rem; color: var(--ink); }
.cat-legend__icon { width: 20px; height: 20px; flex: none; color: var(--green-2); }
.cat-legend__hint { margin-left: auto; font-size: 0.75rem; color: var(--ink-3); }
.cat-legend__chev { width: 20px; height: 20px; flex: none; color: var(--ink-3); transition: transform var(--dur) var(--ease); }
.cat-legend[open] .cat-legend__chev { transform: rotate(180deg); }
.cat-legend__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 20px; padding: 4px 18px 18px; border-top: 1px solid var(--line); }
.cat-item { display: flex; align-items: flex-start; gap: 10px; }
.cat-item__dot { width: 11px; height: 11px; border-radius: 50%; flex: none; margin-top: 5px; }
.cat-item__name { font-family: var(--sans); font-size: 0.84375rem; font-weight: 600; color: var(--ink); margin: 0 0 2px; }
.cat-item__desc { font-size: 0.78125rem; line-height: 1.45; color: var(--ink-2); margin: 0; }
@media (max-width: 720px) { .cat-legend__grid { grid-template-columns: 1fr; } .cat-legend__hint { display: none; } }
[dir=rtl] .cat-legend__hint { margin-left: 0; margin-right: auto; }

/* ---------- Map full-screen button + fallback ---------- */
.map-fs-btn { position: absolute; top: 12px; right: 12px; z-index: 620; width: 34px; height: 34px; display: inline-flex; align-items: center; justify-content: center; padding: 0; color: var(--obs-text); background: var(--obs-2); border: 1px solid var(--obs-line); border-radius: var(--radius-sm); box-shadow: var(--map-shadow); cursor: pointer; transition: background var(--dur) var(--ease); }
.map-fs-btn:hover { background: var(--obs-hover); }
.map-fs-btn:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; }
.map-fs-btn svg { width: 19px; height: 19px; }
.map-fs-btn__collapse { display: none; }
.map-fs-btn.is-full .map-fs-btn__expand { display: none; }
.map-fs-btn.is-full .map-fs-btn__collapse { display: block; }
[dir=rtl] .map-fs-btn { right: auto; left: 12px; }
.map-stage:fullscreen { background: var(--obs); padding: 0; }
.map-stage:fullscreen #map, .map-stage.is-fullscreen #map { height: 100%; min-height: 0; max-width: none; border-radius: 0; border: 0; }
.map-stage:-webkit-full-screen #map { height: 100%; min-height: 0; border-radius: 0; border: 0; }
.map-stage.is-fullscreen { position: fixed; inset: 0; z-index: 4000; padding: 0; background: var(--obs); }

/* Pin colour is set inline from the taxonomy palette (see app.js icon()); the
   var() here is only the no-JS fallback. data-t holds the provider_type key. */
.pin { width: 12px; height: 12px; border-radius: 50%; background: var(--cat-clinic); color: var(--cat-clinic); border: 2px solid var(--marker-ring); box-shadow: var(--marker-shadow); transition: transform .18s var(--ease), box-shadow .18s var(--ease); }
.pin:hover { transform: scale(1.35); }
.pin.is-active { width: 20px; height: 20px; box-shadow: 0 0 0 5px color-mix(in srgb, currentColor 28%, transparent), var(--marker-shadow); z-index: 900 !important; }

/* ---------- clusters: modern soft dots, properly centered ---------- */
.marker-cluster { background: transparent; }
.marker-cluster div {
  display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; margin: 0;
  background: var(--green);
  color: #fff;
  font-family: var(--sans); font-weight: 600; font-size: 0.8125rem; line-height: 1;
  border: 0;
  border-radius: 50%;
  box-shadow:
    0 6px 18px -6px rgba(27,26,23,.45),
    0 0 0 5px color-mix(in srgb, var(--green) 22%, transparent);
  transition: transform .18s var(--ease), box-shadow .18s var(--ease);
}
.marker-cluster:hover div {
  transform: scale(1.08);
  box-shadow:
    0 8px 22px -6px rgba(27,26,23,.55),
    0 0 0 7px color-mix(in srgb, var(--green) 28%, transparent);
}
.marker-cluster-medium div { width: 46px; height: 46px; font-size: 0.84375rem; }
.marker-cluster-large div { width: 54px; height: 54px; font-size: 0.90625rem; }
.marker-cluster span { display: inline-block; line-height: 1; font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
:root[data-theme="dark"] .marker-cluster div {
  background: var(--green);
  color: var(--paper);
  box-shadow:
    0 8px 22px -8px rgba(0,0,0,.7),
    0 0 0 5px color-mix(in srgb, var(--green) 30%, transparent),
    inset 0 0 12px rgba(255,255,255,.08);
}

/* ---------- detail panel (replaces Leaflet popup) ---------- */
.leaflet-popup { display: none !important; }    /* belt and braces */

.map-detail {
  position: absolute;
  top: 14px; right: 14px;
  width: min(340px, calc(100% - 28px));
  z-index: 700;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 18px 18px 16px;
  box-shadow: 0 22px 60px -24px rgba(0,0,0,.45);
  font-size: 0.875rem;
  color: var(--ink);
  opacity: 0; transform: translateY(-6px) scale(.985);
  pointer-events: none;
  transition: opacity .25s var(--ease), transform .25s var(--ease);
  max-height: calc(100% - 28px);
  overflow-y: auto;
}
.map-detail.is-visible { opacity: 1; transform: none; pointer-events: auto; }
.map-detail__head { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; }
.map-detail__title { min-width: 0; }
.map-detail__name { font-family: var(--serif); font-weight: 600; font-size: 1.0625rem; line-height: 1.22; letter-spacing: -.01em; margin: 0; color: var(--ink); }
.map-detail__inst { font-size: 0.78125rem; color: var(--ink-2); margin: 3px 0 0; }
.map-detail__close {
  flex: none;
  width: 28px; height: 28px; padding: 0;
  display: inline-grid; place-items: center;
  background: transparent; color: var(--ink-3);
  border: 1px solid var(--line); border-radius: var(--radius-sm);
  font-size: 1rem; line-height: 1; cursor: pointer;
}
.map-detail__close:hover { color: var(--ink); border-color: var(--ink-3); background: var(--paper-3); }

.map-detail__badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 14px; }
.map-detail__badge {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 0.65625rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
  padding: 4px 9px; border-radius: var(--radius-tag);
  background: var(--paper-3); color: var(--ink-2);
  border: 1px solid var(--line);
}
.map-detail__badge--type { background: var(--ink); color: var(--paper); border-color: transparent; }
.map-detail__badge--type::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--c, var(--cat-clinic)); }
.map-detail__badge--area { background: var(--green-tint); color: var(--green-ink); border-color: color-mix(in srgb, var(--green) 22%, transparent); }

.map-detail__rows { display: flex; flex-direction: column; gap: 7px; margin: 0 0 4px; }
.map-detail__row { display: flex; gap: 9px; align-items: flex-start; color: var(--ink-2); font-size: 0.8125rem; line-height: 1.45; margin: 0; }
.map-detail__row svg { width: 14px; height: 14px; color: var(--ink-3); flex: none; margin-top: 3px; }
.map-detail__row a { color: var(--green); }
.map-detail__row a:hover { color: var(--green-2); }

.map-detail__open {
  display: inline-flex; align-items: center; gap: 6px;
  margin-top: 14px;
  width: 100%; justify-content: center;
  background: var(--green); color: var(--paper);
  border: 0; border-radius: var(--radius-sm);
  padding: 11px 14px; font-weight: 600; font-size: 0.84375rem; cursor: pointer;
}
.map-detail__open:hover { background: var(--green-2); }
.map-detail__open svg { width: 13px; height: 13px; transition: transform .18s var(--ease); }
.map-detail__open:hover svg { transform: translateY(1px); }

.map-detail__full { display: none; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line); }
.map-detail.is-expanded .map-detail__full { display: block; animation: detail-reveal .35s var(--ease); }
.map-detail.is-expanded .map-detail__open { display: none; }
.map-detail__desc { color: var(--ink-2); margin: 0 0 12px; line-height: 1.55; font-size: 0.84375rem; }
.map-detail__site {
  display: inline-flex; align-items: center; gap: 7px;
  background: var(--green); color: var(--paper) !important;
  padding: 10px 16px; border-radius: var(--radius-sm);
  font-weight: 600; font-size: 0.84375rem;
  margin-top: 6px;
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.map-detail__site:hover { background: var(--green-2); color: var(--paper) !important; transform: translateY(-1px); }
.map-detail__site svg { width: 13px; height: 13px; }
/* Lien vers la fiche dediee (page indexable/partageable): bouton secondaire. */
.map-detail__fiche {
  display: inline-flex; align-items: center; gap: 7px;
  border: 1px solid var(--line-strong); color: var(--ink) !important;
  padding: 10px 16px; border-radius: var(--radius-sm);
  font-weight: 600; font-size: 0.84375rem; margin-top: 6px; margin-right: 8px;
  transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.map-detail__fiche:hover { border-color: var(--green); background: var(--green-tint); transform: translateY(-1px); }
.map-detail__fiche svg { width: 12px; height: 12px; }
/* Fraicheur des donnees: lien discret vers le formulaire de correction/MAJ. */
.map-detail__report {
  display: inline-block; margin-top: 12px;
  color: var(--ink-3); font-size: 0.78125rem; text-decoration: underline;
  text-underline-offset: 2px;
}
.map-detail__report:hover { color: var(--green-2); }

@keyframes detail-reveal {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .map-detail.is-expanded .map-detail__full { animation: none; }
}

:root[data-theme="dark"] .map-detail {
  background: var(--obs-2);
  border-color: var(--obs-line);
  box-shadow: 0 22px 60px -22px rgba(0,0,0,.7);
}
:root[data-theme="dark"] .map-detail__badge { background: rgba(255,255,255,.04); color: var(--obs-text-2); border-color: var(--obs-line); }
:root[data-theme="dark"] .map-detail__badge--type { background: var(--paper); color: var(--obs); }
:root[data-theme="dark"] .map-detail__close { border-color: var(--obs-line); color: var(--obs-text-2); }
:root[data-theme="dark"] .map-detail__close:hover { background: var(--obs-hover); color: var(--obs-text); }

@media (max-width: 540px) {
  .map-detail { top: auto; bottom: 14px; right: 14px; left: 14px; width: auto; max-height: 60%; }
}

/* ---------- about ---------- */
.about { border-top: 1px solid var(--line); margin-top: 38px; background: var(--paper-2); }
/* Hero key figures (count up on load): organisations + countries, no box */
.hero__figures { display: flex; gap: clamp(1.75rem, 6vw, 3.5rem); margin: 38px 0 0; padding: 0; }
.hero .hero__figure { display: flex; flex-direction: column; gap: 4px; }
.hero .hero__figure dd { margin: 0; font-family: var(--serif); font-size: clamp(1.9rem, 4.4vw, 2.7rem); font-weight: 700; line-height: 1; letter-spacing: -0.02em; color: #eef2ff; font-variant-numeric: lining-nums tabular-nums; }
.hero .hero__figure dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: .1em; color: #9aa6d6; }

/* "Qui sommes-nous" — two alternating blocks (left / right) with icons */
.whoweare { border-top: 1px solid var(--line); background: var(--paper-2); }
.whoweare__inner { max-width: 980px; margin: 0 auto; padding: clamp(3.5rem, 8vw, 6rem) 24px; }
.whoweare__eyebrow { margin: 0 0 12px; font-size: .8125rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--green-2); }
.whoweare__title { font-size: clamp(1.7rem, 3.4vw, 2.6rem); line-height: 1.1; letter-spacing: -0.02em; max-width: 24ch; margin: 0 0 clamp(2rem, 5vw, 3rem); color: var(--ink); }
.whoweare__row { display: flex; gap: clamp(1rem, 3vw, 2rem); align-items: flex-start; max-width: 760px; }
.whoweare__row + .whoweare__row { margin-top: clamp(1.75rem, 4vw, 2.75rem); }
.whoweare__row--left { margin-right: auto; text-align: left; }
.whoweare__row--right { margin-left: auto; flex-direction: row-reverse; text-align: right; }
.whoweare__icon { flex: none; width: 54px; height: 54px; border-radius: 50%; background: var(--green); color: #fff; display: inline-flex; align-items: center; justify-content: center; box-shadow: 0 12px 26px -14px rgba(24,38,99,.65); }
.whoweare__icon svg { width: 26px; height: 26px; }
.whoweare__text { margin: 0; font-size: 1.02rem; line-height: 1.72; color: var(--ink-2); }
.whoweare__close { margin: clamp(2rem, 5vw, 3rem) 0 0; text-align: center; font-family: var(--serif); font-size: 1.12rem; font-weight: 600; letter-spacing: -0.01em; color: var(--ink); }
@media (max-width: 720px) {
  .whoweare__row, .whoweare__row--left, .whoweare__row--right { flex-direction: column; text-align: left; margin-left: 0; margin-right: 0; }
}

.about__inner { max-width: var(--maxw); margin: 0 auto; padding: 70px 24px; }
.about__lead { max-width: 62ch; margin-bottom: 34px; }
.about__lead h2 { font-size: clamp(1.7rem, 3vw, 2.4rem); margin-bottom: 18px; letter-spacing: -0.02em; }
.about__lead p { font-size: 1rem; line-height: 1.6; color: var(--ink-2); margin: 0; }
.about__cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 36px; }
.about__col { border-top: 2px solid var(--green); padding-top: 16px; }
.about__col h3 { font-size: 1.12rem; margin-bottom: 8px; }
.about__col p { font-size: 0.90625rem; color: var(--ink-2); margin: 0; }

/* ---------- support / partnerships ---------- */
.support { border-top: 1px solid var(--line); background: var(--paper); }
.support__inner { max-width: var(--maxw); margin: 0 auto; padding: 76px 24px; }
.support__lede { max-width: 64ch; margin: 0 0 32px; }
.support__eyebrow { margin: 0 0 14px; font-size: 0.71875rem; font-weight: 700; text-transform: uppercase; letter-spacing: .18em; color: var(--clay); }
.support__lede h2 { font-size: clamp(1.7rem, 3vw, 2.4rem); margin: 0 0 16px; letter-spacing: -0.02em; }
.support__lede p { font-size: 0.98rem; line-height: 1.6; color: var(--ink-2); margin: 0; }
.support__cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.support__col {
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-top: 2px solid var(--green);
  border-radius: var(--radius);
  padding: 22px 22px 20px;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.support__col:hover { box-shadow: var(--shadow-md); transform: translateY(-1px); border-color: var(--line-strong); border-top-color: var(--green); }
.support__col h3 { font-size: 1.06rem; margin: 0 0 8px; letter-spacing: -0.01em; }
.support__col p { font-size: 0.875rem; color: var(--ink-2); line-height: 1.55; margin: 0; }
.support__cta {
  display: flex; align-items: center; gap: 22px; flex-wrap: wrap;
  margin-top: 38px; padding-top: 26px; border-top: 1px solid var(--line);
}
.support__btn {
  display: inline-flex; align-items: center; gap: 7px;
  background: var(--green); color: var(--paper);
  font-weight: 600; font-size: 0.90625rem;
  padding: 13px 22px; border-radius: var(--radius-sm);
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.support__btn:hover { background: var(--green-2); color: var(--paper); transform: translateY(-1px); }
.support__small { margin: 0; color: var(--ink-3); font-size: 0.8125rem; max-width: 52ch; }

/* Donation simulator */
.donsim { margin: 34px 0 30px; padding: clamp(20px,3vw,30px); border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); }
.donsim__head h3 { font-size: 1.2rem; margin: 0 0 6px; }
.donsim__head p { font-size: 0.95rem; color: var(--ink-2); margin: 0 0 20px; max-width: 54ch; line-height: 1.55; }
.donsim__grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(18px,3vw,34px); align-items: center; }
@media (max-width: 640px) { .donsim__grid { grid-template-columns: 1fr; } }
.donsim__seg { display: inline-flex; background: var(--paper); border: 1px solid var(--line-strong); border-radius: 999px; padding: 3px; margin-bottom: 16px; }
.donsim__tab { border: 0; background: transparent; font: inherit; font-size: 0.875rem; font-weight: 600; color: var(--ink-2); padding: 7px 16px; border-radius: 999px; cursor: pointer; }
.donsim__tab[aria-selected="true"] { background: var(--green); color: var(--paper); }
.donsim__amount { display: block; font-size: 0.8125rem; font-weight: 600; color: var(--ink-2); }
.donsim__input { display: flex; align-items: center; gap: 8px; margin-top: 7px; }
.donsim__input input { flex: 1; min-width: 0; font: inherit; font-size: 1.25rem; font-weight: 700; color: var(--ink); background: var(--paper); border: 1px solid var(--line-strong); border-radius: var(--radius-sm); padding: 11px 14px; }
.donsim__input input:focus { outline: none; border-color: var(--green); box-shadow: 0 0 0 3px var(--green-tint); }
.donsim__input > span { font-size: 1.25rem; font-weight: 700; color: var(--ink-3); }
.donsim__quick { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.donsim__quick button { font: inherit; font-size: 0.8125rem; font-weight: 600; color: var(--green); background: var(--green-tint); border: 1px solid transparent; border-radius: 999px; padding: 6px 13px; cursor: pointer; }
.donsim__quick button:hover { border-color: var(--green); }
.donsim__out { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 20px 22px; }
.donsim__lbl { font-size: 0.8125rem; font-weight: 600; color: var(--ink-2); margin: 0 0 2px; }
.donsim__big { font-family: var(--serif); font-size: clamp(2.2rem,5vw,2.8rem); font-weight: 800; color: var(--green); letter-spacing: -0.02em; margin: 0 0 10px; line-height: 1; font-variant-numeric: tabular-nums; }
.donsim__red { font-size: 0.9375rem; color: var(--ink-2); margin: 0; }
.donsim__red b { color: var(--ink); font-variant-numeric: tabular-nums; }
.donsim__rate { display: inline-block; margin-left: 6px; font-size: 0.75rem; font-weight: 700; color: var(--green); background: var(--green-tint); border-radius: 999px; padding: 1px 8px; }
.donsim__note { font-size: 0.75rem; color: var(--ink-3); line-height: 1.5; margin: 18px 0 0; }
@media (max-width: 920px) { .support__cols { grid-template-columns: 1fr; gap: 14px; } }
@media (max-width: 540px) { .support__inner { padding: 56px 20px; } .support__cta { gap: 14px; } }

/* tiny clay-accent dot on the "Support us" nav link */
.nav__links a.nav__support { display: inline-flex; align-items: center; gap: 7px; }
.nav__links a.nav__support::before {
  content: "";
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--clay);
  box-shadow: 0 0 0 0 rgba(168,85,47,.55);
  animation: support-pulse 2.4s ease-out infinite;
}
@keyframes support-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(168,85,47,.45); }
  70%  { box-shadow: 0 0 0 8px rgba(168,85,47,0); }
  100% { box-shadow: 0 0 0 0 rgba(168,85,47,0); }
}
@media (prefers-reduced-motion: reduce) { .nav__links a.nav__support::before { animation: none; } }

/* ---------- contribute ---------- */
/* The background is always dark navy (both themes), so the text is a FIXED light
   colour, never var(--paper) which flips to dark navy in dark mode. Aligned to
   --maxw like the about/support sections (was a narrow 760px centred block). */
.contribute { border-top: 1px solid var(--line); background: #0a1533; color: #c3cbef; position: relative; overflow: hidden; }
.contribute__inner { max-width: var(--maxw); margin: 0 auto; padding: 64px 24px; position: relative; }
.contribute__rule { display: block; width: 46px; height: 2px; border-radius: 2px; background: #9db2ff; margin-bottom: 20px; }
.contribute__inner h2 { color: #f4f6ff; font-size: clamp(1.6rem, 2.6vw, 2.1rem); margin-bottom: 12px; max-width: 24ch; letter-spacing: -0.01em; }
.contribute__inner p { color: #c3cbef; font-size: 0.97rem; line-height: 1.6; margin: 0 0 22px; max-width: 56ch; }
:root .contribute .btn-light { background: #eef2ff; color: #0a1533; }
:root .contribute .btn-light:hover { background: #fff; color: #0a1533; }
.contribute__deco { position: absolute; top: 50%; inset-inline-end: 5%; transform: translateY(-50%); width: 232px; height: 232px; color: #fff; opacity: .12; pointer-events: none; }
.contribute__deco svg { width: 100%; height: 100%; display: block; }
.contribute__path code { font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: 0.875rem; background: rgba(255,255,255,.1); padding: 6px 12px; border-radius: var(--radius-tag); color: #fff; }
@media (max-width: 980px) { .contribute__deco { display: none; } }   /* avoid the compass sitting behind the heading on tablet/phone */

/* ---------- footer ---------- */
.footer { background: #0a1533; color: var(--paper); }
.footer__inner { max-width: var(--maxw); margin: 0 auto; padding: 42px 24px; display: flex; flex-wrap: wrap; gap: 28px; justify-content: space-between; align-items: flex-start; }
.footer__brand .brand__name { color: var(--paper); font-size: 1.25rem; }
/* In dark mode --paper is a near-black navy: force a light wordmark so it
   stays legible on the dark footer instead of navy-on-navy. */
:root[data-theme="dark"] .footer__brand .brand__name { color: #eef1fc; }
.footer__brand p { color: rgba(228,234,253,.8); font-size: 0.875rem; margin: 8px 0 0; max-width: 38ch; }
.footer__meta { color: rgba(228,234,253,.85); font-size: 0.78125rem; max-width: 46ch; margin: 0; }
.footer__meta a { color: rgba(238,242,254,.95); text-decoration: underline; }

/* ---------- responsive ---------- */
@media (max-width: 980px) {
  .explore__grid { grid-template-columns: 1fr; }
  .map-wrap { position: relative; top: 0; order: -1; }
  #map { height: 54vh; min-height: 360px; }
  .cards { max-height: none; overflow: visible; padding-right: 0; }
  .about__cols { grid-template-columns: 1fr; gap: 28px; }
  .guide { grid-template-columns: 1fr; }
  .guide__go { width: 100%; }
}
@media (max-width: 620px) {
  .nav__links { gap: 14px; }
  .brand__tag { display: none; }
  .hero__inner { padding: 48px 20px 40px; }
  .hero__stats { grid-template-columns: repeat(2, 1fr); }
  .stat:nth-child(2) { border-right: 0; }
  .stat:nth-child(1), .stat:nth-child(2) { border-bottom: 1px solid var(--line); }
  .ms__panel { width: min(86vw, 320px); }
  .panel__head { flex-direction: column; align-items: flex-start; gap: 10px; }
}
/* ---------- language switcher ---------- */
.select-wrap--lang { margin-left: 2px; }
.select-wrap--lang select { padding: 8px 30px 8px 12px; font-size: 0.84375rem; min-width: 0; background: var(--paper-2); }
.nav__links a.is-current { color: #9db2ff; font-weight: 600; }

/* ---------- theme toggle (single button, cycles system -> light -> dark) ---------- */
.theme-toggle {
  display: grid; place-items: center;
  width: 34px; height: 34px; flex: none;   /* same fixed circle as the accessibility button (don't let flex squish it) */
  padding: 0; border: 1px solid var(--line-strong); border-radius: 999px;
  background: var(--paper-2); color: var(--ink-2);
  cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease, transform .12s ease;
}
.theme-toggle svg { width: 19px; height: 19px; display: block; transition: transform .25s ease; }
.theme-toggle:hover { color: var(--ink); border-color: var(--clay); }
.theme-toggle:active { transform: scale(.94); }
/* Same format as the accessibility button: a plain outlined circle in every
   mode. The icon (sun / moon / monitor) signals the active mode, not a fill. */

/* ---------- "Types" explainer page ---------- */
.about__cols.types-cols { grid-template-columns: repeat(2, minmax(0,1fr)); }
.about__cols.types-cols .about__col { background: var(--paper-2); border: 1px solid var(--line); border-left-width: 3px; border-radius: var(--radius-tag); padding: 20px 22px; }
.types-note { max-width: 70ch; margin: 30px 0 0; color: var(--ink-2); font-size: 0.90625rem; padding: 14px 16px; background: var(--paper-3); border-radius: var(--radius-tag); }
@media (max-width: 680px) { .about__cols.types-cols { grid-template-columns: 1fr; } }

/* ---------- buttons ---------- */
.btn-light { display: inline-block; background: var(--paper); color: var(--green); font-weight: 600; padding: 12px 22px; border-radius: var(--radius-sm); }
.btn-light:hover { background: #fff; color: var(--green-2); transform: translateY(-1px); }
.btn-primary { background: var(--green); color: var(--paper); border: 0; border-radius: var(--radius-sm); padding: 14px 22px; font-size: 0.9375rem; font-weight: 600; width: 100%; }
.btn-primary:hover { background: var(--green-2); }
.btn-primary:active { transform: translateY(1px); }
.btn-primary:disabled { opacity: .6; cursor: default; }
.footer__links { display: flex; flex-wrap: wrap; gap: 18px; margin-top: 14px; }
.footer__links a { color: rgba(238,242,254,.92); font-size: 0.84375rem; }

/* honeypot */
.hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; }

/* ---------- form pages (contact / register) ---------- */
.form-page { max-width: var(--maxw); margin: 0 auto; padding: 52px 24px 80px; }
.form-page__inner { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 52px; align-items: start; }
.form-aside { position: sticky; top: 92px; }
.form-title { font-size: clamp(1.9rem, 3.4vw, 2.7rem); margin: 10px 0 16px; letter-spacing: -0.02em; }
.form-lede { color: var(--ink-2); font-size: 1.06rem; margin: 0 0 22px; }
.form-points { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; color: var(--ink-2); font-size: 0.90625rem; }
.form-points li { padding-left: 22px; position: relative; }
.form-points li::before { content: ""; position: absolute; left: 0; top: 8px; width: 9px; height: 9px; border-radius: 50%; background: var(--green); }
.form-card { background: var(--paper-2); border: 1px solid var(--line); border-radius: var(--radius); padding: 28px; box-shadow: var(--shadow-md); }
.field { display: flex; flex-direction: column; gap: 7px; margin-bottom: 16px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.field label { font-size: 0.84375rem; font-weight: 600; color: var(--ink); }
.field .opt { color: var(--ink-3); font-weight: 400; }
.field input, .field textarea, .form-card select { font-family: var(--sans); font-size: 0.9375rem; color: var(--ink); padding: 11px 13px; border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--paper); width: 100%; }
.field textarea { resize: vertical; }
.field input:focus, .field textarea:focus, .form-card select:focus { border-color: var(--green); outline: none; box-shadow: 0 0 0 3px rgba(43,102,184,.18); }
.form-card .select-wrap select { appearance: none; -webkit-appearance: none; padding-right: 34px; }
.field-sep { border: 0; border-top: 1px solid var(--line); margin: 6px 0 18px; }
.consent { display: flex; gap: 10px; align-items: flex-start; font-size: 0.84375rem; color: var(--ink-2); margin: 4px 0 20px; }
.consent input { margin-top: 3px; accent-color: var(--green); width: 16px; height: 16px; flex: none; }
.form-status { margin: 14px 0 0; font-size: 0.875rem; padding: 12px 14px; border-radius: var(--radius-sm); }
.form-status--ok { background: var(--green-tint); color: var(--green-ink); }
.form-status--err { background: #f6e7df; color: #7a3a23; }

/* ---------- scripts + RTL ---------- */
:lang(ar), :lang(ur) { font-family: "Noto Sans Arabic", var(--sans); }
:lang(ar) h1, :lang(ar) h2, :lang(ar) h3, :lang(ur) h1, :lang(ur) h2, :lang(ur) h3 { font-family: "Noto Sans Arabic", var(--serif); letter-spacing: 0; }
[dir=rtl] .select-wrap::after { right: auto; left: 13px; }
[dir=rtl] .filters__search svg { left: auto; right: 13px; }
[dir=rtl] #filter-search { padding: 11px 40px 11px 14px; }
[dir=rtl] .ms__panel { left: auto; right: 0; }
[dir=rtl] .map-legend { left: auto; right: 14px; }
[dir=rtl] .filters__reset { margin-left: 0; margin-right: auto; }
[dir=rtl] .form-points li { padding-left: 0; padding-right: 22px; }
[dir=rtl] .form-points li::before { left: auto; right: 0; }
[dir=rtl] .card__type, [dir=rtl] .stat { border-right: 0; }

@media (max-width: 860px) {
  .form-page__inner { grid-template-columns: 1fr; gap: 32px; }
  .form-aside { position: static; }
}
@media (max-width: 560px) { .field-row { grid-template-columns: 1fr; } }

@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } * { transition: none !important; } }

/* ============================================================
   Polish layer (UI/UX pass): depth on primary actions,
   scroll-reveal entrances, refined detail. Additive overrides.
   ============================================================ */

/* primary actions get a quiet lift + shadow */
.btn-primary, .guide__go, .support__btn, .map-detail__open {
  box-shadow: 0 6px 16px -8px color-mix(in srgb, var(--green) 60%, transparent);
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.btn-primary:hover, .guide__go:hover, .support__btn:hover, .map-detail__open:hover { transform: translateY(-1px); box-shadow: 0 10px 22px -8px color-mix(in srgb, var(--green) 65%, transparent); }
.btn-primary:active, .guide__go:active, .support__btn:active, .map-detail__open:active { transform: translateY(0); }

/* lighter, airier area tags */
.tag { background: transparent; border-color: var(--line-strong); color: var(--ink-2); }

/* nav links: animated underline reveal */
.nav__links a:not(.nav__support) { position: relative; }
.nav__links a:not(.nav__support)::after {
  content: ""; position: absolute; left: 0; right: 100%; bottom: -4px; height: 1.5px;
  background: var(--green-2); border-radius: 2px; transition: right var(--dur-slow) var(--ease-out);
}
.nav__links a:not(.nav__support):hover::after { right: 0; }

/* section headings (about / support) get the eyebrow tick rhythm */
.about__lead h2, .support__lede h2 { letter-spacing: -0.025em; }

/* ---- scroll reveal: subtle fade + rise, once, on enter ---- */
[data-reveal] { opacity: 0; transform: translateY(16px); transition: opacity .7s var(--ease-out), transform .7s var(--ease-out); will-change: opacity, transform; }
[data-reveal].reveal-in { opacity: 1; transform: none; }
[data-reveal][data-reveal-delay="1"] { transition-delay: .08s; }
[data-reveal][data-reveal-delay="2"] { transition-delay: .16s; }
[data-reveal][data-reveal-delay="3"] { transition-delay: .24s; }
@media (prefers-reduced-motion: reduce) { [data-reveal] { opacity: 1; transform: none; } }

/* ============================================================
   Editorial craft pass (v2): remove the "AI template" tells.
   Brand-locked (navy / azure / white, Space Grotesk + Inter,
   squared, flat, hairline). Additive, later source order wins.
   Goal: read as designed by a person, not generated.
   ============================================================ */

/* --- type foundations: balance, measure, tinted selection --- */
::selection { background: color-mix(in srgb, var(--clay) 24%, transparent); color: var(--ink); }
h1, h2, h3 { text-wrap: balance; }
p, li { text-wrap: pretty; }
.hero__lede, .about__lead p, .support__lede p, .about__col p { max-width: 60ch; }

/* --- confident display type --- */
.hero__title { font-size: clamp(2.9rem, 6.6vw, 5.2rem); line-height: 1.0; letter-spacing: -0.018em; font-weight: 600; }
.about__lead h2, .support__lede h2 { font-size: clamp(1.95rem, 3.4vw, 2.9rem); font-weight: 600; letter-spacing: -0.03em; }
.brand__name { letter-spacing: -0.03em; }

/* --- editorial kicker: drop the long uppercase-tracked eyebrow --- */
.hero__eyebrow, .support__eyebrow { text-transform: none; letter-spacing: .02em; font-size: 0.8125rem; font-weight: 600; }
.hero__eyebrow { color: var(--green-2); gap: 13px; margin-bottom: 26px; }
.hero__eyebrow::before { width: 30px; height: 1.5px; background: var(--clay); opacity: 1; }
.support__eyebrow { display: inline-flex; align-items: center; gap: 13px; color: var(--clay); }
.support__eyebrow::before { content: ""; width: 30px; height: 1.5px; background: currentColor; }
/* keep the small functional labels, just calm the relentless tracking */
.facet__label, .stat dt, .filters__active-label, .map-detail__axislbl, .filters__eyebrow { letter-spacing: .05em; }

/* --- hero air --- */
.hero__inner { max-width: var(--maxw); }   /* align hero content left-edge with every other section */

/* --- stats: editorial figure strip, de-boxed --- */
.hero__stats { border: 0; border-top: 1px solid var(--line-strong); background: transparent; box-shadow: none; border-radius: 0; gap: 0; margin-top: 50px; padding-top: 26px; }
.stat { padding: 0 28px; border-right: 1px solid var(--line); }
.stat:first-child { padding-left: 0; }
.stat dd { font-size: clamp(34px, 4.2vw, 47px); letter-spacing: -0.045em; }
.stat dt { text-transform: none; letter-spacing: .01em; font-size: 0.78125rem; margin-top: 9px; color: var(--ink-3); }

/* --- ABOUT: asymmetric, numbered editorial (not three equal cards) --- */
/* scoped with :not(.types-cols) so the Types page keeps its own colour-coded grid */
.about__cols:not(.types-cols) { grid-template-columns: repeat(3, 1fr); gap: 0 44px; }
.about__cols:not(.types-cols) .about__col { border-top: 0; border-left: 1px solid var(--line); padding: 2px 0 0 24px; }
.about__cols:not(.types-cols) .about__col:first-child { border-left: 0; padding-left: 0; }
.about__cols:not(.types-cols) .about__col h3 { font-size: 1.16rem; letter-spacing: -0.012em; margin-bottom: 9px; }

/* --- SUPPORT: de-boxed entries on a single hairline-separated row --- */
.support__cols { grid-template-columns: repeat(3, 1fr); gap: 0 44px; }
.support__col { background: transparent; border: 0; border-left: 1px solid var(--line); border-radius: 0; box-shadow: none; transform: none; padding: 2px 0 0 24px; }
.support__col:first-child { border-left: 0; padding-left: 0; }
.support__col:hover { box-shadow: none; transform: none; border-color: var(--line); }
.support__col h3 { font-size: 1.08rem; }

/* --- surfaces: two deliberate radius tiers (controls 4px / containers 8px) --- */
.filters, .form-card, .map-detail { border-radius: 8px; }
.card { box-shadow: none; border-radius: 8px; }
.card:hover { box-shadow: var(--shadow-md); }
.card__name { font-size: 1.09375rem; }

/* --- responsive guards for the restructured sections --- */
@media (max-width: 980px) {
  .about__cols:not(.types-cols), .support__cols { grid-template-columns: 1fr; }
  .about__cols:not(.types-cols) .about__col, .support__col { border-left: 0; border-top: 1px solid var(--line); margin-top: 24px; padding: 22px 0 0; }
  .about__cols:not(.types-cols) .about__col:first-child, .support__col:first-child { border-top: 0; margin-top: 0; padding-top: 0; }
  .support__col:hover { border-color: var(--line); }
}
@media (max-width: 620px) {
  .stat { padding: 0 16px; }
  .stat:first-child { padding-left: 0; }
}

/* ============================================================
   Architect refinement pass: flat surfaces, calm motion,
   single-encoded states, Types page editorial, RTL mirroring.
   ============================================================ */

/* flat surfaces everywhere: the filter + form cards join the editorial pass */
.filters { box-shadow: none; }
.form-card { box-shadow: var(--shadow-xs); }
.form-lede { max-width: 50ch; }

/* calm voice: no infinite pulsing / halo (trust, not manufactured urgency) */
.nav__links a.nav__support::before { animation: none; box-shadow: none; }
.map-globe-hint__dot { animation: none; box-shadow: none; }
.map-stage.is-globe::before { animation: none; }

/* one decisive active-card signal: keep the left accent bar, drop the inset ring */
.card.is-active { box-shadow: none; border-color: var(--green); }

/* TYPES page: de-boxed, one colour-coded left bar per provider type */
.about__cols.types-cols { grid-template-columns: repeat(2, minmax(0,1fr)); gap: 16px 30px; }
.about__cols.types-cols .about__col { background: transparent; border: 0; border-left: 3px solid var(--type-c, var(--line-strong)); border-radius: 0; box-shadow: none; padding: 4px 0 8px 16px; }
.about__cols.types-cols .about__col h3 { font-size: 1.08rem; margin-bottom: 6px; }
@media (max-width: 680px) { .about__cols.types-cols { grid-template-columns: 1fr; } }

/* RTL: mirror the numbered-column hairlines + indents */
[dir=rtl] .about__cols:not(.types-cols) .about__col,
[dir=rtl] .support__col { border-left: 0; border-right: 1px solid var(--line); padding-left: 0; padding-right: 28px; }
[dir=rtl] .about__cols:not(.types-cols) .about__col:first-child,
[dir=rtl] .support__col:first-child { border-right: 0; padding-right: 0; }
[dir=rtl] .about__cols.types-cols .about__col { border-left: 0; border-right: 3px solid var(--type-c, var(--line-strong)); padding-left: 0; padding-right: 16px; }

/* ============================================================
   Hero call-to-action + a11y heading additions
   ============================================================ */
/* a section-lead H1 (e.g. the Types page title) matches the H2 display treatment */
.about__lead h1 { font-size: clamp(1.95rem, 3.4vw, 2.9rem); font-weight: 600; letter-spacing: -0.03em; line-height: 1.06; margin: 0 0 18px; }

.hero__cta { display: flex; flex-wrap: wrap; gap: 12px; margin: 2px 0 0; }
.hero__btn {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--green); color: var(--paper);
  font-weight: 600; font-size: 0.9375rem; padding: 13px 22px;
  border-radius: var(--radius-sm);
  box-shadow: 0 6px 16px -8px color-mix(in srgb, var(--green) 60%, transparent);
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.hero__btn:hover { background: var(--green-2); color: var(--paper); transform: translateY(-1px); box-shadow: 0 10px 22px -8px color-mix(in srgb, var(--green) 65%, transparent); }
.hero__btn:active { transform: translateY(0); }
.hero__btn--ghost { background: transparent; color: var(--green); border: 1px solid var(--line-strong); box-shadow: none; }
.hero__btn--ghost:hover { background: var(--paper-2); color: var(--green-2); border-color: var(--green); box-shadow: none; }

/* ============================================================
   Mobile navigation (hamburger + dropdown) + larger touch targets
   ============================================================ */
.nav__toggle { display: none; }
.token__x { width: 24px; height: 24px; }   /* >= 24px touch target (WCAG 2.5.8) */

/* The full horizontal nav (brand + 6 links + 3 controls) needs ~1300px in the
   longest language. Below that, slim it (drop the decorative tagline, tighten
   gaps) so nothing is clipped; below the hamburger breakpoint it collapses. */
/* Tighten the horizontal nav whenever it is shown (7 items + pill + tools). */
@media (max-width: 1440px) {
  .brand__tag { display: none; }
  .nav__links { gap: 11px; }
  .nav__links a { font-size: 0.86rem; }
}

@media (max-width: 1280px) {
  .nav__toggle {
    display: inline-grid; place-items: center;
    width: 40px; height: 40px; padding: 0; flex: none; margin-left: 10px; order: 3;
    background: var(--paper-2); color: var(--ink);
    border: 1px solid var(--line-strong); border-radius: var(--radius-sm);
  }
  .nav__toggle svg { width: 20px; height: 20px; display: block; }
  .nav__toggle:hover { border-color: var(--ink-3); }
  .nav__inner { flex-wrap: wrap; }
  /* keep theme + language always reachable, aligned before the menu button */
  .nav__tools { order: 2; margin-left: auto; }
  .nav__links {
    position: absolute; top: 100%; inset-inline-end: 12px; inset-inline-start: auto;
    width: min(300px, calc(100vw - 24px));
    flex-direction: column; align-items: stretch; gap: 2px;
    background: #0f1c40; border: 1px solid rgba(255,255,255,.14);
    border-radius: 10px; box-shadow: 0 18px 40px -20px rgba(0,0,0,.85);
    padding: 10px; margin-top: 6px; white-space: normal;
    display: none;
  }
  .nav.is-open .nav__links { display: flex; }
  .nav__links a { display: block; padding: 11px 12px; border-radius: var(--radius-sm); font-size: 0.9375rem; }
  .nav__links a:hover { background: rgba(255,255,255,.08); }
  .nav__links a:not(.nav__support)::after { display: none; }
}

/* ============================================================
   Art-direction pass (v3): editorial section index, the dark map
   reframed as a navy jewel, tactile detail. Brand-locked.
   ============================================================ */
:root { --light-blue: #33437e; --section-y: clamp(3rem, 6.5vw, 5.5rem); }
:root[data-theme="dark"] { --light-blue: #8ea0f6; }

/* data-grade numerals wherever figures appear (tabular + slashed zero) */
.stat dd, .card__dist, .panel__count, .ms__n, .ms__count,
.map-detail__row {
  font-variant-numeric: tabular-nums slashed-zero;
  font-feature-settings: "tnum" 1, "zero" 1;
}

/* one breathing rhythm for the editorial sections */
.about__inner, .support__inner, .contribute__inner { padding-top: var(--section-y); padding-bottom: var(--section-y); }
.about__lead, .support__lede { margin-bottom: var(--sp-6); }

/* (section-level index removed: it clashed with the per-column 01/02/03 numbering) */

/* The map sits clean: no coloured frame, just a hairline-bordered panel. */
.map-wrap { background: transparent; padding: 0; box-shadow: none; }
.map-wrap #map { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
@media (min-width: 981px) { .map-wrap #map { height: calc(100vh - 210px); } }
.map-wrap .map-note { color: var(--ink-3); padding: 9px 2px 1px; margin: 0; }

/* TACTILE: card hover foreshadows the active accent (hairline wipe) */
.card::before {
  content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; width: 2px;
  background: var(--clay); border-radius: 2px;
  transform: scaleY(0); transform-origin: top center; opacity: 0;
  transition: transform var(--dur-slow) var(--ease-out), opacity var(--dur) var(--ease);
}
.card:hover::before { transform: scaleY(1); opacity: 1; }
.card:hover { transform: translateY(-1px); }
.card.is-active::before { background: var(--green); transform: scaleY(1); opacity: 1; }

/* DETAIL: branded focus halo on the surfaces users touch */
.card:focus-visible, .chip:focus-visible, .ms__btn:focus-visible,
.hero__btn:focus-visible, .nearme:focus-visible, .token__x:focus-visible {
  outline: 2px solid var(--clay); outline-offset: 3px; box-shadow: 0 0 0 5px var(--green-tint);
}

/* DETAIL: azure register tick at the first editorial column (print register mark) */
.about__cols:not(.types-cols) .about__col:first-child, .support__col:first-child { position: relative; }
.about__cols:not(.types-cols) .about__col:first-child::after, .support__col:first-child::after {
  content: ""; position: absolute; top: -3px; left: 0; width: 9px; height: 9px;
  border-left: 1.5px solid var(--clay); border-top: 1.5px solid var(--clay); pointer-events: none;
}
[dir=rtl] .about__cols:not(.types-cols) .about__col:first-child::after,
[dir=rtl] .support__col:first-child::after { left: auto; right: 0; border-left: 0; border-right: 1.5px solid var(--clay); }

/* ============================================================
   ACCESSIBILITY TOOLBAR
   A popover next to the theme + language controls that lets each
   visitor tune the page: text size, high contrast, a readable
   font, looser text spacing, reduced motion, underlined links.
   Settings are applied as data-a11y-* attributes on <html> and
   persisted in localStorage (see assets/js/a11y.js).
   ============================================================ */
.a11y { position: relative; display: inline-flex; }
.a11y-toggle {
  display: grid; place-items: center; width: 34px; height: 34px; padding: 0;
  border: 1px solid var(--line-strong); border-radius: 999px;
  background: var(--paper-2); color: var(--ink-2); cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.a11y-toggle:hover { color: var(--ink); border-color: var(--clay); }
.a11y-toggle[aria-expanded="true"] { color: var(--clay); border-color: var(--clay); }
.a11y-toggle svg { width: 19px; height: 19px; display: block; }

.a11y-panel {
  position: absolute; top: calc(100% + 10px); inset-inline-end: 0;
  width: 300px; max-width: calc(100vw - 24px);
  background: var(--paper-2); color: var(--ink);
  border: 1px solid var(--line-strong); border-radius: 10px;
  box-shadow: var(--shadow-lg); padding: 14px 16px 16px; z-index: 1200;
}
.a11y-panel[hidden] { display: none; }
.a11y-panel__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.a11y-panel__title { font-family: var(--serif); font-size: .95rem; font-weight: 600; margin: 0; color: var(--ink); }
.a11y-panel__close { display: grid; place-items: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 6px; background: none; color: var(--ink-2); cursor: pointer; }
.a11y-panel__close:hover { background: var(--paper-3); color: var(--ink); }
.a11y-panel__close svg { width: 15px; height: 15px; }
.a11y-sep { height: 1px; background: var(--line); border: 0; margin: 8px 0; }

.a11y-size { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 4px 0 2px; }
.a11y-size__label { color: var(--ink); font-size: .9rem; }
.a11y-size__ctrl { display: inline-flex; align-items: center; gap: 8px; }
.a11y-step {
  width: 30px; height: 30px; display: grid; place-items: center;
  border: 1px solid var(--line-strong); border-radius: var(--radius-sm);
  background: var(--paper-2); color: var(--ink); cursor: pointer; font-size: 1rem; line-height: 1;
}
.a11y-step:hover { border-color: var(--clay); color: var(--clay); }
.a11y-step:disabled { opacity: .4; cursor: default; }
.a11y-size__val { min-width: 46px; text-align: center; font-variant-numeric: tabular-nums; color: var(--ink-2); font-size: .85rem; }

.a11y-opt {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; background: none; border: 0; padding: 9px 2px; cursor: pointer;
  color: var(--ink); font: inherit; font-size: .9rem; text-align: start;
}
.a11y-opt:hover .a11y-switch { border-color: var(--clay); }
.a11y-switch {
  flex: none; width: 38px; height: 22px; border-radius: 999px; position: relative;
  border: 1px solid var(--line-strong); background: var(--paper-3);
  transition: background .18s ease, border-color .18s ease;
}
.a11y-switch::after {
  content: ""; position: absolute; top: 2px; inset-inline-start: 2px; width: 16px; height: 16px;
  border-radius: 50%; background: var(--ink-2); transition: transform .18s ease, background .18s ease;
}
.a11y-opt[aria-checked="true"] .a11y-switch { background: var(--clay); border-color: var(--clay); }
.a11y-opt[aria-checked="true"] .a11y-switch::after { transform: translateX(16px); background: #fff; }
[dir=rtl] .a11y-opt[aria-checked="true"] .a11y-switch::after { transform: translateX(-16px); }

.a11y-reset { margin-top: 10px; background: none; border: 0; color: var(--clay); cursor: pointer; font: inherit; font-size: .85rem; padding: 4px 2px; text-decoration: underline; text-underline-offset: 2px; }
.a11y-reset:hover { color: var(--ink); }

/* Below the nav's hamburger breakpoint the panel opens inside the mobile
   menu, so anchor it as a fixed full-width sheet. */
@media (max-width: 620px) {
  .a11y-panel { position: fixed; top: 66px; inset-inline: 12px; width: auto; max-width: none; max-height: calc(100vh - 84px); overflow-y: auto; }
  .theme-toggle, .a11y-toggle { width: 40px; height: 40px; }
  .theme-toggle svg, .a11y-toggle svg { width: 21px; height: 21px; }
  .a11y-step { width: 36px; height: 36px; }
  .a11y-panel__close { width: 34px; height: 34px; }
  .map-detail__close { width: 36px; height: 36px; }
}

/* ---- The actual accessibility effects, toggled on <html> ---- */

/* Text size is driven by html{font-size} set inline by a11y.js (rem scale). */

/* High contrast: collapse the muted greys onto full ink, strengthen lines,
   and force link underlines so meaning never rests on colour alone. */
:root[data-a11y-contrast="on"] { --ink-2: var(--ink); --ink-3: var(--ink); --line: #2a3a52; --line-strong: #16263c; }
:root[data-a11y-contrast="on"][data-theme="dark"] { --line: #9fb3cd; --line-strong: #c5d6ea; }
:root[data-a11y-contrast="on"] a:not(.brand):not(.hero__btn):not(.btn-primary):not(.a11y-toggle) { text-decoration: underline; text-underline-offset: 2px; }
:root[data-a11y-contrast="on"] :focus-visible { outline-width: 3px; }

/* Readable font: Atkinson Hyperlegible (lazy-loaded by a11y.js when enabled),
   falling back to the most legible system faces. */
:root[data-a11y-font="on"] { --sans: "Atkinson Hyperlegible", Verdana, Tahoma, system-ui, sans-serif; --serif: "Atkinson Hyperlegible", Verdana, Tahoma, system-ui, sans-serif; }
:root[data-a11y-font="on"] body { letter-spacing: .01em; }

/* Looser text spacing (WCAG 1.4.12 friendly). */
:root[data-a11y-spacing="on"] body { letter-spacing: .08em; word-spacing: .14em; }
:root[data-a11y-spacing="on"] p, :root[data-a11y-spacing="on"] li,
:root[data-a11y-spacing="on"] dd, :root[data-a11y-spacing="on"] dt,
:root[data-a11y-spacing="on"] .card p, :root[data-a11y-spacing="on"] .about__col p { line-height: 1.85 !important; }
:root[data-a11y-spacing="on"] p { margin-bottom: 1.4em; }

/* Reduce motion: mirror the prefers-reduced-motion behaviour on demand. */
:root[data-a11y-motion="off"] *,
:root[data-a11y-motion="off"] *::before,
:root[data-a11y-motion="off"] *::after {
  animation-duration: .001ms !important; animation-iteration-count: 1 !important;
  transition-duration: .001ms !important; scroll-behavior: auto !important;
}

/* Underline links: distinguish links without relying on colour. */
:root[data-a11y-links="on"] a:not(.brand):not(.hero__btn):not(.btn-primary):not(.a11y-toggle) { text-decoration: underline !important; text-underline-offset: 2px; }

/* ============================================================
   Legal pages (Privacy Policy + Legal notice)
   ============================================================ */
.legal-page { padding: clamp(3rem, 6vw, 5rem) 0; }
.legal-page__inner { max-width: 760px; margin: 0 auto; padding: 0 24px; }
.legal__title { font-size: clamp(1.9rem, 3.4vw, 2.6rem); letter-spacing: -0.02em; margin: 0 0 8px; }
.legal__updated { color: var(--ink-3); font-size: 0.85rem; margin: 0 0 26px; }
.legal__intro { color: var(--ink-2); font-size: 1.05rem; line-height: 1.7; margin: 0 0 30px; max-width: 68ch; }
.legal__section { margin: 0 0 26px; }
.legal__section h2 { font-size: 1.15rem; letter-spacing: -0.01em; margin: 0 0 10px; }
.legal__section p { color: var(--ink-2); line-height: 1.7; margin: 0 0 10px; max-width: 68ch; }
.legal__section ul { margin: 6px 0 0; padding-inline-start: 1.2em; color: var(--ink-2); line-height: 1.7; }
.legal__section li { margin: 0 0 8px; max-width: 66ch; }
.legal__section a { color: var(--clay); text-decoration: underline; text-underline-offset: 2px; }


/* ---- Responsive polish: compact map legend + tap targets (phone/tablet) ---- */
@media (max-width: 980px) {
  .map-legend { left: 10px; bottom: 10px; padding: 7px 9px; gap: 4px; max-width: 46vw; }
  .map-legend .lg { font-size: 0.625rem; gap: 6px; }
  .map-legend .lg b { width: 8px; height: 8px; }
  [dir=rtl] .map-legend { right: 10px; left: auto; }
}
@media (max-width: 560px) {
  .map-legend { left: 8px; bottom: 8px; padding: 6px 8px; gap: 3px; max-width: 62vw; max-height: 42%; overflow-y: auto; border-radius: var(--radius-sm); }
  .map-legend .lg { font-size: 0.625rem; }
  .map-legend .lg b { width: 7px; height: 7px; }
  [dir=rtl] .map-legend { right: 8px; left: auto; }
  .theme-toggle, .a11y-toggle { width: 40px; height: 40px; }
  .a11y-step { width: 36px; height: 36px; }
}


/* ============================================================
   TYPE PASS v2: heavier, more assertive (Manrope kept)
   ============================================================ */
body { font-weight: 500; }
h1, h2, h3, .hero__title, .form-title { font-weight: 800; }
.card__name { font-weight: 700; }

/* ============================================================
   NAVBAR v2: single editorial row (brand + uppercase links +
   theme/language controls aligned to the right)
   ============================================================ */
.nav__inner { padding: 13px 24px; }
.nav__tools { gap: 10px; }
.nav__tools .theme-toggle { width: 32px; height: 32px; }
.nav__tools .theme-toggle svg { width: 17px; height: 17px; }
.nav__tools .select-wrap--lang select { padding: 6px 28px 6px 10px; font-size: 0.8125rem; }
.brand__name { font-weight: 800; font-size: 1.21875rem; letter-spacing: -0.015em; }
.nav__links { gap: 22px; }
.nav__links a { font-size: 0.75rem; font-weight: 700; letter-spacing: .09em; text-transform: uppercase; color: #ffffff; }
.nav__links a:hover { color: #9db2ff; }
.nav__links a.is-current { color: #9db2ff; }

/* ============================================================
   ACCOMPANIMENT HUB (structures / diagnostic / outils)
   ============================================================ */
.hubhero { border-bottom: 1px solid var(--line); background: var(--paper-2); }
.hubhero__inner { max-width: var(--maxw); margin: 0 auto; padding: clamp(3rem, 7vw, 5.25rem) 24px; }
.hubhero__inner h1 { font-size: clamp(1.9rem, 4.2vw, 3.2rem); letter-spacing: -0.02em; line-height: 1.08; max-width: 26ch; margin: 12px 0 16px; }
.hubhero__lede { color: var(--ink-2); font-size: 1.07rem; max-width: 64ch; margin: 0 0 26px; }
.hubhero__cta { display: flex; gap: 12px; flex-wrap: wrap; }
.hub-eyebrow { margin: 0; font-size: .8125rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--green-2); }
.hub-eyebrow::before { content: ""; display: inline-block; width: 28px; height: 2px; background: var(--green-2); vertical-align: middle; margin-right: 10px; border-radius: 2px; }
[dir=rtl] .hub-eyebrow::before { margin-right: 0; margin-left: 10px; }
.btn-solid { display: inline-block; background: var(--green-2); color: #fff; font-weight: 700; padding: 13px 22px; border-radius: var(--radius-sm); border: 0; cursor: pointer; font-family: inherit; font-size: .95rem; }
.btn-solid:hover { background: var(--green); color: #fff; }
:root[data-theme="dark"] .btn-solid { color: #0e1947; }
:root[data-theme="dark"] .btn-solid:hover { color: #0e1947; background: var(--green-2); opacity: .9; }
.btn-solid[disabled] { opacity: .45; cursor: default; }
.btn-ghost { display: inline-block; border: 1px solid var(--line-strong); color: var(--ink); font-weight: 600; padding: 12px 20px; border-radius: var(--radius-sm); background: transparent; cursor: pointer; font-family: inherit; font-size: .95rem; }
.btn-ghost:hover { border-color: var(--green-2); color: var(--green-2); }
.hub-section { max-width: var(--maxw); margin: 0 auto; padding: clamp(2.5rem, 6vw, 4.25rem) 24px; }
.hub-section > h2 { font-size: 1.35rem; margin: 0 0 22px; }
.pillars { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); }
.pillar { background: var(--paper-2); padding: 26px 24px 28px; display: flex; flex-direction: column; gap: 10px; }
.pillar__num { font-size: .75rem; font-weight: 800; letter-spacing: .12em; color: var(--green-2); }
.pillar h3 { margin: 0; font-size: 1.05rem; }
.pillar p { margin: 0; color: var(--ink-2); font-size: .92rem; line-height: 1.55; flex: 1; }
.pillar a { font-weight: 700; font-size: .85rem; color: var(--green-2); }
@media (max-width: 980px) { .pillars { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 620px) { .pillars { grid-template-columns: 1fr; } }
.hub-band { background: var(--paper-3); border-block: 1px solid var(--line); }
.hub-band__inner { max-width: var(--maxw); margin: 0 auto; padding: 36px 24px; }
.hub-band__inner h2 { font-size: 1.2rem; margin: 0 0 8px; }
.hub-band__inner p { margin: 0; color: var(--ink-2); max-width: 76ch; line-height: 1.65; }

/* diagnostic quiz */
.diag-dim { border: 1px solid var(--line); background: var(--paper-2); padding: 20px 22px 6px; margin-bottom: 16px; }
.diag-dim > h2 { font-size: 1.08rem; margin: 0 0 2px; }
.diag-dim__intro { color: var(--ink-3); font-size: .875rem; margin: 0 0 6px; }
.diag-q { border: 0; border-top: 1px solid var(--line); padding: 14px 0 18px; margin: 12px 0 0; }
.diag-q legend { font-weight: 700; font-size: .97rem; padding-top: 14px; }
.diag-help { color: var(--ink-3); font-size: .84rem; margin: 5px 0 12px; }
.diag-scale { display: flex; gap: 8px; flex-wrap: wrap; }
.diag-opt { position: relative; }
.diag-opt input { position: absolute; opacity: 0; inset: 0; }
.diag-opt span { display: inline-block; border: 1px solid var(--line-strong); border-radius: 999px; padding: 8px 15px; font-size: .85rem; font-weight: 600; color: var(--ink-2); cursor: pointer; transition: background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease); }
.diag-opt input:checked + span { background: var(--green-2); border-color: var(--green-2); color: #fff; }
:root[data-theme="dark"] .diag-opt input:checked + span { color: #0e1947; }
.diag-opt input:focus-visible + span { outline: 2px solid var(--focus); outline-offset: 2px; }
.diag-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin: 22px 0 8px; }
.diag-progress { color: var(--ink-3); font-size: .9rem; font-variant-numeric: tabular-nums; }
.diag-results { border: 1px solid var(--line-strong); background: var(--paper-2); padding: 26px; margin-top: 26px; }
.diag-results h2 { margin-top: 0; }
.diag-level { font-size: 1.55rem; font-weight: 800; color: var(--green-2); margin: 2px 0 6px; }
.diag-level-meaning { color: var(--ink-2); margin: 0 0 20px; max-width: 70ch; }
.diag-bars { display: grid; gap: 10px; margin: 0 0 24px; }
.diag-bar { display: grid; grid-template-columns: minmax(130px, 240px) 1fr 52px; gap: 12px; align-items: center; font-size: .9rem; }
.diag-bar__track { height: 8px; background: var(--paper-3); border-radius: 999px; overflow: hidden; }
.diag-bar__fill { display: block; height: 100%; background: var(--green-2); border-radius: 999px; }
.diag-bar__val { text-align: right; font-variant-numeric: tabular-nums; color: var(--ink-2); }
.diag-prio { margin: 0 0 24px; padding: 0 0 0 22px; }
.diag-prio li { margin: 0 0 10px; line-height: 1.55; }
details.diag-rec { border-top: 1px solid var(--line); padding: 12px 0; }
details.diag-rec summary { cursor: pointer; font-weight: 700; font-size: .95rem; }
details.diag-rec ul { margin: 10px 0 6px; padding-left: 20px; color: var(--ink-2); }
details.diag-rec li { margin-bottom: 7px; line-height: 1.55; }
details.diag-rec .diag-theme-link { font-weight: 700; font-size: .85rem; color: var(--green-2); }
@media (max-width: 560px) { .diag-bar { grid-template-columns: 1fr; gap: 5px; } .diag-bar__val { text-align: left; } }

/* toolkit */
.tk-theme { margin-bottom: 36px; }
.tk-theme > h2 { font-size: 1.12rem; display: inline-block; border-bottom: 2px solid var(--green-2); padding-bottom: 6px; margin: 0 0 16px; }
.tk-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
@media (max-width: 980px) { .tk-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 620px) { .tk-grid { grid-template-columns: 1fr; } }
.tk-card { border: 1px solid var(--line); background: var(--paper-2); padding: 18px; display: flex; flex-direction: column; gap: 9px; }
.tk-type { align-self: flex-start; font-size: .65625rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--line-strong); color: var(--ink-2); }
.tk-type--guide { background: var(--green-tint); color: var(--green-ink); border-color: transparent; }
.tk-card h3 { margin: 0; font-size: .99rem; }
.tk-card > p { margin: 0; color: var(--ink-2); font-size: .875rem; line-height: 1.55; flex: 1; }
.tk-card details { border-top: 1px solid var(--line); padding-top: 9px; font-size: .85rem; }
.tk-card summary { cursor: pointer; font-weight: 600; color: var(--ink-2); }
.tk-card ul { margin: 8px 0 0; padding-left: 18px; color: var(--ink-2); }
.tk-card ul li { margin-bottom: 4px; }
.tk-readlink { font-weight: 700; font-size: .85rem; color: var(--green-2); }
.tk-guides { border-top: 1px solid var(--line-strong); margin-top: 10px; }
.tk-guides > h2 { font-size: 1.3rem; margin: 30px 0 6px; }
.tk-guide { border-top: 1px solid var(--line); padding: 26px 0 8px; max-width: 72ch; }
.tk-guide h3 { font-size: 1.25rem; margin: 0 0 12px; }
.tk-guide h4 { font-size: 1rem; margin: 20px 0 6px; }
.tk-guide p { color: var(--ink-2); line-height: 1.7; margin: 0 0 12px; }

/* ============================================================
   Lighter pass: fewer decorative lines; audience-clear nav.
   ============================================================ */
/* Drop the decorative eyebrow ticks and accent rule */
.hero__eyebrow::before, .support__eyebrow::before, .hub-eyebrow::before { content: none; margin: 0; }
.contribute__rule { display: none; }
/* Remove the dot next to "Support us" */
.nav__links a.nav__support::before { content: none; display: none; }
.nav__links a.nav__support { gap: 0; }

/* "For organisations": a distinct gateway pill (different door, different audience) */
.nav__links .nav__cta { margin-left: auto; display: inline-flex; align-items: center; padding: 7px 15px;
  border: 1px solid var(--green); border-radius: 999px; color: var(--green); font-weight: 700;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease); }
.nav__links .nav__cta::after { display: none; }
.nav__links .nav__cta:hover, .nav__links .nav__cta.is-current { background: var(--green); color: var(--paper-2); }

/* Structures sub-nav: a tinted band (no rule) that signals the space + its tabs */
.subnav { background: var(--paper-3); }
.subnav__inner { max-width: var(--maxw); margin: 0 auto; padding: 11px 24px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 22px; }
.subnav__label { font-size: .7rem; text-transform: uppercase; letter-spacing: .09em; font-weight: 800; color: var(--green-2); }
.subnav a { font-size: .9rem; color: var(--ink-2); font-weight: 600; }
.subnav a:hover { color: var(--ink); }
.subnav a.is-current { color: var(--green); }
@media (max-width: 760px) {
  .nav__links .nav__cta { margin-left: 0; }
  .subnav__inner { gap: 7px 16px; padding: 10px 20px; }
}


/* ============================================================
   Structures space: open editorial layout (no filled blue boxes)
   ============================================================ */
.hubhero { background: none; border-bottom: 0; }

/* Pillars: a numbered grid separated by a single hairline, not cards */
.pillars { background: none; border: 0; gap: 0 46px; }
.pillar { background: none; padding: 22px 0 26px; border-top: 1px solid var(--line); }
.pillar__num { font-size: .8rem; }

/* "Why it is free" band: a plain statement on the page, no tinted box */
.hub-band { background: none; border-block: 0; border-top: 1px solid var(--line); }
.hub-band__inner { padding: clamp(2.25rem, 5vw, 3.25rem) 24px; }
.hub-band__inner h2 { font-size: 1.45rem; }
.hub-band__inner p { font-size: 1.02rem; }

/* Toolkit: open cards with a hairline instead of a border + fill */
.tk-grid { gap: 0 30px; }
.tk-card { background: none; border: 0; padding: 18px 0 22px; border-top: 1px solid var(--line); }
.tk-card details { border-top: 0; padding-top: 4px; }

/* Diagnostic: open dimensions and results, no panel fills */
.diag-dim { background: none; border: 0; padding: 0; }
.diag-results { background: none; border: 0; border-top: 2px solid var(--green-2); padding: 24px 0 0; }


/* Toolkit downloads: a clear branded download control on each resource */
.tk-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; margin-top: 2px; }
.tk-download { display: inline-flex; align-items: center; gap: 7px; font-weight: 700; font-size: .82rem;
  color: var(--green-2); border: 1px solid var(--line-strong); border-radius: 999px; padding: 6px 13px;
  transition: background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease); }
.tk-download:hover { background: var(--green-2); color: var(--paper-2); border-color: var(--green-2); }
.tk-download svg { width: 14px; height: 14px; flex: none; }
.tk-guide .tk-download { margin: 2px 0 16px; }

/* ============================================================
   Homepage: the association section (open editorial layout)
   ============================================================ */
.assoc { border-top: 1px solid var(--line); background: var(--paper); }
.assoc__inner { max-width: var(--maxw); margin: 0 auto; padding: var(--section-y) 24px;
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr); gap: clamp(2rem, 5vw, 4.5rem); align-items: start; }
.assoc__eyebrow { margin: 0 0 14px; font-size: .8125rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--green-2); }
.assoc__lead h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); letter-spacing: -.02em; line-height: 1.12; margin: 0 0 18px; max-width: 18ch; }
.assoc__lede { color: var(--ink-2); font-size: 0.96rem; line-height: 1.6; margin: 0 0 16px; max-width: 62ch; }
.assoc__note { color: var(--ink); font-weight: 600; font-size: 0.96rem; line-height: 1.55; margin: 0; }
.assoc__prog-label { margin: 0 0 7px; font-size: .8125rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--green-2); }
.assoc__prog-lede { color: var(--ink-2); font-size: .98rem; line-height: 1.6; margin: 0 0 6px; max-width: 56ch; }
.assoc__grid { display: grid; gap: 0; }
.prog { padding: 20px 0 18px; border-top: 1px solid var(--line); }
.prog__name { margin: 0 0 6px; font-size: 1.05rem; color: var(--green-2); font-weight: 800; letter-spacing: -.01em; }
.prog p { margin: 0; color: var(--ink-2); font-size: .94rem; line-height: 1.6; }
@media (max-width: 900px) {
  .assoc__inner { grid-template-columns: 1fr; gap: 2.25rem; }
  .assoc__lead h2 { max-width: none; }
}

/* ============================================================
   Espace structures: pricing + access (login) + alert banner
   ============================================================ */
.struct-alert { max-width: var(--maxw); margin: 18px auto 0; padding: 13px 18px; border-radius: var(--radius-sm); font-weight: 600; font-size: .95rem; line-height: 1.45; }
.struct-alert--locked { background: var(--green-tint); color: var(--green-ink); border: 1px solid var(--line-strong); }
.struct-alert--error { background: #fdecec; color: #8a1c1c; border: 1px solid #f1c4c4; }
[data-theme="dark"] .struct-alert--error { background: rgba(220,90,90,.16); color: #ffb7b7; border-color: rgba(220,90,90,.4); }

.pricing > h2 { margin: 10px 0 8px; }
.pricing > .hubhero__lede { max-width: 64ch; }
.price-grid { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; margin: 28px 0 30px; align-items: stretch; }
.price { border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-2); padding: 26px 24px; display: flex; flex-direction: column; gap: 5px; position: relative; }
.price--feature { border-color: var(--green-2); box-shadow: inset 0 0 0 1px var(--green-2); }
.price__badge { position: absolute; top: -11px; left: 24px; background: var(--green-2); color: var(--paper-2); font-size: .68rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; padding: 4px 11px; border-radius: 999px; }
.price__name { margin: 0; font-size: 1.1rem; }
.price__band { margin: 0; color: var(--ink-3); font-size: .85rem; min-height: 2.6em; }
.price__amount { margin: 10px 0 18px; font-size: 2.15rem; font-weight: 800; color: var(--ink); letter-spacing: -.02em; line-height: 1; }
.price__per { font-size: .9rem; font-weight: 600; color: var(--ink-3); margin-left: 5px; letter-spacing: 0; }
.price__btn { margin-top: auto; text-align: center; }
.price-includes { border-top: 1px solid var(--line); padding-top: 24px; max-width: 64ch; }
.price-includes h3 { margin: 0 0 14px; font-size: 1.02rem; }
.price-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 11px; }
.price-list li { position: relative; padding-left: 28px; color: var(--ink-2); line-height: 1.5; }
.price-list li::before { content: ""; position: absolute; left: 2px; top: 4px; width: 13px; height: 8px; border-left: 2px solid var(--green-2); border-bottom: 2px solid var(--green-2); transform: rotate(-45deg); }
.price-tax { margin: 22px 0 0; font-size: .82rem; color: var(--ink-3); max-width: 74ch; line-height: 1.55; }

.login > h2 { margin: 0 0 8px; }
.struct-login { margin-top: 18px; max-width: 460px; }
.struct-login label { display: block; font-weight: 600; font-size: .9rem; margin-bottom: 8px; color: var(--ink); }
.struct-login__row { display: flex; gap: 10px; flex-wrap: wrap; }
.struct-login input[type=text] { flex: 1 1 200px; min-width: 0; padding: 12px 14px; border: 1px solid var(--line-strong); border-radius: var(--radius-sm); background: var(--paper-2); color: var(--ink); font: inherit; }
.struct-login input[type=text]:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; border-color: var(--green-2); }
@media (max-width: 760px) { .price-grid { grid-template-columns: 1fr; } }

/* Phone: List / Map view tabs (keeps geographic search out of the way) */
.explore__tabs { display: none; }
@media (max-width: 760px) {
  .explore__tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; margin: 0 0 16px; padding: 5px; background: var(--paper-3); border-radius: 999px; }
  .explore__tab { border: 0; background: transparent; color: var(--ink-2); font: inherit; font-weight: 700; font-size: .92rem; padding: 10px 12px; border-radius: 999px; cursor: pointer; transition: background var(--dur) var(--ease), color var(--dur) var(--ease); }
  .explore__tab.is-active { background: var(--paper); color: var(--green); box-shadow: var(--shadow-xs); }
  .explore__tab:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
  .explore__grid > .map-wrap { order: 0; }
  .explore__grid[data-view="list"] > .map-wrap { display: none; }
  .explore__grid[data-view="map"] > .panel { display: none; }
  .explore__grid[data-view="map"] #map { height: 68dvh; min-height: 360px; }
}

/* BLOC 1: pop-up de langue (1ere visite) + bandeau de confidentialite RGPD */
.onb-open { overflow: hidden; }
.onb-overlay { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1.25rem; background: rgba(14, 25, 71, .45); }
.onb-card { background: var(--paper); color: var(--ink); max-width: 540px; width: 100%; border-radius: 14px; padding: 1.6rem 1.6rem 1.8rem; box-shadow: 0 16px 48px rgba(14, 25, 71, .28); }
.onb-title { margin: 0 0 .35rem; font-size: 1.3rem; }
.onb-hint { margin: 0 0 1rem; color: var(--ink-3); font-size: .92rem; }
.onb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: .5rem; max-height: 52vh; overflow: auto; }
.onb-lang { appearance: none; -webkit-appearance: none; border: 1px solid var(--line, #d8deec); background: transparent; color: var(--ink); border-radius: 9px; padding: .6rem .7rem; font: inherit; cursor: pointer; text-align: left; }
.onb-lang:hover { border-color: var(--green-2); color: var(--green-2); }
.onb-lang.is-current { border-color: var(--green-2); background: rgba(42, 69, 224, .07); font-weight: 600; }
.onb-lang:focus-visible { outline: 2px solid var(--focus, var(--green-2)); outline-offset: 2px; }
.onb-consent { position: fixed; left: 0; right: 0; bottom: 0; z-index: 990; background: var(--paper); border-top: 1px solid var(--line, #d8deec); box-shadow: 0 -6px 24px rgba(14, 25, 71, .12); }
.onb-consent__inner { max-width: 1100px; margin: 0 auto; padding: .9rem 1.2rem; display: flex; gap: 1rem; align-items: center; justify-content: space-between; flex-wrap: wrap; }
.onb-consent__text { margin: 0; font-size: .88rem; color: var(--ink-2); max-width: 82ch; }
.onb-consent__ok { appearance: none; -webkit-appearance: none; border: none; background: var(--green-2); color: #fff; border-radius: 8px; padding: .55rem 1.15rem; font: inherit; font-weight: 600; cursor: pointer; white-space: nowrap; }
.onb-consent__ok:hover { filter: brightness(1.06); }
.onb-consent__ok:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
[dir="rtl"] .onb-lang { text-align: right; }

/* ============================================================
   Vue tableau dynamique (tableau.html / table.js) - BLOC 3 / P1
   Sobre paper/ink: pas de gradient, en-tete colle, scroll horizontal
   contenu, chips discrets. Theme clair et sombre via variables.
   ============================================================ */
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.tbl-page { padding: 30px 0 60px; }
.tbl-page__inner { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.tbl-head { margin-bottom: 20px; }
.tbl-sync { margin: 8px 0 0; font-size: 0.78125rem; color: var(--ink-3); }

.tbl-controls {
  display: flex; flex-wrap: wrap; gap: 14px 18px; align-items: flex-end;
  margin-bottom: 16px; padding: 16px; border: 1px solid var(--line);
  border-radius: var(--radius); background: var(--paper-2);
}
.tbl-controls__search { display: flex; flex-direction: column; gap: 6px; flex: 1 1 240px; }
.tbl-controls__lbl { font-size: 0.78125rem; font-weight: 600; color: var(--ink-2); }
.tbl-controls__search input {
  width: 100%; padding: 9px 12px; border: 1px solid var(--line);
  border-radius: var(--radius-sm); background: var(--paper); color: var(--ink);
  font: inherit; font-size: 0.875rem;
}
.tbl-controls__search input:focus { outline: 2px solid var(--green-2); outline-offset: 1px; border-color: transparent; }
.tbl-controls__filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.tbl__btn {
  appearance: none; -webkit-appearance: none; border: 1px solid transparent;
  background: var(--green); color: var(--paper); border-radius: var(--radius-sm);
  padding: 9px 15px; font: inherit; font-size: 0.8125rem; font-weight: 600; cursor: pointer;
  transition: background var(--dur) var(--ease);
}
.tbl__btn:hover { background: var(--green-2); }
.tbl__btn--ghost { background: transparent; color: var(--ink-2); border-color: var(--line); }
.tbl__btn--ghost:hover { background: var(--green-tint); color: var(--green-ink); }
.tbl__btn:focus-visible { outline: 2px solid var(--green-2); outline-offset: 2px; }

.tbl-count { font-size: 0.8125rem; color: var(--ink-2); margin: 0 0 10px; }

.tbl-scroll {
  overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--paper); -webkit-overflow-scrolling: touch;
}
.tbl { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }
.tbl caption { text-align: left; }
.tbl thead th {
  position: sticky; top: 0; z-index: 2; background: var(--paper-2);
  text-align: left; white-space: nowrap; border-bottom: 2px solid var(--line);
  padding: 0; vertical-align: bottom;
}
.tbl__sort {
  display: inline-flex; align-items: center; gap: 4px; width: 100%;
  background: none; border: 0; font: inherit; font-weight: 700; color: var(--ink);
  padding: 11px 12px; cursor: pointer; text-align: left;
}
.tbl__sort:hover { color: var(--green-2); }
.tbl__sort.is-active { color: var(--green-2); }
.tbl__sort:focus-visible { outline: 2px solid var(--green-2); outline-offset: -2px; }
.tbl__arrow { font-size: 0.75rem; }
.tbl tbody th, .tbl tbody td {
  padding: 10px 12px; border-bottom: 1px solid var(--line); vertical-align: top;
  color: var(--ink-2); text-align: left; font-weight: 400;
}
.tbl tbody th.tbl__name { font-weight: 600; color: var(--ink); min-width: 200px; }
.tbl tbody tr:hover td, .tbl tbody tr:hover th { background: var(--green-tint); }
.tbl__chips { min-width: 150px; }
.tbl__chip {
  display: inline-block; background: var(--green-tint); color: var(--green-ink);
  border-radius: 999px; padding: 2px 9px; font-size: 0.71875rem; margin: 1px 0; white-space: nowrap;
}
.tbl__more { color: var(--ink-3); font-size: 0.71875rem; }
.tbl__empty { color: var(--ink-3); }
.tbl__mode { font-weight: 600; }
.tbl__mode--presentiel { color: var(--cat-state, #4EA8DE); }
.tbl__mode--distanciel { color: var(--cat-digital, #3FC7C0); }
.tbl__mode--hybride { color: var(--green-2); }
.tbl td a { color: var(--green-2); text-decoration: underline; text-underline-offset: 2px; }
.tbl__none, .tbl__none { text-align: center; color: var(--ink-3); padding: 30px 12px; }

.tbl-pager { display: flex; align-items: center; justify-content: center; gap: 16px; margin-top: 18px; }
.tbl__pgbtn {
  appearance: none; -webkit-appearance: none; border: 1px solid var(--line);
  background: var(--paper); color: var(--ink-2); border-radius: var(--radius-sm);
  padding: 8px 16px; font: inherit; font-size: 0.8125rem; font-weight: 600; cursor: pointer;
}
.tbl__pgbtn:hover:not([disabled]) { background: var(--green-tint); color: var(--green-ink); }
.tbl__pgbtn[disabled] { opacity: 0.5; cursor: not-allowed; }
.tbl__pginfo { font-size: 0.8125rem; color: var(--ink-2); }

@media (max-width: 640px) {
  .tbl-controls__filters { width: 100%; }
  .tbl-controls__filters .select-wrap { flex: 1 1 140px; }
}

/* ============================================================
   Pages d'orientation locale SEO (local/*.html) - BLOC P1-5
   Statiques, legeres, sobres paper/ink. Reutilisent la coquille de marque.
   ============================================================ */
.loc-page { padding: 30px 0 60px; }
.loc-page__inner { max-width: 760px; margin: 0 auto; padding: 0 24px; }
.loc-crumb { font-size: 0.78125rem; color: var(--ink-3); margin-bottom: 14px; }
.loc-crumb a { color: var(--ink-2); }
.loc-title { font-family: var(--font-display, inherit); font-size: 1.9rem; line-height: 1.15; margin: 0 0 6px; color: var(--ink); letter-spacing: -0.01em; }
.loc-count { font-size: 0.9375rem; font-weight: 600; color: var(--green-2); margin: 0 0 14px; }
.loc-intro { color: var(--ink-2); line-height: 1.6; margin: 0 0 22px; }
.loc-cta { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 30px; }
.loc-btn {
  display: inline-flex; align-items: center; background: var(--green); color: var(--paper) !important;
  padding: 11px 18px; border-radius: var(--radius-sm); font-weight: 600; font-size: 0.875rem;
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.loc-btn:hover { background: var(--green-2); transform: translateY(-1px); }
.loc-btn--ghost { background: transparent; color: var(--ink-2) !important; border: 1px solid var(--line); }
.loc-btn--ghost:hover { background: var(--green-tint); color: var(--green-ink) !important; }
.loc-section { margin-bottom: 30px; }
.loc-h2 { font-size: 1.15rem; margin: 0 0 12px; color: var(--ink); }
.loc-areas { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.loc-areas a {
  display: inline-block; background: var(--green-tint); color: var(--green-ink);
  border-radius: 999px; padding: 5px 13px; font-size: 0.8125rem;
}
.loc-areas a:hover { background: var(--green-2); color: var(--paper); }
.loc-orgs { list-style: none; padding: 0; margin: 0; }
.loc-orgs li { padding: 10px 0; border-bottom: 1px solid var(--line); }
.loc-org__name a { color: var(--green-2); text-decoration: underline; text-underline-offset: 2px; }
.loc-org__type { color: var(--ink-3); font-size: 0.78125rem; margin-left: 6px; }
.loc-more { margin-top: 12px; }
.loc-more a { color: var(--green-2); font-weight: 600; font-size: 0.875rem; }
.loc-note { margin-top: 24px; padding: 12px 14px; border-left: 3px solid var(--line); color: var(--ink-3); font-size: 0.8125rem; line-height: 1.5; }

/* Fiche structure: badge de fraicheur (confiance), langues, signalement. */
.loc-verified { display: inline-flex; align-items: center; gap: 7px; margin: 0 0 18px;
  padding: 5px 11px 5px 9px; border: 1px solid var(--line); border-radius: 999px;
  background: var(--green-tint); color: var(--green-2); font-size: 0.8125rem; font-weight: 600; }
.loc-verified::before { content: ""; width: 14px; height: 14px; flex: none; border-radius: 50%;
  background: var(--green-2);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20 6L9 17l-5-5' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/12px no-repeat;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20 6L9 17l-5-5' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/12px no-repeat; }
.loc-langs { color: var(--ink-2); margin: 0; }
.loc-report { margin: 22px 0 0; font-size: 0.875rem; }
.loc-report a { color: var(--green-2); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }

/* RTL (ar/ur): la vue tableau et les pages locales s'alignent a droite (P2 a11y). */
[dir="rtl"] .tbl thead th,
[dir="rtl"] .tbl__sort,
[dir="rtl"] .tbl tbody th,
[dir="rtl"] .tbl tbody td,
[dir="rtl"] .tbl caption { text-align: right; }
[dir="rtl"] .tbl__sort { flex-direction: row-reverse; }
[dir="rtl"] .tbl__sort:focus-visible { outline-offset: -2px; }
[dir="rtl"] .loc-note { border-left: 0; border-right: 3px solid var(--line); }
[dir="rtl"] .tbl-controls__lbl,
[dir="rtl"] .loc-crumb { text-align: right; }

/* ============================================================
   Design modernization: floating pill controls + fewer hairlines.
   Action buttons become pill-shaped and lift on hover (elevation
   over outline); stray divider lines are removed. Stays in the
   paper/ink editorial direction, no glow.
   ============================================================ */
.nearme, .chip, .filters__reset,
.guide__go, .btn-solid, .btn-ghost,
.hero__btn, .hero__btn--ghost,
.support__btn, .map-detail__open, .map-detail__site {
  border-radius: var(--radius-pill);
}
/* floating: elevation instead of a hard 1px outline */
.nearme, .chip {
  border-color: transparent;
  background: var(--paper);
  box-shadow: var(--shadow-sm);
  transition: box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease),
              color var(--dur) var(--ease), background var(--dur) var(--ease);
}
.nearme:hover, .chip:hover {
  border-color: transparent;
  box-shadow: var(--shadow-md);
  transform: translateY(-1px);
}
.btn-ghost, .hero__btn--ghost { border-color: transparent; box-shadow: var(--shadow-sm); }
.btn-ghost:hover, .hero__btn--ghost:hover { border-color: transparent; box-shadow: var(--shadow-md); }

/* fewer orphan lines: drop stray hairline rules + container outlines */
.hero { border-bottom: 0; }
.stat { border-right: 0; }
.filters, .guide, .hero__stats { border-color: transparent; }

/* softer, book-like wrapping so headings/paragraphs keep no lonely last line */
h1, h2, h3, .hero__title, .map-detail__name { text-wrap: balance; }
.hero__lede, .card__desc, .map-detail__desc, p { text-wrap: pretty; }
