/* ============================================================
   Programme 2027 — feuille de style
   Les couleurs principales sont modifiables ici (variables).
   ============================================================ */
:root {
  --bg: #f7f4ee;
  --surface: #ffffff;
  --ink: #1b1f2a;
  --ink-soft: #545b6b;
  --line: #e3ddd1;
  --accent: #1f3a8a;        /* couleur de campagne */
  --accent-soft: #e6ebf8;
  --accent-2: #c8372d;      /* couleur secondaire */
  --ok: #2f7d4f;
  --warn: #b7791f;
  --radius: 14px;
  --shadow: 0 1px 2px rgba(20,25,40,.06), 0 8px 24px rgba(20,25,40,.06);
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
  --sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #12151c; --surface: #1a1e28; --ink: #ecebe6; --ink-soft: #a5abb8;
    --line: #2b3140; --accent: #8fa8ff; --accent-soft: #232b45; --accent-2: #ff7a6e;
    --shadow: none;
  }
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0; background: var(--bg); color: var(--ink);
  font-family: var(--sans); font-size: 17px; line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
a { color: var(--accent); }
h1, h2, h3 { font-family: var(--serif); line-height: 1.2; font-weight: 600; letter-spacing: -.01em; }
#app { max-width: 1080px; margin: 0 auto; padding: 0 20px 64px; outline: none; }

/* ---------- Barre du haut ---------- */
.topbar {
  position: sticky; top: 0; z-index: 10;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 14px 24px; background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(8px); border-bottom: 1px solid var(--line);
}
.brand { font-family: var(--serif); font-weight: 700; font-size: 1.15rem; color: var(--ink); text-decoration: none; }
.brand::before { content: ""; display: inline-block; width: 10px; height: 10px; border-radius: 50%;
  background: var(--accent-2); margin-right: 10px; vertical-align: middle; }
.topnav a { color: var(--ink-soft); text-decoration: none; margin-left: 18px; font-size: .95rem; }
.topnav a:hover { color: var(--accent); }

/* ---------- Accueil ---------- */
.hero { padding: 64px 0 36px; }
.hero .kicker { text-transform: uppercase; letter-spacing: .14em; font-size: .78rem; color: var(--accent-2); font-weight: 700; }
.hero h1 { font-size: clamp(2.2rem, 5vw, 3.6rem); margin: 10px 0 14px; max-width: 18ch; }
.hero p { font-size: 1.15rem; color: var(--ink-soft); max-width: 60ch; margin: 0; }
.stats { display: flex; gap: 28px; margin-top: 28px; flex-wrap: wrap; }
.stats div { font-size: .9rem; color: var(--ink-soft); }
.stats strong { display: block; font-family: var(--serif); font-size: 1.8rem; color: var(--ink); }

.toolbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 12px 0 28px; }
.search {
  flex: 1 1 260px; padding: 11px 16px; border-radius: 999px; border: 1px solid var(--line);
  background: var(--surface); color: var(--ink); font: inherit; font-size: .95rem;
}
.search:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
.chip {
  border: 1px solid var(--line); background: var(--surface); color: var(--ink-soft);
  padding: 7px 14px; border-radius: 999px; font: inherit; font-size: .88rem; cursor: pointer;
}
.chip:hover { border-color: var(--accent); color: var(--accent); }
.chip.active { background: var(--accent); border-color: var(--accent); color: #fff; }

.theme-block { margin-bottom: 44px; }
.theme-block > h2 { font-size: 1.6rem; margin: 0 0 4px; }
.theme-block > p { color: var(--ink-soft); margin: 0 0 18px; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 16px; }
.card {
  display: flex; flex-direction: column; gap: 10px; padding: 22px;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow); color: inherit; text-decoration: none;
  transition: transform .15s ease, border-color .15s ease;
}
.card:hover { transform: translateY(-2px); border-color: var(--accent); }
.card .num { font-size: .78rem; font-weight: 700; color: var(--accent-2); letter-spacing: .08em; }
.card h3 { margin: 0; font-size: 1.22rem; }
.card p { margin: 0; color: var(--ink-soft); font-size: .95rem; }
.card .meta { margin-top: auto; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; font-size: .8rem; }
.badge { padding: 3px 10px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.badge.brouillon { background: color-mix(in srgb, var(--warn) 16%, transparent); color: var(--warn); }
.badge.source { background: color-mix(in srgb, var(--ok) 16%, transparent); color: var(--ok); }
.more { color: var(--accent); font-weight: 600; margin-left: auto; }
.empty { padding: 40px; text-align: center; color: var(--ink-soft); border: 1px dashed var(--line); border-radius: var(--radius); }

/* ---------- Fiche mesure ---------- */
.back { display: inline-block; margin: 28px 0 8px; color: var(--ink-soft); text-decoration: none; font-size: .92rem; }
.back:hover { color: var(--accent); }
.measure-head { padding: 12px 0 24px; border-bottom: 1px solid var(--line); }
.measure-head .kicker { color: var(--accent-2); font-weight: 700; font-size: .8rem; letter-spacing: .1em; text-transform: uppercase; }
.measure-head h1 { font-size: clamp(1.9rem, 4vw, 2.8rem); margin: 8px 0 12px; }
.measure-head .lead { font-size: 1.15rem; color: var(--ink-soft); max-width: 70ch; margin: 0 0 16px; }
.facts { display: flex; flex-wrap: wrap; gap: 10px; }
.fact { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 8px 14px; font-size: .88rem; }
.fact b { color: var(--ink); }

.tabs { display: flex; gap: 4px; margin: 26px 0 0; border-bottom: 1px solid var(--line); overflow-x: auto; }
.tab {
  border: 0; background: none; padding: 12px 18px; font: inherit; font-weight: 600; font-size: .95rem;
  color: var(--ink-soft); cursor: pointer; border-bottom: 3px solid transparent; white-space: nowrap;
}
.tab:hover { color: var(--ink); }
.tab[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); }
.panel { padding: 28px 0; max-width: 78ch; }
.panel[hidden] { display: none; }

/* contenu markdown */
.prose h3 { font-size: 1.25rem; margin: 1.6em 0 .5em; }
.prose h4 { font-size: 1.05rem; margin: 1.4em 0 .4em; }
.prose p { margin: 0 0 1em; }
.prose ul, .prose ol { padding-left: 1.3em; margin: 0 0 1em; }
.prose li { margin: .3em 0; }
.prose blockquote { margin: 1.2em 0; padding: 12px 18px; border-left: 4px solid var(--accent); background: var(--accent-soft); border-radius: 0 10px 10px 0; }
.prose code { background: var(--accent-soft); padding: 1px 6px; border-radius: 5px; font-size: .9em; }
.prose table { border-collapse: collapse; width: 100%; margin: 1em 0 1.4em; font-size: .93rem; background: var(--surface); }
.prose th, .prose td { border: 1px solid var(--line); padding: 8px 12px; text-align: left; }
.prose th { background: var(--accent-soft); }
.prose sup a { text-decoration: none; font-weight: 700; }
.note-todo { padding: 14px 18px; border-radius: 10px; background: color-mix(in srgb, var(--warn) 12%, transparent); color: var(--ink); }

/* graphiques SVG */
.chart { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px 18px 8px; margin: 1.2em 0 1.6em; }
.chart figcaption { font-weight: 700; margin-bottom: 4px; }
.chart .chart-sub { font-size: .82rem; color: var(--ink-soft); margin-bottom: 6px; }
.chart svg { width: 100%; height: auto; display: block; }
.chart .bar { fill: var(--accent); }
.chart .bar.hl { fill: var(--accent-2); }
.chart text { fill: var(--ink-soft); font-family: var(--sans); font-size: 12px; }
.chart text.val { fill: var(--ink); font-weight: 700; }
.chart .axis { stroke: var(--line); }
.chart .src { font-size: .78rem; color: var(--ink-soft); margin-top: 4px; }

.footer { border-top: 1px solid var(--line); padding: 24px; text-align: center; color: var(--ink-soft); font-size: .85rem; }

@media (max-width: 600px) {
  body { font-size: 16px; }
  .topbar { padding: 12px 16px; }
  #app { padding: 0 16px 48px; }
  .hero { padding-top: 40px; }
}

/* ---------- Bilan budgétaire (accueil) ---------- */
.budget { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: var(--shadow); padding: 24px; margin: 0 0 28px; }
.budget-head h2 { margin: 0 0 4px; font-size: 1.5rem; }
.budget-head p { margin: 0 0 18px; color: var(--ink-soft); font-size: .95rem; max-width: 70ch; }
.budget-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
.tile { border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; }
.tile span { display: block; font-size: .82rem; color: var(--ink-soft); text-transform: uppercase; letter-spacing: .06em; }
.tile strong { font-family: var(--serif); font-size: 1.7rem; }
.tile.ok strong { color: var(--ok); }
.tile.neg strong { color: var(--accent-2); }
.budget-detail { margin-top: 16px; }
.budget-detail summary { cursor: pointer; color: var(--accent); font-weight: 600; font-size: .95rem; }
.budget-detail .chart { border: 0; padding: 12px 0 0; margin: 0; }
.budget .note { font-size: .82rem; color: var(--ink-soft); margin: 8px 0 0; }
.chart .bar.neg { fill: var(--accent-2); }

/* Barre du haut : le menu des thèmes n'apparaît que sur grand écran */
.brand { white-space: nowrap; }
.topnav { display: flex; flex-wrap: nowrap; }
.topnav a { white-space: nowrap; }

