/* ═══════════════════════════════════════════════════════════════════════
   LE DESIGN DU SITE AK CENTER — reparti de zéro le 19/08/2026.

   La mise en page suit la maquette validée (boutique de meubles) : ses
   proportions, ses espacements, ses formes. Les COULEURS, elles, sont celles
   d'AK — décision du 19/08 : « la structure, mais aux couleurs AK ».

   Le design arrive SECTION PAR SECTION. Chaque section a son bloc ci-dessous,
   dans l'ordre de la page, et rien n'est écrit d'avance.
   ═══════════════════════════════════════════════════════════════════════ */

/* ═══ JETONS ═════════════════════════════════════════════════════════════

   ── LA TRADUCTION DES COULEURS DE LA MAQUETTE ──

   La maquette pose un vert forêt (boutons, pied, titres) et un jaune ambre
   (accents, badges, bannière promotionnelle) sur fond crème.

   Le vert devient une ENCRE chaude, presque noire. Pas un orange foncé : deux
   oranges de valeurs différentes se disputeraient l'attention, et l'accent
   perdrait exactement ce qui en fait un accent. C'est le parti déjà pris dans
   l'application — neutre partout, orange à un seul endroit à la fois.

   Le jaune ambre devient l'ORANGE AK, #F85000, sans transiger : c'est la
   couleur de la maison, la même que l'application et l'ERP.
   ═══════════════════════════════════════════════════════════════════════ */

:root {
    /* L'accent, et lui seul. */
    --orange:        #F85000;
    --orange-fonce:  #D14400;   /* survol, état pressé */
    --orange-doux:   #FFF1EA;   /* aplats très clairs, pastilles */

    /* L'encre — remplace le vert forêt de la maquette. Chaude, jamais
       bleutée : un gris neutre à côté d'un orange saturé paraît sale. */
    --encre:         #1A1512;
    --encre-2:       #4A413C;
    --g1:            #6B615B;
    --g2:            #9A918B;
    --g3:            #C4BCB6;

    /* Les fonds. Le crème de la maquette, réchauffé du côté de l'orange. */
    --creme:         #F8F5F2;
    --blanc:         #FFFFFF;
    --trait:         #ECE6E1;
    /* Le trait APPUYÉ — bordures de boutons creux, séparateurs à souligner.
       Il manquait : `.ak-cta--creux` le demandait, et une variable inconnue
       invalide TOUTE la déclaration `border`. Le bouton n'avait donc aucune
       bordure, sans la moindre erreur pour le dire. Vu sur la capture. */
    --trait-fort:    #D6CEC7;

    /* LE BLANC QUI NE BASCULE JAMAIS.
       `--blanc` est une SURFACE : en mode sombre elle devient sombre. Mais le
       texte posé sur l'orange, sur l'encre ou sur une photo doit rester blanc
       dans les deux modes — sinon le bouton « Faire réparer » écrirait en noir
       sur orange la nuit. Deux rôles, deux jetons : c'est le piège numéro un
       d'un thème sombre, et il ne se voit qu'une fois les deux modes côte à
       côte. */
    --sur-couleur:   #FFFFFF;

    /* LA SURFACE QUI RESTE SOMBRE DANS LES DEUX MODES.
       Symétrique du piège précédent : `--encre` est une ENCRE, et plusieurs
       éléments s'en servaient comme d'un FOND — le bandeau de contact, les
       pastilles de qualité, les numéros d'étapes, le bouton « Ajouter ».
       En mode sombre l'encre devient claire : ces fonds seraient passés au
       blanc, avec leur texte blanc dessus. Ils prennent donc un jeton qui ne
       bascule pas. */
    --fond-sombre:   #1A1512;
    --fond-sombre-2: #4A413C;

    /* Le verre dépoli des cartouches flottantes et de la barre au
       défilement. Écrit en dur, il restait blanc la nuit — avec du texte
       clair dessus, donc illisible. */
    --verre:         rgba(255, 255, 255, .94);

    /* La hauteur de la barre de navigation. Nommée parce que le héros doit
       remonter dessous d'exactement cette valeur. */
    --h-entete:      84px;

    /* ── LE MOUVEMENT ────────────────────────────────────────────────────
       Trois durées, deux courbes, et rien d'autre. La feuille en comptait
       DOUZE de durée et deux écritures de la même courbe : un site animé au
       coup par coup, où deux gestes identiques ne durent pas pareil. L'œil
       ne sait pas nommer ce défaut, mais il le sent — c'est ce qui sépare
       « ça bouge » de « c'est réglé ».

       · vif    — ce qu'on déclenche soi-même et qui doit répondre tout de
                  suite : survol, pression, changement de couleur.
       · moyen  — ce qui se déplace ou change de taille : cartes qui se
                  soulèvent, panneaux qui s'ouvrent.
       · ample  — ce qui entre en scène : révélations au défilement, zooms
                  d'images.

       Les deux courbes disent la direction : ce qui ARRIVE décélère (on le
       rattrape du regard), ce qui PART accélère (on le laisse filer). */
    --t-vif:         160ms;
    --t-moyen:       260ms;
    --t-ample:       420ms;
    --t-lent:        700ms;   /* révélations et zooms d'images */

    /* ⚠ Ces deux valeurs ne doivent JAMAIS passer par un remplacement en
       masse : un `var(--e-sortie)` dans sa propre déclaration se référence
       lui-même, la variable devient vide, et toutes les transitions
       retombent silencieusement sur `ease`. Constaté à la mesure : la courbe
       calculée valait « ease » partout. */
    --e-sortie:      cubic-bezier(.22, .7, .24, 1);
    --e-entree:      cubic-bezier(.55, 0, .85, .35);

    /* LE FOND DES PHOTOS DU CATALOGUE — mesuré, pas choisi.
       Les quatre coins des photos produit valent #E6E6E6 (230,230,230),
       identique d'un article à l'autre : elles sont normalisées à la source.
       Poser cette teinte derrière une photo `contain` rend le remplissage
       INVISIBLE — c'est ce qui permet un cadre portrait sans rogner le
       produit. */
    --fond-photo:    #E6E6E6;

    /* Les couleurs de sens — distinctes de l'accent, sans quoi « en stock »
       et « promotion » se ressembleraient. */
    --vert:          #17803D;
    --vert-doux:     #E8F5EC;
    --rouge-doux:    #FBE9E7;
    --rouge:         #C4322A;
    /* L'AMBRE — ce qui ATTEND quelque chose : un devis à valider, un
       règlement à faire. Il manquait : le vert dit « c'est bon », le rouge
       « c'est refusé », mais rien ne disait « à vous de jouer ». */
    --ambre:         #9A6700;
    --ambre-doux:    #FFF6E5;

    /* ── LA TRAME ──
       1320 px : la largeur de la maquette une fois ramenée à l'échelle 1.
       À confirmer sur le fichier source, que je n'ai pas encore. */
    --large:         1320px;
    --gouttiere:     24px;

    /* ── L'ÉCHELLE D'ESPACEMENT ──
       Multiples de 4. Une échelle évite les « 13 px ici, 15 px là » qui font
       qu'une page paraît bricolée sans qu'on sache dire pourquoi. */
    --e1: 4px;  --e2: 8px;  --e3: 12px; --e4: 16px;
    --e5: 24px; --e6: 32px; --e7: 48px; --e8: 64px; --e9: 96px;

    /* ── LES ARRONDIS ──
       La maquette est très arrondie : pastilles pleines sur les boutons,
       coins généreux sur les cartes. */
    --r-carte:   20px;
    --r-champ:   12px;
    --r-pastille: 999px;

    --ombre-carte: 0 1px 2px rgba(26, 21, 18, .04),
                   0 12px 32px -16px rgba(26, 21, 18, .16);
}

/* ═══════════════════════════════════════════════════════════════════════
   LE MODE SOMBRE — 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Rien n'est repeint : on redéfinit les MÊMES jetons. C'est tout l'intérêt
   d'avoir posé trente-deux variables plutôt que sept cents couleurs.

   ── TROIS ÉTATS, PAS DEUX ──

   Le visiteur peut n'avoir rien choisi : son système décide alors
   (`prefers-color-scheme`). S'il a choisi, l'attribut `data-theme` sur la
   racine tranche — et il doit gagner DANS LES DEUX SENS, d'où le
   `:not([data-theme="light"])` sur la règle du système. Sans lui, un
   visiteur qui force le mode clair depuis un système sombre resterait
   sombre.

   ── CE QUI NE BASCULE PAS, ET POURQUOI ──

   `--fond-photo` reste clair : les 380 photos du catalogue sont des
   détourages sur blanc. Une tuile sombre derrière un détourage blanc fait
   un trou au milieu de la carte — c'est le défaut qu'on a déjà corrigé une
   fois sur la carte « Écrans & batteries ». Les vraies boutiques gardent
   leur plaque produit claire de nuit ; ce n'est pas un oubli, c'est la
   seule façon d'afficher des photos détourées sur blanc.

   `--orange` ne bouge pas non plus : c'est la marque. Seul `--orange-doux`
   s'assombrit, sinon les pastilles deviendraient des lampes.
   ═══════════════════════════════════════════════════════════════════════ */

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        /* Les couleurs de SENS s'éclaircissent : #17803D sur du sombre
           tombe à 3,6:1, mesuré. Un « En stock » qu'on peine à lire est un
           « En stock » qui ne rassure pas. */
        --vert:         #4ADE80;
        --vert-doux:    #10291A;
        --rouge:        #FF7A70;
        --rouge-doux:   #2E1512;
        --ambre:        #F5C451;
        --ambre-doux:   #2B2008;
        --verre:        rgba(26, 22, 20, .92);
        --encre:        #F4F0ED;
        --encre-2:      #CFC6C0;
        --g1:           #A79E97;
        --g2:           #7E7570;
        --g3:           #4C443F;

        --creme:        #100D0C;
        --blanc:        #1A1614;
        --trait:        #2B2522;
        --trait-fort:   #3D3531;

        --orange-doux:  #2A1710;
    }
}

:root[data-theme="dark"] {
        /* Les couleurs de SENS s'éclaircissent : #17803D sur du sombre
           tombe à 3,6:1, mesuré. Un « En stock » qu'on peine à lire est un
           « En stock » qui ne rassure pas. */
        --vert:         #4ADE80;
        --vert-doux:    #10291A;
        --rouge:        #FF7A70;
        --rouge-doux:   #2E1512;
        --ambre:        #F5C451;
        --ambre-doux:   #2B2008;
        --verre:        rgba(26, 22, 20, .92);
    --encre:        #F4F0ED;
    --encre-2:      #CFC6C0;
    --g1:           #A79E97;
    --g2:           #7E7570;
    --g3:           #4C443F;

    --creme:        #100D0C;
    --blanc:        #1A1614;
    --trait:        #2B2522;
    --trait-fort:   #3D3531;

    --orange-doux:  #2A1710;
}

/* ── CE QUE LES JETONS NE SUFFISENT PAS À RÉGLER ── */

/* Les logos des marques sont des tracés SOMBRES sur fond transparent ou
   blanc : de nuit, ils disparaissent. On les inverse, et on annule la
   teinte que l'inversion donnerait aux logos en couleur. */


/* ── CE QUE LES JETONS SEULS NE RÈGLENT PAS — corrigé le 20/08 après audit ──

   Un agent a passé les huit pages dans les deux modes et rapporté douze
   défauts. Tous relèvent du même malentendu : une valeur choisie pour son
   RÔLE en mode clair (« un fond sombre », « un vert de validation ») cesse
   de jouer ce rôle quand tout le reste bascule autour d'elle.

   Le cas d'école : `.ak-cta--sombre` était un bouton sombre sur page claire.
   La nuit, la page devient sombre et le bouton garde sa couleur — mesuré à
   1,008:1 contre le fond, c'est-à-dire invisible. Un bouton « sombre » ne
   veut rien dire ; ce qu'on voulait, c'est un bouton CONTRASTÉ. */
:root[data-theme="dark"] {
    color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) { color-scheme: dark; }
}
:root[data-theme="light"] { color-scheme: light; }

/* Les surfaces qui doivent RESTER contrastées, et non rester sombres. */
:root[data-theme="dark"] .ak-cta--sombre,
:root[data-theme="dark"] .ak-bouton,
:root[data-theme="dark"] .ak-etape span,
:root[data-theme="dark"] .ak-temoin__petale,
:root[data-theme="dark"] .ak-magasin {
    background: var(--encre);
    color: var(--creme);
}
:root[data-theme="dark"] .ak-cta--sombre:hover,
:root[data-theme="dark"] .ak-bouton:hover,
:root[data-theme="dark"] .ak-magasin:hover { background: var(--encre-2); }

/* Le bandeau de contact se confondait avec l'en-tête (1,008:1). Il descend
   d'un cran sous le fond de page pour retrouver son rôle de bande. */
:root[data-theme="dark"] .ak-bandeau { background: #070505; }

/* La frise : les fichiers ont un fond BLANC opaque, et l'inversion le
   rendait noir. Plutôt qu'inverser, on rend la plaque blanche — la même
   réponse que pour les photos du catalogue et les pastilles du héros. */
:root[data-theme="dark"] .ak-marques__lot img {
    filter: none;
    background: var(--sur-couleur);
    border-radius: 8px;
    padding: 4px 8px;
    opacity: .82;
}
:root[data-theme="dark"] .ak-marques__lot img:hover { opacity: 1; }

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .ak-cta--sombre,
    :root:not([data-theme="light"]) .ak-bouton,
    :root:not([data-theme="light"]) .ak-etape span,
    :root:not([data-theme="light"]) .ak-temoin__petale,
    :root:not([data-theme="light"]) .ak-magasin {
        background: var(--encre);
        color: var(--creme);
    }
    :root:not([data-theme="light"]) .ak-cta--sombre:hover,
    :root:not([data-theme="light"]) .ak-bouton:hover,
    :root:not([data-theme="light"]) .ak-magasin:hover { background: var(--encre-2); }
    :root:not([data-theme="light"]) .ak-bandeau { background: #070505; }
    :root:not([data-theme="light"]) .ak-marques__lot img {
        filter: none;
        background: var(--sur-couleur);
        border-radius: 8px;
        padding: 4px 8px;
        opacity: .82;
    }
    :root:not([data-theme="light"]) .ak-marques__lot img:hover { opacity: 1; }
}


/* ── CE QUE LA PREMIÈRE SÉRIE DE CORRECTIFS A CASSÉ — 20/08, seconde passe ──
   Une contre-vérification a montré que trois de mes règles de nuit, écrites
   avec une spécificité plus forte, avaient écrasé des intentions du mode
   clair : le bouton en attente redevenait actif, l'étape 1 perdait son
   orange, le survol du bouton ordinaire aussi. Une règle de thème doit
   redéfinir une COULEUR, jamais annuler une distinction. */
:root[data-theme="dark"] .ak-magasin--attente,
:root:not([data-theme="light"]) .ak-magasin--attente {
    background: transparent;
    color: var(--g2);
    border: 1.5px dashed var(--trait-fort);
}
:root[data-theme="dark"] .ak-magasin--attente:hover,
:root:not([data-theme="light"]) .ak-magasin--attente:hover { background: transparent; }

:root[data-theme="dark"] .ak-etape:first-child span,
:root:not([data-theme="light"]) .ak-etape:first-child span {
    background: var(--orange);
    color: var(--sur-couleur);
}

:root[data-theme="dark"] .ak-bouton:hover,
:root:not([data-theme="light"]) .ak-bouton:hover { background: var(--orange); color: var(--sur-couleur); }

/* Le bandeau : 1,13:1 contre l'en-tête, c'est mieux que 1,008 mais ça ne
   fait toujours pas une frontière. Un filet la dessine, lui. */
:root[data-theme="dark"] .ak-bandeau,
:root:not([data-theme="light"]) .ak-bandeau { border-bottom: 1px solid var(--trait); }

/* La frise garde son geste : gris au repos, couleur au survol — la nuit
   comme le jour. Elle était restée en couleur au repos. */
:root[data-theme="dark"] .ak-marques__lot img,
:root:not([data-theme="light"]) .ak-marques__lot img { filter: grayscale(1); }
:root[data-theme="dark"] .ak-marques__lot img:hover,
:root:not([data-theme="light"]) .ak-marques__lot img:hover { filter: none; }

/* Le chevron du tri est une image écrite en dur, tracée en #1A1512 : elle
   disparaissait sur un champ sombre. Une seconde image, claire, pour la
   nuit. */
:root[data-theme="dark"] .ak-tri select,
:root:not([data-theme="light"]) .ak-tri select {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23F4F0ED' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
}

/* LE LOGO AK CHANGE DE FICHIER, IL NE S'INVERSE PAS.
   Un `invert()` sur la marque tuerait l'orange. La version blanche existe
   déjà — elle avait été faite pour l'ancien pied sombre — on s'en sert. */
.ak-logo--nuit { display: none; }
:root[data-theme="dark"] .ak-logo--jour { display: none; }
:root[data-theme="dark"] .ak-logo--nuit { display: block; }
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .ak-logo--jour { display: none; }
    :root:not([data-theme="light"]) .ak-logo--nuit { display: block; }
}
/* …sauf au survol de la frise, où la marque reprend ses couleurs : c'est le
   geste qu'on a construit, il ne doit pas se perdre la nuit. */

/* Le bouton de bascule, dans l'en-tête. */
.ak-theme {
    display: grid;
    place-items: center;
    width: 40px; height: 40px;
    border: none;
    border-radius: var(--r-pastille);
    background: transparent;
    color: var(--encre);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-theme:hover { background: var(--creme); color: var(--orange); }
.ak-theme .ak-lune { display: none; }
:root[data-theme="dark"] .ak-theme .ak-lune { display: block; }
:root[data-theme="dark"] .ak-theme .ak-soleil { display: none; }
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .ak-theme .ak-lune { display: block; }
    :root:not([data-theme="light"]) .ak-theme .ak-soleil { display: none; }
}



/* ═══ SOCLE ══════════════════════════════════════════════════════════════ */

*, *::before, *::after { box-sizing: border-box; }

/* Autorise l'animation vers une hauteur `auto` — utilisé par le dépliage
   des questions. Sans effet là où ce n'est pas reconnu. */
:root { interpolate-size: allow-keywords; }

html { -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    /* URBANIST — une géométrique, comme la maquette. Inter est humaniste :
       ses titres n'avaient pas la même allure. Le repli reste la police
       système, affichée le temps du chargement (`font-display: swap`). */
    font-family: Urbanist, system-ui, -apple-system, sans-serif;
    font-size: 16px;
    line-height: 1.55;
    color: var(--encre);
    background: var(--blanc);
    -webkit-font-smoothing: antialiased;
    /* Aucune page ne doit défiler latéralement — c'est le défaut qui se voit
       le plus sur un téléphone et qu'on remarque le moins en le construisant.
     *
     * `clip` ET NON `hidden`, et ce n'est pas un détail : `overflow: hidden`
     * fait du corps un conteneur de défilement, ce qui CASSE `position:
     * sticky` sur ses descendants — l'en-tête aurait cessé de tenir en haut
     * de l'écran, sans rien dans la console pour l'expliquer. `clip` coupe le
     * débordement sans créer ce conteneur. */
    overflow-x: clip;
}

img, svg, video { max-width: 100%; height: auto; display: block; }

a { color: inherit; text-decoration: none; }

button { font: inherit; color: inherit; }

h1, h2, h3, h4, h5 {
    margin: 0;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -.02em;
    text-wrap: balance;
}

p { margin: 0; }

ul { margin: 0; padding: 0; list-style: none; }

/* La trame : un seul conteneur, partout. Des largeurs recopiées section par
   section finissent toujours par diverger d'un pixel ou deux, et les blocs ne
   s'alignent plus verticalement. */
.ak-large {
    width: 100%;
    max-width: calc(var(--large) + var(--gouttiere) * 2);
    margin-inline: auto;
    padding-inline: var(--gouttiere);
}

/* ═══ ACCESSIBILITÉ ══════════════════════════════════════════════════════ */

/* Invisible tant qu'on ne l'atteint pas au clavier. Sans lui, naviguer au
   clavier oblige à traverser tout le menu à chaque page. */
.saut-au-contenu {
    position: absolute;
    left: -9999px;
}
.saut-au-contenu:focus {
    left: var(--e4);
    top: var(--e4);
    z-index: 999;
    padding: var(--e3) var(--e5);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    border-radius: var(--r-champ);
}

:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; }

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

/* Lu par les lecteurs d'écran, invisible à l'œil. */
.lecture-seule {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 1 · LE BANDEAU DE CONTACT
   ═══════════════════════════════════════════════════════════════════════

   Trois zones, comme la maquette : un contact à gauche, un message au
   centre, un troisième bloc à droite.

   ── CE QUI CHANGE PAR RAPPORT À LA MAQUETTE, ET POURQUOI ──

   La maquette met « Sign up and GET 25% OFF your first order » au centre.
   AK n'a pas cette remise, et ce site a déjà retiré trois éléments du
   gabarit d'origine parce qu'ils faisaient semblant — un compte à rebours
   sans échéance, une infolettre qui ne collectait rien. On n'en réintroduit
   pas un quatrième. Le centre porte donc ce qui est vrai et vaut d'être dit :
   le diagnostic gratuit et la garantie.

   À droite, la maquette aligne des icônes de réseaux sociaux. AK n'en a
   aucun d'enregistré : une icône qui ne mène nulle part est le même défaut.
   La place tient les HORAIRES, qui occupent le même poids visuel et
   renseignent vraiment. Les icônes reviendront le jour où les comptes
   existeront.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-bandeau {
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    font-size: 13px;
    line-height: 1.4;
}

.ak-bandeau > .ak-large {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e5);
    min-height: 44px;
}

.ak-bandeau a { color: inherit; }

.ak-bandeau__contact,
.ak-bandeau__horaires {
    display: flex;
    align-items: center;
    gap: var(--e2);
    white-space: nowrap;
    color: rgba(255, 255, 255, .78);
}

.ak-bandeau__contact strong {
    color: var(--sur-couleur);
    font-weight: 600;
}

.ak-bandeau__contact svg,
.ak-bandeau__horaires svg { flex: none; opacity: .7; }

/* Le message du centre. Il disparaît avant les deux autres quand la place
   manque : le numéro de téléphone est ce qu'on vient chercher en premier. */
.ak-bandeau__mot {
    display: flex;
    align-items: center;
    gap: var(--e3);
    text-align: center;
}

.ak-bandeau__mot em {
    font-style: normal;
    color: rgba(255, 255, 255, .78);
}

/* Le seul orange du bandeau — un lien, pas un bouton : à cette taille, un
   bouton plein ferait une tache et volerait l'attention au menu juste
   dessous. */
.ak-bandeau__lien {
    color: var(--orange);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
}
.ak-bandeau__lien:hover { color: var(--sur-couleur); }

@media (max-width: 1100px) {
    .ak-bandeau__horaires { display: none; }
}
@media (max-width: 760px) {
    .ak-bandeau > .ak-large { justify-content: center; }
    .ak-bandeau__mot { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 2 · L'EN-TÊTE
   ═══════════════════════════════════════════════════════════════════════

   Refait le 19/08/2026 sur sa demande : « le logo AK sans écriture, l'en-tête
   pro avec les mêmes icônes que l'image ».

   Trois zones comme la maquette — la marque, le menu, les quatre actions.
   Fond blanc, un trait fin en bas, et la barre reste en haut au défilement :
   sur une boutique, atteindre le panier ne doit jamais demander de remonter.

   ── LA MARQUE SEULE ──

   Le logo à texte (620 × 120, « AK CENTER · RÉPARATION · PIÈCES ») est
   remplacé par la marque nue. Elle est plus lisible à 40 px de haut, elle ne
   se déforme pas au téléphone, et elle laisse au menu la place qu'il lui
   faut. Le fichier d'origine pesait 488 Ko : il a été rogné sur ses pixels
   utiles, recentré dans un carré et décliné en 96 et 192 px.

   ── LES QUATRE ICÔNES ──

   Recherche, favoris, panier, compte — les mêmes que la maquette, au même
   endroit, dans le même style : trait fin, sans cercle autour, sans aplat.
   Elles sont dessinées dans le HTML : le thème retiré chargeait une police
   d'icônes entière pour une poignée de glyphes.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-entete {
    position: sticky;
    top: 0;
    z-index: 100;
    background: var(--blanc);
    border-bottom: 1px solid var(--trait);
    transition: background var(--t-moyen) var(--e-sortie), border-color var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie);
}

/* ── TRANSPARENT EN HAUT, BLANC DÈS QU'ON DÉFILE ──
   Uniquement sur les pages qui commencent par un héros teinté (`ak-corps-heros`) :
   ailleurs, la barre surplomberait du contenu et deviendrait illisible.

   La classe `est-defile` est posée par un script de six lignes ; en son
   absence — script bloqué, navigateur ancien — la barre reste simplement
   blanche, c'est-à-dire l'état d'avant. Un effet décoratif ne doit jamais
   pouvoir rendre une navigation invisible. */
body.ak-corps-heros .ak-entete {
    background: transparent;
    border-bottom-color: transparent;
}
/* Transparent ne suffit pas : sous la barre il y avait le fond du corps,
   blanc, et non le héros — la barre restait donc visiblement plus claire.
   Le héros est REMONTÉ sous elle, et rend en padding la hauteur qu'il prend
   en marge. Vu à l'écran ; aucun outil ne l'aurait signalé. */
body.ak-corps-heros .ak-heros {
    margin-top: calc(var(--h-entete) * -1);
    padding-top: var(--h-entete);
}
body.ak-corps-heros .ak-entete.est-defile {
    background: var(--verre);
    backdrop-filter: blur(12px);
    border-bottom-color: var(--trait);
    box-shadow: 0 6px 24px -18px rgba(26,21,18,.5);
}

.ak-entete > .ak-large {
    display: flex;
    align-items: center;
    gap: var(--e6);
    min-height: 84px;
}

/* ── La marque ── */
.ak-entete__logo {
    flex: none;
    display: block;
    line-height: 0;   /* sans quoi la ligne de base ajoute 4 px sous l'image */
}
.ak-entete__logo img {
    /* 56 px dans une barre de 84 : la marque respire sans toucher les bords.
       Elle était à 42 — trop discrète pour une marque qui porte seule
       l'identité, puisqu'il n'y a plus de texte à côté d'elle. */
    width: 56px;
    height: 56px;
    transition: transform var(--t-vif) var(--e-sortie);
}
.ak-entete__logo:hover img { transform: scale(1.06); }

/* ── Le menu ── */
.ak-menu {
    display: flex;
    align-items: center;
    gap: var(--e6);
    margin-inline: auto;   /* centré, quelles que soient les largeurs autour */
}

.ak-menu a {
    position: relative;
    padding-block: var(--e3);
    font-size: 15px;
    font-weight: 500;
    color: var(--encre-2);
    white-space: nowrap;
    transition: color var(--t-vif) var(--e-sortie);
}
.ak-menu a:hover { color: var(--encre); }

/* LA PAGE COURANTE SE SIGNALE PAR SON POIDS, PAS PAR UN TRAIT.
 *
 * Elle portait un soulignement orange. Retiré le 19/08/2026 : dans un menu
 * dont les entrées sont grises, la SEULE qui soit noire et grasse se
 * distingue déjà sans qu'on ait à tracer quoi que ce soit. Le trait faisait
 * un second signal pour la même information — et il attirait l'œil sur la
 * page où l'on est déjà, plutôt que sur celles où l'on peut aller. */
.ak-menu a[aria-current="page"] { color: var(--encre); font-weight: 700; }

/* ── Les quatre actions ──
   Espacées serré, comme la maquette : elles forment un GROUPE, et un écart
   trop large les ferait lire comme quatre éléments sans rapport. */
.ak-actions {
    display: flex;
    align-items: center;
    gap: var(--e1);
    flex: none;
}

.ak-action {
    position: relative;
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    border: none;
    background: transparent;
    border-radius: var(--r-pastille);
    color: var(--encre);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-action:hover { background: var(--creme); color: var(--orange); }

/* Le compteur du panier. Il ne s'affiche QUE s'il y a quelque chose dedans —
   un « 0 » permanent est du bruit, et il fait douter de ce qu'on a mis. */
.ak-action__compte {
    position: absolute;
    top: 4px; right: 2px;
    min-width: 18px;
    height: 18px;
    padding-inline: 5px;
    display: grid;
    place-items: center;
    background: var(--orange);
    color: var(--sur-couleur);
    font-size: 11px;
    font-weight: 700;
    line-height: 1;
    border-radius: var(--r-pastille);
    border: 2px solid var(--blanc);
}

/* ── LA RECHERCHE ──
   Une ICÔNE dans la barre ; le champ se déplie dessous au clic — sa demande
   du 19/08, après avoir essayé le champ posé en permanence.

   Le champ garde l'allure de sa capture : pastille grise, loupe dedans à
   gauche, sans bordure au repos. Ce qui change, c'est OÙ il vit — replié,
   il ne dispute plus sa place au menu, qui tient alors entier bien plus bas
   en largeur.

   Piloté par une case à cocher : aucun JavaScript, donc la recherche
   s'ouvre même si un script casse plus haut dans la page. */
#ak-recherche-ouverte {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
}
#ak-recherche-ouverte:focus-visible ~ .ak-entete .ak-recherche__bouton {
    outline: 2px solid var(--orange);
    outline-offset: 3px;
}

.ak-recherche {
    position: absolute;
    top: 100%;
    left: 0; right: 0;
    /* La gouttière EST portée par le panneau, pas par le formulaire : sans
       elle, le champ touchait les bords de l'écran dès que la fenêtre passait
       sous 1 368 px, et ne s'alignait plus sur le logo ni sur le menu. */
    padding: var(--e4) var(--gouttiere);
    background: var(--blanc);
    border-bottom: 1px solid var(--trait);
    box-shadow: var(--ombre-carte);
    /* Vraiment fermé : `display:none` le retire de l'ordre de tabulation, ce
       qu'une simple opacité ne fait pas. */
    display: none;
}
#ak-recherche-ouverte:checked ~ .ak-entete .ak-recherche { display: block; }

/* Le formulaire s'aligne sur la trame de la page, pas sur les bords de
   l'écran : sans ce conteneur, le champ courait d'un bord à l'autre et ne
   tombait plus sous rien. */
