/* ============================================================
   Simulateur — formulaire multi-étapes (wizard)
   Dépend de : style.css, heading.css, sub-page.css
   ============================================================ */

[hidden] {
    display: none !important;
}

/* Bannière compacte */

/* ------------------------------------------------------------
   Barre de progression
   ------------------------------------------------------------ */

/*
 | La largeur du formulaire.
 |
 | Elle était donnée par des classes utilitaires — 90 % puis 80 % du
 | conteneur — et suivait donc la largeur de l'écran. Un formulaire se lit
 | mieux borné : à 820 px, une demi-colonne fait encore 400 px, et l'œil ne
 | traverse pas l'écran entre un libellé et son champ.
 |
 | Les bandeaux de reprise s'y alignent : ils annoncent ce formulaire-là.
 */
/*
 | La largeur du formulaire.
 |
 | Celle d'origine, reprise des classes utilitaires que portait le gabarit :
 | toute la place sur petit écran, 90 % du conteneur à partir de 992 px,
 | 80 % à partir de 1366. Elle est ici plutôt que dans le gabarit pour que
 | le formulaire et ses bandeaux ne puissent pas diverger.
 */
.wizard,
.wizard-resume {
    max-width: 100%;
    margin-right: auto;
    margin-left: auto;
}

@media only screen and (min-width: 992px) {
    .wizard,
    .wizard-resume { max-width: 90%; }
}

@media only screen and (min-width: 1366px) {
    .wizard,
    .wizard-resume { max-width: 80%; }
}

/*
 | Les champs ne touchent pas les bords.
 |
 | La marge est posée sur le formulaire, non sur le bloc : la barre de
 | progression, le bandeau de reprise et les intitulés de section gardent
 | ainsi la largeur entière, et seuls les champs se retirent.
 */
/*
 | La colonne de saisie.
 |
 | Le bloc garde la largeur d'origine — le bandeau et la barre de
 | progression s'y étalent — mais le formulaire lui-même s'y inscrit dans
 | une colonne plus étroite, centrée : au-delà, l'œil traverse l'écran entre
 | un libellé et son champ.
 */
.wizard-form {
    max-width: 820px;
    padding: 0 48px;
    margin-right: auto;
    margin-left: auto;
}

@media only screen and (max-width: 767px) {

    /* Sur téléphone seulement : le conteneur de la page a déjà ses marges,
       et les cumuler étranglerait les champs. */
    .wizard-form { padding: 0; }

}

.wizard-progress-wrap {
    margin-bottom: 35px;
}

.wizard-progress {
    display: flex;
    list-style: none;
    padding: 0;
    margin: 0;
    counter-reset: step;
}

.wizard-progress-item {
    flex: 1 1 0;
    position: relative;
    text-align: center;
}

/* Trait de liaison */
.wizard-progress-item:before {
    content: "";
    position: absolute;
    top: 22px;
    right: 50%;
    width: 100%;
    height: 3px;
    background: #e2e2e2;
    z-index: 0;
}

.wizard-progress-item:first-child:before {
    content: none;
}

.wizard-progress-item.is-done:before,
.wizard-progress-item.is-current:before {
    background: #fa5a06;
}

/* Le trait qui mène au repère suivant se remplit panneau après panneau :
   l'étape avance sous les yeux, sans attendre d'être finie. */
