/* Plus aucune fonte servie depuis le plugin.
   Amiko était l'ancienne charte. Le site écrit aujourd'hui en Archivo Black
   pour les titres et en Schibsted Grotesk pour le texte, et le thème sert les
   deux depuis le site lui-même : l'engagement de départ est tenu, aucune
   requête vers un domaine tiers sur la page où le client saisit ses
   coordonnées, simplement il est tenu par le thème.
   Les trois fichiers assets/fonts/amiko-*.woff2 du plugin ne servent plus à
   rien et peuvent être supprimés. Ne pas toucher au preset amiko de
   theme.json, qui couvre d'anciens contenus enregistrés. */

/* =========================================================================
   Studio 411 — Réservation
   Cyan et magenta sont les deux encres de la marque. Aucune des deux ne passe
   le contraste en petit texte sur blanc : chaque encre a donc une variante
   « texte », et les aplats restent réservés aux surfaces et aux grands corps.
   ========================================================================= */

/* La mesure du tunnel reste déclarée ici et NE BOUGE PAS : theme.css remet
   la gouttière à zéro sur .s411-reserver-tunnel, où le groupe porte déjà la
   marge de la page, et la colonne de gauche de .s411-reserver vaut 1080px.
   Ces deux nombres sont la moitié d'un accord écrit dans le thème : les
   remplacer par contentSize désaxerait le tunnel de la bande de repères qui
   le borde, et ferait tomber la grille des formules de trois colonnes à
   deux. C'est la seule chose du fichier qui était déjà juste. */
:root {
    --s411-tunnel-max: 1080px;
    --s411-tunnel-gouttiere: 20px;

    /* Rouge d'erreur, ocre d'attente, vert de confirmation. La palette du
       thème s'arrête à l'encre, aux gris et aux deux encres de marque, et
       elle est fermée volontairement (color.custom false) : ces trois
       familles n'ont pas à devenir des couleurs proposées dans l'éditeur.
       Elles restent la propriété du plugin, mais nommées une seule fois au
       lieu d'être recopiées à six endroits. Valeurs inchangées, toutes
       conformes : texte d'erreur 9,38:1 sur son fond, attente 7,77:1,
       succès 8,16:1. */
    --s411-erreur-fond: #fbedee;
    --s411-erreur-filet: #a31621;
    --s411-erreur-texte: #7d111a;

    --s411-attente-fond: #fff5e5;
    --s411-attente-filet: #8a5a00;
    --s411-attente-texte: #6b4600;

    --s411-succes-fond: #e9f5ef;
    --s411-succes-filet: #0f7a4d;
    --s411-succes-texte: #0a5334;
}

/* `hidden` est une affirmation sur le document, pas une proposition de style.
   newsletter.js masque la rangée de saisie et la case de consentement après
   une inscription réussie, mais elles sont déclarées en display:flex et une
   règle d'auteur l'emporte toujours sur le [hidden]{display:none} du
   navigateur : le champ restait affiché sous le message de confirmation.
   Le même piège attendait la bannière d'erreur du tunnel et la zone de
   réponse de la lettre, qui n'ont aucun display déclaré aujourd'hui.
   C'est le seul !important du fichier, et il protège un attribut. */
.s411-booking [hidden],
.s411-nl [hidden],
[hidden].s411-nl-retour { display: none !important; }