.ak-recherche form {
    display: flex;
    align-items: center;
    gap: var(--e2);
    width: 100%;
    max-width: var(--large);
    margin-inline: auto;
    height: 52px;
    padding-inline: var(--e5) var(--e3);
    background: var(--creme);
    border: 1.5px solid transparent;
    border-radius: var(--r-pastille);
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
.ak-recherche form:focus-within {
    background: var(--blanc);
    border-color: var(--g3);
}

/* La loupe est DANS le champ, à gauche. Un repère, pas une commande : le
   formulaire se valide avec Entrée. */
.ak-recherche__loupe {
    flex: none;
    color: var(--g1);
    display: grid;
    place-items: center;
}

.ak-recherche input {
    flex: 1;
    min-width: 0;
    border: none;
    background: transparent;
    outline: none;
    font-family: inherit;
    /* 16 px : en dessous, iOS zoome sur le champ à la mise au point. */
    font-size: 16px;
    color: var(--encre);
}
.ak-recherche input::placeholder { color: var(--g2); }

/* Le bouton d'envoi n'existe qu'au clavier : à l'œil, la pastille se valide
   avec Entrée. Le retirer complètement empêcherait d'envoyer sans souris. */
.ak-recherche button {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
}
.ak-recherche button:focus-visible {
    position: static;
    width: auto; height: 38px;
    margin: 0; padding-inline: var(--e5);
    clip-path: none;
    border: none;
    border-radius: var(--r-pastille);
    background: var(--orange);
    color: var(--sur-couleur);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}

/* L'icône bascule : loupe fermée, croix ouverte — on voit comment refermer. */
.ak-recherche__bouton .ak-ico-fermer { display: none; }
#ak-recherche-ouverte:checked ~ .ak-entete .ak-recherche__bouton .ak-ico-loupe { display: none; }
#ak-recherche-ouverte:checked ~ .ak-entete .ak-recherche__bouton .ak-ico-fermer { display: block; }
#ak-recherche-ouverte:checked ~ .ak-entete .ak-recherche__bouton { color: var(--orange); }

/* ── Le menu au téléphone ── */
.ak-burger { display: none; }

/* LA CASE QUI PILOTE LE MENU — cachée à l'œil, PAS au clavier.
 *
 * Écrite d'abord en `display:none`, ce qui la retirait de l'ordre de
 * tabulation : un `<label>` n'est pas focalisable, donc plus personne ne
 * pouvait ouvrir le menu au clavier. Elle est maintenant simplement
 * escamotée — on peut l'atteindre avec Tab et la basculer avec Espace. */
#ak-menu-ouvert {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
}
#ak-menu-ouvert:focus-visible ~ .ak-entete .ak-burger {
    outline: 2px solid var(--orange);
    outline-offset: 3px;
}

/* ── LES LARGEURS INTERMÉDIAIRES ──
   La recherche étant repliée en icône à toutes les largeurs, il ne reste que
   le menu à ménager : on resserre ses écarts avant de le faire disparaître
   derrière un bouton. C'est lui qui dit ce que le site propose, il part en
   dernier. */
@media (max-width: 1120px) {
    .ak-entete > .ak-large { gap: var(--e5); }
    .ak-menu { gap: var(--e5); }
}

@media (max-width: 940px) {
    .ak-entete > .ak-large { min-height: 68px; gap: var(--e3); }

    .ak-burger {
        display: grid;
        place-items: center;
        width: 44px; height: 44px;
        border: none; background: transparent;
        border-radius: var(--r-pastille);
        cursor: pointer;
        order: -1;              /* à gauche de la marque */
    }

    /* `auto` des DEUX côtés : la marque se centre entre le bouton du menu et
       les actions. Écrit `auto 0`, elle était plaquée contre les icônes. */
    .ak-entete__logo { margin-inline: auto; }
    /* 44 px au téléphone, dans une barre de 68 : le même rapport qu'en
       grand écran. Une taille figée aurait mangé la barre. */
    .ak-entete__logo img { width: 44px; height: 44px; }

    /* ANCRÉ SOUS L'EN-TÊTE, PAS À UNE DISTANCE FIXE DU HAUT.
     * Écrit d'abord `position: fixed; top: 68px`, ce qui ne valait que
     * l'en-tête collé en haut. En haut de page, le bandeau occupe encore ses
     * 44 px : le menu recouvrait alors l'en-tête. */
    .ak-menu {
        position: absolute;
        top: 100%;
        left: 0; right: 0;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
        margin: 0;
        padding: var(--e2) var(--gouttiere) var(--e5);
        background: var(--blanc);
        border-bottom: 1px solid var(--trait);
        box-shadow: var(--ombre-carte);
        /* Fermé par défaut, et vraiment fermé : `display:none` le retire de
           l'ordre de tabulation, ce qu'une simple opacité ne fait pas. */
        display: none;
    }
    /* `.ak-entete` et non `.ak-large` : la case est sœur de l'EN-TÊTE, et
       `.ak-large` vit à l'intérieur. Le sélecteur d'origine ne désignait
       rien — le menu ne s'ouvrait jamais. */
    #ak-menu-ouvert:checked ~ .ak-entete .ak-menu { display: flex; }

    /* LES DEUX PANNEAUX TOMBENT AU MÊME ENDROIT — `top: 100%` de l'en-tête.
       Ouverts ensemble, ils se superposaient. Deux cases indépendantes ne
       peuvent pas se fermer l'une l'autre en CSS ; on tranche donc par
       l'ordre : la recherche, ouverte, masque le menu. Cette règle vient
       APRÈS celle du dessus, à spécificité égale — c'est elle qui gagne. */
    #ak-recherche-ouverte:checked ~ .ak-entete .ak-menu { display: none; }

    .ak-menu a {
        padding-block: var(--e4);
        font-size: 16px;
        border-bottom: 1px solid var(--trait);
    }
    .ak-menu a:last-child { border-bottom: none; }
    .ak-menu a[aria-current="page"]::after { display: none; }
    .ak-menu a[aria-current="page"] { color: var(--orange); }

    .ak-action { width: 40px; height: 40px; }

    /* Le repli de la recherche est déjà posé à 1040 px — ici on n'ajuste que
       ce qui change avec le bouton du menu. */
}

/* ═══════════════════════════════════════════════════════════════════════
   LE BANDEAU DE TITRE DE PAGE
   ═══════════════════════════════════════════════════════════════════════

   Le gris clair de la maquette, le titre au centre, le fil d'Ariane dessous.
   Il sert toutes les pages intérieures — boutique, contact, favoris — et non
   la seule vitrine : une page sur deux qui aurait son propre en-tête ferait
   un site qui change de règle en cours de route.

   Le semis de points de la maquette est dessiné en CSS et non en image : il
   suit la couleur du fond, ne pèse rien, et ne se pixellise pas.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-titre-page {
    position: relative;
    overflow: hidden;
    background: var(--creme);
    padding-block: var(--e9) var(--e8);
    text-align: center;
}

.ak-titre-page h1 {
    font-size: clamp(30px, 4vw, 44px);
    font-weight: 800;
    letter-spacing: -.03em;
}

.ak-fil {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--e2);
    margin-top: var(--e3);
    font-size: 14.5px;
    color: var(--g1);
}
.ak-fil a:hover { color: var(--orange); }
.ak-fil [aria-current] { color: var(--encre); font-weight: 600; }
.ak-fil .sep { color: var(--g3); }

/* Les deux semis de points, à gauche et à droite du titre. `radial-gradient`
   répété : aucun fichier, aucune requête, et la taille suit le zoom. */
.ak-titre-page::before,
.ak-titre-page::after {
    content: '';
    position: absolute;
    top: 50%;
    width: 190px;
    height: 120px;
    transform: translateY(-50%);
    background-image: radial-gradient(var(--g3) 1.6px, transparent 1.6px);
    background-size: 18px 18px;
    opacity: .55;
    pointer-events: none;
}
.ak-titre-page::before { left: -30px; }
.ak-titre-page::after  { right: -30px; }

@media (max-width: 860px) {
    .ak-titre-page { padding-block: var(--e7) var(--e6); }
    /* Les semis disparaissent : à cette largeur ils passent sous le titre et
       le rendent illisible. */
    .ak-titre-page::before,
    .ak-titre-page::after { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   LA VITRINE — colonne de filtres + grille
   ═══════════════════════════════════════════════════════════════════════ */

.ak-vitrine {
    display: grid;
    grid-template-columns: 236px 1fr;
    gap: var(--e8);
    align-items: start;
    padding-block: var(--e8) var(--e9);
}

/* ── LA COLONNE DE FILTRES ──
   Collante : sur une grille de douze produits, elle sortirait de l'écran dès
   la deuxième rangée, et il faudrait remonter pour changer d'avis. */
/* TOUT LE FILTRE TIENT SUR LA PAGE — sa demande du 19/08/2026.
 *
 * La colonne était bornée en hauteur et défilait DANS elle-même. Deux
 * défilements imbriqués : celui de la page et celui de la colonne. Le second
 * ne se voit pas — sa barre est masquée — et il cachait des options. Constaté
 * sur la capture : la liste des rayons s'arrêtait à sept sur neuf, « Tablet
 * Battery » et « Tablet Screen » étaient invisibles, et rien ne le signalait.
 *
 * Elle reste COLLANTE : elle suit la lecture de la grille sans qu'on ait à
 * remonter pour changer d'avis. Quand elle est plus haute que l'écran, elle
 * défile simplement avec la page — on finit toujours par tout voir. */
.ak-filtres {
    position: sticky;
    top: 104px;   /* la hauteur de l'en-tête collé, plus une respiration */
}

.ak-filtres > h2 {
    font-size: 19px;
    font-weight: 700;
    padding-bottom: var(--e4);
    border-bottom: 1px solid var(--trait);
}

.ak-filtre {
    padding-block: var(--e5);
    border-bottom: 1px solid var(--trait);
}
.ak-filtre:last-child { border-bottom: none; }

.ak-filtre > h3 {
    font-size: 15.5px;
    font-weight: 700;
    margin-bottom: var(--e3);
}

/* La liste des cases. Plus de plafond de hauteur : voir `.ak-filtres`.
   Elle est de toute façon COURTE, parce qu'elle est dynamique — les options
   qui ne ramènent rien disparaissent d'elles-mêmes. C'est le filtrage qui
   raccourcit la liste, pas une fenêtre qui la cache. */
.ak-filtre__liste {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

/* CHAQUE CASE EST UN LIEN, pas une case à cocher.
 *
 * C'est ce qui fait tenir la colonne SANS JavaScript : cliquer change
 * l'adresse, le serveur refiltre, et la sélection se partage, se met en
 * favori, se défait avec le bouton Retour. Une vraie case aurait exigé un
 * script pour envoyer le formulaire, et la page serait morte sans lui. */
.ak-case {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: 5px 0;
    font-size: 14.5px;
    color: var(--encre-2);
    transition: color var(--t-vif) var(--e-sortie);
}
.ak-case:hover { color: var(--encre); }

.ak-case__boite {
    flex: none;
    width: 17px; height: 17px;
    border: 1.5px solid var(--g3);
    border-radius: 5px;
    display: grid;
    place-items: center;
    color: transparent;
    transition: background var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie);
}
.ak-case[aria-pressed="true"] .ak-case__boite {
    background: var(--orange);
    border-color: var(--orange);
    color: var(--sur-couleur);
}
.ak-case[aria-pressed="true"] { color: var(--encre); font-weight: 600; }

.ak-case__nombre {
    margin-left: auto;
    font-size: 12.5px;
    color: var(--g2);
    font-variant-numeric: tabular-nums;
}

/* La pastille de couleur devant une marque — le seul rappel visuel possible
   quand on n'a pas de logo à cette taille. */
.ak-case__point {
    flex: none;
    width: 10px; height: 10px;
    border-radius: 99px;
    background: var(--g3);
}

/* ── LE BOUTON ORDINAIRE ──
   Né comme le « Appliquer » du filtre Prix, retiré le 19/08/2026. Il sert
   maintenant les boutons de la grille vide (« Réessayer », « Voir tout le
   catalogue ») et porte donc un nom qui ne renvoie plus à un filtre disparu. */
.ak-bouton {
    display: inline-block;
    height: 44px;
    padding-inline: var(--e6);
    border: none;
    border-radius: var(--r-pastille);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    font-family: inherit;
    font-size: 14.5px;
    font-weight: 600;
    line-height: 44px;
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-bouton:hover { background: var(--orange); }

/* ── L'APPEL À L'ACTION — la famille de boutons de TOUT le site ──
   Elle vit ICI, avec les composants partagés, et non dans la section qui l'a
   vue naître.

   Elle était née dans le bloc du héros ; refaire le héros le 19/08 l'a
   emportée avec lui, et sept pages ont perdu leurs boutons d'un coup — la
   commande, le panier, la connexion, la fiche produit. Aucune erreur, aucun
   journal : un bouton sans règle reste un lien, simplement nu. Un composant
   utilisé partout ne doit jamais dépendre de la section où il est apparu. */
.ak-cta {
    display: inline-flex;
    align-items: center;
    gap: var(--e2);
    /* 48 et non 54 : à sa demande, le bouton était trop grand — il pesait
       plus lourd que le titre au lieu de le suivre. */
    height: 48px;
    padding-inline: var(--e5);
    border: none;
    border-radius: var(--r-pastille);
    font-family: inherit;
    font-size: 15px;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
/* L'OMBRE DU BOUTON, comme celle de la photo — sa demande.
   Teintée d'orange, pas grise : une ombre neutre sous un aplat saturé
   paraît sale. Elle est basse et large, donc lue comme de la lumière,
   pas comme un contour. */
.ak-cta--plein {
    background: var(--orange);
    color: var(--sur-couleur);
    box-shadow: 0 10px 22px -14px rgba(248,80,0,.7);
}
.ak-cta--plein:hover {
    background: var(--orange-fonce);
    box-shadow: 0 16px 30px -14px rgba(248,80,0,.78);
    transform: translateY(-1px);
}

/* Le second bouton est CREUX, jamais d'une seconde couleur pleine : deux
   aplats côte à côte se disputent le clic, et on ne sait plus lequel est
   l'action principale. */
.ak-cta--creux {
    background: transparent;
    color: var(--encre);
    border: 1.5px solid var(--trait-fort);
}
.ak-cta--creux:hover { border-color: var(--encre); background: var(--blanc); }

/* Pleine largeur — le bouton qui termine une colonne : « Commander »,
   « Recevoir le code », « Valider ma commande ». */
.ak-cta--large {
    display: flex;
    width: 100%;
    justify-content: center;
    margin-top: var(--e5);
}

/* ── LA BARRE D'OUTILS ── */
.ak-outils {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e5);
    flex-wrap: wrap;
    margin-bottom: var(--e5);
}
.ak-outils__compte { font-size: 14.5px; color: var(--g1); }
.ak-outils__compte strong { color: var(--encre); font-weight: 600; }

.ak-tri {
    display: flex;
    align-items: center;
    gap: var(--e3);
    font-size: 14.5px;
    color: var(--g1);
}
.ak-tri select {
    height: 44px;
    padding-inline: var(--e4) var(--e7);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-pastille);
    background: var(--blanc);
    font-family: inherit;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--encre);
    cursor: pointer;
    outline: none;
    /* Le chevron du système varie d'un navigateur à l'autre : on le dessine. */
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231A1512' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right var(--e4) center;
}
.ak-tri select:focus { border-color: var(--g3); }

/* ── LES FILTRES ACTIFS ──
   Des pastilles orange, comme la maquette. Chacune est un lien qui RETIRE son
   filtre : c'est le seul endroit où l'on voit d'un coup ce qui restreint la
   liste, et le seul où l'on peut le défaire sans chercher dans la colonne. */
.ak-actifs {
    display: flex;
    align-items: center;
    gap: var(--e2);
    flex-wrap: wrap;
    margin-bottom: var(--e5);
}
.ak-actifs__titre {
    font-size: 14px;
    font-weight: 600;
    color: var(--g1);
    margin-right: var(--e2);
}
.ak-actif {
    display: inline-flex;
    align-items: center;
    gap: var(--e2);
    height: 32px;
    padding-inline: var(--e4) var(--e3);
    background: var(--orange);
    color: var(--sur-couleur);
    border-radius: var(--r-pastille);
    font-size: 13px;
    font-weight: 600;
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-actif:hover { background: var(--orange-fonce); }
.ak-actif svg { opacity: .85; }

.ak-actifs__vider {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--encre);
    text-decoration: underline;
    text-underline-offset: 3px;
}
.ak-actifs__vider:hover { color: var(--orange); }

/* ═══════════════════════════════════════════════════════════════════════
   LA GRILLE DE PRODUITS
   ═══════════════════════════════════════════════════════════════════════

   Trois colonnes, comme la maquette. `auto-fill` avec un minimum plutôt
   qu'un nombre figé : la grille se réorganise seule aux largeurs
   intermédiaires, sans qu'on ait à poser un palier par taille d'écran.
   ═══════════════════════════════════════════════════════════════════════ */

/* LE NOMBRE DE COLONNES EST DÉCIDÉ, PAS SUBI — sa demande du 19/08/2026 :
   quatre sur ordinateur, trois sur tablette, deux sur téléphone.

   `repeat(N, …)` et non `auto-fill` : ce dernier fabriquait le nombre de
   colonnes qui tenait dans la largeur — quatre ici, trois là — sans qu'on
   l'ait choisi, et la composition changeait d'un écran à l'autre sans
   raison. Douze articles par page divisent proprement par 4, 3 et 2 : aucune
   rangée incomplète, quelle que soit la taille de l'écran. */
.ak-grille {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e5);
}

/* Tablette — trois. Le palier est à 1 100 px et non à 980 : entre les deux,
   la colonne de filtres est encore là, et quatre cartes dans l'espace qui
   reste tomberaient sous 200 px de large. */
@media (max-width: 1100px) {
    .ak-grille { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.ak-produit { position: relative; }

/* Le cadre de l'image : gris clair, très arrondi, CARRÉ. Le carré n'est pas
   un choix esthétique — les photos du catalogue font toutes 1024 × 1024, et
   un cadre d'un autre rapport les rognerait ou les tasserait. */
/* LE CADRE NE PORTE NI FOND NI MARGE — sa remarque du 19/08/2026 :
   « les images produits ont déjà des fonds ».
   C'est juste, et vérifiable : les 381 photos du catalogue sont des prises de
   vue sur fond blanc, normalisées en 1024 × 1024. Poser un aplat gris derrière
   et une marge autour ajoutait un second cadre à l'intérieur du premier —
   l'image paraissait plus petite qu'elle n'est, et flottait au milieu. */
.ak-produit__cadre {
    position: relative;
    aspect-ratio: 1;
    border-radius: var(--r-carte);
    overflow: hidden;
    display: grid;
    place-items: center;
}
.ak-produit__cadre img {
    width: 100%;
    height: 100%;
    /* `cover` : la photo remplit le carré. Elle est déjà carrée à la source,
       donc rien n'est rogné — `contain` laisserait des bandes le jour où une
       photo échapperait à la normalisation. */
    object-fit: cover;
    transition: transform var(--t-ample) var(--e-sortie);
}

/* Le fond ne sert plus qu'au repli sans photo, qui, lui, a besoin d'une
   surface pour se voir. */
.ak-produit__sans-image { background: var(--creme); width: 100%; height: 100%; }
.ak-produit:hover .ak-produit__cadre img { transform: scale(1.05); }

/* Le repli quand un produit n'a pas de photo. Il ne devrait pas arriver — la
   vitrine exige une image — mais un fichier peut manquer sur le CDN, et un
   cadre vide se lit comme une page cassée. */
.ak-produit__sans-image {
    color: var(--g3);
    display: grid;
    place-items: center;
    gap: var(--e2);
    font-size: 12.5px;
}

/* ── LA PASTILLE DE QUALITÉ ──
   La maquette met ici « 50% off ». Le catalogue n'a AUCUNE remise renseignée
   — un seul produit porte un `compare_at_price`, et il n'est même pas
   supérieur au prix. Afficher une réduction inventée sur un produit réel est
   exactement ce que ce site s'interdit.
   La place tient donc la QUALITÉ, qui est renseignée sur les 381 articles et
   qui est la première question qu'on pose au comptoir : origine ou copie. */
.ak-produit__qualite {
    position: absolute;
    top: var(--e3);
    left: var(--e3);
    z-index: 2;
    padding: 5px var(--e3);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    border-radius: var(--r-pastille);
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .01em;
}
/* TOUTES LES PASTILLES SONT SOMBRES.
 *
 * L'origine était en vert, pour la distinguer. Vu sur la capture : la page
 * portait alors trois couleurs — l'orange de la marque, l'encre, et ce vert —
 * et le vert n'appartenait à rien. La maquette n'en a qu'une, sombre, sur
 * toutes les cartes. La qualité est une INFORMATION, pas une emphase. */

/* ── LES ACTIONS AU SURVOL ──
   Trois boutons ronds blancs, comme la maquette. Ils apparaissent au survol
   en grand écran ; au toucher, ils restent VISIBLES — il n'y a pas de survol
   sur un téléphone, et des commandes qui n'apparaissent jamais n'existent
   pas. */
.ak-produit__actions {
    position: absolute;
    top: var(--e3);
    right: var(--e3);
    z-index: 2;
    display: flex;
    flex-direction: column;
    gap: var(--e2);
    opacity: 0;
    transform: translateX(6px);
    transition: opacity var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-produit:hover .ak-produit__actions,
.ak-produit:focus-within .ak-produit__actions {
    opacity: 1;
    transform: none;
}
@media (hover: none) {
    .ak-produit__actions { opacity: 1; transform: none; }
}

.ak-produit__action {
    width: 34px; height: 34px;
    display: grid;
    place-items: center;
    background: var(--blanc);
    color: var(--encre);
    border: none;
    border-radius: var(--r-pastille);
    box-shadow: 0 2px 8px rgba(26,21,18,.14);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-produit__action:hover { background: var(--orange); color: var(--sur-couleur); }

/* ── LE TEXTE DE LA CARTE ── */
.ak-produit__info { padding-top: var(--e3); }

.ak-produit__ligne1 {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e3);
    font-size: 12.5px;
    color: var(--g1);
}

/* La maquette met ici « ★ 4.9 ». AK n'a AUCUN avis saisi — en afficher un
   serait mentir sur un produit réel, et l'application avait déjà retiré les
   notes pour cette raison. La place tient le nombre de ventes, qui se
   compte. */
.ak-produit__vendus {
    display: flex;
    align-items: center;
    gap: 4px;
    color: var(--g1);
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.ak-produit__nom {
    display: block;
    margin-top: 3px;
    font-size: 15.5px;
    font-weight: 700;
    line-height: 1.3;
    color: var(--encre);
    /* DEUX LIGNES, TOUJOURS — pas « deux au plus ».
     *
     * Le plafond seul ne suffisait pas : un nom d'une ligne laissait son prix
     * remonter, et dans une rangée de quatre, deux prix étaient hauts et deux
     * bas. Vu sur la capture. La hauteur est donc RÉSERVÉE, occupée ou non,
     * et toute la rangée s'aligne. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    min-height: calc(2 * 1.3em);
}
.ak-produit:hover .ak-produit__nom { color: var(--orange); }

.ak-produit__ligne-prix {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e3);
    margin-top: var(--e2);
}

.ak-produit__prix {
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.02em;
    font-variant-numeric: tabular-nums;
}

.ak-produit__dispo {
    font-size: 12.5px;
    color: var(--g1);
    white-space: nowrap;
}
.ak-produit__dispo--stock { color: var(--vert); font-weight: 600; }

/* ── LA GRILLE VIDE ── */
.ak-vide {
    padding: var(--e9) var(--e5);
    text-align: center;
    border: 1.5px dashed var(--trait);
    border-radius: var(--r-carte);
}
.ak-vide h3 { font-size: 19px; margin-bottom: var(--e2); }
.ak-vide p { color: var(--g1); margin-bottom: var(--e4); }

/* ── LA PAGINATION ──
   Ronde, la page courante en orange plein — la maquette la met en ambre, ce
   qui est notre accent. Les flèches restent en place quand elles sont
   inactives plutôt que de disparaître : une barre qui change de largeur
   d'une page à l'autre fait sauter le bas de page. */
.ak-pages {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--e2);
    margin-top: var(--e8);
}
.ak-pages a, .ak-pages span {
    min-width: 40px; height: 40px;
    padding-inline: var(--e2);
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    font-size: 14.5px;
    font-weight: 600;
    color: var(--encre-2);
    font-variant-numeric: tabular-nums;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-pages a:hover { background: var(--creme); color: var(--encre); }
.ak-pages [aria-current="page"] { background: var(--orange); color: var(--sur-couleur); }
.ak-pages .inactif { color: var(--g3); cursor: default; }
.ak-pages .points { color: var(--g2); }

/* ═══════════════════════════════════════════════════════════════════════
   LES TROIS GARANTIES
   ═══════════════════════════════════════════════════════════════════════
   Le bandeau de la maquette, sous la grille. Les textes disent ce qui est
   vrai chez AK — pas « livraison offerte dès 180 $ », qui n'existe pas.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-garanties {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: var(--e6);
    padding-block: var(--e7);
    border-top: 1px solid var(--trait);
}
.ak-garantie {
    display: flex;
    align-items: center;
    gap: var(--e4);
}
.ak-garantie__ico {
    flex: none;
    width: 52px; height: 52px;
    display: grid;
    place-items: center;
    background: var(--orange-doux);
    color: var(--orange);
    border-radius: var(--r-champ);
}
.ak-garantie h3 { font-size: 16px; font-weight: 700; }
.ak-garantie p { font-size: 13.5px; color: var(--g1); margin-top: 2px; }

/* ── LA VITRINE AU TÉLÉPHONE ──
   La colonne de filtres passe DERRIÈRE UN BOUTON. L'empiler au-dessus de la
   grille aurait mis cinq écrans de cases avant le premier produit — c'est
   ainsi qu'on fait fuir un visiteur venu voir des articles. */
.ak-filtres__bouton { display: none; }

/* LA CASE QUI PILOTE LES FILTRES — escamotée À TOUTES LES LARGEURS.
 *
 * Elle n'était cachée que dans le bloc téléphone : en grand écran, une petite
 * case à cocher flottait au-dessus de la grille, sans étiquette et sans effet.
 * Vu sur la capture — c'est le genre de défaut qu'on ne trouve qu'en
 * REGARDANT la page. */
#ak-filtres-ouverts {
    position: absolute;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
}

@media (max-width: 980px) {
    .ak-vitrine { grid-template-columns: 1fr; gap: var(--e5); }

    .ak-filtres__bouton {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: var(--e2);
        width: 100%;
        height: 46px;
        border: 1.5px solid var(--trait);
        border-radius: var(--r-pastille);
        background: var(--blanc);
        font-family: inherit;
        font-size: 15px;
        font-weight: 600;
        color: var(--encre);
        cursor: pointer;
    }

    .ak-filtres {
        position: static;
        max-height: none;
        overflow: visible;
        display: none;
        padding: var(--e5);
        border: 1px solid var(--trait);
        border-radius: var(--r-carte);
    }
    #ak-filtres-ouverts:checked ~ .ak-vitrine .ak-filtres { display: block; }

}

@media (max-width: 560px) {
    /* Téléphone — deux. Une seule colonne donnerait des cartes énormes et
       six écrans de défilement pour douze articles. */
    .ak-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--e4); }

    /* LES TROIS BOUTONS FLOTTANTS DISPARAISSENT SUR TÉLÉPHONE.
     *
     * Ils n'apparaissent au survol qu'en grand écran ; faute de survol, la
     * règle `@media (hover: none)` les laissait visibles en permanence — et
     * sur une carte deux fois plus petite, ils recouvraient un tiers de la
     * photo. Vu sur la capture.
     *
     * On ne perd rien : toucher la carte ouvre la fiche, où ces trois actions
     * sont présentes en grand et sans ambiguïté. Trois cibles de 34 px
     * empilées dans un coin n'étaient de toute façon pas praticables au
     * pouce. */
    .ak-produit__actions { display: none; }
    .ak-produit__nom { font-size: 14px; }
    .ak-produit__prix { font-size: 15.5px; }
    .ak-outils { gap: var(--e3); }
    .ak-tri { width: 100%; }
    .ak-tri select { flex: 1; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 15 · LE PIED DE PAGE
   ═══════════════════════════════════════════════════════════════════════

   Repris le 19/08/2026 : « un peu vilain, améliore ça ».

   Le défaut n'était pas la mise en page — les colonnes étaient alignées — mais
   la HIÉRARCHIE. Les titres de colonnes étaient blancs, gras, à 16 px : au
   même poids visuel que les liens qu'ils coiffent, et presque au même que le
   nom de la maison. L'œil ne trouvait donc aucune structure, et l'ensemble se
   lisait comme une liste de mots posés en grille.

   Trois corrections, et rien d'autre :
     · les titres passent en PETITES CAPITALES grises, espacées — ils
       nomment sans réclamer d'attention, comme dans la référence ;
     · les liens se resserrent — trente-cinq pixels entre deux entrées d'une
       même colonne les faisaient paraître sans rapport ;
     · un filet sépare le corps de la barre basse, qui arrivait sans
       transition.
   ═══════════════════════════════════════════════════════════════════════ */

/* LE PIED ÉTAIT TROP NOIR — 19/08/2026, son constat.
 *
 * Il portait `--encre` (#1A1512), la couleur du TEXTE. Une encre est faite
 * pour être lue à côté d'un fond, pas pour couvrir un cinquième de la page :
 * à cette surface, elle se lit comme un trou noir en bas du site.
 *
 * Un brun chaud plus clair, éclairci d'un cran, garde la même famille sans
 * la lourdeur. Le texte remonte d'autant : sur un fond moins profond, un
 * gris à 66 % passait pour délavé. */
/* ═══════════════════════════════════════════════════════════════════════
   LE PIED DE PAGE, EN CLAIR — 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Il était #2A2320, un bloc sombre de six cents pixels qui refermait la
   page comme une porte. En clair, il la termine au lieu de la couper : le
   crème descend du corps, un filet marque la séparation, et l'orange ne
   sert plus qu'aux survols et à la marque.

   ── CE QUI CHANGE VRAIMENT ──

   Pas seulement le fond. Sur sombre, la hiérarchie se fait par l'OPACITÉ du
   blanc — 88 %, 74 %, 50 %. En clair, l'opacité ternit sans structurer : ce
   sont donc des teintes nommées (encre, g1, g2) qui reprennent le travail.
   Traduire un thème sombre en baissant simplement la luminosité donne
   toujours une page grise et molle.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-pied {
    background: var(--creme);
    border-top: 1px solid var(--trait);
    color: var(--g1);
    font-size: 14.5px;
}

.ak-pied__corps {
    display: grid;
    grid-template-columns: 1.5fr repeat(4, 1fr);
    gap: var(--e5) var(--e6);
    padding-block: var(--e8) var(--e7);
}

/* ── La marque ── */
/* 88 et non 56 : sur un pied clair, la marque doit tenir la colonne de
   gauche autant que les titres tiennent les leurs. Le fichier fait 192 px,
   elle reste nette même sur écran dense. */
.ak-pied__marque img { width: 88px; height: 88px; }
.ak-pied__marque p {
    margin-top: var(--e4);
    max-width: 32ch;
    font-size: 14px;
    line-height: 1.65;
    color: var(--g1);
}

.ak-pied__reseaux {
    display: flex;
    gap: var(--e2);
    margin-top: var(--e5);
}
/* Sur fond clair, la pastille pleine devenait une tache. Un contour d'un
   point suffit à poser l'icône, et c'est le remplissage orange qui marque
   le survol — le geste est le même, la matière est inversée. */
.ak-pied__reseaux a {
    width: 40px; height: 40px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    background: var(--blanc);
    border: 1px solid var(--trait);
    color: var(--encre);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-pied__reseaux a:hover {
    background: var(--orange);
    border-color: var(--orange);
    color: var(--sur-couleur);
    transform: translateY(-2px);
}

/* ── LES TITRES DE COLONNE ──
   Petites capitales, espacées, en gris moyen. C'est ce qui fait la
   différence entre « aligné » et « composé » : un titre qui crie aussi fort
   que ses liens ne les coiffe pas, il s'y ajoute. */
.ak-pied h3 {
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--g2);
    margin-bottom: var(--e4);
}

.ak-pied__liens { display: flex; flex-direction: column; gap: 10px; }
.ak-pied__liens a {
    font-size: 14.5px;
    color: var(--encre);
    transition: color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-pied__liens a { display: inline-block; }
.ak-pied__liens a:hover { color: var(--orange); transform: translateX(3px); }

/* ── La colonne de contact ──
   Les icônes sont plus petites et plus éteintes que le texte : elles
   REPÈRENT la ligne, elles ne la commentent pas. */
.ak-pied__contact { display: flex; flex-direction: column; gap: var(--e3); }
.ak-pied__contact li {
    display: flex;
    gap: 10px;
    line-height: 1.5;
    font-size: 14px;
    color: var(--encre-2);
}
.ak-pied__contact svg { flex: none; margin-top: 3px; color: var(--g2); }
.ak-pied__contact a:hover { color: var(--orange); }

/* ── LA BARRE DE BAS DE PAGE ──
   Elle était orange plein. Sous un pied clair, cette bande devenait la
   chose la plus voyante de la page — et la dernière chose qu'on voit n'est
   pas celle qui mérite le plus d'attention. Elle passe en blanc, séparée
   par un filet, et l'orange se réserve au lien. */
.ak-pied__bas {
    background: var(--blanc);
    color: var(--g1);
    border-top: 1px solid var(--trait);
}
.ak-pied__bas > .ak-large {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e4);
    flex-wrap: wrap;
    min-height: 54px;
    font-size: 13.5px;
    font-weight: 500;
}
.ak-pied__bas strong { color: var(--encre); font-weight: 700; }
.ak-pied__bas a { color: var(--orange); text-decoration: underline; text-underline-offset: 3px; }

@media (max-width: 1060px) {
    .ak-pied__corps { grid-template-columns: repeat(2, 1fr); gap: var(--e6) var(--e5); }
    .ak-pied__marque { grid-column: 1 / -1; }
    .ak-pied__marque p { max-width: 52ch; }
}
@media (max-width: 560px) {
    .ak-pied__corps { grid-template-columns: 1fr; }
    .ak-pied__bas > .ak-large { justify-content: center; text-align: center; }
}

/* ═══════════════════════════════════════════════════════════════════════
   LE MENU DÉROULANT DES CATÉGORIES — 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   « Astuces » cède sa place à « Catégories », qui ouvre au survol sur les
   trois grandes familles et leur contenu.

   ── SANS JAVASCRIPT, ET ATTEIGNABLE AU CLAVIER ──

   `:hover` ouvre le panneau ; `:focus-within` fait la même chose quand on
   arrive par la touche Tab. Sans cette seconde règle, l'entrée serait
   inatteignable autrement qu'à la souris — un menu de navigation, c'est
   précisément ce qu'on ne peut pas se permettre d'y laisser.

   ── LE DÉLAI DE FERMETURE ──

   Le panneau est collé à son déclencheur, sans espace entre les deux : un
   interstice d'un seul pixel referme le menu pendant qu'on descend vers lui,
   et c'est le défaut le plus rageant des menus au survol.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-menu__deroulant { position: relative; }

.ak-menu__declencheur {
    display: flex;
    align-items: center;
    gap: 5px;
}
.ak-menu__chevron { transition: transform var(--t-vif) var(--e-sortie); }
.ak-menu__deroulant:hover .ak-menu__chevron,
.ak-menu__deroulant:focus-within .ak-menu__chevron { transform: rotate(180deg); }

.ak-panneau {
    position: absolute;
    /* Collé au déclencheur : la zone de survol est continue, le menu ne se
       referme pas pendant qu'on descend vers lui. */
    top: 100%;
    left: 50%;
    transform: translateX(-50%) translateY(6px);
    z-index: 200;
    min-width: 620px;
    padding: var(--e5);
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    box-shadow: 0 4px 12px rgba(26,21,18,.06), 0 24px 48px -20px rgba(26,21,18,.28);

    opacity: 0;
    visibility: hidden;
    transition: opacity var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie), visibility var(--t-vif) var(--e-sortie);
}
.ak-menu__deroulant:hover .ak-panneau,
.ak-menu__deroulant:focus-within .ak-panneau {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
}

.ak-panneau__grille {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--e5);
}

/* ── La tête d'une famille : son icône, son nom, son compte ── */
.ak-famille__tete {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: var(--e3);
    margin: calc(var(--e3) * -1);
    margin-bottom: var(--e2);
    border-radius: var(--r-champ);
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-famille__tete:hover { background: var(--creme); }

.ak-famille__ico {
    flex: none;
    width: 42px; height: 42px;
    display: grid;
    place-items: center;
    background: var(--orange-doux);
    color: var(--orange);
    border-radius: var(--r-champ);
}
.ak-famille__tete strong {
    display: block;
    font-size: 15px;
    font-weight: 700;
    color: var(--encre);
}
.ak-famille__tete small {
    display: block;
    font-size: 12.5px;
    color: var(--g2);
}

/* ── Les sous-catégories ── */
.ak-famille__liste {
    display: flex;
    flex-direction: column;
    padding-top: var(--e2);
}
.ak-famille__liste a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e3);
    padding: 6px var(--e3);
    border-radius: 8px;
    font-size: 14px;
    color: var(--encre-2);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-famille__liste a:hover { background: var(--creme); color: var(--orange); }
.ak-famille__liste span {
    font-size: 12px;
    color: var(--g2);
    font-variant-numeric: tabular-nums;
}

.ak-panneau__tout {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--e2);
    margin-top: var(--e5);
    padding-top: var(--e4);
    border-top: 1px solid var(--trait);
    font-size: 14px;
    font-weight: 600;
    color: var(--orange);
}
.ak-panneau__tout:hover { color: var(--orange-fonce); }