/* ---------- Page « Le budget de la France » ---------- */
.budget-link { display: inline-block; margin-top: 16px; font-weight: 700; text-decoration: none; }
.budget-link:hover { text-decoration: underline; }
.years { display: flex; flex-wrap: wrap; gap: 8px; margin: 24px 0 18px; }
.year { padding: 8px 16px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface);
  color: var(--ink-soft); text-decoration: none; font-weight: 700; }
.year:hover { border-color: var(--accent); color: var(--accent); }
.year.active { background: var(--accent); border-color: var(--accent); color: #fff; }
.budget-tiles-annee { margin-bottom: 8px; }
.year-note { color: var(--ink-soft); max-width: 80ch; min-height: 3em; }
.sankey-wrap { overflow-x: auto; background: var(--surface); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 16px; margin: 8px 0 6px; }
.sankey { display: block; width: 100%; min-width: 900px; height: auto; }
.sankey .sk-label { font: 600 12px var(--sans); fill: var(--ink); paint-order: stroke; stroke: var(--surface); stroke-width: 4px; stroke-linejoin: round; }
.sankey .sk-label.out { font-weight: 500; stroke-width: 3px; }
.sankey .sk-val { font-weight: 800; }

/* ---------- Page « Les impôts et taxes » ---------- */
.imp-tiles { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); margin: 24px 0 8px; }
.tile em { display: block; font-style: normal; font-size: .82rem; color: var(--ink-soft); }
.imp-toolbar select { padding: 9px 12px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .9rem; }
.imp-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
.imp-table { width: 100%; min-width: 680px; border-collapse: collapse; font-size: .9rem; }
.imp-table th { position: sticky; top: 0; background: var(--accent-soft); text-align: left; padding: 10px 12px; z-index: 1; }
.imp-table td { padding: 10px 12px; border-top: 1px solid var(--line); vertical-align: top; }
.imp-row { border-left: 5px solid transparent; }
.imp-row.ch-garder td:first-child { box-shadow: inset 5px 0 0 #8a94a6; }
.imp-row.ch-supprimer td:first-child { box-shadow: inset 5px 0 0 #c8372d; }
.imp-row.ch-baisser td:first-child { box-shadow: inset 5px 0 0 #2f7d4f; }
.imp-row.ch-augmenter td:first-child { box-shadow: inset 5px 0 0 #b7791f; }
.imp-row.ch-fusionner td:first-child { box-shadow: inset 5px 0 0 #3a6fd8; }
.imp-row.ch-supprimer .imp-nom strong { text-decoration: line-through; text-decoration-color: #c8372d; }
.imp-num { color: var(--ink-soft); width: 44px; padding-left: 14px !important; }
.imp-nom strong { display: block; font-weight: 600; }
.imp-cat { display: block; font-size: .78rem; color: var(--ink-soft); margin-top: 2px; }
.imp-motif { display: block; font-size: .82rem; color: var(--ink-soft); margin-top: 4px; font-style: italic; }
.imp-rend { white-space: nowrap; width: 120px; }
.imp-prec { display: block; white-space: normal; font-size: .75rem; color: var(--ink-soft); }
.imp-rend .nc { color: var(--ink-soft); }
.imp-choix { width: 210px; }
.imp-choix select, .imp-choix input { width: 100%; padding: 7px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .88rem; }
.imp-choix input { margin-top: 6px; }
.imp-row.modif { background: color-mix(in srgb, var(--warn) 7%, transparent); }

/* ---------- Simulateur budgétaire ---------- */
.imp-ch-lib { font-weight: 600; }
.prog-select { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; margin-top: 14px; font-size: .95rem; }
.prog-select select, .sim-params select, .sim-c-ch select, .sim-c-ch input, .sim-titre, .sim-desc, .sim-pnom {
  padding: 7px 10px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .9rem; }
.prog-select select { font-weight: 700; max-width: 100%; }
.sim-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 4px; }
.sim-actions .chip, .sim-card-actions .chip { text-decoration: none; }
.chip.sim-danger { color: var(--accent-2); }
.sim-import { cursor: pointer; }
.sim-titre { display: block; width: 100%; font-family: var(--serif); font-size: 2rem; font-weight: 600; margin: 6px 0 8px; }
.sim-desc { display: block; width: 100%; resize: vertical; }
.sim-ro { background: var(--accent-soft); padding: 10px 14px; border-radius: 10px; }
.sim-grid { margin: 8px 0 24px; }
.sim-card { display: flex; flex-direction: column; gap: 6px; }
.sim-card h3 { margin: 4px 0; }
.sim-card p { margin: 0; color: var(--ink-soft); font-size: .92rem; }
.sim-card-chiffres { display: flex; gap: 18px; flex-wrap: wrap; font-size: .9rem; }
.sim-card-chiffres strong { display: block; font-family: var(--serif); font-size: 1.3rem; }
.sim-card-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; padding-top: 8px; }
.pos { color: var(--ok); } .neg { color: var(--accent-2); }
.sim-compare { width: 100%; min-width: 620px; border-collapse: collapse; font-size: .9rem; }
.sim-compare th, .sim-compare td { padding: 9px 12px; border-top: 1px solid var(--line); text-align: right; white-space: nowrap; }
.sim-compare th { background: var(--accent-soft); border-top: 0; }
.sim-compare th:first-child, .sim-compare td:first-child { text-align: left; white-space: normal; }
.sim-resultats { margin: 18px 0 8px; }
.sim-tiles { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.sim-tiles .tile strong { font-size: 1.4rem; }
.sim-bloc { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 22px; margin: 20px 0; }
.sim-bloc h2 { margin: 0 0 6px; font-size: 1.35rem; }
.sim-bloc .note { color: var(--ink-soft); font-size: .88rem; margin: 4px 0 12px; max-width: 85ch; }
.sim-params { display: flex; flex-direction: column; gap: 10px; }
.sim-mesures { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.sim-theme { border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px 10px; margin: 0; }
.sim-theme legend { font-weight: 700; padding: 0 6px; }
.sim-mesure { display: grid; grid-template-columns: auto 1fr auto auto; gap: 8px; align-items: baseline; font-size: .9rem; padding: 3px 0; }
.sim-mesure em { font-style: normal; font-size: .82rem; white-space: nowrap; color: var(--ink-soft); }
.sim-mesure em.pos { color: var(--ok); } .sim-mesure em.neg { color: var(--accent-2); }
.sim-mesure a { font-size: .78rem; }
.sim-q { width: 100%; margin-bottom: 10px; }
.sim-arbre { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.sim-row { display: grid; grid-template-columns: minmax(0, 1fr) 110px 250px 130px; gap: 10px; align-items: center;
  padding: 7px 12px; border-top: 1px solid var(--line); font-size: .9rem; }
.sim-row:first-child { border-top: 0; }
.sim-head { background: var(--accent-soft); font-weight: 700; font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; }
.sim-row.niv-0 { background: color-mix(in srgb, var(--accent-soft) 45%, transparent); font-weight: 700; }
.sim-row.niv-1 { font-weight: 600; }
.sim-row.own { box-shadow: inset 4px 0 0 var(--accent); }
.sim-row.own.ch-supprimer, .sim-row.own.ch-privatiser { box-shadow: inset 4px 0 0 #c8372d; }
.sim-row.own.ch-baisser { box-shadow: inset 4px 0 0 #2f7d4f; }
.sim-row.own.ch-augmenter { box-shadow: inset 4px 0 0 #b7791f; }
.sim-row.own.ch-fusionner { box-shadow: inset 4px 0 0 #3a6fd8; }
.sim-row.herite { box-shadow: inset 4px 0 0 var(--line); }
.sim-c-nom { display: flex; align-items: flex-start; gap: 6px; padding-left: calc(var(--d, 0) * 18px); min-width: 0; }
.sim-lib { min-width: 0; overflow-wrap: anywhere; }
.sim-lib small { display: block; font-weight: 400; font-size: .76rem; color: var(--ink-soft); }
.sim-tog { flex: 0 0 22px; width: 22px; height: 22px; border: 0; background: none; color: var(--accent); cursor: pointer; font-size: .95rem; padding: 0; }
.sim-tog.vide { display: inline-block; }
.sim-c-mt, .sim-c-apres { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.sim-c-apres small { display: block; font-size: .76rem; font-weight: 700; }
.sim-c-mt .nc, .sim-c-apres .nc { color: var(--ink-soft); font-weight: 400; }
.sim-c-ch { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-weight: 400; }
.sim-c-ch select { flex: 1 1 100%; min-width: 0; }
.sim-c-ch .sim-pct { font-size: .82rem; color: var(--ink-soft); white-space: nowrap; }
.sim-c-ch .sim-pct input { width: 82px; }
.sim-c-ch .sim-fus { flex: 1 1 100%; }
.sim-pnom { width: 100%; font-weight: 600; }
.sim-x { border: 0; background: none; color: var(--accent-2); cursor: pointer; font-size: 1rem; }
.sim-ajout { grid-template-columns: 1fr; padding-left: calc(12px + var(--d, 0) * 18px + 28px); }
.sim-ajout .chip { font-size: .82rem; padding: 5px 12px; }
.sim-barre { position: sticky; bottom: 0; z-index: 5; display: flex; flex-wrap: wrap; gap: 6px 22px; align-items: center;
  background: var(--surface); border: 1px solid var(--line); border-radius: 12px 12px 0 0; box-shadow: var(--shadow);
  padding: 10px 18px; margin-top: 16px; font-size: .92rem; }
.sim-barre a { margin-left: auto; font-weight: 700; }
@media (max-width: 760px) {
  .sim-row { grid-template-columns: minmax(0, 1fr) auto; }
  .sim-head { display: none; }
  .sim-c-ch { grid-column: 1 / -1; padding-left: calc(var(--d0, 0px) + 28px); }
  .sim-c-ch select { flex: 1 1 160px; }
  .sim-c-apres { grid-column: 2; grid-row: 1; }
  .sim-c-mt { display: none; }
  .sim-ajout { padding-left: 12px; }
  .sim-titre { font-size: 1.5rem; }
  .sim-mesures { grid-template-columns: 1fr; }
}
.sim-params select, .prog-select select { max-width: 100%; }
@media (max-width: 760px) {
  .sim-barre { padding: 6px 12px; font-size: .84rem; gap: 2px 14px; }
  .sim-barre a { margin-left: 0; }
}

/* ---------- MonBudget2027 : programmes et mesures ---------- */
.hero-actions { margin-top: 18px; }
.hero-actions .chip { text-decoration: none; font-size: 1rem; padding: 10px 18px; }
.sim-card h3 a { color: inherit; text-decoration: none; }
.sim-card h3 a:hover { color: var(--accent); }
.sim-sondage { font-size: .8rem; color: var(--ink-soft); }
.sim-card.cand { border-top: 3px solid var(--accent); }
.sim-h3 { margin: 18px 0 8px; font-size: 1.1rem; }
.sim-avance summary { cursor: pointer; font-weight: 700; color: var(--accent); }
.sim-avance[open] summary { margin-bottom: 12px; }
.sim-mes { color: var(--accent) !important; font-style: italic; }
.chip:disabled { opacity: .65; cursor: default; }
.chip.sim-save { font-weight: 700; }
.sim-alerte { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; margin: 16px 0 0; padding: 10px 14px;
  border-radius: 12px; background: color-mix(in srgb, var(--warn) 14%, var(--surface)); border: 1px solid color-mix(in srgb, var(--warn) 40%, transparent); font-size: .92rem; }
.sim-alerte .chip { text-decoration: none; }

.pm-liste { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.pm-row, .pm-res { display: grid; grid-template-columns: minmax(0, 1fr) 120px 190px 32px; gap: 10px; align-items: center;
  padding: 8px 12px; border-top: 1px solid var(--line); font-size: .92rem; }
.pm-row:first-child { border-top: 0; }
.pm-res { grid-template-columns: minmax(0, 1fr) 120px auto; border: 1px solid var(--line); border-radius: 10px; margin: 6px 0; }
.pm-res.dedans { background: var(--accent-soft); }
.pm-nom { min-width: 0; overflow-wrap: anywhere; }
.pm-nom a { font-weight: 600; text-decoration: none; }
.pm-nom a:hover { text-decoration: underline; }
.pm-nom small, .pm-cal small { display: block; font-size: .78rem; color: var(--ink-soft); }
.pm-effet { text-align: right; white-space: nowrap; font-weight: 600; }
.pm-effet .nc, .sim-card .nc { color: var(--ink-soft); font-weight: 400; font-size: .85rem; }
.pm-cal select { padding: 4px 6px; border-radius: 6px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .88rem; }
.pm-total { background: var(--accent-soft); font-weight: 700; }
.pm-toolbar { margin: 0 0 6px; }

.mf-recap { margin-top: 18px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); }
.mf-recap h3 { margin: 0 0 8px; font-size: 1.1rem; }
.mf-recap table { width: 100%; border-collapse: collapse; font-size: .9rem; }
.mf-recap th, .mf-recap td { text-align: left; padding: 6px 8px; border-top: 1px solid var(--line); }
.mf-recap td:nth-child(2), .mf-recap td:nth-child(3), .mf-recap th:nth-child(2), .mf-recap th:nth-child(3) { text-align: right; white-space: nowrap; }
.mf-recap .note { font-size: .85rem; color: var(--ink-soft); margin: 8px 0 0; }

.mf-form fieldset { border: 1px solid var(--line); }
.mf-form legend { font-family: var(--serif); font-weight: 600; font-size: 1.2rem; padding: 0 6px; }
.mf-form label { display: block; font-weight: 600; font-size: .92rem; margin: 10px 0; }
.mf-form label small { font-weight: 400; color: var(--ink-soft); }
.mf-form input, .mf-form select, .mf-form textarea { display: block; width: 100%; margin-top: 4px; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .95rem; font-weight: 400; }
.mf-form textarea { resize: vertical; }
.mf-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.mf-effet, .mf-source { display: grid; grid-template-columns: minmax(0, 1fr) 120px 140px 32px; gap: 10px; align-items: start;
  padding: 6px 0; border-top: 1px dashed var(--line); }
.mf-source { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 32px; }
.mf-effet .sim-x, .mf-source .sim-x { margin-top: 34px; }
.mf-effet label small { display: block; min-height: 1.2em; }
.mf-solde { font-size: 1rem; margin: 12px 0; }
.mf-erreurs { color: var(--accent-2); font-weight: 600; min-height: 1.2em; }
.mf-actions .chip { font-size: 1rem; padding: 10px 18px; }
@media (max-width: 760px) {
  .pm-row { grid-template-columns: minmax(0, 1fr) auto 28px; }
  .pm-row .pm-cal { grid-column: 1 / 3; grid-row: 2; }
  .pm-row .sim-x { grid-column: 3; grid-row: 1; }
  .pm-total { grid-template-columns: minmax(0, 1fr) auto; }
  .pm-res { grid-template-columns: minmax(0, 1fr) auto; }
  .pm-res .chip { grid-column: 1 / -1; justify-self: start; }
  .mf-2, .mf-effet, .mf-source { grid-template-columns: 1fr; }
  .mf-effet .sim-x, .mf-source .sim-x { margin-top: 0; justify-self: start; }
}

/* ---------- Mesures dépliables et menus en cascade ---------- */
.pm-item { border-top: 1px solid var(--line); }
.pm-item:first-child { border-top: 0; }
.pm-item .pm-row { border-top: 0; }
.pm-detail { padding: 0 12px 10px; font-size: .88rem; }
.pm-detail summary { cursor: pointer; color: var(--accent); font-size: .82rem; }
.pm-detail[open] summary { margin-bottom: 6px; }
.pm-effets { width: 100%; border-collapse: collapse; font-size: .88rem; }
.pm-effets th { text-align: left; font-size: .76rem; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); padding: 4px 8px; }
.pm-effets td { padding: 6px 8px; border-top: 1px solid var(--line); vertical-align: top; }
.pm-effets td small { display: block; font-size: .76rem; color: var(--ink-soft); }
.pm-effets td:nth-child(n+2), .pm-effets th:nth-child(n+2) { text-align: right; white-space: nowrap; }
.mf-effet { display: block; padding: 12px 0; border-top: 1px dashed var(--line); }
.mf-cascade { display: grid; grid-template-columns: 140px minmax(0, 1fr) minmax(0, 1.4fr); gap: 10px; align-items: start; }
.mf-montant { display: grid; grid-template-columns: 130px 140px 160px 32px; gap: 10px; align-items: end; }
.mf-montant .sim-x { margin: 0 0 18px; }
.mf-cascade label, .mf-montant label { margin: 4px 0; }
.mf-cascade .note { margin: 30px 0 0; font-size: .82rem; color: var(--ink-soft); }
.mf-info { display: block; color: var(--accent); font-size: .85rem; min-height: 1.2em; }
@media (max-width: 760px) {
  .mf-cascade { grid-template-columns: 1fr; }
  .mf-montant { grid-template-columns: 1fr 1fr; }
  .mf-montant .sim-x { margin: 0; justify-self: start; }
  .pm-effets td:nth-child(2), .pm-effets th:nth-child(2) { display: none; }
}

/* ---------- Fenêtre de dialogue ---------- */
.mb-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center;
  padding: 16px; background: rgba(15, 18, 28, .45); }
.mb-modal-boite { max-width: 460px; width: 100%; background: var(--surface); color: var(--ink); border-radius: 14px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, .25); padding: 20px 22px; }
.mb-modal-boite p { margin: 0 0 8px; font-size: 1rem; }
.sim-card-actions .chip.sim-danger { margin-left: auto; }

/* ---------- Simulateurs « Impôts » et « L'État » (profils) ---------- */
.ps-barre { display: grid; gap: 10px; }
.ps-profil { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; align-items: end; }
.ps-profil label { display: block; font-weight: 600; font-size: .9rem; }
.ps-profil select, .ps-profil input { display: block; width: 100%; margin-top: 4px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line);
  background: var(--surface); color: var(--ink); font: inherit; font-weight: 400; }
.ps-profil .note { margin: 0; font-size: .88rem; color: var(--ink-soft); }
.ps-seuls { font-size: .9rem; display: flex; gap: 6px; align-items: center; }
.ps-table .imp-choix { width: 300px; }
.ps-table .imp-choix input, .ps-table .imp-choix select { margin-top: 4px; }
.ps-param { display: block; font-size: .76rem; color: var(--ink-soft); margin-top: 4px; }
.ps-effet { white-space: nowrap; text-align: right; width: 120px; }
.ps-sous td:first-child { padding-left: 34px; }
.imp-row.ch-privatiser td:first-child { box-shadow: inset 5px 0 0 #7b52c4; }
.imp-row.ch-creer td:first-child { box-shadow: inset 5px 0 0 var(--ok); }
.imp-row.ch-creer input { padding: 6px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }
.imp-row.ch-creer .imp-rend input { width: 80px; }
.mf-profil { border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; margin: 8px 0 14px; background: var(--accent-soft); }
.mf-profil .note { margin: 4px 0 8px; }
.mf-profil-choix { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.mf-profil-choix select { flex: 1 1 260px; width: auto; display: inline-block; margin: 0; }
@media (max-width: 760px) {
  .ps-profil { grid-template-columns: 1fr; }
  .ps-table .imp-choix { width: auto; }
}

/* ---------- Simulation des recettes et des dépenses ---------- */
.ps-h2 { margin: 26px 0 10px; font-size: 1.4rem; }
.ps-arbre .sim-row { grid-template-columns: minmax(0, 1fr) 110px 280px 140px; }
.ps-arbre .sim-c-ch { align-items: flex-start; }
.ps-arbre .sim-c-ch select, .ps-arbre .sim-c-ch input[type="text"] { flex: 1 1 100%; padding: 6px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-size: .88rem; }
.ps-arbre .ps-param { flex: 1 1 100%; }
.ps-arbre .ps-param input { display: block; width: 110px; margin-top: 2px; padding: 5px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }
.ps-arbre .sim-c-apres small { font-size: .82rem; }
.ps-entete { background: color-mix(in srgb, var(--accent-soft) 60%, transparent); font-style: italic; }
.ps-arbre .perso input { padding: 5px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }
.ps-arbre .perso .sim-c-mt input { width: 70px; }
.ps-arbre .ps-nnom { width: 100%; }
@media (max-width: 760px) {
  .ps-arbre .sim-row { grid-template-columns: minmax(0, 1fr) auto; }
  .ps-arbre .sim-c-mt { display: block; }
}

/* ---------- Mode communautaire : compte et notes de la communauté ---------- */
.topbar { gap: 12px; }
.compte { margin-left: 14px; flex: 0 0 auto; }
.compte .chip { text-decoration: none; font-size: .88rem; padding: 6px 14px; }
.mb-connexion label { display: block; font-weight: 600; font-size: .92rem; margin: 10px 0; }
.mb-connexion input, .mb-connexion textarea { display: block; width: 100%; margin-top: 4px; padding: 8px 10px; border-radius: 8px;
  border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }
.cn { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 20px; margin: 18px 0; }
.cn h2 { margin: 0 0 10px; font-size: 1.2rem; }
.cn .note, .cn-page .note { font-size: .86rem; color: var(--ink-soft); }
.cn-note { border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; margin: 10px 0; background: var(--bg); }
.cn-note.cn-utile { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); background: color-mix(in srgb, var(--accent-soft) 70%, var(--surface)); }
.cn-note header { font-size: .85rem; margin-bottom: 6px; }
.cn-note p { margin: 6px 0; }
.cn-cat { display: inline-block; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font-weight: 600; font-size: .78rem; }
.cn-montant { font-size: .92rem; }
.cn-sources { margin: 4px 0 8px; padding-left: 18px; font-size: .86rem; }
.cn-note footer { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; }
.cn-eval { display: inline-flex; gap: 6px; align-items: center; font-size: .86rem; }
.cn-eval .chip { padding: 4px 10px; font-size: .82rem; }
.cn-lien { border: 0; background: none; color: var(--ink-soft); text-decoration: underline; cursor: pointer; font: inherit; font-size: .82rem; padding: 0; }
.cn-groupe { margin: 10px 0; }
.cn-groupe > summary { cursor: pointer; font-weight: 600; color: var(--accent); }
.cn-form { margin-top: 10px; }
.cn-badge { display: inline-block; margin: 4px 6px 0 0; padding: 2px 8px; border-radius: 999px; font-size: .74rem; font-weight: 700;
  background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
.cn-badge.impact { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn); }
.cn-option { display: flex; gap: 8px; align-items: center; font-size: .9rem; margin: 6px 0 0; }
.cn-item { border-top: 1px dashed var(--line); padding-top: 8px; margin-top: 8px; }
@media (max-width: 560px) { .compte { margin-left: auto; } }
.cn-rappel { margin: 18px 0; padding: 12px 16px; border-radius: 12px; font-size: .95rem;
  background: color-mix(in srgb, var(--warn) 12%, var(--surface)); border: 1px solid color-mix(in srgb, var(--warn) 35%, var(--line)); }

/* Part des dépenses qui finance les retraites (diagramme des flux, tableau par ministère) */
.sankey .sk-ret { font-weight: 600; fill: #a86f00; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .sankey .sk-ret { fill: #f2c14e; } }
:root[data-theme="dark"] .sankey .sk-ret { fill: #f2c14e; }
.sk-legende { display: flex; gap: 8px; align-items: baseline; font-size: .92rem; margin: 10px 0 0; }
.sk-pastille { display: inline-block; width: 12px; height: 12px; border-radius: 3px; flex: 0 0 auto; vertical-align: -1px; }
.sk-pastille.sal, .ret-b i.sal { background: repeating-linear-gradient(135deg, #e8a317 0 3px, #f6d58a 3px 6px); }
.ret-min { margin-top: 26px; }
.ret-table { display: grid; gap: 0; font-size: .92rem; }
.ret-ligne { display: grid; grid-template-columns: minmax(0, 2.2fr) 1fr 1fr minmax(0, 2fr); gap: 10px; align-items: center; padding: 7px 0; border-bottom: 1px solid var(--line); }
.ret-ligne small { display: block; color: var(--ink-soft); font-size: .8rem; }
.ret-tete { font-weight: 700; font-size: .82rem; color: var(--ink-soft); }
.ret-barre { display: flex; gap: 8px; align-items: center; }
.ret-b { flex: 1; display: flex; height: 12px; background: var(--accent-soft); border-radius: 6px; overflow: hidden; }
.ret-b i { display: block; height: 100%; background: #e8a317; }
.ret-barre strong { min-width: 4.5em; text-align: right; }
@media (max-width: 640px) {
  .ret-ligne { grid-template-columns: 1fr 1fr; }
  .ret-ligne > span:first-child, .ret-barre { grid-column: 1 / -1; }
  .ret-tete { display: none; }
  .ret-ligne [data-lib]::before { content: attr(data-lib) " : "; color: var(--ink-soft); }
}

/* Budget annoncé / rectifié */
.cmp h2 { margin-bottom: 6px; }
.cmp-barres { display: grid; gap: 10px; margin: 14px 0; }
.cmp-ligne { display: grid; grid-template-columns: minmax(0, 15em) minmax(0, 1fr) 7.5em; gap: 12px; align-items: center; }
.cmp-lib { font-weight: 700; font-size: .92rem; }
.cmp-lib small { display: block; font-weight: 400; color: var(--ink-soft); font-size: .78rem; line-height: 1.3; }
.cmp-piste { position: relative; height: 18px; background: linear-gradient(90deg, transparent calc(50% - 1px), var(--line) calc(50% - 1px), var(--line) calc(50% + 1px), transparent calc(50% + 1px)); }
.cmp-piste i { position: absolute; top: 2px; bottom: 2px; border-radius: 4px; min-width: 2px; }
.cmp-annonce .cmp-piste i { background: #8a94a6; }
.cmp-neutre .cmp-piste i { background: #5b8def; }
.cmp-mb .cmp-piste i { background: var(--accent); }
.cmp-comm .cmp-piste i { background: #e8a317; }
.cmp-ligne strong { text-align: right; font-variant-numeric: tabular-nums; }
.cmp-ecart { font-size: .95rem; }
.cmp-ecart small { display: block; color: var(--ink-soft); font-size: .82rem; margin-top: 4px; }
.cmp-detail summary { cursor: pointer; font-weight: 600; color: var(--accent); }
.cmp-detail table { font-size: .88rem; }
.cmp-mesure { margin: 10px 0 14px; }
.cmp-mini { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: .8rem; color: var(--ink-soft); margin: 8px 0 4px; padding-top: 8px; border-top: 1px dashed var(--line); }
.cmp-mini strong { margin-left: 4px; }
.cmp-cell { white-space: nowrap; }
@media (max-width: 640px) {
  .cmp-ligne { grid-template-columns: 1fr auto; }
  .cmp-piste { grid-column: 1 / -1; grid-row: 2; }
}
/* Page « Budget » */
.hist-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 8px 24px; }
.hist-table td small { display: block; color: var(--ink-soft); font-size: .78rem; }
/* Retraites dans « Recettes et dépenses » */
.ps-row.ps-ret .sim-lib { color: #a86f00; }
.ps-row.ps-ret { background: color-mix(in srgb, #e8a317 9%, transparent); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .ps-row.ps-ret .sim-lib { color: #f2c14e; } }
:root[data-theme="dark"] .ps-row.ps-ret .sim-lib { color: #f2c14e; }
.ps-retbloc { border-left: 4px solid #e8a317; }
.ret-mini { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: .88rem; margin: 6px 0 10px; }

.ps-perimetre { margin: 26px 0 6px; padding-top: 14px; border-top: 2px solid var(--line); }
.ps-perimetre h3 { margin: 0 0 4px; font-size: 1.1rem; }
.ret-details > summary { cursor: pointer; font-weight: 700; color: var(--accent); margin: 6px 0; }
.ret-table2 { font-size: .88rem; }
.ret-table2 td small { display: block; color: var(--ink-soft); font-size: .76rem; max-width: 34ch; }
.ret-table2 tfoot td { font-weight: 700; border-top: 2px solid var(--line); }
.ps-total { font-weight: 800; border-top: 2px solid var(--ink-soft); background: var(--accent-soft); }
.ps-total.ps-sous-total, .ps-total.ps-moins { font-weight: 600; background: transparent; border-top: 1px solid var(--line); }
.ps-total.ps-moins .sim-c-mt { color: var(--ink-soft); }

/* ---------- Évolution sur cinq ans (page « Budget ») ---------- */
.evo {
  --s-dep: #2a78d6; --s-rec: #1baf7a; --s-def: #e34948; --s-dette: #4a3aa7;
  --evo-grille: #ebe7df; --evo-ink2: var(--ink-soft);
}
@media (prefers-color-scheme: dark) {
  :root:where(:not([data-theme="light"])) .evo { --s-dep: #3987e5; --s-rec: #199e70; --s-def: #e66767; --s-dette: #9085e9; --evo-grille: #2b3140; }
}
:root[data-theme="dark"] .evo { --s-dep: #3987e5; --s-rec: #199e70; --s-def: #e66767; --s-dette: #9085e9; --evo-grille: #2b3140; }
.evo-chapo { font-size: 1.05rem; max-width: 75ch; color: var(--ink); margin: 0 0 18px; }
.evo-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; margin-bottom: 18px; }
.evo-kpi { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; display: flex; flex-direction: column; gap: 2px; }
.evo-kpi-lib { font-size: .78rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); display: flex; align-items: center; gap: 6px; }
.evo-kpi strong { font-size: 1.9rem; line-height: 1.15; font-variant-numeric: tabular-nums; }
.evo-kpi strong small { font-size: .85rem; font-weight: 500; color: var(--ink-soft); }
.evo-kpi-sous { font-size: .85rem; color: var(--ink-soft); }
.evo-kpi-bas { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 6px 8px; margin-top: 6px; min-width: 0; }
.evo-delta { font-size: .8rem; font-weight: 700; padding: 2px 8px; border-radius: 999px; background: var(--accent-soft); color: var(--ink-soft); white-space: nowrap; }
.evo-delta.bon { color: #0a7a0a; background: color-mix(in srgb, #0ca30c 13%, transparent); }
.evo-delta.mauvais { color: #b22e2e; background: color-mix(in srgb, #d03b3b 13%, transparent); }
.evo-spark { width: 96px; max-width: 40%; height: 30px; flex: 0 1 auto; min-width: 54px; }
.evo-spark polyline { fill: none; stroke: var(--ink-soft); stroke-width: 1.5; stroke-linejoin: round; stroke-linecap: round; opacity: .7; }
.evo-spark circle { stroke: var(--surface); stroke-width: 2; }
.evo-pastille { display: inline-block; width: 10px; height: 10px; border-radius: 3px; vertical-align: 0; }
.evo-pastille.s-dep, .evo-spark .s-dep { background: var(--s-dep); fill: var(--s-dep); }
.evo-pastille.s-rec, .evo-spark .s-rec { background: var(--s-rec); fill: var(--s-rec); }
.evo-pastille.s-def, .evo-spark .s-def { background: var(--s-def); fill: var(--s-def); }
.evo-pastille.s-dette, .evo-spark .s-dette { background: var(--s-dette); fill: var(--s-dette); }
.evo-pastille.prev { background: repeating-linear-gradient(135deg, currentColor 0 2px, transparent 2px 4px); color: var(--ink-soft); }
.evo-pastille.s-def.prev { color: var(--s-def); background-color: transparent; border: 1px solid var(--s-def); }
.evo-pastille.s-dette.prev { color: var(--s-dette); background-color: transparent; border: 1px solid var(--s-dette); }
.evo-pastille.hach { background: repeating-linear-gradient(135deg, var(--s-def) 0 2px, color-mix(in srgb, var(--s-def) 18%, transparent) 2px 5px); }
.evo-grille-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); gap: 14px; }
.evo-carte { margin: 0; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px 10px; min-width: 0; }
.evo-carte figcaption h3 { margin: 0 0 4px; font-size: 1.02rem; }
.evo-leg { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: .8rem; color: var(--ink-soft); align-items: center; }
.evo-leg .evo-pastille { margin-right: 4px; }
.evo-graph { position: relative; }
.evo-svg { display: block; width: 100%; height: auto; overflow: visible; }
.evo-grille { stroke: var(--evo-grille); stroke-width: 1; }
.evo-axe { font: 500 11px var(--sans); fill: var(--ink-soft); }
.evo-ligne { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.evo-ligne.s-dep { stroke: var(--s-dep); } .evo-ligne.s-rec { stroke: var(--s-rec); } .evo-ligne.s-dette { stroke: var(--s-dette); }
.evo-ligne.prev { stroke-dasharray: 5 4; }
.evo-pt { stroke: var(--surface); stroke-width: 2; }
.evo-pt.s-dep { fill: var(--s-dep); } .evo-pt.s-rec { fill: var(--s-rec); } .evo-pt.s-dette { fill: var(--s-dette); }
.evo-pt.prev { fill: var(--surface); stroke: var(--s-dette); }
.evo-aire { fill: var(--s-dette); opacity: .08; }
.evo-hach-fond { fill: color-mix(in srgb, var(--s-def) 10%, transparent); }
.evo-hach-trait { stroke: var(--s-def); stroke-width: 1.6; opacity: .55; }
.evo-zone-lib { font: 700 11px var(--sans); fill: var(--ink); paint-order: stroke; stroke: var(--surface); stroke-width: 3px; }
.evo-fin, .evo-val { font: 700 12px var(--sans); fill: var(--ink); }
.evo-barre { fill: var(--s-def); }
.evo-barre.prev { fill: color-mix(in srgb, var(--s-def) 22%, transparent); stroke: var(--s-def); stroke-width: 1.5; stroke-dasharray: 4 3; }
.evo-hit { fill: transparent; cursor: crosshair; }
.evo-curseur { stroke: var(--ink-soft); stroke-width: 1; stroke-dasharray: 3 3; opacity: 0; pointer-events: none; }
.evo-curseur.on { opacity: .6; }
.evo-tip { position: absolute; top: 4px; z-index: 2; pointer-events: none; background: var(--surface); border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 6px 18px rgba(0,0,0,.12); padding: 8px 10px; font-size: .8rem; display: flex; flex-direction: column; gap: 2px; min-width: 150px; }
.evo-tip b { font-size: .85rem; }
.evo-note { font-size: .78rem; color: var(--ink-soft); margin: 4px 0 0; }
.evo-tableau { margin-top: 14px; }
.evo-tableau > summary { cursor: pointer; font-weight: 600; color: var(--accent); }
/* barre du haut : entre 560 et 860 px, la navigation passe sur une seconde ligne défilante */
@media (min-width: 561px) and (max-width: 860px) {
  .topbar { flex-wrap: wrap; row-gap: 6px; }
  .topnav { order: 3; width: 100%; overflow-x: auto; scrollbar-width: none; }
  .topnav a:first-child { margin-left: 0; }
  .compte { margin-left: auto; }
}
.evo-grille-cartes { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.evo-grille-cartes .evo-carte:first-child { grid-column: 1 / -1; }
.evo-axe { font-size: 12px; }
.evo-fin, .evo-val { font-size: 13px; }
.evo-zone-lib { font-size: 12px; }
.evo-grille-cartes .evo-carte:not(:first-child) .evo-axe { font-size: 15px; }
.evo-grille-cartes .evo-carte:not(:first-child) .evo-fin, .evo-grille-cartes .evo-carte:not(:first-child) .evo-val { font-size: 16px; }
.evo-tip[hidden] { display: none; }
.evo-grille-cartes { grid-template-columns: 1fr 1fr; }
.evo-grille-cartes .evo-carte:not(:first-child) .evo-axe { font-size: 13px; }
.evo-grille-cartes .evo-carte:not(:first-child) .evo-fin, .evo-grille-cartes .evo-carte:not(:first-child) .evo-val { font-size: 14px; }
.evo-svg { max-height: 340px; }
@media (max-width: 700px) { .evo-grille-cartes { grid-template-columns: 1fr; } }
/* badges de l'évaluateur neutre */
.eval-badge { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: .74rem; font-weight: 700; white-space: nowrap; cursor: help;
  background: var(--accent-soft); color: var(--accent); }
.eval-badge.eval-cout { background: color-mix(in srgb, #8a94a6 18%, transparent); color: var(--ink-soft); }
.eval-badge.eval-A { background: color-mix(in srgb, #0ca30c 14%, transparent); color: #0a7a0a; }
.eval-badge.eval-B { background: color-mix(in srgb, #2a78d6 14%, transparent); color: #1c5cab; }
.eval-badge.eval-C { background: color-mix(in srgb, #eda100 18%, transparent); color: #8a5d00; }
.eval-badge.eval-D, .eval-badge.eval-E { background: color-mix(in srgb, #d03b3b 13%, transparent); color: #b22e2e; }
.eval-badge.eval-N { background: transparent; border: 1px dashed var(--line); color: var(--ink-soft); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .eval-badge { filter: brightness(1.5); } }
:root[data-theme="dark"] .eval-badge { filter: brightness(1.5); }
.eval-ligne { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; font-size: .9rem; margin: 6px 0 10px; }
.eval-ligne span { color: var(--ink-soft); }
.cmp-grille summary { cursor: pointer; font-weight: 600; color: var(--accent); margin-top: 8px; }
.cmp-grille ul { padding-left: 0; list-style: none; display: grid; gap: 8px; font-size: .88rem; }
.cmp-grille em { color: var(--ink-soft); }

/* Avis au format fixe */
.avis { background: var(--surface); border: 1px solid var(--line); border-left: 4px solid var(--accent); border-radius: var(--radius); padding: 14px 18px; margin: 16px 0; }
.avis h3 { margin: 0 0 10px; font-size: 1.05rem; }
.avis h3 small { display: block; font-weight: 500; font-size: .8rem; color: var(--ink-soft); }
.avis-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 8px 16px; margin: 0 0 10px; }
.avis-l { display: flex; flex-direction: column; gap: 2px; }
.avis-l dt { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); }
.avis-l dd { margin: 0; font-weight: 700; font-variant-numeric: tabular-nums; }
.avis-l.avis-juridique-bloquant dd, .avis-l.avis-fiabilite-faible dd, .avis-l.avis-mecanisme-absent dd { color: #b22e2e; }
.avis-l.avis-juridique-incertain dd, .avis-l.avis-mecanisme-partiel dd, .avis-l.avis-fiabilite-moyenne dd { color: #8a5d00; }
.avis-nc { font-size: .88rem; color: var(--ink-soft); margin: 6px 0; }
.avis-concl { font-weight: 600; margin: 6px 0 4px; }
.cn-note .avis { margin: 8px 0; border-left-color: #e8a317; }
.analyses-bloc h3, .cmp-h3 { margin: 6px 0 8px; font-size: 1.05rem; }
.analyses { font-size: .86rem; }
.analyses td { vertical-align: top; }
.cn-avis { border: 1px solid var(--line); border-radius: 12px; padding: 10px 14px; margin: 8px 0; }
.cn-avis legend { font-weight: 700; font-size: .9rem; padding: 0 6px; }
.methode-grille { list-style: none; padding-left: 0; display: grid; gap: 8px; }

/* ---------- Trois chiffrages : sélecteur et graphique du solde ---------- */
:root { --v-candidat: #eb6834; --v-neutre: #2a78d6; --v-realiste: #0d8f9e; --v-communaute: #1baf7a; --v-indep: #4a3aa7; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --v-candidat: #d95926; --v-neutre: #3987e5; --v-realiste: #23b0bf; --v-communaute: #199e70; --v-indep: #9085e9; } }
:root[data-theme="dark"] { --v-candidat: #d95926; --v-neutre: #3987e5; --v-realiste: #23b0bf; --v-communaute: #199e70; --v-indep: #9085e9; }
.vue-switch { position: sticky; top: 66px; z-index: 5; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 14px 0;
  padding: 8px 12px; background: color-mix(in srgb, var(--surface) 94%, transparent); backdrop-filter: blur(6px); border: 1px solid var(--line); border-radius: 14px; }
.vue-lib { font-weight: 700; font-size: .88rem; }
.vue-b { border: 1px solid var(--line); background: var(--surface); color: var(--ink); border-radius: 999px; padding: 5px 12px; font: 600 .85rem var(--sans); cursor: pointer; display: inline-flex; align-items: center; gap: 6px; }
.vue-b::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: currentColor; opacity: .9; }
.vue-b.vue-candidat::before { background: var(--v-candidat); } .vue-b.vue-neutre::before { background: var(--v-neutre); } .vue-b.vue-communaute::before { background: var(--v-communaute); }
.vue-b.on { background: var(--ink); color: var(--surface); border-color: var(--ink); }
.vue-b:disabled { opacity: .45; cursor: not-allowed; }
.vue-aide { font-size: .78rem; color: var(--ink-soft); flex: 1 1 260px; }
.vue-mini { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-left: 5px; vertical-align: 1px; }
.vue-mini.vue-candidat { background: var(--v-candidat); } .vue-mini.vue-neutre { background: var(--v-neutre); } .vue-mini.vue-communaute { background: var(--v-communaute); }
.vue-repli { display: block; font-size: .72rem; color: var(--ink-soft); }
/* sous le nom d'une mesure : la vue choisie n'a pas de chiffrage, le chiffrage neutre est affiché */
.pm-nom .vue-repli { font-style: italic; }
.sv { margin: 14px 0; }
.sv-legende { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: .8rem; color: var(--ink-soft); }
.sv-leg.on { color: var(--ink); font-weight: 700; }
.sv-pastille { display: inline-block; width: 12px; height: 10px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }
.sv-pastille.ligne { height: 3px; border-radius: 2px; vertical-align: 2px; }
.sv-pastille.sv-candidat { background: var(--v-candidat); } .sv-pastille.sv-neutre { background: var(--v-neutre); } .sv-pastille.sv-communaute { background: var(--v-communaute); }
.sv-grille { stroke: var(--line); stroke-width: 1; } .sv-grille.zero { stroke: var(--ink-soft); }
.sv-axe { font: 500 11px var(--sans); fill: var(--ink-soft); }
.sv-val { font: 700 11px var(--sans); fill: var(--ink); }
.sv-barre.sv-candidat { fill: var(--v-candidat); } .sv-barre.sv-neutre { fill: var(--v-neutre); } .sv-barre.sv-communaute { fill: var(--v-communaute); }
.sv-barre { opacity: .9; }
.sv-ligne { fill: none; stroke-width: 2; stroke-linejoin: round; }
.sv-ligne.sv-candidat { stroke: var(--v-candidat); stroke-dasharray: 6 4; } .sv-ligne.sv-neutre { stroke: var(--v-neutre); } .sv-ligne.sv-communaute { stroke: var(--v-communaute); stroke-dasharray: 2 3; }
.sv-pt { stroke: var(--surface); stroke-width: 1.5; }
.sv-pt.sv-candidat { fill: var(--v-candidat); } .sv-pt.sv-neutre { fill: var(--v-neutre); } .sv-pt.sv-communaute { fill: var(--v-communaute); }
/* mêmes couleurs dans le bloc « budget annoncé ou rectifié » */
.cmp-annonce .cmp-piste i { background: var(--v-candidat); }
.cmp-mb .cmp-piste i { background: var(--v-neutre); }
.cmp-comm .cmp-piste i { background: var(--v-communaute); }
.cmp-neutre .cmp-piste i { background: var(--v-indep); }
@media (max-width: 560px) { .vue-switch { top: 62px; } .vue-aide { display: none; } .vue-b { padding: 5px 9px; font-size: .8rem; } }

.sankey .sk-entete { font-weight: 800; text-transform: uppercase; letter-spacing: .03em; font-size: 11.5px; }

/* encadré : mutualisation des cotisations retraite */
.ret-mutuelle { background: color-mix(in srgb, #e8a317 7%, var(--surface)); border-radius: 12px; padding: 10px 14px; margin: 10px 0; font-size: .92rem; }
.ret-mutuelle h3 { margin: 0 0 6px; font-size: 1rem; }
.ret-mutuelle p { margin: 6px 0; }
/* encadré : transferts entre administrations */
.transferts-explication h2 { margin-top: 0; }
.transferts-chiffres { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 12px 0; }
.transferts-chiffres > div:not(.op) { background: var(--bg); border: 1px solid var(--line); border-radius: 12px; padding: 8px 12px; display: flex; flex-direction: column; min-width: 150px; flex: 1 1 150px; }
.transferts-chiffres strong { font-size: 1.3rem; font-variant-numeric: tabular-nums; }
.transferts-chiffres span { font-size: .8rem; color: var(--ink-soft); }
.transferts-chiffres .op { font-size: 1.4rem; font-weight: 700; color: var(--ink-soft); }
.sv-chiffres { margin: 4px 0 0; font-size: .85rem; color: var(--ink-soft); }
.sv-chiffres strong { color: var(--ink); }

/* diagramme des flux : administrations et transferts */
.sankey .sk-col { font: 800 11px var(--sans); fill: var(--ink-soft); text-transform: uppercase; letter-spacing: .05em; }
.sankey .sk-dans { font-size: 12px; }
.sankey .sk-transfert { stroke: currentColor; stroke-opacity: .25; stroke-width: .6; }
.sankey .sk-flux:hover { fill-opacity: .7; }
.sk-pastille-transfert { background: repeating-linear-gradient(135deg, #3a6fd8 0 3px, #6f9be8 3px 6px); opacity: .8; }
.transferts-chiffres > div { flex: 1 1 170px; }
.transferts-ecart summary { cursor: pointer; font-weight: 600; color: var(--accent); }

/* page Budget : intérêts de la dette */
.int { --int-stock: #8e5b3a; --int-nouv: #d9a27a; --int-plf: #3a6fd8; --int-taux: #c0392b; }
.int-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin: 14px 0; }
.int-carte { background: var(--surface); border: 1px solid var(--line); border-left: 5px solid var(--int-stock); border-radius: var(--radius); padding: 12px 14px; }
.int-carte.int-deficits { border-left-color: var(--int-nouv); }
.int-carte.int-taux { border-left-color: var(--int-taux); }
.int-carte .int-k { display: block; font-size: .78rem; font-weight: 800; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); }
.int-carte strong { display: block; font-size: 1.15rem; margin: 4px 0 6px; }
.int-carte p { margin: 0; font-size: .9rem; }
.int-carte p strong { display: inline; font-size: inherit; margin: 0; }
.int-graph { margin: 6px 0 12px; }
.int-b-stock { fill: var(--int-stock); }
.int-b-nouv { fill: var(--int-nouv); }
.evo-ligne.int-plf { stroke: var(--int-plf); }
.evo-pt.int-plf { fill: var(--int-plf); }
.evo-ligne.int-haut, .evo-ligne.int-bas { stroke: var(--int-taux); stroke-width: 1.5; stroke-dasharray: 5 4; }
.evo-pastille.int-p-stock { background: var(--int-stock); }
.evo-pastille.int-p-nouv { background: var(--int-nouv); }
.evo-pastille.int-p-plf { background: var(--int-plf); border-radius: 50%; }
.evo-pastille.int-p-taux { background: repeating-linear-gradient(90deg, var(--int-taux) 0 4px, transparent 4px 7px); height: 3px; vertical-align: 3px; width: 16px; }
.int-leviers li { margin: 6px 0; }
@media (max-width: 700px) { .int-svg .evo-axe { font-size: 24px; } }

/* avis : calcul et justifications de l'évaluateur */
.avis-calcul { margin: 10px 0 4px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); }
.avis-calcul > summary { cursor: pointer; padding: 8px 12px; font-weight: 700; color: var(--accent); list-style: none; }
.avis-calcul > summary::-webkit-details-marker { display: none; }
.avis-calcul > summary::before { content: "▸ "; }
.avis-calcul[open] > summary::before { content: "▾ "; }
.avis-etapes { margin: 0; padding: 4px 14px 6px 34px; font-size: .9rem; }
.avis-etapes > li { margin: 6px 0; }
.avis-etapes > li > b:first-child { display: block; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); }
.avis-calcul > .note { padding: 0 14px 8px; margin: 0; }
.avis-effets { width: 100%; border-collapse: collapse; margin-top: 4px; font-size: .86rem; }
.avis-effets th, .avis-effets td { padding: 3px 6px; border-bottom: 1px solid var(--line); text-align: right; }
.avis-effets th:first-child, .avis-effets td:first-child { text-align: left; }
.avis-effets tfoot td { font-weight: 700; border-bottom: 0; }
/* degré de chiffrage des programmes */
.pub { display: inline-flex; align-items: center; gap: 6px; }
.pub-crans { display: inline-flex; gap: 2px; }
.pub-crans i { width: 9px; height: 12px; border-radius: 2px; background: color-mix(in srgb, var(--ink-soft) 22%, transparent); }
.pub-4 { --pub: #2f9e6a; } .pub-3 { --pub: #3a6fd8; } .pub-2 { --pub: #d98a1c; } .pub-1 { --pub: #9aa0a6; }
.pub-crans i.on { background: var(--pub); }
.pub-compact { font-size: .78rem; font-weight: 600; color: var(--ink-soft); white-space: nowrap; }
.sim-card .pub-compact { margin: -2px 0 6px; }
.pub-bloc { margin: 12px 0; padding: 10px 14px; border: 1px solid var(--line); border-left: 5px solid var(--pub); border-radius: var(--radius); background: var(--surface); }
.pub-tete { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; }
.pub-k { font-size: .78rem; font-weight: 800; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); }
.pub-bloc p { margin: 6px 0; font-size: .92rem; }
.pub-alerte { background: color-mix(in srgb, var(--pub) 12%, transparent); border-radius: 8px; padding: 6px 10px; }
.sim-compare tr.cmp-fragile td:not(:first-child):not(:nth-child(2)) { opacity: .55; font-style: italic; }

/* version light : la page « Recettes et dépenses » expose le budget, sans colonnes de choix */
.ps-lecture .sim-row { grid-template-columns: minmax(0, 1fr) 130px; }
.ps-lecture .sim-row > div:nth-child(n+3) { display: none; }
@media (max-width: 760px) { .ps-lecture .sim-row { grid-template-columns: minmax(0, 1fr) auto; } }

/* page Budget : quelle recette finance quelle dépense */
.fin-table td:nth-child(n+2), .fin-table th:nth-child(n+2) { text-align: right; white-space: nowrap; }
.fin-barre i { display: block; height: 100%; }

/* page Budget : le budget en un graphique */
.bg-intro { margin: 4px 0 10px; }
.bg-sankey { min-width: 1000px; }
.bg-sankey .sk-label { font-size: 14px; }
.bg-sankey .sk-entete { font-size: 13px; }
.bg-sankey .sk-col { font-size: 13px; }
.bg-sankey .sk-dans { font-size: 14px; }
.bg-legende { display: block; line-height: 1.7; }
.bg-sankey .bg-noeud { cursor: pointer; }
.bg-sankey .bg-noeud:focus { outline: none; }
.bg-sankey .bg-noeud:focus-visible rect { stroke: var(--ink); stroke-width: 2; }
.bg-sankey .bg-flux { fill-opacity: .42; transition: opacity .15s; }
.bg-sankey .bg-flux.bg-transfert { fill-opacity: 1; }
.bg-sankey .bg-flux:hover { fill-opacity: .75; }
.bg-sankey.focus .bg-flux:not(.on) { opacity: .06; }
.bg-sankey.focus .bg-noeud:not(.on) text { opacity: .6; }
.bg-pastille-transfert { background: repeating-linear-gradient(45deg, #3a6fd8 0 3px, color-mix(in srgb, #3a6fd8 25%, transparent) 3px 6px); }
.bg-detail { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 10px 14px; margin: 10px 0; min-height: 3em; }
.bg-detail h3 { margin: 0 0 4px; font-size: 1.05rem; display: flex; align-items: center; gap: 6px; }
.bg-detail h4 { margin: 6px 0 4px; font-size: .78rem; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); }
.bg-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 4px 24px; }
.bg-liste { list-style: none; margin: 0; padding: 0; font-size: .9rem; }
.bg-liste li { display: flex; align-items: baseline; gap: 6px; padding: 2px 0; border-bottom: 1px dashed var(--line); }
.bg-liste li b { margin-left: auto; font-variant-numeric: tabular-nums; }
.bg-liste li small { color: var(--ink-soft); width: 3em; text-align: right; }
.bg-pastille { display: inline-block; width: 10px; height: 10px; border-radius: 3px; flex: none; }

/* deux modes de l'évaluateur neutre */
.vue-b.vue-realiste::before, .vue-mini.vue-realiste, .sv-pastille.sv-realiste, .cmp-real .cmp-piste i { background: var(--v-realiste); }
.sv-barre.sv-realiste, .sv-pt.sv-realiste { fill: var(--v-realiste); }
.sv-ligne.sv-realiste { stroke: var(--v-realiste); stroke-dasharray: 9 3 2 3; }
.vue-groupe { display: inline-flex; align-items: center; gap: 4px; padding: 2px 3px 2px 10px; border: 1px solid var(--line); border-radius: 999px; }
.vue-groupe.on { border-color: var(--ink-soft); }
.vue-groupe-lib { font: 600 .82rem var(--sans); margin-right: 2px; }
.vue-groupe .vue-b { padding: 4px 10px; }
@media (max-width: 560px) { .vue-groupe-lib { font-size: .76rem; } .vue-groupe .vue-b { padding: 4px 8px; } }

/* budget année par année d'un programme : tableau des mesures, au style des tableaux de la page Budget */
.bg-mesures { margin: 18px 0; }
.bg-table { width: 100%; border-collapse: collapse; font-size: .92rem; }
.bg-table th { background: var(--accent-soft); text-align: left; padding: 9px 12px; }
.bg-table td { padding: 8px 12px; border-top: 1px solid var(--line); }
.bg-table td:nth-child(2), .bg-table th:nth-child(2) { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.bg-table tfoot td { font-weight: 800; border-top: 2px solid var(--line); }
.bg-barre-cell { width: 34%; }
.bg-barre { position: relative; display: block; height: 10px; background: linear-gradient(var(--line), var(--line)) 50% 0 / 1px 100% no-repeat; }
.bg-barre i { position: absolute; top: 0; bottom: 0; border-radius: 3px; }
.bg-barre i.pos { background: #2f9e6a; } .bg-barre i.neg { background: #c0392b; }
@media (max-width: 640px) { .bg-barre-cell { display: none; } }

/* ---------- Petits écrans : menu repliable, tableaux qui défilent dans leur cadre ---------- */
.menu-btn { display: none; align-items: center; gap: 8px; border: 1px solid var(--line); background: var(--surface); color: var(--ink);
  border-radius: 999px; padding: 7px 14px; font: 600 .9rem var(--sans); cursor: pointer; }
.menu-ico { display: inline-grid; gap: 3px; width: 16px; }
.menu-ico i { display: block; height: 2px; border-radius: 2px; background: currentColor; transition: transform .2s, opacity .2s; }
.menu-ouvert .menu-ico i:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.menu-ouvert .menu-ico i:nth-child(2) { opacity: 0; }
.menu-ouvert .menu-ico i:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
@media (max-width: 900px) {
  .topbar { flex-wrap: wrap; }
  .menu-btn { display: inline-flex; margin-left: auto; }
  .topnav { display: none; flex-basis: 100%; flex-direction: column; padding: 6px 0 4px; }
  .menu-ouvert .topnav { display: flex; }
  .topnav a { margin: 0; padding: 12px 4px; border-top: 1px solid var(--line); font-size: 1rem; color: var(--ink); }
}
@media (max-width: 700px) {
  .prose table:not(.tbl) { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .prose table:not(.tbl) th, .prose table:not(.tbl) td { white-space: normal; min-width: 7em; }
  .imp-wrap { -webkit-overflow-scrolling: touch; }
  .years { overflow-x: auto; flex-wrap: nowrap; padding-bottom: 4px; }
  .year { flex: 0 0 auto; }
  .vue-switch { position: static; }
  .vue-groupe { flex-wrap: wrap; border-radius: 14px; }
  .budget-tiles-annee { grid-template-columns: 1fr 1fr; }
}
/* tableaux larges sur petit écran : la première colonne reste visible pendant le défilement horizontal */
@media (max-width: 700px) {
  .imp-wrap table th:first-child, .imp-wrap table td:first-child { position: sticky; left: 0; z-index: 2; background: var(--surface); box-shadow: 1px 0 0 var(--line); }
  .imp-wrap table thead th:first-child { background: var(--accent-soft); }
  .sim-compare td:first-child { min-width: 9em; max-width: 11em; }
}

/* ---------- Rétro-analyse ---------- */
.rt-methode ul { margin: 6px 0; }
.rt-mandat h2 small { font: 600 1rem var(--sans); color: var(--ink-soft); margin-left: 8px; }
.rt-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin: 10px 0 14px; }
.rt-carte { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; }
.rt-carte strong { display: block; font-family: var(--serif); font-size: 1.1rem; margin: 4px 0 6px; }
.rt-carte p { margin: 0; font-size: .92rem; color: var(--ink-soft); }
.rt-deficit { border-left: 4px solid var(--accent-2); }
.rt-table td, .rt-table th { padding: 9px 12px; border-top: 1px solid var(--line); vertical-align: top; text-align: right; white-space: nowrap; }
.rt-table th { background: var(--accent-soft); border-top: 0; }
.rt-table td:first-child, .rt-table th:first-child { text-align: left; white-space: normal; min-width: 15em; }
.rt-table td:first-child small { display: block; color: var(--ink-soft); font-size: .78rem; margin-top: 2px; }
.rt-table td.nc { color: var(--ink-soft); }
.rt-table { width: 100%; border-collapse: collapse; font-size: .9rem; min-width: 760px; }
.rt-det { margin-top: 6px; font-size: .86rem; white-space: normal; }
.rt-det summary { cursor: pointer; color: var(--accent); font-weight: 600; }
.rt-det p { margin: 6px 0; }
.rt-col-axe { width: 270px; }
.rt-axe { width: 260px; height: 34px; display: block; }
.rt-zero { stroke: var(--ink-soft); stroke-width: 1; stroke-dasharray: 2 2; }
.rt-ligne { stroke: var(--line); stroke-width: 1; }
.rt-legende { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: .82rem; color: var(--ink-soft); margin: 6px 0 8px; }
.rt-legende i { display: inline-block; width: 10px; height: 10px; margin-right: 5px; vertical-align: -1px; }
.rt-rond { border-radius: 50%; } .rt-carre { border-radius: 2px; }
.rt-sens { margin-left: auto; }
.rt-score { border-top: 4px solid var(--line); }
.rt-score strong { font-size: 1.6rem; }
@media (max-width: 700px) { .rt-sens { margin-left: 0; } .rt-col-axe { display: none; } .rt-table { min-width: 560px; } }

/* évolution sur vingt ans : tableau année par année */
.evo-table td, .evo-table th { text-align: right; white-space: nowrap; }
.evo-table td:first-child, .evo-table th:first-child { text-align: left; font-weight: 700; }
.evo-table tfoot td { font-style: italic; color: var(--ink-soft); }

/* fiche de mesure : les deux modes de l'évaluateur neutre côte à côte */
.mf-modes, .avis-modes { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 12px 0 6px; }
.mf-mode, .avis-mode { border: 1px solid var(--line); border-top: 4px solid var(--v-neutre); border-radius: 12px; padding: 10px 14px; background: var(--surface); min-width: 0; }
.mf-mode.avis-real, .avis-mode.avis-real { border-top-color: var(--v-realiste); }
.mf-mode h4, .avis-mode h4 { margin: 0 0 4px; font-size: .82rem; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); display: flex; align-items: center; gap: 6px; }
.mf-mode h4 i, .avis-mode h4 i { width: 9px; height: 9px; border-radius: 50%; background: var(--v-neutre); }
.avis-real h4 i { background: var(--v-realiste); }
.mf-recap p.mf-mode-montant, .avis-mode p.avis-montant { display: block; font: 700 1.35rem var(--serif); margin: 2px 0 8px; font-variant-numeric: tabular-nums; }
.mf-recap .mf-mode-montant small, .avis-mode .avis-montant small { display: inline; font: 500 .85rem var(--sans); color: var(--ink-soft); }
.mf-recap .mf-mode-montant > span, .avis-mode .avis-montant > span:not(.avis-ecart) { display: inline; }
.avis-ecart { display: block; font: 600 .78rem var(--sans); color: var(--ink-soft); margin-top: 2px; }
.avis-mode p { margin: 6px 0; font-size: .9rem; }
.avis-mode p > b:first-child { display: block; font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); }
.mf-mode table { font-size: .84rem; }
.avis-modes-calc { margin-top: 6px; }
.avis-modes-calc .avis-mode { padding: 8px 10px; border-top-width: 3px; }
@media (max-width: 760px) { .mf-modes, .avis-modes { grid-template-columns: 1fr; } }

/* analyses publiées : une carte par analyse */
.analyses-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.analyse { border: 1px solid var(--line); border-left: 4px solid var(--v-indep); border-radius: 12px; background: var(--surface); padding: 12px 16px; }
.analyse-tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.analyse-tete strong { font-size: 1rem; }
.analyse-date { font-size: .82rem; color: var(--ink-soft); }
.analyse-montant { margin-left: auto; font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.analyse-montant .nc { font-weight: 500; font-size: .82rem; color: var(--ink-soft); }
.analyse p { margin: 6px 0 4px; font-size: .92rem; line-height: 1.5; }
.analyse-lien { font-size: .86rem; font-weight: 600; }
.analyses-bloc { padding: 16px 18px; }

/* ---------- Tableaux : un même style pour tout le site ----------
   cadre arrondi qui défile horizontalement si besoin, en-têtes discrets, lignes alternées, chiffres alignés à droite et
   jamais coupés (t-num), textes longs qui passent à la ligne au lieu de chevaucher la colonne voisine */
.imp-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); margin: 10px 0 14px; }
table.tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: .9rem; line-height: 1.4; font-variant-numeric: tabular-nums; background: var(--surface); margin: 0; }
table.tbl th, table.tbl td { padding: 9px 14px; text-align: left; vertical-align: middle; border: 0; border-top: 1px solid var(--line); overflow-wrap: anywhere; }
table.tbl thead th { background: var(--accent-soft); color: var(--ink); font-size: .74rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; border-top: 0; vertical-align: bottom; overflow-wrap: normal; }
table.tbl tbody th { font-weight: 600; }
table.tbl tbody tr:nth-child(even) > * { background: color-mix(in srgb, var(--accent-soft) 32%, var(--surface)); }
table.tbl tbody tr:hover > * { background: color-mix(in srgb, var(--accent-soft) 65%, var(--surface)); }
table.tbl tfoot > tr > * { font-weight: 800; border-top: 2px solid var(--ink-soft); background: var(--surface); }
table.tbl td small, table.tbl th small { display: block; font-size: .76rem; font-weight: 400; color: var(--ink-soft); margin-top: 2px; text-transform: none; letter-spacing: 0; }
table.tbl.t-num td:not(:first-child), table.tbl.t-num thead th:not(:first-child), table.tbl.t-num tfoot > tr > :not(:first-child) { text-align: right; white-space: nowrap; overflow-wrap: normal; }
table.tbl.t-num.t-num-2 > * > tr > :nth-child(2) { text-align: left; }
table.tbl tr.t-groupe > th { background: var(--bg) !important; font-size: .76rem; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-soft); padding-top: 12px; }
.prose .imp-wrap table.tbl { margin: 0; }
.mf-recap table.tbl, .avis table.tbl { font-size: .86rem; }
.mf-mode table.tbl th, .mf-mode table.tbl td, .avis table.tbl th, .avis table.tbl td { padding: 7px 10px; }
.rt-table.tbl td { vertical-align: top; }
table.tbl.t-num.sim-compare td:nth-child(2), table.tbl.t-num.sim-compare th:nth-child(2) { text-align: left; white-space: normal; }
/* comment chaque dépense est financée */
.fin-legende { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: .85rem; margin: 10px 0 0; }
.fin-legende i, .fin-pastille { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 6px; vertical-align: -1px; }
.fin-table .fin-barre-cell { width: 24%; min-width: 140px; text-align: left !important; }
.fin-barre { display: flex; width: 100%; min-width: 120px; height: 14px; border-radius: 4px; overflow: hidden; background: var(--line); }
.fin-barre i { display: block; height: 100%; }
.fin-table td.nul { color: var(--ink-soft); }
/* le détail pour chaque ministère */
.ret-part { display: inline-flex; align-items: center; gap: 8px; }
.ret-part .ret-b { flex: none; width: 90px; }
.ret-part b { min-width: 3.4em; text-align: right; font-weight: 700; }
.ret-table2 th[scope="row"] { min-width: 14em; }
/* en-têtes et intitulés de ligne : passent à la ligne plutôt que d'élargir le tableau */
table.tbl.t-num thead th:not(:first-child) { white-space: normal; min-width: 5.5em; }
table.tbl tbody th { white-space: normal; }
.ret-table2 tbody th, .ret-table2 tfoot th { min-width: 14em; max-width: 30em; }
.fin-table thead th.fin-col { min-width: 7em; padding-left: 8px; padding-right: 10px; letter-spacing: 0; }
table.tbl thead th { hyphens: auto; overflow-wrap: break-word; }