.s411-booking {
    /* Les noms courts restent : deux cents déclarations les citent, et les
       renommer ne changerait rien à l'écran. Ce qui change, c'est leur
       source. Chacun lit désormais la palette du thème, avec l'ancienne
       valeur en repli pour qu'une installation sans le thème 411 reste
       présentable. Les dix valeurs coïncidaient déjà au caractère près :
       cette étape ne déplace pas un pixel, elle déplace la décision. */
    --c-cyan: var(--wp--preset--color--cyan, #009fe3);
    --c-magenta: var(--wp--preset--color--magenta, #e6007e);

    /* Le cyan de marque plafonne à 2,97:1 sur blanc : il lui faut sa variante
       assombrie dès qu'il porte du texte. Le magenta atteint 4,50:1 et porte
       le texte lui-même, à une condition que le thème écrit noir sur blanc :
       rester sur du blanc. Sur le gris de surface il retombe à 4,15:1. */
    --c-cyan-t: var(--wp--preset--color--cyan-text, #0072a3);
    --c-magenta-t: var(--wp--preset--color--magenta-text, #e6007e);

    --c-ink: var(--wp--preset--color--contrast, #0b0f14);
    --c-ink-2: var(--wp--preset--color--ink-2, #55606d);
    --c-ink-3: var(--wp--preset--color--ink-3, #8b96a2);
    --c-rule: var(--wp--preset--color--rule, #e2e7ec);
    --c-surface: var(--wp--preset--color--surface, #f4f6f8);
    --c-white: var(--wp--preset--color--base, #fff);

    /* Un seul dégradé de marque sur le site, et un seul angle : 115 degrés.
       Le tunnel en avait un à lui, à 100 degrés. Personne ne mesure un angle
       à l'oeil, mais le filet des cartes de formule ne partait pas comme
       celui des cartes d'offre de la page coworking, et c'est ce genre
       d'écart de quinze degrés qui donne l'impression de deux chantiers. */
    --grad: var(--wp--preset--gradient--quadri,
                linear-gradient(115deg, #009fe3 0%, #e6007e 100%));

    /* Deux polices, celles du site. C'est la déclaration qui mettait tout le
       tunnel en Amiko : les six font-family: inherit du fichier en
       dépendaient, y compris ceux des boutons. */
    --f: var(--wp--preset--font-family--body,
             'Schibsted Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    --f-titre: var(--wp--preset--font-family--display,
                   'Archivo Black', 'Arial Black', Impact, sans-serif);

    font-family: var(--f);
    /* Le corps de texte du site, 1.125rem, au lieu de la taille héritée du
       navigateur. */
    font-size: var(--wp--preset--font-size--medium, 1.125rem);
    color: var(--c-ink);
    max-width: var(--s411-tunnel-max);
    /* Calé à gauche, pas centré. Centrer le tunnel dans une bande de 1780 px
       lui donnait un axe à lui : le titre du hero, le chapô, les tableaux et
       le logo partaient chacun d'un endroit différent sur la même page. */
    margin: 0;
    /* 4rem en bas, soit les 64 px d'avant au pixel près, mais dits dans le
       barème. La gouttière latérale ne bouge pas : theme.css la remet à zéro
       là où le groupe porte déjà la marge de la page. */
    /* Le groupe de patterns/reservation.php porte déjà spacing-50 en bas : les
       deux s'additionnaient à 128 px avant le pied de page, un total qui n'est
       sur aucun palier alors que chacune des deux sources y était. Un blanc,
       une source. */
    padding: 0 var(--s411-tunnel-gouttiere);
    color: var(--c-ink-2);
    line-height: 1.65;
    box-sizing: border-box;
}
@supports (background: linear-gradient(in oklch, red, blue)) {
    /* En sRGB, cyan vers magenta traverse un violet grisâtre. En OKLCH la
       saturation tient sur toute la longueur. Seul l'angle reste écrit en
       clair, comme dans le thème : les fonctions de dégradé n'acceptent pas
       toujours une variable dans toutes les positions. */
    .s411-booking { --grad: linear-gradient(115deg in oklch, var(--c-cyan), var(--c-magenta)); }
}
.s411-booking *,
.s411-booking *::before,
.s411-booking *::after { box-sizing: inherit; }

/* ---------- progression ------------------------------------------------ */
/* Le dégradé n'est pas un ornement : il mesure le chemin vers le paiement. */
.s411-progress {
    height: 3px;
    background: var(--c-rule);
    overflow: hidden;
}
.s411-progress-fill {
    height: 100%;
    width: 20%;
    background: var(--grad);
    background-size: 500% 100%;   /* la teinte parcourt le dégradé entier */
    background-position: 0 0;
    /* La courbe des survols et des ouvertures du site, et rien d'autre. */
    transition: width .45s cubic-bezier(.16, 1, .3, 1);
}
.s411-steps {
    display: flex;
    list-style: none;
    margin: 0 0 var(--wp--preset--spacing--40, 2.75rem);
    padding: var(--wp--preset--spacing--10, .5rem) 0 0;
    /* 4 px assumé : c'est une gouttière de grille, elle passe sous le
       plancher du barème, qui commence à 8 px. */
    gap: 4px;
}
/* Le fil d'ariane est un surtitre : même police de labeur en 600, mêmes
   capitales, même interlettrage large que ceux du reste du site.
   Le gris clair est abandonné pour les étapes à venir : à 3,01:1 sur blanc
   il ne porte pas de texte, et à 11 px encore moins. Il reste, mais sur les
   étapes déjà franchies, où l'information est devenue secondaire. */
.s411-steps li {
    flex: 1;
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    line-height: 1.4;
    color: var(--c-ink-2);
    transition: color .3s ease;
}
.s411-steps li::before {
    content: attr(data-step-label) ' · ';
    font-variant-numeric: tabular-nums;
}
/* L'étape franchie quitte le gris clair : 3,01:1 sur blanc, et le commentaire
   au-dessus le disait déjà en toutes lettres tout en l'employant. Ce qui est
   franchi est dit par la barre de progression, qui est là pour ça ; l'étape
   n'a pas à le redire dans une encre qui ne se lit pas. */
.s411-steps li.is-done { color: var(--c-ink-2); }
.s411-steps li.is-current { color: var(--c-magenta-t); }

/* ---------- titres ----------------------------------------------------- */
/* .s411-h est un h2 : la recette de titre du thème lui revient de droit.
   Elle est réécrite ici plutôt que simplement laissée en place, parce que la
   classe pèse plus lourd que le sélecteur d'élément et qu'on ne veut pas
   dépendre de la façon dont WordPress enveloppe ses styles d'élément.
   Ce qui disparaît, c'est le faux gras : Archivo Black n'a qu'une graisse,
   demander 700 revient à faire épaissir ses contours par le navigateur. Et
   l'interlettrage positif écartait ce que la fonte serre. */
/* TITRE DE SECTION. Mêmes valeurs que .s411-detail-titre du thème, au
   caractère près : le h2 du tunnel cohabitait avec ceux des autres pages et se
   retrouvait un cran en dessous. */
.s411-h {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--x-large, 1.875rem);
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: -.02em;
    line-height: 1.12;
    color: var(--c-ink);
    margin: 0 0 var(--wp--preset--spacing--20, 1rem);
    text-wrap: balance;
}
/* Le chapô se lit à la taille de lecture du site, pas une taille en
   dessous : c'est la phrase qui évite un appel téléphonique. */
/* CHAPÔ. Les deux feuilles avaient tranché la même question dans deux sens
   opposés, et les deux réponses étaient visibles sur la même page. C'est celle
   du thème qui l'emporte, et elle est écrite ici à l'identique. */
.s411-sub {
    color: var(--c-ink-2);
    margin: 0 0 var(--wp--preset--spacing--30, 1.75rem);
    max-width: 62ch;
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    line-height: 1.65;
}
/* MENTION. Elle se lit dans le même écran que les notes à 13 px de la colonne
   de droite : même rôle, même corps. */
.s411-footnote {
    margin: var(--wp--preset--spacing--30, 1.75rem) 0 0;
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.65;
    color: var(--c-ink-2);
}
.s411-empty { color: var(--c-ink-2); }
/* Le souligné vient de styles.elements.link, il manquait ici : un lien qui
   ne se distingue que par sa couleur est un lien réservé à ceux qui les
   distinguent. */
.s411-link { color: var(--c-cyan-t); text-decoration: underline; }

/* ---------- étapes ----------------------------------------------------- */
.s411-step { display: none; }
.s411-step.is-active { display: block; animation: s411-in .35s ease both; }
@keyframes s411-in {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: none; }
}

/* ---------- formules --------------------------------------------------- */
.s411-formulas {
    display: grid;
    /* 280 px de plancher : à 1080 px de conteneur cela donne 3 colonnes, et les
       six formules du studio remplissent exactement deux rangées. Une largeur
       plus faible en produirait quatre, laissant deux cartes orphelines. */
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: var(--wp--preset--spacing--20, 1rem);
}
/* Les quatre lignes de la carte sont empruntées à la grille parente : un nom
   qui passe sur deux lignes décalait le prix et le bouton de sa carte, et la
   rangée partait de travers. Avec subgrid, prix et boutons tombent à la même
   hauteur quelle que soit la longueur des libellés. */
/* Recette de la carte d'offre du thème, transposée ici. Le nom de classe ne
   change pas : booking.js lit .s411-formula pour la sélection, et poser
   .s411-offer par-dessus l'abonnerait aux animations de défilement du thème,
   jouées sur des sections en display:none.
   Angles droits, et c'est le filet qui commande : posé en haut d'une carte
   arrondie, le dégradé suivait la courbe et plongeait à ses extrémités. Un
   filet doit être droit, sinon ce n'est plus un filet mais un ornement.
   Le fond passe du gris au blanc, ce qui remet le prix magenta sur le seul
   fond où il est conforme. */
.s411-formula {
    position: relative;
    display: grid;
    grid-template-rows: subgrid;
    grid-row: span 4;
    /* C'est l'écart entre la durée, le nom, le prix et le lien : tout le rythme
       interne du premier écran du tunnel tenait sur une valeur de 6 px qui
       n'est sur aucun palier. */
    row-gap: var(--wp--preset--spacing--10, .5rem);
    justify-items: center;
    align-items: center;
    text-align: center;
    background: var(--c-white);
    border: 1px solid var(--c-rule);
    border-radius: 0;
    /* Le thème donne spacing-40 à ses cartes d'offre, mais elles sont trois
       sur toute la largeur. Ici il y en a six, deux fois plus étroites :
       44 px de chaque côté ne laisseraient pas la place au prix. */
    padding: var(--wp--preset--spacing--30, 1.75rem);
    font-family: inherit;
    cursor: pointer;
    overflow: hidden;
    transition: transform .3s cubic-bezier(.16, 1, .3, 1), box-shadow .3s ease;
}
/* Le filet ne se révèle plus, il est là dès le départ, comme sur les cartes
   d'offre de la page coworking. Il dit la marque, pas la sélection. */
.s411-formula::before {
    content: '';
    position: absolute;
    /* Décalé d'un pixel vers l'extérieur pour couvrir la bordure de la carte :
       sans ça, un liseré gris dépasse à chaque extrémité du filet. */
    top: -1px; left: -1px; right: -1px;
    height: 4px;
    background: var(--grad);
}
.s411-formula:hover,
.s411-formula:focus-visible {
    transform: translateY(-3px);
    box-shadow: var(--wp--preset--shadow--carte,
                0 1px 2px rgba(11, 15, 20, .04), 0 14px 36px -24px rgba(11, 15, 20, .5));
}
/* Le filet étant devenu permanent, la sélection se dit par un liseré interne,
   sur le modèle de la tuile encre du thème. */
.s411-formula.is-selected {
    box-shadow: inset 0 0 0 2px var(--c-ink);
}
.s411-formula.is-selected:hover {
    box-shadow: inset 0 0 0 2px var(--c-ink),
                var(--wp--preset--shadow--carte, 0 14px 36px -24px rgba(11, 15, 20, .5));
}
/* Plus de contour à soi : celui du socle du thème s'applique, 3 px cyan
   décalés de 3 px. Un seul anneau de focus sur tout le site, c'est la règle,
   et la carte déclare son propre rayon, donc le border-radius de 3 px posé
   par cette règle en :where() ne peut pas la casser. */

/* Sans subgrid, le pied de carte est simplement poussé en bas : les cartes
   gardent la même hauteur, seule la position du prix peut varier. */
@supports not (grid-template-rows: subgrid) {
    .s411-formula {
        display: flex;
        flex-direction: column;
        align-items: center;
        grid-row: auto;
    }
    .s411-formula-cta { margin-top: auto; }
}

/* La durée est ce qui distingue les six cartes les unes des autres : elle
   était le plus petit texte de la carte, elle en devient l'entrée. Elle prend
   la police de titre, sans faux gras. */
/* TITRE DE CARTE. La durée avait été grossie parce qu'elle était illisible, et
   c'était juste : ce qui distingue les six cartes les unes des autres, c'est
   la durée. Ce n'est donc pas un surtitre grossi, c'est le TITRE de la carte,
   et elle en prend le rôle entier : Archivo Black à l'encre, au jeton large,
   au serrage des titres. Le cyan lisible part : le titre d'une carte est à
   l'encre sur tout le site, et la carte de formule doit se lire comme la carte
   d'offre du coworking, nom en Archivo Black encre puis prix en magenta. */
.s411-formula-duration {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    font-weight: 400;
    letter-spacing: -.015em;
    text-transform: uppercase;
    color: var(--c-ink);
    line-height: 1.12;
}
/* LIBELLÉ, sous le titre qu'il accompagne : exactement la place et la recette
   de .s411-offer-kicker sous .s411-offer-name. Le nom de la formule n'était ni
   un titre ni un libellé, c'était une légende en Schibsted gris sous une durée
   qui avait pris la police de titre : la carte n'avait pas de titre. */
.s411-formula-name {
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--c-ink-2);
    line-height: 1.4;
}
/* Le prix en police de titre, comme le montant d'une offre. Le jeton est
   fluide de 2rem à 3,25rem : on reste au-dessus de 24 px à toutes les
   largeurs, donc en grand texte, où le magenta pur est conforme, et le
   palier mobile à 40 px du bas de fichier devient inutile. */
.s411-formula-price {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--xx-large, 2.75rem);
    font-weight: 400;
    line-height: 1;
    color: var(--c-magenta);
    margin: var(--wp--preset--spacing--10, .5rem) 0;
    font-variant-numeric: tabular-nums;
}
/* Recette du lien d'offre du thème, et non d'un bouton : la carte entière
   est déjà un bouton, un deuxième bouton dessiné à l'intérieur promettrait
   deux clics différents. */
/* LIEN D'ACTION. Les deux définitions coïncidaient déjà déclaration par
   déclaration et ne rendaient pourtant pas pareil : celle-ci vit dans un
   <button>, qui n'hérite ni du corps ni de la hauteur de ligne de son parent,
   et son soulignement ne tombait pas à la même distance du texte. L'interligne
   est déclarée, et .12em rejoint le .1em des capitales d'Archivo Black. */
/* Le filet de 2 px est parti. Toute la carte est un <button> : un second
   signe de commande à l'intérieur du premier promettait un clic de plus qui
   n'existe pas, et c'était le seul traitement de bouton du tunnel à ne pas
   être une pastille. Ce n'est plus une commande, c'est ce que la carte
   propose, dit dans l'encre qui marque l'action sur ce site. */
.s411-formula-cta {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 400;
    letter-spacing: .1em;
    line-height: 1;
    text-transform: uppercase;
    color: var(--c-magenta);
    border-bottom: 0;
    padding-bottom: 0;
}
.s411-formula:hover .s411-formula-cta,
.s411-formula.is-selected .s411-formula-cta { color: var(--c-ink); }

/* ---------- options ---------------------------------------------------- */
/* Pas de boîtes là où un filet suffit : c'est la règle que le thème applique
   à sa bande de repères et à son bloc de questions. Une liste d'options
   cochables est le même objet qu'une liste de questions, des lignes séparées
   par un filet de 1 px. Les pavés gris arrondis faisaient tableau de bord. */
.s411-options {
    list-style: none;
    margin: 0;
    padding: 0;
    border-top: 1px solid var(--c-rule);
}
.s411-option {
    display: flex;
    align-items: flex-start;
    gap: var(--wp--preset--spacing--20, 1rem);
    padding: var(--wp--preset--spacing--20, 1rem) 0;
    border-bottom: 1px solid var(--c-rule);
    cursor: pointer;
}
/* Le survol se dit sur le libellé, comme sur une question de la FAQ, plutôt
   que par un fond qui change. */
.s411-option:hover .s411-option-name { color: var(--c-magenta-t); }
.s411-option-input { position: absolute; opacity: 0; width: 0; height: 0; }
.s411-check {
    width: 20px; height: 20px;
    flex: none;
    margin-top: 2px;
    border: 1.5px solid var(--c-ink-3);
    border-radius: 3px;
    position: relative;
    transition: background .2s ease, border-color .2s ease;
}
/* Le magenta est l'encre des signes sur ce site : flèches de puces, barres
   du signe d'accordéon, picto d'encadré. La coche blanche dessus donne
   4,50:1, bien au-dessus du seuil de 3:1 des éléments non textuels. */
.s411-option-input:checked + .s411-check {
    background: var(--c-magenta);
    border-color: var(--c-magenta);
}
.s411-option-input:checked + .s411-check::after {
    content: '';
    position: absolute;
    left: 6.5px; top: 2px;
    width: 5px; height: 10px;
    border: solid var(--c-white);
    border-width: 0 2px 2px 0;
    transform: rotate(42deg);
}
/* La vraie case mesure 0 sur 0 et reste focalisable : son anneau se dessine
   sur le frère adjacent. Cette règle est la seule du fichier qui doit garder
   un contour à elle, et .s411-check doit rester le FRÈRE ADJACENT immédiat
   de l'input, sinon la coche et le focus tombent ensemble. */
.s411-option-input:focus-visible + .s411-check {
    outline: 3px solid var(--wp--preset--color--cyan, #009fe3);
    outline-offset: 3px;
}
.s411-option-body { flex: 1; display: flex; flex-direction: column; gap: var(--wp--preset--spacing--10, .5rem); }
.s411-option-name { font-weight: 600; color: var(--c-ink); transition: color .25s ease; }
/* MENTION. */
.s411-option-note {
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.65;
    color: var(--c-ink-2);
}
/* VALEUR EN LIGNE. C'était l'une des deux seules valeurs du site en Schibsted
   600, et c'est précisément l'une de celles qu'on compare le plus : six prix
   d'options empilés dans une colonne. */
.s411-option-price {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    font-weight: 400;
    letter-spacing: -.015em;
    line-height: 1.3;
    color: var(--c-ink);
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

/* ---------- calendrier + créneaux -------------------------------------- */
.s411-picker {
    display: grid;
    grid-template-columns: minmax(0, 320px) minmax(0, 1fr);
    gap: 36px;
    align-items: start;
}
.s411-cal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 14px;
}
/* LIBELLÉ. Il ne déclarait aucune couleur et héritait l'encre de .s411-booking
   alors que ses trois jumeaux du même fichier déclaraient le gris : un titre
   de mois presque noir entre deux libellés gris de la même taille. */
.s411-cal-title {
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--c-ink-2);
}
.s411-cal-nav {
    background: none;
    border: 1px solid var(--c-rule);
    border-radius: 999px;
    width: 32px; height: 32px;
    font-family: inherit;
    /* 15 px n'existait nulle part ailleurs dans le projet : le barème va de 13
       à 16 px sans palier intermédiaire. */
    font-size: var(--wp--preset--font-size--small, 1rem);
    line-height: 1;
    color: var(--c-ink);
    cursor: pointer;
    transition: border-color .2s ease, color .2s ease;
}
.s411-cal-nav:hover:not(:disabled) { border-color: var(--c-ink); color: var(--c-magenta-t); }
/* Le mois précédent est désactivé au premier mois : c'est de l'information,
   pas de la décoration, elle doit rester lisible. */
.s411-cal-nav:disabled { opacity: .35; cursor: default; }

.s411-cal-dow, .s411-cal-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
}
.s411-cal-dow {
    margin-bottom: 6px;
}
/* 10 px en gris clair, c'était 3,01:1 sur blanc au plus petit corps du
   fichier. Le plus petit palier du thème vaut 13 px, et le gris de lecture
   6,40:1. La grille de sept colonnes et son écart de 4 px ne bougent pas :
   .s411-cal-dow et .s411-cal-grid doivent rester calées l'une sur l'autre,
   sinon les dates glissent sous les mauvaises initiales. */
.s411-cal-dow span {
    text-align: center;
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--c-ink-2);
}
/* Le rayon de 4 px était la troisième forme du fichier. Avec aspect-ratio 1
   et le rayon plein, la case devient un rond et rejoint le vocabulaire du
   site : la pastille est la forme de ce qui se clique. Le rayon est déclaré
   ici, donc la règle de focus du socle, qui pose 3 px, ne peut pas la
   casser : une classe pèse plus lourd qu'un :where(). */
.s411-day {
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--c-surface);
    border: 1px solid transparent;
    border-radius: 999px;
    font-family: inherit;
    font-size: var(--wp--preset--font-size--small, 1rem);
    font-variant-numeric: tabular-nums;
    color: var(--c-ink);
    cursor: pointer;
    transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.s411-day:hover:not(:disabled) { background: var(--c-white); border-color: var(--c-ink); }
/* L'opacité de 45 % ramenait le chiffre à 1,55:1 : un jour fermé n'était pas
   discret, il était illisible. Le gris clair seul suffit à dire l'inactif. */
.s411-day:disabled { background: none; color: var(--c-ink-3); cursor: default; }
.s411-day.is-empty { background: none; border: 0; cursor: default; }
.s411-day.is-selected {
    background: var(--c-ink);
    color: var(--c-white);
    border-color: var(--c-ink);
}

.s411-slots-label {
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--c-ink-2);
    margin: 0 0 var(--wp--preset--spacing--20, 1rem);
}
.s411-slots-list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    min-height: 44px;
}
/* Le créneau garde la police de labeur : un horaire est une donnée qu'on
   compare, pas un libellé de bouton, et dix « 14 h 30 » en capitales
   d'affichage se lisent moins vite. Le contour de repos passe du filet au
   gris clair : à 1,24:1 sur blanc, le filet ne dessinait aucun contour. */
.s411-slot {
    background: var(--c-white);
    border: 1px solid var(--c-ink-3);
    border-radius: 999px;
    padding: .7rem 1.15rem;
    font-family: inherit;
    font-size: var(--wp--preset--font-size--small, 1rem);
    /* 400 comme le jour du calendrier : c'est le même objet cliquable, à la
       même taille, à quelques centimètres de distance. */
    font-weight: 400;
    line-height: 1.4;
    font-variant-numeric: tabular-nums;
    color: var(--c-ink);
    cursor: pointer;
    transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.s411-slot:hover { border-color: var(--c-ink); }
.s411-slot.is-selected { background: var(--c-ink); color: var(--c-white); border-color: var(--c-ink); }
.s411-slots-empty, .s411-slots-loading { color: var(--c-ink-2); font-size: var(--wp--preset--font-size--small, 1rem); margin: 0; }

/* ---------- formulaire ------------------------------------------------- */
.s411-form {
    display: grid;
    /* Trois champs courts sur une rangée, le projet en dessous : la largeur est
       bornée pour que la grille ne dégage pas une quatrième colonne vide. */
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: var(--wp--preset--spacing--20, 1rem);
    max-width: 860px;
}
.s411-field-wide { grid-column: 1 / -1; }
/* LIBELLÉ. */
.s411-field label {
    display: block;
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--c-ink-2);
    margin-bottom: var(--wp--preset--spacing--10, .5rem);
}
/* La mention « facultatif » quitte le gris clair : à 3,01:1 elle était la
   moins lisible des informations d'un formulaire. */
.s411-optional { font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--c-ink-2); }
/* Le site avait deux formes de champ : le rectangle à coins hauts arrondis
   du tunnel, sur une seule page, et la pastille du champ de la lettre
   d'information, présente dans le pied de page de toutes les autres. On
   aligne le rare sur le courant, et les valeurs sont exactement celles de
   .s411-nl-email pour que les deux champs soient le même objet.
   Le textarea fait exception : une capsule de cinq lignes ne ressemble à
   rien, il prend le rayon des surfaces du thème.
   1 rem au plancher : sous 16 px, iOS agrandit la page au moment où le
   client saisit son téléphone. Le jeton small vaut bien 1 rem, mais la
   typographie fluide du thème ne garantit pas qu'il le vaille encore sur un
   écran étroit, c'est-à-dire là où le zoom se déclenche. max() ferme la
   question sans rien figer. */
.s411-field input,
.s411-field textarea {
    width: 100%;
    font-family: inherit;
    font-size: max(1rem, var(--wp--preset--font-size--small, 1rem));
    line-height: 1.4;
    color: var(--c-ink);
    background: var(--c-white);
    border: 1.5px solid var(--c-rule);
    border-radius: 999px;
    /* Mêmes jetons que la pastille et que .s411-nl-email : les deux champs
       doivent être le même objet, et ils le sont maintenant aussi
       horizontalement, ce qui n'était pas le cas. */
    padding: var(--wp--preset--spacing--20, 1rem) var(--wp--preset--spacing--30, 1.75rem);
    transition: border-color .25s ease;
}
.s411-field textarea { border-radius: 14px; }
/* L'outline supprimé était la seule règle du site qui effaçait l'anneau de
   focus sans le remplacer. Il revient, celui du socle, 3 px cyan décalés de
   3 px, et la bordure magenta reste en second signal. Le rayon déclaré
   au-dessus protège la pastille du border-radius de 3 px que cette règle
   pose au passage. */
.s411-field input:focus,
.s411-field textarea:focus {
    border-color: var(--c-magenta);
}
.s411-field input[aria-invalid="true"],
.s411-field textarea[aria-invalid="true"] { border-color: var(--s411-erreur-filet); }
.s411-field-error {
    color: var(--s411-erreur-filet);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    margin: var(--wp--preset--spacing--10, .5rem) 0 0;
}
.s411-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ---------- récapitulatif ---------------------------------------------- */
/* Fond blanc et filet de 1 px, comme le cadre de tarifs du thème, rayon
   compris. Le fond gris partait d'une bonne intention, mettre le
   récapitulatif en retrait, mais il faisait tomber le libellé de l'acompte,
   en magenta, à 4,15:1, sous le seuil du petit texte. Le retrait se dit
   maintenant par un cadre, ce qui est la recette du site pour un tableau de
   chiffres. */
.s411-summary {
    background: var(--c-white);
    border: 1px solid var(--c-rule);
    border-radius: 14px;
    padding: var(--wp--preset--spacing--30, 1.75rem);
}
.s411-sum-line {
    display: flex;
    justify-content: space-between;
    gap: var(--wp--preset--spacing--20, 1rem);
    padding: var(--wp--preset--spacing--10, .5rem) 0;
    border-bottom: 1px solid var(--c-rule);
}
.s411-sum-line:last-of-type { border-bottom: 0; }
.s411-sum-label { color: var(--c-ink-2); }
/* VALEUR EN LIGNE. Seconde des deux valeurs du site qui étaient en Schibsted
   600, et c'est celle qu'on relit avant de payer. */
.s411-sum-value {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    font-weight: 400;
    letter-spacing: -.015em;
    line-height: 1.3;
    color: var(--c-ink);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.s411-sum-total {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--wp--preset--spacing--20, 1rem);
    /* Symétrique autour du filet, et sur un palier : c'était 18 px de chaque
       côté, la symétrie était là mais la valeur n'était nulle part. */
    margin-top: var(--wp--preset--spacing--20, 1rem);
    padding-top: var(--wp--preset--spacing--20, 1rem);
    border-top: 2px solid var(--c-ink);
}
/* LIBELLÉ, variante d'appui à l'encre : il coiffe la valeur sous un filet
   franc. */
.s411-sum-total .s411-sum-label {
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--c-ink);
}
/* VALEUR EN LIGNE. L'interligne n'était pas déclarée et valait 1,65 : une
   boîte de 56 px pour un corps de 34, pendant que l'acompte quatorze pixels
   plus bas faisait 52 pour 52. Deux chiffres du même encadré n'avaient pas le
   même rapport entre le corps et la boîte, et c'est exactement ce qui
   empêchait le bloc de s'équilibrer.
   Le total descend au rôle valeur en ligne : le chiffre du parcours est
   l'acompte, c'est lui qu'on paie maintenant, et la hiérarchie devient
   lisible au lieu d'être disputée entre deux gros chiffres voisins. */
.s411-sum-total .s411-sum-value {
    font-family: var(--f-titre);
    font-weight: 400;
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    letter-spacing: -.015em;
    line-height: 1.3;
    color: var(--c-ink);
    font-variant-numeric: tabular-nums;
}
.s411-sum-deposit {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--wp--preset--spacing--20, 1rem);
    margin-top: var(--wp--preset--spacing--20, 1rem);
}
/* Le libellé est du petit texte : même sur le blanc retrouvé, le magenta y
   tient à 4,50:1, c'est-à-dire au seuil exact, et l'en-tête de theme.css
   prévient que le seuil exact ne pardonne rien. Il passe à l'encre. Le
   montant, lui, garde le magenta : à 2 rem au minimum on est en grand texte,
   où le seuil tombe à 3:1. C'est le chiffre du parcours, il garde sa
   couleur. */
/* LIBELLÉ, variante d'appui. Le cas le plus net de tout l'audit : ce libellé
   et celui du total sont dans le même fichier, à quatorze pixels l'un de
   l'autre à l'écran, même corps, même graisse, même encre, et ils avaient deux
   chasses. Ils n'en ont plus qu'une. */
.s411-sum-deposit .s411-sum-label {
    font-family: var(--f);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--c-ink);
}
.s411-sum-deposit .s411-sum-value {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--xx-large, 2.75rem);
    font-weight: 400;
    line-height: 1;
    color: var(--c-magenta);
}
/* MENTION. */
.s411-sum-balance {
    margin: var(--wp--preset--spacing--10, .5rem) 0 0;
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.65;
    color: var(--c-ink-2);
}