/* ── AU TÉLÉPHONE ──
   Le survol n'existe pas : le panneau se déplie à la suite du menu, sans
   position absolue ni ombre. Il redevient une simple liste. */
@media (max-width: 940px) {
    .ak-menu__deroulant { width: 100%; }
    .ak-menu__declencheur {
        justify-content: space-between;
        padding-block: var(--e4);
        border-bottom: 1px solid var(--trait);
    }
    .ak-panneau {
        position: static;
        transform: none;
        opacity: 1;
        visibility: visible;
        min-width: 0;
        padding: var(--e4) 0;
        border: none;
        box-shadow: none;
    }
    .ak-panneau__grille { grid-template-columns: 1fr; gap: var(--e4); }
    .ak-menu__chevron { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 3 · LE HÉROS — refait le 19/08/2026 d'après sa maquette
   ═══════════════════════════════════════════════════════════════════════

   Sa demande : le discours à gauche — étiquette, grand titre, deux lignes,
   deux appels à l'action, les avis — et à droite la photo d'un réparateur.

   ── CE QUI FAIT LE « WAOU » À DROITE ──

   Pas un effet : une CONSTRUCTION. La photo est posée dans un cadre portrait
   très arrondi, avec un aplat orange glissé derrière et un halo dessous. Par
   dessus flottent deux cartouches de verre qui portent des faits VÉRIFIABLES,
   tirés de la base — le nombre de pièces en vitrine, le diagnostic gratuit.

   C'est ce qui distingue un héros d'une simple image : le regard trouve la
   photo, puis deux informations, et sait où cliquer. Une photo seule, aussi
   belle soit-elle, ne dit rien de la maison.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-heros {
    position: relative;
    overflow: hidden;
    background: var(--creme);
}

/* Le semis de points, en haut à droite. Dessiné en CSS : aucun fichier, il
   suit le zoom et ne se pixellise pas. */
.ak-heros::before {
    content: '';
    position: absolute;
    top: -20px; right: -40px;
    width: 320px; height: 200px;
    background-image: radial-gradient(var(--g3) 1.6px, transparent 1.6px);
    background-size: 20px 20px;
    opacity: .5;
    pointer-events: none;
}

.ak-heros > .ak-large {
    position: relative;
    display: grid;
    /* `minmax(0, 1fr)` et non `1fr` : une piste de grille prend par défaut la
       largeur MINIMALE de son contenu, si bien qu'un élément indéformable
       (ici la rangée de logos) élargit toute la colonne. */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: var(--e8);
    align-items: center;
    padding-block: var(--e8);
}

/* ── L'ÉTIQUETTE ── */
.ak-heros__oeil {
    display: inline-flex;
    align-items: center;
    gap: var(--e3);
    padding: 7px var(--e5) 7px 7px;
    background: var(--blanc);
    border-radius: var(--r-pastille);
    font-size: 14.5px;
    font-weight: 600;
    letter-spacing: -.01em;
    color: var(--encre);
    /* Une ombre FINE, et un liseré d'un demi-point : c'est le liseré qui
       détache la pastille du crème, pas l'ombre. Une ombre épaisse à sa
       place aurait fait une tache grise. */
    border: 1px solid rgba(26,21,18,.04);
    box-shadow: 0 1px 1px rgba(26,21,18,.04), 0 10px 22px -16px rgba(26,21,18,.28);
}
.ak-heros__oeil span {
    display: grid;
    place-items: center;
    width: 32px; height: 32px;
    border-radius: var(--r-pastille);
    background: var(--orange-doux);
    color: var(--orange);
}

/* ── LE TITRE ──
   Deux teintes, comme la maquette : l'encre pose la phrase, l'orange
   souligne ce qu'on vend. Un titre d'une seule couleur à cette taille
   devient un mur. */
.ak-heros h1 {
    margin-top: var(--e5);
    font-size: clamp(36px, 4.6vw, 63px);
    font-weight: 800;
    /* Un cran plus serré, et l'interligne descendu sous 1 : à cette taille,
       l'espace ENTRE les lignes se voit plus que les lettres elles-mêmes.
       C'est ce resserrement qui distingue un titre composé d'un titre posé. */
    letter-spacing: -.048em;
    line-height: .99;
    text-wrap: balance;
}
.ak-heros h1 em { font-style: normal; color: var(--orange); }

.ak-heros__texte {
    margin-top: var(--e4);
    /* 46 signes par ligne : en dessous, l'œil saute trop souvent ; au-delà,
       il perd le début de la ligne suivante. */
    max-width: 46ch;
    font-size: 16.5px;
    line-height: 1.62;
    color: var(--g1);
}

/* ── LES DEUX APPELS À L'ACTION ──
   Un plein, un souligné — la hiérarchie de la maquette. Deux boutons pleins
   côte à côte se disputent le clic et on ne sait plus lequel est l'action
   principale. */
.ak-heros__boutons {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--e5);
    margin-top: var(--e6);
}
.ak-lien-fort {
    font-size: 15.5px;
    font-weight: 700;
    color: var(--encre);
    text-decoration: underline;
    text-underline-offset: 5px;
    text-decoration-thickness: 1.5px;
    transition: color var(--t-vif) var(--e-sortie);
}
.ak-lien-fort:hover { color: var(--orange); }

/* ── LA LIGNE D'AVIS, sous les appels à l'action ──
   Sa maquette : des portraits ronds qui se chevauchent, une pastille « + »,
   puis la note en gras et le nombre de clients dessous.

   Le chevauchement se lit ici, alors qu'il avait été abandonné pour les
   logos de marques : un VISAGE à demi couvert se reconnaît encore, un mot
   comme « SAMSUNG » perd sa dernière lettre. Même geste, deux contenus, deux
   réponses. */
.ak-preuve {
    display: flex;
    align-items: center;
    gap: var(--e4);
    margin-top: var(--e7);
}
.ak-preuve__gens { display: flex; }
.ak-preuve__gens > * {
    width: 48px; height: 48px;
    border-radius: var(--r-pastille);
    border: 3px solid var(--blanc);
    object-fit: cover;
    background: var(--trait);
}
.ak-preuve__gens > * + * { margin-left: -15px; }
/* La pastille neutre, tant qu'aucun portrait n'est fourni. */
.ak-preuve__gens-vide {
    display: grid;
    place-items: center;
    color: var(--g2);
}
.ak-preuve__plus {
    display: grid;
    place-items: center;
    background: var(--orange) !important;
    color: var(--sur-couleur);
    font-size: 20px;
    font-weight: 700;
    line-height: 1;
}
.ak-preuve__mot strong {
    display: block;
    font-size: 20px;
    font-weight: 800;
    letter-spacing: -.03em;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}
.ak-preuve__mot small { display: block; font-size: 14px; color: var(--g1); }

/* ── LA COLONNE DE DROITE ── */
.ak-scene {
    position: relative;
    /* Bridé, et mesuré sur la capture : sans cette limite le cadre 4/5
       atteignait 790 px de haut et le héros dépassait l'écran.

       `width: 100%` n'est PAS décoratif. Le cadre ne contient qu'un enfant
       positionné en absolu : sa largeur intrinsèque vaut donc zéro. Et une
       marge automatique sur un élément de grille annule l'étirement — la
       colonne s'effondrait à 0 px de large, photo comprise, sans rien dans
       la console. Vu à l'écran, jamais dans un journal. */
    width: 100%;
    max-width: 460px;
    margin-inline: auto;
}

/* L'aplat glissé derrière la photo, et le halo sous l'ensemble. Sans eux,
   une photo posée sur du crème paraît découpée et collée. */
.ak-scene::before {
    content: '';
    position: absolute;
    inset: 26px -26px -26px 26px;
    /* UN CADRE, PLUS UN APLAT. Le rose plein derrière la photo se lisait
       comme une ombre teintée, un peu sale sur le crème. Un trait fin décalé
       fait le même travail — dire que la photo est POSÉE sur quelque chose —
       avec le dixième de la matière. Le voile de couleur reste, mais très
       en dessous du seuil de tache. */
    background: rgba(248,80,0,.045);
    border: 1.5px solid rgba(248,80,0,.28);
    border-radius: 34px;
}
.ak-scene::after {
    content: '';
    position: absolute;
    inset: -6% -12% -12% -6%;
    z-index: -1;
    background: radial-gradient(55% 50% at 50% 55%, rgba(248,80,0,.16), transparent 72%);
}

.ak-scene__photo {
    position: relative;
    aspect-ratio: 4 / 5;
    border-radius: 32px;
    overflow: hidden;
    /* Le repli tant qu'aucune photo n'est déposée — un dégradé de marque
       plutôt qu'un rectangle vide, pour que le panneau reste habité. */
    background:
        radial-gradient(110% 80% at 25% 12%, rgba(248,80,0,.3), transparent 62%),
        linear-gradient(160deg, #241C18 0%, var(--fond-sombre) 65%);
    /* Basse et très diffuse : la photo doit paraître POSÉE, pas décollée. */
    /* Le liseré intérieur d'un point : sur un fond clair, un bord de photo
       sans arête paraît flou. Il ne se voit pas, il se sent. */
    box-shadow: 0 26px 56px -38px rgba(26,21,18,.55),
                inset 0 0 0 1px rgba(26,21,18,.08);
}
.ak-scene__photo picture { display: contents; }
.ak-scene__photo img { width: 100%; height: 100%; object-fit: cover; }

.ak-scene__marque {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
}
.ak-scene__marque img { width: 110px; height: 110px; object-fit: contain; opacity: .92; }

/* ── LES CARTOUCHES FLOTTANTES ──
   Elles portent des faits COMPTÉS, pas des slogans. C'est ce qui les rend
   légitimes : une pastille « Qualité garantie » posée sur une photo n'est
   qu'un autocollant ; « 380 pièces en stock » se vérifie. */
.ak-flottant {
    position: absolute;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: var(--e3) var(--e4);
    background: var(--verre);
    backdrop-filter: blur(12px);
    border: 1px solid var(--trait);
    border-radius: var(--r-champ);
    box-shadow: 0 2px 4px rgba(26,21,18,.04), 0 14px 32px -20px rgba(26,21,18,.4);
    transition: transform var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie);
}
.ak-flottant__ico {
    flex: none;
    display: grid;
    place-items: center;
    width: 38px; height: 38px;
    border-radius: var(--r-pastille);
    background: var(--orange-doux);
    color: var(--orange);
}
.ak-flottant strong {
    display: block;
    font-size: 15px;
    font-weight: 800;
    letter-spacing: -.02em;
    color: var(--encre);
    line-height: 1.2;
    font-variant-numeric: tabular-nums;
}
.ak-flottant small { display: block; font-size: 12.5px; color: var(--g1); }

.ak-flottant--haut  { top: 9%;  left: -7%; }
.ak-flottant--bas   { bottom: 11%; right: -5%; }

/* ── L'ARRIVÉE ──
   Chaque élément monte de quatorze pixels en apparaissant, l'un après
   l'autre. Quatorze, pas quarante : un mouvement qu'on remarque est un
   mouvement raté. Le décalage suit l'ordre de lecture — étiquette, titre,
   phrase, boutons, preuve — de sorte que l'animation raconte le même
   parcours que la mise en page.

   `both` retient l'état de départ : sans lui, tout s'affiche une fraction
   de seconde avant de sauter à sa place. */
@keyframes ak-monte {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: none; }
}

.ak-heros__oeil,
.ak-heros h1,
.ak-heros__texte,
.ak-heros__boutons,
.ak-preuve,
.ak-scene,
.ak-flottant {
    animation: ak-monte .62s var(--e-sortie) both;
}
.ak-heros h1        { animation-delay: .06s; }
.ak-heros__texte    { animation-delay: .12s; }
.ak-heros__boutons  { animation-delay: .18s; }
.ak-preuve          { animation-delay: .24s; }
.ak-scene           { animation-delay: .08s; }
.ak-flottant--haut  { animation-delay: .36s; }
.ak-flottant--bas   { animation-delay: .44s; }

/* Qui a demandé moins de mouvement n'en reçoit aucun — et surtout garde la
   page entière visible : `both` sans animation laisserait tout à zéro. */
@media (prefers-reduced-motion: reduce) {
    .ak-heros__oeil, .ak-heros h1, .ak-heros__texte, .ak-heros__boutons,
    .ak-preuve, .ak-scene, .ak-flottant { animation: none; }
}

/* ── LES SURVOLS ──
   Trois gestes, tous sous les quatre pixels. Le cadre respire, les
   cartouches se soulèvent, un logo se lève quand on le vise. */
.ak-scene__photo img { transition: transform var(--t-lent) var(--e-sortie); }
.ak-scene:hover .ak-scene__photo img { transform: scale(1.035); }
.ak-scene:hover .ak-flottant--haut { transform: translateY(-3px); }
.ak-scene:hover .ak-flottant--bas  { transform: translateY(3px); }

/* Le lien souligné : le trait s'écarte du mot au survol au lieu de changer
   de couleur seulement. */
.ak-lien-fort { text-decoration-color: var(--trait-fort); transition: color var(--t-vif) var(--e-sortie), text-underline-offset var(--t-vif) var(--e-sortie), text-decoration-color var(--t-vif) var(--e-sortie); }
.ak-lien-fort:hover { text-underline-offset: 7px; text-decoration-color: var(--orange); }

@media (max-width: 1040px) {
    .ak-heros > .ak-large {
        grid-template-columns: 1fr;
        gap: var(--e7);
        padding-block: var(--e7);
    }
    .ak-scene { max-width: 460px; margin-inline: auto; }
    .ak-scene::before { inset: 20px -20px -20px 20px; }
    .ak-flottant--haut { left: -4%; }
    .ak-flottant--bas  { right: -2%; }
}

@media (max-width: 560px) {
    .ak-heros::before { display: none; }
    /* LA RANGÉE DE LOGOS DÉBORDAIT — mesuré : la colonne du héros gonflait à
       432 px sur un écran de 390, et le titre comme les boutons se faisaient
       couper à droite. Une rangée flexible ne descend jamais sous sa largeur
       minimale, et une piste de grille `1fr` la suit. On l'autorise donc à
       passer à la ligne, et les logos rapetissent. */
    .ak-preuve { flex-wrap: wrap; gap: var(--e3); }
    .ak-preuve__gens > * { width: 40px; height: 40px; }
    .ak-heros h1 { font-size: clamp(30px, 8vw, 40px); }
    .ak-heros__boutons .ak-cta { width: 100%; justify-content: center; }
    /* Les cartouches rentrent dans le cadre : débordantes, elles sortaient
       de l'écran et provoquaient un défilement latéral. */
    .ak-flottant--haut { left: var(--e3); top: var(--e4); }
    .ak-flottant--bas  { right: var(--e3); bottom: var(--e4); }
    .ak-flottant { padding: var(--e2) var(--e3); }
    .ak-flottant strong { font-size: 13.5px; }
    .ak-flottant small  { font-size: 11.5px; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 4 · LA BANDE DE SERVICES — d'après sa maquette du 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Trois promesses en ligne, chacune : une icône bicolore, un titre gras,
   une ligne d'explication. Disposition et rythme repris au pixel près.

   L'ICÔNE BICOLORE est le seul vrai morceau de dessin ici. La maquette pose
   un tracé vert par-dessus une pastille ambre décalée. Aux couleurs AK, le
   tracé prend l'encre et la pastille l'orange — c'est le même contraste
   (un trait sombre, une tache chaude) transposé, et non deux couleurs
   prises au hasard.

   La pastille est en `::before` : aucun fichier, aucune image, elle suit la
   taille du texte et reste nette à tous les zooms.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-services {
    background: var(--blanc);
    border-bottom: 1px solid var(--trait);
}
.ak-services > .ak-large {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--e6);
    padding-block: var(--e6);
}

.ak-service {
    display: flex;
    align-items: center;
    gap: var(--e4);
    justify-content: center;
}

.ak-service__ico {
    position: relative;
    flex: none;
    display: grid;
    place-items: center;
    width: 56px; height: 56px;
    color: var(--encre);
}
/* La pastille orange, décalée sous le tracé — comme la maquette. */
.ak-service__ico::before {
    content: '';
    position: absolute;
    /* Mesuré sur sa maquette : la pastille fait un peu plus de la moitié du
       tracé et dépasse par le bas. Plus grosse, elle avale le dessin — vu à
       l'écran au premier essai. */
    right: 5px; bottom: 1px;
    width: 26px; height: 26px;
    border-radius: var(--r-pastille);
    background: var(--orange);
}
.ak-service__ico svg {
    position: relative;   /* au-dessus de la pastille */
    /* Un poil plus épais que le trait courant du site : à 40 px, 1.5 px
       paraît fragile à côté d'un aplat plein. */
    stroke-width: 1.7;
}

.ak-service strong {
    display: block;
    font-size: 18px;
    font-weight: 800;
    letter-spacing: -.025em;
    color: var(--encre);
}
.ak-service small {
    display: block;
    margin-top: 3px;
    font-size: 14.5px;
    color: var(--g1);
}

@media (max-width: 900px) {
    .ak-services > .ak-large {
        grid-template-columns: 1fr;
        gap: var(--e4);
        padding-block: var(--e5);
    }
    /* En colonne, on aligne à gauche : trois blocs centrés les uns sous les
       autres donnent trois axes de lecture différents. */
    .ak-service { justify-content: flex-start; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 5 · LA BANNIÈRE ACCESSOIRES ET SA RANGÉE — 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   D'après sa maquette : une bannière CARRÉE à gauche, et à droite un titre,
   un lien de sortie, puis une rangée d'articles qui défile.

   Une seule bannière, et la rangée montre la MÊME famille qu'elle : la
   bannière dit « Accessoires », les vignettes sont des accessoires. Une
   rangée qui promet une famille et en montre une autre est un défaut
   d'étiquetage, pas un choix éditorial.

   ── LE DÉFILEMENT SANS UNE LIGNE DE SCRIPT ──

   `overflow-x: auto` et `scroll-snap` suffisent : la rangée se pousse au
   doigt sur téléphone, à la molette ou au pavé sur ordinateur, et chaque
   vignette vient se caler proprement. Un carrousel en JavaScript aurait
   ajouté trois cents lignes pour le même geste — et cesserait de marcher le
   jour où le script casse.

   ⚠ NOMS. Une première version s'appelait `.ak-vitrine` : la boutique porte
   déjà cette classe (sa mise en page « filtres + grille »), et la mienne,
   écrite plus bas, l'écrasait — boutique compressée, textes chevauchants.
   Une feuille unique est un espace de noms unique.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-bandes { background: var(--blanc); }

.ak-bandes > .ak-large {
    display: grid;
    /* Le carré à gauche garde une taille lisible sans manger la rangée ;
       `minmax(0, 1fr)` évite que les vignettes, indéformables, élargissent
       leur piste au-delà de l'écran. */
    grid-template-columns: minmax(240px, 24%) minmax(0, 1fr);
    gap: var(--e6);
    align-items: start;
    padding-block: var(--e8);
}

/* ── LA BANNIÈRE CARRÉE ── */
.ak-bande {
    position: relative;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    aspect-ratio: 1;
    overflow: hidden;
    padding: var(--e5);
    border-radius: var(--r-carte);
    background: var(--blanc);
    transition: transform var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie);
}
.ak-bande picture { display: contents; }
.ak-bande__fond {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%; height: 100%;
    object-fit: cover;
    transform-origin: 50% 75%;
    transition: transform var(--t-lent) var(--e-sortie);
}
/* Le voile : sans lui, le texte blanc devient illisible dès qu'une zone
   claire de la photo passe dessous — et sur celle-ci, elle passe. */
.ak-bande::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(178deg,
        rgba(26,21,18,.06) 0%, rgba(26,21,18,.34) 34%,
        rgba(26,21,18,.74) 68%, rgba(26,21,18,.94) 100%);
}
.ak-bande__oeil {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .15em;
    text-transform: uppercase;
    color: #FF8A4C;
}
.ak-bande__titre {
    margin-top: 5px;
    font-size: clamp(23px, 1.9vw, 29px);
    font-weight: 800;
    letter-spacing: -.038em;
    line-height: 1.03;
    color: var(--sur-couleur);
}
.ak-bande__mot {
    margin-top: 8px;
    font-size: 14px;
    line-height: 1.5;
    color: rgba(255,255,255,.8);
}
.ak-bande__fleche {
    display: grid;
    place-items: center;
    width: 40px; height: 40px;
    margin-top: var(--e4);
    border-radius: var(--r-pastille);
    background: var(--orange);
    color: var(--sur-couleur);
    box-shadow: 0 10px 22px -12px rgba(248,80,0,.9);
    transition: transform var(--t-moyen) var(--e-sortie);
}
.ak-bande:hover { transform: translateY(-3px); box-shadow: 0 24px 44px -30px rgba(26,21,18,.55); }
.ak-bande:hover .ak-bande__fond { transform: scale(1.055); }
.ak-bande:hover .ak-bande__fleche { transform: translateX(4px); }
.ak-bande:focus-visible { outline: 2.5px solid var(--orange); outline-offset: 3px; }

/* ── LA TÊTE DE RANGÉE ── */
.ak-rangee__tete {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e4);
    margin-bottom: var(--e5);
}
.ak-rangee__tete h2 {
    font-size: clamp(22px, 1.9vw, 28px);
    font-weight: 800;
    letter-spacing: -.035em;
    color: var(--encre);
}
.ak-rangee__tete a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 14.5px;
    font-weight: 700;
    color: var(--encre);
    transition: color var(--t-vif) var(--e-sortie);
}
.ak-rangee__tete a:hover { color: var(--orange); }
/* Le décalage se fait sur la FLÈCHE, en `transform` : animer le `gap` du
   lien remettait toute la ligne en page à chaque image. */
.ak-rangee__tete a svg { transition: transform var(--t-vif) var(--e-sortie); }
.ak-rangee__tete a:hover svg { transform: translateX(4px); }

/* ── LA RANGÉE QUI DÉFILE ── */
.ak-rail {
    display: flex;
    gap: var(--e4);
    overflow-x: auto;
    scroll-snap-type: x proximity;
    overscroll-behavior-x: contain;
    /* AUCUNE BARRE DE DÉFILEMENT — sa demande.
       La rangée avance seule toutes les trois secondes, se pousse au doigt,
       à la molette et au pavé : la barre n'apprenait rien et coupait la
       composition d'un trait gris. Le défilement, lui, reste entier —
       on cache la barre, jamais la fonction. */
    scrollbar-width: none;
    -ms-overflow-style: none;
}
.ak-rail::-webkit-scrollbar { display: none; }

.ak-tuile {
    flex: 0 0 auto;
    width: 168px;
    scroll-snap-align: start;
}
.ak-tuile__cadre {
    position: relative;
    display: block;
    aspect-ratio: 1;
    border-radius: 14px;
    /* `--fond-photo` est la valeur MESURÉE aux quatre coins des photos du
       catalogue : le fond de la tuile et celui de la photo se confondent,
       et le produit paraît détouré sans l'être. */
    background: var(--fond-photo);
    overflow: hidden;
}
.ak-tuile__cadre img {
    width: 100%; height: 100%;
    object-fit: contain;
    padding: 11%;
    transition: transform var(--t-ample) var(--e-sortie);
}
.ak-tuile:hover .ak-tuile__cadre img { transform: scale(1.07); }