.wizard-progress-item.est-en-cours:before {
    background: linear-gradient(to right,
        #fa5a06 var(--avancement, 0%),
        #e2e2e2 var(--avancement, 0%));
}

.wizard-progress-bt {
    appearance: none;
    -moz-appearance: none;
    -webkit-appearance: none;
    background: none;
    border: 0;
    padding: 0;
    width: 100%;
    position: relative;
    z-index: 1;
    color: #7d97a1;
    cursor: pointer;
}

.wizard-progress-bt .nb {
    display: block;
    width: 46px;
    height: 46px;
    line-height: 42px;
    margin: 0 auto 10px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid #e2e2e2;
    color: #7d97a1;
    font-weight: 700;
    font-size: 18px;
    transition: .2s;
}

.wizard-progress-bt .lb {
    display: block;
    font-size: 14px;
    font-weight: 500;
    line-height: 1.2;
    padding: 0 5px;
}

.wizard-progress-item.is-done .wizard-progress-bt .nb {
    background: #fa5a06;
    border-color: #fa5a06;
    color: #fff;
}

.wizard-progress-item.is-current .wizard-progress-bt .nb {
    background: #fff;
    border-color: #fa5a06;
    color: #fa5a06;
    transform: scale(1.08);
}

.wizard-progress-item.is-current .wizard-progress-bt,
.wizard-progress-item.is-done .wizard-progress-bt {
    color: #406573;
}

.wizard-progress-bt:hover .nb {
    border-color: #fa5a06;
}

.wizard-progress-bt:hover { color: #406573; }

.wizard-progress-txt {
    display: none;
    text-align: center;
    font-weight: 500;
    margin: 15px 0 0;
    color: #406573;
}

/* ------------------------------------------------------------
   Étapes
   ------------------------------------------------------------ */

.wizard-step {
    display: none;
}

.wizard-step.is-active {
    display: block;
    animation: wizardIn .35s ease;
}

/*
 | Les panneaux.
 |
 | Un seul à la fois : le visiteur répond à trois questions, pas à quinze.
 | Ils sont masqués par une classe, jamais par l'attribut « hidden », qui
 | signifie ici « sans objet » et retire le champ de l'envoi.
 */
[data-panneau] { display: none; }

[data-panneau].est-visible {
    display: block;
    animation: wizardIn .3s ease;
}

/* Une réponse a rendu ce panneau sans objet : il ne s'affiche pas, même
   s'il portait la marque du panneau courant. */
[data-panneau][hidden] { display: none; }

@keyframes wizardIn {
    from { opacity: 0; transform: translateY(12px); }
    to   { opacity: 1; transform: translateY(0); }
}

.wizard h2.step-title {
    font-size: 26px;
    margin-bottom: 5px;
}

.wizard p.step-intro {
    color: #7d97a1;
    margin-bottom: 30px;
}

/* Le titre de l'étape se centre sous la barre, qui l'est aussi. Les
   intitulés de panneau, eux, restent alignés sur leurs champs — leur filet
   les souligne d'un bord à l'autre. */
.wizard-step > h2.step-title,
.wizard-step > p.step-intro,
.wizard-bilan > h2.step-title,
.wizard-bilan > p.step-intro {
    text-align: center;
}

.wizard-step > p.step-intro,
.wizard-bilan > p.step-intro {
    max-width: 620px;
    margin-right: auto;
    margin-left: auto;
}

/*
 | Encart rappel de simulation.
 |
 | Il occupait trois lignes empilées — le titre, les quatre chiffres, la
 | mention — pour quatre nombres qu'on ne fait que relire. Le titre passe à
 | côté des chiffres : même contenu, moitié moins de hauteur, et le premier
 | champ du formulaire remonte au-dessus de la ligne de flottaison.
 */

/*
 | Le rappel s'aligne sur la barre de progression.
 |
 | La barre occupe toute la largeur, mais ses quatre repères sont centrés
 | dans des segments égaux : le premier tombe donc au huitième de la
 | largeur, le dernier aux sept huitièmes. Le dessin de la barre va d'un
 | bord de repère à l'autre — 12,5 % moins la moitié d'un repère de 46 px.
 | Le rappel prend exactement cette mesure.
 */
.wizard-recap {
    margin-right: calc(12.5% - 23px);
    margin-left: calc(12.5% - 23px);
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px 20px;

    background: #fa5a06;
    color: #fff;
    border-radius: 18px;
    padding: 16px 22px;
    margin-bottom: 28px;
    position: relative;
    overflow: hidden;
}

/* Le fond n'est pas un élément de la ligne : il est détaché du flux. */
.wizard-recap:after {
    position: absolute;
    content: "";
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    background: url(img/bg-background-2.png) no-repeat;
    background-size: cover;
    background-position: 20%;
    opacity: .15;
    z-index: 0;
}

.wizard-recap > * {
    position: relative;
    z-index: 1;
}

.wizard-recap-head {
    display: flex;
    align-items: center;
    flex: 0 0 auto;
    margin: 0;
}

.wizard-recap-head i {
    font-size: 32px;
    margin-right: 12px;
    line-height: 1;
}

.wizard-recap-head .lb {
    display: block;
    font-size: 11.5px;
    text-transform: uppercase;
    letter-spacing: 1px;
    line-height: 1.3;
    opacity: .85;
}

.wizard-recap-head strong {
    font-size: 19px;
    font-weight: 700;
    line-height: 1.2;
}

.wizard-recap-list {
    display: flex;
    flex-wrap: wrap;
    flex: 1 1 320px;
    gap: 8px;
    list-style: none;
    padding: 0;
    margin: 0;
}

.wizard-recap-list li {
    flex: 1 1 108px;
    min-width: 0;
    padding: 8px 14px;
    background: rgba(255,255,255,.2);
    border: 1px solid rgba(255,255,255,.3);
    border-radius: 13px;
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(5px);
}

.wizard-recap-list li span {
    display: block;
    font-size: 12px;
    line-height: 1.3;
    opacity: .9;
}

.wizard-recap-list li strong {
    font-size: 16.5px;
    font-weight: 700;
    line-height: 1.35;
    letter-spacing: .5px;
}

/* La mention légale ferme l'encart : elle prend la ligne entière. */
.wizard-recap-note {
    flex: 1 0 100%;
    font-size: 12px;
    line-height: 1.4;
    margin: 0;
    opacity: .95;
}

.wizard-recap-note a {
    color: #fff;
    text-decoration: underline;
}

.wizard-recap-note a:hover {
    color: #fff;
}

@media only screen and (max-width: 767px) {

    /* Sur téléphone la barre se resserre : le rappel reprend toute la place. */
    .wizard-recap {
        margin-right: 0;
        margin-left: 0;
        padding: 16px;
        gap: 12px;
    }

    .wizard-recap-head { flex: 1 0 100%; }

}

/* ------------------------------------------------------------
   Blocs
   ------------------------------------------------------------ */

/*
 | Les blocs du formulaire.
 |
 | C'étaient des cartes blanches, bordées, posées sur une page blanche.
 | Elles avaient un sens quand une étape en alignait quatre ; depuis qu'un
 | panneau ne montre plus que trois ou quatre questions, le cadre n'ajoute
 | qu'un trait. Le titre suffit à dire de quoi il s'agit.
 */
.card-block {
    margin-bottom: 22px;
}

/* L'intitulé de section ressort de la marge du formulaire : c'est lui qui
   borne le panneau, son filet va donc d'un bord à l'autre pendant que les
   champs se retirent dessous. */
.wizard h3.block-title {
    font-size: 19px;
    font-weight: 600;
    margin: 0 -48px 20px;
    padding-bottom: 12px;
    border-bottom: 1px solid #eef2f4;
}

@media only screen and (max-width: 767px) {
    .wizard h3.block-title { margin-right: 0; margin-left: 0; }
}

.wizard h3.block-title i {
    color: #fa5a06;
    margin-right: 8px;
}

/*
 | Les questions qui en appellent d'autres.
 |
 | « Oui » ouvre un bloc : ce sont des champs du formulaire, pas un encart.
 | Ils gardent donc le fond de la page, et seul un filet en pointillés à
 | gauche dit qu'ils dépendent de la réponse au-dessus. Un cadre plein les
 | détachait du formulaire au lieu de les y rattacher.
 |
 | Le filet est à l'orange de la maison : à moitié vide, il pose la couleur
 | sans peser comme le trait plein qu'il remplace.
 */
.sub-block {
    background: none;
    border: 0;
    border-left: 2px dashed #fa5a06;
    border-radius: 0;
    padding: 2px 0 2px 22px;
    margin: 8px 0 22px;
    animation: sousBlocIn .25s ease;
}

/* Il apparaît en réponse à un clic : un mouvement bref dit d'où il vient. */
@keyframes sousBlocIn {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}

.sub-block-intro {
    font-size: 13.5px;
    color: #7d97a1;
    margin: -2px 0 16px;
}


/* ------------------------------------------------------------
   Champs
   ------------------------------------------------------------ */

.wizard .field {
    margin-bottom: 18px;
}

/*
 | Un champ par ligne.
 |
 | La colonne de saisie fait 724 px : deux champs y tiennent, mais mal dès
 | que l'un est un menu déroulant de 50 px et l'autre une paire de tuiles de
 | 92. Et un champ seul sur sa rangée laissait une moitié vide.
 */
.wizard .row > .field[class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
}

/*
 | Une question fermée est un « fieldset » : le navigateur lui met un cadre
 | et un remplissage, qu'on retire.
 |
 | Mais « padding: 0 » effacerait aussi la gouttière de la grille si la
 | question occupait une colonne — elle démarrerait douze pixels à gauche
 | des champs voisins. On la lui rend.
 */
.wizard fieldset.field {
    border: 0;
    padding: 0;
}

.wizard fieldset.field[class*="col-"] {
    padding-right: calc(var(--bs-gutter-x, 1.5rem) * .5);
    padding-left: calc(var(--bs-gutter-x, 1.5rem) * .5);
}

.wizard .field label,
.wizard .field legend {
    display: block;
    float: none;
    width: auto;
    font-size: 15px;
    font-weight: 500;
    line-height: 1.3;
    margin-bottom: 6px;
    color: #406573;
}

.wizard .field .req {
    color: #fa5a06;
    font-weight: 700;
}

.wizard input[type="text"],
.wizard input[type="email"],
.wizard input[type="tel"],
.wizard input[type="number"],
.wizard input[type="date"],
.wizard select,
.wizard textarea {
    margin-bottom: 0;
    background-color: #fff;
    border: 2px solid #ddd;
    color: #406573;
    font-family: inherit;
    font-size: 15px;
}

.wizard select {
    padding-right: 45px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath fill='none' stroke='%23fa5a06' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round' d='M1 1l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center right 20px;
    cursor: pointer;
}

.wizard input:focus,
.wizard select:focus,
.wizard textarea:focus {
    border-color: #fa5a06;
}

.wizard input.is-invalid,
.wizard select.is-invalid,
.wizard textarea.is-invalid {
    border-color: #d93025;
    background-color: #fff8f8;
}

.wizard .field.has-error label,
.wizard .field.has-error legend {
    color: #d93025;
}

.field-hint {
    display: block;
    font-size: 12px;
    color: #8ea3ac;
    margin-top: 6px;
    line-height: 1.3;
}

.field-error {
    display: none;
    font-size: 13px;
    font-weight: 500;
    color: #d93025;
    margin-top: 6px;
    line-height: 1.3;
}

.field-error.is-visible {
    display: block;
}

.field.has-error .field-hint {
    display: none;
}

/* La note dit ce qu'on a reconnu du numéro : elle passe du gris d'un
   conseil à la couleur d'une confirmation. */
.field-hint.est-reconnu {
    color: #219653;
    font-weight: 500;
}

/* Montants */

.input-money {
    position: relative;
}

.input-money input {
    padding-right: 42px;
}

.input-money > span {
    position: absolute;
    top: 50%;
    right: 20px;
    transform: translateY(-50%);
    color: #8ea3ac;
    font-weight: 500;
    pointer-events: none;
}

/* Radios / cases à cocher */

/*
 | Les choix en tuiles.
 |
 | Une question fermée n'a que deux réponses, et elles valaient chacune une
 | pastille de dix-huit pixels perdue dans un formulaire qui en compte
 | soixante. Un picto, un mot, une cible franche : le choix se voit de loin
 | et se clique sans viser.
 |
 | Les pastilles d'origine, dessinées en « :before » et « :after » par la
 | feuille du gabarit, sont éteintes plus bas — elles vivaient dans le même
 | élément que la tuile.
 */

.radio-row {
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    justify-content: center;
    gap: 12px;
    padding-top: 4px;
}

/* Elles se partagent la colonne au lieu d'y flotter en petits carrés, sans
   dépasser une largeur où « Oui » se perdrait. */
.wizard .radio-row .custom-radio {
    flex: 1 1 150px;
    max-width: 267px;
    margin: 0;
}

.wizard .radio-row .custom-radio label {
    display: block;
    height: 100%;
    margin: 0;
}

/* L'entrée reste dans la page pour rester atteignable au clavier. */
.wizard .radio-row .custom-radio label input[type="radio"] {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}

.wizard .radio-row .custom-radio label input[type="radio"] ~ span {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;

    width: 100%;
    height: 100%;
    padding: 16px 18px;

    border: 2px solid #e2e2e2;
    border-radius: 14px;
    background: #fff;
    color: #406573;

    font-size: 15px;
    font-weight: 600;
    line-height: 1.2;
    text-align: center;
    cursor: pointer;
    transition: border-color .15s ease, background-color .15s ease, color .15s ease;
}

.wizard .radio-row .custom-radio label input[type="radio"] ~ span:before,
.wizard .radio-row .custom-radio label input[type="radio"]:checked ~ span:after {
    content: none;
}

.wizard .radio-row .custom-radio label span i {
    font-size: 28px;
    line-height: 1;
    color: #8ea3ac;
    transition: color .15s ease;
}

.wizard .radio-row .custom-radio label:hover input[type="radio"] ~ span { border-color: #fa5a06; }

.wizard .radio-row .custom-radio label input[type="radio"]:checked ~ span {
    border-color: #fa5a06;
    background: #fff6f1;
    color: #d26004;
}

.wizard .radio-row .custom-radio label input[type="radio"]:checked ~ span i { color: #fa5a06; }

.wizard .radio-row .custom-radio label input[type="radio"]:focus-visible ~ span {
    outline: 3px solid rgba(250, 90, 6, .35);
    outline-offset: 2px;
}

@media only screen and (max-width: 575px) {

    /* Sur un écran étroit, plus de plafond : elles prennent tout. */
    .wizard .radio-row .custom-radio { max-width: none; }

}

.wizard .checkbox {
    display: flex;
    align-items: flex-start;
    margin-bottom: 12px;
}

.wizard .checkbox label {
    font-weight: 400;
    font-size: 15px;
    line-height: 1.45;
    margin-bottom: 0;
}

.checkbox-field {
    margin-bottom: 15px !important;
}

.checkbox-grid {
    display: flex;
    flex-wrap: wrap;
    padding-top: 4px;
}

.checkbox-grid .checkbox {
    width: 33.333%;
    padding-right: 15px;
}

/* ------------------------------------------------------------
   L'icône d'aide

   « Où est-ce écrit sur ma carte ? » — la question se pose une
   fois : elle n'a pas à occuper une ligne sous le champ en
   permanence. L'icône se tient dans le champ, à la place et au
   gabarit du calendrier des dates : 18 px de côté, trait de 2,
   bord droit à 20 px. Les deux s'alignent au pixel.

   La bulle s'ouvre au survol et à la tabulation, donc aussi au
   doigt : un bouton reçoit le focus quand on le touche. Son
   texte est repris dans « aria-label » — une bulle dessinée en
   CSS ne se lit pas à voix haute.
   ------------------------------------------------------------ */

.input-aide {
    position: relative;
}

/* Le même dégagement que les champs de date. */
.wizard .input-aide input { padding-right: 45px; }

/*
 | Centrage par « top/bottom + marge automatique » plutôt que par
 | « transform » : une transformation crée un contexte d'empilement, et la
 | bulle s'y trouvait enfermée — elle passait derrière le champ suivant,
 | dont l'enveloppe est elle aussi positionnée.
 */
.field-aide {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 18px;
    z-index: 3;
    margin: auto 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: none;
    color: #fa5a06;
    line-height: 1;
    cursor: help;
    transition: color .15s ease;
    -webkit-appearance: none;
    appearance: none;
}

/* Ouverte, la bulle passe devant tout le reste de l'étape. */
.field-aide:hover,
.field-aide:focus { outline: none; z-index: 60; color: #d26004; }

.field-aide svg { display: block; }

/* La bulle s'ouvre sous le champ, comme le calendrier, et s'aligne sur son
   bord droit : elle ne peut donc pas déborder, quelle que soit la largeur
   de l'écran.

   44 px sous le haut de l'icône : celle-ci fait 22 px, centrée dans un
   champ de 50 px, la bulle tombe donc 8 px sous lui. */
.field-aide:after {
    content: attr(data-aide);
    position: absolute;
    top: 44px;
    right: -14px;

    display: none;
    width: max-content;
    max-width: 300px;
    padding: 10px 13px;

    background: #fff;
    border: 1px solid #e6ebee;
    border-radius: 12px;
    box-shadow: 0 10px 26px rgba(16, 42, 58, .16);

    font-size: 13.5px;
    font-weight: 400;
    line-height: 1.45;
    color: #22343d;
    text-align: left;
    white-space: normal;
}

.field-aide:hover:after,
.field-aide:focus:after { display: block; }

@media only screen and (max-width: 575px) {

    /* Sur un écran étroit, la bulle prend la largeur qu'on lui laisse. */
    .field-aide:after { max-width: 78vw; }

}

/* Une case posée sous son champ : « J'y suis depuis ma naissance ». */
.checkbox-sous-champ {
    margin-top: 10px;
    font-size: 14px;
    color: #406573;
}


/* Le champ recopié se lit, ne se saisit plus — et perd son calendrier,
   qui n'aurait rien à y changer. */
.wizard input[readonly] {
    background-color: #f4f7f8;
    background-image: none;
    color: #7d97a1;
    border-color: #e6ebee;
    cursor: default;
}

/* ------------------------------------------------------------
   Crédits en cours
   ------------------------------------------------------------ */

/*
 | Une ligne de crédit en cours.
 |
 | C'était une boîte grise posée dans une boîte blanche. Elle reprend le
 | fond de la page et le filet en pointillés des blocs conditionnels : ce
 | sont des champs du formulaire, et le titre « Crédit 2 » dit assez où
 | l'un s'arrête et où l'autre commence.
 */
.credit-row {
    background: none;
    border: 0;
    border-left: 2px dashed #fa5a06;
    border-radius: 0;
    padding: 2px 0 2px 22px;
    margin-bottom: 26px;
}

.credit-row-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
}

.credit-row-head h4 {
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .3px;
    color: #fa5a06;
}

/* Supprimer une ligne efface des réponses : le bouton se voit, sans
   réclamer le clic. */
.bt-remove-credit {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: none;
    margin: 0;
    padding: 6px 13px;
    border: 0;
    border-radius: 20px;
    background: none;
    color: #8ea3ac;
    font: inherit;
    font-size: 13.5px;
    font-weight: 500;
    line-height: 1;
    cursor: pointer;
    transition: background-color .15s ease, color .15s ease;
    -webkit-appearance: none;
    appearance: none;
}

.bt-remove-credit:hover {
    background: #fdeeed;
    color: #d93025;
}

.bt-remove-credit i { font-size: 17px; }

.btn.btn-add {
    padding: 11px 22px;
    font-size: 14px;
}

.btn.btn-add:hover {
    padding: 11px 22px;
}

/* ------------------------------------------------------------
   Navigation / alertes / confirmation
   ------------------------------------------------------------ */

.wizard-alert {
    display: flex;
    align-items: flex-start;
    background: #fdecea;
    border: 1px solid #f5c6c2;
    color: #a5231a;
    border-radius: 16px;
    padding: 15px 20px;
    margin-bottom: 25px;
    font-weight: 500;
}

.wizard-alert i {
    font-size: 22px;
    margin-right: 10px;
    line-height: 1.2;
}

.wizard-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 15px;
    margin-top: 10px;
}

.wizard-nav #bt-prev {
    order: 1;
}

.wizard-nav #bt-next {
    order: 2;
    margin-left: auto;
}

.legal-note {
    font-size: 12px;
    color: #8ea3ac;
    line-height: 1.4;
    margin: 20px 0 0;
}

.legal-note a {
    text-decoration: underline;
}

.wizard-done {
    text-align: center;
    background: #fff;
    border: 2px solid #e2e2e2;
    border-radius: 20px;
    padding: 50px 30px;
}

.wizard-done .icon {
    width: 80px;
    height: 80px;
    line-height: 80px;
    border-radius: 50%;
    background: #fa5a06;
    color: #fff;
    font-size: 44px;
    margin: 0 auto 25px;
}

/* ------------------------------------------------------------
   Responsive
   ------------------------------------------------------------ */

@media only screen and (max-width: 991px) {

    .checkbox-grid .checkbox {
        width: 50%;
    }

    .wizard-progress-bt .lb {
        font-size: 13px;
    }

}

@media only screen and (max-width: 767px) {

    .wizard-recap {
        padding: 22px 20px;
    }

    .wizard h2.step-title {
        font-size: 22px;
    }

    .sub-block {
        padding-left: 15px;
    }

}

@media only screen and (max-width: 576px) {

    .wizard-progress-bt .lb {
        display: none;
    }

    .wizard-progress-txt {
        display: block;
    }

    .wizard-progress-bt .nb {
        width: 40px;
        height: 40px;
        line-height: 36px;
        font-size: 16px;
        margin-bottom: 0;
    }

    .wizard-progress-item:before {
        top: 19px;
        height: 2px;
    }

    .checkbox-grid .checkbox {
        width: 100%;
        padding-right: 0;
    }

    .wizard-nav {
        flex-direction: column-reverse;
        align-items: stretch;
    }

    .wizard-nav .btn {
        width: 100%;
        text-align: center;
    }

    .wizard-nav #bt-next {
        margin-left: 0;
    }

    .credit-row {
        padding: 18px 15px 2px;
    }

}