/* MENTION. Elle est centrée, mais le plafond de mesure du thème s'appliquait
   à tous les <p> et la bornait autour de 500 px : elle se centrait dans sa
   propre boîte tronquée et apparaissait plus de 200 px à gauche du bouton
   qu'elle accompagne. Le plafond est maintenant limité au contenu de page ;
   la mesure est déclarée ici pour que ce soit dit et non supposé. */
.s411-secure {
    margin: var(--wp--preset--spacing--20, 1rem) 0 0;
    max-width: none;
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.65;
    color: var(--c-ink-2);
    text-align: center;
}

/* ---------- navigation et boutons -------------------------------------- */
.s411-nav {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--wp--preset--spacing--20, 1rem);
    /* Répété cinq fois dans le tunnel, et à 34 px, qui n'est sur aucun palier :
       c'est le rythme entre deux blocs, il vaut spacing-40 comme partout. */
    margin-top: var(--wp--preset--spacing--40, 2.75rem);
}
/* La recette du bouton du site, telle que theme.json la déclare : police de
   titre en graisse réelle, capitales, 0,1em d'interlettrage, pastille,
   aplat encre, et au survol un aplat magenta avec le soulèvement du site.
   Ces trois boutons étaient les derniers à écrire en Amiko, et en gras
   synthétique par-dessus le marché : Archivo Black porte déjà sa graisse,
   la demander en 700 revient à la faire épaissir deux fois. */