.ak-tuile__coeur {
    position: absolute;
    top: 8px; right: 8px;
    display: grid;
    place-items: center;
    width: 28px; height: 28px;
    border-radius: 9px;
    background: var(--verre);
    color: var(--g1);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-tuile__coeur:hover { background: var(--blanc); color: var(--orange); }

.ak-tuile__prix {
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 7px;
    margin-top: var(--e3);
    font-variant-numeric: tabular-nums;
}
.ak-tuile__prix strong {
    font-size: 15.5px;
    font-weight: 800;
    letter-spacing: -.025em;
    color: var(--encre);
}
/* Le prix barré ne paraît QUE s'il existe dans la fiche. Sur 380 articles,
   un seul en porte un — un prix rayé inventé est la plus vieille ficelle du
   commerce, et la plus vite repérée. */
.ak-tuile__prix s {
    font-size: 13.5px;
    color: var(--g2);
    text-decoration-thickness: 1.5px;
}
.ak-tuile__nom {
    display: block;
    margin-top: 2px;
    font-size: 12.5px;
    line-height: 1.35;
    color: var(--g1);
    text-align: center;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ── L'APPARITION AU DÉFILEMENT ──
   L'état caché n'est posé que si le script tourne (`.ak-js`, ajouté par lui
   dès sa première ligne). Script bloqué, la section reste simplement fixe et
   visible — jamais un bloc invisible. */
.ak-js .ak-revele {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity var(--t-lent) var(--e-sortie), transform .7s var(--e-sortie);
}
.ak-js .ak-revele.est-vu { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
    .ak-js .ak-revele { opacity: 1; transform: none; transition: none; }
    .ak-bande, .ak-bande__fond, .ak-bande__fleche { transition: none; }
    .ak-rail { scroll-behavior: auto; }
}

@media (max-width: 900px) {
    .ak-bandes > .ak-large {
        /* `minmax(0, 1fr)` et NON `1fr`. Une piste `1fr` prend pour minimum
           la largeur de son contenu : la rangée de douze vignettes mesure
           1 950 px, la piste s'y étendait, et la bannière — qui partage la
           même colonne — avec elle. Mesuré : 1 952 px de large sur un écran
           de 390. Le défilement horizontal ne fonctionne que si la piste
           accepte d'être plus étroite que ce qu'elle contient. */
        grid-template-columns: minmax(0, 1fr);
        gap: var(--e5);
        padding-block: var(--e7);
    }
    /* Même raison, un cran plus bas : l'enveloppe de la rangée ne doit pas
       se laisser pousser par elle. */
    .ak-bandes > .ak-large > * { min-width: 0; }
    /* En colonne, le carré n'a plus de raison d'être carré : il deviendrait
       une image immense sur un téléphone. */
    .ak-bande { aspect-ratio: 16 / 10; padding: var(--e4); }
    .ak-tuile { width: 148px; }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 6 · LES PRESTATIONS DE RÉPARATION — 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Sa demande : 30 % à gauche pour un titre et un bouton, 70 % à droite pour
   des bannières carrées — écran, batterie, vitre arrière, plaquette.

   ── POURQUOI CETTE SECTION EST CLAIRE ET NON SOMBRE ──

   Juste au-dessus, la bannière « Accessoires » est une photo sombre. Deux
   blocs sombres l'un sous l'autre auraient fait un mur ; en clair, la page
   reprend son souffle et les quatre prestations se lisent comme une liste,
   pas comme quatre affiches.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-presta {
    background: var(--creme);
    border-top: 1px solid var(--trait);
}
.ak-presta > .ak-large {
    display: grid;
    /* 30 / 70, sa mesure. `space-between` met le reste dans la gouttière. */
    grid-template-columns: 30% 66%;
    justify-content: space-between;
    align-items: center;
    padding-block: var(--e8);
}
.ak-presta > .ak-large > * { min-width: 0; }

/* ── LA COLONNE DE GAUCHE ── */
.ak-presta__oeil {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .15em;
    text-transform: uppercase;
    color: var(--orange);
}
.ak-presta h2 {
    margin-top: var(--e3);
    font-size: clamp(26px, 2.5vw, 38px);
    font-weight: 800;
    letter-spacing: -.042em;
    line-height: 1.04;
    color: var(--encre);
    text-wrap: balance;
}
.ak-presta__mot {
    margin-top: var(--e4);
    font-size: 15.5px;
    line-height: 1.6;
    color: var(--g1);
    max-width: 34ch;
}
.ak-presta .ak-cta { margin-top: var(--e5); }

/* ── LES QUATRE CARRÉS ──
   REFAITS le 19/08 : la première version posait quatre PHOTOS du catalogue.
   Elles n'avaient ni la même nature ni la même échelle — deux téléphones
   détourés, une batterie minuscule, une photo d'outils plein cadre sur fond
   sombre. Aucun cadrage ne rattrape ça : quatre sujets photographiés dans
   quatre intentions différentes ne forment pas une rangée.

   Des icônes DESSINÉES, elles, partagent la même grille, la même épaisseur
   de trait et le même poids optique — la cohérence est dans le dessin, pas
   dans le recadrage. Deux d'entre elles (vitre arrière, plaquette)
   n'existaient pas dans le jeu : elles ont été tracées à la même norme,
   24 × 24, trait de 1,5, extrémités arrondies. */
/* CARRÉES, comme il l'a demandé au départ. Ce n'était pas le carré le
   problème, c'étaient les photos : quatre sujets photographiés dans quatre
   intentions différentes. La forme revient donc, avec le dessin en plus. */
.ak-presta__lot {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e4);
}

.ak-presta-carte {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    aspect-ratio: 1;
    gap: var(--e4);
    padding: var(--e5);
    border-radius: 20px;
    background: var(--blanc);
    transition: transform var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie);
}
.ak-presta-carte:hover {
    transform: translateY(-3px);
    box-shadow: 0 22px 40px -28px rgba(26,21,18,.5);
}
.ak-presta-carte:focus-visible { outline: 2.5px solid var(--orange); outline-offset: 3px; }

/* La pastille de l'icône reprend le langage de la bande de services : un
   tracé sombre sur un aplat orange clair, qui se retourne au survol. */
.ak-presta-carte__ico {
    flex: none;
    display: grid;
    place-items: center;
    width: 56px; height: 56px;
    border-radius: 16px;
    background: var(--orange-doux);
    color: var(--encre);
    transition: background var(--t-moyen) var(--e-sortie), color var(--t-moyen) var(--e-sortie);
}
.ak-presta-carte__ico svg { stroke-width: 1.6; }
.ak-presta-carte:hover .ak-presta-carte__ico { background: var(--orange); color: var(--sur-couleur); }

.ak-presta-carte strong {
    display: block;
    font-size: 16.5px;
    font-weight: 800;
    letter-spacing: -.028em;
    line-height: 1.25;
    color: var(--encre);
}
.ak-presta-carte small {
    display: block;
    margin-top: 5px;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--g1);
}

/* La flèche reste discrète : elle marque le lien sans concurrencer le
   titre, et ne s'anime qu'au survol de sa carte. */
.ak-presta-carte__fleche {
    position: absolute;
    top: var(--e5); right: var(--e5);
    color: var(--g3);
    transition: color var(--t-vif) var(--e-sortie), transform var(--t-moyen) var(--e-sortie);
}
.ak-presta-carte:hover .ak-presta-carte__fleche { color: var(--orange); transform: translateX(3px); }

@media (max-width: 1100px) {
    .ak-presta > .ak-large {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--e6);
        align-items: start;
    }
    .ak-presta__mot { max-width: none; }
}

@media (max-width: 1100px) {
    .ak-presta__lot { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 560px) {
    /* Sous 560 px, le carré tomberait à 150 px de côté : la carte s'allonge
       et l'icône passe à côté du texte. */
    .ak-presta__lot { grid-template-columns: minmax(0, 1fr); gap: var(--e3); }
    .ak-presta-carte {
        flex-direction: row;
        align-items: center;
        aspect-ratio: auto;
        padding: var(--e4);
    }
    .ak-presta > .ak-large { padding-block: var(--e7); }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTIONS 8 À 12 · LES OUTILS ET LES REPÈRES — 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Cinq blocs ajoutés d'un coup, et une seule règle pour tous : rien n'y est
   décidé par le site. Les prix viennent du référentiel des pannes de l'ERP,
   les ventes du journal des ventes, les marques du référentiel, le lien de
   l'application des réglages. Le jour où l'atelier change un prix, la page
   change avec lui.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── LA FRISE DES MARQUES ──
   Une bande basse, juste sous les services. En gris, elle répond à la
   question « vous faites du Tecno ? » sans prendre la place d'une section.
   La couleur ne revient qu'au survol : dix-huit logos en couleur sur une
   même ligne, c'est un patchwork. */
.ak-marques {
    background: var(--blanc);
    border-bottom: 1px solid var(--trait);
}
.ak-marques > .ak-large {
    display: flex;
    align-items: center;
    gap: var(--e6);
    padding-block: var(--e4);
}

/* ── LA FRISE DÉFILE, SANS UNE LIGNE DE SCRIPT ──
   La liste est écrite DEUX FOIS dans la page ; on translate la première de
   sa propre largeur plus la gouttière, et au moment où elle a fini son
   voyage la seconde occupe exactement sa place. L'œil ne voit aucune
   couture, et la boucle ne « saute » jamais — c'est ce décalage d'une
   gouttière que la plupart des frises oublient.

   La copie est marquée `aria-hidden` : un lecteur d'écran n'a aucune raison
   d'annoncer dix-huit marques deux fois.

   Les bords s'effacent en fondu (`mask-image`) : sans lui, les logos
   apparaissent et disparaissent d'un coup contre le bord, ce qui trahit le
   truc et fait saccadé même quand ça ne l'est pas. */
.ak-marques__piste {
    display: flex;
    gap: var(--e6);
    overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
}
.ak-marques__lot {
    flex: none;
    display: flex;
    align-items: center;
    gap: var(--e6);
    animation: ak-frise 38s linear infinite;
}
@keyframes ak-frise {
    to { transform: translateX(calc(-100% - var(--e6))); }
}
/* On s'arrête quand on la survole : un logo qu'on veut lire ne doit pas
   fuir sous le curseur. */
/* WCAG 2.2.2 exige un moyen d'arrêter un mouvement de plus de cinq
   secondes DANS la page. Le survol n'en est pas un pour qui navigue au
   clavier : le focus arrête donc la frise, lui aussi. */
.ak-marques__piste:hover .ak-marques__lot,
.ak-marques__piste:focus-within .ak-marques__lot { animation-play-state: paused; }

@media (prefers-reduced-motion: reduce) {
    .ak-marques__lot { animation: none; }
    .ak-marques__piste { overflow-x: auto; scrollbar-width: none; }
}
/* Des logos PLUS GRANDS dans une bande qui reste basse : c'est le contraste
   entre les deux qui donne la ligne longue et fine. Élargir la bande aurait
   fait une section de plus ; élargir les logos seuls suffit. */
.ak-marques__lot img {
    flex: none;
    width: 116px; height: 52px;
    object-fit: contain;
    filter: grayscale(1);
    opacity: .5;
    transition: filter var(--t-moyen) var(--e-sortie), opacity var(--t-moyen) var(--e-sortie), transform var(--t-moyen) var(--e-sortie);
}
.ak-marques__lot img:hover { filter: none; opacity: 1; transform: scale(1.06); }

/* ── COMMENT ÇA SE PASSE ──
   Quatre étapes reliées par un filet. Le filet n'est pas décoratif : c'est
   lui qui dit que l'ordre compte, là où quatre cartes séparées diraient que
   ce sont quatre options. */
.ak-etapes { background: var(--blanc); }
.ak-etapes > .ak-large { padding-block: var(--e8); }
.ak-etapes__tete { max-width: 46ch; }
.ak-etapes__tete h2 {
    margin-top: var(--e3);
    font-size: clamp(26px, 2.5vw, 38px);
    font-weight: 800;
    letter-spacing: -.042em;
    line-height: 1.05;
    color: var(--encre);
}
.ak-etapes__lot {
    position: relative;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e5);
    margin-top: var(--e7);
}
/* Le filet passe DERRIÈRE les numéros, à leur hauteur. */
.ak-etapes__lot::before {
    content: '';
    position: absolute;
    top: 22px; left: 8%; right: 8%;
    height: 1px;
    background: repeating-linear-gradient(90deg, var(--trait-fort) 0 6px, transparent 6px 12px);
}
.ak-etape { position: relative; }
.ak-etape span {
    position: relative;
    display: grid;
    place-items: center;
    width: 44px; height: 44px;
    border-radius: var(--r-pastille);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    font-size: 15px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    /* Un anneau de la couleur du fond, pour que le filet s'interrompe
       proprement derrière le numéro plutôt que de le traverser. */
    box-shadow: 0 0 0 6px var(--blanc);
}
.ak-etape:first-child span { background: var(--orange); }
.ak-etape strong {
    display: block;
    margin-top: var(--e4);
    font-size: 16.5px;
    font-weight: 800;
    letter-spacing: -.028em;
    color: var(--encre);
}
.ak-etape small {
    display: block;
    margin-top: 5px;
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--g1);
}

/* ── LE BANDEAU DE L'APPLICATION ── */
.ak-appli { background: var(--creme); }
.ak-appli > .ak-large {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--e6);
    align-items: center;
    padding-block: var(--e7);
}
.ak-appli h2 {
    font-size: clamp(22px, 2.1vw, 30px);
    font-weight: 800;
    letter-spacing: -.038em;
    line-height: 1.1;
    color: var(--encre);
}
.ak-appli p {
    margin-top: var(--e3);
    max-width: 52ch;
    font-size: 15px;
    line-height: 1.6;
    color: var(--g1);
}
.ak-appli__boutons { display: flex; flex-wrap: wrap; gap: var(--e3); }
.ak-magasin {
    display: inline-flex;
    align-items: center;
    gap: var(--e3);
    height: 56px;
    padding-inline: var(--e5);
    border-radius: 14px;
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    transition: background var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-magasin:hover { background: var(--fond-sombre-2); transform: translateY(-2px); }
.ak-magasin small { display: block; font-size: 11px; opacity: .7; }
.ak-magasin strong { display: block; font-size: 15px; font-weight: 700; letter-spacing: -.02em; }
/* Le magasin sans lien : gris, non cliquable, et il le dit. Un bouton qui
   ne mène nulle part est pire que pas de bouton. */
.ak-magasin--attente {
    background: transparent;
    color: var(--g2);
    border: 1.5px dashed var(--trait-fort);
    cursor: default;
}
.ak-magasin--attente:hover { background: transparent; transform: none; }

@media (max-width: 1000px) {
    .ak-etapes__lot { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--e6); }
    .ak-etapes__lot::before { display: none; }
    .ak-appli > .ak-large { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 620px) {
    .ak-etapes__lot { grid-template-columns: minmax(0, 1fr); gap: var(--e5); }
}

/* ═══════════════════════════════════════════════════════════════════════
   SECTION 7 · LES TÉMOIGNAGES — d'après sa maquette du 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Disposition reprise au trait : un filet et un mot en surtitre, un grand
   titre en deux teintes, deux cartes blanches. Dans chacune, un pétale
   sombre porte le portrait, le nom et le métier s'alignent à droite, les
   étoiles dessous, et un guillemet en pastille marque le coin.

   ⚠ La section ne paraît QUE si `config('site.temoignages')` est rempli.
   Vérifié : AK n'a aucun avis saisi nulle part. Deux clients inventés avec
   leur métier, leur note et leur visage, c'est la chose la plus facile à
   démentir sur un site de quartier.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-avis-sec {
    background: var(--creme);
    text-align: center;
}
.ak-avis-sec > .ak-large { padding-block: var(--e8); }

.ak-avis-sec__oeil {
    display: inline-flex;
    align-items: center;
    gap: var(--e3);
    font-size: 15px;
    font-weight: 600;
    color: var(--g1);
}
/* Le filet de la maquette : une barre courte, à gauche du mot. */
.ak-avis-sec__oeil::before {
    content: '';
    width: 26px; height: 2px;
    background: var(--orange);
    border-radius: 2px;
}

.ak-avis-sec h2 {
    margin-top: var(--e3);
    font-size: clamp(28px, 3.1vw, 46px);
    font-weight: 800;
    letter-spacing: -.045em;
    line-height: 1.04;
    color: var(--encre);
}
.ak-avis-sec h2 em { font-style: normal; color: var(--orange); }

/* ── LA RANGÉE DE CARTES ──
   Deux visibles à la fois ; au-delà, la rangée défile, sans barre, comme
   celle des accessoires. */
.ak-avis-sec .ak-rail {
    margin-top: var(--e7);
    gap: var(--e5);
    text-align: left;
    /* Deux pixels de marge intérieure : sans eux, l'ombre des cartes se
       faisait couper au bord du cadre de défilement. */
    padding: 2px;
}
.ak-temoin {
    flex: 0 0 auto;
    width: calc((100% - var(--e5)) / 2);
    scroll-snap-align: start;
    background: var(--blanc);
    border-radius: 22px;
    box-shadow: 0 2px 4px rgba(26,21,18,.03), 0 18px 40px -32px rgba(26,21,18,.45);
    overflow: hidden;
}

.ak-temoin__tete {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--e5);
    padding-right: var(--e5);
}

/* LE PÉTALE. C'est le geste de la maquette : un aplat sombre qui part du
   coin haut-gauche et s'arrondit franchement en bas à droite, avec le
   portrait posé dedans. Un simple rond n'aurait pas la même tenue. */
.ak-temoin__petale {
    flex: none;
    display: grid;
    place-items: center;
    padding: var(--e4);
    background: var(--fond-sombre);
    border-radius: 0 0 96px 0;
}
.ak-temoin__petale img,
.ak-temoin__petale span {
    width: 92px; height: 92px;
    border-radius: var(--r-pastille);
    border: 3px solid var(--sur-couleur);
    object-fit: cover;
}
/* Sans portrait : les initiales. Une silhouette générique ferait plus faux
   qu'un vide assumé. */
.ak-temoin__petale span {
    display: grid;
    place-items: center;
    background: var(--fond-sombre-2);
    color: var(--sur-couleur);
    font-size: 27px;
    font-weight: 800;
    letter-spacing: -.02em;
}

.ak-temoin__nom {
    display: block;
    font-size: 19px;
    font-weight: 800;
    letter-spacing: -.03em;
    color: var(--encre);
}
.ak-temoin__role {
    display: block;
    margin-top: 2px;
    font-size: 14.5px;
    color: var(--g1);
}

.ak-temoin__notes {
    display: flex;
    align-items: center;
    gap: 3px;
    margin-top: var(--e3);
    color: var(--orange);
}
.ak-temoin__notes .eteinte { color: var(--g3); }
.ak-temoin__notes strong {
    margin-left: 6px;
    font-size: 15px;
    font-weight: 800;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}

/* Le guillemet en pastille, calé en haut à droite. */
.ak-temoin__guillemet {
    position: absolute;
    top: var(--e5); right: var(--e5);
    display: grid;
    place-items: center;
    width: 54px; height: 54px;
    border-radius: var(--r-pastille);
    background: var(--creme);
    color: var(--g2);
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 40px;
    line-height: 0;
    padding-top: 18px;
}

.ak-temoin__texte {
    padding: var(--e5);
    font-size: 15.5px;
    line-height: 1.65;
    color: var(--g1);
}

@media (max-width: 900px) {
    .ak-avis-sec > .ak-large { padding-block: var(--e7); }
    /* Une carte à la fois : deux moitiés sur un téléphone donneraient deux
       colonnes de six mots. */
    .ak-temoin { width: 86%; }
    .ak-temoin__petale { border-radius: 0 0 72px 0; padding: var(--e3); }
    .ak-temoin__petale img, .ak-temoin__petale span { width: 72px; height: 72px; }
    .ak-temoin__guillemet { width: 42px; height: 42px; font-size: 32px; padding-top: 14px; }
}

/* ═══════════════════════════════════════════════════════════════════════
   LA FICHE PRODUIT — refaite le 19/08/2026 D'APRÈS SA MAQUETTE
   ═══════════════════════════════════════════════════════════════════════

   La maquette de la fiche est arrivée après coup : la première version
   suivait le système du site, pas cette composition-là. Refaite ici au plus
   près.

   Sa composition : bandeau de titre, visuel à gauche avec ses vignettes,
   panneau d'achat à droite, ONGLETS sous le produit, puis les articles liés.

   ── LES QUATRE ÉLÉMENTS SANS DONNÉE ──

   Mesuré avant de dessiner :
     · les VIGNETTES — 0 article sur 380 a plus d'une photo ;
     · les AVIS « ★ 4.9 (245 Review) » — 0 avis, et aucune table pour en
       recevoir ;
     · le PRIX BARRÉ — 0 article a un prix de comparaison ;
     · les TAGS — 0 article en porte.

   Ils sont tous DESSINÉS quand même, et chacun ne paraît que s'il a de quoi.
   Le balisage attend la donnée, il ne l'invente pas : une vignette répétée
   quatre fois ou une note fabriquée seraient exactement ce que ce site a
   déjà retiré six fois du gabarit d'origine.

   Ce qui existe VRAIMENT prend les mêmes places : les déclinaisons Couleur
   (39 articles) tiennent la ligne des pastilles, la compatibilité (356/380)
   tient celle des tags, et le tableau « Informations » se remplit de la
   qualité, de la marque, de la référence et de la compatibilité.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-fiche {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--e7);
    align-items: start;
    padding-block: var(--e7) var(--e8);
}

/* ── LE VISUEL ── */
.ak-visuel__cadre {
    position: relative;
    aspect-ratio: 1;
    border-radius: var(--r-carte);
    overflow: hidden;
    background: var(--fond-photo);
}
.ak-visuel__cadre img { width: 100%; height: 100%; object-fit: contain; }

.ak-visuel__qualite {
    position: absolute;
    top: var(--e4); left: var(--e4);
    z-index: 2;
    padding: 6px var(--e4);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
    border-radius: var(--r-pastille);
    font-size: 12.5px;
    font-weight: 700;
}

/* Les flèches de la maquette : la gauche sombre, la droite orange. Elles
   n'existent QUE s'il y a plusieurs photos — voir l'en-tête. */
.ak-visuel__fleche {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 46px; height: 46px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    z-index: 2;
    transition: transform var(--t-vif) var(--e-sortie);
}
.ak-visuel__fleche--avant { left: var(--e4); background: var(--fond-sombre); color: var(--sur-couleur); }
.ak-visuel__fleche--apres { right: var(--e4); background: var(--orange); color: var(--sur-couleur); }
.ak-visuel__fleche:hover { transform: translateY(-50%) scale(1.06); }

/* ── LES VIGNETTES ── */
.ak-vignettes {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--e3);
    margin-top: var(--e3);
}
.ak-vignette {
    aspect-ratio: 1;
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    overflow: hidden;
    background: var(--fond-photo);
    transition: border-color var(--t-vif) var(--e-sortie);
}
.ak-vignette img { width: 100%; height: 100%; object-fit: contain; }
.ak-vignette--active, .ak-vignette:hover { border-color: var(--encre); }

/* ── LE PANNEAU D'ACHAT ── */
.ak-achat__rayon {
    font-size: 14px;
    color: var(--g1);
}

.ak-achat__titre {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--e3);
    margin-top: var(--e2);
}
.ak-achat__titre h1 {
    font-size: clamp(24px, 2.4vw, 30px);
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.2;
}

/* La pastille d'état, à côté du titre — comme « In Stock » sur la maquette. */
.ak-etat {
    flex: none;
    padding: 4px var(--e3);
    border-radius: var(--r-pastille);
    border: 1.5px solid var(--trait-fort);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--g1);
    white-space: nowrap;
}
.ak-etat--stock { border-color: var(--vert); color: var(--vert); background: var(--vert-doux); }

/* La ligne des ventes remplace « ★ 4.9 (245 Review) » : aucun avis n'a jamais
   été saisi, et aucune table ne peut en recevoir. Le nombre de ventes, lui,
   se compte. */
.ak-achat__preuve {
    display: flex;
    align-items: center;
    gap: var(--e2);
    margin-top: var(--e3);
    font-size: 14px;
    color: var(--g1);
}
.ak-achat__preuve strong { color: var(--encre); font-weight: 700; }

.ak-achat__prix {
    display: flex;
    align-items: baseline;
    gap: var(--e3);
    margin-top: var(--e4);
}
.ak-achat__prix b {
    font-size: 30px;
    font-weight: 800;
    letter-spacing: -.035em;
    font-variant-numeric: tabular-nums;
}
.ak-achat__prix s { font-size: 18px; color: var(--g2); }

.ak-achat__chapo {
    margin-top: var(--e4);
    max-width: 52ch;
    font-size: 15px;
    line-height: 1.65;
    color: var(--g1);
}

/* ── LES DÉCLINAISONS, en pastilles ──
   La maquette met « Color : Brown » et une rangée de ronds colorés. Trente-
   neuf articles portent une vraie déclinaison de couleur : ce sont elles
   qu'on montre, pas des ronds inventés. */
.ak-choix-couleur { margin-top: var(--e5); }
.ak-choix-couleur > p {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: var(--e3);
}
.ak-choix-couleur > p span { color: var(--g1); font-weight: 400; }
.ak-pastilles { display: flex; flex-wrap: wrap; gap: var(--e3); }
.ak-pastille-couleur {
    display: inline-flex;
    align-items: center;
    gap: var(--e2);
    padding: 6px var(--e3) 6px 6px;
    border: 1.5px solid var(--trait);
    border-radius: var(--r-pastille);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--encre-2);
}
.ak-pastille-couleur i {
    width: 20px; height: 20px;
    border-radius: 99px;
    border: 1px solid rgba(0,0,0,.12);
}

/* ── LA LIGNE D'ACHAT ── */
/* LES QUATRE COMMANDES SUR UNE SEULE LIGNE, comme la maquette.
 *
 * Écrite en `wrap`, le cœur tombait à la ligne suivante et laissait un vide
 * sous les boutons — vu sur la capture. Les deux boutons peuvent maintenant
 * RÉTRÉCIR (`min-width: 0`) plutôt que de pousser le dernier dehors, et le
 * retour à la ligne n'a lieu qu'au palier téléphone, où il est voulu. */
.ak-achat__ligne {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: var(--e3);
    margin-top: var(--e5);
}
.ak-achat__ligne .ak-cta {
    min-width: 0;
    flex: 1 1 auto;
    justify-content: center;
    padding-inline: var(--e4);
    white-space: nowrap;
}
.ak-compteur, .ak-coeur { flex: none; }

/* Le compteur − 4 + de la maquette. Les boutons ne servent qu'avec
   JavaScript ; le champ reste tapable sans lui, donc rien n'est fermé. */
.ak-compteur {
    display: flex;
    align-items: center;
    border: 1.5px solid var(--trait);
    border-radius: var(--r-pastille);
    overflow: hidden;
    height: 52px;
}
.ak-compteur button {
    width: 42px; height: 100%;
    border: none;
    background: transparent;
    font-size: 19px;
    color: var(--g1);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-compteur button:hover { background: var(--creme); color: var(--orange); }
.ak-compteur input {
    width: 44px;
    height: 100%;
    border: none;
    background: transparent;
    text-align: center;
    font-family: inherit;
    font-size: 16px;
    font-weight: 700;
    color: var(--encre);
    outline: none;
    -moz-appearance: textfield;
}
.ak-compteur input::-webkit-outer-spin-button,
.ak-compteur input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.ak-achat__ligne .ak-cta { height: 52px; }

/* « Ajouter » est sombre, « Acheter » est orange — la hiérarchie de la
   maquette, où l'action qui mène à l'argent porte l'accent. */
.ak-cta--sombre { background: var(--fond-sombre); color: var(--sur-couleur); }
.ak-cta--sombre:hover { background: var(--fond-sombre-2); }

.ak-coeur {
    width: 52px; height: 52px;
    display: grid;
    place-items: center;
    border: 1.5px solid var(--trait);
    border-radius: var(--r-pastille);
    color: var(--encre);
    transition: border-color var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-coeur:hover { border-color: var(--orange); color: var(--orange); }

.ak-achat__ajoute {
    display: flex;
    align-items: center;
    gap: var(--e2);
    margin-top: var(--e4);
    padding: var(--e3) var(--e4);
    border-radius: var(--r-champ);
    background: var(--vert-doux);
    color: var(--vert);
    font-size: 14px;
    font-weight: 600;
}
.ak-achat__ajoute a { text-decoration: underline; text-underline-offset: 3px; }

/* ── LE PIED DU PANNEAU : référence, compatibilité, partage ── */
.ak-achat__pied {
    margin-top: var(--e6);
    padding-top: var(--e5);
    border-top: 1px solid var(--trait);
    display: flex;
    flex-direction: column;
    gap: var(--e3);
    font-size: 14px;
    color: var(--g1);
}
.ak-achat__pied strong { color: var(--encre); font-weight: 600; }
.ak-achat__pied > p { display: flex; gap: var(--e2); flex-wrap: wrap; align-items: baseline; }

.ak-partage { display: flex; align-items: center; gap: var(--e2); }
.ak-partage a {
    width: 32px; height: 32px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    background: var(--creme);
    color: var(--encre);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-partage a:hover { background: var(--orange); color: var(--sur-couleur); }

/* ═══ LES ONGLETS ══════════════════════════════════════════════════════
   Pilotés par des boutons radio masqués : aucun JavaScript, et l'onglet
   choisi se retrouve à la tabulation. C'est la même mécanique que le menu
   du téléphone et la recherche.
   ═══════════════════════════════════════════════════════════════════════ */
.ak-onglets { padding-block: var(--e6) var(--e8); }
.ak-onglets input { position: absolute; opacity: 0; width: 0; height: 0; }

.ak-onglets__barre {
    display: flex;
    gap: var(--e7);
    border-bottom: 1px solid var(--trait);
    margin-bottom: var(--e6);
    overflow-x: auto;
}
.ak-onglets__barre label {
    padding-bottom: var(--e4);
    font-size: 17px;
    font-weight: 600;
    color: var(--g2);
    cursor: pointer;
    white-space: nowrap;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie);
}
.ak-onglets__barre label:hover { color: var(--encre); }

.ak-onglets__volet { display: none; }

#ak-onglet-1:checked ~ .ak-onglets__barre label[for="ak-onglet-1"],
#ak-onglet-2:checked ~ .ak-onglets__barre label[for="ak-onglet-2"],
#ak-onglet-3:checked ~ .ak-onglets__barre label[for="ak-onglet-3"] {
    color: var(--encre);
    font-weight: 700;
    border-bottom-color: var(--orange);
}
#ak-onglet-1:checked ~ .ak-onglets__volet--1,
#ak-onglet-2:checked ~ .ak-onglets__volet--2,
#ak-onglet-3:checked ~ .ak-onglets__volet--3 { display: block; }

#ak-onglet-1:focus-visible ~ .ak-onglets__barre label[for="ak-onglet-1"],
#ak-onglet-2:focus-visible ~ .ak-onglets__barre label[for="ak-onglet-2"],
#ak-onglet-3:focus-visible ~ .ak-onglets__barre label[for="ak-onglet-3"] {
    outline: 2px solid var(--orange);
    outline-offset: 3px;
}

/* ── LE TABLEAU DES INFORMATIONS ──
   En-tête orange comme la maquette, rangées alternées. Il se remplit de ce
   qui est renseigné — qualité, marque, référence, compatibilité, rayon — et
   d'une ligne de poids ou de dimensions LE JOUR où elles le seront. */
.ak-tableau {
    width: 100%;
    border-collapse: collapse;
    border: 1px solid var(--trait);
    border-radius: var(--r-champ);
    overflow: hidden;
    font-size: 14.5px;
}
.ak-tableau th {
    background: var(--orange);
    color: var(--sur-couleur);
    text-align: left;
    padding: var(--e3) var(--e4);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .04em;
}
.ak-tableau td { padding: var(--e3) var(--e4); border-top: 1px solid var(--trait); }
.ak-tableau tbody tr:nth-child(odd) { background: var(--creme); }
.ak-tableau td:first-child { font-weight: 600; color: var(--encre); width: 34%; }
.ak-tableau td:last-child { color: var(--encre-2); }

/* ── LE TEXTE D'UNE DESCRIPTION ──
   Elle vient de l'ERP en HTML simple — des paragraphes, des listes, du gras.
   On l'habille ICI plutôt que dans le contenu : une description qui porterait
   sa propre mise en forme ne suivrait pas la charte, et survivrait à tout
   changement de design. C'est exactement le défaut qu'on a retiré des textes
   repris de l'ancien site, dont les couleurs étaient écrites en dur.

   ⚠ Ce bloc avait disparu en réécrivant la fiche d'après la maquette : les
   listes s'affichaient alors sans puce ni retrait, collées à la marge. */
