/* ==========================================================================================
   CADRAN — extrait de app/app/styles/cadran.css (production) pour la page autonome du
   questionnaire. Mêmes jetons, mêmes composants, valeurs inchangées ; seuls les chemins des
   polices sont relatifs (la page vit sur n'importe quel hôte statique) et les pièces qui ne
   servent pas ici (cadran du jour, jauges, rail…) sont retirées.
   En modifier une valeur, c'est d'abord la modifier dans la feuille de production.
   ========================================================================================== */

/* Polices hébergées à côté de la page : aucune requête vers un autre hôte. */
@font-face{ font-family:'Material Symbols Rounded'; font-style:normal; font-weight:400; font-display:block; src:url('fonts/material-symbols-rounded.woff2') format('woff2'); }
@font-face{ font-family:'Archivo'; font-style:normal; font-weight:100 900; font-stretch:62% 125%; font-display:swap; src:url('fonts/archivo-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
@font-face{ font-family:'Archivo'; font-style:normal; font-weight:100 900; font-stretch:62% 125%; font-display:swap; src:url('fonts/archivo-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }

/* 1. JETONS — clair (porcelaine) */
:root{
  color-scheme:light;
  --f:'Archivo', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --f-mono:ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace;
  --ground:#F6F7F9; --dial:#FFFFFF; --dial-edge:#F1F3F6; --sunk:#EDF0F3; --field:#FFFFFF;
  --ink:#1D232B; --ink-2:#4E5864; --ink-3:#66707C; --steel:#8A939E; --hair:#DCE1E7; --hair-2:#C3CAD3; --line-ctl:#77818D;
  --accent:#2559D6; --on-accent:#FFFFFF; --accent-soft:#E7EEFC;
  --work:#2D63DB; --w1:#4A86F2; --w2:#1E40AF; --now:#E8590C;
  --lg1:#60A5FA; --lg2:#1E40AF;
  --ok-bg:#E3F3EA;   --ok-ink:#145C39;   --ok-ic:#1E7F4F;
  --warn-bg:#FFF2D3; --warn-ink:#6B4500; --warn-ic:#9A6200;
  --bad-bg:#FCE9E7;  --bad-ink:#8E1F17;  --bad-ic:#C2352A;
  --vac-bg:#EFEAFD;  --vac-ink:#4B2FA6;  --vac-ic:#6B47D6;
  --info-bg:#E7EEFC; --info-ink:#1B3F99; --info-ic:#2559D6;
  --knob-off:#FFFFFF;
  --veil:rgba(14,17,22,.36);
  --sh-pop:0 14px 40px -14px rgba(20,26,34,.30), 0 2px 6px rgba(20,26,34,.06);
  --focus:var(--accent); --focus-w:2px; --focus-o:2px;
  --r-xs:6px; --r-s:10px; --r-m:14px; --r-l:18px; --r-xl:22px; --r-2xl:30px; --r-pill:999px;
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px; --sp-7:32px; --sp-8:40px; --sp-9:56px;
  --page-s:560px; --page-m:880px; --page-l:1180px;
  --tap:44px; --ctl:44px; --ctl-s:36px;
  --z-raise:1; --z-sticky:5; --z-nav:10; --z-overlay:40; --z-toast:60; --z-progress:80;
  --surface:var(--ground);
  --fs-2xs:.75rem; --fs-xs:.8125rem; --fs-s:.875rem; --fs-m:.9375rem; --fs-in:1rem; --fs-l:1.0625rem; --fs-xl:1.25rem; --fs-2xl:1.875rem;
  --fn-s:1.1875rem; --fn-m:1.3125rem; --fn-l:1.75rem;
  --fw-light:300; --fw-r:400; --fw-m:500; --fw-sb:600; --fw-t:650; --fw-b:700;
  --wide:125%; --semi-wide:112%; --narrow:88%;
  --t-fast:120ms; --t-base:200ms; --t-slow:280ms; --t-max:400ms; --t-attente:300ms;
  --ease-out:cubic-bezier(.2,0,0,1); --ease-inout:cubic-bezier(.4,0,.2,1);
}

/* 1 bis. JETONS — sombre (minuit) : suit l'appareil sauf choix « clair », ou choix « sombre ».
   Les deux blocs sont IDENTIQUES : en modifier un, c'est modifier l'autre. */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --ground:#0E1116; --dial:#151A21; --dial-edge:#10141A; --sunk:#1C222B; --field:#10141A;
    --ink:#EEF1F5; --ink-2:#A3ADB9; --ink-3:#8C96A3; --steel:#5F6976; --hair:#262D37; --hair-2:#3A434F; --line-ctl:#6A7582;
    --accent:#6EA8FF; --on-accent:#0B1322; --accent-soft:#16253C;
    --work:#6EA8FF; --w1:#9CC4FF; --w2:#4F8CF6; --now:#E8590C;
    --lg1:#7DB6FF; --lg2:#3A6FE6;
    --ok-bg:#11291D;   --ok-ink:#8FE3B6;   --ok-ic:#4CC98A;
    --warn-bg:#2D230E; --warn-ink:#F6CF7E; --warn-ic:#F0B341;
    --bad-bg:#351716;  --bad-ink:#FFB1A9;  --bad-ic:#FF7B6F;
    --vac-bg:#211A3B;  --vac-ink:#CBBDFF;  --vac-ic:#A88FFF;
    --info-bg:#16253C; --info-ink:#B9D3FF; --info-ic:#6EA8FF;
    --knob-off:#E3E8EE;
    --veil:rgba(0,0,0,.56);
    --sh-pop:0 16px 44px -12px rgba(0,0,0,.72), 0 0 0 1px rgba(255,255,255,.04);
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --ground:#0E1116; --dial:#151A21; --dial-edge:#10141A; --sunk:#1C222B; --field:#10141A;
  --ink:#EEF1F5; --ink-2:#A3ADB9; --ink-3:#8C96A3; --steel:#5F6976; --hair:#262D37; --hair-2:#3A434F; --line-ctl:#6A7582;
  --accent:#6EA8FF; --on-accent:#0B1322; --accent-soft:#16253C;
  --work:#6EA8FF; --w1:#9CC4FF; --w2:#4F8CF6; --now:#E8590C;
  --lg1:#7DB6FF; --lg2:#3A6FE6;
  --ok-bg:#11291D;   --ok-ink:#8FE3B6;   --ok-ic:#4CC98A;
  --warn-bg:#2D230E; --warn-ink:#F6CF7E; --warn-ic:#F0B341;
  --bad-bg:#351716;  --bad-ink:#FFB1A9;  --bad-ic:#FF7B6F;
  --vac-bg:#211A3B;  --vac-ink:#CBBDFF;  --vac-ic:#A88FFF;
  --info-bg:#16253C; --info-ink:#B9D3FF; --info-ic:#6EA8FF;
  --knob-off:#E3E8EE;
  --veil:rgba(0,0,0,.56);
  --sh-pop:0 16px 44px -12px rgba(0,0,0,.72), 0 0 0 1px rgba(255,255,255,.04);
}

/* 2. BASE */
*,*::before,*::after{ box-sizing:border-box; }
[hidden]{ display:none !important; }
html{ font-size:100%; -webkit-text-size-adjust:100%; text-size-adjust:100%; }
body{ margin:0; background:var(--ground); color:var(--ink); font:var(--fw-r) var(--fs-m)/1.45 var(--f); -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; }
button, input, select, textarea{ font:inherit; color:inherit; }
h1, h2, h3, h4{ margin:0; font-weight:var(--fw-t); }
p{ margin:0; }
a{ color:var(--accent); text-underline-offset:.18em; }
::selection{ background:var(--accent-soft); color:var(--ink); }

.ms{ font-family:'Material Symbols Rounded'; font-weight:normal; font-style:normal; font-size:20px; line-height:1; letter-spacing:normal; text-transform:none; display:inline-block; white-space:nowrap; word-wrap:normal; direction:ltr; vertical-align:middle; font-feature-settings:'liga'; -webkit-font-smoothing:antialiased; font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24; flex:none; user-select:none; }
.sr-only{ position:absolute !important; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

:focus:not(:focus-visible){ outline:none; }
:focus-visible{ outline:var(--focus-w) solid var(--focus); outline-offset:var(--focus-o); }

/* 3. MISE EN PAGE */
.stack{ display:flex; flex-direction:column; gap:var(--gap, 16px); min-width:0; }
.stack > :is(.chip, .btn){ align-self:flex-start; }
.cluster{ display:flex; flex-wrap:wrap; align-items:center; gap:var(--gap, 8px); min-width:0; }

.page-title{ margin:0 auto 0 0; font-size:var(--fs-2xl); font-weight:var(--fw-sb); letter-spacing:-.01em; line-height:1.1; }
@media (max-width:640px){
  .page-title{ font-size:var(--fs-xl); }
}

/* 5. BOUTONS */
.btn{ position:relative; display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:var(--ctl); padding:0 20px; border:0; border-radius:var(--r-pill); background:var(--dial); color:var(--ink); box-shadow:inset 0 0 0 1px var(--hair-2); font-weight:var(--fw-sb); font-size:var(--fs-m); line-height:1.1; white-space:nowrap; text-decoration:none; cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.btn .ms{ font-size:19px; }
.btn > .ms{ margin-left:-4px; }
.btn-primary{ background:var(--accent); color:var(--on-accent); box-shadow:none; }
.btn-tone{ background:var(--accent-soft); color:var(--accent); box-shadow:none; }
.btn-danger{ background:var(--bad-bg); color:var(--bad-ink); box-shadow:none; }
.btn-danger .ms{ color:var(--bad-ic); }
/* Petit : la police baisse, jamais la zone de toucher (44 px par la marge invisible). */
.btn.sm{ min-height:var(--ctl-s); padding:0 16px; gap:6px; font-size:var(--fs-s); }
.btn.sm .ms{ font-size:17px; }
.btn.sm::after{ content:''; position:absolute; inset:-4px 0; }

/* Bouton d'icône seule : title ou aria-label obligatoire. */
.icon-btn{ position:relative; flex:none; width:44px; height:44px; padding:0; border:0; border-radius:50%; display:inline-grid; place-items:center; background:transparent; color:var(--ink); text-decoration:none; cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.icon-btn .ms{ font-size:22px; }

/* Rangée d'actions. */
.btn-row{ display:flex; align-items:center; flex-wrap:wrap; gap:10px 12px; }

/* 6. JETONS D'INFORMATION ET D'ÉTAT — un état = icône + couleur + UN mot. */
.chip{ display:inline-flex; align-items:center; gap:5px; max-width:100%; min-height:28px; padding:0 11px 0 8px; border-radius:14px; background:var(--sunk); color:var(--ink-2); font-weight:var(--fw-sb); font-size:var(--fs-xs); line-height:1.1; white-space:nowrap; vertical-align:middle; font-variant-numeric:tabular-nums; }
.chip .ms{ font-size:17px; }
.chip.ok{ background:var(--ok-bg); color:var(--ok-ink); }
.chip.ok .ms{ color:var(--ok-ic); }
.chip.warn{ background:var(--warn-bg); color:var(--warn-ink); }
.chip.warn .ms{ color:var(--warn-ic); }
.chip.info{ background:var(--info-bg); color:var(--info-ink); }
.chip.info .ms{ color:var(--info-ic); }
/* Jeton cliquable (sélection) : pressé = encre pleine. */
:is(button, a).chip{ position:relative; min-height:36px; padding:0 14px 0 10px; border:0; background:var(--dial); color:var(--ink); box-shadow:inset 0 0 0 1px var(--hair-2); text-decoration:none; cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
:is(button, a).chip::after{ content:''; position:absolute; inset:-4px 0; }
:is(button, a).chip[aria-pressed="true"]{ background:var(--ink); color:var(--dial); box-shadow:none; }
:is(button, a).chip[aria-pressed="true"] .ms{ color:var(--dial); }

/* 7. FORMULAIRES */
.field{ display:flex; flex-direction:column; gap:6px; min-width:0; }
.field > label, .field-label{ display:flex; align-items:center; gap:6px; font-size:var(--fs-s); font-weight:var(--fw-sb); color:var(--ink); }
.form-hint{ margin:0; font-size:var(--fs-xs); color:var(--ink-2); line-height:1.35; }
.field-error{ margin:0; display:flex; align-items:flex-start; gap:6px; font-size:var(--fs-xs); font-weight:var(--fw-sb); color:var(--ink); line-height:1.35; }
.field-error .ms{ font-size:17px; color:var(--bad-ic); flex:none; margin-top:-1px; }
.field-error.warn .ms{ color:var(--warn-ic); }

.input, .select, .textarea{ display:block; width:100%; min-height:var(--ctl); padding:10px 14px; border:1px solid var(--line-ctl); border-radius:12px; background:var(--field); color:var(--ink); font:var(--fw-r) var(--fs-in)/1.3 var(--f); font-variant-numeric:tabular-nums; -webkit-appearance:none; appearance:none; }
.input::placeholder, .textarea::placeholder{ color:var(--ink-3); opacity:1; }
:is(.input, .select, .textarea):focus-visible{ border-color:var(--accent); outline:var(--focus-w) solid var(--focus); outline-offset:1px; }
:is(.input, .select, .textarea)[aria-invalid="true"]{ border-color:var(--bad-ic); box-shadow:inset 0 0 0 1px var(--bad-ic); }
.textarea{ min-height:104px; resize:vertical; line-height:1.45; }
.select{ padding-right:40px; cursor:pointer; background-image:linear-gradient(45deg, transparent 50%, var(--ink-2) 50%), linear-gradient(135deg, var(--ink-2) 50%, transparent 50%); background-position:calc(100% - 20px) 52%, calc(100% - 15px) 52%; background-size:5px 5px; background-repeat:no-repeat; }
select option, select optgroup{ background:var(--dial); color:var(--ink); }   /* menu natif OPAQUE */
.input[type="time"], .input[type="date"]{ font-variant-numeric:tabular-nums; }

/* Champ avec unité (jours, personnes) — le cadre porte le focus. */
.affix{ display:flex; align-items:center; min-height:var(--ctl); border:1px solid var(--line-ctl); border-radius:12px; background:var(--field); }
.affix > .input{ flex:1; min-width:0; min-height:calc(var(--ctl) - 2px); border:0; background:transparent; }
.affix > .input:focus-visible{ outline:none; }
.affix:focus-within{ border-color:var(--accent); outline:var(--focus-w) solid var(--focus); outline-offset:1px; }
.affix.is-invalid{ border-color:var(--bad-ic); box-shadow:inset 0 0 0 1px var(--bad-ic); }
.affix > .input[aria-invalid="true"]{ box-shadow:none; }   /* le cadre porte l'anneau : jamais deux contours */
.unit{ flex:none; padding:0 14px 0 2px; font-size:var(--fs-s); font-weight:var(--fw-m); color:var(--ink-2); white-space:nowrap; }

/* Interrupteur : <button type="button" role="switch" aria-checked class="switch">. Éteint = piste --line-ctl. */
.switch{ position:relative; flex:none; display:inline-block; width:48px; height:28px; margin:0; padding:0; border:0; border-radius:14px; background:var(--line-ctl); vertical-align:middle; cursor:pointer; -webkit-appearance:none; appearance:none; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.switch::before{ content:''; position:absolute; left:3px; top:3px; width:22px; height:22px; border-radius:50%; background:var(--knob-off); box-shadow:0 1px 2px rgba(0,0,0,.22); }
.switch::after{ content:''; position:absolute; inset:-8px -2px; }   /* 44 px au toucher */
.switch[aria-checked="true"]{ background:var(--accent); }
.switch[aria-checked="true"]::before{ transform:translateX(20px); background:var(--on-accent); }

/* Segments : un seul choix parmi 2 à 4. L'état choisi est posé par le script (.on), sans dépendre de :has. */
.seg{ display:inline-flex; max-width:100%; padding:4px; gap:2px; border-radius:var(--r-pill); background:var(--dial); box-shadow:inset 0 0 0 1px var(--hair-2); }
.seg > label{ position:relative; flex:1 1 auto; min-width:0; display:inline-flex; align-items:center; justify-content:center; gap:7px; min-height:var(--ctl); padding:0 16px; border:0; border-radius:var(--r-pill); background:transparent; color:var(--ink-2); font-weight:var(--fw-sb); font-size:var(--fs-s); white-space:nowrap; text-decoration:none; cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.seg > label.on{ background:var(--ink); color:var(--dial); }
.seg > label > input{ position:absolute; inset:0; width:100%; height:100%; margin:0; opacity:0; cursor:pointer; }
.seg > label:focus-within{ outline:var(--focus-w) solid var(--focus); outline-offset:2px; }
@supports selector(:has(a)){
  .seg > label:focus-within{ outline:none; }
  .seg > label:has(> input:focus-visible){ outline:var(--focus-w) solid var(--focus); outline-offset:2px; }
}

/* 8. SURFACES — cartes, bandeaux */
.card{ --surface:var(--dial); position:relative; min-width:0; padding:20px 22px; border-radius:var(--r-xl); background:var(--dial); box-shadow:inset 0 0 0 1px var(--hair); }
.card > * + *{ margin-top:14px; }
.card.sunk{ --surface:var(--sunk); background:var(--sunk); box-shadow:none; }
@media (max-width:640px){ .card{ padding:16px; border-radius:var(--r-l); } }


/* Bandeau : icône + une ligne d'effet (≤ 25 mots) + au plus UN geste. */
.banner{ display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; min-height:52px; padding:8px 16px 8px 14px; border-radius:var(--r-xl); background:var(--sunk); color:var(--ink); font-size:var(--fs-s); font-weight:var(--fw-sb); line-height:1.3; }
.banner > .ms{ font-size:22px; flex:none; }
.banner-t{ flex:1 1 180px; min-width:0; }
.banner.info{ background:var(--info-bg); color:var(--info-ink); } .banner.info > .ms{ color:var(--info-ic); }
.banner.ok{ background:var(--ok-bg); color:var(--ok-ink); } .banner.ok > .ms{ color:var(--ok-ic); }
.banner.warn{ background:var(--warn-bg); color:var(--warn-ink); } .banner.warn > .ms{ color:var(--warn-ic); }

/* Grande icône dans sa lunette (page « Réponses effacées »). */
.empty-ic{ width:64px; height:64px; display:grid; place-items:center; border-radius:50%; background:var(--dial); color:var(--ink-2); box-shadow:inset 0 0 0 1px var(--hair-2), 0 0 0 6px var(--sunk); margin-bottom:4px; }
.empty-ic .ms{ font-size:30px; }

/* Barre de progression. */
.prog{ position:relative; height:6px; overflow:hidden; border-radius:3px; background:var(--sunk); box-shadow:inset 0 0 0 1px var(--hair); }
.prog > i{ display:block; width:var(--p, 0%); height:100%; border-radius:3px; background:var(--work); }

/* 13. PRESSION — instantanée, aussi en mouvement réduit (c'est le retour obligatoire d'un clic) */
:is(.btn, .icon-btn, button.chip, a.chip, .seg > *, .switch):active:not([aria-disabled="true"]):not(:disabled){ transform:scale(.97); }

/* 14. MOUVEMENT — en opt-in (no-preference) ; une réponse à une action, jamais autonome */
@keyframes cad-rise{ from{ transform:translateY(6px); } to{ transform:none; } }
@media (prefers-reduced-motion: no-preference){
  :is(.btn, .icon-btn, button.chip, a.chip, .seg > *, .switch){
    transition:transform var(--t-fast) var(--ease-out), background-color var(--t-base) var(--ease-inout), color var(--t-base) var(--ease-inout), box-shadow var(--t-base) var(--ease-inout), border-color var(--t-base) var(--ease-inout), opacity var(--t-base) var(--ease-inout);
  }
  :is(.input, .select, .textarea, .affix){ transition:border-color var(--t-fast) var(--ease-out), background-color var(--t-fast) var(--ease-out); }
  .switch::before{ transition:transform var(--t-base) var(--ease-out), background-color var(--t-base) var(--ease-inout); }
  /* Entrées : TRANSFORM SEUL (une animation part de l'état visible, elle n'y « arrive » jamais). */
  .rise{ animation:cad-rise var(--t-slow) var(--ease-out); }
  .prog > i{ transition:width var(--t-max) var(--ease-inout); }
}

/* 15. SURVOL — souris seulement ; il ne porte jamais d'information */
@media (hover:hover){
  .btn:hover:not([aria-disabled="true"]){ background:var(--sunk); }
  .btn-primary:hover:not([aria-disabled="true"]){ background:var(--accent); }
  .btn-tone:hover:not([aria-disabled="true"]){ background:var(--accent-soft); }
  .btn-danger:hover:not([aria-disabled="true"]){ background:var(--bad-bg); }
  @supports (color: color-mix(in srgb, red 50%, blue)){
    .btn-primary:hover:not([aria-disabled="true"]){ background:color-mix(in srgb, var(--accent) 88%, var(--ink)); }
    .btn-tone:hover:not([aria-disabled="true"]){ background:color-mix(in srgb, var(--accent-soft) 90%, var(--accent)); }
    .btn-danger:hover:not([aria-disabled="true"]){ background:color-mix(in srgb, var(--bad-bg) 88%, var(--bad-ic)); }
  }
  .icon-btn:hover:not([aria-disabled="true"]){ background:var(--sunk); }
  :is(button, a).chip:hover:not([aria-pressed="true"]){ background:var(--sunk); }
  .seg > label:not(.on):hover{ color:var(--ink); background:var(--sunk); }
}