.s411-back, .s411-next, .s411-pay {
    font-family: var(--f-titre);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 400;
    letter-spacing: .1em;
    /* Un <button> n'hérite ni du corps ni de la hauteur de ligne de son
       parent : ces trois-là tombaient sur normal, soit environ 1,17 en Archivo
       Black, pendant que .s411-bouton, qui est un <a>, héritait 1,65. Deux
       hauteurs de pastille pour le même libellé de 13 px. */
    line-height: 1;
    text-transform: uppercase;
    /* La pastille est la forme de bouton du site entier. */
    border-radius: 999px;
    cursor: pointer;
    transition: transform .3s cubic-bezier(.16, 1, .3, 1),
                background .3s ease, color .3s ease, opacity .2s ease;
}
/* Retour : pas de pastille. Deux pastilles côte à côte donnaient deux
   actions de même poids alors qu'une seule fait avancer. */
.s411-back {
    background: none;
    border: 0;
    color: var(--c-ink);
    padding: var(--wp--preset--spacing--20, 1rem) var(--wp--preset--spacing--10, .5rem);
}
.s411-back:hover { color: var(--c-magenta-t); }
/* Le remplissage par dégradé animé s'en va, et pas seulement pour
   l'uniformité : au survol, le texte blanc arrivait sur le départ cyan du
   dégradé, où il ne tient que 2,97:1, et n'atteignait 4,50:1 qu'au quart du
   parcours. L'aplat magenta du thème donne 4,50:1 partout. On perd l'effet
   le plus travaillé du fichier, on gagne un libellé lisible au moment où
   l'on clique pour payer. */