.ak-texte {
    max-width: 72ch;
    font-size: 15.5px;
    line-height: 1.7;
    color: var(--encre-2);
}
.ak-texte p { margin-bottom: var(--e4); }
.ak-texte p:last-child { margin-bottom: 0; }
.ak-texte strong, .ak-texte b { color: var(--encre); font-weight: 700; }
.ak-texte ul, .ak-texte ol {
    display: flex;
    flex-direction: column;
    gap: var(--e2);
    margin-bottom: var(--e4);
}
.ak-texte li { position: relative; padding-left: var(--e5); }
.ak-texte li::before {
    content: '';
    position: absolute;
    left: 0; top: .62em;
    width: 6px; height: 6px;
    border-radius: 99px;
    background: var(--orange);
}
.ak-texte h3, .ak-texte h4 {
    font-size: 17px;
    margin-block: var(--e5) var(--e3);
}

/* ── L'ÉTAT VIDE D'UN ONGLET ──
   « Aucun avis pour le moment » est une phrase VRAIE, pas un remplissage.
   Elle vaut mieux qu'un onglet absent : le client sait que la rubrique
   existe et qu'elle attend. */
.ak-onglet-vide {
    padding: var(--e7) var(--e5);
    text-align: center;
    color: var(--g1);
    background: var(--creme);
    border-radius: var(--r-carte);
}
.ak-onglet-vide strong { display: block; color: var(--encre); font-size: 16px; margin-bottom: var(--e2); }

/* ── LES ARTICLES LIÉS ──
   Titre centré avec son œil, comme la maquette. */
.ak-lies { padding-block: var(--e7) var(--e8); border-top: 1px solid var(--trait); }
.ak-lies__oeil {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--e3);
    font-size: 14px;
    font-weight: 600;
    color: var(--g1);
}
.ak-lies__oeil::before {
    content: '';
    width: 26px; height: 2px;
    background: var(--orange);
    border-radius: 2px;
}
.ak-lies h2 {
    margin-top: var(--e3);
    margin-bottom: var(--e6);
    text-align: center;
    font-size: clamp(24px, 3vw, 34px);
    font-weight: 800;
    letter-spacing: -.03em;
}
.ak-lies h2 em { font-style: normal; color: var(--orange); }

@media (max-width: 1040px) {
    .ak-fiche { grid-template-columns: 1fr; gap: var(--e6); }
}
@media (max-width: 560px) {
    /* Au téléphone, la ligne se plie : quatre commandes côte à côte y
       deviendraient illisibles. */
    .ak-achat__ligne { flex-wrap: wrap; }
    .ak-achat__ligne .ak-cta { flex: 1 1 100%; }
    .ak-onglets__barre { gap: var(--e5); }
    .ak-onglets__barre label { font-size: 15px; }
}

/* ── « FAIRE POSER PAR L'ATELIER » ──
   Le pont entre la boutique et le métier de la maison. 356 articles sur 380
   concernent un modèle précis : celui qui achète un écran ne veut pas
   forcément le poser lui-même.

   Il est posé sur le fond doux de l'accent, pas en bouton plein : c'est une
   PROPOSITION, elle ne doit pas disputer le clic à « Ajouter au panier ». */
.ak-poser {
    display: flex;
    align-items: center;
    gap: var(--e4);
    margin-top: var(--e5);
    padding: var(--e4);
    background: var(--orange-doux);
    border-radius: var(--r-champ);
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-poser:hover { background: var(--orange-doux); border-color: var(--orange); }
.ak-poser__ico {
    flex: none;
    width: 44px; height: 44px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    background: var(--blanc);
    color: var(--orange);
}
.ak-poser strong { display: block; font-size: 15px; font-weight: 700; color: var(--encre); }
.ak-poser small { display: block; font-size: 13px; color: var(--g1); }
.ak-poser > svg:last-child { flex: none; margin-left: auto; color: var(--orange); }

/* Les rassurances du panneau d'achat. */
.ak-achat__points {
    margin-top: var(--e5);
    display: flex;
    flex-direction: column;
    gap: var(--e4);
}
.ak-achat__point {
    display: flex;
    gap: var(--e3);
    font-size: 14px;
    color: var(--g1);
    line-height: 1.5;
}
.ak-achat__point svg { flex: none; margin-top: 2px; color: var(--orange); }
.ak-achat__point strong { display: block; color: var(--encre); font-weight: 600; }

/* ═══════════════════════════════════════════════════════════════════════
   LA CONNEXION — pleine page, reprise le 19/08/2026 (« un peu fade »)
   ═══════════════════════════════════════════════════════════════════════

   La première version était juste : pleine page, photo à gauche, formulaire
   à droite. Mais PLATE — deux rectangles côte à côte, un formulaire perdu au
   milieu d'un grand blanc, aucune profondeur.

   Ce qui la relève, et pourquoi chaque chose :

     · UNE COUPE ASYMÉTRIQUE (55/45) plutôt que deux moitiés égales. Deux
       rectangles identiques n'ont pas de sujet ; ici la photo domine et le
       formulaire se pose à côté.

     · DE LA PROFONDEUR. Le côté du formulaire est sur fond crème, et le
       formulaire lui-même sur une carte blanche qui flotte. Un champ posé à
       même le fond n'a rien pour se détacher.

     · UN COIN ARRONDI CÔTÉ PHOTO, qui la fait chevaucher le fond. C'est ce
       détail-là qui distingue une mise en page composée de deux blocs
       accolés.

     · DE L'ÉCHELLE. Le titre passe de 30 à 44 px, avec un interlettrage
       serré. Sur une page qui ne fait qu'une chose, elle peut se permettre
       d'être grande.

     · UN VOILE SUR LA PHOTO, du transparent vers le sombre en bas. Sans lui,
       le logo blanc disparaît sur les zones claires — et le bord bas de la
       photo coupe net.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── LA PAGE TIENT DANS L'ÉCRAN, SANS DÉFILEMENT ──
   Sa demande : « pas de défilement, tout doit être fixe ».
   C'est juste pour une page qui ne fait qu'une chose — voir le bouton sans
   descendre est la moitié du travail d'un écran de connexion.

   `100dvh` et non `100vh` : sur un téléphone, `vh` compte la hauteur SANS
   les barres du navigateur, donc la page dépasse toujours d'une centaine de
   pixels et défile quand même. `dvh` suit la hauteur réelle.

   Le contenu est calibré pour tenir dès 640 px de haut. En dessous — un
   écran vraiment court, ou un zoom élevé — la colonne du formulaire défile
   seule plutôt que de couper le bouton : un formulaire qu'on ne peut pas
   valider serait pire qu'un défilement. */
body.ak-nue {
    background: var(--creme);
    height: 100dvh;
    overflow: hidden;
}

.ak-nue__page {
    display: grid;
    grid-template-columns: 55fr 45fr;
    height: 100dvh;
}

/* ── LA PHOTO ── */
.ak-nue__photo {
    position: relative;
    z-index: 1;
    overflow: hidden;
    /* Le fond de repli pendant le chargement — et tant que la photo n'a pas
       été déposée. Un dégradé plutôt qu'un aplat : le panneau reste habité
       même sans image. */
    background:
        radial-gradient(120% 90% at 20% 10%, rgba(248,80,0,.22), transparent 60%),
        linear-gradient(160deg, #241C18 0%, var(--fond-sombre) 60%);
    border-radius: 0 var(--r-carte) var(--r-carte) 0;
}
.ak-nue__photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Le sujet est dans le tiers bas : on cadre dessus plutôt qu'au centre,
       sinon le visage sort du champ sur un écran large. */
    object-position: center 38%;
}

/* Le voile. Il ne sert pas à assombrir pour le plaisir : le logo blanc doit
   rester lisible quelle que soit la photo déposée un jour. */
.ak-nue__photo::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg,
        rgba(26,21,18,.42) 0%, rgba(26,21,18,0) 34%,
        rgba(26,21,18,0) 62%, rgba(26,21,18,.46) 100%);
    pointer-events: none;
}

.ak-nue__logo {
    position: absolute;
    top: var(--e6); left: var(--e6);
    z-index: 2;
}
.ak-nue__logo img { width: 54px; height: 54px; }

/* ── LE CÔTÉ DU FORMULAIRE ── */
/* ── LE CÔTÉ DU FORMULAIRE ──
   Il porte un halo très doux derrière la carte. Sans lui, le crème est un
   aplat mort et la carte semble collée dessus ; avec, elle a l'air posée
   dans un espace. */
.ak-nue__forme {
    position: relative;
    z-index: 2;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: var(--e5) var(--e6);
    /* Le filet de sécurité : il ne se déclenche qu'en dessous de la hauteur
       calibrée. Voir plus haut. */
    overflow-y: auto;

    /* LA CARTE CHEVAUCHE LA PHOTO.
     *
     * C'est le changement qui règle le « deux rectangles côte à côte » : la
     * carte s'avance sur la photo et enjambe la couture. Deux plans au lieu
     * de deux blocs — et l'œil comprend tout de suite lequel est le sujet.
     *
     * Une marge NÉGATIVE plutôt qu'un déplacement : la colonne se rétrécit
     * vraiment, donc rien ne déborde à droite. */
    margin-left: -72px;
}

.ak-nue__forme::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background: radial-gradient(60% 50% at 60% 45%, rgba(248, 80, 0, .07), transparent 70%);
    pointer-events: none;
}

/* La carte qui flotte. C'est elle qui donne la profondeur : un formulaire
   posé à même le fond n'a rien pour se détacher. */
.ak-nue__boite {
    width: 100%;
    max-width: 420px;
    margin-inline: auto;
    /* Les marges suivent la hauteur de l'écran : généreuses quand il y a de
       la place, resserrées quand il n'y en a plus. C'est ce qui permet de
       tenir sans défilement d'un portable de 640 px à un grand écran. */
    padding: clamp(var(--e5), 4vh, var(--e7)) var(--e6);
    background: var(--blanc);
    border-radius: var(--r-carte);
    box-shadow:
        0 1px 2px rgba(26,21,18,.04),
        0 12px 24px -12px rgba(26,21,18,.10),
        0 40px 64px -32px rgba(26,21,18,.20);
}

/* L'étiquette au-dessus du titre : elle situe la page en un mot, là où une
   phrase de plus aurait alourdi. */
.ak-nue__oeil {
    display: inline-flex;
    align-items: center;
    gap: var(--e2);
    padding: 5px var(--e3) 5px 5px;
    background: var(--orange-doux);
    color: var(--orange);
    border-radius: var(--r-pastille);
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: .02em;
}
.ak-nue__oeil span {
    display: grid;
    place-items: center;
    width: 22px; height: 22px;
    border-radius: var(--r-pastille);
    background: var(--blanc);
}

.ak-nue__boite h1 {
    margin-top: var(--e3);
    font-size: clamp(28px, 3.4vh + 1vw, 42px);
    font-weight: 800;
    letter-spacing: -.04em;
    line-height: 1.02;
}
.ak-nue__boite > p {
    margin-top: var(--e3);
    font-size: 15px;
    line-height: 1.6;
    color: var(--g1);
}

/* ── LE CHAMP DU NUMÉRO ──
   Le drapeau et l'indicatif sont FIXES : l'indicatif ne se tape pas, et le
   mettre en préfixe évite qu'on l'écrive une fois sur deux. Le drapeau est
   dessiné en SVG — aucun fichier, net à toute taille, et il ne dépend pas
   des émojis du système, qui n'affichent pas les drapeaux sur Windows. */
.ak-tel {
    display: flex;
    align-items: center;
    gap: var(--e3);
    height: 62px;
    padding-inline: var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    background: var(--creme);
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie);
}
/* L'anneau au focus, plutôt qu'un simple changement de bordure : sur un
   champ unique, il faut que le curseur se voie de loin. */
.ak-tel:focus-within {
    border-color: var(--orange);
    background: var(--blanc);
    box-shadow: 0 0 0 4px rgba(248, 80, 0, .12);
}
.ak-tel__pays {
    display: flex;
    align-items: center;
    gap: var(--e2);
    flex: none;
    padding-right: var(--e3);
    border-right: 1.5px solid var(--trait);
    font-size: 15px;
    font-weight: 700;
    color: var(--encre);
}
.ak-tel__pays svg { border-radius: 3px; display: block; }
/* `input[type="tel"]` ET NON `input` SEUL.
 *
 * Le champ portait DEUX bordures — une boîte dans une boîte, vue sur sa
 * capture. La règle générique `.ak-champ input[type="tel"]` du tunnel de
 * commande a une spécificité de (0,2,1) ; `.ak-tel input` n'en avait que
 * (0,1,1) et perdait, quel que soit l'ordre dans le fichier. L'attribut
 * remet les deux à égalité, et celle-ci vient après.
 *
 * C'est le piège classique d'une feuille qui grandit : deux composants qui
 * ne se connaissent pas visent le même élément. */
.ak-tel input[type="tel"] {
    flex: 1;
    min-width: 0;
    padding: 0;
    border: none;
    border-radius: 0;
    background: transparent;
    outline: none;
    font-family: inherit;
    font-size: 20px;
    font-weight: 700;
    letter-spacing: .05em;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}
.ak-tel input[type="tel"]:focus { border: none; box-shadow: none; }
.ak-tel input::placeholder { color: var(--g3); font-weight: 500; letter-spacing: .03em; }

/* ── LE CANAL — un sélecteur segmenté ──
   Deux cases bordées côte à côte faisaient deux boutons qui se ressemblaient
   trop. Un seul contenant, deux segments, celui qui est choisi en plein : on
   voit d'un coup que les deux s'excluent. */
.ak-canal-ligne {
    display: flex;
    gap: 4px;
    padding: 4px;
    background: var(--creme);
    border-radius: var(--r-pastille);
}
.ak-canal-ligne label {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--e2);
    height: 46px;
    border-radius: var(--r-pastille);
    cursor: pointer;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--g1);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie);
}
.ak-canal-ligne input { position: absolute; opacity: 0; width: 0; height: 0; }
.ak-canal-ligne label:hover { color: var(--encre); }
.ak-canal-ligne label:has(input:checked) {
    background: var(--blanc);
    color: var(--orange);
    box-shadow: 0 1px 2px rgba(26,21,18,.06), 0 4px 10px -4px rgba(26,21,18,.18);
}
.ak-canal-ligne label:has(input:focus-visible) {
    outline: 2px solid var(--orange);
    outline-offset: 2px;
}

/* Le champ du code : six chiffres, larges et espacés. */
.ak-code {
    width: 100%;
    height: 72px;
    padding: 0 var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    background: var(--creme);
    font-family: inherit;
    font-size: 30px;
    font-weight: 800;
    text-align: center;
    letter-spacing: .38em;
    text-indent: .38em;   /* recentre : l'interlettrage pousse à droite */
    color: var(--encre);
    outline: none;
    font-variant-numeric: tabular-nums;
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie);
}
.ak-code:focus {
    border-color: var(--orange);
    background: var(--blanc);
    box-shadow: 0 0 0 4px rgba(248, 80, 0, .12);
}

.ak-nue__pied {
    margin-top: var(--e4);
    padding-top: var(--e4);
    border-top: 1px solid var(--trait);
    font-size: 13.5px;
    line-height: 1.6;
    color: var(--g1);
}
.ak-nue__pied a { color: var(--orange); font-weight: 600; }

/* La ligne de confiance, tout en bas de la carte. Trois faits courts : sur
   une page qui demande un numéro de téléphone, dire ce qu'on en fait n'est
   pas du décor. */
.ak-nue__confiance {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--e2) var(--e4);
    margin-top: var(--e5);
    font-size: 12.5px;
    color: var(--g2);
}
.ak-nue__confiance span { display: inline-flex; align-items: center; gap: 5px; }
.ak-nue__confiance svg { color: var(--vert); }

/* ── QUAND L'ÉCRAN EST COURT ──
   La page doit tenir SANS DÉFILEMENT, y compris sur un portable de 640 px de
   haut ou sur un grand écran zoomé. Plutôt que de laisser le navigateur
   trancher — il coupe le bas, donc le bouton —, on décide de l'ordre dans
   lequel les choses cèdent :

     1. les respirations se resserrent ;
     2. l'ÉTIQUETTE part — elle situe la page, elle ne la fait pas marcher ;
     3. la LIGNE DE CONFIANCE part — elle rassure, elle n'est pas nécessaire
        pour se connecter.

   Le champ, le canal et le bouton ne cèdent JAMAIS : ce sont eux, la page. */
@media (max-height: 780px) {
    .ak-nue__forme { padding-block: var(--e3); }
    .ak-nue__boite { padding-block: var(--e5); }
    .ak-nue__boite > p { margin-top: var(--e2); font-size: 14px; }
    .ak-nue__boite .ak-champ { margin-bottom: var(--e4); }
    .ak-nue__pied { margin-top: var(--e3); padding-top: var(--e3); font-size: 13px; }
    .ak-nue__confiance { margin-top: var(--e4); }
}

@media (max-height: 700px) {
    .ak-nue__oeil { display: none; }
    .ak-nue__boite h1 { margin-top: 0; }
    .ak-tel { height: 56px; }
    .ak-canal-ligne label { height: 42px; }
    .ak-nue__boite .ak-cta { height: 50px; }
}

@media (max-height: 620px) {
    .ak-nue__confiance { display: none; }
    .ak-nue__boite > p { display: none; }
}

@media (max-width: 900px) {
    /* LA PHOTO DEVIENT UN BANDEAU, pas une moitié d'écran — et la page doit
       TOUJOURS tenir sans défilement. Les deux lignes se partagent donc la
       hauteur : la photo prend ce qui reste, le formulaire prend ce qu'il
       lui faut. */
    .ak-nue__page { grid-template-columns: 1fr; grid-template-rows: minmax(0, 1fr) auto; }
    .ak-nue__photo { min-height: 130px; border-radius: 0 0 var(--r-carte) var(--r-carte); }
    /* LE CADRAGE CHANGE AVEC LA FORME DU PANNEAU.
       En colonne, la photo est haute et le visage tombe bien à 38 %. En
       bande, c'est une tranche : à 38 % on ne voit que le haut du crâne. On
       descend sur la main et le téléphone, qui se lisent même sur 130 px. */
    .ak-nue__photo img { object-position: center 62%; }
    /* Pas de chevauchement en colonne : il n'y a plus de couture à enjamber,
       et une marge négative y mangerait le bord de l'écran. */
    .ak-nue__forme {
        margin-left: 0;
        padding: var(--e4) var(--gouttiere) var(--e5);
        justify-content: flex-start;
    }
    .ak-nue__boite {
        padding: var(--e5);
        box-shadow: 0 1px 2px rgba(26,21,18,.04), 0 12px 28px -14px rgba(26,21,18,.16);
    }
    .ak-nue__logo { top: var(--e4); left: var(--gouttiere); }
    .ak-nue__logo img { width: 46px; height: 46px; }
}

/* ═══════════════════════════════════════════════════════════════════════
   NOUS CONTACTER — 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Sa demande : uniquement l'adresse, le téléphone et les réseaux à gauche,
   une image à droite.

   ── LA COMPOSITION ──

   Asymétrique, 45 / 55 : l'image domine, le contenu se pose à côté. Deux
   moitiés égales n'ont pas de sujet — c'est ce qui rendait la connexion
   fade avant qu'on la reprenne.

   Les coordonnées ne sont pas une LISTE mais des CARTES : chacune porte son
   icône, sa valeur et son geste — appeler, ouvrir l'itinéraire, écrire. Une
   adresse qu'on ne peut que lire oblige à la recopier dans une autre
   application.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-contact {
    display: grid;
    grid-template-columns: 45fr 55fr;
    gap: var(--e8);
    align-items: center;
    padding-block: var(--e9);
}

.ak-contact__oeil {
    display: inline-flex;
    align-items: center;
    gap: var(--e2);
    padding: 5px var(--e4) 5px 5px;
    background: var(--orange-doux);
    color: var(--orange);
    border-radius: var(--r-pastille);
    font-size: 12.5px;
    font-weight: 700;
}
.ak-contact__oeil span {
    display: grid;
    place-items: center;
    width: 24px; height: 24px;
    border-radius: var(--r-pastille);
    background: var(--blanc);
}

/* LE TITRE PREND SA PLACE — 19/08/2026.
 *
 * Il plafonnait à 48 px. Sur une page qui ne porte que trois coordonnées, la
 * colonne de gauche est aux trois quarts vide : le titre peut, et doit,
 * occuper ce vide. C'est lui qui donne son ton à la page, pas la liste.
 *
 * L'interlettrage se resserre à mesure qu'il grossit : à cette taille, un
 * espacement normal fait paraître les mots dispersés. */
.ak-contact h1 {
    margin-top: var(--e4);
    font-size: clamp(38px, 5vw, 68px);
    font-weight: 800;
    letter-spacing: -.045em;
    line-height: .98;
}
.ak-contact h1 em { font-style: normal; color: var(--orange); }

.ak-contact__intro {
    margin-top: var(--e4);
    max-width: 42ch;
    font-size: 16px;
    line-height: 1.6;
    color: var(--g1);
}

/* ── LES COORDONNÉES, SANS CADRE ──
   Elles étaient dans trois boîtes bordées — « les cards me dérangent un
   peu ». Il a raison : trois rectangles gris empilés sous un grand titre
   font retomber la page, et l'encadré n'apporte rien qu'un filet ne dise
   mieux.

   Traitement éditorial : un intitulé en petites capitales, la valeur en
   grand, un simple filet entre chaque. Ce qui SE PASSE au survol remplace le
   cadre — une barre orange pousse à gauche, la ligne avance, la flèche
   apparaît. Le mouvement dit « cliquable » là où la bordure ne disait rien. */
/* AUCUN SÉPARATEUR — son constat du 19/08/2026.
   Les filets faisaient revenir la grille qu'on venait de retirer avec les
   cadres : trois lignes soulignées, c'est encore un tableau. Ce qui sépare
   maintenant, c'est l'ESPACE, et ce qui rassemble, c'est l'alignement. */
.ak-coordonnees {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-top: var(--e6);
}

.ak-coordonnee {
    display: flex;
    align-items: center;
    gap: var(--e4);
    padding: var(--e4) var(--e3);
    transition: transform var(--t-vif) var(--e-sortie);
}

/* ── LE SURVOL, SANS BARRE NI APLAT ──
   Il portait une barre orange à gauche et un fond teinté : deux marques pour
   dire une seule chose, et la barre remettait un bord là où on venait de
   retirer les cadres.

   Ce qui bouge maintenant, c'est ce qui PORTE l'information :
     · l'icône s'allume dans un disque orange très pâle ;
     · l'intitulé passe à l'orange ;
     · la flèche entre par la droite.
   La ligne entière glisse de trois pixels — assez pour qu'on la sente
   vivante, trop peu pour qu'on la voie bouger. */
.ak-coordonnee:hover { transform: translateX(3px); }

.ak-coordonnee__ico {
    flex: none;
    display: grid;
    place-items: center;
    width: 42px; height: 42px;
    border-radius: var(--r-pastille);
    background: transparent;
    color: var(--g2);
    transition: background var(--t-moyen) var(--e-sortie), color var(--t-moyen) var(--e-sortie);
}
.ak-coordonnee:hover .ak-coordonnee__ico {
    background: var(--orange-doux);
    color: var(--orange);
}

.ak-coordonnee small {
    display: block;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--g2);
    transition: color var(--t-moyen) var(--e-sortie);
}
.ak-coordonnee:hover small { color: var(--orange); }

.ak-coordonnee strong {
    display: block;
    margin-top: 3px;
    font-size: 19px;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--encre);
    line-height: 1.25;
}

.ak-coordonnee > svg:last-child {
    flex: none;
    margin-left: auto;
    color: var(--orange);
    opacity: 0;
    transform: translateX(-8px);
    transition: opacity var(--t-moyen) var(--e-sortie), transform var(--t-moyen) var(--e-sortie);
}
.ak-coordonnee:hover > svg:last-child { opacity: 1; transform: none; }

/* ── LES RÉSEAUX ── */
.ak-reseaux {
    display: flex;
    align-items: center;
    gap: var(--e4);
    margin-top: var(--e6);
}
.ak-reseaux > p {
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--g2);
    white-space: nowrap;
}
.ak-reseaux__liste { display: flex; flex-wrap: wrap; gap: var(--e2); }
.ak-reseaux__liste a {
    width: 46px; height: 46px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    background: var(--creme);
    color: var(--encre);
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-reseaux__liste a:hover {
    background: var(--orange);
    color: var(--sur-couleur);
    transform: translateY(-3px);
}

/* ── L'IMAGE, DANS UN CADRE DÉCALÉ ──
   Un liseré orange glissé derrière la photo, en biais de seize pixels. C'est
   un procédé d'édition : il donne de la profondeur sans ombre lourde, et il
   fait entrer l'accent de la marque dans une zone qui n'en avait aucun.

   Le bloc était auparavant une photo posée dans un rectangle arrondi —
   correct, mais muet. */
/* LE CADRE SE DESSINE SUR LA PHOTO, PAS SUR LA COLONNE.
 *
 * La photo est bornée en hauteur, donc plus étroite que la colonne qui la
 * contient : le liseré, tracé sur celle-ci, dépassait de cent cinquante
 * pixels à droite et flottait dans le vide. On borne donc le conteneur à la
 * largeur que la photo occupe réellement — 5/6 de sa hauteur maximale. */
.ak-contact__cadre {
    position: relative;
    width: 100%;
    max-width: 550px;      /* 660 × 5/6 */
    margin-left: auto;
}
/* UN BLOC PLEIN GLISSÉ DERRIÈRE, ET NON UN FILET.
 *
 * Le liseré de deux pixels se lisait comme un trait oublié : trop fin pour
 * faire une forme, trop visible pour disparaître. Un aplat doux dans la
 * couleur de la marque donne du volume, tient le regard sous la photo, et
 * porte l'accent sans le crier.
 *
 * Un halo l'accompagne : sans lui, la photo posée sur du blanc paraît
 * découpée et collée. */
.ak-contact__cadre::before {
    content: '';
    position: absolute;
    inset: 26px -26px -26px 26px;
    background: var(--orange-doux);
    border-radius: 30px;
    pointer-events: none;
}
.ak-contact__cadre::after {
    content: '';
    position: absolute;
    inset: -8% -14% -14% -8%;
    z-index: -1;
    background: radial-gradient(55% 50% at 45% 50%, rgba(248,80,0,.14), transparent 72%);
    pointer-events: none;
}

.ak-contact__image {
    position: relative;
    aspect-ratio: 5 / 6;
    border-radius: 28px;
    overflow: hidden;
    background:
        radial-gradient(110% 80% at 25% 15%, rgba(248,80,0,.28), transparent 62%),
        linear-gradient(160deg, #241C18 0%, var(--fond-sombre) 65%);
    box-shadow: 0 24px 60px -30px rgba(26,21,18,.4);
}
.ak-contact__image picture,
.ak-nue__photo picture { display: contents; }
.ak-contact__image img { width: 100%; height: 100%; object-fit: cover; }

.ak-contact__image::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: radial-gradient(rgba(255,255,255,.14) 1.6px, transparent 1.6px);
    background-size: 22px 22px;
    pointer-events: none;
}
.ak-contact__image:has(img)::before { display: none; }

.ak-contact__marque {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    z-index: 1;
}
.ak-contact__marque img { width: 96px; height: 96px; object-fit: contain; opacity: .9; }

/* Le voile du bas, pour que les horaires se lisent sur n'importe quelle
   photo déposée un jour. */
.ak-contact__image::after {
    content: '';
    position: absolute;
    inset: auto 0 0 0;
    height: 48%;
    background: linear-gradient(180deg, transparent, rgba(26,21,18,.72));
    pointer-events: none;
}

/* ── LES HORAIRES, À MÊME LA PHOTO ──
   Le médaillon blanc était une carte de plus, et elle masquait le tiers bas
   de l'image. Le texte est maintenant posé sur le voile : rien à cacher,
   rien à encadrer. */
.ak-horaires {
    position: absolute;
    left: var(--e5); right: var(--e5); bottom: var(--e5);
    z-index: 2;
    display: flex;
    align-items: center;
    gap: var(--e3);
    color: var(--sur-couleur);
}
.ak-horaires__ico {
    flex: none;
    display: grid;
    place-items: center;
    width: 38px; height: 38px;
    border-radius: var(--r-pastille);
    background: rgba(255,255,255,.16);
    backdrop-filter: blur(6px);
}
.ak-horaires small {
    display: block;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: rgba(255,255,255,.7);
}
.ak-horaires strong {
    display: block;
    margin-top: 1px;
    font-size: 15px;
    font-weight: 700;
    line-height: 1.3;
}

@media (max-width: 940px) {
    .ak-contact { grid-template-columns: 1fr; gap: var(--e6); padding-block: var(--e7); }
    /* L'image passe SOUS les coordonnées : on vient chercher un numéro, pas
       une photographie. */
    .ak-contact__cadre { order: 2; }
    .ak-contact__cadre::before { display: none; }   /* pas de place pour le décalage */
    .ak-contact__image { aspect-ratio: 16 / 11; max-height: none; }
    .ak-contact__texte { order: 1; }
}

/* ═══════════════════════════════════════════════════════════════════════
   RESTITUÉ LE 19/08/2026 — ce bloc avait disparu.

   Trente classes posées dans le panier, la commande et la confirmation
   n'avaient plus AUCUNE règle : les trois pages de la transaction étaient
   nues. Emportées par une réécriture de section voisine, sans erreur, sans
   trace — une page sans CSS s'affiche toujours, simplement laide.

   Depuis, un contrôle compare les classes des vues à celles de la feuille
   (voir la note en tête de fichier). C'est ce contrôle qui a trouvé ceci.
   ═══════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════
   LE PANIER, LA COMMANDE, LA CONFIRMATION — 19/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Trois pages de transaction. Elles fonctionnaient déjà ; il leur manquait
   le design. Une régression y coûte une commande, pas un pixel — chaque
   champ, chaque route et chaque garde du formulaire ont été repris à
   l'identique.

   Une composition commune : le travail à gauche, un RÉCAPITULATIF COLLANT à
   droite. C'est la disposition qu'on attend d'une caisse, et le collant n'est
   pas décoratif : sur un panier de huit articles, le total sort de l'écran et
   il faut redescendre pour savoir ce qu'on paie.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-caisse {
    display: grid;
    grid-template-columns: 1fr 380px;
    gap: var(--e7);
    align-items: start;
    padding-block: var(--e7) var(--e9);
}

/* ── LE RÉCAPITULATIF ── */
.ak-recap {
    position: sticky;
    top: 104px;
    padding: var(--e5);
    background: var(--creme);
    border-radius: var(--r-carte);
}
.ak-recap h2 {
    font-size: 18px;
    font-weight: 700;
    padding-bottom: var(--e4);
    border-bottom: 1px solid var(--trait);
}
.ak-recap__ligne {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e4);
    padding-block: var(--e3);
    font-size: 14.5px;
    color: var(--g1);
}
.ak-recap__ligne strong { color: var(--encre); font-weight: 600; font-variant-numeric: tabular-nums; }

