:root {
    /* Surfaces claires */
    --fond: #f5f2ec;
    --fond-2: #eae5da;
    --carte: #ffffff;
    --carte-2: #faf8f3;

    /* Traits */
    --trait: #ddd7c9;
    --trait-fort: #c2bba8;

    /* Encres */
    --texte: #17181a;
    --texte-2: #55585e;
    --texte-3: #82858c;

    /* Signalétique */
    --orange: #d07737;
    --orange-clair: #e08b45;
    --orange-texte: #a4511a;
    --orange-rgb: 208, 119, 55;
    --jaune: #d99e12;

    /* Typo */
    --police-titre: 'Oswald', 'Arial Narrow', sans-serif;
    --police-texte: 'Barlow', system-ui, -apple-system, sans-serif;

    /* Trames */
    --bande-danger: repeating-linear-gradient(135deg,
            var(--orange) 0 14px,
            #1a1a1c 14px 28px);
    --perfo: radial-gradient(circle, rgba(23, 24, 26, .07) 1.4px, transparent 1.5px);

    --largeur: 1240px;
    --sortie: cubic-bezier(.16, 1, .3, 1);
    --ombre: 0 2px 4px rgba(30, 26, 20, .05), 0 12px 28px rgba(30, 26, 20, .07);
    --ombre-forte: 0 4px 10px rgba(30, 26, 20, .1), 0 20px 44px rgba(30, 26, 20, .14);
}

/* Zones sombres : mêmes composants, jetons inversés. */
.sombre {
    --fond: #131417;
    --fond-2: #0e0f11;
    --carte: #1c1e22;
    --carte-2: #26282d;
    --trait: #2f3238;
    --trait-fort: #454951;
    --texte: #f3f1ed;
    --texte-2: #b2b6bd;
    --texte-3: #8b8f97;
    --orange-texte: #e39154;
    --perfo: radial-gradient(circle, rgba(255, 255, 255, .06) 1.4px, transparent 1.5px);
    --ombre: 0 12px 28px rgba(0, 0, 0, .4);
    --ombre-forte: 0 20px 44px rgba(0, 0, 0, .5);

    color: var(--texte);
}

/* ---------------------------------------------------------
   BASE
   --------------------------------------------------------- */

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

html {
    background: var(--fond);
    scroll-behavior: smooth;
    -webkit-text-size-adjust: 100%;
}

body {
    background: var(--fond);
    color: var(--texte);
    font-family: var(--police-texte);
    font-size: 1.02rem;
    line-height: 1.65;
    overflow-x: hidden;
}

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

ul {
    list-style: none;
}

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

button,
input,
textarea {
    font: inherit;
    color: inherit;
}

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

section[id] {
    scroll-margin-top: 84px;
}

.container {
    max-width: var(--largeur);
    margin-inline: auto;
    padding-inline: 22px;
}

/* Icônes (sprite SVG intégré) */
.ico {
    width: 1em;
    height: 1em;
    display: inline-block;
    flex: none;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
    vertical-align: -.125em;
}

/* Bande de signalisation */
.bande-danger {
    height: 9px;
    background: var(--bande-danger);
}

/* Étiquette technique */
.etiquette {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .78rem;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: var(--orange-texte);
    display: inline-flex;
    align-items: center;
    gap: 10px;
}

.etiquette::before {
    content: "";
    width: 26px;
    height: 2px;
    background: var(--orange);
}

/* Titres de section */
.tete-section {
    margin-bottom: 46px;
}

.tete-section h2 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(2rem, 5vw, 3.1rem);
    line-height: 1.02;
    letter-spacing: .01em;
    text-transform: uppercase;
    margin-top: 12px;
}

.tete-section p {
    color: var(--texte-2);
    margin-top: 12px;
    max-width: 62ch;
}

.tete-section.centre {
    text-align: center;
}

.tete-section.centre .etiquette {
    justify-content: center;
}

.tete-section.centre p {
    margin-inline: auto;
}

.tete-section.tete-serree {
    margin-bottom: 24px;
}

.titre-bloc {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(1.9rem, 4.4vw, 2.9rem);
    line-height: 1.03;
    letter-spacing: .01em;
    text-transform: uppercase;
    margin: 14px 0 20px;
}

/* Boutons */
.btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .95rem;
    letter-spacing: .13em;
    text-transform: uppercase;
    padding: 15px 26px;
    border: 2px solid var(--orange);
    background: var(--orange);
    color: #fff;
    cursor: pointer;
    transition: background-color .18s linear, color .18s linear,
        border-color .18s linear, transform .18s var(--sortie), box-shadow .18s linear;
}

.btn:hover {
    background: var(--orange-clair);
    border-color: var(--orange-clair);
    transform: translateY(-2px);
    box-shadow: 0 8px 18px rgba(var(--orange-rgb), .32);
}

.btn:active {
    transform: translateY(0);
}

.btn .ico {
    font-size: 1.15em;
    stroke-width: 2;
}

.btn-vide {
    background: transparent;
    color: var(--texte);
    border-color: var(--trait-fort);
    box-shadow: none;
}

.btn-vide:hover {
    background: transparent;
    border-color: var(--orange);
    color: var(--orange-texte);
    box-shadow: none;
}

.btn-fantome {
    background: transparent;
    color: var(--orange-texte);
    border-color: var(--orange);
}

.btn-fantome:hover {
    background: var(--orange);
    color: #fff;
}

/* Apparition au scroll — opacité + translation seulement */
.reveal {
    opacity: 0;
    transform: translateY(14px);
    transition: opacity .5s var(--sortie) var(--reveal-delay, 0ms),
        transform .5s var(--sortie) var(--reveal-delay, 0ms);
}

.reveal.visible {
    opacity: 1;
    transform: none;
}

/* ---------------------------------------------------------
   EN-TÊTE
   --------------------------------------------------------- */

#header {
    position: fixed;
    inset: 0 0 auto 0;
    z-index: 900;
    height: 84px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    padding: 0 26px;
    background: rgba(255, 255, 255, .96);
    border-bottom: 1px solid var(--trait);
    transition: height .22s ease, box-shadow .22s linear;
}

/* ---------------------------------------------------------
   JAUGE DE PROGRESSION
   --------------------------------------------------------- */

.progression {
    --roue: 30px;
    position: absolute;
    inset: auto 0 -6px 0;
    height: 6px;
    pointer-events: none;
    background: rgba(23, 24, 26, .07);
}

.progression-barre {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--roue) / 2 + var(--progression, 0) * (100% - var(--roue)));
    opacity: var(--roue-visible, 0);
    transition: opacity .3s var(--sortie);
    background: var(--bande-danger);
    box-shadow: 0 0 18px rgba(var(--orange-rgb), calc(.2 + .35 * var(--vitesse, 0)));
}

.progression-roue {
    position: absolute;
    top: 50%;
    left: calc(var(--progression, 0) * (100% - var(--roue)));
    width: var(--roue);
    height: var(--roue);
    margin-top: calc(var(--roue) / -2);
    opacity: var(--roue-visible, 0);
    transform: scale(calc(.55 + .45 * var(--roue-visible, 0)));
    transition: opacity .3s var(--sortie), transform .35s var(--sortie);
}