/* Témoin d'enregistrement de la progression */

.wizard-save {
    display: none;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    margin: 0 0 12px;
    color: #8ea3ac;
}

.wizard-save.is-en-cours,
.wizard-save.is-ok,
.wizard-save.is-echec {
    display: flex;
}

.wizard-save i { font-size: 17px; }

.wizard-save.is-ok { color: #219653; }

.wizard-save.is-echec { color: #d68910; }

.wizard-save.is-en-cours i {
    animation: wizardSpin 1s linear infinite;
}

@keyframes wizardSpin {
    to { transform: rotate(360deg); }
}

/* Bandeau de reprise d'une demande interrompue */

.wizard-resume {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;

    background: #fff6f1;
    border: 1px solid #ffd6bd;
    border-left: 4px solid #fa5a06;
    border-radius: 16px;
    padding: 16px 20px;
}

.wizard-resume.is-reset {
    background: #eef8f1;
    border-color: #c6e6d2;
    border-left-color: #219653;
}

.wizard-resume > i {
    font-size: 24px;
    color: #fa5a06;
    line-height: 1;
    flex: none;
}

.wizard-resume.is-reset > i { color: #219653; }

/* Le texte prend la place qui reste, et la rend au bouton dès qu'il
   n'en a plus assez pour rester lisible. */
.wizard-resume .texte { flex: 1 1 320px; min-width: 0; }

.wizard-resume p { margin: 0; font-size: 14px; line-height: 1.45; }

.wizard-resume p.titre {
    font-weight: 600;
    font-size: 15px;
    color: #22343d;
    margin-bottom: 2px;
}

.wizard-resume form { flex: none; margin-left: auto; }

/* Une sortie, pas un appel à l'action : le visiteur vient continuer, pas
   recommencer. Contour léger, taille de note. */
.wizard-resume .bt-recommencer {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 10px 18px;
    border: 1px solid #ffc9a6;
    border-radius: 30px;
    background: #fff;
    color: #fa5a06;
    font: inherit;
    font-size: 13.5px;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
    -webkit-appearance: none;
    appearance: none;
}

.wizard-resume .bt-recommencer:hover {
    background: #fa5a06;
    border-color: #fa5a06;
    color: #fff;
}

.wizard-resume .bt-recommencer i { font-size: 16px; }

@media only screen and (max-width: 767px) {
    .wizard { padding: 0 16px; }
    .wizard-resume { padding: 16px; }
    .wizard-resume form { width: 100%; margin-left: 0; margin-top: 4px; }
    .wizard-resume .bt-recommencer { width: 100%; justify-content: center; }
}

/* ------------------------------------------------------------
   Reprendre plus tard

   Un troisième bouton dans la barre, mais pas un troisième
   appel à l'action : il se tient entre les deux autres, sans
   fond, pour que « Continuer » reste seul en évidence.
   ------------------------------------------------------------ */

.wizard-nav .btn-lien {
    order: 1;
    padding: 12px 18px;
    background: none;
    color: #7d97a1 !important;
    font-size: 14px;
}

.wizard-nav .btn-lien:hover:not(:disabled) { color: #fa5a06 !important; }
.wizard-nav .btn-lien:disabled { opacity: .55; cursor: default; }
.wizard-nav .btn-lien i { margin-right: 6px; font-size: 17px; }

.wizard-lien-etat {
    display: none;
    margin: 10px 0 0;
    font-size: 13.5px;
    line-height: 1.45;
}

.wizard-lien-etat.is-en-cours,
.wizard-lien-etat.is-ok,
.wizard-lien-etat.is-echec { display: block; }

.wizard-lien-etat.is-en-cours { color: #8ea3ac; }
.wizard-lien-etat.is-ok { color: #219653; }
.wizard-lien-etat.is-echec { color: #d68910; }

/* ------------------------------------------------------------
   Relecture avant l'envoi

   Le bilan n'est pas une cinquième étape : il prend la place du
   formulaire le temps d'une relecture, et chaque section renvoie
   à celle qui la contient.
   ------------------------------------------------------------ */

.wizard-bilan {
    animation: wizardIn .35s ease;
}

.wizard-bilan .bilan-corps {
    display: grid;
    gap: 20px;
    margin-top: 25px;
}

.bilan-section {
    background: #fff;
    border: 2px solid #e2e2e2;
    border-radius: 20px;
    padding: 22px 25px 8px;
}

.bilan-section header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding-bottom: 12px;
    margin-bottom: 6px;
    border-bottom: 1px solid #eef2f4;
}

.bilan-section h3 {
    margin: 0;
    font-size: 18px;
    font-weight: 700;
    color: #22343d;
}

.bilan-section h4 {
    margin: 16px 0 6px;
    font-size: 13px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .6px;
    color: #8ea3ac;
}

.bilan-section h4:first-of-type { margin-top: 8px; }

.bilan-modifier {
    flex: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    color: #fa5a06;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

.bilan-modifier:hover { text-decoration: underline; }

.bilan-section .ligne {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 20px;
    padding: 9px 0;
    border-bottom: 1px solid #f4f7f8;
    font-size: 15px;
}

.bilan-section .ligne:last-child { border-bottom: 0; }

.bilan-section .ligne span {
    color: #7d97a1;
    line-height: 1.35;
}

.bilan-section .ligne strong {
    flex: none;
    max-width: 55%;
    font-weight: 600;
    color: #22343d;
    text-align: right;
    overflow-wrap: anywhere;
}

@media only screen and (max-width: 575px) {

    .bilan-section { padding: 18px 18px 6px; }

    .bilan-section .ligne {
        flex-direction: column;
        gap: 2px;
    }

    .bilan-section .ligne strong {
        max-width: 100%;
        text-align: left;
    }

}

/* ------------------------------------------------------------
   Les propositions de commune

   Même gabarit que le calendrier : le panneau vit dans <body>,
   toutes ses classes sont donc préfixées.
   ------------------------------------------------------------ */

.fx-auto {
    position: absolute;
    z-index: 60;
    display: none;
    max-height: 272px;
    overflow-y: auto;
    padding: 6px;

    background: #fff;
    border: 1px solid #e6ebee;
    border-radius: 14px;
    box-shadow: 0 12px 32px rgba(16, 42, 58, .16);

    font-family: inherit;
    font-size: 15px;
    color: #22343d;
}

.fx-auto.est-ouvert { display: block; }

.fx-auto button {
    display: block;
    width: 100%;
    margin: 0;
    padding: 9px 12px;
    border: 0;
    border-radius: 9px;
    background: none;
    color: inherit;
    font: inherit;
    line-height: 1.3;
    text-align: left;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

/* Ce qui a été tapé ressort dans le nom proposé. */
.fx-auto button b { font-weight: 700; color: #fa5a06; }

.fx-auto button:hover,
.fx-auto button.est-visee { background: #fff1e8; }

/* ============================================================
   Champs de date et calendrier

   Le champ natif était le seul du formulaire à ne pas prendre la
   largeur qu'on lui donne, et son icône appartenait au
   navigateur. On lui rend l'allure des autres, et on lui pose
   notre propre calendrier par-dessus.
   ============================================================ */

.wizard input[type="date"] {
    width: 100%;
    padding-right: 45px;

    /* L'icône du navigateur cède la place à la nôtre, dans l'orange
       de la maison — la même que le chevron des listes déroulantes. */
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fa5a06' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center right 20px;
    cursor: pointer;
}

/* Le sélecteur natif disparaît vraiment : invisible mais présent, il
   s'ouvrait par-dessus le nôtre au clic sur l'icône. */
.wizard input[type="date"]::-webkit-calendar-picker-indicator {
    display: none;
    -webkit-appearance: none;
}

/* Le champ vide affiche « jj-mm-aaaa » en gris, comme un placeholder. */
.wizard input[type="date"]:not(:focus):in-range::-webkit-datetime-edit-text,
.wizard input[type="date"]:not(:focus):in-range::-webkit-datetime-edit-day-field,
.wizard input[type="date"]:not(:focus):in-range::-webkit-datetime-edit-month-field,
.wizard input[type="date"]:not(:focus):in-range::-webkit-datetime-edit-year-field {
    color: inherit;
}

/* ------------------------------------------------------------
   Le panneau

   Il vit dans <body>, donc à portée de Bootstrap et des six
   feuilles du site : toutes ses classes sont préfixées. Les
   flèches portaient « nav », que Bootstrap passe en flex — le
   chevron se collait dans un coin de son bouton.
   ------------------------------------------------------------ */

.fx-cal {
    position: absolute;
    z-index: 60;
    display: none;
    width: 286px;
    padding: 12px;

    background: #fff;
    border: 1px solid #e6ebee;
    border-radius: 14px;
    box-shadow: 0 12px 32px rgba(16, 42, 58, .16);

    font-family: inherit;
    font-size: 14px;
    line-height: 1.2;
    color: #22343d;
}

.fx-cal.est-ouvert { display: block; }

/* Trois colonnes plutôt qu'un « space-between » : le titre reste au
   milieu, qu'il porte « mai 2008 » ou « 1989 – 2008 ». */
.fx-cal .fx-cal-tete {
    display: grid;
    grid-template-columns: 28px 1fr 28px;
    align-items: center;
    gap: 4px;
    margin-bottom: 8px;
}

.fx-cal .fx-cal-fleche {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: none;
    color: #8ea3ac;
    cursor: pointer;
    transition: background-color .15s ease, color .15s ease;
    -webkit-appearance: none;
    appearance: none;
}

.fx-cal .fx-cal-fleche:hover:not(:disabled) { background: #fff1e8; color: #fa5a06; }
.fx-cal .fx-cal-fleche:disabled { color: #dde5e9; cursor: default; }

/* Le clic doit atteindre le bouton, pas le tracé. */
.fx-cal .fx-cal-fleche svg,
.fx-cal .fx-cal-titre svg { display: block; pointer-events: none; }

/* Le titre est un bouton : il remonte des jours aux mois, puis aux
   années. Trois clics pour atteindre 1985. */
.fx-cal .fx-cal-titre {
    display: inline-flex;
    align-items: center;
    justify-self: center;
    gap: 6px;
    height: 28px;
    margin: 0;
    padding: 0 9px;
    border: 1px solid transparent;
    border-radius: 8px;
    background: none;
    color: inherit;
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

.fx-cal .fx-cal-titre span { text-transform: capitalize; }
.fx-cal .fx-cal-titre svg { color: #8ea3ac; }
.fx-cal .fx-cal-titre:hover { border-color: #e6ebee; background: #f7f9fa; }
.fx-cal .fx-cal-titre:hover svg { color: #fa5a06; }

.fx-cal .fx-cal-jours,
.fx-cal .fx-cal-grille {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}

/* La ligne des jours n'a de sens que dans la vue des jours. */
.fx-cal[data-vue="mois"] .fx-cal-jours,
.fx-cal[data-vue="annees"] .fx-cal-jours { display: none; }

.fx-cal .fx-cal-jours span {
    padding: 4px 0;
    text-align: center;
    font-size: 11px;
    font-weight: 600;
    color: #8ea3ac;
}

.fx-cal .fx-cal-grille button {
    height: 34px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 8px;
    background: none;
    color: inherit;
    font: inherit;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

.fx-cal .fx-cal-grille.est-mois { grid-template-columns: repeat(3, 1fr); gap: 6px; }
.fx-cal .fx-cal-grille.est-annees { grid-template-columns: repeat(4, 1fr); gap: 4px; }

.fx-cal .fx-cal-grille.est-mois button,
.fx-cal .fx-cal-grille.est-annees button { height: 42px; border-radius: 10px; }

.fx-cal .fx-cal-grille button:hover:not(:disabled) { background: #fff1e8; }
.fx-cal .fx-cal-grille button:disabled { color: #c9d5da; cursor: default; }

/* Aujourd'hui se signale d'un trait, la date choisie d'un fond :
   les deux doivent pouvoir tomber sur la même case. */
.fx-cal .fx-cal-grille .est-aujourdhui { box-shadow: inset 0 0 0 1px #fa5a06; }

.fx-cal .fx-cal-grille .est-choisi,
.fx-cal .fx-cal-grille .est-choisi:hover {
    background: #fa5a06;
    color: #fff;
    font-weight: 600;
}

.fx-cal .fx-cal-pied {
    display: flex;
    justify-content: space-between;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid #eef2f4;
}

/* « Aujourd'hui » disparaît sur un champ qui ne peut pas le contenir ;
   « Effacer » doit rester à droite. */
.fx-cal .fx-cal-pied [hidden] { display: none; }
.fx-cal .fx-cal-pied [data-effacer] { margin-left: auto; }

.fx-cal .fx-cal-lien {
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    color: #7d97a1;
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

.fx-cal .fx-cal-lien:hover { color: #fa5a06; text-decoration: underline; }