.ak-recap__total {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e4);
    margin-top: var(--e3);
    padding-top: var(--e4);
    border-top: 1.5px solid var(--trait-fort);
}
.ak-recap__total span { font-size: 13px; font-weight: 700; letter-spacing: .04em; color: var(--g1); }
.ak-recap__total strong {
    font-size: 24px;
    font-weight: 800;
    letter-spacing: -.03em;
    font-variant-numeric: tabular-nums;
}

.ak-recap__note {
    margin-top: var(--e3);
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--g2);
}


/* ── LES LIGNES DU PANIER ── */
.ak-panier__lignes { display: flex; flex-direction: column; }

.ak-ligne {
    display: grid;
    grid-template-columns: 96px 1fr auto;
    gap: var(--e4);
    align-items: center;
    padding-block: var(--e5);
    border-bottom: 1px solid var(--trait);
}
.ak-ligne:first-child { padding-top: 0; }

.ak-ligne__photo {
    width: 96px; height: 96px;
    border-radius: var(--r-champ);
    overflow: hidden;
    background: var(--fond-photo);
}
.ak-ligne__photo img { width: 100%; height: 100%; object-fit: contain; }

.ak-ligne__nom {
    font-size: 15.5px;
    font-weight: 700;
    line-height: 1.3;
    color: var(--encre);
}
.ak-ligne__nom:hover { color: var(--orange); }
.ak-ligne__meta {
    margin-top: 3px;
    font-size: 13px;
    color: var(--g1);
    font-variant-numeric: tabular-nums;
}

.ak-ligne__droite {
    display: flex;
    align-items: center;
    gap: var(--e5);
}

/* La quantité. Le champ s'envoie tout seul quand JavaScript est là ; sans
   lui, la touche Entrée fait le même travail, et le bouton de secours
   apparaît. */
.ak-qte {
    display: flex;
    align-items: center;
    gap: var(--e2);
}
.ak-qte input {
    width: 68px;
    height: 42px;
    padding-inline: var(--e3);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    background: var(--blanc);
    font-family: inherit;
    font-size: 15px;
    font-weight: 600;
    text-align: center;
    color: var(--encre);
    outline: none;
    font-variant-numeric: tabular-nums;
}
.ak-qte input:focus { border-color: var(--g3); }

.ak-ligne__soustotal {
    min-width: 100px;
    text-align: right;
    font-size: 16.5px;
    font-weight: 800;
    letter-spacing: -.02em;
    font-variant-numeric: tabular-nums;
}

.ak-ligne__retirer {
    width: 38px; height: 38px;
    display: grid;
    place-items: center;
    border: none;
    background: transparent;
    border-radius: var(--r-pastille);
    color: var(--g2);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-ligne__retirer:hover { background: var(--rouge-doux); color: var(--rouge); }

/* ── LE FORMULAIRE DE COMMANDE ── */
.ak-champ { margin-bottom: var(--e5); }
.ak-champ > label {
    display: block;
    margin-bottom: var(--e2);
    font-size: 14px;
    font-weight: 600;
    color: var(--encre);
}
.ak-champ input[type="text"],
.ak-champ input[type="tel"],
.ak-champ textarea {
    width: 100%;
    padding: var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    background: var(--blanc);
    font-family: inherit;
    /* 16 px : en dessous, iOS zoome sur le champ à la mise au point. */
    font-size: 16px;
    color: var(--encre);
    outline: none;
    transition: border-color var(--t-vif) var(--e-sortie);
}
.ak-champ input:focus, .ak-champ textarea:focus { border-color: var(--g3); }
.ak-champ textarea { min-height: 96px; resize: vertical; }

.ak-champ__erreur {
    display: block;
    margin-top: var(--e2);
    font-size: 13px;
    font-weight: 600;
    color: var(--rouge);
}
.ak-champ__aide { display: block; margin-top: var(--e2); font-size: 13px; color: var(--g1); }

.ak-bloc {
    padding: var(--e5);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    margin-bottom: var(--e5);
}
.ak-bloc > h2 {
    font-size: 17px;
    font-weight: 700;
    margin-bottom: var(--e5);
}

/* ── L'ADRESSE ET SES SUGGESTIONS ── */
.ak-adresse { position: relative; }
.ak-suggestions {
    position: absolute;
    top: calc(100% + 4px);
    left: 0; right: 0;
    z-index: 30;
    max-height: 260px;
    overflow-y: auto;
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-champ);
    box-shadow: var(--ombre-carte);
}
.ak-suggestions[hidden] { display: none; }
.ak-suggestion {
    display: block;
    width: 100%;
    padding: var(--e3) var(--e4);
    border: none;
    border-bottom: 1px solid var(--trait);
    background: transparent;
    text-align: left;
    font-family: inherit;
    cursor: pointer;
}
.ak-suggestion:last-child { border-bottom: none; }
.ak-suggestion:hover, .ak-suggestion:focus-visible { background: var(--creme); }
.ak-suggestion strong { display: block; font-size: 14.5px; font-weight: 600; color: var(--encre); }
.ak-suggestion span { display: block; font-size: 12.5px; color: var(--g2); }

.ak-adresse__ok {
    display: flex;
    align-items: center;
    gap: var(--e2);
    margin-top: var(--e2);
    font-size: 13px;
    font-weight: 600;
    color: var(--vert);
}
.ak-adresse__ok[hidden] { display: none; }

/* ── LE CHOIX DU PAIEMENT ── */
.ak-paiement { display: flex; flex-direction: column; gap: var(--e3); }
.ak-paiement label {
    display: flex;
    align-items: center;
    gap: var(--e4);
    padding: var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
.ak-paiement label:hover { border-color: var(--g3); }
.ak-paiement input { accent-color: var(--orange); width: 18px; height: 18px; flex: none; }
.ak-paiement label:has(input:checked) {
    border-color: var(--orange);
    background: var(--orange-doux);
}
.ak-paiement strong { display: block; font-size: 15px; font-weight: 700; }
.ak-paiement small { display: block; font-size: 13px; color: var(--g1); }

/* ── LE RÉCAPITULATIF COMPACT DE LA COMMANDE ── */
.ak-recap__article {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding-block: var(--e3);
    border-bottom: 1px solid var(--trait);
    font-size: 13.5px;
}
.ak-recap__article:last-of-type { border-bottom: none; }
.ak-recap__article img {
    width: 48px; height: 48px;
    flex: none;
    border-radius: 10px;
    object-fit: contain;
    background: var(--fond-photo);
}
.ak-recap__article b { display: block; font-weight: 600; color: var(--encre); }
.ak-recap__article span { color: var(--g2); }
.ak-recap__article em {
    margin-left: auto;
    font-style: normal;
    font-weight: 700;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

/* ── LA CONFIRMATION ── */
.ak-merci {
    max-width: 560px;
    margin-inline: auto;
    padding-block: var(--e9);
    text-align: center;
}
.ak-merci__sceau {
    width: 84px; height: 84px;
    margin-inline: auto;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    background: var(--vert-doux);
    color: var(--vert);
}
.ak-merci h1 {
    margin-top: var(--e5);
    font-size: clamp(28px, 4vw, 38px);
    font-weight: 800;
    letter-spacing: -.03em;
}
.ak-merci__texte {
    margin-top: var(--e3);
    font-size: 16px;
    color: var(--g1);
    line-height: 1.6;
}
.ak-merci__fiche {
    margin-top: var(--e6);
    padding: var(--e5);
    background: var(--creme);
    border-radius: var(--r-carte);
    text-align: left;
}
.ak-merci__boutons {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--e3);
    margin-top: var(--e6);
}

@media (max-width: 940px) {
    .ak-caisse { grid-template-columns: 1fr; gap: var(--e5); }
    .ak-recap { position: static; }
}
@media (max-width: 620px) {
    .ak-ligne { grid-template-columns: 72px 1fr; gap: var(--e3); }
    .ak-ligne__photo { width: 72px; height: 72px; }
    .ak-ligne__droite { grid-column: 1 / -1; justify-content: space-between; gap: var(--e3); }
}
/* ═══════════════════════════════════════════════════════════════════════
   LE CHAT FLOTTANT — 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Il parle à la MÊME boîte de réception que l'application : un visiteur du
   site et un visiteur de l'app arrivent au même endroit, avec la même
   fusion WhatsApp et les mêmes notifications. Rien n'a été dupliqué côté
   ERP, le site s'est branché sur ce qui existait.

   ── POURQUOI IL NE S'OUVRE PAS TOUT SEUL ──

   Aucune ouverture automatique, aucun message d'accroche au bout de dix
   secondes. Un panneau qui surgit pendant qu'on lit un prix est la première
   chose qu'on ferme, et la deuxième qu'on n'ouvrira plus.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-chat {
    position: fixed;
    right: clamp(14px, 2vw, 26px);
    bottom: clamp(14px, 2vw, 26px);
    z-index: 200;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: var(--e3);
}

/* ── LA BULLE ── */
.ak-chat__bulle {
    position: relative;
    display: grid;
    place-items: center;
    width: 58px; height: 58px;
    border: none;
    border-radius: var(--r-pastille);
    background: var(--orange);
    color: var(--sur-couleur);
    cursor: pointer;
    box-shadow: 0 12px 28px -10px rgba(248,80,0,.7);
    transition: transform var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
.ak-chat__bulle:hover { background: var(--orange-fonce); transform: translateY(-2px); }
.ak-chat__bulle .ak-chat__fermer { display: none; }
.ak-chat.est-ouvert .ak-chat__bulle .ak-chat__parler { display: none; }
.ak-chat.est-ouvert .ak-chat__bulle .ak-chat__fermer { display: block; }

/* La pastille des non-lus. Elle ne paraît que s'il y a vraiment quelque
   chose à lire — un « 0 » permanent est du bruit. */
/* `display: grid` battait l'attribut `hidden` du navigateur : la pastille
   affichait « 0 » en permanence. Un attribut qui dit « caché » doit cacher. */
.ak-chat__compte[hidden] { display: none; }
.ak-chat__compte {
    position: absolute;
    top: -3px; right: -3px;
    min-width: 22px; height: 22px;
    padding-inline: 5px;
    display: grid;
    place-items: center;
    border-radius: var(--r-pastille);
    border: 2px solid var(--blanc);
    background: var(--encre);
    color: var(--creme);
    font-size: 11.5px;
    font-weight: 800;
}

/* ── LE PANNEAU ── */
.ak-chat__boite {
    display: none;
    flex-direction: column;
    width: min(380px, calc(100vw - 28px));
    height: min(560px, calc(100vh - 120px));
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: 20px;
    overflow: hidden;
    box-shadow: 0 30px 70px -30px rgba(26,21,18,.55);
}
.ak-chat.est-ouvert .ak-chat__boite { display: flex; }

.ak-chat__tete {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: var(--e4) var(--e5);
    background: var(--fond-sombre);
    color: var(--sur-couleur);
}
.ak-chat__tete img { width: 38px; height: 38px; border-radius: var(--r-pastille); }
.ak-chat__tete strong { display: block; font-size: 15px; font-weight: 700; letter-spacing: -.02em; }
.ak-chat__tete small { display: block; font-size: 12px; color: rgba(255,255,255,.6); }

/* ── LE FIL ── */
.ak-chat__fil {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: var(--e4);
    display: flex;
    flex-direction: column;
    gap: var(--e3);
    background: var(--creme);
    scrollbar-width: thin;
    scrollbar-color: var(--trait-fort) transparent;
}
.ak-chat__mot {
    max-width: 82%;
    padding: 9px var(--e4);
    border-radius: 16px;
    font-size: 14.5px;
    line-height: 1.5;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
}
/* Le mien à droite, en orange ; le leur à gauche, sur une surface. C'est la
   convention de toutes les messageries : la contredire oblige à lire les
   noms pour savoir qui parle. */
.ak-chat__mot--moi {
    align-self: flex-end;
    background: var(--orange);
    color: var(--sur-couleur);
    border-bottom-right-radius: 5px;
}
.ak-chat__mot--eux {
    align-self: flex-start;
    background: var(--blanc);
    border: 1px solid var(--trait);
    color: var(--encre);
    border-bottom-left-radius: 5px;
}
.ak-chat__mot img {
    display: block;
    max-width: 100%;
    border-radius: 10px;
    margin-bottom: 6px;
}
.ak-chat__mot a { text-decoration: underline; text-underline-offset: 3px; }
.ak-chat__pied-mot {
    display: block;
    margin-top: 4px;
    font-size: 11px;
    opacity: .62;
    text-align: right;
}

.ak-chat__vide {
    margin: auto;
    padding: var(--e5);
    text-align: center;
    font-size: 14px;
    line-height: 1.6;
    color: var(--g1);
}
.ak-chat__vide strong { display: block; margin-bottom: 6px; color: var(--encre); font-size: 15px; }

/* ── L'IDENTIFICATION, après le premier message ── */
/* IL PREND LE TIERS DU PANNEAU, IL NE LE PRENDRA PLUS.
   Sur sa capture, le bloc du numéro poussait la conversation hors de vue et
   restait là indéfiniment. Il tient maintenant sur deux lignes, et il se
   ferme : une demande qu'on ne peut pas écarter n'est plus une demande,
   c'est un péage. */
.ak-chat__ident {
    position: relative;
    display: none;
    padding: var(--e3) var(--e4);
    border-top: 1px solid var(--trait);
    background: var(--blanc);
}
.ak-chat__ident.est-visible { display: block; }
.ak-chat__ident p {
    font-size: 12.5px;
    line-height: 1.4;
    color: var(--g1);
    margin-bottom: 7px;
    /* La place du lien « Plus tard », réservée en dur : mesurée sur le rendu,
       la marge symbolique laissait le texte passer dessous. */
    padding-right: 76px;
}
/* `.ak-chat__ident button` (0,2,0) battait `.ak-chat__ident-plus-tard`
   (0,1,0) : le lien discret héritait du bouton plein et se posait en pastille
   sombre par-dessus le texte. Vu sur sa capture. */
.ak-chat__ident .ak-chat__ident-plus-tard {
    position: absolute;
    top: 6px; right: 8px;
    padding: 2px 6px;
    border: none;
    background: none;
    color: var(--g2);
    font-family: inherit;
    font-size: 11.5px;
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}
.ak-chat__ident .ak-chat__ident-plus-tard:hover { color: var(--orange); }
.ak-chat__ident-champs { display: flex; gap: 6px; }
.ak-chat__ident input {
    min-width: 0;
    flex: 1;
    height: 38px;
    padding-inline: var(--e3);
    border: 1px solid var(--trait);
    border-radius: 11px;
    background: var(--creme);
    color: var(--encre);
    font-family: inherit;
    font-size: 14px;
    outline: none;
}
.ak-chat__ident input:focus { border-color: var(--orange); }
.ak-chat__ident button {
    flex: none;
    height: 38px;
    padding-inline: var(--e4);
    border: none;
    border-radius: 11px;
    background: var(--encre);
    color: var(--creme);
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 700;
    cursor: pointer;
}

/* ── LE COMPOSEUR ── */
.ak-chat__ecrire {
    display: flex;
    align-items: flex-end;
    gap: 6px;
    padding: var(--e3);
    border-top: 1px solid var(--trait);
    background: var(--blanc);
}
.ak-chat__ecrire textarea {
    flex: 1;
    min-width: 0;
    min-height: 42px;
    max-height: 120px;
    padding: 11px var(--e3);
    border: 1px solid var(--trait);
    border-radius: 12px;
    background: var(--creme);
    color: var(--encre);
    font-family: inherit;
    font-size: 14.5px;
    line-height: 1.4;
    resize: none;
    outline: none;
    /* Le champ grandit tout seul jusqu'à 120 px : la barre de défilement n'a
       donc jamais rien à faire dedans. Sous Windows elle s'affichait quand
       même, flèches comprises, en plein milieu de la zone de frappe. */
    overflow-y: auto;
    scrollbar-width: none;
}
.ak-chat__ecrire textarea::-webkit-scrollbar { display: none; }
.ak-chat__ecrire textarea:focus { border-color: var(--orange); }
.ak-chat__ecrire button,
.ak-chat__ecrire label {
    flex: none;
    display: grid;
    place-items: center;
    width: 42px; height: 42px;
    border: none;
    border-radius: 12px;
    background: transparent;
    color: var(--g1);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-chat__ecrire label:hover { background: var(--creme); color: var(--orange); }
.ak-chat__envoi { background: var(--orange) !important; color: var(--sur-couleur); }
.ak-chat__envoi:hover { background: var(--orange-fonce) !important; }
.ak-chat__envoi:disabled { opacity: .45; cursor: default; }

.ak-chat__joint {
    display: none;
    padding: 0 var(--e3) var(--e3);
    font-size: 12.5px;
    color: var(--g1);
    background: var(--blanc);
}
.ak-chat__joint.est-visible { display: block; }

@media (max-width: 480px) {
    .ak-chat__boite { height: min(72vh, calc(100vh - 96px)); }
}

/* ── LE CHAT, SECONDE PASSE : LINA, LA PRÉSENCE ET LE MOUVEMENT ──────────
   20/08/2026.

   Trois principes tiennent tout ce qui suit :

   1. ATTIRER SANS HARCELER. La bulle bat UNE fois, l'invitation paraît UNE
      fois, et le navigateur s'en souvient. Un widget qui relance à chaque
      page est la première chose qu'on ferme et la dernière qu'on rouvre.
   2. NE RIEN PROMETTRE QU'ON NE TIENNE. Le point vert n'est pas décoratif :
      il se calcule sur les horaires de l'ERP. Hors ouverture, il est gris et
      le dit.
   3. LE MOUVEMENT SERT LA LECTURE. Le panneau s'ouvre DEPUIS la bulle, les
      messages montent de six pixels, les points d'écriture disent qu'une
      réponse arrive. Rien ne bouge sans raison, et tout s'arrête si le
      visiteur a demandé moins d'animations.
   ─────────────────────────────────────────────────────────────────────── */

/* ── LE BATTEMENT D'APPEL, une seule fois ── */
@keyframes ak-chat-appel {
    0%, 100% { box-shadow: 0 12px 28px -10px rgba(248,80,0,.7), 0 0 0 0 rgba(248,80,0,.5); }
    50%      { box-shadow: 0 12px 28px -10px rgba(248,80,0,.7), 0 0 0 14px rgba(248,80,0,0); }
}
.ak-chat__bulle.appelle { animation: ak-chat-appel 1.6s ease-out 3; }

/* ── L'INVITATION DE LINA ── */
.ak-chat__invite {
    position: relative;
    display: none;
    align-items: center;
    gap: var(--e3);
    max-width: 268px;
    padding: var(--e3) var(--e4) var(--e3) var(--e3);
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: 16px 16px 4px 16px;
    box-shadow: 0 16px 34px -20px rgba(26,21,18,.5);
    cursor: pointer;
    animation: ak-chat-monte .42s var(--e-sortie) both;
}
.ak-chat__invite.est-visible { display: flex; }
.ak-chat__invite img { width: 38px; height: 38px; border-radius: var(--r-pastille); flex: none; }
.ak-chat__invite strong { display: block; font-size: 13.5px; font-weight: 800; color: var(--encre); }
.ak-chat__invite small { display: block; font-size: 12.5px; line-height: 1.4; color: var(--g1); }
.ak-chat__invite-fermer {
    position: absolute;
    top: -7px; right: -7px;
    width: 22px; height: 22px;
    display: grid;
    place-items: center;
    border: 1px solid var(--trait);
    border-radius: var(--r-pastille);
    background: var(--blanc);
    color: var(--g1);
    font-size: 13px;
    line-height: 1;
    cursor: pointer;
}

@keyframes ak-chat-monte {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: none; }
}

/* ── L'OUVERTURE DU PANNEAU, depuis la bulle ── */
@keyframes ak-chat-ouvre {
    from { opacity: 0; transform: translateY(14px) scale(.96); }
    to   { opacity: 1; transform: none; }
}
.ak-chat.est-ouvert .ak-chat__boite {
    transform-origin: 100% 100%;
    animation: ak-chat-ouvre .3s var(--e-sortie) both;
}
.ak-chat__mot { animation: ak-chat-monte .28s var(--e-sortie) both; }

/* ── LA TÊTE : LINA, ET SA PRÉSENCE ── */
.ak-chat__tete { position: relative; }
.ak-chat__portrait { position: relative; flex: none; }
.ak-chat__pastille {
    position: absolute;
    right: -1px; bottom: -1px;
    width: 12px; height: 12px;
    border-radius: var(--r-pastille);
    border: 2px solid var(--fond-sombre);
    background: var(--g2);
}
.ak-chat__pastille.est-ouvert { background: #3FD07A; }
.ak-chat__tete small { display: flex; align-items: center; gap: 5px; }

/* ── LES POINTS D'ÉCRITURE ── */
.ak-chat__ecrit {
    align-self: flex-start;
    display: none;
    gap: 4px;
    padding: 12px var(--e4);
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: 16px 16px 16px 5px;
}
.ak-chat__ecrit.est-visible { display: flex; }
.ak-chat__ecrit i {
    width: 6px; height: 6px;
    border-radius: var(--r-pastille);
    background: var(--g2);
    animation: ak-chat-point 1.2s ease-in-out infinite;
}
.ak-chat__ecrit i:nth-child(2) { animation-delay: .18s; }
.ak-chat__ecrit i:nth-child(3) { animation-delay: .36s; }
@keyframes ak-chat-point {
    0%, 60%, 100% { transform: none; opacity: .45; }
    30%           { transform: translateY(-4px); opacity: 1; }
}

/* ── LES RACCOURCIS ──
   Trois questions qu'on pose vraiment au comptoir. Ils disparaissent dès que
   la conversation a commencé : des suggestions au milieu d'un échange sont
   du bruit. */
/* Le mot d'accueil est écrit dans la page, indenté comme du HTML lisible —
   et `pre-wrap`, indispensable pour les messages tapés, rendait cette
   indentation à l'écran. Elle seule revient à la ligne normalement. */
#ak-chat-accueil { white-space: normal; }

.ak-chat__raccourcis {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: var(--e3);
}
.ak-chat__raccourcis button {
    padding: 7px var(--e3);
    border: 1px solid var(--trait);
    border-radius: 99px;
    background: var(--blanc);
    color: var(--encre);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie);
}
.ak-chat__raccourcis button:hover { border-color: var(--orange); color: var(--orange); transform: translateY(-1px); }

/* ── LE SÉPARATEUR DE JOUR ── */
.ak-chat__jour {
    align-self: center;
    padding: 3px var(--e3);
    border-radius: 99px;
    background: var(--blanc);
    border: 1px solid var(--trait);
    font-size: 11.5px;
    font-weight: 600;
    color: var(--g1);
}

/* ── L'ACCUSÉ DE LECTURE ── */
.ak-chat__vu { margin-left: 5px; font-weight: 700; }

@media (prefers-reduced-motion: reduce) {
    .ak-chat__bulle.appelle,
    .ak-chat.est-ouvert .ak-chat__boite,
    .ak-chat__mot,
    .ak-chat__invite { animation: none; }
    .ak-chat__ecrit i { animation: none; }
}

/* ── LE CHAT, TROISIÈME PASSE : LINA A UN VISAGE ─────────────────────────
   20/08/2026. Sa demande : « plus pro — l'en-tête, les icônes,
   l'interaction ». Le portrait est une photo de banque d'images, à
   remplacer par celle d'une personne de l'équipe quand il y en aura une :
   un seul fichier à déposer. */

.ak-chat__tete { gap: var(--e4); }
.ak-chat__portrait img {
    width: 42px; height: 42px;
    border-radius: var(--r-pastille);
    object-fit: cover;
    /* Un anneau clair détache le portrait du fond sombre de l'en-tête. */
    border: 2px solid rgba(255,255,255,.18);
}
.ak-chat__qui { flex: 1; min-width: 0; }
.ak-chat__qui strong { font-size: 16px; letter-spacing: -.025em; }
.ak-chat__reduire {
    flex: none;
    display: grid;
    place-items: center;
    width: 32px; height: 32px;
    border: none;
    border-radius: 10px;
    background: rgba(255,255,255,.09);
    color: var(--sur-couleur);
    cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-chat__reduire:hover { background: rgba(255,255,255,.2); }

/* ── LA LIGNE : frimousse + bulle ── */
/* `display: flex` battait l'attribut `hidden` : les points d'écriture
   restaient à l'écran sous le mot d'accueil. Le même piège que la pastille
   des non-lus, deux heures plus tôt — il se referme partout où une règle
   d'affichage croise un attribut du navigateur. */
.ak-chat__ligne[hidden] { display: none; }
.ak-chat__ligne {
    display: flex;
    /* La frimousse se cale en HAUT de la bulle : sur un message long, calée
       en bas, elle paraissait appartenir au message suivant. */
    align-items: flex-start;
    gap: 8px;
    max-width: 100%;
}
.ak-chat__ligne--moi { justify-content: flex-end; }
.ak-chat__ligne .ak-chat__mot { max-width: none; }
.ak-chat__ligne:not(.ak-chat__ligne--moi) .ak-chat__mot { max-width: 82%; }

.ak-chat__frimousse {
    flex: none;
    width: 30px; height: 30px;
    border-radius: var(--r-pastille);
    object-fit: cover;
}
/* Quand la personne a un nom, c'est son initiale — jamais le visage de Lina
   sur les mots de quelqu'un d'autre. */
.ak-chat__frimousse--lettre {
    display: grid;
    place-items: center;
    background: var(--encre);
    color: var(--creme);
    font-size: 13px;
    font-weight: 800;
}

/* ── LE CHAMP FERMÉ PENDANT QU'ON DEMANDE LE NUMÉRO ── */
.ak-chat__ecrire textarea:disabled {
    opacity: .55;
    cursor: not-allowed;
}
.ak-chat__ident.est-visible ~ .ak-chat__ecrire { background: var(--creme); }

/* L'icône d'envoi est un avion : une flèche disait « suivant », pas
   « envoyer ». */
.ak-chat__envoi svg { transform: translateX(-1px); }

/* ═══════════════════════════════════════════════════════════════════════
   LA PAGE RÉPARATION — 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Elle était un formulaire de neuf champs, sans style, avec des classes
   Bootstrap qui n'existent plus. Elle devient une page qui EXPLIQUE avant
   de demander : ce qu'on répare, à quel prix, comment ça se passe, ce qu'on
   a en stock pour votre marque — et le formulaire en bas, où tous les
   boutons descendent.

   Le formulaire n'a pas changé d'un champ : mêmes noms, mêmes valeurs,
   mêmes gardes côté serveur. Seule sa robe est neuve.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── 1 · LE HÉROS DE PAGE, REFAIT LE 20/08 ──
   « Trop vilain, aucun style » — et c'était juste : deux colonnes, du texte
   à gauche, une photo à droite, aucune tenue.

   Il devient une BANDE PLEINE : la photo d'atelier occupe toute la largeur,
   un voile la fait passer de l'encre au transparent, le discours se pose
   dessus. C'est la composition qu'on donne à une page qui doit convaincre —
   et elle ne ressemble à aucune autre section du site, ce qui est le rôle
   d'un héros de page. */
.ak-rep-heros {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    background: var(--fond-sombre);
}
.ak-rep-heros__fond {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%; height: 100%;
    object-fit: cover;
    /* La source est un portrait 4:5 : dans une bande large, tout cadrage
       serre. On remonte le point d'intérêt pour garder le visage ET
       l'établi, plutôt qu'un gros plan sur un col de polo. */
    object-position: 58% 26%;
}
.ak-rep-heros picture { display: contents; }
/* Le voile part de la gauche, là où le texte se pose, et s'efface sur la
   photo. Un voile uniforme aurait éteint l'image ; celui-ci ne noircit que
   ce qui doit porter des mots. */
.ak-rep-heros::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    background:
        linear-gradient(96deg, rgba(16,13,12,.96) 0%, rgba(16,13,12,.9) 34%,
                        rgba(16,13,12,.55) 62%, rgba(16,13,12,.25) 100%);
}
.ak-rep-heros > .ak-large {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--e7);
    align-items: end;
    padding-block: var(--e9) var(--e8);
    min-height: 520px;
}
.ak-rep-heros__oeil {
    display: inline-flex;
    align-items: center;
    gap: var(--e3);
    padding: 7px var(--e4) 7px 7px;
    border-radius: var(--r-pastille);
    background: rgba(255,255,255,.1);
    border: 1px solid rgba(255,255,255,.16);
    backdrop-filter: blur(6px);
    font-size: 13px;
    font-weight: 600;
    color: var(--sur-couleur);
}
.ak-rep-heros__oeil span {
    display: grid;
    place-items: center;
    width: 26px; height: 26px;
    border-radius: var(--r-pastille);
    background: var(--orange);
    color: var(--sur-couleur);
}
.ak-rep-heros h1 {
    margin-top: var(--e5);
    max-width: 16ch;
    font-size: clamp(34px, 4.4vw, 60px);
    font-weight: 800;
    letter-spacing: -.045em;
    line-height: 1;
    color: var(--sur-couleur);
}
.ak-rep-heros h1 em { font-style: normal; color: #FF8A4C; }
.ak-rep-heros__mot {
    margin-top: var(--e4);
    max-width: 44ch;
    font-size: 16.5px;
    line-height: 1.6;
    color: rgba(255,255,255,.76);
}
.ak-rep-heros__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--e4);
    margin-top: var(--e6);
}
.ak-rep-heros__actions .ak-lien-fort { color: var(--sur-couleur); }
.ak-rep-heros__actions .ak-lien-fort:hover { color: #FF8A4C; }

/* La carte des promesses, posée dans le coin bas droit : elle donne au
   héros son second pôle, et évite que la moitié droite ne soit qu'une
   photo. */
.ak-rep-promesses {
    display: flex;
    flex-direction: column;
    gap: var(--e4);
    width: 300px;
    padding: var(--e5);
    border-radius: 20px;
    background: rgba(255,255,255,.08);
    border: 1px solid rgba(255,255,255,.14);
    backdrop-filter: blur(14px);
}
.ak-rep-promesses li {
    display: flex;
    align-items: flex-start;
    gap: var(--e3);
    font-size: 14px;
    line-height: 1.45;
    color: rgba(255,255,255,.82);
}
.ak-rep-promesses li strong { display: block; color: var(--sur-couleur); font-weight: 700; }
.ak-rep-promesses li svg { flex: none; margin-top: 2px; color: #FF8A4C; }

@media (max-width: 900px) {
    .ak-rep-heros > .ak-large {
        grid-template-columns: minmax(0, 1fr);
        padding-block: var(--e8) var(--e7);
        min-height: 0;
    }
    .ak-rep-promesses { width: 100%; }
    .ak-rep-heros::before { background: linear-gradient(180deg, rgba(16,13,12,.88), rgba(16,13,12,.96)); }
}

/* ── 2 · LES PRESTATIONS CHIFFRÉES ── */
.ak-tarifs { background: var(--blanc); }
.ak-tarifs > .ak-large { padding-block: var(--e8); }
.ak-tarifs__lot {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e4);
    margin-top: var(--e6);
}
.ak-tarif {
    display: flex;
    flex-direction: column;
    padding: var(--e5);
    border: 1px solid var(--trait);
    border-radius: 20px;
    background: var(--blanc);
    transition: transform var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie), border-color var(--t-moyen) var(--e-sortie);
}
.ak-tarif:hover {
    transform: translateY(-3px);
    border-color: transparent;
    box-shadow: 0 22px 40px -28px rgba(26,21,18,.5);
}
.ak-tarif__ico {
    display: grid;
    place-items: center;
    width: 52px; height: 52px;
    border-radius: 15px;
    background: var(--orange-doux);
    color: var(--encre);
    transition: background var(--t-moyen) var(--e-sortie), color var(--t-moyen) var(--e-sortie);
}
.ak-tarif:hover .ak-tarif__ico { background: var(--orange); color: var(--sur-couleur); }
.ak-tarif strong {
    display: block;
    margin-top: var(--e4);
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.028em;
    color: var(--encre);
}
.ak-tarif small {
    display: block;
    margin-top: 5px;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--g1);
}
/* Le prix se détache du reste : c'est la ligne qu'on cherche. */
.ak-tarif__prix {
    margin-top: auto;
    padding-top: var(--e4);
    font-size: 16px;
    font-weight: 800;
    letter-spacing: -.02em;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}