/* Traînée derrière la roue, allongée par la vitesse de défilement */
.progression-roue::before {
    content: "";
    position: absolute;
    top: 50%;
    right: calc(var(--roue) / 2);
    width: calc(22px + 110px * var(--vitesse, 0));
    height: 3px;
    margin-top: -1.5px;
    border-radius: 3px;
    background: linear-gradient(90deg, transparent, rgba(var(--orange-rgb), .9));
    filter: blur(2px);
    opacity: calc(.3 + .55 * var(--vitesse, 0));
}

/* Halo sous la roue */
.progression-roue::after {
    content: "";
    position: absolute;
    inset: -10px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(var(--orange-rgb), .4), transparent 70%);
    opacity: calc(.45 + .55 * var(--vitesse, 0));
}

.progression-roue img {
    position: relative;
    z-index: 1;
    display: block;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background: #fff;
    box-shadow:
        0 0 0 2px rgba(255, 255, 255, .95),
        0 3px 10px rgba(30, 26, 20, .28),
        0 0 18px rgba(var(--orange-rgb), .45);
    rotate: var(--roue-angle, 0deg);
}

/* Arrivée en bas de page : la roue s'illumine */
.progression.au-bout .progression-roue img {
    box-shadow:
        0 0 0 2px #fff,
        0 3px 10px rgba(30, 26, 20, .28),
        0 0 30px rgba(var(--orange-rgb), .85);
}

#header.compact {
    height: 66px;
    background: #fff;
    box-shadow: 0 4px 20px rgba(30, 26, 20, .1);
}

/* ---------------------------------------------------------
   BANDEAU INFOS IMPORTANTES
   --------------------------------------------------------- */

.bandeau-info {
    position: fixed;
    inset: 84px 0 auto 0;
    z-index: 890;
    height: 38px;
    overflow: hidden;
    background: var(--orange);
    transition: inset .22s ease;
}

.bandeau-info[hidden] {
    display: none;
}

#header.compact~.bandeau-info {
    inset-block-start: 66px;
}

.bandeau-info-piste {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    width: max-content;
    white-space: nowrap;
    animation: defilement-info 45s linear infinite;
}

.bandeau-info-groupe {
    display: flex;
    align-items: center;
    flex: none;
}

.bandeau-info-texte {
    display: inline-flex;
    align-items: center;
    flex: none;
    gap: 8px;
    padding-inline-end: 64px;
    color: #fff;
    font-family: var(--police-titre);
    font-size: .88rem;
    letter-spacing: .02em;
    white-space: nowrap;
}

.bandeau-info-texte strong {
    text-transform: uppercase;
    font-weight: 700;
}

@keyframes defilement-info {
    from {
        transform: translateX(0);
    }

    to {
        transform: translateX(-50%);
    }
}

.marque {
    display: flex;
    align-items: center;
    gap: 14px;
    min-width: 0;
}

.marque img {
    height: 48px;
    width: 48px;
    transition: height .22s ease, width .22s ease;
}

#header.compact .marque img {
    height: 40px;
    width: 40px;
}

.marque-texte {
    display: flex;
    flex-direction: column;
    line-height: 1;
    min-width: 0;
}

.marque-texte .sur-titre {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .64rem;
    letter-spacing: .26em;
    color: var(--orange-texte);
    margin-bottom: 5px;
}

.marque-texte h1,
.marque-texte .nom {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.42rem;
    letter-spacing: .04em;
    text-transform: uppercase;
    white-space: nowrap;
}

#nav-list {
    display: flex;
    align-items: center;
    gap: 2px;
}

#nav-list a {
    display: block;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .84rem;
    letter-spacing: .14em;
    text-transform: uppercase;
    padding: 10px 12px;
    color: var(--texte-2);
    position: relative;
    transition: color .16s linear;
}

#nav-list a::after {
    content: "";
    position: absolute;
    left: 12px;
    right: 12px;
    bottom: 4px;
    height: 2px;
    background: var(--orange);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .2s var(--sortie);
}

#nav-list a:hover,
#nav-list a.actif {
    color: var(--texte);
}

#nav-list a:hover::after,
#nav-list a.actif::after {
    transform: scaleX(1);
}

#nav-list .nav-contact a {
    margin-left: 10px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: #fff;
    background: var(--orange);
    border: 2px solid var(--orange);
    padding: 9px 18px;
}

.ico-tel-anime {
    animation: secousse-tel 2.6s ease-in-out infinite;
    transform-origin: 70% 70%;
}

@keyframes secousse-tel {
    0%, 75%, 100% {
        transform: rotate(0);
    }
    78% {
        transform: rotate(-16deg);
    }
    81% {
        transform: rotate(13deg);
    }
    84% {
        transform: rotate(-10deg);
    }
    87% {
        transform: rotate(7deg);
    }
    90% {
        transform: rotate(-4deg);
    }
    93% {
        transform: rotate(0);
    }
}

@media (prefers-reduced-motion: reduce) {
    .ico-tel-anime {
        animation: none;
    }
}

#nav-list .nav-contact a::after {
    display: none;
}

#nav-list .nav-contact a:hover {
    background: var(--orange-clair);
    border-color: var(--orange-clair);
    color: #fff;
}

#mobile-menu-btn {
    display: none;
    background: none;
    border: 1px solid var(--trait-fort);
    color: var(--texte);
    width: 44px;
    height: 44px;
    font-size: 1.3rem;
    cursor: pointer;
    align-items: center;
    justify-content: center;
}

#mobile-menu-btn:hover {
    border-color: var(--orange);
    color: var(--orange-texte);
}

/* ---------------------------------------------------------
   HÉRO
   --------------------------------------------------------- */

.hero {
    position: relative;
    display: flex;
    align-items: center;
    min-height: clamp(600px, 90vh, 860px);
    padding: 120px 0 60px;
    background: var(--fond);
    overflow: hidden;
}

.hero-photo {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center 58%;
}

.hero-voile {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(100deg,
            rgba(245, 242, 236, .84) 0%,
            rgba(245, 242, 236, .52) 44%,
            rgba(245, 242, 236, 0) 74%),
        linear-gradient(0deg, var(--fond) 1%, rgba(245, 242, 236, 0) 24%);
}

.hero-contenu {
    position: relative;
    width: 100%;
    max-width: var(--largeur);
    margin-inline: auto;
    padding: 0 22px;
}

.hero-panneau {
    max-width: 580px;
    background: var(--carte);
    border: 1px solid var(--trait);
    border-top: 0;
    padding: 40px 42px 42px;
    box-shadow: var(--ombre-forte);
}

.hero-panneau::before {
    content: "";
    display: block;
    height: 9px;
    margin: -40px -42px 32px;
    background: var(--bande-danger);
}

.hero-sur-titre {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .8rem;
    letter-spacing: .26em;
    text-transform: uppercase;
    color: var(--orange-texte);
    border-left: 3px solid var(--orange);
    padding-left: 14px;
    margin-bottom: 20px;
}

.hero h2 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(2.5rem, 5.6vw, 4.3rem);
    line-height: .97;
    text-transform: uppercase;
}

.hero h2 .fin {
    display: block;
    font-weight: 500;
    color: var(--texte-2);
}

