/*
 * fp-verificateur-paie — rapport, presentation webapp
 *
 * Charge uniquement par [fp_verificateur_paie mode="webapp"].
 * Toutes les regles sont confinees sous .fpvp-rw : aucune ne peut atteindre
 * le theme WordPress ni la page /verificateur-de-paie/ integree.
 *
 * Palette conforme au CLAUDE.md du site, variantes texte comprises.
 */


/* ============================================================
   FSU Territoriale 62 — Rapport de vérification de bulletin — v2
   Palette conforme au CLAUDE.md, variantes texte incluses.
   ============================================================ */

.fpvp-rw{
  /* Couleurs logo */
  --fsu-red:#c8282f;
  --fsu-red-dark:#a9252a;
  --fsu-blue:#307baa;
  --fsu-green:#6aac4b;
  --fsu-yellow:#efb33e;

  /* Variantes texte — obligatoires dès que la couleur porte du texte */
  --fsu-green-text:#3f7a28;
  --fsu-yellow-text:#8a6410;
  --fsu-blue-text:#256187;
  --fsu-blue-ink:#2c4653;

  /* Fonds doux de statut */
  --fsu-blue-soft:#eaf3f8;
  --fsu-yellow-soft:#fff8e7;
  --fsu-green-soft:#eef6ea;

  /* Neutres */
  --fsu-ink:#151515;
  --fsu-muted:#64686d;
  --fsu-line:#e2e4e7;
  --fsu-soft:#f3f5f7;

  /* Layout */
  --fsu-radius:16px;
  --fsu-radius-lg:22px;
  --fsu-radius-sm:12px;
  --fsu-container:1080px;

  /* Profondeur à trois niveaux : posé, surélevé, flottant */
  --lift-1:0 1px 2px rgba(24,30,38,.04), 0 4px 12px rgba(24,30,38,.05);
  --lift-2:0 2px 4px rgba(24,30,38,.04), 0 10px 26px rgba(24,30,38,.08);
  --lift-3:0 4px 10px rgba(24,30,38,.05), 0 20px 48px rgba(24,30,38,.11);
  --spring:cubic-bezier(.34,1.4,.5,1);

  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;

  --header-h:58px;
  --nav-h:52px;
  --stick:calc(var(--header-h) + var(--nav-h));
}

.fpvp-rw *,
.fpvp-rw *::before,
.fpvp-rw *::after{box-sizing:border-box}
.fpvp-rw h1,
.fpvp-rw h2,
.fpvp-rw h3,
.fpvp-rw h4{margin:0;line-height:1.16;letter-spacing:-.022em;font-weight:700}
.fpvp-rw p{margin:0}
.fpvp-rw a{color:var(--fsu-blue-text)}
.fpvp-rw button{font:inherit;color:inherit}

.fpvp-rw :focus-visible{outline:3px solid var(--fsu-blue);outline-offset:2px;border-radius:5px}

.fpvp-rw .num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}

/* ============================================================
   EN-TÊTE — se resserre au défilement
   ============================================================ */
.fpvp-rw .header{
  position:sticky;top:0;z-index:40;
  background:rgba(255,255,255,.88);
  backdrop-filter:saturate(1.6) blur(14px);
  -webkit-backdrop-filter:saturate(1.6) blur(14px);
  border-bottom:1px solid transparent;
  transition:border-color .2s ease,box-shadow .2s ease;
}
.fpvp-rw .header.is-stuck{border-bottom-color:var(--fsu-line);box-shadow:var(--lift-1)}

/* ============================================================
   SIGNATURE — LE RAIL DE RESPONSABILITÉ
   ============================================================ */
.fpvp-rw .nav{
  position:sticky;top:var(--header-h);z-index:30;
  background:rgba(255,255,255,.9);
  backdrop-filter:saturate(1.6) blur(14px);
  -webkit-backdrop-filter:saturate(1.6) blur(14px);
  border-bottom:1px solid var(--fsu-line);
}
.fpvp-rw .nav-scroll{
  position:relative;
  display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;
  -webkit-overflow-scrolling:touch;padding:0 12px;
  max-width:var(--fsu-container);margin:0 auto;scroll-snap-type:x proximity;
}
.fpvp-rw .seg-thumb{
  position:absolute;top:8px;height:36px;left:0;width:0;
  border-radius:999px;background:var(--thumb,var(--fsu-blue-soft));
  transition:transform .3s var(--spring),width .3s var(--spring),background .2s ease;
  pointer-events:none;
}
.fpvp-rw .nav-scroll::-webkit-scrollbar{display:none}

.fpvp-rw .seg{
  position:relative;flex:none;scroll-snap-align:center;
  height:var(--nav-h);padding:0 15px;
  display:inline-flex;align-items:center;gap:8px;
  background:none;border:0;cursor:pointer;
  font-size:14px;font-weight:600;color:var(--fsu-muted);
  white-space:nowrap;transition:color .2s ease;
}
.fpvp-rw .seg:hover{color:var(--fsu-ink)}
.fpvp-rw .seg[aria-selected="true"]{color:var(--fsu-ink)}
.fpvp-rw .seg[aria-selected="true"]{color:var(--seg-text,var(--fsu-blue-text))}

.fpvp-rw .dot{
  width:9px;height:9px;border-radius:50%;flex:none;
  background:var(--seg-color,var(--fsu-blue));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--seg-color,var(--fsu-blue)) 18%,transparent);
}
.fpvp-rw .seg-ok{--seg-color:var(--fsu-green);--seg-text:var(--fsu-green-text);--seg-soft:var(--fsu-green-soft)}
.fpvp-rw .seg-check{--seg-color:var(--fsu-yellow);--seg-text:var(--fsu-yellow-text);--seg-soft:var(--fsu-yellow-soft)}
.fpvp-rw .seg-info{--seg-color:var(--fsu-blue);--seg-text:var(--fsu-blue-text);--seg-soft:var(--fsu-blue-soft)}

.fpvp-rw .nav-legend{
  max-width:var(--fsu-container);margin:0 auto;padding:0 16px 6px;
  display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:var(--fsu-muted);line-height:1.3;
}
.fpvp-rw .nav-legend span{display:inline-flex;align-items:center;gap:5px}
.fpvp-rw .nav-legend i{width:7px;height:7px;border-radius:50%;display:inline-block}

/* ============================================================
   ZONE PRINCIPALE
   ============================================================ */
.fpvp-rw .wrap{max-width:var(--fsu-container);margin:0 auto;padding:0 16px 104px}
.fpvp-rw .toc{display:none}

.fpvp-rw .chapter{padding:22px 0 10px;scroll-margin-top:calc(var(--stick) + 12px)}
.fpvp-rw #resultat{padding-top:14px}
.fpvp-rw .chapter[hidden]{display:none}

.fpvp-rw .chapter-head{position:relative;padding-left:19px;margin-bottom:20px}
.fpvp-rw .chapter-head::before{
  content:"";position:absolute;left:0;top:5px;bottom:5px;width:3px;
  border-radius:3px;background:var(--chap-color,var(--fsu-blue));
}
.fpvp-rw .eyebrow{
  font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--fsu-muted);display:block;margin-bottom:7px;
}
.fpvp-rw .eyebrow b{color:var(--chap-text,var(--fsu-blue-text));font-weight:700}

/* Puce d'ouverture de chapitre — annonce la couleur du chapitre */
.chapter-head .eyebrow,
.fpvp-rw .verdict .eyebrow{
  display:inline-flex;align-items:center;
  background:var(--chap-soft,var(--fsu-blue-soft));
  color:var(--chap-text,var(--fsu-blue-text));
  border-radius:999px;padding:6px 14px;margin-bottom:13px;
  letter-spacing:.09em;gap:7px;
}
.chapter-head .eyebrow b,
.fpvp-rw .verdict .eyebrow b{color:inherit}
.fpvp-rw .chapter-head h2{font-size:26px;margin-bottom:9px;letter-spacing:-.028em}
.fpvp-rw .chapter-head p{color:var(--fsu-muted);font-size:15.5px;max-width:62ch}

.fpvp-rw .chap-ok{--chap-color:var(--fsu-green);--chap-text:var(--fsu-green-text);--chap-soft:var(--fsu-green-soft)}
.fpvp-rw .chap-check{--chap-color:var(--fsu-yellow);--chap-text:var(--fsu-yellow-text);--chap-soft:var(--fsu-yellow-soft)}
.fpvp-rw .chap-info{--chap-color:var(--fsu-blue);--chap-text:var(--fsu-blue-text);--chap-soft:var(--fsu-blue-soft)}

/* ============================================================
   VERDICT
   ============================================================ */
.fpvp-rw .verdict{
  background:#fff;border-radius:var(--fsu-radius-lg);
  box-shadow:var(--lift-3);overflow:hidden;margin-top:8px;
}
.fpvp-rw .verdict-body{padding:26px 20px 22px}
.fpvp-rw .verdict h1{font-size:31px;line-height:1.1;margin-bottom:12px;max-width:20ch;letter-spacing:-.032em}
.fpvp-rw .verdict-lede{font-size:16.5px;color:var(--fsu-muted);max-width:56ch;margin-bottom:20px}

.fpvp-rw .scope{
  border:1px solid color-mix(in srgb,var(--fsu-green) 34%,var(--fsu-line));
  border-radius:12px;padding:15px 16px;
  display:flex;align-items:center;gap:14px;background:var(--fsu-green-soft);
}

.fpvp-rw .attention{
  margin-top:12px;
  border:1px solid color-mix(in srgb,var(--fsu-yellow) 45%,var(--fsu-line));
  background:var(--fsu-yellow-soft);border-radius:12px;padding:14px 16px;
  display:flex;gap:12px;align-items:flex-start;font-size:14.5px;
}
.fpvp-rw .attention svg{width:20px;height:20px;flex:none;color:var(--fsu-yellow-text);margin-top:1px}

.fpvp-rw .identity{border-top:1px solid var(--fsu-line);background:var(--fsu-soft);padding:17px 20px}
.fpvp-rw .identity-title{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--fsu-muted);margin-bottom:11px;
}
.fpvp-rw .identity-intro{margin:-4px 0 11px;font-size:13.5px;line-height:1.45;color:var(--fsu-muted)}
.fpvp-rw .identity-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:1px;
  background:var(--fsu-line);border:1px solid var(--fsu-line);
  border-radius:11px;overflow:hidden;
}
.fpvp-rw .idcell{background:#fff;padding:11px 13px}
.fpvp-rw .idcell dt{font-size:11.5px;color:var(--fsu-muted);margin-bottom:2px}
.fpvp-rw .idcell dd{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em}


/* ============================================================
   CARTES
   ============================================================ */
.fpvp-rw .cards{display:grid;gap:13px}

.fpvp-rw .card{
  position:relative;background:#fff;
  border:0;border-radius:var(--fsu-radius);
  padding:19px;overflow:hidden;
  box-shadow:var(--lift-1);
  transition:box-shadow .24s ease,transform .24s var(--spring);
}
@media (hover:hover) and (pointer:fine){
  .fpvp-rw .card:hover{box-shadow:var(--lift-2);transform:translateY(-3px)}}
.fpvp-rw .card-ok{--card-color:var(--fsu-green);--card-ink:var(--fsu-green-text);--card-soft:var(--fsu-green-soft)}
.fpvp-rw .card-check{--card-color:var(--fsu-yellow);--card-ink:var(--fsu-yellow-text);--card-soft:var(--fsu-yellow-soft)}
.fpvp-rw .card-info{--card-color:var(--fsu-blue);--card-ink:var(--fsu-blue-text);--card-soft:var(--fsu-blue-soft)}

.fpvp-rw .card-top{display:flex;align-items:flex-start;gap:10px;margin-bottom:11px}
/* Le statut est porté par une tuile colorée : un objet, jamais un trait */
.fpvp-rw .card-badge{
  display:inline-flex;align-items:center;gap:11px;
  font-size:11.5px;font-weight:700;letter-spacing:.055em;text-transform:uppercase;
  color:var(--card-ink);flex:none;
}
.fpvp-rw .card-badge svg{
  width:36px;height:36px;padding:9px;flex:none;
  background:var(--card-soft);color:var(--card-ink);
  border-radius:11px;box-sizing:border-box;
  stroke-width:2.4;
}

.fpvp-rw .card h3{font-size:17.5px;margin:0 0 5px;letter-spacing:-.022em}
.fpvp-rw .card-amount{
  font-size:29px;font-weight:700;letter-spacing:-.032em;
  display:block;margin:4px 0 10px;line-height:1.05;
}
.fpvp-rw .card-amount i{font-style:normal;opacity:.5;font-weight:600;font-size:20px}
.fpvp-rw .card-amount small{font-size:13px;font-weight:600;color:var(--fsu-muted);letter-spacing:0;margin-left:7px}
.fpvp-rw .card p{font-size:14.5px;color:var(--fsu-muted);line-height:1.52}
.fpvp-rw .card p + p{margin-top:9px}
.fpvp-rw .card p strong{color:var(--fsu-ink);font-weight:600}

.fpvp-rw .card-cta{
  margin-top:13px;display:inline-flex;align-items:center;gap:9px;
  min-height:44px;padding:9px 15px;
  border:1px solid var(--fsu-line);border-radius:10px;
  background:#fff;color:var(--fsu-ink);
  font-size:14.5px;font-weight:600;line-height:1.35;text-align:left;
  cursor:pointer;text-decoration:none;
  transition:border-color .16s ease,background .16s ease,transform .12s ease;
}
.fpvp-rw .card-cta:hover{border-color:var(--fsu-blue);background:var(--fsu-blue-soft)}
.fpvp-rw .card-cta:active{transform:translateY(1px)}
.fpvp-rw .card-cta svg{width:16px;height:16px;color:var(--fsu-blue-text);flex:none}

.fpvp-rw .limit{
  margin-top:12px;
  background:var(--fsu-blue-soft);
  border-radius:12px;
  padding:13px 15px;font-size:13.5px;line-height:1.5;
  color:var(--fsu-blue-ink);
}
.fpvp-rw .limit b{color:var(--fsu-blue-text)}


/* ============================================================
   TABLE DES VALEURS LUES MAIS NON RECALCULÉES
   ============================================================ */
.fpvp-rw .readonly{
  margin-top:20px;
  background:#fff;border:0;
  border-radius:var(--fsu-radius);overflow:hidden;box-shadow:var(--lift-1);
}
.fpvp-rw .readonly-head{padding:15px 17px;border-bottom:1px solid var(--fsu-line)}
.fpvp-rw .readonly-head h3{font-size:17px;margin-bottom:5px}
.fpvp-rw .readonly-head p{font-size:14px;color:var(--fsu-muted)}
.fpvp-rw .rorow{
  display:flex;align-items:baseline;gap:12px;padding:12px 17px;
  border-bottom:1px solid var(--fsu-line);
}
.fpvp-rw .rorow:last-child{border-bottom:0}
.fpvp-rw .rorow-label{flex:1;min-width:0;font-family:var(--mono);font-size:13.5px}
.fpvp-rw .rorow-label small{
  display:block;font-family:var(--sans);font-size:12.5px;
  color:var(--fsu-muted);margin-top:2px;line-height:1.4;
}
.fpvp-rw .rorow b{font-variant-numeric:tabular-nums;font-weight:700;font-size:15px;flex:none;letter-spacing:-.02em}
.fpvp-rw .step{flex:1;position:relative;display:flex;flex-direction:column;justify-content:flex-end;padding:0 3px}

/* Garantie SMIC : le brut monte, le net recule */
.fpvp-rw .smicflow{
  display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:stretch;
  margin:14px 0 4px;
}
.fpvp-rw .smicstep{
  background:var(--fsu-soft);border-radius:12px;padding:13px 14px;text-align:left;
}
.fpvp-rw .smicstep b{
  display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--fsu-muted);margin-bottom:9px;font-weight:600;
}
.fpvp-rw .smicline{
  display:flex;justify-content:space-between;gap:8px;
  font-size:13px;padding:3px 0;font-variant-numeric:tabular-nums;
}
.fpvp-rw .smicline span{color:var(--fsu-muted)}
.fpvp-rw .smicline em{font-style:normal;font-weight:600}
.fpvp-rw .smicline--net{
  margin-top:7px;padding-top:8px;border-top:1px solid var(--fsu-line);
  font-size:14.5px;font-weight:700;
}
.fpvp-rw .smicarrow{
  display:grid;place-items:center;color:var(--fsu-muted);align-self:center;
}
.fpvp-rw .smicarrow svg{width:22px;height:22px}
.fpvp-rw .smicverdict{
  margin-top:12px;border-radius:12px;padding:14px 16px;
  background:var(--fsu-yellow-soft);
  border:1px solid color-mix(in srgb,var(--fsu-yellow) 45%,var(--fsu-line));
  font-size:14.5px;
}
.fpvp-rw .smicverdict b{color:var(--fsu-yellow-text)}
@media (max-width:520px){
  .fpvp-rw .smicflow{grid-template-columns:1fr;gap:8px}
  .fpvp-rw .smicarrow{transform:rotate(90deg);padding:2px 0}}