.ak-tarif__prix em {
    display: block;
    font-style: normal;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--g2);
}

/* ── 3 · LES ÉTAPES EN CARTES ──
   Sur l'accueil, quatre numéros reliés par un filet suffisent : c'est un
   rappel. Ici, c'est le cœur du sujet — chaque étape mérite sa carte, avec
   la place d'expliquer ce qui s'y passe. */
.ak-pas-lot {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e4);
    margin-top: var(--e6);
}
.ak-pas {
    position: relative;
    display: flex;
    flex-direction: column;
    padding: var(--e5);
    border-radius: 20px;
    background: var(--blanc);
    border: 1px solid var(--trait);
    transition: transform var(--t-moyen) var(--e-sortie), box-shadow var(--t-moyen) var(--e-sortie), border-color var(--t-moyen) var(--e-sortie);
}
.ak-pas:hover {
    transform: translateY(-3px);
    border-color: transparent;
    box-shadow: 0 22px 40px -28px rgba(26,21,18,.5);
}
.ak-pas__num {
    display: grid;
    place-items: center;
    width: 40px; height: 40px;
    border-radius: 13px;
    background: var(--orange-doux);
    color: var(--orange);
    font-size: 15px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
.ak-pas strong {
    display: block;
    margin-top: var(--e4);
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.028em;
    color: var(--encre);
}
.ak-pas small {
    display: block;
    margin-top: 6px;
    font-size: 13.5px;
    line-height: 1.55;
    color: var(--g1);
}
/* La flèche qui relie une carte à la suivante — elle dit l'ordre, ce que
   quatre cartes alignées ne disent pas. */
.ak-pas:not(:last-child)::after {
    content: '';
    position: absolute;
    top: 40px; right: calc(var(--e4) * -1);
    width: var(--e4); height: 1px;
    background: var(--trait-fort);
}

@media (max-width: 1000px) {
    .ak-pas-lot { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ak-pas:not(:last-child)::after { display: none; }
}
@media (max-width: 560px) {
    .ak-pas-lot { grid-template-columns: minmax(0, 1fr); }
}

/* ── 4 · VOTRE APPAREIL ── */
.ak-appareil { background: var(--creme); border-block: 1px solid var(--trait); }
.ak-appareil > .ak-large { padding-block: var(--e8); }
.ak-appareil__marques {
    display: flex;
    flex-wrap: wrap;
    gap: var(--e3);
    margin-top: var(--e6);
}
.ak-marque-tuile {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: 10px var(--e4) 10px 10px;
    border: 1.5px solid var(--trait);
    border-radius: 14px;
    background: var(--blanc);
    cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie);
}
.ak-marque-tuile img {
    width: 46px; height: 30px;
    object-fit: contain;
    /* La plaque reste blanche la nuit : les logos sont des tracés sombres. */
    background: var(--sur-couleur);
    border-radius: 7px;
    padding: 2px 4px;
}
.ak-marque-tuile span { font-size: 14.5px; font-weight: 700; color: var(--encre); }
.ak-marque-tuile small { font-size: 12.5px; color: var(--g2); }
.ak-marque-tuile:hover { border-color: var(--trait-fort); transform: translateY(-2px); }
.ak-marque-tuile.est-choisie {
    border-color: var(--orange);
    box-shadow: 0 0 0 3px var(--orange-doux);
}

.ak-appareil__resultat { margin-top: var(--e6); }
.ak-appareil__rayons {
    display: flex;
    gap: var(--e3);
    margin-bottom: var(--e5);
}
.ak-appareil__rayons button {
    padding: 8px var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: 99px;
    background: var(--blanc);
    color: var(--encre);
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 700;
    cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-appareil__rayons button.est-choisi { border-color: var(--orange); color: var(--orange); }

.ak-piece-lot {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--e4);
}
.ak-piece {
    display: flex;
    flex-direction: column;
    padding: var(--e4);
    border-radius: 18px;
    background: var(--blanc);
    border: 1px solid var(--trait);
}
.ak-piece__cadre {
    aspect-ratio: 1;
    border-radius: 12px;
    background: var(--fond-photo);
    overflow: hidden;
}
.ak-piece__cadre img { width: 100%; height: 100%; object-fit: contain; padding: 8%; }
.ak-piece strong {
    display: block;
    margin-top: var(--e3);
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.35;
    color: var(--encre);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.ak-piece__prix {
    margin-top: 6px;
    font-size: 15.5px;
    font-weight: 800;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}
.ak-piece__poser {
    margin-top: var(--e3);
    padding: 8px;
    border: 1.5px solid var(--trait);
    border-radius: 10px;
    background: transparent;
    color: var(--encre);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 700;
    cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-piece__poser:hover { border-color: var(--orange); color: var(--orange); }
.ak-appareil__mot { font-size: 14px; color: var(--g1); }

/* ── 6 · LES QUESTIONS ── */
.ak-faq { background: var(--blanc); }
.ak-faq > .ak-large {
    display: grid;
    grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr);
    gap: var(--e7);
    padding-block: var(--e8);
    align-items: start;
}
/* ── LE PORTRAIT DE LA COLONNE ──
   Il ouvre la colonne des questions. Le cadre est arrondi comme les cartes
   du site, l'aplat orange décalé derrière reprend le geste du héros — c'est
   ce qui fait qu'une photo posée sur du blanc n'a pas l'air découpée. */
.ak-faq__portrait {
    position: relative;
    max-width: 220px;
    margin-bottom: var(--e5);
}
.ak-faq__portrait::before {
    content: '';
    position: absolute;
    inset: 16px -16px -16px 16px;
    background: var(--orange-doux);
    border-radius: 22px;
}
.ak-faq__portrait picture { display: contents; }
.ak-faq__portrait img {
    position: relative;
    display: block;
    width: 100%;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: 20px;
}
.ak-faq__portrait figcaption {
    position: relative;
    margin-top: var(--e3);
}
.ak-faq__portrait strong {
    display: block;
    font-size: 15.5px;
    font-weight: 800;
    letter-spacing: -.025em;
    color: var(--encre);
}
.ak-faq__portrait small { display: block; font-size: 13px; color: var(--g1); }

.ak-faq__liste { border-top: 1px solid var(--trait); }

/* La réponse se déplie au lieu d'apparaître d'un coup. `interpolate-size`
   permet enfin d'animer vers `auto` : les navigateurs qui ne le connaissent
   pas ouvrent sèchement, ce qui reste correct. */
@media (prefers-reduced-motion: no-preference) {
    .ak-faq details::details-content {
        block-size: 0;
        overflow: hidden;
        transition: block-size var(--t-moyen) var(--e-sortie), content-visibility var(--t-moyen) allow-discrete var(--e-sortie);
    }
    .ak-faq details[open]::details-content { block-size: auto; }
}
.ak-faq details { border-bottom: 1px solid var(--trait); }
.ak-faq summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e4);
    padding: var(--e5) 0;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: -.02em;
    color: var(--encre);
    cursor: pointer;
    list-style: none;
}
.ak-faq summary::-webkit-details-marker { display: none; }
.ak-faq summary::after {
    content: '+';
    flex: none;
    display: grid;
    place-items: center;
    width: 28px; height: 28px;
    border-radius: var(--r-pastille);
    background: var(--creme);
    color: var(--orange);
    font-size: 18px;
    font-weight: 700;
    line-height: 1;
    transition: transform var(--t-moyen) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
.ak-faq details[open] summary::after { content: '−'; background: var(--orange); color: var(--sur-couleur); }
.ak-faq details p {
    padding-bottom: var(--e5);
    max-width: 62ch;
    font-size: 15px;
    line-height: 1.65;
    color: var(--g1);
}

/* ── 7 · LA DEMANDE ── */
.ak-demande { background: var(--creme); border-top: 1px solid var(--trait); }
.ak-demande > .ak-large {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 340px;
    gap: var(--e6);
    align-items: start;
    padding-block: var(--e8);
}
.ak-bloc-champ {
    padding: var(--e6);
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: 20px;
    margin-bottom: var(--e4);
}
.ak-bloc-champ h2 {
    display: flex;
    align-items: center;
    gap: var(--e3);
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -.028em;
    color: var(--encre);
    margin-bottom: var(--e5);
}
.ak-bloc-champ h2 i {
    display: grid;
    place-items: center;
    width: 28px; height: 28px;
    border-radius: var(--r-pastille);
    background: var(--fond-sombre);
    /* `--creme` devient presque noir en mode sombre : le chiffre disparaissait
       sur son propre fond, mesuré à 1,07:1 par la vérification du 20/08. Le
       blanc qui ne bascule pas règle les deux modes d'un coup. */
    color: var(--sur-couleur);
    font-style: normal;
    font-size: 13px;
    font-weight: 800;
}
.ak-duo { display: grid; grid-template-columns: 1fr 1fr; gap: var(--e4); }
.ak-etiquette {
    display: block;
    margin-bottom: 6px;
    font-size: 13px;
    font-weight: 700;
    color: var(--encre);
}
.ak-saisie {
    width: 100%;
    height: 48px;
    padding-inline: var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    background: var(--creme);
    color: var(--encre);
    font-family: inherit;
    font-size: 15px;
    outline: none;
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
textarea.ak-saisie { height: auto; padding-block: 12px; resize: vertical; line-height: 1.55; }
.ak-saisie:focus { border-color: var(--orange); background: var(--blanc); }
.ak-saisie--faute { border-color: var(--rouge); }
.ak-faute { display: block; margin-top: 5px; font-size: 12.5px; color: var(--rouge); }
.ak-aide { display: block; margin-top: 5px; font-size: 12.5px; color: var(--g2); }

/* Les pastilles cliquables : le bouton disparaît, l'étiquette prend l'état.
   Plus lisible au pouce qu'une case à cocher, et c'est la même mécanique
   que sur l'ancienne page — elle marchait, on la garde. */
.ak-pastilles { display: flex; flex-wrap: wrap; gap: 8px; }
.ak-pastille-choix input { position: absolute; opacity: 0; width: 0; height: 0; }
.ak-pastille-choix span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 9px var(--e4);
    border: 1.5px solid var(--trait);
    border-radius: 99px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--encre);
    cursor: pointer;
    user-select: none;
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-pastille-choix span:hover { border-color: var(--trait-fort); }
.ak-pastille-choix input:checked + span {
    border-color: var(--orange);
    background: var(--orange-doux);
    color: var(--orange-fonce);
}
.ak-pastille-choix input:focus-visible + span { outline: 2px solid var(--orange); outline-offset: 2px; }

/* ── LE RÉCAPITULATIF COLLANT ── */
.ak-recap-dem {
    position: sticky;
    top: calc(var(--h-entete) + var(--e4));
    padding: var(--e5);
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: 20px;
}
.ak-recap-dem h2 {
    font-size: 12px;
    font-weight: 800;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--g2);
    padding-bottom: var(--e3);
    border-bottom: 1px solid var(--trait);
}
.ak-recap-dem__ligne {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--e4);
    padding-block: var(--e3);
    font-size: 14px;
    color: var(--g1);
    border-bottom: 1px solid var(--trait);
}
.ak-recap-dem__ligne strong { color: var(--encre); font-weight: 700; text-align: right; }
.ak-recap-dem__prix {
    margin-top: var(--e4);
    padding: var(--e4);
    border-radius: 14px;
    background: var(--orange-doux);
}
.ak-recap-dem__prix strong {
    display: block;
    font-size: 19px;
    font-weight: 800;
    letter-spacing: -.025em;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}
.ak-recap-dem__prix small { display: block; margin-top: 3px; font-size: 12.5px; color: var(--g1); }
.ak-recap-dem__promesses { margin-top: var(--e4); display: flex; flex-direction: column; gap: 9px; }
.ak-recap-dem__promesses li {
    display: flex;
    gap: 8px;
    font-size: 13.5px;
    line-height: 1.45;
    color: var(--g1);
}
.ak-recap-dem__promesses svg { flex: none; margin-top: 2px; color: var(--vert); }

@media (max-width: 1100px) {
    .ak-rep-heros > .ak-large,
    .ak-faq > .ak-large { grid-template-columns: minmax(0, 1fr); }
    .ak-demande > .ak-large { grid-template-columns: minmax(0, 1fr); }
    .ak-recap-dem { position: static; }
    .ak-tarifs__lot,
    .ak-piece-lot { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 620px) {
    .ak-tarifs__lot { grid-template-columns: minmax(0, 1fr); }
    .ak-piece-lot { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--e3); }
    .ak-duo { grid-template-columns: 1fr; }
    .ak-bloc-champ { padding: var(--e5); }
}

/* ── LA PAGE RÉPARATION, SECONDE PASSE — 20/08/2026 ──────────────────────
   Quatre finitions, chacune parce qu'un endroit de la page ne travaillait
   pas assez fort. */

/* 1. L'ÉTAT DE L'ATELIER, dans le héros. Le point se calcule sur les
      horaires de l'ERP : ouvert, il est vert et dit « on décroche » ;
      fermé, il est gris et dit à quelle heure on rouvre. Une page qui
      pousse à appeler doit dire si quelqu'un décroche. */
.ak-rep-heros__etat {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin-top: var(--e5);
    font-size: 13.5px;
    color: rgba(255,255,255,.72);
}
.ak-rep-heros__etat b {
    width: 8px; height: 8px;
    border-radius: var(--r-pastille);
    background: var(--g2);
}
.ak-rep-heros__etat.est-ouvert b {
    background: #3FD07A;
    box-shadow: 0 0 0 4px rgba(63,208,122,.2);
}

/* 2. LE PRIX PREND LE DESSUS dans les carrés de pannes. Il était en gris,
      à la taille d'une note de bas de page : c'est pourtant la ligne qu'on
      cherche. */
.ak-presta-carte small b {
    display: block;
    margin-bottom: 2px;
    font-size: 15.5px;
    font-weight: 800;
    letter-spacing: -.02em;
    color: var(--encre);
    font-variant-numeric: tabular-nums;
}

/* 3. CHAQUE ÉTAPE PORTE SON DESSIN. Un numéro dit l'ordre, il ne dit pas
      ce qui se passe ; l'icône, si — et l'œil la saisit avant le titre. */
.ak-pas__tete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e4);
}
.ak-pas__ico { color: var(--g3); transition: color var(--t-moyen) var(--e-sortie); }
.ak-pas:hover .ak-pas__ico { color: var(--orange); }


/* ═══════════════════════════════════════════════════════════════════════
   LE MOUVEMENT DU SITE — passe d'ensemble, 20/08/2026
   ═══════════════════════════════════════════════════════════════════════

   Ce bloc ne décore pas : chaque geste répond à une question que le
   visiteur se pose sans la formuler. « Ai-je cliqué ? » « Est-ce que ça
   charge ? » « Où suis-je arrivé ? » Une interface muette laisse ces
   questions sans réponse, et c'est ce qui donne l'impression qu'elle est
   lente alors qu'elle ne l'est pas.

   Tout ce qui suit s'éteint sous `prefers-reduced-motion`. Sans exception :
   pour une partie des gens, le mouvement n'est pas un agrément, c'est un
   malaise physique.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── LE PASSAGE D'UNE PAGE À L'AUTRE ──
   Le site est multi-pages : chaque lien provoquait un clignotement blanc.
   `@view-transition` fait fondre l'ancienne page dans la nouvelle, sans une
   ligne de script et sans transformer le site en application. Les
   navigateurs qui ne connaissent pas la règle l'ignorent et gardent le
   comportement d'avant. */
@view-transition { navigation: auto; }

::view-transition-old(root) { animation: ak-part var(--t-vif) var(--e-entree) both; }
::view-transition-new(root) { animation: ak-arrive var(--t-moyen) var(--e-sortie) both; }
@keyframes ak-part   { to   { opacity: 0; } }
@keyframes ak-arrive { from { opacity: 0; transform: translateY(8px); } }

/* L'en-tête et le pied ne participent pas au fondu : ils sont communs aux
   deux pages, les faire disparaître pour les refaire apparaître donnerait
   un battement à chaque clic. */
.ak-entete { view-transition-name: ak-entete; }
.ak-pied   { view-transition-name: ak-pied; }

/* ── LA BARRE NE SE RESSERRE PLUS — mesuré, puis retiré le 20/08 ──
   L'idée était bonne, le prix ne l'était pas. `.ak-entete` est `sticky`,
   donc DANS le flux : animer sa hauteur remontait tout le document de 16 px
   dès qu'on quittait le haut de page, et coûtait 313 remises en page pour
   douze allers-retours — une par image d'animation. Seize pixels gagnés
   contre un saut du contenu sous les yeux du lecteur : le calcul ne se
   défend pas. Le remplissage de blanc au défilement, lui, reste. */

/* ── LA PRESSION ──
   Un bouton qui ne bouge pas sous le doigt laisse croire que le clic n'a
   pas pris — et on clique deux fois. Deux pixels suffisent à répondre. */
/* Ces trois-là n'avaient pas `transform` dans leur liste de transitions :
   le bouton sautait puis resautait au lieu de s'enfoncer. */
.ak-bouton, .ak-chat__envoi, .ak-tuile__cadre { transition-property: background, color, border-color, box-shadow, outline-color, transform; }

.ak-cta:active,
.ak-bouton:active,
.ak-magasin:active,
.ak-chat__bulle:active,
.ak-chat__envoi:active { transform: translateY(2px) scale(.985); }
.ak-tuile:active .ak-tuile__cadre,
.ak-presta-carte:active,
.ak-bande:active { transform: translateY(-1px) scale(.995); }

/* ── LE BOUTON QUI TRAVAILLE ──
   Entre le clic et la page suivante, il peut s'écouler deux secondes sur un
   réseau mobile. Sans signe, on reclique. Le libellé s'efface, un anneau
   tourne, et le bouton refuse les clics suivants — c'est le script du
   gabarit qui pose la classe. */
.ak-cta.est-en-cours,
.ak-bouton.est-en-cours { position: relative; color: transparent !important; pointer-events: none; }
.ak-cta.est-en-cours svg,
.ak-bouton.est-en-cours svg { opacity: 0; }
.ak-cta.est-en-cours::after,
.ak-bouton.est-en-cours::after {
    content: '';
    position: absolute;
    inset: 0;
    margin: auto;
    width: 18px; height: 18px;
    border: 2px solid rgba(255,255,255,.35);
    border-top-color: var(--sur-couleur);
    border-radius: var(--r-pastille);
    animation: ak-tourne .6s linear infinite;
}
.ak-cta--creux.est-en-cours::after { border-color: var(--trait-fort); border-top-color: var(--orange); }
@keyframes ak-tourne { to { transform: rotate(360deg); } }

/* ── LES IMAGES N'APPARAISSENT PLUS D'UN COUP ──
   Une photo différée surgit à la fin de son téléchargement, en pleine page
   déjà lue. Un fondu de deux dixièmes suffit à ce que l'œil l'accepte au
   lieu de la subir. L'état d'attente n'est posé QUE par le script : sans
   lui, aucune image n'est cachée. */
.ak-js img.ak-img-attend { opacity: 0; }
.ak-js img.ak-img-posee  { animation: ak-fondu var(--t-moyen) var(--e-sortie) both; }
@keyframes ak-fondu { from { opacity: 0; } to { opacity: 1; } }

/* ── LA RÉVÉLATION EN CASCADE ──
   Les enfants d'un groupe révélé arrivent l'un après l'autre, 60 ms
   d'écart. Au-delà de six, on cesse d'échelonner : un dixième élément qui
   attend six dixièmes de seconde n'est plus une cascade, c'est une file. */
/* Les enfants ont leur PROPRE entrée — sans cela le délai retombait sur la
   seule transition qu'ils possèdent, leur survol : mesuré, huit cartes de
   l'accueil répondaient avec 180 ms de retard. Et le parent retire la classe
   une fois l'entrée jouée (voir le gabarit), pour que plus aucun délai ne
   traîne sur les gestes suivants. */
.ak-js .ak-revele--cascade > * {
    opacity: 0;
    transform: translateY(14px);
    transition: opacity var(--t-ample) var(--e-sortie) calc(var(--i, 0) * 60ms) var(--e-sortie), transform var(--t-ample) var(--e-sortie) calc(var(--i, 0) * 60ms) var(--e-sortie);
}
.ak-js .ak-revele--cascade.est-vu > * { opacity: 1; transform: none; }
/* Le groupe lui-même ne bouge plus : ce sont ses enfants qui entrent. */
.ak-js .ak-revele--cascade { opacity: 1; transform: none; }

/* ── L'ANNEAU DE FOCUS ──
   Il doit se voir immédiatement : personne ne navigue au clavier pour
   attendre une animation. On l'affiche net, on n'anime que sa couleur. */
:focus-visible { outline: 2.5px solid var(--orange); outline-offset: 3px; }
/* Pas de transition sur l'anneau : `transition` est un RACCOURCI, et toute
   règle de classe portant `transition` effaçait cette liste — la règle
   n'agissait que sur les éléments qui n'ont aucune autre transition.
   Un anneau de focus doit de toute façon paraître sur-le-champ : personne ne
   navigue au clavier pour attendre un fondu. */

@media (prefers-reduced-motion: reduce) {
    @view-transition { navigation: none; }
    .ak-entete > .ak-large,
    .ak-entete__logo img { transition: none; }
    .ak-cta:active, .ak-bouton:active, .ak-magasin:active,
    .ak-tuile:active .ak-tuile__cadre, .ak-presta-carte:active, .ak-bande:active { transform: none; }
    .ak-js img.ak-img-attend { opacity: 1; }
    .ak-js img.ak-img-posee { animation: none; }
    /* Sous `reduce`, l'anneau ne tourne pas : cacher le libellé laisserait
       un bouton muet à ceux-là mêmes qu'on voulait ménager. On garde le mot
       et on l'estompe. */
    .ak-cta.est-en-cours, .ak-bouton.est-en-cours { color: inherit !important; opacity: .6; }
    .ak-cta.est-en-cours::after, .ak-bouton.est-en-cours::after { display: none; }
}


/* ── À L'IMPRESSION ──
   Six sections sur huit de la page Réparation sortaient BLANCHES : elles
   attendent leur révélation au défilement, et une imprimante ne défile pas.
   Le « Enregistrer en PDF » d'un devis en dépendait aussi. */
@media print {
    .ak-js .ak-revele,
    .ak-js .ak-revele--cascade > * { opacity: 1 !important; transform: none !important; }
    .ak-chat, .ak-bandeau, .ak-marques, .ak-theme { display: none !important; }
    .ak-entete { position: static; }
    a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 11px; color: #555; }
    body { background: #fff; }
}


/* ═══════════════════════════════════════════════════════════════════════
   L'ESPACE CLIENT — posé le 21/08/2026, redessiné le même jour.
   ═══════════════════════════════════════════════════════════════════════

   ── CE QU'IL REMPLACE ──

   Les trois pages du compte étaient restées sur les classes de l'ANCIEN thème,
   jetées le 19/08 : elles s'affichaient SANS AUCUN STYLE. C'était la première
   chose qu'un client voyait après s'être connecté.

   ── LES NOMS SONT PRÉFIXÉS `ak-tb-`, ET C'EST UNE LEÇON ──

   La première version de ce bloc a repris quatre noms qui existaient déjà
   ailleurs dans cette feuille : `.ak-tuile` (les raccourcis de l'accueil),
   `.ak-etat` (la pastille « En stock » de la boutique), `.ak-fiche` (la fiche
   produit) et `.ak-fil` (le fil d'Ariane). Écrites PLUS BAS, mes règles
   gagnaient — et cassaient la boutique et la page produit sans toucher à une
   ligne de leur code.

   Tout ce qui appartient au tableau de bord porte donc `ak-tb-`. Une feuille
   de six mille lignes n'a pas de portée locale : le préfixe EST la portée.

   ── LA COLONNE RESTE CLAIRE — 21/08/2026, sa demande ──

   Elle est passée en sombre le temps d'un essai : « le truc noir ne me plaît
   pas ». Elle revient donc au blanc du reste du site, et la hiérarchie se fait
   autrement — par le filet, l'ombre portée et l'aplat orange doux de l'entrée
   active. Le reste de la seconde passe est conservé : les icônes enfermées,
   les chiffres en chasse fixe, le chevron qui avance au survol, les anneaux
   de focus.
   ═══════════════════════════════════════════════════════════════════════ */

.ak-tb {
    display: grid;
    grid-template-columns: 268px minmax(0, 1fr);
    gap: var(--e5);
    align-items: start;
    max-width: 1280px;
    margin-inline: auto;
    padding: var(--e5) var(--gouttiere) var(--e8);
}

/* ── LA COLONNE ──
   Collante : sur une liste de douze réparations, la navigation ne doit pas
   partir en haut de page. */
.ak-tb__cote {
    position: sticky;
    top: 88px;
    display: flex;
    flex-direction: column;
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    padding: var(--e5) var(--e4) var(--e4);
    box-shadow: var(--ombre-carte);
}

.ak-tb__qui { display: flex; align-items: center; gap: var(--e3); padding-inline: var(--e2); }

/* L'INITIALE PLUTÔT QU'UNE SILHOUETTE GRISE. Personne n'a de photo chez nous ;
   une lettre dit au moins de qui il s'agit. L'anneau orange la rattache à la
   maison sans peindre un disque entier. */
.ak-tb__jeton {
    width: 42px; height: 42px; flex: 0 0 42px;
    display: grid; place-items: center;
    border-radius: 50%;
    background: var(--orange-doux);
    box-shadow: inset 0 0 0 1.5px rgba(248, 80, 0, .28);
    color: var(--orange);
    font-size: 16px; font-weight: 800;
    overflow: hidden;
}
.ak-tb__jeton img { width: 100%; height: 100%; object-fit: cover; }
.ak-tb__nom { font-size: 14.5px; font-weight: 700; color: var(--encre); line-height: 1.25; }
.ak-tb__tel { font-size: 12.5px; color: var(--g1); margin-top: 2px; }

.ak-tb__menu { display: flex; flex-direction: column; gap: 2px; margin-top: var(--e5); }

.ak-tb__lien {
    position: relative;
    display: flex; align-items: center; gap: var(--e3);
    padding: 10px var(--e3);
    border-radius: 10px;
    font-size: 14px; font-weight: 600;
    color: var(--encre-2);
    text-decoration: none;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-tb__lien:hover { background: var(--creme); color: var(--encre); }
.ak-tb__lien svg { flex: 0 0 18px; opacity: .75; }

/* L'ACTIF SE VOIT SANS SE CRIER : un aplat orange très clair et l'encre de la
   maison. Un aplat orange SATURÉ dans une colonne de huit entrées ferait de la
   navigation le sujet de la page. */
.ak-tb__lien.est-actif {
    background: var(--orange-doux);
    color: var(--orange);
    font-weight: 700;
}
.ak-tb__lien.est-actif svg { opacity: 1; }

/* Le compteur d'une entrée — messages non lus, réparations en cours. */
.ak-tb__compte {
    margin-left: auto;
    min-width: 21px; height: 20px;
    display: inline-grid; place-items: center;
    padding-inline: 6px;
    border-radius: var(--r-pastille);
    background: var(--orange); color: var(--sur-couleur);
    font-size: 11.5px; font-weight: 800;
}
/* Sur l'entrée active, l'aplat est déjà orange : la pastille s'inverse. */
.ak-tb__lien.est-actif .ak-tb__compte { background: var(--orange); }

.ak-tb__pied { margin-top: auto; padding-top: var(--e5); border-top: 1px solid var(--trait); }
.ak-tb__aide {
    background: var(--creme);
    border-radius: var(--r-champ);
    padding: var(--e3) var(--e4);
    font-size: 12.5px; color: var(--g1); line-height: 1.55;
}
.ak-tb__aide strong { display: block; color: var(--encre); font-size: 13px; margin-bottom: 3px; }
.ak-tb__aide a { color: var(--orange); font-weight: 700; text-decoration: none; }
.ak-tb__aide a:hover { text-decoration: underline; }

.ak-tb__sortie {
    display: flex; align-items: center; gap: var(--e2);
    width: 100%; margin-top: var(--e3);
    padding: 10px var(--e3);
    background: none; border: none;
    border-radius: 10px;
    font-family: inherit; font-size: 13.5px; font-weight: 600;
    color: var(--g1); cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-tb__sortie:hover { background: var(--creme); color: var(--encre); }
.ak-tb__cote :focus-visible { outline: 2px solid var(--orange); outline-offset: 2px; }

/* ── L'EN-TÊTE DU CONTENU ── */
.ak-tb__entete {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: var(--e4); flex-wrap: wrap;
    margin-bottom: var(--e5);
}
.ak-tb__jour {
    display: block;
    font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
    color: var(--g2); margin-bottom: 6px;
}
.ak-tb__titre { font-size: clamp(23px, 2.6vw, 30px); font-weight: 800; letter-spacing: -.025em; color: var(--encre); line-height: 1.15; }
.ak-tb__titre em { font-style: normal; color: var(--orange); }
.ak-tb__sous { font-size: 14px; color: var(--g1); margin-top: 6px; }

/* ── LES TUILES DE TÊTE ──
   Trois chiffres, pas dix : ce qu'on vient vérifier en ouvrant son compte. */
.ak-tb__tuiles {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
    gap: var(--e4);
    margin-bottom: var(--e5);
}
.ak-tb-tuile {
    display: block;
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    padding: var(--e4);
    text-decoration: none;
    transition: transform var(--t-vif) var(--e-sortie), box-shadow var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie);
}
a.ak-tb-tuile:hover {
    transform: translateY(-2px);
    border-color: var(--trait-fort);
    box-shadow: 0 18px 36px -22px rgba(26, 21, 18, .35);
}

/* L'ŒIL DE LA TUILE : l'icône dans un carré doux, le mot à côté. Une icône
   nue posée sur du blanc flotte ; enfermée, elle devient un repère. */
.ak-tb-tuile__oeil {
    display: flex; align-items: center; gap: var(--e2);
    font-size: 12.5px; font-weight: 600; color: var(--g1);
}
.ak-tb-tuile__oeil svg {
    box-sizing: content-box;
    padding: 6px;
    border-radius: 9px;
    background: var(--creme);
    color: var(--encre-2);
}
.ak-tb-tuile__chiffre {
    font-size: 32px; font-weight: 800; letter-spacing: -.035em;
    color: var(--encre); line-height: 1.05; margin-top: var(--e4);
    font-variant-numeric: tabular-nums;
}
.ak-tb-tuile__mot { font-size: 13px; color: var(--g1); margin-top: 3px; }

/* LA TUILE D'ACCENT — une seule par page, celle qui décide si on reste.
   Le halo n'est pas un décor : il donne du relief à un aplat qui, plat,
   paraîtrait un bloc de couleur posé là. */
.ak-tb-tuile--accent {
    position: relative;
    overflow: hidden;
    background:
        radial-gradient(120% 120% at 100% 0%, rgba(255,255,255,.22) 0%, rgba(255,255,255,0) 55%),
        linear-gradient(135deg, var(--orange) 0%, var(--orange-fonce) 100%);
    border-color: transparent;
    box-shadow: 0 16px 34px -18px rgba(248, 80, 0, .85);
}
.ak-tb-tuile--accent .ak-tb-tuile__oeil,
.ak-tb-tuile--accent .ak-tb-tuile__chiffre,
.ak-tb-tuile--accent .ak-tb-tuile__mot { color: var(--sur-couleur); position: relative; }
.ak-tb-tuile--accent .ak-tb-tuile__oeil svg { background: rgba(255,255,255,.18); color: var(--sur-couleur); }
.ak-tb-tuile--accent .ak-tb-tuile__mot { opacity: .88; }
a.ak-tb-tuile--accent:hover { box-shadow: 0 22px 44px -18px rgba(248, 80, 0, .95); }

/* ── LES CARTES DE CONTENU ── */
.ak-tb__grille { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: var(--e4); align-items: start; }
.ak-tb__pile { display: flex; flex-direction: column; gap: var(--e4); }

.ak-carte-tb {
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    overflow: hidden;
}
.ak-carte-tb__tete {
    display: flex; align-items: center; justify-content: space-between; gap: var(--e3);
    padding: var(--e4) var(--e5);
    border-bottom: 1px solid var(--trait);
}
.ak-carte-tb__tete h2 { font-size: 15px; font-weight: 800; color: var(--encre); letter-spacing: -.01em; }
.ak-carte-tb__tout {
    font-size: 12.5px; font-weight: 700; color: var(--orange);
    text-decoration: none; white-space: nowrap;
    padding: 4px 10px; border-radius: var(--r-pastille);
    transition: background var(--t-vif) var(--e-sortie);
}
.ak-carte-tb__tout:hover { background: var(--orange-doux); }
.ak-carte-tb__corps { padding: var(--e5); }
.ak-carte-tb__corps--serre { padding: var(--e2) 0; }

/* ── UNE LIGNE DE LISTE — réparation, commande, favori ──
   Toute la ligne est cliquable, et le chevron le dit. Il avance au survol :
   un mouvement de deux pixels suffit à faire comprendre qu'on peut entrer. */
.ak-ligne-tb {
    display: flex; align-items: center; gap: var(--e4);
    padding: var(--e3) var(--e5);
    text-decoration: none;
    transition: background var(--t-vif) var(--e-sortie);
}
a.ak-ligne-tb:hover { background: var(--creme); }
a.ak-ligne-tb:hover .ak-ligne-tb__fleche { transform: translateX(3px); color: var(--orange); }
.ak-ligne-tb + .ak-ligne-tb { border-top: 1px solid var(--trait); }
.ak-ligne-tb__vignette {
    width: 46px; height: 46px; flex: 0 0 46px;
    display: grid; place-items: center;
    border-radius: 13px;
    background: var(--creme); color: var(--g1);
    font-size: 15px; font-weight: 800;
    overflow: hidden;
    /* Un liseré INTÉRIEUR : sur une photo de produit sur fond blanc, sans lui
       la vignette n'a pas de bord et le contenu paraît flotter. */
    box-shadow: inset 0 0 0 1px rgba(26, 21, 18, .07);
}
.ak-ligne-tb__vignette img { width: 100%; height: 100%; object-fit: cover; }
.ak-ligne-tb__corps { min-width: 0; flex: 1; }
.ak-ligne-tb__nom { display: block; font-size: 14.5px; font-weight: 700; color: var(--encre); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ak-ligne-tb__detail { display: flex; align-items: center; gap: var(--e2); flex-wrap: wrap; font-size: 12.5px; color: var(--g1); margin-top: 4px; }
.ak-ligne-tb__prix { font-size: 14.5px; font-weight: 800; color: var(--encre); white-space: nowrap; font-variant-numeric: tabular-nums; }
.ak-ligne-tb__du { font-size: 12px; font-weight: 700; color: var(--orange); white-space: nowrap; }
.ak-ligne-tb__fleche {
    color: var(--g3); flex: 0 0 auto;
    transition: transform var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}

/* ── L'ÉTAT, EN PASTILLE ──
   Une seule forme pour tous les états ; c'est la couleur qui parle. */
.ak-tb-etat {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 3.5px 9px;
    border-radius: var(--r-pastille);
    font-size: 11px; font-weight: 800; white-space: nowrap;
    letter-spacing: .01em;
    background: var(--creme); color: var(--encre-2);
}
.ak-tb-etat::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; }
.ak-tb-etat--attente { background: var(--ambre-doux);  color: var(--ambre); }
.ak-tb-etat--marche  { background: var(--orange-doux); color: var(--orange); }
.ak-tb-etat--fini    { background: var(--vert-doux);   color: var(--vert); }
.ak-tb-etat--stop    { background: var(--rouge-doux);  color: var(--rouge); }

/* ── LE VIDE, QUI PROPOSE QUELQUE CHOSE ──
   « Aucune commande » tout seul est un cul-de-sac. */
.ak-vide-tb { text-align: center; padding: var(--e6) var(--e5); }
.ak-vide-tb__rond {
    width: 62px; height: 62px; margin: 0 auto var(--e4);
    display: grid; place-items: center;
    border-radius: 50%; background: var(--creme); color: var(--g2);
    box-shadow: inset 0 0 0 1px rgba(26, 21, 18, .05);
}
.ak-vide-tb h3 { font-size: 15.5px; font-weight: 800; color: var(--encre); }
.ak-vide-tb p { font-size: 13.5px; color: var(--g1); margin: var(--e2) auto var(--e4); max-width: 34ch; line-height: 1.55; }

/* ── LA BARRE DE PROGRESSION ── */
.ak-jauge { height: 6px; border-radius: var(--r-pastille); background: var(--trait); overflow: hidden; margin-top: var(--e3); }
.ak-jauge span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--orange), var(--orange-fonce)); transition: width .5s var(--e-sortie); }