.sceau-1934 {
    display: inline-flex;
    align-items: baseline;
    gap: 9px;
    margin-top: 18px;
    padding: 5px 16px 7px;
    background: var(--orange);
    color: #fff;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .88rem;
    letter-spacing: .2em;
    text-transform: uppercase;
}

.sceau-1934 strong {
    font-weight: 700;
    font-size: 1.25rem;
    letter-spacing: .06em;
}

.drapeau-fr {
    display: inline-block;
    width: auto;
    height: 1em;
    vertical-align: -.14em;
    margin-left: .1em;
}

.hero p.accroche {
    margin-top: 24px;
    font-size: 1.1rem;
    color: var(--texte-2);
    max-width: 48ch;
}

.hero-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 30px;
}

/* ---------------------------------------------------------
   PLAQUE D'IMMATRICULATION (téléphone)
   --------------------------------------------------------- */

.plaque-immat {
    --plaque-h: 54px;
    --reflet: .5;
    position: relative;
    display: flex;
    align-items: stretch;
    flex: none;
    height: var(--plaque-h);
    border: 2px solid #17181a;
    border-radius: 7px;
    background: #fff;
    overflow: hidden;
    box-shadow:
        0 1px 0 rgba(255, 255, 255, .9) inset,
        0 2px 6px rgba(30, 26, 20, .18);
    transition: transform .18s var(--sortie), box-shadow .18s linear;
}

/* Reflets sur toute la plaque, bandes comprises */
.plaque-immat::before,
.plaque-immat::after {
    content: "";
    position: absolute;
    pointer-events: none;
    opacity: var(--reflet);
}

/* Galbe du plexi */
.plaque-immat::before {
    inset: 0;
    background:
        radial-gradient(34% 115% at 31% -16%,
            rgba(255, 255, 255, .85) 0%,
            rgba(255, 255, 255, .3) 44%,
            rgba(255, 255, 255, 0) 72%),
        radial-gradient(130% 74% at 50% -26%,
            rgba(255, 255, 255, .8) 0%,
            rgba(255, 255, 255, .18) 46%,
            rgba(255, 255, 255, 0) 70%),
        linear-gradient(179deg,
            rgba(255, 255, 255, .95) 0%,
            rgba(255, 255, 255, .6) 4%,
            rgba(255, 255, 255, .12) 15%,
            rgba(255, 255, 255, 0) 30%,
            rgba(24, 34, 52, .05) 56%,
            rgba(24, 34, 52, .13) 88%,
            rgba(255, 255, 255, .22) 96%,
            rgba(255, 255, 255, .6) 100%);
}

/* Éclats en diagonale */
.plaque-immat::after {
    inset: 0 -22%;
    background: linear-gradient(101deg,
            rgba(58, 78, 110, 0) 8%,
            rgba(58, 78, 110, .13) 18%,
            rgba(255, 255, 255, .5) 25%,
            rgba(255, 255, 255, .96) 29%,
            rgba(255, 255, 255, .96) 31.5%,
            rgba(255, 255, 255, .45) 35%,
            rgba(58, 78, 110, .16) 40%,
            rgba(58, 78, 110, .07) 50%,
            rgba(58, 78, 110, .15) 62%,
            rgba(255, 255, 255, .38) 67%,
            rgba(255, 255, 255, .82) 71%,
            rgba(255, 255, 255, .3) 75%,
            rgba(58, 78, 110, .14) 80%,
            rgba(58, 78, 110, 0) 92%);
    transform: translateX(0);
    transition: transform .5s var(--sortie);
}

/* Au survol la plaque se soulève */
.plaque-immat:hover,
.plaque-immat:focus-visible {
    transform: translateY(-2px);
    box-shadow:
        0 1px 0 rgba(255, 255, 255, .9) inset,
        0 8px 20px rgba(30, 26, 20, .28);
}

.plaque-immat:hover::after,
.plaque-immat:focus-visible::after {
    transform: translateX(-9%);
}

.plaque-immat-bande {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1px;
    flex: none;
    width: calc(var(--plaque-h) * .46);
    padding-block: 3px;
    background: linear-gradient(180deg, #1c46b8, #0d2f8e);
    color: #fff;
    font-family: var(--police-titre);
    line-height: 1;
}

.plaque-immat-etoiles {
    width: calc(var(--plaque-h) * .32);
    height: calc(var(--plaque-h) * .32);
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cg fill='%23ffcc00'%3E%3Ccircle cx='10' cy='3' r='1.15'/%3E%3Ccircle cx='13.5' cy='3.94' r='1.15'/%3E%3Ccircle cx='16.06' cy='6.5' r='1.15'/%3E%3Ccircle cx='17' cy='10' r='1.15'/%3E%3Ccircle cx='16.06' cy='13.5' r='1.15'/%3E%3Ccircle cx='13.5' cy='16.06' r='1.15'/%3E%3Ccircle cx='10' cy='17' r='1.15'/%3E%3Ccircle cx='6.5' cy='16.06' r='1.15'/%3E%3Ccircle cx='3.94' cy='13.5' r='1.15'/%3E%3Ccircle cx='3' cy='10' r='1.15'/%3E%3Ccircle cx='3.94' cy='6.5' r='1.15'/%3E%3Ccircle cx='6.5' cy='3.94' r='1.15'/%3E%3C/g%3E%3C/svg%3E") center / contain no-repeat;
}

.plaque-immat-pays {
    font-size: calc(var(--plaque-h) * .3);
    font-weight: 700;
    letter-spacing: 0;
}

.plaque-immat-blason {
    display: block;
    width: auto;
    height: calc(var(--plaque-h) * .38);
}

.plaque-immat-dept {
    font-size: calc(var(--plaque-h) * .32);
    font-weight: 700;
}

.plaque-immat-numero {
    display: flex;
    align-items: center;
    padding-inline: calc(var(--plaque-h) * .22);
    margin-top: -2px;
    color: #17181a;
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: calc(var(--plaque-h) * .66);
    line-height: 1;
    letter-spacing: .02em;
    white-space: nowrap;
    background: linear-gradient(180deg, #fdfdfc 0%, #f7f6f3 46%, #eceae4 82%, #f2f1ed 100%);
}

/* Bouton rond, à côté de la plaque : renvoie vers l'atelier. */
.btn-atelier {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: var(--plaque-h, 54px);
    height: var(--plaque-h, 54px);
    overflow: hidden;
    border: 2px solid var(--orange);
    border-radius: 50%;
    background: var(--orange);
    color: #fff;
    box-shadow: 0 2px 6px rgba(30, 26, 20, .18);
    transition: background-color .18s linear, border-color .18s linear,
        transform .18s var(--sortie), box-shadow .18s linear;
    animation: clignote-atelier 2.6s ease-in-out infinite;
}

.btn-atelier::before {
    content: "";
    position: absolute;
    inset: 0;
    background: url("img/logo_garage_luthringer_2024.svg") center / 78% no-repeat;
    mix-blend-mode: multiply;
    opacity: .25;
}

.btn-atelier .ico {
    position: relative;
    transform: rotate(90deg);
    stroke-width: 2;
}

.btn-atelier:hover,
.btn-atelier:focus-visible {
    background: var(--orange-clair);
    border-color: var(--orange-clair);
    transform: translateY(-2px);
    box-shadow: 0 8px 18px rgba(var(--orange-rgb), .32);
    animation-play-state: paused;
}

@keyframes clignote-atelier {

    0%,
    100% {
        opacity: 1;
        box-shadow: 0 2px 6px rgba(30, 26, 20, .18), 0 0 0 0 rgba(var(--orange-rgb), .45);
    }

    50% {
        opacity: .82;
        box-shadow: 0 2px 6px rgba(30, 26, 20, .18), 0 0 0 8px rgba(var(--orange-rgb), 0);
    }
}

@media (prefers-reduced-motion: reduce) {
    .btn-atelier {
        animation: none;
    }
}

/* ---------------------------------------------------------
   BANDEAU DE SERVICE
   --------------------------------------------------------- */

.bandeau-service {
    background: #131417;
    border-top: 3px solid var(--orange);
}

.bandeau-grille {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
}

.bandeau-case {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 22px;
    border-left: 1px solid var(--trait);
    min-width: 0;
}

.bandeau-case:first-child {
    border-left: 0;
}

.bandeau-case>.ico {
    font-size: 1.45rem;
    color: var(--orange);
    stroke-width: 1.5;
}

.bandeau-case dt {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .7rem;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--texte-3);
}

.bandeau-case dd {
    font-weight: 600;
    font-size: 1.02rem;
    line-height: 1.3;
}

.bandeau-case dd a:hover {
    color: var(--orange-texte);
}

/* Voyant ouvert / fermé */
.voyant {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-family: var(--police-titre);
    font-weight: 500;
    letter-spacing: .12em;
    text-transform: uppercase;
    font-size: .95rem;
}

.voyant::before {
    content: "";
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--texte-3);
    box-shadow: 0 0 0 3px rgba(127, 127, 127, .18);
}