.s411-next, .s411-pay {
    background: var(--c-ink);
    color: var(--c-white);
    border: 0;
    padding: var(--wp--preset--spacing--20, 1rem) var(--wp--preset--spacing--30, 1.75rem);
}
.s411-next:hover:not(:disabled),
.s411-pay:hover:not(:disabled) {
    background: var(--c-magenta-t);
    color: var(--c-white);
    transform: translateY(-3px) scale(1.02);
}
/* L'état désactivé porte de l'information : pas de créneau choisi à l'étape
   3, devis serveur pas encore arrivé à l'étape 5. À 35 % d'opacité, le
   libellé blanc tombait à 2,30:1 sur son propre fond éclairci. Un aplat
   filet avec du texte gris de lecture donne 5,14:1 et se lit clairement
   comme inactif. */
.s411-next:disabled, .s411-pay:disabled {
    background: var(--c-rule);
    color: var(--c-ink-2);
    cursor: not-allowed;
    transform: none;
}
/* Le bouton de paiement reste plus large : c'est le seul geste irréversible
   du parcours. */
/* Le seul geste irréversible du parcours garde son surcroît de largeur, mais
   sur le barème : un cran de plus à l'horizontale, rien de plus. */
.s411-pay { padding: var(--wp--preset--spacing--20, 1rem) var(--wp--preset--spacing--40, 2.75rem); }