/* ── SUR PETIT ÉCRAN ──
   La colonne devient une barre sombre dont les entrées défilent. Un tiroir
   aurait caché la navigation derrière un geste ; ici elle reste visible. */
@media (max-width: 1023px) {
    .ak-tb { grid-template-columns: minmax(0, 1fr); gap: var(--e4); padding-top: var(--e4); }
    .ak-tb__cote { position: static; padding: var(--e4); }
    .ak-tb__menu {
        flex-direction: row; gap: var(--e2); margin-top: var(--e4);
        overflow-x: auto; scrollbar-width: none; padding-bottom: 2px;
    }
    .ak-tb__menu::-webkit-scrollbar { display: none; }
    .ak-tb__lien { white-space: nowrap; border: 1px solid var(--trait); }
    .ak-tb__lien.est-actif { border-color: transparent; }
    .ak-tb__pied { display: flex; align-items: center; gap: var(--e3); margin-top: var(--e4); padding-top: var(--e4); }
    .ak-tb__aide { display: none; }
    .ak-tb__sortie { margin-top: 0; width: auto; }
    .ak-tb__grille { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 560px) {
    .ak-carte-tb__tete, .ak-carte-tb__corps { padding-inline: var(--e4); }
    .ak-ligne-tb { padding-inline: var(--e4); gap: var(--e3); }
    .ak-tb-tuile__chiffre { font-size: 27px; }
    .ak-tb__entete { align-items: flex-start; }
}

/* ── LE DEVIS, DANS L'ESPACE CLIENT ──
   Une ligne de devis est une DÉCISION : on la garde ou on la retire. Elle se
   dessine donc comme un choix — une carte qui s'allume quand elle est retenue —
   et non comme une ligne de tableau. */
.ak-devis-ligne {
    display: block;
    border: 1.5px solid var(--trait);
    border-radius: var(--r-champ);
    padding: var(--e4);
    transition: border-color var(--t-vif) var(--e-sortie), background var(--t-vif) var(--e-sortie);
}
.ak-devis-ligne + .ak-devis-ligne { margin-top: var(--e3); }
.ak-devis-ligne:has(.ak-devis-case:checked) { border-color: var(--orange); background: var(--orange-doux); }
.ak-devis-tete { display: flex; align-items: flex-start; gap: var(--e3); cursor: pointer; }
.ak-devis-case { width: 18px; height: 18px; flex: 0 0 18px; margin-top: 2px; accent-color: var(--orange); }
.ak-devis-nom { font-size: 14.5px; font-weight: 700; color: var(--encre); display: block; }
.ak-devis-aide { font-size: 12.5px; color: var(--g1); display: block; margin-top: 2px; line-height: 1.45; }
.ak-devis-prix { font-size: 14.5px; font-weight: 800; color: var(--encre); white-space: nowrap; }

.ak-devis-choix { margin-top: var(--e3); padding-top: var(--e3); border-top: 1px dashed var(--trait-fort); }
.ak-devis-choix > p { font-size: 11.5px; font-weight: 700; color: var(--g1); text-transform: uppercase; letter-spacing: .04em; margin-bottom: var(--e2); }
.ak-devis-option { display: flex; align-items: center; gap: var(--e2); padding: 7px 0; cursor: pointer; font-size: 13.5px; color: var(--encre-2); }
.ak-devis-option input { accent-color: var(--orange); }
.ak-devis-option span:first-of-type { flex: 1; }
.ak-devis-option b { font-weight: 700; color: var(--encre); }

.ak-devis-total {
    display: flex; align-items: baseline; justify-content: space-between;
    margin-top: var(--e4); padding-top: var(--e4); border-top: 1px solid var(--trait);
}
.ak-devis-total span { font-size: 15px; font-weight: 700; color: var(--encre); }
.ak-devis-total strong { font-size: 24px; font-weight: 800; color: var(--orange); letter-spacing: -.02em; }

.ak-devis-refus {
    display: block; width: 100%; margin-top: var(--e3);
    background: none; border: none; padding: var(--e2);
    font-family: inherit; font-size: 13px; font-weight: 600; color: var(--g1);
    cursor: pointer; text-align: center;
}
.ak-devis-refus:hover { color: var(--rouge); }

/* Le code de retrait : c'est un mot de passe, il se lit de loin. */
.ak-code-retrait {
    font-size: 30px; font-weight: 800; letter-spacing: .18em;
    color: var(--orange); font-variant-numeric: tabular-nums;
}

/* Une paire « étiquette / valeur » dans une carte du tableau de bord. */
.ak-paire { display: flex; align-items: baseline; justify-content: space-between; gap: var(--e3); padding: 7px 0; }
.ak-paire + .ak-paire { border-top: 1px solid var(--trait); }
.ak-paire dt { font-size: 13px; color: var(--g1); }
.ak-paire dd { font-size: 14px; font-weight: 700; color: var(--encre); margin: 0; text-align: right; }
.ak-paire dd.est-du { color: var(--orange); font-size: 16px; }

/* Le fil des messages — même carte, deux camps. */
.ak-tb-fil { display: flex; flex-direction: column; gap: var(--e3); padding: var(--e5); max-height: 60vh; overflow-y: auto; }
.ak-bulle { max-width: 78%; padding: 10px var(--e4); border-radius: 16px; font-size: 14px; line-height: 1.5; }
.ak-bulle--eux { align-self: flex-start; background: var(--creme); color: var(--encre); border-bottom-left-radius: 5px; }
.ak-bulle--moi { align-self: flex-end; background: var(--orange); color: var(--sur-couleur); border-bottom-right-radius: 5px; }
.ak-bulle__heure { display: block; font-size: 11px; opacity: .7; margin-top: 4px; }
.ak-ecrire { display: flex; gap: var(--e3); padding: var(--e4) var(--e5); border-top: 1px solid var(--trait); }
.ak-ecrire .ak-saisie { flex: 1; }

/* Dans l'espace client, la bulle de chat s'efface : le menu porte déjà
   « Messages », et elle recouvrait le coin des cartes. */
.ak-compte .ak-chat { display: none; }

/* ── LA FICHE TECHNIQUE, LA GALERIE ET LE PARCOURS — 21/08/2026 ──
   Ajoutés avec le dossier complet d'une réparation : la page n'en montrait
   que cinq champs sur une trentaine. */

/* CE QUI EST VALIDÉ SE VOIT AUTANT QUE CE QUI CLOCHE : une fiche qui ne
   listerait que les défauts laisserait croire que le reste n'a pas été
   regardé. Deux couleurs, aucune phrase. */
.ak-tb-fiche { display: flex; flex-wrap: wrap; gap: var(--e2); }
.ak-tb-fiche__point {
    display: inline-flex; align-items: center; gap: 7px;
    padding: 7px 11px;
    border-radius: var(--r-champ);
    font-size: 12.5px; font-weight: 600;
    background: var(--creme); color: var(--encre-2);
}
.ak-tb-fiche__point small { display: block; font-size: 10.5px; font-weight: 500; color: var(--g2); margin-top: 1px; }
.ak-tb-fiche__point.est-ok { background: var(--vert-doux); color: var(--vert); }
.ak-tb-fiche__point.est-ok small { color: currentColor; opacity: .7; }
.ak-tb-fiche__point.est-ko { background: var(--rouge-doux); color: var(--rouge); }
.ak-tb-fiche__point.est-ko small { color: currentColor; opacity: .7; }
.ak-tb-fiche__point svg { flex: 0 0 14px; }

/* La galerie : des carrés réguliers, parce qu'une photo d'atelier arrive dans
   tous les formats et qu'une grille irrégulière se lit mal. */
.ak-galerie { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: var(--e2); }
.ak-galerie__vue {
    display: block; aspect-ratio: 1;
    border-radius: var(--r-champ); overflow: hidden;
    background: var(--creme);
    box-shadow: inset 0 0 0 1px rgba(26, 21, 18, .07);
    transition: transform var(--t-vif) var(--e-sortie);
}
.ak-galerie__vue:hover { transform: scale(1.03); }
.ak-galerie__vue img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Le parcours : une colonne de dates, reliées par un filet. Pas de carte par
   étape — quatre cartes pour quatre dates, c'est trois de trop. */
.ak-chrono { list-style: none; margin: 0; padding: 0; position: relative; }
.ak-chrono li { position: relative; padding: 0 0 var(--e4) var(--e5); }
.ak-chrono li:last-child { padding-bottom: 0; }
.ak-chrono li::before {
    content: ''; position: absolute; left: 3px; top: 4px;
    width: 9px; height: 9px; border-radius: 50%;
    background: var(--orange);
    box-shadow: 0 0 0 3px var(--orange-doux);
}
.ak-chrono li:not(:last-child)::after {
    content: ''; position: absolute; left: 7px; top: 16px; bottom: 2px;
    width: 1.5px; background: var(--trait);
}
.ak-chrono strong { display: block; font-size: 13.5px; font-weight: 700; color: var(--encre); }
.ak-chrono span { display: block; font-size: 12.5px; color: var(--g1); margin-top: 2px; }

/* ── LE COMPTE DANS L'EN-TÊTE — 21/08/2026 ──
   Connecté, on voit sa photo et un menu au survol. Une silhouette grise
   identique pour tout le monde ne dit pas si l'on est reconnu. */
.ak-moi { position: relative; }
.ak-moi__bouton {
    width: 38px; height: 38px;
    display: grid; place-items: center;
    padding: 0; border: none; cursor: pointer;
    border-radius: 50%;
    background: var(--orange-doux);
    box-shadow: inset 0 0 0 1.5px rgba(248, 80, 0, .28);
    color: var(--orange);
    font-family: inherit; font-size: 15px; font-weight: 800;
    overflow: hidden;
    transition: box-shadow var(--t-vif) var(--e-sortie);
}
.ak-moi__bouton img { width: 100%; height: 100%; object-fit: cover; }
.ak-moi:hover .ak-moi__bouton,
.ak-moi__bouton:focus-visible { box-shadow: inset 0 0 0 2px var(--orange); outline: none; }

/* LE MENU S'OUVRE AU SURVOL ET AU CLIC.
   Au survol seul, il serait inatteignable au doigt ; au clic seul, il
   demanderait un geste de plus à la souris. Les deux, et le clavier ferme
   avec Échap. */
.ak-moi__menu {
    position: absolute; top: calc(100% + 10px); right: 0;
    min-width: 232px;
    background: var(--blanc);
    border: 1px solid var(--trait);
    border-radius: var(--r-carte);
    box-shadow: 0 20px 44px -20px rgba(26, 21, 18, .3);
    padding: var(--e2);
    opacity: 0; visibility: hidden; transform: translateY(-6px);
    transition: opacity var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie), visibility var(--t-vif);
    z-index: 60;
}
.ak-moi:hover .ak-moi__menu,
.ak-moi:focus-within .ak-moi__menu,
.ak-moi.est-ouvert .ak-moi__menu { opacity: 1; visibility: visible; transform: translateY(0); }

.ak-moi__qui { padding: var(--e3) var(--e3) var(--e2); border-bottom: 1px solid var(--trait); margin-bottom: var(--e2); }
.ak-moi__qui strong { display: block; font-size: 14px; font-weight: 700; color: var(--encre); }
.ak-moi__qui span { display: block; font-size: 12.5px; color: var(--g1); margin-top: 2px; }

.ak-moi__menu a,
.ak-moi__menu button {
    display: flex; align-items: center; gap: var(--e3);
    width: 100%; padding: 9px var(--e3);
    border: none; background: none;
    border-radius: 10px;
    font-family: inherit; font-size: 13.5px; font-weight: 600; text-align: left;
    color: var(--encre-2); text-decoration: none; cursor: pointer;
    transition: background var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-moi__menu a:hover, .ak-moi__menu button:hover { background: var(--creme); color: var(--encre); }
.ak-moi__menu svg { opacity: .7; flex: 0 0 16px; }
.ak-moi__menu form { margin: var(--e2) 0 0; padding-top: var(--e2); border-top: 1px solid var(--trait); }
.ak-moi__menu form button { color: var(--g1); }
.ak-moi__menu form button:hover { color: var(--rouge); }

/* ── LA NOTE, EN ÉTOILES — 21/08/2026 ──
   Cinq boutons radio retournés : le CSS colore l'étoile survolée et toutes
   celles qui la précèdent. Aucun JavaScript, et ça marche au clavier. */
.ak-notes { display: inline-flex; flex-direction: row-reverse; gap: 2px; }
.ak-notes input { position: absolute; opacity: 0; width: 0; height: 0; }
.ak-notes label { cursor: pointer; color: var(--g3); line-height: 0; transition: color var(--t-vif) var(--e-sortie), transform var(--t-vif) var(--e-sortie); }
.ak-notes label:hover, .ak-notes label:hover ~ label,
.ak-notes input:checked ~ label { color: var(--orange); }
.ak-notes label:hover { transform: scale(1.12); }
.ak-notes input:focus-visible + label { outline: 2px solid var(--orange); outline-offset: 3px; border-radius: 4px; }

/* ── CHOISIR UN LIEU SUR LA CARTE — 21/08/2026 ── */
.ak-lieu { position: relative; }
.ak-lieu__barre { display: flex; align-items: center; gap: var(--e3); margin-top: var(--e2); flex-wrap: wrap; }
.ak-lieu__position {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 12px;
    border: 1px solid var(--trait-fort); border-radius: var(--r-pastille);
    background: var(--blanc); color: var(--encre-2);
    font-family: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer;
    transition: border-color var(--t-vif) var(--e-sortie), color var(--t-vif) var(--e-sortie);
}
.ak-lieu__position:hover:not(:disabled) { border-color: var(--orange); color: var(--orange); }
.ak-lieu__position:disabled { opacity: .6; cursor: progress; }
.ak-lieu__ok { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 700; color: var(--vert); }

/* LA CARTE N'APPARAÎT QU'UNE FOIS LE LIEU CHOISI : une carte vide centrée sur
   rien n'aide personne, et elle coûte une requête. */
.ak-lieu__carte {
    height: 220px; margin-top: var(--e3);
    border-radius: var(--r-champ);
    border: 1px solid var(--trait);
    overflow: hidden;
    background: var(--creme);
}
.ak-lieu__carte[hidden] { display: none; }

/* La carte du suivi : plus haute que celle d'un formulaire — on la regarde,
   on n'y clique pas. */
.ak-suivi-carte { height: 320px; background: var(--creme); }
@media (max-width: 700px) { .ak-suivi-carte { height: 240px; } }

/* ═══════════════════════════════════════════════════════════════════════════
   LA SECONDE VAGUE DE L'ESPACE CLIENT — 21/08/2026, contrôle de parité.

   Carnet d'adresses, notifications, détail de commande, replis. Tout est
   préfixé `ak-` et, pour ce qui touche au tableau de bord, `ak-*-tb` : le
   préfixe EST la portée. C'est la leçon du 21/08, où un `.ak-tuile` générique
   a repeint la boutique sans que personne l'ait demandé.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── UN AVIS EN HAUT DE PAGE ──
   « Enregistré », « retiré », « impossible ». Il vit une seconde et doit se
   lire sans être cherché : d'où la barre de couleur à gauche plutôt qu'un
   simple texte vert perdu dans la page. */
.ak-avis-tb {
    display: flex; align-items: center; gap: var(--e3);
    padding: var(--e3) var(--e4);
    margin-bottom: var(--e4);
    border-radius: var(--r-champ);
    border: 1px solid var(--trait);
    border-left: 3px solid var(--g3);
    background: var(--blanc);
    font-size: 13.5px; font-weight: 600; color: var(--encre);
}
.ak-avis-tb--ok    { border-left-color: var(--vert);  background: var(--vert-doux);  color: var(--vert); }
.ak-avis-tb--faute { border-left-color: var(--rouge); background: var(--rouge-doux); color: var(--rouge); }

/* ── LE BOUTON DE RETRAIT D'UNE LIGNE ──
   Discret au repos, rouge au survol : détruire ne doit jamais être le geste
   le plus visible d'une ligne, mais doit être sans ambiguïté une fois visé. */
.ak-ligne-tb__retirer {
    display: grid; place-items: center;
    width: 34px; height: 34px; flex: 0 0 34px;
    border: 1px solid var(--trait); border-radius: 10px;
    background: transparent; color: var(--g3);
    cursor: pointer;
    transition: color var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie),
                background var(--t-vif) var(--e-sortie);
}
.ak-ligne-tb__retirer:hover { color: var(--rouge); border-color: var(--rouge); background: var(--rouge-doux); }

/* ── UNE LIGNE QUI EST UN BOUTON ──
   Les notifications s'envoient en POST (marquer lu) : c'est donc un <button>
   et non un <a>, qui n'hérite d'aucun style de lien. On lui rend la mise en
   page d'une ligne, largeur comprise. */
.ak-ligne-tb--bouton {
    width: 100%; border: 0; background: transparent;
    text-align: left; font: inherit; cursor: pointer;
}
.ak-ligne-tb--bouton:hover { background: var(--creme); }
/* NON LUE : le fond très pâle fait le travail à lui seul dans une liste — le
   point à droite ne sert qu'à trancher les cas isolés. */
.ak-ligne-tb--neuve { background: var(--orange-doux); }
.ak-ligne-tb--neuve .ak-ligne-tb__nom { font-weight: 800; }
.ak-ligne-tb--neuve:hover { background: var(--orange-doux); filter: brightness(.985); }
.ak-ligne-tb__cote {
    display: flex; flex-direction: column; align-items: flex-end; gap: 6px;
    flex: 0 0 auto;
}
.ak-ligne-tb__quand { font-size: 11.5px; color: var(--g1); white-space: nowrap; }
.ak-ligne-tb__point { width: 8px; height: 8px; border-radius: 50%; background: var(--orange); }

/* ── UNE CARTE QUI SE REPLIE ──
   « J'ai le code d'un ami », « Modifier ma collecte », « Changer de numéro » :
   des gestes rares, qui ne doivent pas encombrer la page de ceux qui viennent
   pour autre chose. Le marqueur natif est retiré au profit d'un chevron. */
.ak-repli > summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: var(--e3); }
.ak-repli > summary::-webkit-details-marker { display: none; }
.ak-repli > summary::after {
    content: ""; flex: 0 0 auto;
    width: 8px; height: 8px;
    border-right: 2px solid var(--g3); border-bottom: 2px solid var(--g3);
    transform: rotate(45deg) translate(-2px, -2px);
    transition: transform var(--t-vif) var(--e-sortie);
}
.ak-repli[open] > summary::after { transform: rotate(-135deg) translate(-2px, -2px); }
.ak-repli > summary:hover { background: var(--creme); }

/* ── LE PARCOURS D'UNE COMMANDE ──
   Trois jalons, horizontaux : reçue, en préparation, livrée. La barre relie
   les ronds pour qu'on lise une progression et non trois états séparés. */
.ak-frise { display: flex; list-style: none; margin: 0; padding: 0; }
.ak-frise__pas { flex: 1; position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.ak-frise__pas::before {
    content: ""; position: absolute; top: 11px; left: -50%; width: 100%; height: 2px;
    background: var(--trait);
}
.ak-frise__pas:first-child::before { display: none; }
.ak-frise__pas--fait::before { background: var(--orange); }
.ak-frise__rond {
    position: relative; z-index: 1;
    width: 24px; height: 24px; border-radius: 50%;
    display: grid; place-items: center;
    background: var(--creme); color: transparent;
    box-shadow: inset 0 0 0 2px var(--trait);
}
.ak-frise__pas--fait .ak-frise__rond { background: var(--orange); color: #fff; box-shadow: none; }
.ak-frise__mot { font-size: 11.5px; font-weight: 700; color: var(--g1); text-align: center; }
.ak-frise__pas--fait .ak-frise__mot { color: var(--encre); }

/* ── LA DÉCOMPOSITION D'UN TOTAL ──
   Chiffres alignés à droite en chasse fixe : c'est ce qui rend une addition
   vérifiable d'un coup d'œil. */
.ak-compte-ligne {
    display: flex; align-items: baseline; justify-content: space-between; gap: var(--e3);
    padding: 7px 0;
    font-size: 13.5px; color: var(--g1);
}
.ak-compte-ligne > :last-child { font-weight: 700; color: var(--encre); font-variant-numeric: tabular-nums; }
.ak-compte-ligne--total {
    border-top: 1px solid var(--trait); margin-top: var(--e2); padding-top: var(--e3);
    font-size: 15px; font-weight: 700; color: var(--encre);
}
.ak-compte-ligne--total > :last-child { font-size: 17px; font-weight: 800; }
.ak-compte-ligne--du > :last-child { color: var(--orange); font-size: 16px; font-weight: 800; }

/* ── LES PIÈCES JOINTES DU FIL — 21/08/2026, après contrôle.
   La vue n'affichait que le texte : cinq messages n'ayant qu'une photo
   s'affichaient en bulles vides. Une image se montre, un vocal se joue, un
   document se nomme — et une position mène à la carte. */
.ak-bulle__photo { display: block; margin-bottom: 6px; border-radius: 12px; overflow: hidden; max-width: 240px; }
.ak-bulle__photo img { display: block; width: 100%; height: auto; }
.ak-bulle__media { display: block; width: 100%; max-width: 240px; margin-bottom: 6px; }
.ak-bulle__piece {
    display: inline-flex; align-items: center; gap: 6px;
    margin-bottom: 6px; padding: 7px 11px;
    border-radius: 10px;
    /* Le fond emprunte à la bulle qui la porte : une pastille blanche sur une
       bulle orange se lirait comme un élément d'une autre page. */
    background: rgba(255, 255, 255, .18);
    font-size: 12.5px; font-weight: 700; text-decoration: none; color: inherit;
}
.ak-bulle--eux .ak-bulle__piece { background: rgba(26, 21, 18, .06); }
.ak-bulle__piece:hover { text-decoration: underline; }

/* LE TROMBONE — même hauteur que le champ, pour que la barre reste une ligne. */
.ak-ecrire__trombone {
    display: grid; place-items: center;
    width: 44px; height: 44px; flex: 0 0 44px;
    border: 1px solid var(--trait); border-radius: var(--r-champ);
    color: var(--g1); cursor: pointer;
    transition: color var(--t-vif) var(--e-sortie), border-color var(--t-vif) var(--e-sortie);
}
.ak-ecrire__trombone:hover { color: var(--orange); border-color: var(--orange); }
.ak-ecrire__choix { padding: 0 var(--e5) var(--e3); font-size: 12px; font-weight: 700; color: var(--orange); }
.ak-ecrire__choix[hidden] { display: none; }

/* ── LE TRAIT ENTRE DEUX NOTIFICATIONS — après contrôle.
   Chaque ligne est enveloppée dans son propre <form> (elle poste « marquer
   lu »), si bien que `.ak-ligne-tb + .ak-ligne-tb` ne se déclenchait jamais :
   les notifications se touchaient sans séparation, seules de tout le compte à
   le faire. On recolle le trait sur le formulaire. */
.ak-carte-tb__corps--serre > form + form .ak-ligne-tb { border-top: 1px solid var(--trait); }

/* Un bouton-ligne doit s'enfoncer comme les autres : sans retour visuel, un
   clic sur réseau lent se répète. */
.ak-ligne-tb--bouton:active,
.ak-ligne-tb__retirer:active { transform: scale(.995); }

/* ── LES PAGES D'ERREUR — 21/08/2026, après contrôle.
   Le site rendait les gabarits d'usine de Laravel, en anglais et sans en-tête.
   Une impasse doit proposer une sortie : trois liens et un numéro. */
.ak-egaree { text-align: center; padding-block: var(--e9) var(--e8); max-width: 620px; }
.ak-egaree__rond {
    display: grid; place-items: center;
    width: 76px; height: 76px; margin: 0 auto var(--e5);
    border-radius: 50%; background: var(--orange-doux); color: var(--orange);
}
.ak-egaree h1 {
    font-size: clamp(26px, 3vw, 38px); font-weight: 800;
    letter-spacing: -.042em; line-height: 1.08; color: var(--encre);
}
.ak-egaree > p { margin-top: var(--e4); font-size: 15px; line-height: 1.65; color: var(--g1); }
.ak-egaree__gestes { display: flex; gap: var(--e3); flex-wrap: wrap; justify-content: center; margin-top: var(--e6); }
.ak-egaree__aide { margin-top: var(--e6); font-size: 13.5px; color: var(--g1); }
.ak-egaree__aide a { color: var(--orange); font-weight: 700; text-decoration: none; }