.voyant.ouvert {
    color: #6dd07f;
}

.voyant.ouvert::before {
    background: #4fbf67;
    box-shadow: 0 0 0 3px rgba(79, 191, 103, .2);
}

.voyant.ferme {
    color: #e2705e;
}

.voyant.ferme::before {
    background: #d4563f;
    box-shadow: 0 0 0 3px rgba(212, 86, 63, .2);
}

.voyant.bientot {
    color: #e0a13c;
}

.voyant.bientot::before {
    background: #e0a13c;
    box-shadow: 0 0 0 3px rgba(224, 161, 60, .2);
}

.voyant-detail {
    display: block;
    font-family: var(--police-texte);
    font-size: .82rem;
    letter-spacing: 0;
    text-transform: none;
    color: var(--texte-3);
}

/* ---------------------------------------------------------
   BANDEAUX PHOTO
   --------------------------------------------------------- */

.bande-photo {
    position: relative;
    overflow: hidden;
    background: #131417;
}

.bande-photo>img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.bande-photo .voile-photo {
    position: absolute;
    inset: 0;
    background: linear-gradient(95deg,
            rgba(14, 14, 16, .93) 0%,
            rgba(14, 14, 16, .78) 45%,
            rgba(14, 14, 16, .4) 100%);
}

.bande-photo .container {
    position: relative;
    padding-block: clamp(64px, 8vw, 104px);
}

.bande-photo-contenu {
    max-width: 640px;
}

.bande-photo h2 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(1.7rem, 3.8vw, 2.7rem);
    line-height: 1.06;
    text-transform: uppercase;
    margin: 14px 0 16px;
}

.bande-photo p {
    color: var(--texte-2);
    font-size: 1.06rem;
    max-width: 54ch;
}

.bande-photo .hero-actions {
    margin-top: 28px;
}

/* Variante archive (photo d'époque) */
.bande-archive>img {
    filter: grayscale(1) contrast(1.08);
    object-position: center 45%;
}

.bande-archive .voile-photo {
    background: linear-gradient(95deg,
            rgba(12, 12, 14, .9) 0%,
            rgba(12, 12, 14, .74) 50%,
            rgba(12, 12, 14, .52) 100%);
}

/* ---------------------------------------------------------
   L'ATELIER + PLAQUE CONSTRUCTEUR
   --------------------------------------------------------- */

.atelier {
    padding: 96px 0;
    background: var(--fond);
}

.atelier-grille {
    display: grid;
    grid-template-columns: 1.15fr .85fr;
    gap: 56px;
    align-items: start;
}

.atelier-texte p {
    color: var(--texte-2);
    margin-top: 18px;
}

.atelier-texte p.chapeau {
    font-size: 1.22rem;
    color: var(--texte);
    font-weight: 600;
}

.atelier-actions {
    margin-top: 28px;
}

.plaque {
    background: linear-gradient(160deg, #fdfcfa, #ebe6dc);
    border: 1px solid var(--trait-fort);
    padding: 26px 28px 28px;
    position: relative;
    box-shadow: var(--ombre);
}

/* rivets aux quatre coins */
.plaque::before {
    content: "";
    position: absolute;
    inset: 9px;
    border: 1px dashed rgba(23, 24, 26, .16);
    background-image:
        radial-gradient(circle at 4px 4px, #a8a293 1.9px, transparent 2px),
        radial-gradient(circle at calc(100% - 4px) 4px, #a8a293 1.9px, transparent 2px),
        radial-gradient(circle at 4px calc(100% - 4px), #a8a293 1.9px, transparent 2px),
        radial-gradient(circle at calc(100% - 4px) calc(100% - 4px), #a8a293 1.9px, transparent 2px);
    pointer-events: none;
}

.plaque h3 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.05rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--orange-texte);
    padding-bottom: 14px;
    margin-bottom: 6px;
    border-bottom: 1px solid var(--trait-fort);
}

.plaque dl {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0;
}

.plaque dt,
.plaque dd {
    padding: 11px 0;
    border-bottom: 1px dotted var(--trait-fort);
}

.plaque dt {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .74rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--texte-3);
    display: flex;
    align-items: center;
    padding-right: 18px;
}

.plaque dd {
    text-align: right;
    font-weight: 600;
    color: var(--texte);
}

.plaque dl>*:nth-last-child(-n+2) {
    border-bottom: 0;
}

.plaque dd .gros {
    font-family: var(--police-titre);
    font-size: 1.5rem;
    color: var(--orange-texte);
    line-height: 1;
}

/* ---------------------------------------------------------
   MARQUES — BANDEAU DÉFILANT
   --------------------------------------------------------- */

.marques {
    padding: 88px 0;
    background-color: var(--fond-2);
    background-image: var(--perfo);
    background-size: 24px 24px;
    border-top: 1px solid var(--trait);
    border-bottom: 1px solid var(--trait);
    overflow: hidden;
}

.marques .tete-section {
    margin-bottom: 34px;
}

.marques-bandeau {
    display: grid;
    gap: 14px;
    -webkit-mask-image: linear-gradient(90deg,
            transparent 0,
            #000 7%,
            #000 93%,
            transparent 100%);
    mask-image: linear-gradient(90deg,
            transparent 0,
            #000 7%,
            #000 93%,
            transparent 100%);
}

.marques-piste {
    overflow-x: hidden;
    overflow-y: hidden;
    pointer-events: none;
}

.marques-file {
    display: flex;
    align-items: stretch;
    gap: 14px;
    width: max-content;
    padding: 6px;
    margin: 0;
    list-style: none;
}

.pastille-marque {
    flex: 0 0 auto;
    display: grid;
    place-items: center;
    width: 172px;
    height: 98px;
    padding: 14px 18px;
    background: var(--carte);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
    transition: transform .25s var(--sortie), border-color .25s, box-shadow .25s;
}

.pastille-marque img {
    max-width: 100%;
    max-height: 52px;
    width: auto;
    height: auto;
    object-fit: contain;
    -webkit-user-drag: none;
    user-select: none;
}

@media (hover: hover) {
    .pastille-marque:hover {
        transform: translateY(-3px);
        border-color: var(--orange);
        box-shadow: var(--ombre-forte);
    }
}

.marques-mention {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin-top: 30px;
    text-align: center;
    color: var(--texte-2);
    font-size: .95rem;
}

.marques-mention .ico {
    flex: none;
    color: var(--orange-texte);
}

@media (max-width: 720px) {
    .marques {
        padding: 68px 0;
    }

    .pastille-marque {
        width: 138px;
        height: 82px;
        padding: 12px 14px;
    }

    .pastille-marque img {
        max-height: 42px;
    }

    .marques-mention {
        text-align: left;
        justify-content: flex-start;
    }
}

/* ---------------------------------------------------------
   PRESTATIONS
   --------------------------------------------------------- */

.prestations {
    padding: 96px 0;
    background-color: var(--fond-2);
    background-image: var(--perfo);
    background-size: 24px 24px;
    border-top: 1px solid var(--trait);
    border-bottom: 1px solid var(--trait);
}

.barre-outils {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 26px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--trait-fort);
}

.champ-recherche {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--carte);
    border: 1px solid var(--trait-fort);
    padding: 0 14px;
    min-width: 280px;
    flex: 1 1 280px;
    max-width: 420px;
}