/* La flèche avance au survol — le seul mouvement décoratif du parcours. */
.s411-arrow { display: inline-block; transition: transform .25s ease; }
.s411-formula:hover .s411-arrow,
.s411-next:hover:not(:disabled) .s411-arrow,
.s411-pay:hover:not(:disabled) .s411-arrow { transform: translateX(5px); }
.s411-back:hover .s411-arrow { transform: translateX(-5px); }

.s411-pay.is-busy { pointer-events: none; opacity: .6; }

/* ---------- alertes ---------------------------------------------------- */
/* Filet gauche de 3 px : c'est la recette de filet latéral du site, celle du
   bloc citation. Les valeurs ne changent pas, elles cessent d'être écrites
   deux fois dans le même fichier. */
.s411-alert {
    background: var(--s411-erreur-fond);
    border-left: 3px solid var(--s411-erreur-filet);
    color: var(--s411-erreur-texte);
    padding: var(--wp--preset--spacing--20, 1rem);
    border-radius: 0 4px 4px 0;
    margin-bottom: var(--wp--preset--spacing--30, 1.75rem);
    font-size: var(--wp--preset--font-size--small, 1rem);
}

/* ---------- retour de paiement ----------------------------------------- */
/* C'était le bloc le plus étranger au site : Amiko réécrite en dur une
   quatrième fois, sans même passer par la variable, et six valeurs
   hexadécimales recopiées. Ce bloc vit hors de .s411-booking, il ne voit
   donc aucun de ses jetons et lit la palette directement. Aucun script ne
   tourne sur cette vue, le gabarit sort juste après : c'est la partie la
   moins risquée du plan.
   62ch plutôt que 620 px : la largeur d'un texte se compte en signes, comme
   partout ailleurs sur le site. */