.fpvp-rw .gain{
  display:inline-flex;align-items:baseline;gap:6px;
  background:var(--fsu-blue-soft);border-radius:9px;padding:5px 10px;
  font-weight:700;color:var(--fsu-blue-text);
}

/* ============================================================
   GLOSSAIRE ET TRANSCRIPTION
   ============================================================ */
.fpvp-rw .glossary{display:grid;gap:9px}

/* ============================================================
   PAGER MOBILE
   ============================================================ */
.fpvp-rw .pager{
  position:fixed;left:0;right:0;bottom:0;z-index:35;
  background:rgba(255,255,255,.94);
  backdrop-filter:saturate(1.6) blur(14px);
  -webkit-backdrop-filter:saturate(1.6) blur(14px);
  border-top:1px solid var(--fsu-line);
  padding:8px 12px calc(8px + env(safe-area-inset-bottom));display:flex;gap:8px;
}
.fpvp-rw .pager button{
  flex:1;min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:#fff;border:1px solid var(--fsu-line);border-radius:11px;
  font-size:14.5px;font-weight:600;cursor:pointer;padding:0 12px;
  transition:border-color .16s ease,background .16s ease,transform .12s ease;
}
.fpvp-rw .pager button:hover:not(:disabled){border-color:var(--fsu-ink)}
.fpvp-rw .pager button:active:not(:disabled){transform:scale(.98)}
.fpvp-rw .pager button:disabled{opacity:.4;cursor:default}
.fpvp-rw .pager button svg{width:17px;height:17px;flex:none;color:var(--fsu-muted)}
.fpvp-rw .pager .pager-next{background:var(--fsu-ink);color:#fff;border-color:var(--fsu-ink);box-shadow:var(--lift-2)}
.fpvp-rw .pager .pager-next svg{color:#fff}
.fpvp-rw .pager-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ============================================================
   PANNEAUX (page dédiée + menu du site)
   ============================================================ */
.fpvp-rw .panel{
  position:fixed;inset:8px 0 0;z-index:60;background:#fff;
  border-radius:22px 22px 0 0;
  display:flex;flex-direction:column;overflow:hidden;
  transform:translateY(100%);visibility:hidden;
  box-shadow:0 -8px 40px rgba(24,30,38,.2);
  transition:transform .32s cubic-bezier(.32,.72,0,1),visibility .32s;
}
.fpvp-rw .panel-grip{
  flex:none;display:flex;justify-content:center;padding:9px 0 3px;
}
.fpvp-rw .panel-grip span{width:38px;height:4px;border-radius:999px;background:var(--fsu-line)}
.fpvp-rw .panel.is-open{transform:translateY(0);visibility:visible}
.fpvp-rw .panel-bar{
  flex:none;border-bottom:1px solid var(--fsu-line);
  padding:calc(8px + env(safe-area-inset-top)) 12px 8px;
  display:flex;align-items:center;gap:10px;
}
.fpvp-rw .panel-back{
  display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 15px 0 11px;
  background:var(--fsu-soft);border:1px solid var(--fsu-line);border-radius:11px;
  font-size:14.5px;font-weight:600;cursor:pointer;
}
.fpvp-rw .panel-back:hover{border-color:var(--fsu-ink)}
.fpvp-rw .panel-back svg{width:18px;height:18px;color:var(--fsu-blue-text)}
.fpvp-rw .panel-title{
  flex:1;min-width:0;text-align:right;font-size:13px;color:var(--fsu-muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.fpvp-rw .panel-frame{flex:1;position:relative;background:var(--fsu-soft);overflow:auto}
.fpvp-rw .panel-fake{max-width:720px;margin:0 auto;padding:28px 20px 60px}
.fpvp-rw .panel-fake h1{font-size:27px;margin-bottom:13px;letter-spacing:-.03em}
.fpvp-rw .panel-fake p{color:var(--fsu-muted);margin-bottom:15px;font-size:15.5px}

/* Menu du site */
.fpvp-rw .menu-list{list-style:none;margin:0;padding:0;max-width:520px;margin:0 auto}
.fpvp-rw .menu-list li{margin-bottom:8px}
.fpvp-rw .menu-item{
  width:100%;display:flex;align-items:center;gap:13px;
  min-height:56px;padding:12px 15px;
  background:#fff;border:1px solid var(--fsu-line);border-radius:12px;
  cursor:pointer;text-align:left;font-size:15.5px;font-weight:600;
  box-shadow:var(--lift-1);
  transition:border-color .16s ease,transform .12s ease,box-shadow .16s ease;
}
.fpvp-rw .menu-item:hover{border-color:var(--fsu-blue);box-shadow:var(--lift-2)}
.fpvp-rw .menu-item:active{transform:scale(.99)}
.fpvp-rw .menu-item small{display:block;font-size:12.5px;font-weight:400;color:var(--fsu-muted);margin-top:2px}
.fpvp-rw .menu-item .mi-icon{
  width:38px;height:38px;flex:none;border-radius:10px;display:grid;place-items:center;
  background:var(--fsu-blue-soft);color:var(--fsu-blue-text);
}
.fpvp-rw .menu-item .mi-icon svg{width:19px;height:19px}
.fpvp-rw .menu-item .mi-text{flex:1;min-width:0}
.fpvp-rw .menu-item .mi-go{width:17px;height:17px;flex:none;color:var(--fsu-muted)}

.fpvp-rw .backdrop{
  position:fixed;inset:0;z-index:55;background:rgba(21,21,21,.42);
  opacity:0;visibility:hidden;transition:opacity .28s ease,visibility .28s;
}
.fpvp-rw .backdrop.is-open{opacity:1;visibility:visible}

/* ============================================================
   DESKTOP ≥1024px
   ============================================================ */
@media (min-width:1024px){
  .fpvp-rw{--stick:var(--header-h)}
  .fpvp-rw .nav{display:none}

  .fpvp-rw .layout{
    max-width:var(--fsu-container);margin:0 auto;padding:0 24px 80px;
    display:grid;grid-template-columns:240px 1fr;gap:44px;align-items:start;
  }
  .fpvp-rw .wrap{max-width:none;margin:0;padding:0}

  .fpvp-rw .toc{display:block;position:sticky;top:calc(var(--header-h) + 26px);padding:26px 0 0}
  .fpvp-rw .toc-title{
    font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
    text-transform:uppercase;color:var(--fsu-muted);margin-bottom:13px;padding-left:22px;
  }
  .fpvp-rw .toc-list{list-style:none;margin:0;padding:0;position:relative}
  .fpvp-rw .toc-list::before{
    content:"";position:absolute;left:5px;top:14px;bottom:14px;width:2px;
    background:var(--fsu-line);border-radius:2px;
  }
  .fpvp-rw .toc-fill{
    position:absolute;left:5px;top:14px;width:2px;border-radius:2px;
    background:linear-gradient(180deg,var(--fsu-green),var(--fsu-blue));
    height:0;transition:height .32s cubic-bezier(.32,.72,0,1);
  }
  .fpvp-rw .toc-list li{position:relative}
  .fpvp-rw .toc-link{
    display:flex;align-items:center;gap:12px;width:100%;
    min-height:44px;padding:6px 10px 6px 22px;
    background:none;border:0;border-radius:9px;text-align:left;cursor:pointer;
    font-size:14.5px;font-weight:600;color:var(--fsu-muted);
    transition:color .16s ease,background .16s ease;
  }
  .fpvp-rw .toc-link:hover{color:var(--fsu-ink);background:var(--fsu-soft)}
  .fpvp-rw .toc-link[aria-current="true"]{color:var(--fsu-ink)}
  .fpvp-rw .toc-link .dot{
    position:absolute;left:0;width:12px;height:12px;background:#fff;
    border:2.5px solid var(--seg-color,var(--fsu-blue));box-shadow:none;
    transition:transform .18s cubic-bezier(.32,.72,0,1);
  }
  .fpvp-rw .toc-link[aria-current="true"] .dot{background:var(--seg-color,var(--fsu-blue));transform:scale(1.2)}
  .fpvp-rw .toc-num{font-family:var(--mono);font-size:11px;color:var(--fsu-muted);letter-spacing:.04em;flex:none}

  .fpvp-rw .chapter{display:block !important;padding:0 0 48px}
  .fpvp-rw .chapter + .chapter{border-top:1px solid var(--fsu-line);padding-top:40px}
  .fpvp-rw .chapter-head h2{font-size:30px}

  .fpvp-rw .verdict{margin-top:26px}
  .fpvp-rw .verdict-body{padding:36px 32px 28px}
  .fpvp-rw .verdict h1{font-size:41px}
  .fpvp-rw .verdict-lede{font-size:18px}
  .fpvp-rw .identity{padding:22px 32px}
  .fpvp-rw .identity-grid{grid-template-columns:repeat(auto-fit,minmax(158px,1fr))}

  .fpvp-rw .cards{grid-template-columns:repeat(2,1fr)}
  .fpvp-rw .cards .card--full{grid-column:1 / -1}

  .fpvp-rw .pager{display:none}
  .fpvp-rw .export-actions{grid-template-columns:repeat(2,1fr)}

  .fpvp-rw .panel{
    inset:0 0 0 auto;width:min(560px,46vw);
    border-left:1px solid var(--fsu-line);
    box-shadow:-18px 0 48px rgba(24,30,38,.16);
    transform:translateX(100%);
  }
  .fpvp-rw .panel.is-open{transform:translateX(0)}
  .fpvp-rw .panel-fake{padding:28px 30px 60px}
}

@media (min-width:1024px) and (max-width:1200px){
  .fpvp-rw .layout{grid-template-columns:204px 1fr;gap:30px}}
@media (max-width:359px){
  .fpvp-rw .verdict h1{font-size:26px}
  .fpvp-rw .chapter-head h2{font-size:22px}
  .fpvp-rw .card-amount{font-size:24px}}

/* ============================================================
   MOUVEMENT
   ============================================================ */
@media (prefers-reduced-motion:reduce){
  .fpvp-rw *,
.fpvp-rw *::before,
.fpvp-rw *::after{
    animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;scroll-behavior:auto !important;
  }
}
@media (prefers-reduced-motion:no-preference){
  .fpvp-rw .chapter.is-entering{animation:slidein .24s cubic-bezier(.32,.72,0,1) both}
  @keyframes slidein{
    from{opacity:0;transform:translateX(var(--dir,16px))}
    to{opacity:1;transform:none}}
  .fpvp-rw html{scroll-behavior:smooth}}

/* ============================================================
   IMPRESSION / PDF
   ============================================================ */
@media print{
  .fpvp-rw .header,
.fpvp-rw .nav,
.fpvp-rw .pager,
.fpvp-rw .toc,
.fpvp-rw .panel,
.fpvp-rw .backdrop,
.fpvp-rw .export,
.fpvp-rw .skip,
.fpvp-rw .explain-box{display:none !important}
  .fpvp-rw body{background:#fff;background-image:none}
  .fpvp-rw .layout{display:block;padding:0}
  .fpvp-rw .chapter{display:block !important;page-break-inside:avoid;border-top:1px solid #ccc}
  .fpvp-rw .card,
.fpvp-rw .verdict,
.fpvp-rw .ladder,
.fpvp-rw .readonly,
.fpvp-rw .gitem,
.fpvp-rw .rawlist,
.fpvp-rw .fsu-help{box-shadow:none;border:1px solid #ccc}
  .fpvp-rw .card:hover{transform:none}
  .fpvp-rw .gitem .gbody{display:block !important}
  .fpvp-rw a[href^="http"]::after{content:" (" attr(href) ")";font-size:11px;color:#555}
}

/* ------------------------------------------------------------------
   Compléments propres au rendu dynamique (pastilles de légende, iframe)
   ------------------------------------------------------------------ */
.fpvp-rw .nav-legend i{width:7px;height:7px;border-radius:50%;display:inline-block}
.fpvp-rw .legend-ok{background:var(--fsu-green)}
.fpvp-rw .legend-check{background:var(--fsu-yellow)}
.fpvp-rw .legend-info{background:var(--fsu-blue)}
.fpvp-rw .panel-frame iframe{width:100%;height:100%;border:0;display:block}
.fpvp-rw .card-body > *:first-child{margin-top:0}
.fpvp-rw .card-body p{font-size:14.5px;color:var(--fsu-muted);line-height:1.52}
.fpvp-rw .card-body p + p{margin-top:9px}
.fpvp-rw .card-body a{color:var(--fsu-blue-text);text-decoration:underline}
/* Un nombre impair de champs ne doit jamais laisser de cellule vide. */
.fpvp-rw .idcell:last-child:nth-child(odd){grid-column:1 / -1}
@media (min-width:1024px){
  .fpvp-rw .idcell:last-child:nth-child(odd){grid-column:auto}}

/* ------------------------------------------------------------------
   Défilement assisté de la barre de chapitres (mobile)

   Sur un écran étroit, trois chapitres sur neuf sont visibles. Sans
   affordance explicite, un agent peu à l'aise ne découvre jamais les
   suivants — donc jamais les points à réclamer. Dégradés de bord pour
   signaler la suite, flèches pour l'atteindre sans geste de glissement.
   ------------------------------------------------------------------ */
.fpvp-rw .nav-rail{position:relative}

.fpvp-rw .nav-fade{
  position:absolute;top:0;bottom:0;width:44px;pointer-events:none;z-index:2;
  opacity:0;transition:opacity .2s ease;
}
.fpvp-rw .nav-fade--start{left:0;background:linear-gradient(90deg,#fff 20%,rgba(255,255,255,0))}
.fpvp-rw .nav-fade--end{right:0;background:linear-gradient(270deg,#fff 20%,rgba(255,255,255,0))}
.fpvp-rw .nav-rail.can-start .nav-fade--start,
.fpvp-rw .nav-rail.can-end .nav-fade--end{opacity:1}

.fpvp-rw .nav-arrow{
  position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  width:40px;height:40px;
  display:none;align-items:center;justify-content:center;
  background:#fff;color:var(--fsu-ink);
  border:1px solid var(--fsu-line);border-radius:50%;
  box-shadow:var(--lift-2);cursor:pointer;padding:0;
}
/* La cible tactile fait 44 px, le disque visible en fait 40. */
.fpvp-rw .nav-arrow::after{content:"";position:absolute;inset:-2px}
.fpvp-rw .nav-arrow svg{width:20px;height:20px}
.fpvp-rw .nav-arrow:active{transform:translateY(-50%) scale(.92)}
.fpvp-rw .nav-arrow--start{left:4px}
.fpvp-rw .nav-arrow--end{right:4px}
/* Une flèche en bout de course disparaît : jamais de commande inerte. */
.fpvp-rw .nav-rail.can-start .nav-arrow--start,
.fpvp-rw .nav-rail.can-end .nav-arrow--end{display:inline-flex}
.fpvp-rw .nav-rail.can-start .nav-scroll{padding-left:50px}
.fpvp-rw .nav-rail.can-end .nav-scroll{padding-right:50px}

@media (min-width:1024px){
  .fpvp-rw .nav-arrow,
.fpvp-rw .nav-fade{display:none}}

/* ------------------------------------------------------------------
   Largeur du rapport sur grand écran

   La charte fixe --fsu-container à 1080px, valeur juste pour une page
   éditoriale où la longueur de ligne gouverne la lisibilité. Un rapport
   à sommaire latéral + cartes en deux colonnes n'obéit pas à la même
   règle : 1080 - 240 de sommaire ne laisse que ~800px de contenu, soit
   deux colonnes étriquées. Exception assumée, limitée à ce composant.
   ------------------------------------------------------------------ */
@media (min-width:1024px){
  .fpvp-rw .layout{
    max-width:1320px;
    grid-template-columns:250px 1fr;
    gap:48px;
    padding-left:32px;padding-right:32px;
  }
}
@media (min-width:1500px){
  .fpvp-rw .layout{max-width:1440px;gap:56px}
  .fpvp-rw .cards{gap:16px}
  .fpvp-rw .verdict h1{font-size:44px}}
/* Le conteneur hérité porte un fond blanc, une bordure et une ombre : dans la
   présentation par chapitres, cela produit une carte blanche dans une carte
   blanche et bride la largeur. Ici, il n'est plus qu'un cadre transparent. */
.fpvp-verifier-webapp .fpvp-report.fpvp-rw{
  background:transparent;
  border:0;
  border-radius:0;
  box-shadow:none;
  padding:0;
  margin:0;
  width:100%;
  max-width:none;
  flex:1 1 auto;
  align-self:stretch;
}

/* ------------------------------------------------------------------
   Bande d'identité : aucune case vide, quel que soit le nombre de champs

   Le nombre de champs varie (6 à 8) selon ce que le bulletin permet de
   lire. Les filets étaient obtenus par un gap de 1px laissant voir le
   fond du conteneur : toute case non remplie devenait alors un aplat
   gris. Les filets sont désormais portés par les cellules elles-mêmes,
   donc l'espace restant est simplement blanc, donc invisible.
   ------------------------------------------------------------------ */
.fpvp-rw .identity-grid{background:#fff;gap:0;border:1px solid var(--fsu-line)}
.fpvp-rw .idcell{
  border-right:1px solid var(--fsu-line);
  border-bottom:1px solid var(--fsu-line);
}

/* ==================================================================
   Correctifs issus de la première recette en production
   ================================================================== */

/* 1. La barre de chapitres se collait à 58px du haut — un décalage prévu
      pour l'en-tête de la maquette, absent ici. D'où un vide de la hauteur
      d'un header au défilement. En production, elle se colle en haut. */
.fpvp-rw .nav{top:0}
.fpvp-rw .chapter{scroll-margin-top:calc(var(--nav-h) + 12px)}
@media (min-width:1024px){
  .fpvp-rw .chapter{scroll-margin-top:24px}}

/* 2. Les commandes de navigation reprennent la couleur du chapitre visé :
      la couleur devient une aide au repérage, pas une décoration. */
.fpvp-rw .pager button{
  background:var(--pager-soft,#fff);
  border-color:transparent;
  color:var(--pager-ink,var(--fsu-ink));
  font-weight:700;
}
.fpvp-rw .pager button svg{color:currentColor}
.fpvp-rw .pager button:disabled{background:#fff;border-color:var(--fsu-line);color:var(--fsu-muted)}
.fpvp-rw .pager .pager-next{
  background:var(--pager-next-color,var(--fsu-ink));
  border-color:transparent;color:#fff;
  box-shadow:0 4px 14px rgba(24,30,38,.16);
}
.fpvp-rw .pager .pager-next svg{color:#fff}
.fpvp-rw .pager .pager-next:disabled{background:#fff;color:var(--fsu-muted);box-shadow:none}
.fpvp-rw .pg-ok{--pager-soft:var(--fsu-green-soft);--pager-ink:var(--fsu-green-text);--pager-next-color:var(--fsu-green-text)}
.fpvp-rw .pg-check{--pager-soft:var(--fsu-yellow-soft);--pager-ink:var(--fsu-yellow-text);--pager-next-color:var(--fsu-yellow-text)}
.fpvp-rw .pg-info{--pager-soft:var(--fsu-blue-soft);--pager-ink:var(--fsu-blue-text);--pager-next-color:var(--fsu-blue-text)}


/* 4. Les blocs repris au renderer d'origine (glossaire, lignes lues, partage)
      arrivaient sans aucun style dans ce contexte. On leur donne la même
      matière que les autres cartes plutôt que de dupliquer leur logique. */
.fpvp-rw .fpvp-understanding,
.fpvp-rw .fpvp-ai-readings,
.fpvp-rw .fpvp-report-share{
  background:#fff;border:0;border-radius:var(--fsu-radius);
  box-shadow:var(--lift-1);padding:19px;margin-top:13px;
}
.fpvp-rw .fpvp-understanding > summary,
.fpvp-rw .fpvp-ai-readings > summary{
  list-style:none;cursor:pointer;display:flex;align-items:center;
  justify-content:space-between;gap:12px;min-height:44px;
  font-size:17.5px;font-weight:700;letter-spacing:-.022em;
}
.fpvp-rw .fpvp-understanding > summary::-webkit-details-marker,
.fpvp-rw .fpvp-ai-readings > summary::-webkit-details-marker{display:none}
.fpvp-rw .fpvp-understanding summary small,
.fpvp-rw .fpvp-ai-readings summary small{
  font-size:11px;font-weight:700;letter-spacing:.055em;text-transform:uppercase;
  color:var(--fsu-blue-text);background:var(--fsu-blue-soft);
  border-radius:999px;padding:5px 11px;white-space:nowrap;
}
.fpvp-rw .fpvp-section-intro{font-size:14.5px;color:var(--fsu-muted);margin:10px 0 14px;line-height:1.52}
/* Une ligne de glossaire = un bloc lisible, plus une liste à puces serrée. */
.fpvp-rw .fpvp-understanding ul,
.fpvp-rw .fpvp-ai-readings ul{list-style:none;margin:0;padding:0;display:grid;gap:9px}
.fpvp-rw .fpvp-understanding li,
.fpvp-rw .fpvp-ai-readings li{
  background:var(--fsu-soft);border-radius:12px;padding:13px 15px;
  font-size:14.5px;line-height:1.52;color:var(--fsu-muted);
}
.fpvp-rw .fpvp-understanding li strong,
.fpvp-rw .fpvp-ai-readings li strong{
  color:var(--fsu-ink);font-family:var(--mono);font-size:13.5px;font-weight:600;
}
.fpvp-rw .fpvp-understanding li b,
.fpvp-rw .fpvp-ai-readings li b{color:var(--fsu-ink)}

/* 5. Chapitre sans contenu : un message, jamais une page blanche. */
.fpvp-rw .empty-note{
  background:#fff;border:0;border-radius:var(--fsu-radius);
  box-shadow:var(--lift-1);padding:22px;
  display:flex;gap:14px;align-items:flex-start;
}
.fpvp-rw .empty-note svg{
  width:36px;height:36px;padding:9px;flex:none;box-sizing:border-box;
  background:var(--fsu-green-soft);color:var(--fsu-green-text);border-radius:11px;
}
.fpvp-rw .empty-note h3{font-size:17.5px;margin-bottom:5px;letter-spacing:-.022em}
.fpvp-rw .empty-note p{font-size:14.5px;color:var(--fsu-muted);line-height:1.52}
.fpvp-rw .empty-note p + p{margin-top:8px}
.fpvp-rw .empty-note--info svg{background:var(--fsu-blue-soft);color:var(--fsu-blue-text)}

/* Garde-fou : toute icône d'un élément de menu reste à taille fixe. */
.fpvp-rw .menu-item svg{flex:none}
.fpvp-rw .menu-item .mi-go{width:18px;height:18px}
.fpvp-rw .menu-item .mi-text{flex:1 1 auto;min-width:0}

/* Écart : la valeur lue et la valeur attendue, côte à côte. */
.fpvp-rw .card-expected{
  margin-top:-4px;margin-bottom:10px;
  font-size:14px;color:var(--fsu-muted);
}
.fpvp-rw .card-expected strong{color:var(--fsu-ink);font-weight:700}

/* ------------------------------------------------------------------
   Bouton « chapitre suivant » : fond en couleur de marque pleine.

   Utiliser la variante texte assombrie comme fond donnait un brun terne.
   La couleur du logo en aplat est plus franche — le texte s'adapte : encre
   sur vert (6,62) et sur jaune (9,73), blanc sur bleu (4,63).
   ------------------------------------------------------------------ */
.fpvp-rw .pager .pager-next{background:var(--fsu-ink);color:#fff}
.fpvp-rw .pager .pager-next svg{color:currentColor}
.fpvp-rw .pager .pager-next.pg-ok{background:var(--fsu-green);color:var(--fsu-ink)}
.fpvp-rw .pager .pager-next.pg-check{background:var(--fsu-yellow);color:var(--fsu-ink)}
.fpvp-rw .pager .pager-next.pg-info{background:var(--fsu-blue);color:#fff}
.fpvp-rw .pager .pager-next.pg-ok{box-shadow:0 4px 14px rgba(106,172,75,.32)}
.fpvp-rw .pager .pager-next.pg-check{box-shadow:0 4px 14px rgba(239,179,62,.34)}
.fpvp-rw .pager .pager-next.pg-info{box-shadow:0 4px 14px rgba(48,123,170,.30)}

/* Les libellés d'état de la bibliothèque peuvent être longs
   (« Montant non vérifiable nationalement ») : la pastille doit pouvoir
   revenir à la ligne au lieu de déborder de la carte. */
.fpvp-rw .card-top{flex-wrap:wrap}
.fpvp-rw .card-badge{flex:1 1 auto;min-width:0;align-items:flex-start}
.fpvp-rw .card-badge svg{margin-top:-1px}

/* ------------------------------------------------------------------
   Bouton « chapitre suivant » : texte blanc sur fond plein.

   Blanc sur le vert du logo (#6aac4b) ne donne que 2,76 — illisible.
   Le vert est donc assombri juste assez pour porter du blanc à 4,64,
   sans cesser d'être vert. Le bleu du logo accepte déjà le blanc (4,63).

   Le jaune fait exception : aucune teinte ne porte du blanc à 4,5 sans
   virer à l'olive. Il conserve donc l'encre, qui y atteint 9,73 — le
   meilleur contraste des trois.
   ------------------------------------------------------------------ */
.fpvp-rw .pager .pager-next.pg-ok{background:#4f8138;color:#fff}
.fpvp-rw .pager .pager-next.pg-ok svg{color:#fff}
.fpvp-rw .pager .pager-next.pg-ok{box-shadow:0 4px 14px rgba(79,129,56,.34)}
.fpvp-rw .pager .pager-next.pg-info{background:var(--fsu-blue);color:#fff}
.fpvp-rw .pager .pager-next.pg-check{background:var(--fsu-yellow);color:var(--fsu-ink)}

/* ------------------------------------------------------------------
   Périmètre de la vérification — deux lignes, deux nombres.

   La version en prose disait la même chose en soixante-dix mots et se
   lisait comme une décharge de responsabilité. Deux lignes chiffrées se
   parcourent d'un regard, et « ensemble » engage la FSU au lieu de la
   dédouaner.
   ------------------------------------------------------------------ */
.fpvp-rw .verdict-scope{
  margin-top:14px;display:grid;gap:9px;
}
.fpvp-rw .scope-line{
  display:flex;align-items:flex-start;gap:13px;
  border-radius:12px;padding:14px 16px;
}
.fpvp-rw .scope-line svg{
  width:34px;height:34px;padding:8px;flex:none;box-sizing:border-box;
  border-radius:10px;stroke-width:2.4;
}
.fpvp-rw .scope-line--ok{background:var(--fsu-green-soft)}
.fpvp-rw .scope-line--ok svg{background:#fff;color:var(--fsu-green-text)}
.fpvp-rw .scope-line--check{background:var(--fsu-yellow-soft)}
.fpvp-rw .scope-line--check svg{background:#fff;color:var(--fsu-yellow-text)}
.fpvp-rw .scope-line--gap svg{background:#fff;color:var(--fsu-yellow-text)}
.fpvp-rw .scope-line--gap .scope-line-head{font-size:18px}
.fpvp-rw .scope-line--gap .scope-line-head strong{color:var(--fsu-yellow-text)}
.fpvp-rw .scope-line-text{flex:1;min-width:0}
.fpvp-rw .scope-line-head{
  font-size:16.5px;line-height:1.35;letter-spacing:-.015em;color:var(--fsu-ink);
}
.fpvp-rw .scope-line-head strong{font-weight:700}
.fpvp-rw .scope-line--ok .scope-line-head strong{color:var(--fsu-green-text)}
.fpvp-rw .scope-line--check .scope-line-head strong{color:var(--fsu-yellow-text)}
.fpvp-rw .scope-line-hint{
  font-size:13.5px;line-height:1.45;color:var(--fsu-muted);margin-top:2px;
}

/* ==================================================================
   Menu du site — correctif de lisibilité + refonte

   Le thème impose `button:hover { color:#fff; background:#3f4047 }`.
   `.menu-item` fixait bien son fond blanc (spécificité supérieure) mais
   ne déclarait aucune `color` : au survol, le blanc du thème s'appliquait
   sur fond blanc, rendant le libellé invisible. Toute couleur est
   désormais déclarée explicitement, dans les deux états.
   ================================================================== */
.fpvp-rw .menu-item,
.fpvp-rw .menu-item:hover,
.fpvp-rw .menu-item:focus,
.fpvp-rw .menu-item:focus-visible,
.fpvp-rw .menu-item:active{
  color:var(--fsu-ink);
  background:#fff;
}
.fpvp-rw .menu-item:hover,
.fpvp-rw .menu-item:focus-visible{
  background:var(--fsu-blue-soft);
  border-color:transparent;
  box-shadow:var(--lift-2);
}
.fpvp-rw .menu-item:hover .mi-icon,
.fpvp-rw .menu-item:focus-visible .mi-icon{
  background:#fff;
}
.fpvp-rw .menu-item:hover .mi-go,
.fpvp-rw .menu-item:focus-visible .mi-go{
  color:var(--fsu-blue-text);
  transform:translateX(2px);
}

/* Refonte : rangée plus aérée, séparateur discret, chevron animé */
.fpvp-rw .menu-list{max-width:560px;display:grid;gap:10px}
.fpvp-rw .menu-list li{margin-bottom:0}
.fpvp-rw .menu-item{
  min-height:68px;padding:14px 16px;gap:14px;
  border:1px solid var(--fsu-line);border-radius:14px;
  font-size:16px;letter-spacing:-.015em;
  transition:background .18s ease,border-color .18s ease,box-shadow .2s ease,transform .12s ease;
}
.fpvp-rw .menu-item .mi-icon{
  width:42px;height:42px;border-radius:12px;
  transition:background .18s ease;
}
.fpvp-rw .menu-item .mi-icon svg{width:20px;height:20px}
.fpvp-rw .menu-item .mi-go{transition:transform .18s ease,color .18s ease}
.fpvp-rw .menu-item small{margin-top:3px;line-height:1.45}

/* Titre du panneau : traité comme une puce de chapitre, pas un texte gris */
.fpvp-rw .panel-bar .panel-title{
  font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--fsu-blue-text);
}

/* Titre du panneau : ne jamais rogner le libellé du bouton retour, qui
   porte l'action. C'est le titre, purement informatif, qui s'efface. */
.fpvp-rw .panel-bar{gap:12px}
.fpvp-rw .panel-back{flex:none}
.fpvp-rw .panel-bar .panel-title{
  flex:1 1 auto;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
@media (max-width:420px){
  .fpvp-rw .panel-bar .panel-title{display:none}}
/* ==================================================================
   MENU DU SITE — repris du thème

   Le panneau reprend la facture du menu mobile de fsut62.fr : libellés
   en capitales, filets fins entre les entrées, page courante en rouge,
   bouton d'adhésion en pied. On ne charge pas la feuille du thème (elle
   entrerait en conflit avec l'application) : on en reprend l'apparence.
   ================================================================== */
.fpvp-rw .fpvp-site-menu{padding:4px 0 0}
.fpvp-rw .fpvp-site-menu-list{
  list-style:none;margin:0;padding:0;
}
.fpvp-rw .fpvp-site-menu-list li{margin:0}
.fpvp-rw .fpvp-site-menu-list li + li{border-top:1px solid var(--fsu-line,#e2e8f0)}
.fpvp-rw .fpvp-site-menu-list a{
  display:flex;align-items:center;
  padding:17px 4px;
  font-size:17px;font-weight:800;letter-spacing:.01em;
  text-transform:uppercase;
  color:var(--fsu-ink,#161b21);
  text-decoration:none;
  min-height:56px;
}
.fpvp-rw .fpvp-site-menu-list a:hover,
.fpvp-rw .fpvp-site-menu-list a:focus-visible{color:var(--fsu-red,#c8282f)}
/* La page courante est signalée comme sur le site : libellé rouge et filet. */
.fpvp-rw .fpvp-site-menu-list .current-menu-item > a,
.fpvp-rw .fpvp-site-menu-list .current_page_item > a{
  color:var(--fsu-red,#c8282f);
}
.fpvp-rw .fpvp-site-menu-join{
  display:flex;align-items:center;justify-content:center;
  margin:18px 0 4px;min-height:54px;
  border-radius:10px;
  background:var(--fsu-red,#c8282f);color:#fff;
  font-size:16px;font-weight:800;letter-spacing:.02em;text-transform:uppercase;
  text-decoration:none;
}
.fpvp-rw .fpvp-site-menu-join:hover{background:#a81f26}

/* Les entrées héritaient du style de carte du panneau : fond blanc, rayon
   et ombre par ligne, là où le site aligne de simples lignes séparées par
   un filet. On neutralise l'habillage hérité. */
.fpvp-rw .fpvp-site-menu{background:#fff;border-radius:14px;padding:2px 16px}
.fpvp-rw .fpvp-site-menu-list li,
.fpvp-rw .fpvp-site-menu-list li.menu-item{
  background:transparent;border-radius:0;box-shadow:none;
  padding:0;border:0;list-style:none;
}
.fpvp-rw .fpvp-site-menu-list li + li,
.fpvp-rw .fpvp-site-menu-list li.menu-item + li.menu-item{
  border-top:1px solid var(--fsu-line,#e2e8f0);
}
.fpvp-rw .fpvp-site-menu-list a{
  padding:15px 0;min-height:0;background:transparent;box-shadow:none;border:0;
}
.fpvp-rw .fpvp-site-menu-join{margin:14px 0 2px}

/* ==================================================================
   CARTES DU RAPPORT — trois temps

   1. l'état, en petites capitales, seul sur sa ligne ;
   2. l'icône et le titre à gauche, le montant à droite, alignés sur la
      même ligne : c'est le couple que l'agent cherche du regard ;
   3. l'explication.

   L'icône a quitté l'étiquette d'état pour accompagner le titre. Les
   corps de texte sont ramenés à une taille de lecture courante : à
   14,5 px sur du gris, un paragraphe de quatre lignes pesait autant
   que le montant lui-même.
   ================================================================== */
.fpvp-rw .card-top{margin-bottom:8px}
.fpvp-rw .card-badge{
  display:inline-block;gap:0;
  font-size:11px;letter-spacing:.06em;
}
/* L'icône n'est plus dans l'étiquette : sa tuile part avec elle. */
.fpvp-rw .card-badge svg{display:none}

.fpvp-rw .card-head{
  display:flex;align-items:center;gap:11px;
  margin-bottom:9px;
}
.fpvp-rw .card-icon{
  flex:0 0 auto;width:34px;height:34px;
  display:grid;place-items:center;
  background:var(--card-soft);color:var(--card-ink);
  border-radius:10px;
}
.fpvp-rw .card-icon svg{width:18px;height:18px;stroke-width:2.4}
.fpvp-rw .card-head h3{
  flex:1 1 auto;min-width:0;
  font-size:15.5px;margin:0;line-height:1.25;letter-spacing:-.015em;
}
/* Le montant répond au titre, à droite, sur la hauteur du couple. */
.fpvp-rw .card-head .card-amount{
  flex:0 0 auto;margin:0;
  font-size:19px;line-height:1.15;letter-spacing:-.025em;
  text-align:right;white-space:nowrap;
}
.fpvp-rw .card-head .card-amount small{display:block;margin:1px 0 0;font-size:11.5px}

/* Corps de texte : une taille de lecture, pas une taille de titre.

   La taille est posée sur le conteneur et non sur les seuls `p` : les textes de la
   bibliothèque rémunération sont stockés sans balise d'enveloppe (« Votre bulletin porte une
   IFSE de… » est du texte nu). Ciblés par `p` uniquement, ils héritaient de la page hôte —
   16 px sur la webapp autonome, mais 18 px dès que le rapport est rendu dans une page du thème,
   où `.fsu62-prose` impose sa propre taille de lecture. Les titres, eux, restent à 15,5 px : ils
   paraissaient alors trop petits, alors que c'est le texte autour qui avait grossi. */
.fpvp-rw .card-body{font-size:13.5px;line-height:1.5}
.fpvp-rw .card p,
.fpvp-rw .card-body p{font-size:13.5px;line-height:1.5}
.fpvp-rw .card p + p{margin-top:7px}
.fpvp-rw .card .limit{font-size:13px;line-height:1.5}
.fpvp-rw .card-expected{font-size:13.5px}

@media (max-width:520px){
  .fpvp-rw .card-head{gap:10px}
  .fpvp-rw .card-head h3{font-size:15px}
  .fpvp-rw .card-head .card-amount{font-size:17.5px}
}

/* ==================================================================
   RAPPORT — lisibilité et couleur

   1. La dernière cellule d'identité s'étalait sur toute la largeur dès
      que son rang était impair : « Période contrôlée » se retrouvait
      seule sur une troisième ligne alors que la deuxième avait de la
      place. La règle servait une grille à deux colonnes ; elle nuit dès
      qu'il y en a trois.
   2. Le titre de carte partageait sa ligne avec une tuile de 34 px : à
      15,5 px il paraissait petit à côté.
   3. La page était juste. La couleur revient par les objets — pilule
      d'état, tuile d'icône, filet de rive — jamais par un fond de carte
      teinté, qui ferait d'un point à confirmer une alerte.
   ================================================================== */
.fpvp-rw .idcell:last-child:nth-child(odd){grid-column:auto}

.fpvp-rw .card-head h3{font-size:17px;line-height:1.22}
@media (max-width:520px){
  .fpvp-rw .card-head h3{font-size:16.5px}
}

/* L'état devient une pilule teintée : il se voit sans se crier. */
.fpvp-rw .card-badge{
  padding:4px 10px;border-radius:999px;
  background:var(--card-soft);color:var(--card-ink);
}
/* Filet de rive : la couleur tient la carte sur toute sa hauteur. */
.fpvp-rw .card{position:relative;overflow:hidden}
.fpvp-rw .card::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
  background:var(--card-color);
}
.fpvp-rw .card-icon{
  background:var(--card-color);color:#fff;
}
.fpvp-rw .card-icon svg{stroke-width:2.6}

/* Une grille à colonnes fixes laisse forcément des cellules vides quand le
   nombre de champs ne tombe pas juste — trois trous à droite de « Période
   contrôlée ». En flux, la dernière ligne s'étire et remplit la largeur. */
.fpvp-rw .identity-grid{
  display:flex;flex-wrap:wrap;
}
.fpvp-rw .idcell{
  flex:1 1 150px;min-width:0;
  border-right:1px solid var(--fsu-line);
  border-bottom:1px solid var(--fsu-line);
}

/* La pilule d'état est un objet, pas une bannière : elle s'ajuste à son
   texte au lieu de s'étirer sur toute la largeur de la carte. */
.fpvp-rw .card-top{display:flex;align-items:flex-start}
.fpvp-rw .card-badge{align-self:flex-start;width:auto;flex:0 0 auto}

/* ==================================================================
   ÉCHELLE DES ÉCHELONS

   Une barre segmentée, un segment par échelon du grade : franchis en
   plein, le vôtre marqué, ceux qui restent en creux. Elle répond d'un
   coup d'œil à « où j'en suis », là où le texte seul obligeait à
   reconstituer mentalement la position.

   Les couleurs suivent la carte : la projection d'échelon est une carte
   d'information, donc bleue.
   ================================================================== */
.fpvp-rw .ladder{margin:2px 0 12px}
.fpvp-rw .ladder-head{
  display:flex;align-items:baseline;gap:7px;margin-bottom:7px;
}
.fpvp-rw .ladder-now{
  font-size:14px;font-weight:700;letter-spacing:-.01em;color:var(--card-ink);
}
.fpvp-rw .ladder-total{font-size:12.5px;color:var(--fsu-muted)}

.fpvp-rw .ladder-bar{
  display:flex;gap:3px;align-items:stretch;
  height:12px;
}
.fpvp-rw .ladder-bar.is-dense{gap:1px;height:10px}

.fpvp-rw .ladder-seg{
  flex:1 1 0;min-width:0;
  background:var(--fsu-line,#e4e9ee);
  border-radius:3px;
}
.fpvp-rw .ladder-seg.is-done{background:var(--card-soft)}
/* L'échelon occupé est le seul repère plein : il doit se voir sans compter. */
.fpvp-rw .ladder-seg.is-now{
  background:var(--card-color);
  box-shadow:0 0 0 2px color-mix(in srgb, var(--card-color) 22%, transparent);
}

.fpvp-rw .ladder-note{
  margin:8px 0 0;font-size:13px;line-height:1.45;color:var(--fsu-muted);
}

@media (max-width:520px){
  .fpvp-rw .ladder-bar{height:11px;gap:2px}
  .fpvp-rw .ladder-bar.is-dense{gap:1px;height:9px}
}

/* ==================================================================
   INVITER À POURSUIVRE

   L'écran de résultat annonce « X points vérifiés, aucun écart ». Lu
   seul, ce verdict peut suffire à faire refermer l'application, alors
   que ce qui concerne le plus l'agent — sa famille, ses fonctions, sa
   collectivité — se trouve dans les chapitres suivants. Le bloc le dit
   et propose l'étape suivante autrement que par la flèche du bas.
   ================================================================== */
.fpvp-rw .verdict-suite{
  margin-top:14px;padding-top:14px;
  border-top:1px solid var(--fsu-line,#e4e9ee);
}
.fpvp-rw .verdict-suite-texte{
  margin:0 0 11px;font-size:13.5px;line-height:1.5;color:var(--fsu-muted);
}
.fpvp-rw .verdict-suite-bouton{
  display:inline-flex;align-items:center;gap:8px;
  min-height:46px;padding:0 17px;
  border:0;border-radius:12px;cursor:pointer;
  background:var(--fsu-blue);color:#fff;
  font:inherit;font-size:14.5px;font-weight:700;letter-spacing:-.01em;
}
.fpvp-rw .verdict-suite-bouton:hover{background:#2b6f97}
.fpvp-rw .verdict-suite-bouton svg{width:17px;height:17px;flex:none}

/* ==================================================================
   PREMIÈRE PAGE — des couleurs qui tiennent devant les autres

   Les deux lignes de portée étaient posées sur des fonds très pâles,
   alors que les chapitres suivants portent des tuiles pleines et des
   filets francs : l'écran d'entrée paraissait éteint à côté. Elles
   reçoivent le même traitement que les cartes — filet de rive, pastille
   pleine, chiffre coloré.
   ================================================================== */
.fpvp-rw .scope-line{
  position:relative;overflow:hidden;
  padding-left:18px;
}
.fpvp-rw .scope-line::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
}
.fpvp-rw .scope-line--ok{background:#e9f5e3}
.fpvp-rw .scope-line--ok::before{background:var(--fsu-green)}
/* L'écart possible. Pas de rouge : la charte le réserve, et le rouge dirait une erreur
   établie alors que nous signalons un désaccord entre une valeur lue et un calcul, dont la
   cause reste à établir. La mise en avant passe donc par la place (première ligne), par un
   fond plus soutenu que « à vérifier », et par un nombre plus gros. */
.fpvp-rw .scope-line--gap{background:#fce8bf}
.fpvp-rw .scope-line--gap::before{background:var(--fsu-yellow)}
.fpvp-rw .scope-line--check{background:#fef3dc}
.fpvp-rw .scope-line--check::before{background:var(--fsu-yellow)}

/* La pastille passe en couleur pleine, comme l'icône des cartes. */
.fpvp-rw .scope-line--ok svg{background:var(--fsu-green);color:#fff}
.fpvp-rw .scope-line--check svg{background:var(--fsu-yellow);color:#fff}

/* Le nombre est ce que l'œil accroche : il porte la couleur forte. */
.fpvp-rw .scope-line-head strong{font-size:1.06em}
.fpvp-rw .scope-line--ok .scope-line-head strong{color:#2f6b1c}
.fpvp-rw .scope-line--check .scope-line-head strong{color:#7a5709}

/* ------------------------------------------------------------------
   Le bouton de chapitre suivant appelle le geste

   Sur la première page, rien n'indiquait qu'il fallait continuer. Une
   pulsation discrète, deux fois, attire l'œil sans agiter la page ;
   elle s'arrête d'elle-même et respecte le réglage système.
   ------------------------------------------------------------------ */
.fpvp-rw .pager-next.is-appel{
  animation:fpvp-appel 1.6s ease-in-out 2;
}
@keyframes fpvp-appel{
  0%,100%{transform:translateY(0);box-shadow:0 2px 8px rgba(24,30,38,.10)}
  50%{transform:translateY(-3px);box-shadow:0 10px 22px rgba(48,123,170,.30)}
}
@media (prefers-reduced-motion:reduce){
  .fpvp-rw .pager-next.is-appel{animation:none}
}

/* ==================================================================
   CHAPITRE DE FIN — partager et garder

   Le module de partage existait, mais au bas du glossaire : personne n'y
   descendait. Il devient la destination du bouton « Fin du rapport »,
   avec le récapitulatif à conserver.
   ================================================================== */
.fpvp-rw .keep{
  background:#fff;border-radius:var(--rw-radius,16px);
  box-shadow:0 2px 8px rgba(24,30,38,.07);
  padding:17px 18px;margin-bottom:12px;
}
.fpvp-rw .keep h3{
  margin:0 0 6px;font-size:16px;letter-spacing:-.02em;
}
.fpvp-rw .keep p{
  margin:0 0 13px;font-size:13.5px;line-height:1.5;color:var(--fsu-muted);
}
.fpvp-rw .keep-pdf{
  display:inline-flex;align-items:center;gap:9px;
  min-height:48px;padding:0 18px;width:100%;justify-content:center;
  border:1.5px solid var(--fsu-line,#e4e9ee);border-radius:12px;
  background:var(--fsu-soft,#f5f7f9);color:var(--fsu-muted);
  font:inherit;font-size:14.5px;font-weight:700;
  cursor:not-allowed;
}
.fpvp-rw .keep-pdf svg{width:17px;height:17px;flex:none}
/* Récapitulatif PDF : bouton actif, puis choix de la formule. */
.fpvp-rw .keep-pdf.is-active{
  cursor:pointer;background:var(--fsu-blue);border-color:var(--fsu-blue);color:#fff;
}
.fpvp-rw .keep-pdf.is-active:hover,.fpvp-rw .keep-pdf.is-active:focus-visible{background:var(--fsu-blue-text);border-color:var(--fsu-blue-text)}
.fpvp-rw .keep-pdf.is-active:focus-visible,.fpvp-rw .keep-envoyer:focus-visible{outline:3px solid var(--fsu-yellow);outline-offset:2px}
.fpvp-rw .keep-choix{margin-top:14px}
.fpvp-rw .keep-formules,.fpvp-rw .keep-chapitres{border:0;margin:0 0 12px;padding:0;min-width:0}
.fpvp-rw .keep-formules legend,.fpvp-rw .keep-chapitres legend{font-size:14px;font-weight:700;margin:0 0 8px;padding:0}
.fpvp-rw .keep-formule{
  display:flex;gap:11px;align-items:flex-start;padding:11px 12px;margin:0 0 7px;
  border:1.5px solid var(--fsu-line);border-radius:var(--fsu-radius-sm,12px);cursor:pointer;
}
.fpvp-rw .keep-formule:has(input:checked){border-color:var(--fsu-blue);background:var(--fsu-blue-soft)}
.fpvp-rw .keep-formule input{margin:3px 0 0;width:18px;height:18px;flex:none;accent-color:var(--fsu-blue)}
.fpvp-rw .keep-formule-texte{display:flex;flex-direction:column;gap:2px;font-size:13.5px;line-height:1.45}
.fpvp-rw .keep-formule-texte span{color:var(--fsu-muted)}
.fpvp-rw .keep-chapitres-grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
@media (max-width:360px){.fpvp-rw .keep-chapitres-grille{grid-template-columns:1fr}}
.fpvp-rw .keep-chapitre{
  position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:6px 10px;
  border:1.5px solid var(--fsu-line);border-radius:var(--fsu-radius-sm,12px);background:#fff;
  font-size:13.5px;font-weight:600;line-height:1.25;cursor:pointer;
  transition:border-color .15s,background-color .15s;
}
.fpvp-rw .keep-chapitre input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}
.fpvp-rw .keep-chapitre .dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--fsu-blue)}
.fpvp-rw .keep-chapitre.seg-ok .dot{background:var(--fsu-green)}
.fpvp-rw .keep-chapitre.seg-check .dot{background:var(--fsu-yellow)}
.fpvp-rw .keep-chapitre-nom{flex:1;min-width:0;color:var(--fsu-muted)}
.fpvp-rw .keep-chapitre-coche{
  display:inline-flex;align-items:center;justify-content:center;flex:none;width:22px;height:22px;border-radius:50%;
  border:1.5px solid var(--fsu-line);color:transparent;background:#fff;
}
.fpvp-rw .keep-chapitre-coche svg{width:13px;height:13px;stroke-width:3}
.fpvp-rw .keep-chapitre:has(input:checked){border-color:var(--fsu-blue);background:var(--fsu-blue-soft)}
.fpvp-rw .keep-chapitre:has(input:checked) .keep-chapitre-nom{color:var(--fsu-ink)}
.fpvp-rw .keep-chapitre:has(input:checked) .keep-chapitre-coche{background:var(--fsu-blue);border-color:var(--fsu-blue);color:#fff}
.fpvp-rw .keep-chapitre:has(input:focus-visible){outline:3px solid var(--fsu-yellow);outline-offset:2px}
.fpvp-rw .keep-tout{
  margin:8px 0 0;padding:6px 2px;border:0;background:none;color:var(--fsu-blue-text);
  font:inherit;font-size:13.5px;font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer;
}
.fpvp-rw .keep-envoyer{
  display:inline-flex;align-items:center;justify-content:center;width:100%;min-height:48px;padding:0 18px;
  border:0;border-radius:12px;background:var(--fsu-green-text);color:#fff;font:inherit;font-size:14.5px;font-weight:700;cursor:pointer;
}
.fpvp-rw .keep-envoyer:disabled{opacity:.6;cursor:progress}
.fpvp-rw .keep .keep-etat{margin:10px 0 0;font-size:13.5px;color:var(--fsu-ink)}
.fpvp-rw .keep .keep-etat:empty{display:none}
/* Mention de barème du chapitre « Vos droits » : une source et une date, lisibles
   sans peser. Alignée à gauche, contrairement à .keep-note qui clôt une carte. */
.fpvp-rw .rights-note{
  margin:14px 2px 0;font-size:12px;line-height:1.5;color:var(--fsu-muted);
}
.fpvp-rw .rights-note p{margin:0;}

.fpvp-rw .keep-note{
  margin:8px 0 0;font-size:12px;color:var(--fsu-muted);text-align:center;
}

/* Le module de partage repris du moteur d'origine s'aligne sur la carte. */
.fpvp-rw .fpvp-report-share{
  background:#fff;border-radius:var(--rw-radius,16px);
  box-shadow:0 2px 8px rgba(24,30,38,.07);
  padding:17px 18px;border:0;
}

/* Addition des lignes de traitement, montrée pour être refaite par l'agent.
   Libellé à gauche en chasse fixe — c'est la transcription du bulletin, pas notre prose —
   et montant à droite, aligné, pour que l'œil totalise sans effort. */
.fpvp-rw .fpvp-treatment-lines{list-style:none;margin:8px 0;padding:0;border-top:1px solid var(--fsu-line,#e4e9ee);}
.fpvp-rw .fpvp-treatment-lines li{display:flex;justify-content:space-between;gap:12px;
  padding:6px 2px;border-bottom:1px solid var(--fsu-line,#e4e9ee);font-size:13px;}
.fpvp-rw .fpvp-treatment-lines li span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  color:var(--fsu-muted);overflow-wrap:anywhere;}
.fpvp-rw .fpvp-treatment-lines li strong{white-space:nowrap;}
/* 0.36.0 : chapitre « Absences » en trois niveaux. Calcul du décompte d'arrêt (phrase puis liste) et liste des éléments de la rémunération d'un mois complet (Département). */
.fpvp-rw .fpvp-arret-calcul-intro{display:block;margin-bottom:6px}
.fpvp-rw .fpvp-cd62-composition{margin:4px 0 10px 18px;padding:0}
.fpvp-rw .fpvp-cd62-composition li{margin:2px 0}
.fpvp-rw .fpvp-lines-note{margin-top:10px;}

/* Avis « version bêta » : discret, jamais rouge (ce n'est pas un état d'erreur). */
.fpvp-rw .verdict-eyebrow-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.fpvp-rw .verdict-eyebrow-row .eyebrow { margin: 0; }
.fpvp-rw button.fpvp-beta-toggle { margin: 0; border: 0; cursor: pointer; font-family: inherit; }
.fpvp-rw button.fpvp-beta-toggle:focus-visible { outline: 2px solid var(--fsu-ink, #151515); outline-offset: 2px; }
.fpvp-rw .beta-note { margin: 8px 0 4px; padding: 8px 11px; border-radius: 10px; background: #fdf6e7; font-size: .88rem; line-height: 1.45; color: #4a3a12; }
.fpvp-rw .verdict-bilan { margin: 0 0 14px; font-size: 1rem; font-weight: 600; line-height: 1.45; color: var(--fsu-ink, #151515); max-width: 56ch; }
.fpvp-rw .report-error { margin: 22px 0 0; padding: 16px; border: 1px solid var(--fsu-line, #e2e8f0); border-radius: 14px; background: #fff; }
.fpvp-rw .report-error-title { margin: 0 0 6px; font-size: 1.05rem; }
.fpvp-rw .report-error-text { margin: 0 0 12px; font-size: .95rem; line-height: 1.45; color: var(--fsu-muted, #5b6470); }

.fpvp-rw .demain-avertissement { margin: 18px 0 0; padding: 10px 12px; border-radius: 10px; background: var(--fsu-soft, #f3f5f7); font-size: .88rem; line-height: 1.45; color: var(--fsu-muted, #5b6470); }

/* « Votre bulletin ligne par ligne » : le libellé en chasse fixe (la voix du bulletin), le sens en texte courant. */
.fpvp-rw .line-by-line { margin: 0 0 22px; }
.fpvp-rw .line-by-line-title { margin: 0 0 6px; font-size: 1.05rem; }
.fpvp-rw .line-by-line-intro { margin: 0 0 12px; font-size: .92rem; color: var(--fsu-muted, #5b6470); }
.fpvp-rw .line-by-line-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.fpvp-rw .lbl-row { padding: 10px 12px; border: 1px solid var(--fsu-line, #e2e8f0); border-left-width: 4px; border-radius: 10px; background: #fff; }
.fpvp-rw .lbl-juste { border-left-color: var(--fsu-green, #6aac4b); }
.fpvp-rw .lbl-ecart, .fpvp-rw .lbl-a_verifier { border-left-color: var(--fsu-yellow, #efb33e); }
.fpvp-rw .lbl-explique { border-left-color: var(--fsu-blue, #307baa); }
.fpvp-rw .lbl-inconnu { border-left-color: var(--fsu-line, #cbd5e1); }
.fpvp-rw .lbl-head { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; }
.fpvp-rw .lbl-label { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .85rem; overflow-wrap: anywhere; }
.fpvp-rw .lbl-amount { flex: none; font-weight: 700; font-size: .92rem; white-space: nowrap; }
.fpvp-rw .lbl-foot { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; margin-top: 4px; }
.fpvp-rw .lbl-meaning { font-size: .88rem; line-height: 1.4; color: var(--fsu-muted, #5b6470); }
.fpvp-rw .lbl-chip { flex: none; padding: 2px 8px; border-radius: 999px; background: var(--fsu-soft, #f3f5f7); font-size: .75rem; font-weight: 700; white-space: nowrap; }
.fpvp-rw .lbl-juste .lbl-chip { background: #eef6ea; color: #3f7a28; }
.fpvp-rw .lbl-ecart .lbl-chip, .fpvp-rw .lbl-a_verifier .lbl-chip { background: #fdf6e7; color: #6f5210; }
.fpvp-rw .fpvp-contributions-wrap { overflow-x: auto; margin: 10px 0; }
.fpvp-rw .fpvp-contributions { width: 100%; border-collapse: collapse; font-size: .88rem; }
.fpvp-rw .fpvp-contributions th, .fpvp-rw .fpvp-contributions td { padding: 6px 8px; border-bottom: 1px solid var(--fsu-line, #e2e8f0); text-align: left; vertical-align: top; }
.fpvp-rw .fpvp-contribution-gap td:last-child { color: #6f5210; font-weight: 700; }

/* Premier chapitre : « Votre rapport » est un titre de niveau 2 que rien ne stylait ; il prenait le grand titre du thème
   du site, et la ligne « Situation détectée » son interligne large. Mêmes proportions que les autres chapitres. */
.fpvp-rw .verdict h2 { font-size: 26px; line-height: 1.15; margin: 8px 0 8px; letter-spacing: -.028em; }
.fpvp-rw .verdict-lede { font-size: 15px; line-height: 1.45; margin-bottom: 14px; }
.fpvp-rw .verdict-bilan { font-size: 15px; line-height: 1.45; }
@media (max-width: 520px) {
  .fpvp-rw .verdict-body { padding: 20px 16px 18px; }
}
@media (min-width: 900px) {
  .fpvp-rw .verdict-lede, .fpvp-rw .verdict-bilan { font-size: 16px; }
}

/* Le calcul posé comme sur une calculette (carte de contrôle) : police du bulletin, chiffres alignés à droite,
   notre résultat surligné, puis le montant lu sur la fiche. */
.card-calc{margin:12px 0;border:1px solid var(--line,#e4e9ee);border-radius:10px;overflow:hidden;
  font-family:var(--mono);font-size:13.5px;font-variant-numeric:tabular-nums}
.card-calc .calc-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;padding:8px 12px;align-items:baseline}
.card-calc .calc-row:nth-child(odd){background:#f6f8f5}
.card-calc .calc-k{color:#5b6470;min-width:0}
.card-calc .calc-v{white-space:nowrap;text-align:right;color:#151515}
.card-calc .calc-result{border-top:1px solid var(--line,#e4e9ee);background:#eef6ea !important;font-weight:700}
.card-calc .calc-result .calc-k,.card-calc .calc-result .calc-v{color:#3f7a28}
.card-calc .calc-read{background:#fff !important}
.card-calc .calc-read.calc-gap{background:#fdf6e7 !important}
.card-calc .calc-read.calc-gap .calc-k,.card-calc .calc-read.calc-gap .calc-v{color:#6f5210;font-weight:700}
@media (max-width:360px){.card-calc{font-size:12.5px}.card-calc .calc-row{padding:7px 10px}}
/* Dans une carte à vérifier, notre résultat n'est pas « juste » : il reste neutre, seul le montant du bulletin signale l'écart. */
.card-check .card-calc .calc-result,.card-info .card-calc .calc-result{background:#eef3f8 !important}
.card-check .card-calc .calc-result .calc-k,.card-check .card-calc .calc-result .calc-v,
.card-info .card-calc .calc-result .calc-k,.card-info .card-calc .calc-result .calc-v{color:#256187}

/* Indemnité de résidence : vérification par la commune d'affectation (0.24.1 ; France entière, 0.30.0). */
.fpvp-rw .residence-check{margin:12px 0 4px;padding:13px 14px;border-radius:var(--fsu-radius-sm,12px);background:var(--fsu-soft);border:1px solid var(--fsu-line)}
.fpvp-rw .card .residence-check-titre,.fpvp-rw .residence-check-titre{margin:0 0 4px;font-size:14.5px;font-weight:700;color:var(--fsu-ink)}
.fpvp-rw .residence-check-texte{margin:0 0 10px;font-size:13px;line-height:1.5;color:var(--fsu-muted)}
.fpvp-rw .residence-check-ligne{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.fpvp-rw .residence-check-champ{display:flex;flex-direction:column;gap:4px}
.fpvp-rw .residence-check-champ label{font-size:12.5px;font-weight:600;color:var(--fsu-ink)}
.fpvp-rw .residence-check-cp{width:8.5em;min-height:44px;padding:0 12px;border:1.5px solid var(--fsu-line);border-radius:10px;background:#fff;font:inherit;font-size:16px;letter-spacing:.08em}
.fpvp-rw .residence-check-commune{flex:1 1 13rem;min-width:0;min-height:44px;padding:0 10px;border:1.5px solid var(--fsu-line);border-radius:10px;background:#fff;font:inherit;font-size:15px}
.fpvp-rw .residence-check-cp:focus-visible,.fpvp-rw .residence-check-commune:focus-visible{outline:3px solid var(--fsu-yellow);outline-offset:1px;border-color:var(--fsu-blue)}
.fpvp-rw .residence-check-resultat:empty{display:none}
.fpvp-rw .residence-check-resultat{margin:12px 0 0;padding:10px 12px;border-radius:10px;font-size:13.5px;line-height:1.5;border-left:4px solid var(--fsu-blue);background:var(--fsu-blue-soft);color:var(--fsu-ink)}
.fpvp-rw .residence-check-resultat.is-ok{border-left-color:var(--fsu-green);background:var(--fsu-green-soft)}
.fpvp-rw .residence-check-resultat.is-ecart{border-left-color:var(--fsu-yellow);background:var(--fsu-yellow-soft)}
.fpvp-rw .residence-check-lu{margin:0 0 4px;font-size:13.5px;line-height:1.5;font-weight:600;color:var(--fsu-ink)}
.fpvp-rw .residence-check-resultat p{margin:0}
.fpvp-rw .residence-check-resultat .residence-check-etiquette{font-weight:700;margin-bottom:2px}
.fpvp-rw .residence-check-resultat p + p{margin-top:8px}
.fpvp-rw .residence-check .residence-check-plus{margin:10px 0 0;font-size:13px}
.fpvp-rw .residence-check .residence-check-plus > p{font-size:12.5px;line-height:1.5}

/* ------------------------------------------------------------------
   Rapport allégé (0.26.0), demande commune général / CD62 / AF du 27/09/2026
   ------------------------------------------------------------------ */
/* Légende des pastilles : au Résultat seulement (le script pose hidden ailleurs). */
.fpvp-rw .nav-legend[hidden]{display:none}

/* Carte juste : l'explication se replie sous « Pourquoi ce montant ? » */
.fpvp-rw .card-why{margin:10px 0 0}
.fpvp-rw .card-why > summary{
  display:inline-flex;align-items:center;gap:6px;min-height:36px;cursor:pointer;list-style:none;
  color:var(--fsu-blue-text);font-size:14px;font-weight:600;
}
.fpvp-rw .card-why > summary::-webkit-details-marker{display:none}
.fpvp-rw .card-why > summary::before{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform .15s}
.fpvp-rw .card-why[open] > summary::before{transform:rotate(45deg)}
.fpvp-rw .card-why > .card-body{margin-top:4px}

/* 0.31.0 : texte court de la carte, visible d'emblée (ce que dit le contrôle, en une ou deux phrases). Le détail du
   calcul suit, replié sur une carte juste. */
.fpvp-rw .card-resume{margin:10px 0 0;font-size:14.5px;line-height:1.5;color:var(--fsu-ink)}
.fpvp-rw .card-resume + .card-body{margin-top:10px}
.fpvp-rw .card-resume + .card-why{margin-top:4px}
/* 0.34.0 : texte court d'une ligne de la carte (IFSE du Département), visible sous le texte court de la carte. */
.fpvp-rw .card-resume + .card-resume-ligne,.fpvp-rw .card-resume-ligne + .card-resume-ligne{margin-top:8px}
.fpvp-rw .card-resume-ligne + .card-why,.fpvp-rw .card-resume-ligne + .card-body{margin-top:6px}

/* Tableau large dans une carte : il défile au lieu d'être coupé */
.fpvp-rw .table-scroll{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 0 8px}
.fpvp-rw .table-scroll > table{min-width:100%;margin:0}

/* Explication longue : première phrase, puis « Lire la suite » */
.fpvp-rw .lire-suite{display:inline}
.fpvp-rw .lire-suite > summary{display:inline;cursor:pointer;list-style:none;color:var(--fsu-blue-text);font-weight:600;white-space:nowrap}
.fpvp-rw .lire-suite > summary::-webkit-details-marker{display:none}
.fpvp-rw .lire-suite[open] > summary{display:none}
.fpvp-rw .lire-suite[open]{display:block;margin-top:4px}
.fpvp-rw .lire-suite > .fpvp-control-body{margin-top:6px}

/* Lignes payées par l'employeur, repliées sous un intitulé */
.fpvp-rw .lignes-employeur{margin:12px 0 0;border:1px solid var(--fsu-line,#e2e4e7);border-radius:14px;background:#fff}
.fpvp-rw .lignes-employeur > summary{
  display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:48px;padding:10px 14px;cursor:pointer;list-style:none;
  font-size:15px;font-weight:600;color:var(--fsu-ink,#151515);
}
.fpvp-rw .lignes-employeur > summary::-webkit-details-marker{display:none}
.fpvp-rw .lignes-employeur > summary::after{content:"";flex:none;width:8px;height:8px;border-right:2px solid var(--fsu-muted);border-bottom:2px solid var(--fsu-muted);transform:rotate(45deg);transition:transform .15s}
.fpvp-rw .lignes-employeur[open] > summary::after{transform:rotate(-135deg)}
.fpvp-rw .lignes-employeur-intro{margin:0 14px 10px;font-size:13.5px;color:var(--fsu-muted)}
.fpvp-rw .lignes-employeur > ol,
.fpvp-rw .lignes-employeur > ul{padding:0 10px 10px;margin:0}
@media (prefers-reduced-motion:reduce){
  .fpvp-rw .card-why > summary::before,.fpvp-rw .lignes-employeur > summary::after{transition:none}
}

/* « Un montant mal lu ? » (0.27.0) : lien discret sous le relevé ligne par ligne, feuille en bas d'écran. */
.fpvp-rw .lbl-signal{display:inline-flex;align-items:center;gap:7px;margin:12px 0 0;padding:6px 2px;border:0;background:none;color:var(--ios-teinte,var(--fsu-blue,#307baa));font:inherit;font-size:14.5px;font-weight:500;cursor:pointer}
.fpvp-rw .lbl-signal svg{width:17px;height:17px;flex:none}
.fpvp-rw .lbl-signal:hover{text-decoration:underline}
.fpvp-rw .lbl-signal:focus-visible,.fpvp-signal button:focus-visible,.fpvp-signal input:focus-visible{outline:3px solid var(--ios-teinte,var(--fsu-blue,#307baa));outline-offset:2px}
.fpvp-rw .fpvp-signal-merci{margin:12px 0 0;padding:11px 14px;border-radius:14px;background:color-mix(in srgb,var(--ios-teinte,var(--fsu-blue,#307baa)) 9%,#fff);color:var(--fsu-ink,#151515);font-size:14px;line-height:1.45}
.fpvp-rw .fpvp-signal-ancien{color:var(--ios-sous,var(--fsu-muted,#64686d));font-weight:400;margin-right:6px}
.fpvp-rw .fpvp-signal-marque{display:inline-block;white-space:nowrap;flex:none;margin-left:6px;padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--ios-teinte,var(--fsu-blue,#307baa)) 13%,transparent);color:var(--ios-teinte,var(--fsu-blue,#307baa));font-size:12px;font-weight:600;vertical-align:1px}
.fpvp-rw .rorow-label .fpvp-signal-marque{margin:4px 0 0;font-family:var(--sans,inherit)}
.fpvp-signal-voile{position:fixed;inset:0;z-index:100000;background:rgba(0,0,0,.3)}
.fpvp-signal{position:fixed;left:50%;bottom:0;z-index:100001;box-sizing:border-box;width:min(560px,100%);max-height:88vh;overflow:auto;transform:translateX(-50%);padding:18px 16px calc(22px + env(safe-area-inset-bottom));border-radius:26px 26px 0 0;background:var(--ios-fond,#f3f5f7);color:var(--fsu-ink,#151515);box-shadow:0 -12px 40px rgba(0,0,0,.18);font-size:15.5px;line-height:1.4}
.fpvp-signal *,.fpvp-signal *::before,.fpvp-signal *::after{box-sizing:border-box}
.fpvp-signal-tete{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 4px 2px}
.fpvp-signal-titre{margin:0;font-size:21px;font-weight:700;letter-spacing:-.02em;line-height:1.2}
.fpvp-signal-fermer{display:grid;place-items:center;width:32px;height:32px;padding:0;border:0;border-radius:50%;background:rgba(120,125,135,.15);color:#5d636b;cursor:pointer;flex:none}
.fpvp-signal-fermer svg{width:17px;height:17px}
.fpvp-signal-question{margin:0 4px 12px;color:var(--ios-sous,var(--fsu-muted,#64686d));font-size:14.5px}
.fpvp-signal-choix{display:flex;flex-wrap:wrap;gap:8px}
.fpvp-signal-puce{min-height:38px;padding:8px 13px;border:0;border-radius:999px;background:#fff;color:inherit;font:inherit;font-size:14px;font-weight:500;box-shadow:inset 0 0 0 .5px var(--ios-sep,rgba(0,0,0,.12));cursor:pointer;text-align:left}
.fpvp-signal-puce[aria-pressed="true"]{background:var(--ios-teinte,var(--fsu-blue,#307baa));color:#fff;box-shadow:none}
.fpvp-signal-detail{margin:16px 0 0;border-radius:var(--ios-rayon,22px);background:var(--ios-groupe,#fff);overflow:hidden}
.fpvp-signal-champ{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:54px;margin:0;padding:10px 16px}
.fpvp-signal-champ + .fpvp-signal-champ{border-top:.5px solid var(--ios-sep,rgba(0,0,0,.12))}
.fpvp-signal-champ .num{color:var(--ios-sous,var(--fsu-muted,#64686d));font-variant-numeric:tabular-nums}
.fpvp-signal-saisie{width:140px;min-height:40px;padding:8px 11px;border:0;border-radius:10px;background:rgba(120,125,135,.1);color:inherit;font:inherit;font-size:16px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums}
.fpvp-signal-rassure{margin:14px 2px 0;padding:11px 14px;border-radius:16px;background:var(--ios-ok-doux,rgba(52,168,83,.10));color:#1f6b35;font-size:13.5px;line-height:1.4}
.fpvp-signal-etat{min-height:1.2em;margin:10px 4px 0;font-size:14px;font-weight:600}
.fpvp-signal-etat:empty{margin:0;min-height:0}
.fpvp-signal-envoyer{display:block;width:100%;min-height:54px;margin:14px 0 0;border:0;border-radius:999px;background:linear-gradient(180deg,var(--ios-action1,#d34a50),var(--ios-action2,#c8282f));color:#fff;font:inherit;font-size:17px;font-weight:600;cursor:pointer}
.fpvp-signal-envoyer[disabled]{opacity:.55;cursor:default}

/* Arrêt maladie : règles repliées sous « En savoir plus » */
/* Dépliant « En savoir plus » : .fpvp-arret-plus (carte du décompte d'arrêt) et .fpvp-plus, classe commune (0.29.0). */
.fpvp-rw .fpvp-arret-plus,.fpvp-rw .fpvp-plus{margin:10px 0}
.fpvp-rw .fpvp-arret-plus > summary,.fpvp-rw .fpvp-plus > summary{cursor:pointer;list-style:none;color:var(--fsu-blue-text);font-weight:600}
.fpvp-rw .fpvp-arret-plus > summary::-webkit-details-marker,.fpvp-rw .fpvp-plus > summary::-webkit-details-marker{display:none}
.fpvp-rw .fpvp-arret-plus > summary::before,.fpvp-rw .fpvp-plus > summary::before{content:"+ "}
.fpvp-rw .fpvp-arret-plus[open] > summary::before,.fpvp-rw .fpvp-plus[open] > summary::before{content:"− "}
.fpvp-rw .fpvp-arret-plus[open] > summary,.fpvp-rw .fpvp-plus[open] > summary{margin-bottom:6px}
.fpvp-rw .fpvp-plus > summary:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:3px;border-radius:6px}
.fpvp-rw .fpvp-plus > p{margin:8px 0 0;font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}

/* Chapitre « Et si je passais à temps partiel ? » (0.29.0). Une estimation : aucune couleur de verdict. */
.fpvp-rw .fpvp-tp{padding:20px;border-radius:var(--fsu-radius-lg);background:#fff;box-shadow:var(--lift-1);color:var(--fsu-ink)}
.fpvp-rw .fpvp-tp *{box-sizing:border-box}
.fpvp-rw .fpvp-tp .fpvp-tp-h{margin:22px 0 9px;font-size:15.5px;line-height:1.3;letter-spacing:-.01em}
.fpvp-rw .fpvp-tp > .fpvp-tp-h:first-child{margin-top:0}
.fpvp-rw .fpvp-tp p{margin:0}
.fpvp-rw .fpvp-tp-note{margin-top:9px!important;font-size:13.5px;line-height:1.5;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-boutons{display:flex;flex-wrap:wrap;gap:8px}
.fpvp-rw .fpvp-tp-bouton{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:64px;min-height:48px;padding:6px 14px;border:0;border-radius:14px;background:var(--fsu-soft);box-shadow:inset 0 0 0 1px var(--fsu-line);color:var(--fsu-ink);font:inherit;font-weight:700;font-size:16px;line-height:1.15;cursor:pointer;font-variant-numeric:tabular-nums;transition:background .15s ease,box-shadow .15s ease,color .15s ease}
.fpvp-rw .fpvp-tp-bouton:hover{background:var(--fsu-blue-soft)}
.fpvp-rw .fpvp-tp-bouton[aria-checked="true"]{background:var(--fsu-blue-text);box-shadow:none;color:#fff}
.fpvp-rw .fpvp-tp-bouton:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:3px}
.fpvp-rw .fpvp-tp-bouton.is-actuel{background:#fff;box-shadow:inset 0 0 0 1px var(--fsu-line);color:var(--fsu-muted);cursor:default}
.fpvp-rw .fpvp-tp-bouton-s{margin-top:2px;font-size:11px;font-weight:600;letter-spacing:.02em}
.fpvp-rw .fpvp-tp-enfants .fpvp-tp-bouton{min-width:46px;padding:6px 10px}
.fpvp-rw .fpvp-tp-resultat{margin-top:22px}
.fpvp-rw .fpvp-tp-hero{padding:20px;border-radius:var(--fsu-radius);background:var(--fsu-blue-soft);color:var(--fsu-blue-ink)}
.fpvp-rw .fpvp-tp-hero-v{font-size:30px;line-height:1.1;font-weight:800;letter-spacing:-.022em;font-variant-numeric:tabular-nums}
.fpvp-rw .fpvp-tp-hero-k{margin-top:3px!important;font-size:12.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;opacity:.8}
.fpvp-rw .fpvp-tp-phrase{margin-top:11px!important;font-size:16px;line-height:1.5;font-weight:600}
.fpvp-rw .fpvp-tp-effet,.fpvp-rw .fpvp-tp-sft{margin-top:12px!important;font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-alerte{margin-top:12px!important;padding:12px 14px;border-radius:var(--fsu-radius-sm);background:var(--fsu-yellow-soft);color:var(--fsu-ink);font-size:14.5px;line-height:1.5}
.fpvp-rw .fpvp-tp-table-wrap{margin-top:16px;border-radius:var(--fsu-radius);box-shadow:inset 0 0 0 1px var(--fsu-line);overflow-x:auto}
.fpvp-rw .fpvp-tp-table{width:100%;border-collapse:collapse;font-size:14px;line-height:1.35;font-variant-numeric:tabular-nums}
.fpvp-rw .fpvp-tp-table th,.fpvp-rw .fpvp-tp-table td{padding:9px 12px;text-align:right;vertical-align:top;border-top:1px solid var(--fsu-line)}
.fpvp-rw .fpvp-tp-table thead th{border-top:0;background:var(--fsu-soft);font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-table th:first-child{text-align:left;font-weight:500;overflow-wrap:break-word}
.fpvp-rw .fpvp-tp-table thead th:first-child{font-weight:700}
.fpvp-rw .fpvp-tp-table td{white-space:nowrap}
.fpvp-rw .fpvp-tp-table .fpvp-tp-a{color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-table .fpvp-tp-d{font-weight:700}
.fpvp-rw .fpvp-tp-table .fpvp-tp-e.is-nul{color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-ecart-m{display:none;margin-top:2px;font-size:12px;font-weight:500;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-section th{padding-top:13px;background:#fff;font-size:12px;font-weight:700!important;letter-spacing:.04em;text-transform:uppercase;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-total th,.fpvp-rw .fpvp-tp-total td{background:var(--fsu-soft);font-weight:700!important;color:var(--fsu-ink)!important}
.fpvp-rw .fpvp-tp-net th,.fpvp-rw .fpvp-tp-net td{background:var(--fsu-blue-soft);color:var(--fsu-blue-ink)!important;font-size:15px}
.fpvp-rw .fpvp-tp-detail > summary{font-size:15px}
.fpvp-rw .fpvp-tp-detail .fpvp-tp-inchangees .fpvp-tp-h{margin-top:16px}
.fpvp-rw .fpvp-tp-notes{margin-top:16px}
.fpvp-rw .fpvp-tp-notes p + p,.fpvp-rw .fpvp-tp-retraite p + p{margin-top:8px}
.fpvp-rw .fpvp-tp-notes p,.fpvp-rw .fpvp-tp-retraite p{font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-retraite .fpvp-tp-surcotisation p{margin-top:8px}
.fpvp-rw .fpvp-tp-retraite .fpvp-tp-chiffre{padding:12px 14px;border-radius:var(--fsu-radius-sm);background:var(--fsu-soft);color:var(--fsu-ink);font-weight:600}
.fpvp-rw .fpvp-tp ul{margin:0;padding:0 0 0 18px;font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp li + li{margin-top:5px}
.fpvp-rw .fpvp-tp li strong{color:var(--fsu-ink);font-weight:600}
.fpvp-rw .fpvp-tp .fpvp-plus{margin:16px 0 0}
.fpvp-rw .fpvp-tp-fsu{margin-top:22px;padding:16px 18px;border-radius:var(--fsu-radius);border-left:4px solid var(--fsu-red);background:var(--fsu-soft)}
.fpvp-rw .fpvp-tp-fsu h3{margin:0 0 6px;font-size:15.5px;color:var(--fsu-red-dark)}
.fpvp-rw .fpvp-tp-fsu p{font-size:14.5px;line-height:1.55}
.fpvp-rw .fpvp-tp-pied{margin-top:18px!important;padding:10px 12px;border-radius:10px;background:var(--fsu-soft);font-size:13.5px;line-height:1.5;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-lien{display:inline-block;margin-top:14px;color:var(--fsu-blue-text);font-weight:600;font-size:14.5px}
/* Lot 27 : six dépliants, jusqu'à trois liens de niveau 3. */
.fpvp-rw .fpvp-tp-liens{display:flex;flex-direction:column;align-items:flex-start;gap:2px;margin-top:6px}
.fpvp-rw .fpvp-tp-zone p,.fpvp-rw .fpvp-tp-reserves .fpvp-tp-pied{font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}
.fpvp-rw .fpvp-tp-zone p + p{margin-top:8px}
.fpvp-rw .fpvp-tp-zone{margin-top:10px}
.fpvp-rw .fpvp-tp-detail-zone .fpvp-tp-alerte{margin:0 0 12px!important}
.fpvp-rw .fpvp-tp details[hidden]{display:none}
.fpvp-rw .fpvp-tp-reserves .fpvp-tp-pied{margin-top:12px!important}
.fpvp-rw .fpvp-tp-note[hidden]{display:none}
@media (max-width:600px){
  .fpvp-rw .fpvp-tp{padding:16px 14px}
  .fpvp-rw .fpvp-tp-boutons{display:grid;grid-template-columns:repeat(3,1fr)}
  .fpvp-rw .fpvp-tp-enfants .fpvp-tp-boutons{grid-template-columns:repeat(7,1fr);gap:6px}
  .fpvp-rw .fpvp-tp-bouton,.fpvp-rw .fpvp-tp-enfants .fpvp-tp-bouton{min-width:0;padding:6px 4px}
  .fpvp-rw .fpvp-tp-hero{padding:16px}
  .fpvp-rw .fpvp-tp-hero-v{font-size:25px}
  .fpvp-rw .fpvp-tp-table{font-size:13.5px}
  .fpvp-rw .fpvp-tp-table th:first-child{hyphens:auto}
  .fpvp-rw .fpvp-tp-table th,.fpvp-rw .fpvp-tp-table td{padding:8px 8px}
  .fpvp-rw .fpvp-tp-table .fpvp-tp-e{display:none}
  .fpvp-rw .fpvp-tp-ecart-m{display:block}
}

/* ------------------------------------------------------------------
   0.31.0 : présentation du rapport (retours de relecture du 03/10/2026)
   ------------------------------------------------------------------ */
/* « Ce que nous avons lu sur votre bulletin » : six cases au plus. Sur un écran large, deux lignes de trois colonnes ;
   au téléphone, les cases s'empilent, l'intitulé à gauche et la valeur à droite. Une dernière case seule sur sa ligne
   prend toute la largeur : aucune case vide. */
.fpvp-rw .idcell-sub{display:block;margin-top:2px;font-size:12.5px;font-weight:400;letter-spacing:0;color:var(--fsu-muted)}
.fpvp-rw .identity-grid{display:grid;grid-template-columns:minmax(0,1fr);overflow:hidden}
.fpvp-rw .idcell{flex:none;min-width:0;margin:0 -1px -1px 0;display:flex;align-items:baseline;justify-content:space-between;gap:14px}
.fpvp-rw .idcell dt{flex:none;max-width:45%;margin-bottom:0}
.fpvp-rw .idcell dd{min-width:0;text-align:right;overflow-wrap:anywhere}
.fpvp-rw .idcell:last-child:nth-child(odd){grid-column:auto}
@media (min-width:700px){
  .fpvp-rw .identity-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .fpvp-rw .idcell{display:block}
  .fpvp-rw .idcell dt{max-width:none;margin-bottom:2px}
  .fpvp-rw .idcell dd{text-align:left}
  .fpvp-rw .idcell:last-child:nth-child(3n+1){grid-column:1 / -1}
  .fpvp-rw .idcell:last-child:nth-child(3n+2){grid-column:span 2}
}

/* Tableau de contrôle à quatre colonnes (cotisations) : plus de défilement horizontal. Le texte du calcul passe à la
   ligne ; dans une carte étroite (téléphone, ou demi-largeur sur ordinateur), chaque ligne du tableau devient un bloc :
   intitulé et résultat sur la première ligne, puis le calcul, puis le montant du bulletin précédé de l'intitulé de sa
   colonne (attribut data-label écrit par le serveur). */
.fpvp-rw .card-body{container-type:inline-size;container-name:fpvp-carte}
.fpvp-rw .fpvp-contributions td{white-space:normal}
@container fpvp-carte (max-width:520px){
  .fpvp-rw .fpvp-contributions-wrap,.fpvp-rw .table-scroll{overflow-x:visible}
  .fpvp-rw .fpvp-contributions,.fpvp-rw .fpvp-contributions tbody{display:block;width:100%}
  .fpvp-rw .fpvp-contributions thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%)}
  .fpvp-rw .fpvp-contributions tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;padding:10px 0;border-bottom:1px solid var(--fsu-line,#e2e8f0)}
  .fpvp-rw .fpvp-contributions th[scope="row"],.fpvp-rw .fpvp-contributions td{display:block;padding:0;border:0}
  .fpvp-rw .fpvp-contributions th[scope="row"]{grid-column:1;grid-row:1}
  .fpvp-rw .fpvp-contributions td:last-child{grid-column:2;grid-row:1;justify-self:end;text-align:right}
  .fpvp-rw .fpvp-contributions td:not(:last-child){grid-column:1 / -1}
  .fpvp-rw .fpvp-contributions td[data-label]::before{content:attr(data-label) " : ";color:var(--fsu-muted)}
}

/* « Les autres lignes de votre bulletin » : le détail d'une fiche affiché sous son résumé garde la police du texte
   (les intertitres en gras ne prennent pas la police à chasse fixe réservée aux montants). */
.fpvp-rw .fpvp-understanding li .fpvp-control-body{margin-top:6px}
.fpvp-rw .fpvp-understanding li .fpvp-control-body strong{font-family:inherit;font-size:inherit;font-weight:700}
.fpvp-rw .fpvp-understanding li .fpvp-control-body p + p{margin-top:6px}

/* Cartes d'information longues : la suite repliée sous « En savoir plus » garde le rythme des paragraphes du corps. */
.fpvp-rw .card-body > .fpvp-plus > * + *{margin-top:9px}
.fpvp-rw .empty-note .fpvp-plus{margin:8px 0 0}

/* ==================================================================
   0.32.0 : confort tactile et accessibilité (revue du 03/10/2026).
   Règle commune : la zone cliquable fait au moins 44 px de haut, sans que le texte grossisse. Les dépliants prennent
   une hauteur minimale et des marges négatives : l'espace occupé à l'écran reste celui d'avant.
   ================================================================== */

/* Texte réservé aux lecteurs d'écran. */
.fpvp-sr{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* Titre du rapport en premier niveau quand la page n'en a pas : même apparence que le titre de niveau 2. */
.fpvp-rw .verdict h1.verdict-titre{font-family:inherit;font-size:26px;font-weight:700;line-height:1.15;margin:8px 0 8px;padding:0;letter-spacing:-.028em;color:inherit;text-transform:none}

/* Dépliants : « Pourquoi ce montant ? », « Voir le détail », « En savoir plus », « D'où vient ce classement ? »,
   « Voir le détail ligne par ligne », « Comment est fait ce calcul ? », règles de l'arrêt maladie. */
.fpvp-rw .card-why > summary{min-height:44px;margin:-4px 0}
.fpvp-rw .fpvp-arret-plus > summary,
.fpvp-rw .fpvp-plus > summary{display:flex;align-items:center;min-height:44px;margin:-11px 0}
.fpvp-rw .fpvp-arret-plus > summary::before,
.fpvp-rw .fpvp-plus > summary::before{white-space:pre}
.fpvp-rw .fpvp-arret-plus[open] > summary,
.fpvp-rw .fpvp-plus[open] > summary{margin-bottom:-5px}
.fpvp-rw .fpvp-arret-plus > summary:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:3px;border-radius:6px}
.fpvp-rw .fpvp-arret-plus > *:not(summary),
.fpvp-rw .card > .fpvp-plus > *:not(summary){font-size:14.5px;line-height:1.55}
.fpvp-rw .card > .fpvp-plus > * + *,
.fpvp-rw .card > .fpvp-arret-plus > * + *{margin-top:9px}
.fpvp-rw .card > .fpvp-plus,
.fpvp-rw .card > .fpvp-arret-plus{margin:10px 0 0}
/* « Lire la suite » reste dans la ligne ; sa zone cliquable déborde au-dessus et au-dessous du mot. */
.fpvp-rw .lire-suite > summary{display:inline-block;padding:13px 6px;margin:-13px -6px;position:relative}
.fpvp-rw .lire-suite > summary:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:-10px;border-radius:14px}
/* Blocs repris du rendu d'origine (« Comprendre ces lignes », « Autres lignes lues »). */
.fpvp-rw .fpvp-report-section-summary{min-height:44px}
/* « Un montant mal lu ? », « Demander l'explication de ces lignes », « Signaler une erreur ». */
.fpvp-rw .lbl-signal{min-height:44px;padding-top:10px;padding-bottom:10px;margin-top:4px}
.fpvp-rw .lbl-expliquer{display:flex}
.fpvp-rw .report-error-button{min-height:44px}
.fpvp-rw .card-cta{min-height:44px;display:inline-flex;align-items:center}
/* Flèches de la barre des chapitres. */
.fpvp-rw .nav-arrow{width:44px;height:44px}
.fpvp-rw .nav-arrow::after{content:none}
.fpvp-rw .nav-arrow--start{left:2px}
.fpvp-rw .nav-arrow--end{right:2px}
/* Pastille « Bêta » : la bordure transparente porte la zone cliquable à 44 px, la pastille visible ne change pas. */
.fpvp-rw button.fpvp-beta-toggle{border:10px solid transparent;background-clip:padding-box;margin:-10px -6px -10px calc(.35em - 10px);border-radius:999px;cursor:pointer;box-sizing:content-box;min-height:24px}
.fpvp-rw button.fpvp-beta-toggle:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:-8px}

/* Étiquette d'état d'une carte : elle passe à la ligne au lieu de sortir de la carte (« Arrêt maladie : cohérent avec
   notre lecture » à 375 px). */
.fpvp-rw .card-top{min-width:0}
.fpvp-rw .card-badge{flex:0 1 auto;min-width:0;max-width:100%;white-space:normal;overflow-wrap:anywhere;border-radius:14px;line-height:1.35}

/* Polices de moins de 12 px remontées à 12 px. */
.fpvp-rw .nav-legend,
.fpvp-rw .eyebrow,
.fpvp-rw .identity-title,
.fpvp-rw .idcell dt,
.fpvp-rw .card-badge,
.fpvp-rw .smicstep b,
.fpvp-rw .toc-title,
.fpvp-rw .toc-num,
.fpvp-rw .fpvp-understanding summary small,
.fpvp-rw .fpvp-ai-readings summary small,
.fpvp-rw .card-head .card-amount small,
.fpvp-rw .fpvp-tp-bouton-s{font-size:12px}
.fpvp-rw .eyebrow,.fpvp-rw .identity-title,.fpvp-rw .toc-title{letter-spacing:.1em}
.fpvp-rw sup,.fpvp-rw sub{font-size:12px}

/* Cartes côte à côte : chacune garde sa hauteur, sans grand blanc sous la plus courte. */
.fpvp-rw .cards{align-items:start}

/* Sigle du titre développé en quelques mots simples. */
.fpvp-rw .card-def{margin:6px 0 0;font-size:13px;line-height:1.45;color:var(--fsu-muted)}
.fpvp-rw .card-def + .card-resume{margin-top:8px}

/* Bloc « Ce que nous avons lu » : phrase et bouton « Modifier ». */
.fpvp-rw .identity-modifier{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:12px 0 0}
.fpvp-rw .identity-modifier-texte{flex:1 1 220px;font-size:13.5px;line-height:1.45;color:var(--fsu-muted)}
.fpvp-rw .identity-modifier-bouton{flex:none;min-height:44px;padding:0 18px;border:0;border-radius:999px;background:#fff;box-shadow:inset 0 0 0 1px var(--fsu-line);color:var(--fsu-blue-text);font-size:14.5px;font-weight:600;cursor:pointer}
.fpvp-rw .identity-modifier-bouton:hover{background:var(--fsu-blue-soft)}
.fpvp-rw .identity-modifier-bouton:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:2px}
.fpvp-rw .identity-modifier-bouton[disabled]{opacity:.6;cursor:default}
.fpvp-rw .identity-modifier-etat{flex:1 1 100%;font-size:13.5px;line-height:1.45;color:var(--fsu-ink);font-weight:600}
.fpvp-rw .identity-modifier-etat:empty{display:none}
.fpvp-rw .identity-modifier + .card-cta{margin-top:6px}

/* Bilan du premier écran : la raison (contractuel) suit la phrase de bilan. */
.fpvp-rw .verdict-bilan-raison{margin-top:6px}

/* Temps partiel : le repère « Aujourd'hui » n'est plus un bouton ; boutons d'enfants de 44 px au moins. */
.fpvp-rw div.fpvp-tp-bouton.is-actuel{user-select:none}
.fpvp-rw .fpvp-tp-retraite-annee > p{margin-top:9px}
.fpvp-rw .fpvp-tp-retraite-fixe[hidden]{display:none}
.fpvp-rw .fpvp-tp-enfants .fpvp-tp-bouton{min-width:48px}
@media (max-width:600px){
  .fpvp-rw .fpvp-tp-enfants .fpvp-tp-boutons{grid-template-columns:repeat(4,1fr);gap:8px}
}
/* Les dépliants d'une carte ont le même corps de texte, qu'ils viennent du script ou du serveur. */
.fpvp-rw .card > .fpvp-plus > summary,
.fpvp-rw .card > .fpvp-arret-plus > summary,
.fpvp-rw .card-body > .fpvp-plus > summary{font-size:14px}

/* 0.33.0 : revendication du syndicat sur une carte (indemnité différentielle), toujours visible. Un filet à la couleur
   du syndicat, sans fond d'alerte : c'est une position, pas un résultat de contrôle. */
.fpvp-rw .card-revendication{
  margin:12px 0 0;padding:2px 0 2px 12px;border-left:3px solid var(--fsu-red);
  font-size:14px;line-height:1.5;color:var(--fsu-ink);
}
.fpvp-rw .card-revendication + .card-cta{margin-top:12px}
/* Chapitre « Demain », garantie SMIC : renvoi vers la carte du chapitre « Votre traitement ». */
.fpvp-rw .smicrenvoi{margin:12px 0 0;font-size:14px;line-height:1.5;color:var(--fsu-muted)}

/* ============================================================
   0.34.0 — Cartes en trois niveaux, infobulles, renvoi vers un délégué
   ============================================================ */
/* Niveau 2 : le dépliant « En savoir plus » d'une carte en trois niveaux (calcul posé, puis explication). */
.fpvp-rw .card-resume + .card-plus{margin-top:8px}
.fpvp-rw .card-plus > summary{min-height:32px;display:inline-flex;align-items:center}
.fpvp-rw .card-plus > .card-body{margin-top:6px}
.fpvp-rw .card-plus > .card-body p{font-size:14.5px;line-height:1.55;color:var(--fsu-muted)}
.fpvp-rw .card-plus + .card-cta{margin-top:10px}

/* Infobulle : le mot est un bouton, souligné en pointillé ; il garde la police et la couleur de la phrase. */
.fpvp-rw .fpvp-info{display:inline}
.fpvp-rw .fpvp-info-mot{
  display:inline;margin:0;padding:0;border:0;border-radius:3px;background:none;
  font:inherit;color:inherit;letter-spacing:inherit;line-height:inherit;text-align:inherit;
  text-decoration:underline dotted var(--fsu-blue);text-decoration-thickness:2px;text-underline-offset:3px;
  cursor:help;-webkit-tap-highlight-color:transparent;touch-action:manipulation;
}
.fpvp-rw .fpvp-info-mot:hover,.fpvp-rw .fpvp-info-mot[aria-expanded="true"]{color:var(--fsu-blue-text);text-decoration-style:solid}
.fpvp-rw .fpvp-info-mot:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:2px}
/* La bulle est posée au niveau de la page (hors de .fpvp-rw) : ses couleurs sont écrites ici, sans variable. */
.fpvp-info-bulle{
  position:fixed;z-index:2147483000;left:0;top:0;box-sizing:border-box;
  width:max-content;max-width:300px;padding:10px 12px;border-radius:10px;
  background:#2c4653;color:#fff;box-shadow:0 8px 24px rgba(21,21,21,.22);
  font:500 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
  pointer-events:none;animation:fpvp-info-entree .12s ease-out;
}
.fpvp-info-bulle[hidden]{display:none}
@keyframes fpvp-info-entree{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){
  .fpvp-info-bulle{animation:none}
}

/* Renvoi vers un délégué FSU : un lien dans la phrase, relié au contact de la version. */
.fpvp-rw .fpvp-delegue{
  display:inline;margin:0;padding:0;border:0;border-radius:3px;background:none;
  font:inherit;font-weight:600;line-height:inherit;text-align:inherit;
  color:var(--fsu-blue-text);text-decoration:underline;text-underline-offset:3px;cursor:pointer;
}
.fpvp-rw .fpvp-delegue:hover{color:var(--fsu-blue-ink)}
.fpvp-rw .fpvp-delegue:focus-visible{outline:3px solid var(--fsu-blue);outline-offset:2px}

/* Lot 34 : ce que nous avons lu sur une ligne (carte en écart), montant corrigé par les totaux, et photo non contrôlée. */
.fpvp-rw .card-lu{margin:8px 0 0;font-size:14px;line-height:1.5;color:var(--fsu-ink)}
.fpvp-rw .card-resume + .card-lu,.fpvp-rw .card-resume-ligne + .card-lu{margin-top:8px}
.fpvp-rw .card-lu + .card-body,.fpvp-rw .card-lu + .card-why,.fpvp-rw .card-lu + .card-plus{margin-top:10px}
.fpvp-rw .card-lu-reparee{font-weight:600}
.fpvp-rw .lbl-reparee{margin:4px 0 0;font-size:13.5px;line-height:1.45;font-weight:600;color:var(--fsu-ink)}
.fpvp-rw .verdict-lecture{margin:0 0 14px;padding:10px 12px;max-width:56ch;font-size:15px;line-height:1.45;color:var(--fsu-ink);background:var(--fsu-yellow-soft);border-left:4px solid var(--fsu-yellow);border-radius:var(--fsu-radius-sm)}

/* Lot 55 : titres de groupe du chapitre « Vous situer » (« Au Département », « Ailleurs en France »). */
.fpvp-rw .situer-groupe{margin:22px 0 10px;font-size:1.05rem;font-weight:700;letter-spacing:.01em}
.fpvp-rw .situer-groupe:first-of-type{margin-top:6px}