.champ-recherche .ico {
    color: var(--texte-3);
    font-size: 1.15rem;
}

.champ-recherche input {
    flex: 1;
    background: none;
    border: 0;
    outline: none;
    padding: 13px 0;
    font-size: .98rem;
}

.champ-recherche input::placeholder {
    color: var(--texte-3);
}

.compteur-presta {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .8rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--texte-3);
}

.grille-presta {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(216px, 1fr));
    gap: 1px;
    background: var(--trait);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
}

.presta {
    position: relative;
    background: var(--carte);
    border: 0;
    text-align: left;
    padding: 26px 20px 22px;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: 14px;
    min-height: 148px;
    color: var(--texte);
    transition: background-color .16s linear;
}

.presta::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    background: var(--orange);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .25s var(--sortie);
}

.presta:hover,
.presta:focus-visible {
    background: var(--carte-2);
}

.presta:hover::before,
.presta:focus-visible::before {
    transform: scaleX(1);
}

.presta .ico {
    font-size: 2rem;
    color: var(--texte-2);
    stroke-width: 1.4;
    transition: color .16s linear;
}

.presta:hover .ico {
    color: var(--orange);
}

.presta h4 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: 1.08rem;
    letter-spacing: .07em;
    text-transform: uppercase;
    line-height: 1.15;
    margin-top: auto;
}

.presta .ref {
    position: absolute;
    top: 16px;
    right: 18px;
    font-family: var(--police-titre);
    font-size: .72rem;
    letter-spacing: .12em;
    color: var(--texte-3);
}

.presta[hidden] {
    display: none;
}

.aucun-resultat {
    grid-column: 1 / -1;
    background: var(--carte);
    padding: 40px 20px;
    text-align: center;
    color: var(--texte-2);
}

.notes-pieces {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1px;
    margin-top: 30px;
    background: var(--trait);
    border: 1px solid var(--trait);
}

.notes-pieces p {
    display: flex;
    align-items: flex-start;
    gap: 13px;
    background: var(--carte);
    padding: 20px 22px;
    color: var(--texte-2);
    font-size: .96rem;
}

.notes-pieces .ico {
    color: var(--orange);
    font-size: 1.3rem;
    margin-top: 2px;
}

/* ---------------------------------------------------------
   GALERIE
   --------------------------------------------------------- */

.galerie {
    padding: 96px 0;
    background: var(--fond);
}

.grille-galerie {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-auto-rows: clamp(150px, 19vw, 272px);
    gap: 12px;
}

.photo {
    position: relative;
    overflow: hidden;
    background: var(--carte);
    border: 1px solid var(--trait);
    cursor: pointer;
    box-shadow: var(--ombre);
}

.photo:first-child {
    grid-column: span 2;
    grid-row: span 2;
}

.photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .4s var(--sortie);
}

.photo:hover img,
.photo:focus-visible img {
    transform: scale(1.05);
}

.photo::after {
    content: "";
    position: absolute;
    top: 10px;
    right: 10px;
    width: 26px;
    height: 26px;
    background:
        linear-gradient(#fff, #fff) center/12px 2px no-repeat,
        linear-gradient(#fff, #fff) center/2px 12px no-repeat,
        rgba(17, 17, 19, .78);
    opacity: 0;
    transition: opacity .2s linear;
}

.photo:hover::after,
.photo:focus-visible::after {
    opacity: 1;
}

/* ---------------------------------------------------------
   AVIS
   --------------------------------------------------------- */

.avis {
    padding: 96px 0;
    background: var(--fond-1);
    border-top: 1px solid var(--trait);
    border-bottom: 1px solid var(--trait);
}

.note-globale {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    margin-top: 18px;
    padding: 10px 18px;
    background: var(--carte);
    border: 1px solid var(--trait-fort);
    box-shadow: var(--ombre);
}

.note-globale .chiffre {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.6rem;
    line-height: 1;
    color: var(--orange-texte);
}

.etoiles {
    display: inline-flex;
    gap: 3px;
    color: #e0a41c;
}

.etoiles .ico {
    width: 1.05em;
    height: 1.05em;
}

.note-globale .source {
    font-size: .86rem;
    color: var(--texte-3);
    padding-left: 14px;
    border-left: 1px solid var(--trait);
}

.grille-avis {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 22px;
}

.avis-fiche {
    background: var(--carte);
    padding: 26px 24px 22px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    border: 1px solid var(--trait);
    border-top: 5px solid var(--orange);
    box-shadow: var(--ombre);
    transition: transform .25s var(--sortie), box-shadow .25s linear;
}

.avis-fiche:nth-child(odd) {
    transform: rotate(-.4deg);
}

.avis-fiche:nth-child(even) {
    transform: rotate(.35deg);
}

.avis-fiche:hover {
    transform: rotate(0) translateY(-4px);
    box-shadow: var(--ombre-forte);
}

.avis-tete {
    display: flex;
    align-items: center;
    gap: 12px;
    padding-bottom: 12px;
    border-bottom: 1px dashed var(--trait-fort);
}

.avis-initiale {
    width: 42px;
    height: 42px;
    flex: none;
    display: grid;
    place-items: center;
    background: #17181a;
    color: #fff;
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.15rem;
    clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);
}

.avis-nom {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: 1.05rem;
    letter-spacing: .06em;
    text-transform: uppercase;
    line-height: 1.2;
}

.avis-date {
    font-size: .8rem;
    color: var(--texte-3);
}

.avis-texte {
    font-size: .97rem;
    line-height: 1.62;
    color: var(--texte-2);
}

.avis-fiche .etoiles {
    margin-top: auto;
}

.avis-cta {
    text-align: center;
    margin-top: 40px;
}

/* ---------------------------------------------------------
   ÉQUIPE
   --------------------------------------------------------- */

.equipe {
    position: relative;
    overflow: hidden;
    padding: 90px 0;
    background: var(--fond);
}

.equipe>img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: grayscale(1) contrast(1.08);
    object-position: center 40%;
}