.s411-return {
    max-width: 62ch;
    margin: 0 auto;
    padding: var(--wp--preset--spacing--50, 4rem) 0;
    text-align: center;
    font-family: var(--wp--preset--font-family--body,
                     'Schibsted Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    color: var(--wp--preset--color--contrast, #0b0f14);
}
/* Recette du surtitre du site : police de labeur en 600, 0,2em. Il était en
   gras à 11 px avec un interlettrage qui n'existe nulle part au thème. */
.s411-return-eyebrow {
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--wp--preset--color--magenta-text, #e6007e);
    margin: 0 0 var(--wp--preset--spacing--20, 1rem);
}
.s411-return.is-pending .s411-return-eyebrow { color: var(--wp--preset--color--cyan-text, #0072a3); }
.s411-return-title {
    font-family: var(--wp--preset--font-family--display,
                     'Archivo Black', 'Arial Black', Impact, sans-serif);
    font-size: var(--wp--preset--font-size--xx-large, 2.75rem);
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: -.015em;
    line-height: 1.08;
    margin: 0 0 var(--wp--preset--spacing--30, 1.75rem);
}
/* Recette de la bande de repères du thème : un filet franc de 2 px en tête,
   des filets de 1 px entre les lignes, et plus de cadre arrondi dont le
   filet était simulé par un écart de grille. */
.s411-return-facts {
    display: grid;
    text-align: left;
    border-top: 2px solid var(--wp--preset--color--contrast, #0b0f14);
    margin: 0 0 var(--wp--preset--spacing--30, 1.75rem);
}
.s411-return-facts > div {
    display: flex;
    justify-content: space-between;
    gap: var(--wp--preset--spacing--20, 1rem);
    padding: var(--wp--preset--spacing--20, 1rem) 0;
    border-bottom: 1px solid var(--wp--preset--color--rule, #e2e7ec);
}
/* Le libellé passe du gris clair, 3,01:1, au magenta du thème, 4,50:1 sur
   blanc : c'est la couleur des libellés de la bande de repères du site. */
.s411-return-facts dt {
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    /* LIBELLÉ. Il suit .s411-fact dt du thème, dont il reprend la forme : le
       magenta est retiré des libellés, qui se répètent, et reste au surtitre
       et au chiffre vedette, qui n'apparaissent qu'une fois. */
    font-family: var(--wp--preset--font-family--body,
                     'Schibsted Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    letter-spacing: .2em;
    line-height: 1.4;
    color: var(--wp--preset--color--ink-2, #55606d);
    margin: 0;
}
/* VALEUR EN LIGNE. Elle ne déclarait aucun corps et prenait celui du texte
   courant : une valeur arrivée à sa taille par héritage. */
.s411-return-facts dd {
    margin: 0;
    font-family: var(--wp--preset--font-family--display,
                     'Archivo Black', 'Arial Black', Impact, sans-serif);
    font-size: var(--wp--preset--font-size--large, 1.375rem);
    font-weight: 400;
    letter-spacing: -.015em;
    text-transform: uppercase;
    line-height: 1.3;
    color: var(--wp--preset--color--contrast, #0b0f14);
    font-variant-numeric: tabular-nums;
}
/* MENTION. */
.s411-return-note {
    color: var(--wp--preset--color--ink-2, #55606d);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.65;
}

/* ---------- responsive -------------------------------------------------- */
@media (max-width: 760px) {
    .s411-picker { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--30, 1.75rem); }
    .s411-steps li { font-size: 0; letter-spacing: 0; }
    .s411-steps li::before { content: ''; display: block; height: 3px; background: currentColor; opacity: .25; }
    .s411-steps li.is-current::before, .s411-steps li.is-done::before { opacity: 1; }
    .s411-nav { flex-direction: column-reverse; align-items: stretch; }
    .s411-next, .s411-pay { width: 100%; }
    /* Le palier manuel à 40 px est retiré : le jeton xx-large descend déjà à
       2rem sur les petits écrans, tout seul. */
}

@media (prefers-reduced-motion: reduce) {
    .s411-booking *,
    .s411-booking *::before,
    .s411-booking *::after {
        animation-duration: .01ms !important;
        transition-duration: .01ms !important;
    }
}


/* Bandeau affiché tant que le paiement n'est pas branché. Il vaut mieux
   prévenir en haut du tunnel que refuser en bas. */
/* Même forme que la bannière d'erreur : un filet gauche de 3 px et un fond
   très pâle, rien d'autre. La mesure lit la variable du tunnel au lieu de
   recopier 1080px, et la pile de polices était tronquée. */
.s411-indispo {
    max-width: var(--s411-tunnel-max, 1080px);
    margin: 0 auto var(--wp--preset--spacing--30, 1.75rem);
    padding: var(--wp--preset--spacing--20, 1rem);
    border-radius: 0 4px 4px 0;
    background: var(--s411-attente-fond);
    border-left: 3px solid var(--s411-attente-filet);
    color: var(--s411-attente-texte);
    font-family: var(--wp--preset--font-family--body,
                     'Schibsted Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    font-size: var(--wp--preset--font-size--small, 1rem);
    line-height: 1.65;
}
.s411-indispo p { margin: 0 0 6px; }
.s411-indispo p:last-child { margin-bottom: 0; }

/* ---------- lettre d'information ---------------------------------------- */

/* Les piles de polices étaient recopiées à la main, et tronquées : Impact
   manquait dans la chaîne de secours des titres, Segoe UI dans celle du
   texte. Elles viennent maintenant des jetons.
   Attention en relisant à l'écran : dans le pied de page, theme.css habille
   ce formulaire sur la bande dégradée (.s411-newsletter) et l'emporte sur
   ces règles pour les couleurs et les tailles. Ce qui est écrit ici ne se
   voit donc en entier que si le formulaire est posé ailleurs. */
.s411-nl {
    font-family: var(--wp--preset--font-family--body,
                     'Schibsted Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
    max-width: 62ch;
}
.s411-nl-titre {
    font-family: var(--wp--preset--font-family--display,
                     'Archivo Black', 'Arial Black', Impact, sans-serif);
    text-transform: uppercase;
    letter-spacing: -.015em;
    /* TITRE DE SECTION, aux valeurs exactes de .s411-newsletter .s411-nl-titre
       dans theme.css, qui pèse 0-2-0 et l'emporte. Ce formulaire n'est posé
       que dans le pied de page : ce qui est écrit ici ne se voit jamais. Tant
       qu'on maintient les deux, elles doivent dire la même chose, sinon
       l'audit de la page réelle ne peut pas se faire dans le fichier qui a
       l'air de la décrire. */
    font-size: var(--wp--preset--font-size--x-large, 1.875rem);
    font-weight: 400;
    letter-spacing: -.02em;
    line-height: 1.12;
    margin: 0 0 var(--wp--preset--spacing--20, 1rem);
}
.s411-nl-texte {
    margin: 0 0 var(--wp--preset--spacing--20, 1rem);
    font-size: var(--wp--preset--font-size--small, 1rem);
    line-height: 1.6;
    color: var(--wp--preset--color--ink-2, #55606d);
}

.s411-nl-ligne { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; }
.s411-nl-label {
    position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}
.s411-nl-email {
    flex: 1 1 15rem;
    min-width: 0;
    font-family: inherit;
    /* 1 rem au plancher, pour la même raison que les champs du tunnel : sous
       16 px, iOS agrandit la page au moment de la saisie. */
    font-size: max(1rem, var(--wp--preset--font-size--small, 1rem));
    padding: 14px 18px;
    border: 1.5px solid var(--wp--preset--color--rule, #e2e7ec);
    border-radius: 999px;
    background: var(--wp--preset--color--base, #fff);
    color: var(--wp--preset--color--contrast, #0b0f14);
    transition: border-color .25s ease;
}
/* L'anneau du socle revient ici aussi : c'était le second endroit du projet
   où l'outline était coupé sans équivalent, et celui-là est présent dans le
   pied de page de toutes les pages du site. La bordure cyan reste en second
   signal. */
.s411-nl-email:focus { border-color: var(--wp--preset--color--cyan, #009fe3); }
/* C'est le bouton d'appel du site, celui des tuiles et du bandeau final :
   il garde son dégradé, mais celui du préréglage, et la courbe de survol du
   thème. À signaler, sans le corriger ici : sur ce dégradé le texte blanc
   démarre à 2,97:1 du côté cyan. C'est vrai de tous les boutons dégradés du
   thème, pas seulement de celui-ci, et cela se décide dans theme.css. */
.s411-nl-envoi {
    flex: none;
    font-family: var(--wp--preset--font-family--display,
                     'Archivo Black', 'Arial Black', Impact, sans-serif);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    letter-spacing: .1em;
    line-height: 1;
    text-transform: uppercase;
    color: var(--wp--preset--color--base, #fff);
    background: var(--wp--preset--gradient--quadri,
                    linear-gradient(115deg, #009fe3 0%, #e6007e 100%));
    border: 0;
    border-radius: 999px;
    /* Mêmes jetons que le champ auquel il est collé : les deux respiraient
       pareil verticalement et pas horizontalement. */
    padding: var(--wp--preset--spacing--20, 1rem) var(--wp--preset--spacing--30, 1.75rem);
    cursor: pointer;
    transition: transform .3s cubic-bezier(.16, 1, .3, 1), filter .3s ease, opacity .2s ease;
}
.s411-nl-envoi:hover:not(:disabled) { transform: translateY(-2px); filter: saturate(1.3); }
.s411-nl-envoi:disabled { opacity: .55; cursor: default; }

.s411-nl-consent {
    display: flex;
    gap: var(--wp--preset--spacing--10, .5rem);
    align-items: flex-start;
    margin-top: var(--wp--preset--spacing--20, 1rem);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.5;
    color: var(--wp--preset--color--ink-2, #55606d);
    cursor: pointer;
}
.s411-nl-consent input {
    margin-top: 3px;
    flex: none;
    width: 16px;
    height: 16px;
    accent-color: var(--wp--preset--color--magenta, #e6007e);
}

/* Même forme que les deux autres messages d'état du fichier : filet gauche
   de 3 px, fond très pâle. Le trio d'erreur n'est plus recopié, il est lu. */
.s411-nl-retour {
    margin: var(--wp--preset--spacing--20, 1rem) 0 0;
    padding: var(--wp--preset--spacing--20, 1rem);
    border-radius: 0 4px 4px 0;
    background: var(--s411-succes-fond);
    border-left: 3px solid var(--s411-succes-filet);
    color: var(--s411-succes-texte);
    font-size: var(--wp--preset--font-size--x-small, .8125rem);
    line-height: 1.55;
}
.s411-nl-retour--err {
    background: var(--s411-erreur-fond);
    border-left-color: var(--s411-erreur-filet);
    color: var(--s411-erreur-texte);
}

/* Message affiché après un clic sur un lien de confirmation ou de
   désinscription, injecté en tête du contenu de la page d'accueil. */
.s411-nl-retour--ok, .s411-nl-retour--err {
    max-width: 880px;
    margin-left: auto;
    margin-right: auto;
}