.equipe .voile-photo {
    position: absolute;
    inset: 0;
    background: linear-gradient(95deg,
            rgba(12, 12, 14, .9) 0%,
            rgba(12, 12, 14, .74) 50%,
            rgba(12, 12, 14, .52) 100%);
}

.equipe .container {
    position: relative;
}

.equipe .grille-equipe {
    background: #ddd7c9;
    border-color: #ddd7c9;
    box-shadow: var(--ombre-forte);
}

.equipe .membre {
    background: #fff;
}

.equipe .membre h4 {
    color: #17181a;
}

.equipe .membre p {
    color: #55585e;
}

.equipe .membre .anciennete {
    color: #82858c;
}

.grille-equipe {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1px;
    background: var(--trait);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
}

.membre {
    background: var(--carte);
    padding: 30px 28px;
    display: flex;
    align-items: center;
    gap: 20px;
}

.membre-badge {
    width: 68px;
    height: 62px;
    flex: none;
    display: grid;
    place-items: center;
    background: var(--orange);
    color: #fff;
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.5rem;
    clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);
}

.membre h4 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: 1.3rem;
    letter-spacing: .07em;
    text-transform: uppercase;
}

.membre p {
    color: var(--texte-2);
    font-size: .95rem;
}

.membre .anciennete {
    display: block;
    font-size: .82rem;
    color: var(--texte-3);
}

/* ---------------------------------------------------------
   CONTACT
   --------------------------------------------------------- */

.contact {
    padding: 96px 0 0;
    background: var(--fond-2);
    border-top: 1px solid var(--trait);
}

.contact-grille {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 46px;
    align-items: start;
}

.coordonnees {
    display: grid;
    gap: 1px;
    background: var(--trait);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
    margin-top: 6px;
}

.coord {
    display: flex;
    gap: 16px;
    background: var(--carte);
    padding: 20px 22px;
}

.coord>.ico {
    font-size: 1.35rem;
    color: var(--orange);
    margin-top: 3px;
}

.coord h5 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .74rem;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--texte-3);
    margin-bottom: 3px;
}

.coord p,
.coord a {
    color: var(--texte);
    font-weight: 500;
}

.coord a:hover {
    color: var(--orange-texte);
}

.horaires {
    display: grid;
    gap: 4px;
    margin-top: 4px;
}

.horaires li {
    display: flex;
    align-items: baseline;
    gap: 10px;
    color: var(--texte-2);
    font-size: .96rem;
}

.horaires li::after {
    content: "";
    flex: 1;
    border-bottom: 1px dotted var(--trait-fort);
    transform: translateY(-4px);
}

.horaires .valeur {
    order: 3;
    color: var(--texte);
    font-weight: 600;
}

.horaires .ferme {
    color: var(--texte-3);
}

.avertissement {
    display: flex;
    gap: 15px;
    align-items: flex-start;
    margin-top: 22px;
    padding: 18px 20px;
    background: #fdf5e2;
    border: 1px solid #e9d5a0;
    border-left: 4px solid var(--jaune);
}

.avertissement .ico {
    color: #a2760a;
    font-size: 1.4rem;
    margin-top: 2px;
}

.avertissement p {
    font-size: .93rem;
    color: #4a4335;
}

/* Formulaire */
.fiche-contact {
    background: var(--carte);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
}

.fiche-tete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 16px 22px;
    background: #17181a;
    color: #f3f1ed;
}

.fiche-tete h3 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .95rem;
    letter-spacing: .18em;
    text-transform: uppercase;
}

.fiche-tete span {
    font-family: var(--police-titre);
    font-size: .74rem;
    letter-spacing: .16em;
    color: #8b8f97;
}

.fiche-contact form {
    display: grid;
    gap: 20px;
    padding: 26px 22px;
}

.fiche-contact label {
    display: grid;
    gap: 8px;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .76rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--texte-2);
}

.fiche-contact input,
.fiche-contact textarea {
    background: var(--carte-2);
    border: 1px solid var(--trait-fort);
    padding: 13px 14px;
    color: var(--texte);
    font-family: var(--police-texte);
    letter-spacing: 0;
    text-transform: none;
    transition: border-color .16s linear, background-color .16s linear;
}

.fiche-contact input:focus,
.fiche-contact textarea:focus {
    outline: none;
    border-color: var(--orange);
    background: #fff;
}

.fiche-contact textarea {
    resize: vertical;
    min-height: 130px;
}

.fiche-contact button {
    justify-content: center;
    width: 100%;
}

.mention {
    padding: 0 22px 22px;
    font-size: .82rem;
    color: var(--texte-3);
}

.plan {
    margin-top: 60px;
    border-top: 1px solid var(--trait);
}

.plan iframe {
    display: block;
    width: 100%;
    height: 420px;
    border: 0;
}

/* ---------------------------------------------------------
   PIED DE PAGE
   --------------------------------------------------------- */

footer {
    background: #131417;
}

.pied-grille {
    display: grid;
    grid-template-columns: 1.4fr 1fr 1fr;
    gap: 40px;
    padding: 52px 0 34px;
}

.pied-marque {
    display: flex;
    gap: 16px;
    align-items: flex-start;
}

.pied-marque img {
    width: 58px;
    height: 58px;
    flex: none;
}

.pied-marque h3 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 1.3rem;
    letter-spacing: .05em;
    text-transform: uppercase;
}

.pied-marque p {
    color: var(--texte-3);
    font-size: .9rem;
    max-width: 34ch;
}

footer h4 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .76rem;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--orange-texte);
    margin-bottom: 14px;
}

.pied-liens {
    display: grid;
    gap: 8px;
}

.pied-liens a {
    color: var(--texte-2);
    font-size: .95rem;
    width: fit-content;
    transition: color .16s linear;
}

.pied-liens a:hover {
    color: var(--texte);
}

.pied-infos p {
    color: var(--texte-2);
    font-size: .95rem;
    margin-bottom: 6px;
}

.pied-infos a:hover {
    color: var(--orange-texte);
}

.copyright {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 20px;
    justify-content: space-between;
    padding: 18px 0 24px;
    border-top: 1px solid var(--trait);
    font-size: .82rem;
    color: var(--texte-3);
}

.copyright a {
    color: var(--texte-2);
}

.copyright a:hover {
    color: var(--orange-texte);
}

/* ---------------------------------------------------------
   BARRE D'ACTION MOBILE
   --------------------------------------------------------- */

.barre-mobile {
    display: none;
    position: fixed;
    inset: auto 0 0 0;
    z-index: 880;
    background: #17181a;
    border-top: 3px solid var(--orange);
}

.barre-mobile a {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    padding: 14px 8px;
    color: #f3f1ed;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .86rem;
    letter-spacing: .14em;
    text-transform: uppercase;
}

.barre-mobile a+a {
    border-left: 1px solid #33363c;
}

.barre-mobile .appel {
    background: var(--orange);
    color: #fff;
}

/* ---------------------------------------------------------
   RETOUR EN HAUT
   --------------------------------------------------------- */

.retour-haut {
    position: fixed;
    right: 24px;
    bottom: 24px;
    z-index: 870;
    width: 46px;
    height: 46px;
    display: grid;
    place-items: center;
    border: 2px solid var(--orange);
    border-radius: 50%;
    background: var(--orange);
    color: #fff;
    cursor: pointer;
    box-shadow: var(--ombre);
    opacity: 0;
    visibility: hidden;
    transform: translateY(10px);
    transition: opacity .22s var(--sortie), transform .22s var(--sortie),
        visibility 0s linear .22s, background-color .18s linear,
        border-color .18s linear, box-shadow .18s linear;
}

.retour-haut.visible {
    opacity: 1;
    visibility: visible;
    transform: none;
    transition: opacity .22s var(--sortie), transform .22s var(--sortie),
        background-color .18s linear, border-color .18s linear,
        box-shadow .18s linear;
}

.retour-haut:hover {
    background: var(--orange-clair);
    border-color: var(--orange-clair);
    box-shadow: var(--ombre-forte);
}

.retour-haut .ico {
    font-size: 1.3rem;
    stroke-width: 2;
}

@media (max-width: 760px) {
    .retour-haut {
        right: 18px;
        bottom: 70px;
    }
}

/* ---------------------------------------------------------
   MODALES
   --------------------------------------------------------- */

body.modal-ouverte {
    overflow: hidden;
}

.voile {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: rgba(18, 16, 14, .72);
    opacity: 0;
    visibility: hidden;
    transition: opacity .22s linear, visibility 0s linear .22s;
}

.voile.active {
    opacity: 1;
    visibility: visible;
    transition: opacity .22s linear, visibility 0s;
}

.boite {
    width: min(680px, 100%);
    max-height: 86vh;
    display: flex;
    flex-direction: column;
    background: var(--carte);
    border: 1px solid var(--trait);
    box-shadow: 0 30px 70px rgba(0, 0, 0, .45);
    transform: translateY(10px);
    transition: transform .26s var(--sortie);
}

.voile.active .boite {
    transform: none;
}

.boite-tete {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 16px 20px;
    background: #17181a;
    color: #f3f1ed;
}

.boite-tete h2 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: 1.15rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--orange-clair);
}

.boite-tete .ref-fiche {
    display: block;
    font-family: var(--police-texte);
    font-size: .72rem;
    letter-spacing: .16em;
    color: #8b8f97;
    text-transform: uppercase;
}

.fermer {
    background: none;
    border: 1px solid #464a52;
    color: #cfd2d7;
    width: 38px;
    height: 38px;
    flex: none;
    display: grid;
    place-items: center;
    cursor: pointer;
    font-size: 1.1rem;
    transition: color .16s linear, border-color .16s linear;
}

.fermer:hover {
    color: var(--orange-clair);
    border-color: var(--orange-clair);
}

.boite-corps {
    padding: 22px 20px 26px;
    overflow: auto;
}

.boite-corps p {
    color: var(--texte-2);
}

.fiche-ligne {
    display: flex;
    align-items: baseline;
    gap: 10px;
    margin: 18px 0;
    padding-bottom: 6px;
}

.fiche-ligne .cle {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .76rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--texte-3);
}

.fiche-ligne .pointilles {
    flex: 1;
    border-bottom: 1px dotted var(--trait-fort);
    transform: translateY(-4px);
}

.fiche-ligne .val {
    font-weight: 700;
    color: var(--orange-texte);
}

.boite-corps h5 {
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .8rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--texte-2);
    margin: 20px 0 10px;
}

.liste-check {
    display: grid;
    gap: 9px;
}

.liste-check li {
    display: flex;
    gap: 11px;
    align-items: flex-start;
    color: var(--texte-2);
    font-size: .97rem;
}

.liste-check li::before {
    content: "";
    width: 9px;
    height: 9px;
    margin-top: 8px;
    flex: none;
    background: var(--orange);
    clip-path: polygon(25% 0, 75% 0, 100% 50%, 75% 100%, 25% 100%, 0 50%);
}

.note-fiche {
    margin-top: 22px;
    padding: 14px 16px;
    background: var(--fond-2);
    border-left: 3px solid var(--orange);
    font-size: .92rem;
}

.boite-pied {
    padding: 0 20px 22px;
}

.boite-pied .btn {
    width: 100%;
    justify-content: center;
}

/* Visionneuse photo */
.visionneuse .boite {
    width: min(1180px, 100%);
    max-height: 92vh;
    background: #17181a;
    border-color: #33363c;
}

.visionneuse-image {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    overflow: auto;
    min-height: 0;
}

.visionneuse-image img {
    max-width: 100%;
    max-height: calc(92vh - 90px);
    width: auto;
    transform-origin: center;
    transition: transform .18s var(--sortie);
}

.visionneuse-outils {
    display: flex;
    gap: 8px;
}

.visionneuse-legende {
    padding: 0 20px 18px;
    font-size: .88rem;
    text-align: center;
    color: #8b8f97;
}

/* ---------------------------------------------------------
   PAGE HISTOIRE
   --------------------------------------------------------- */

.hero-page {
    position: relative;
    min-height: 44vh;
    display: flex;
    align-items: flex-end;
    padding-top: 130px;
    background: #131417;
    overflow: hidden;
}

.hero-page>.hero-photo {
    filter: grayscale(1) contrast(1.05);
    opacity: .55;
    object-position: center 42%;
}

.hero-page .hero-voile {
    background: linear-gradient(95deg,
            rgba(14, 14, 16, .86) 0%,
            rgba(14, 14, 16, .6) 60%,
            rgba(14, 14, 16, .42) 100%);
}

.hero-page .hero-contenu {
    padding-bottom: 46px;
}

.hero-page h1 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(2.3rem, 6vw, 4.2rem);
    line-height: 1;
    text-transform: uppercase;
}

.hero-page p {
    margin-top: 14px;
    color: var(--texte-2);
    font-size: 1.08rem;
}

.recit {
    padding: 78px 0 40px;
    background: var(--fond);
}

.recit-corps {
    position: relative;
    max-width: var(--largeur);
    margin-inline: auto;
    background: var(--carte-2);
    border: 1px solid var(--trait);
    box-shadow: var(--ombre);
    padding: 58px 48px 64px;
}

.recit-corps::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 9px;
    background: var(--bande-danger);
}

.recit h3 {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 14px 16px;
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(1.6rem, 3.6vw, 2.35rem);
    letter-spacing: .03em;
    text-transform: uppercase;
    margin: 58px 0 22px;
    padding-left: 16px;
    border-left: 5px solid var(--orange);
}

.recit h3[data-annee]::before {
    content: attr(data-annee);
    order: -1;
    font-size: .82rem;
    font-weight: 600;
    letter-spacing: .1em;
    padding: 7px 14px;
    color: #fff;
    background: var(--orange);
    white-space: nowrap;
}

.recit p {
    color: var(--texte-2);
    margin-bottom: 20px;
    font-size: 1.14rem;
    line-height: 1.78;
}

.recit strong {
    color: var(--texte);
    font-weight: 600;
}

.lettrine::first-letter {
    float: left;
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: 3.6em;
    line-height: .82;
    margin: 6px 12px 0 0;
    color: var(--orange);
}

.citation {
    margin: 42px 0;
    padding: 28px 30px;
    background: var(--carte);
    border: 1px solid var(--trait);
    border-left: 5px solid var(--orange);
    box-shadow: var(--ombre);
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: clamp(1.2rem, 2.6vw, 1.6rem);
    line-height: 1.4;
    color: var(--texte);
}

.citation .ico {
    display: block;
    font-size: 1.7rem;
    color: var(--orange);
    margin-bottom: 12px;
}

.citation footer {
    margin-top: 12px;
    font-family: var(--police-texte);
    font-size: .9rem;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--texte-3);
    background: none;
}

.cadre {
    background: var(--carte);
    border: 1px solid var(--trait);
    padding: 10px;
    cursor: pointer;
    box-shadow: var(--ombre);
    transition: border-color .18s linear, transform .25s var(--sortie), box-shadow .25s linear;
}

.cadre:hover {
    border-color: var(--orange);
    transform: translateY(-3px);
    box-shadow: var(--ombre-forte);
}

.cadre img {
    width: 100%;
}

.cadre figcaption {
    padding: 12px 4px 4px;
    font-size: .86rem;
    font-style: italic;
    color: var(--texte-3);
    line-height: 1.45;
}

.cadre-droite {
    float: right;
    width: 46%;
    margin: 6px 0 24px 36px;
}

.cadre-gauche {
    float: left;
    width: 40%;
    margin: 6px 36px 24px 0;
}

.planche-legende {
    clear: both;
    text-align: center;
    font-family: var(--police-titre);
    font-weight: 500;
    font-size: .8rem;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: var(--orange-texte);
    margin: 58px 0 22px;
}

.planche {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
    margin: 0 0 54px;
}

.planche-legende + .planche {
    margin-top: 0;
}

.bloc-final {
    margin-top: 40px;
    padding: 34px 32px;
    background: linear-gradient(160deg, #fdfcfa, #ebe6dc);
    border: 1px solid var(--trait-fort);
    box-shadow: var(--ombre);
    text-align: center;
}

.bloc-final p {
    font-size: 1.14rem;
    color: var(--texte);
    margin: 0;
}

.cta-bas {
    padding: 76px 0;
    background: var(--fond-2);
    border-top: 1px solid var(--trait);
    text-align: center;
}

.cta-bas h2 {
    font-family: var(--police-titre);
    font-weight: 700;
    font-size: clamp(1.8rem, 4.4vw, 2.8rem);
    text-transform: uppercase;
    margin-bottom: 26px;
}

/* ---------------------------------------------------------
   RESPONSIVE
   --------------------------------------------------------- */

@media (max-width: 1180px) {
    .atelier-grille {
        grid-template-columns: 1fr;
        gap: 40px;
    }

    .contact-grille {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 1100px) {
    #mobile-menu-btn {
        display: flex;
    }

    #nav-list {
        position: fixed;
        top: 84px;
        left: 0;
        right: 0;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
        background: #fff;
        border-bottom: 1px solid var(--trait-fort);
        box-shadow: 0 18px 30px rgba(30, 26, 20, .16);
        padding: 10px 0 18px;
        transform: translateY(-130%);
        transition: transform .28s var(--sortie);
        max-height: calc(100vh - 84px);
        overflow: auto;
    }

    #header.compact #nav-list {
        top: 66px;
    }

    #nav-list.ouvert {
        transform: none;
    }

    #nav-list a {
        padding: 14px 26px;
        font-size: 1rem;
        border-bottom: 1px solid var(--fond-2);
    }

    #nav-list a::after {
        display: none;
    }

    #nav-list .nav-contact a {
        margin: 14px 26px 0;
        text-align: center;
        justify-content: center;
    }

    .bandeau-grille {
        grid-template-columns: repeat(2, 1fr);
    }

    .bandeau-case:nth-child(3) {
        border-left: 0;
    }

    .bandeau-case:nth-child(n+3) {
        border-top: 1px solid var(--trait);
    }

    .pied-grille {
        grid-template-columns: 1fr 1fr;
    }

    .pied-marque {
        grid-column: 1 / -1;
    }
}

@media (max-width: 900px) {
    .recit-corps {
        padding: 44px 32px 40px;
    }

    .rail::before {
        left: 9px;
    }

    .jalon,
    .jalon.droite {
        width: 100%;
        margin-left: 0;
        text-align: left;
        padding: 0 0 38px 42px;
    }

    .jalon::after,
    .jalon.droite::after {
        left: 0;
        right: auto;
    }

    .grille-galerie {
        grid-template-columns: repeat(2, 1fr);
    }

    .photo:first-child {
        grid-column: span 2;
        grid-row: span 2;
    }

    .cadre-droite,
    .cadre-gauche {
        float: none;
        width: 100%;
        margin: 26px 0;
    }

    .planche {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 760px) {
    body {
        padding-bottom: 54px;
    }

    .progression {
        --roue: 24px;
    }

    .recit-corps {
        padding: 36px 20px 32px;
    }

    .barre-mobile {
        display: flex;
    }

    /* Sur mobile, on garde uniquement la plaque : pas de flèche vers l'atelier. */
    .btn-atelier {
        display: none;
    }

    .hero {
        min-height: 0;
        padding: 100px 0 90px;
    }

    .hero-panneau {
        padding: 30px 24px 32px;
    }

    .hero-panneau::before {
        margin: -30px -24px 24px;
    }

    .atelier,
    .prestations,
    .galerie,
    .avis,
    .equipe,
    .contact {
        padding-top: 66px;
        padding-bottom: 66px;
    }

    .bandeau-grille {
        grid-template-columns: 1fr;
    }

    .bandeau-case {
        border-left: 0;
        border-top: 1px solid var(--trait);
        padding: 16px 22px;
    }

    .bandeau-case:first-child {
        border-top: 0;
    }

    .pied-grille {
        grid-template-columns: 1fr;
        gap: 30px;
    }

    .copyright {
        justify-content: center;
        text-align: center;
    }

    .plan iframe {
        height: 320px;
    }
}

@media (max-width: 560px) {
    .plaque-immat,
    .btn-atelier {
        --plaque-h: 46px;
    }

    .marque-texte .sur-titre {
        font-size: .58rem;
        letter-spacing: .2em;
    }

    .marque-texte h1,
    .marque-texte .nom {
        font-size: 1.12rem;
    }

    .grille-galerie {
        grid-template-columns: 1fr;
    }

    .photo:first-child {
        grid-column: auto;
    }

    .planche {
        grid-template-columns: 1fr;
    }

    .membre {
        padding: 24px 20px;
    }

    .recit h3 {
        margin-top: 40px;
    }
}

/* ---------------------------------------------------------
   MOUVEMENT RÉDUIT
   --------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }

    *,
    *::before,
    *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
    }

    .reveal {
        opacity: 1;
        transform: none;
    }

    .progression-roue::before {
        display: none;
    }
}
