/* =========================================================================
   M2.AGENCY, systeme visuel « Shapes »
   Grammaire relevee sur le theme Shapes (Shopify), copie locale claude code/shapes :
     · titrage  Prompt 900 en CAPITALES
     · texte    Inter 500 / 700
     · bordures noires 2px
     · ombres DURES decalees 4px, aucun flou  ← la signature
     · boutons pill (push-btn : la surface s'enfonce dans son ombre au survol)

   TROIS UNIVERS, une seule grammaire. Chaque page declare sa famille sur
   <body> et tout le reste suit par variables, on ne code jamais une couleur
   en dur dans une page :
     .u-entreprise  sobre       navy + gris, aucun aplat vif
     .u-particulier colore      vert acide + jaune, aplats francs
     .u-apporteur   melange     base navy sobre, accents verts vifs
   ========================================================================= */

/* Une seule police, en variable : Inter couvre 400 a 700 dans un fichier de
   48 Ko, la ou l'ancien trio Prompt + Inter 500 + Inter 700 en pesait 105.
   Auto-hebergee : aucune requete vers un serveur tiers, la page mentions
   legales peut continuer a dire qu'il n'y en a aucune. */
/* Inter Tight pour le titrage, Inter pour le texte. La reference nomme
   explicitement « Inter Tight » : c'est une version plus etroite d'Inter,
   qui serre les grands titres sans les ecraser. Les deux sont variables,
   45 et 48 Ko, auto-hebergees : aucune requete vers un serveur tiers. */
/* --- Les polices ---------------------------------------------------------
   Titrage : JOST. C'est la reprise libre de la Futura, la geometrique de 1927
   que les maisons de luxe utilisent depuis quatre-vingts ans, de Vuitton a
   Supreme. Cercles parfaits, fut constant, aucune fioriture : elle est classe
   par la construction, pas par l'ornement.
   Texte : ARCHIVO, grotesque americain neutre, proche des Helvetica utilisees
   par les grandes maisons pour le corps de texte.
   Les deux sont variables et auto-hebergees : 60 Ko en tout, aucune requete
   vers un serveur tiers, la page mentions legales reste vraie. */
@font-face {
  font-family: "Jost";
  src: url("../fonts/jost-var.woff2") format("woff2-variations"),
       url("../fonts/jost-var.woff2") format("woff2");
  font-weight: 300 700; font-style: normal; font-display: swap;
}
/* SYNE, uniquement pour le nom de l'agence. Dessinee pour la Synesthesie,
   centre d'art contemporain, elle est utilisee par des institutions
   culturelles : contreformes carrees, jambages courts, un dessin qu'on ne
   voit sur aucun site de logiciel. Le chiffre 2 y est dessine a hauteur de
   capitale, ce qui compte pour un nom qui en contient un. 34 Ko, chargee
   pour un seul mot. */
@font-face {
  font-family: "Syne";
  src: url("../fonts/syne-var.woff2") format("woff2-variations"),
       url("../fonts/syne-var.woff2") format("woff2");
  font-weight: 400 800; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Archivo";
  src: url("../fonts/archivo-var.woff2") format("woff2-variations"),
       url("../fonts/archivo-var.woff2") format("woff2");
  font-weight: 300 700; font-style: normal; font-display: swap;
}

:root {
  /* --- noir neutre --------------------------------------------------
     Ecart RVB nul, comme sur la reference : le gris ne tire vers rien. */
  --fond:     #0A0A0B;   /* fond de page */
  --paper:    #131315;   /* surfaces : cartes, champs */
  --gris:     #191919;   /* remplissage discret */
  --gris-2:   #202022;   /* un cran au-dessus */

  --ink:      #F4F4F5;   /* texte principal */
  --ink-2:    #A8A8AE;   /* texte secondaire */
  --ink-3:    #7C7C84;   /* libelles */

  --trait:      #242426;
  --trait-fort: #34343A;

  /* --- la lueur -----------------------------------------------------
     C'EST elle la couleur du site. Un halo tres flou en haut de page,
     violet vers rose vers ambre. Aucun aplat colore ailleurs : c'est
     cette retenue qui donne le rendu premium de la reference. */
  --halo-1: rgba(226, 214, 196, .30);   /* blanc chaud, lumiere de studio */
  --halo-2: rgba(198, 176, 148, .20);   /* ambre tres pale */
  --halo-3: rgba(150, 140, 130, .12);   /* gris chaud */

  /* Quatre variantes de teinte pour les quatre univers. La lueur reste la
     meme famille, seul l'angle chromatique glisse. */
  --u-halo-1: var(--halo-1);
  --u-halo-2: var(--halo-2);

  /* --- l'appui clair ------------------------------------------------
     Les boutons principaux sont CLAIRS sur la reference, pas colores.
     Le contraste vient de la valeur, pas de la teinte. */
  --clair:     #EDEDEE;
  --clair-txt: #0C0C0D;

  --heading: "Jost", "Futura", "Century Gothic", "Avenir Next", sans-serif;
  --body:    "Archivo", "Helvetica Neue", Helvetica, Arial, sans-serif;

  --bord: 1px;
  --radius: 14px;
  --radius-s: 10px;

  --ombre:   0 1px 2px rgba(0, 0, 0, .6);
  --ombre-h: 0 10px 30px rgba(0, 0, 0, .6);
  --lueur:   0 1px 0 rgba(255,255,255,.5) inset, 0 6px 20px rgba(0,0,0,.5);

  /* L'accent sert au texte : prix, liens, surtitres. Il reste clair et
     sobre, la couleur etant portee par la lueur. */
  --accent: var(--ink);
  --accent-txt: var(--clair-txt);
  --accent-doux: var(--gris);
  --accent-2: var(--ink);
  --vif: var(--ink);
  --vif-txt: var(--clair-txt);
  --vif-doux: rgba(244, 244, 245, .14);
}

/* --------------------------------------------------- les 4 univers
   Seule la teinte de la lueur change, dans la meme famille. */
/* Une seule lumiere pour les quatre univers : ce qui distingue une page
   d'une autre, c'est la photo, pas un changement de teinte. */
.u-entreprise, .u-particulier, .u-evenement, .u-apporteur {
  --u-halo-1: rgba(226, 214, 196, .26); --u-halo-2: rgba(198, 176, 148, .16);
}

:root { color-scheme: dark; }

*, *::before, *::after { box-sizing: border-box; }

/* ------------------------------------------- verrou anti-debordement
   Sur telephone, il suffit d'un mot long, d'une grille trop large ou d'une
   ombre portee pour que la page glisse lateralement et rogne le contenu au
   bord droit. Trois garde-fous, poses une fois pour tout le site :
     1. la page ne peut pas defiler horizontalement ;
     2. les enfants de grille et de flex ont le droit de retrecir
        (par defaut min-width vaut auto, et ils refusent de le faire) ;
     3. les mots trop longs se coupent au lieu de pousser leur conteneur.
   ------------------------------------------------------------------- */
html {
  -webkit-text-size-adjust: 100%;
  overflow-x: hidden;
}

body {
  margin: 0;
  max-width: 100%;
  overflow-x: hidden;
  background: var(--fond);
  color: var(--ink);
  font: 400 16px/1.6 var(--body);
  letter-spacing: -.011em;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* 2. les conteneurs qui participent a une grille ou a un flex */
.wrap, .wrap > *, .section, .duo, .collab, .teaser,
.lignes, .ligne, .formules, .formule,
.field, .field-row, .acc, .acc-item, .pli, .pli-corps,
.trio > *, .choix, .galerie, .vignette {
  min-width: 0;
}

/* La tuile du portfolio, elle seule : c'est en visant « .vignette » que
   j'avais ecrase le verrou ci-dessus, et couvert tout le site de boites. */
.vignette {
  break-inside: avoid;
  -webkit-column-break-inside: avoid;
  margin: 0 0 8px;
  border-radius: 16px;
  overflow: hidden;
  background: #111;
  cursor: zoom-in;
  transition: transform .2s ease;
}

/* 3. rien ne pousse le conteneur : ni un mot long, ni une URL, ni un email */
p, li, h1, h2, h3, .ligne-nom, .ligne-desc, .formule-nom, .formule-desc,
.acc-head, .pli-tete, .info, .legal {
  overflow-wrap: anywhere;
  word-break: normal;
}

/* Les champs de saisie debordent facilement leur colonne sur telephone. */
input, select, textarea { max-width: 100%; }

a { color: inherit; text-decoration: none; }
h1, h2, h3 { margin: 0; }
p { margin: 0; }
ul { margin: 0; padding: 0; list-style: none; }
img { display: block; max-width: 100%; height: auto; }

:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 4px; }

.wrap { width: 100%; max-width: 1240px; margin-inline: auto; padding-inline: clamp(16px, 3vw, 32px); }

/* --------------------------------------------------------------- titrage
   Casse normale, pas de capitales : c'est le changement qui pese le plus
   lourd dans la perception. Des capitales en graisse noire, c'est une
   affiche ; une casse normale serree, c'est un site de service.
   Le crenage se resserre a mesure que le corps grandit. */
.tt {
  font-family: var(--heading);
  font-weight: 500;
  text-transform: none;
  line-height: 1.1;
  letter-spacing: -.018em;
}
.tt-xl { font-size: clamp(36px, 6vw, 70px); letter-spacing: -.028em; font-weight: 500; }
.tt-l  { font-size: clamp(26px, 3.4vw, 42px); letter-spacing: -.022em; font-weight: 500; }
.tt-m  { font-size: clamp(19px, 2.1vw, 24px); letter-spacing: -.016em; font-weight: 500; }

/* Le surtitre reste en capitales : petit, espace, en gris. C'est le seul
   endroit ou les capitales restent modernes. */
.tt-s {
  font-family: var(--body);
  font-size: 12px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .08em;
  color: var(--ink-3);
  line-height: 1.4;
}

/* -------------------------------------------------------------- en-tete */
.bar {
  border-bottom: var(--bord) solid var(--trait);
  background: rgba(10, 10, 11, .82);
  -webkit-backdrop-filter: blur(10px);
          backdrop-filter: blur(10px);
  position: sticky; top: 0; z-index: 40;
}
/* Trois colonnes, celle de gauche vide : le logo tombe au centre optique
   quelle que soit la longueur du menu. */
.bar-in {
  min-height: 88px;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: clamp(24px, 5vw, 64px);
  padding-block: 14px;
}
.bar-vide { display: block; }
.bar .logo { justify-self: center; text-align: center; }

.logo {
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(21px, 2.3vw, 27px);
  font-weight: 500; letter-spacing: -.02em; line-height: 1;
}
.bar nav { display: flex; align-items: center; gap: clamp(16px, 2.4vw, 32px); }
.bar nav a {
  font-weight: 500; font-size: clamp(15px, 1.5vw, 17px);
  letter-spacing: -.01em;
  color: var(--ink-2);
  transition: color .18s ease;
}
.bar nav a:hover, .bar nav a[aria-current="page"] { color: var(--ink); }

/* Sous 560px le menu ne tient plus a cote d'un logo centre : on empile,
   logo puis menu, les deux centres. La barre grandit d'environ 26px, pris
   en compte dans le calcul de hauteur de l'accueil. */
@media (max-width: 560px) {
  .bar-in {
    flex-direction: column;
    justify-items: center;
    gap: 7px;
    padding-block: 11px;
  }
  .bar-vide { display: block; }
  .bar nav { justify-self: center; gap: 18px; }
  .bar nav a { font-size: 14px; }
}

/* --------------------------------------------------------------- boutons
   Plus d'ombre dure ni d'enfoncement : un bouton plein qui s'eclaircit,
   un bouton secondaire cercle d'un filet fin. Rayon moyen plutot que pill
   integral, qui commencait a dater. */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 48px; padding: 0 22px;
  font-family: var(--heading); font-weight: 500;
  font-size: 15px; letter-spacing: -.011em; line-height: 1;
  border: var(--bord) solid transparent;
  border-radius: 999px;
  background: var(--paper); color: var(--ink);
  background: var(--paper);
  border-color: var(--trait-fort);
  box-shadow: var(--ombre);
  transition: background .16s ease, border-color .16s ease,
              box-shadow .16s ease, transform .16s ease;
}
.btn:hover { background: var(--gris-2); border-color: var(--trait-fort); box-shadow: var(--ombre-h); transform: translateY(-1px); }
.btn:active { transform: translateY(0); box-shadow: var(--ombre); }

/* Le bouton principal est CLAIR, pas colore : sur la reference le contraste
   vient de la valeur, jamais de la teinte. Forme pill, legere brillance en
   haut, comme un galet. */
.btn-accent,
.btn-accent-2,
.btn-noir {
  background: linear-gradient(180deg, #FBFBFC, var(--clair));
  color: var(--clair-txt);
  border-color: transparent;
  box-shadow: var(--lueur);
  font-weight: 500;
}
.btn-accent:hover,
.btn-accent-2:hover,
.btn-noir:hover { background: linear-gradient(180deg, #FFFFFF, #E2E2E4); }

.btns { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }

/* Lien souligne */
.lien {
  border-bottom: 1px solid var(--trait-fort); padding-bottom: 1px;
  font-weight: 500; transition: border-color .16s ease;
}
.lien:hover { border-bottom-color: var(--ink); }

/* ---------------------------------------------------------------- cartes */
/* Une arete claire d'un pixel en haut : c'est ce qui fait qu'une carte
   parait posee sur le fond plutot que decoupee dedans. */
.bloc, .formule, .pli, .acc, .lignes, .collab-carte {
  position: relative;
}
.bloc::after, .formule::after, .pli::after,
.acc::after, .lignes::after, .collab-carte::after {
  content: "";
  position: absolute; inset: 0 0 auto 0; height: 1px;
  border-radius: var(--radius) var(--radius) 0 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.07) 22%,
              rgba(255,255,255,.07) 78%, transparent);
  pointer-events: none;
}

.bloc {
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  background: var(--paper);
  box-shadow: var(--ombre);
}

/* Bandeaux pleine largeur, tous cales sur la famille de la page */
.bandeau {
  border-block: var(--bord) solid var(--trait);
  padding: clamp(40px, 6vw, 84px) 0;
}
/* Le premier bandeau d'une page ouvre plus haut : rien au-dessus de lui ne
   justifie de repousser le titre au tiers de l'ecran. */
.bandeau:first-of-type {
  padding-top: clamp(14px, 2vw, 28px);
}
/* L'ouverture de page porte la lueur. Deux halos radiaux tres flous,
   poses derriere le contenu : c'est la seule couleur de la page.
   `overflow: hidden` empeche le halo de deborder sur la section suivante. */
.bandeau-accent {
  position: relative;
  overflow: hidden;
  background: var(--fond);
  color: var(--ink);
  border-block-color: transparent;
  isolation: isolate;
}
.bandeau-accent::before {
  content: "";
  position: absolute;
  top: -62%; left: 50%;
  width: min(1200px, 140%); aspect-ratio: 1 / .58;
  transform: translateX(-50%);
  background:
    radial-gradient(ellipse 46% 52% at 38% 46%, var(--u-halo-1), transparent 68%),
    radial-gradient(ellipse 44% 46% at 62% 40%, var(--u-halo-2), transparent 66%);
  /* La lueur s'eteint AVANT d'atteindre le bas du bandeau : sans ce masque,
     `overflow: hidden` la tranchait net et laissait une ligne franche. */
  -webkit-mask-image: linear-gradient(to bottom, #000 42%, transparent 88%);
          mask-image: linear-gradient(to bottom, #000 42%, transparent 88%);
  pointer-events: none;
  z-index: -1;
}
.bandeau-accent .tt-s { color: var(--ink-2); }
/* Le bandeau de collaboration respire moins : c'est une offre secondaire,
   elle ne doit pas peser autant qu'une section principale. */
.bandeau-collab { padding-block: clamp(22px, 3vw, 38px); }
/* La bande de fond disparait : elle ne se distinguait pas du fond de page
   et fabriquait des frontieres molles. Il ne reste que l'espacement. */
.bandeau-doux   { background: transparent; border-color: transparent; }
.bandeau-gris   { background: transparent; border-color: transparent; }
.bandeau-noir   { background: var(--gris-2); color: var(--ink); border-color: transparent; }

/* Sur fond accent fonce, la bordure des boutons doit rester lisible */


/* ------------------------------------------------------- lignes tarifaires */
/* Le tableau tarifaire vit dans une carte quand il est seul ; dans un pli
   il herite deja de la surface. */
.lignes {
  background: var(--paper);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  padding-inline: clamp(18px, 2.4vw, 30px);
  box-shadow: var(--ombre);
}
.ligne:last-child { border-bottom: 0; }
.pli .lignes {
  background: transparent; border: 0; border-radius: 0;
  padding-inline: 0; box-shadow: none;
}
.pli .ligne:first-child { border-top: var(--bord) solid var(--trait); }
.ligne {
  display: grid; grid-template-columns: 1fr auto;
  align-items: center; gap: 16px 24px;
  padding: clamp(20px, 2.4vw, 28px) clamp(0px, 1vw, 14px);
  border-bottom: var(--bord) solid var(--trait);
  transition: background .16s ease;
}
.ligne:hover { background: var(--accent-doux); }
/* Les lignes sont des liens : on le signale par une fleche qui avance. */
a.ligne { cursor: pointer; }
a.ligne .ligne-nom::after {
  content: " ";
  color: var(--accent);
  opacity: 0;
  display: inline-block;
  transition: opacity .16s ease, transform .16s ease;
  transform: translateX(-4px);
}
a.ligne:hover .ligne-nom::after { opacity: 1; transform: translateX(0); }
.ligne-nom { font-family: var(--heading); font-weight: 600; font-size: clamp(16px, 1.9vw, 19px); letter-spacing: -.02em; line-height: 1.25; }
.ligne-desc { font-size: 14px; margin-top: 4px; color: var(--ink-2); }
.ligne-prix {
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(19px, 2.2vw, 24px);
  letter-spacing: -.02em;
  line-height: 1.15; white-space: nowrap;
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
}
.ligne-prix .des { font-family: var(--body); font-weight: 500; font-size: 12px; color: var(--ink-3); display: block; }

/* --------------------------------------------------- formules en cartes */
/* Presentation reservee a PARTICULIER : la ou entreprise aligne un tableau
   sobre, particulier assume des cartes qui alternent les aplats.
   C'est la meme grammaire, bordure, ombre dure, mais coloree. */
.formules {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: clamp(12px, 1.6vw, 18px);
}
.formule {
  display: flex; flex-direction: column;
  padding: clamp(20px, 2.2vw, 26px);
  background: var(--paper);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  box-shadow: var(--ombre);
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.formule:hover {
  transform: translateY(-2px);
  box-shadow: var(--ombre-h);
  border-color: var(--trait-fort);
}
/* Toutes les cartes sont blanches : c'est la grille et l'espace qui
   structurent, plus l'aplat colore. La couleur ne sert qu'au prix. */
.formule-prix { color: var(--ink); }
.formule-nom {
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(16px, 1.8vw, 18px);
  letter-spacing: -.02em; line-height: 1.25;
}
.formule-desc { font-size: 13.5px; line-height: 1.5; margin-top: 6px; color: var(--ink-2); }
.formule-prix {
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(22px, 2.6vw, 28px);
  letter-spacing: -.025em;
  line-height: 1.15;
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
  margin-top: auto; padding-top: 16px;
}
.formule-prix .des {
  font-family: var(--body); font-weight: 500; font-size: 12px;
  color: var(--ink-3); display: block; letter-spacing: 0; margin-bottom: 2px;
}
/* Telephone : deux colonnes plutot qu'une. Avec huit formules, la colonne
   unique faisait defiler plus de deux ecrans rien que pour les tarifs. */
@media (max-width: 620px) {
.formules { grid-template-columns: 1fr 1fr; gap: 10px; }
  .formule { padding: 13px 12px; }
  .formule-nom { font-size: 15px; }
  .formule-desc { font-size: 11.5px; line-height: 1.4; margin-top: 5px; }
  .formule-prix { font-size: 22px; margin-top: 11px; padding-top: 9px; }
  .formule-prix .des { font-size: 9.5px; }
  .formule-lien { font-size: 11px; margin-top: 9px; }
}

.formule-lien {
  margin-top: 11px;
  font-family: var(--heading); font-weight: 500;
  font-size: 14px; color: var(--accent);
  align-self: flex-start;
}
.formule-lien::after { content: ""; }











/* ------------------------------------------------------- section pliable */
/* Une section entiere derriere un clic. Sur des pages qui alignent douze
   prestations puis cinq questions, tout afficher d'emblee noie le visiteur :
   il ne lit rien. Ici il ouvre ce qui l'interesse.
   Meme mecanique que l'accordeon (grid 0fr -> 1fr), memes deux pieges evites :
   min-height:0 sur l'element de grille, et padding anime avec la ligne. */
/* Le pli est une CARTE, plus une ligne nue. Sur un fond sombre uniforme,
   deux filets horizontaux ne suffisent pas a signaler qu'on peut cliquer :
   il faut une surface. */
.pli {
  background: var(--paper);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  padding-inline: clamp(18px, 2.4vw, 30px);
  box-shadow: var(--ombre);
  transition: border-color .18s ease, background .18s ease;
}
.pli:hover { border-color: var(--trait-fort); }
.pli[data-open="true"] { background: var(--gris); border-color: var(--trait-fort); }
.pli + .pli { margin-top: clamp(12px, 1.6vw, 18px); }

.pli-tete {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  padding: clamp(20px, 2.4vw, 26px) 0;
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(19px, 2.4vw, 26px);
  text-align: left; line-height: 1.2;
  letter-spacing: -.028em;
  background: none; border: 0; color: inherit; cursor: pointer;
  transition: color .16s ease;
}
.pli-tete:hover { color: var(--ink); }
.pli-tete .compte {
  font-family: var(--body); font-weight: 500;
  font-size: 13px; color: var(--ink-3);
  white-space: nowrap; margin-left: auto; margin-right: 4px;
}
/* Le « + » devient un chevron dans une pastille : plus discret, et le sens
   de l'action se lit sans texte. */
.pli-tete .signe {
  flex: 0 0 auto;
  width: 32px; height: 32px;
  display: grid; place-items: center;
  border: var(--bord) solid var(--trait-fort);
  border-radius: 999px;
  font-size: 18px; line-height: 1;
  color: var(--ink-2);
  transition: transform .24s ease, background .16s ease, color .16s ease;
}
.pli-tete:hover .signe { background: var(--gris); color: var(--ink); }
.pli[data-open="true"] .pli-tete .signe { transform: rotate(45deg); }

.pli-corps {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows .3s ease;
}
.pli[data-open="true"] .pli-corps { grid-template-rows: 1fr; }
.pli-corps > * {
  overflow: hidden;
  min-height: 0;
  padding-bottom: 0;
  transition: padding-bottom .3s ease;
}
.pli[data-open="true"] .pli-corps > * { padding-bottom: clamp(20px, 3vw, 32px); }



/* ------------------------------------------------------------ accordeon */
/* Pilote par app.js : .acc-item[data-open] + .acc-head[aria-expanded]. */
/* Meme logique pour l'accordeon autonome : une carte, pas une liste
   flottante. A l'interieur d'un pli il redevient transparent (voir plus bas). */
.acc {
  background: var(--paper);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  padding-inline: clamp(18px, 2.4vw, 30px);
  box-shadow: var(--ombre);
}
.acc-item:last-child { border-bottom: 0; }

/* Un accordeon DANS un pli : la carte est deja portee par le pli, on ne
   l'empile pas une seconde fois. */
.pli .acc {
  background: transparent;
  border: 0;
  border-radius: 0;
  padding-inline: 0;
  box-shadow: none;
}
.pli .acc-item:first-child { border-top: var(--bord) solid var(--trait); }
.acc-item { border-bottom: var(--bord) solid var(--trait); }
.acc-head {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 18px;
  padding: 24px 0;
  font-family: var(--heading); font-weight: 500;
  font-size: clamp(15px, 1.7vw, 17px);
  text-align: left; line-height: 1.4;
  letter-spacing: -.015em;
  background: none; border: 0; color: inherit; cursor: pointer;
  transition: color .16s ease;
}
.acc-head:hover { color: var(--ink); }
.acc-head::after {
  content: "+";
  flex: 0 0 auto;
  font-size: 20px; line-height: 1;
  color: var(--ink-3);
  transition: transform .22s ease, color .16s ease;
}
.acc-head:hover::after { color: var(--ink); }
.acc-item[data-open="true"] .acc-head::after { transform: rotate(45deg); }
/* Repli par grid-template-rows 0fr -> 1fr.
   DEUX pieges, les deux payes ici :
   1. un element de grille a min-height:auto par defaut et REFUSE de descendre
      sous la hauteur de son contenu, sans min-height:0 la reponse reste
      visible et deborde par-dessus la question suivante ;
   2. le padding n'est pas clippe par overflow:hidden, laisse en place il
      maintient 20px de bavure a l'etat ferme. On l'anime avec la ligne. */
.acc-panel {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows .28s ease;
}
.acc-item[data-open="true"] .acc-panel { grid-template-rows: 1fr; }
.acc-panel > * {
  overflow: hidden;
  min-height: 0;
  padding-bottom: 0;
  transition: padding-bottom .28s ease;
}
.acc-item[data-open="true"] .acc-panel > * { padding-bottom: 20px; }
.acc-panel p { font-size: 15px; line-height: 1.65; max-width: 68ch; color: var(--ink-2); }

/* --------------------------------------------------------- roulette (iOS) */
/* Selecteur a molette, identique au tambour de l'accueil : la liste defile,
   l'option visee vient se caler au centre, les voisines s'inclinent et se
   compriment. Le defilement et le calage sont NATIFS (overflow + scroll-snap),
   seul l'habillage est calcule dans app.js.
   La valeur choisie vit dans un <input type="hidden"> : pour le formulaire,
   c'est un champ comme un autre. */






/* Une ligne sur deux dans une teinte differente : c'est ce qui donne la
   sensation de rotation quand le tambour tourne. On prend --gris-2 et non
   --gris : sur les pages sans famille, --accent-doux vaut deja --gris et les
   deux teintes se confondraient. */


/* L'option au centre s'allume en pleine couleur. La classe est posee par
   app.js a chaque image, donc l'allumage suit le doigt sans retard. */






/* La bande centrale marque la selection, comme le lisere d'iOS. */




/* Indice de defilement, permanent comme sur l'accueil. */




/* ------------------------------------------------ choix de seance (cartes) */
/* Remplace un <select> par des cartes cliquables : sur un telephone, derouler
   une liste native pour choisir une prestation est le maillon faible du
   parcours. Le vrai <input radio> reste dans le DOM, donc le formulaire
   fonctionne exactement pareil et reste accessible au clavier. */

.choix {
  position: relative;   /* ancre les radios masques : sans ca ils se placent
                           sur un ancetre lointain et debordent la page */
  display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); gap: 10px;
}
.choix input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.choix label {
  display: flex; flex-direction: column; gap: 5px;
  padding: 13px 14px;
  min-height: 62px;
  justify-content: center;
  border: var(--bord) solid var(--trait-fort);
  border-radius: var(--radius-s);
  background: var(--paper);
  cursor: pointer;
  transition: background .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.choix label:hover { border-color: var(--ink-3); background: var(--gris); }
.choix input:checked + label {
  background: var(--accent);
  color: var(--vif-txt);
  border-color: var(--accent);
}
.choix input:focus-visible + label { outline: 2px solid var(--accent); outline-offset: 2px; }
.choix .nom {
  font-family: var(--heading); font-weight: 500;
  font-size: 14.5px; line-height: 1.25; letter-spacing: -.015em;
}
.choix .prix { font-size: 12.5px; font-weight: 400; opacity: .74; }

/* ------------------------------------------------------ encart collaboration */
/* Version courte : le detail vit sur une page dediee, cet encart ne fait que
   l'annoncer. Il ne doit jamais peser autant qu'une section principale. */
.teaser {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 16px 28px;
}
.teaser-texte { max-width: 58ch; }
.teaser-texte p { font-size: 15px; line-height: 1.65; margin-top: 8px; }
/* L'encart de collaboration est une bande courte : la lueur y etait
   tranchee en haut ET en bas, faute de place pour se dissiper. On la
   coupe, l'encart n'est pas une ouverture de page. */
.bandeau-teaser {
  padding-block: clamp(26px, 3.2vw, 40px);
  background: var(--gris);
  border-block-color: var(--trait);
}
.bandeau-teaser::before { display: none; }

/* --------------------------------------------------------- formulaires */
.field { display: flex; flex-direction: column; gap: 8px; }
.field label {
  font-family: var(--heading); font-weight: 500;
  font-size: 14px; color: var(--ink-2); letter-spacing: -.01em;
}
.field input, .field select, .field textarea {
  font: 400 16px/1.5 var(--body);
  color: var(--ink);
  background: var(--paper);
  border: var(--bord) solid var(--trait-fort);
  border-radius: var(--radius-s);
  padding: 13px 15px;
  min-height: 48px;
  width: 100%;
  transition: border-color .16s ease, box-shadow .16s ease;
}
.field textarea { min-height: 130px; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus {
  outline: 0;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--vif-doux);
}
/* Ligne d'aide sous une etiquette de champ : elle explique sans alourdir. */
.aide { font-size: 13px; line-height: 1.5; color: #5a5a5a; margin-top: -2px; }

.field-row { display: grid; gap: 18px; }
.field-row-2 { grid-template-columns: 1fr 1fr; }
@media (max-width: 620px) { .field-row-2 { grid-template-columns: 1fr; } }
/* Retour d'envoi. Trois etats poses par app.js via data-etat :
   attente / ok / erreur. Le fond change, la grammaire ne change pas. */
.form-status {
  font-weight: 400; font-size: 14.5px; line-height: 1.6;
  background: var(--gris);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius-s);
  padding: 15px 17px;
}
.form-status strong { font-weight: 600; }
.form-status a { font-weight: 500; border-bottom: 1px solid currentColor; }
.form-status[data-etat="attente"] { background: var(--gris); }
.form-status[data-etat="ok"]      { background: #15211A; border-color: #26382C; color: #B9D8C4; }
.form-status[data-etat="erreur"]  { background: #29201A; border-color: #453529; color: #E5C9AE; }

/* Bouton pendant l'envoi : il ne doit pas paraitre cliquable. */
.btn[disabled] { opacity: .5; cursor: default; transform: none; box-shadow: none; }

/* ---------------------------------------------------------- deux colonnes */
/* Formulaire a gauche, panneau d'informations a droite. */
.duo {
  display: grid;
  grid-template-columns: 1.25fr .75fr;
  gap: clamp(26px, 4vw, 56px);
  align-items: start;
}
@media (max-width: 900px) { .duo { grid-template-columns: 1fr; } }

.info { display: flex; flex-direction: column; gap: 20px; }
.info-titre {
  font-family: var(--heading); font-weight: 500;
  font-size: 13px; color: var(--ink-3); letter-spacing: -.005em;
  margin-bottom: 4px;
}
.info a { font-weight: 500; color: var(--accent); }
.info p { font-size: 15px; }

/* Liste a puces carrees, la puce ronde ferait trop doux ici */
.puces { display: flex; flex-direction: column; gap: 10px; font-size: 15px; }
.puces li { display: flex; gap: 11px; align-items: flex-start; }
.puces li::before {
  content: ""; flex: 0 0 9px;
  width: 9px; height: 9px; margin-top: 7px;
  background: var(--accent);
  border-radius: 2px;
}

/* -------------------------------------------------------------- galerie */
/* Chaque vignette porte la bordure et l'ombre dure, et s'enfonce au survol
   comme les boutons : c'est le geste .media-thumbnail du theme. */
.galerie {
  /* PINTEREST — releve sur l'application le 2026-08-24.
     Ce n'est pas une grille : c'est un empilement en colonnes independantes,
     ou chaque image garde sa hauteur propre. On l'obtient avec `columns`,
     pas avec `grid` : une grille aligne les rangees, c'est exactement ce
     qu'il ne faut pas.
     Deux colonnes sur telephone, gouttiere serree, coins arrondis. */
  columns: 2;
  column-gap: 8px;
  display: block;
}
.vignette {
  display: block;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--gris);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  box-shadow: var(--ombre);
  cursor: zoom-in;
  transition: transform .2s ease, box-shadow .2s ease;
}
.vignette:hover { transform: translateY(-3px); box-shadow: var(--ombre-h); }
.vignette img { transition: transform .5s ease; }
.vignette:hover img { transform: scale(1.03); }
.vignette img { width: 100%; height: 100%; object-fit: cover; object-position: var(--pos, center 25%); }

/* ---------------------------------------------------------- visionneuse */
.lightbox {
  position: fixed; inset: 0; z-index: 90;
  display: none;
  align-items: center; justify-content: center;
  padding: clamp(16px, 4vw, 48px);
  background: rgba(6, 6, 7, .95);
}
.lightbox[data-open="true"] { display: flex; }
.lightbox .frame {
  max-width: min(92vw, 900px);
  max-height: 88vh;
  width: 100%; height: 88vh;
  background: var(--paper);
  border-radius: var(--radius);
  overflow: hidden;
}
.lightbox .close {
  position: absolute; top: 18px; right: 18px;
  width: 48px; height: 48px;
  display: grid; place-items: center;
  font-size: 26px; line-height: 1;
  background: var(--paper); color: var(--ink);
  border: 1px solid var(--trait-fort);
  border-radius: 9999px;
  cursor: pointer;
  box-shadow: var(--ombre-h);
}


/* --------------------------------------------------------- fil de retour */
.retour {
  display: inline-flex; align-items: center; gap: 8px;
  font-weight: 500; font-size: 14px; color: var(--ink-2);
  padding: 10px 0 6px;
  transition: color .16s ease;
}
.retour:hover { color: var(--ink); }
.retour:hover { text-decoration: underline; }

.section { padding-block: clamp(36px, 5vw, 72px); }
.section-tight { max-width: 860px; margin-inline: auto; }

/* ------------------------------------------------- collaboration longue duree */
/* Present sur les quatre univers : texte a gauche, appel a droite. */
.collab {
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: clamp(20px, 3vw, 38px);
  align-items: center;
}
@media (max-width: 860px) { .collab { grid-template-columns: 1fr; } }

.collab-texte p { font-size: clamp(14px, 1.5vw, 15.5px); line-height: 1.65; max-width: 52ch; }
.collab-texte p + p { margin-top: 10px; }

/* L'encadre reprend la carte du systeme, sur fond clair pour rester lisible
   quel que soit le bandeau qui l'accueille. */
.collab-carte {
  background: var(--paper);
  color: var(--ink);
  border: var(--bord) solid var(--trait);
  border-radius: var(--radius);
  box-shadow: var(--ombre);
  padding: clamp(20px, 2.4vw, 28px);
}
.collab-carte ul { display: flex; flex-direction: column; gap: 10px; }
.collab-carte li { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; line-height: 1.45; }
.collab-carte li::before {
  content: "";
  flex: 0 0 9px; width: 9px; height: 9px; margin-top: 6px;
  background: var(--accent);
  border-radius: 2px;
}

/* Trio de colonnes « methode », utilise sur les trois pages */
.trio {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: clamp(20px, 3vw, 34px);
}
.trio p { font-size: 15px; }

/* ------------------------------------------------- tres petits telephones
   En dessous de 400px, quelques valeurs calculees en vw restent trop grandes
   pour leur colonne : un libelle long deborde une demi
   largeur, un titre de section pousse son bouton hors cadre. On les borne. */
@media (max-width: 400px) {

  .pli-tete { font-size: 19px; gap: 12px; padding-block: 16px; }
  .pli-tete .signe { font-size: 24px; }
  .pli-tete .compte { font-size: 11px; }

  .acc-head { font-size: 14px; gap: 12px; }
  .ligne-nom { font-size: 16px; }
  .ligne-prix { font-size: 22px; }

  .btn { padding: 0 20px; font-size: 13px; }
  .tt-xl { font-size: 32px; }
  .tt-l { font-size: 24px; }
  .case h2 { font-size: 20px; }
}


/* ------------------------------------------------------ trois piliers
   Photo / Video / Production, presentes dans le mot d'accueil et sur la
   page d'entree. Trois colonnes qui s'empilent en dessous de 640px. */
.piliers {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(14px, 2vw, 22px);
  text-align: left;
  margin-top: clamp(20px, 3vh, 28px);
  padding-top: clamp(20px, 3vh, 28px);
  border-top: var(--bord) solid var(--trait);
}
@media (max-width: 640px) { .piliers { grid-template-columns: 1fr; gap: 16px; } }

.pilier-nom {
  font-family: var(--heading); font-weight: 600;
  font-size: 12px; text-transform: uppercase; letter-spacing: .09em;
  color: var(--ink);
  margin-bottom: 8px;
}
.pilier ul { display: flex; flex-direction: column; gap: 4px; }
.pilier li { font-size: 13px; line-height: 1.5; color: var(--ink-2); }


/* =========================================================================
   AJOUTS 2026-08-23 — simplicite du parcours
   ========================================================================= */

/* ---------------------------------------------------- les trois familles
   On ne montre plus huit formules d'un coup : on demande d'abord OU se
   passe la seance. Trois cartes, un clic, le catalogue correspondant. */
.familles {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: clamp(10px, 1.4vw, 16px);
  margin-bottom: clamp(22px, 3vh, 34px);
}
.famille {
  position: relative;
  display: flex; flex-direction: column; gap: 6px;
  padding: clamp(18px, 2.4vw, 26px);
  border: 1px solid var(--trait); border-radius: var(--radius);
  background: var(--paper); color: var(--ink);
  text-align: left; cursor: pointer;
  font-family: var(--heading);
  transition: transform .25s ease, border-color .25s ease, background .25s ease;
}
.famille:hover { transform: translateY(-2px); border-color: var(--trait-fort); }
.famille .f-nom { font-size: clamp(16px, 2vw, 20px); font-weight: 600; letter-spacing: -.02em; }
.famille .f-desc { font-size: 13px; color: var(--ink-3); font-family: var(--body); line-height: 1.5; }
.famille .f-nb { margin-top: 8px; font-size: 12px; color: var(--ink-3); font-family: var(--body); }
@media (max-width: 700px) {
  .familles { grid-template-columns: 1fr; }
  .famille { flex-direction: row; align-items: baseline; gap: 12px; padding: 16px 18px; }
  .famille .f-desc { display: none; }
}

/* -------------------------------------------------------- la date
   Un agenda natif, plus une sortie de secours : « je ne sais pas encore ».
   Sans elle, celui qui n'a pas de date en tete abandonne le formulaire. */
.date-bloc { display: flex; flex-direction: column; gap: 10px; }
.date-flou {
  display: inline-flex; align-items: center; gap: 9px;
  font-size: 12.5px; line-height: 1.2; color: var(--ink-3); cursor: pointer;
  white-space: nowrap;
  padding: 6px 12px 6px 9px; border: 1px solid var(--trait); border-radius: 9999px;
  background: transparent;
  align-self: flex-start;
  transition: border-color .2s ease, color .2s ease;
}
.date-flou:has(input:checked) { border-color: var(--ink-3); color: var(--ink); }
.date-flou:hover { border-color: var(--trait-fort); }
.date-flou input[type="checkbox"] {
  width: 14px; height: 14px; min-width: 14px; flex: 0 0 14px;
  accent-color: var(--ink); margin: 0;
}
.date-bloc[data-flou="true"] .date-precise { opacity: .35; pointer-events: none; }
.date-bloc .aide { font-size: 13px; color: var(--ink-3); }

/* Le champ date natif reste sombre et lisible. */
input[type="date"], input[type="time"] { color-scheme: dark; }


/* =========================================================================
   FICHE FORMULE — une formule, une page (2026-08-23)
   Cliquer sur une formule ouvrait son detail dans la page d'univers, ce qui
   rempilait de l'information a l'endroit precis ou l'on cherche a alleger.
   Chaque formule a desormais sa page : un titre, un prix, ce qui est compris,
   un bouton. Rien d'autre.
   ========================================================================= */
.fiche-tete {
  display: grid; grid-template-columns: 1.05fr .95fr;
  gap: clamp(24px, 4vw, 54px); align-items: center;
}
@media (max-width: 860px) { .fiche-tete { grid-template-columns: 1fr; } }

.fiche-prix {
  margin-top: 20px;
  font-family: var(--heading); font-weight: 600;
  font-size: clamp(26px, 3.4vw, 40px); letter-spacing: -.035em;
}

.fiche-image { border-radius: var(--radius); overflow: hidden; aspect-ratio: 4 / 5; }
.fiche-image img { width: 100%; height: 100%; object-fit: cover; display: block; }

.fiche-reperes {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  border-top: 1px solid var(--trait); border-bottom: 1px solid var(--trait);
}
.fiche-reperes > div { padding: 22px 20px; border-left: 1px solid var(--trait); }
.fiche-reperes > div:first-child { border-left: 0; padding-left: 0; }
.fiche-reperes .r-lab { font-size: 12px; color: var(--ink-3); letter-spacing: .04em; }
.fiche-reperes .r-val { margin-top: 6px; font-family: var(--heading); font-weight: 600;
  font-size: clamp(15px, 1.7vw, 18px); letter-spacing: -.02em; }

.fiche-liste { list-style: none; padding: 0; margin: 0;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 2px; }
.fiche-liste li {
  position: relative; padding: 16px 0 16px 28px;
  border-bottom: 1px solid var(--trait); font-size: 15.5px; color: var(--ink);
}
.fiche-liste li::before {
  content: ""; position: absolute; left: 4px; top: 24px;
  width: 8px; height: 8px; border-radius: 50%; background: var(--ink-3);
}
.fiche-liste-sup li { color: var(--ink-2); }


/* =========================================================================
   LA PORTE DU PORTFOLIO (2026-08-23)
   Meme grammaire que la pastille de l'en-tete, blanc sur noir, mais posee
   juste apres le texte de presentation et occupant presque toute la largeur.
   Le travail est le premier argument : il ne se cache pas dans un menu.
   ========================================================================= */
.porte {
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px; width: 100%;
  margin: clamp(14px, 2vh, 22px) 0 0;
  padding: 7px 8px 7px 14px;
  background: linear-gradient(180deg, #FBFBFC, var(--clair));
  color: var(--clair-txt);
  border-radius: var(--radius);
  transition: transform .25s ease, box-shadow .25s ease;
}
.porte:hover { transform: translateY(-2px); box-shadow: 0 14px 40px rgba(0,0,0,.5); }
.porte .p-titre {
  font-family: var(--heading); font-weight: 600;
  font-size: 13.5px; font-weight: 700; letter-spacing: .01em; line-height: 1;
}
.porte .p-sous { margin-top: 2px; font-size: 11px; color: rgba(12,12,13,.55); }
.porte .p-fleche {
  flex: 0 0 auto; display: grid; place-items: center;
  width: 26px; height: 26px;
  border-radius: 9999px; background: var(--clair-txt); color: var(--clair);
  font-size: 12px;
  transition: transform .25s ease;
}
.porte:hover .p-fleche { transform: translateX(4px); }
@media (max-width: 560px) { .porte { padding: 7px 8px 7px 12px; } .porte .p-sous { display: none; } }

/* ========================================== le texte de presentation centre
   V2 : « le premier texte d'explication, place-le mieux, au centre ». */
.presentation { text-align: center; }
.presentation h1, .presentation h2 { margin-inline: auto; }
.presentation p { margin-inline: auto; }
.presentation .btns { justify-content: center; }

/* ============================================ les champs de date sur telephone
   Les champs date et heure natifs portent une largeur minimale imposee par le
   navigateur : dans une grille a deux colonnes ils debordaient l'ecran. */
.field input:not([type="checkbox"]):not([type="radio"]),
.field select, .field textarea { width: 100%; min-width: 0; }
input[type="date"], input[type="time"] {
  -webkit-appearance: none; appearance: none;
  min-width: 0; width: 100%;
}
@media (max-width: 760px) { .field-row-2 { grid-template-columns: 1fr; } }

/* ==================================== la collaboration, bloc de fin de page */
.collab-bloc { text-align: center; }
.collab-bloc .c-sur { font-family: var(--body); font-size: 12px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); }
.collab-bloc h2 { margin: 14px auto 0; max-width: 20ch; }
.collab-bloc p { margin: 16px auto 0; max-width: 50ch; font-size: 16px; color: var(--ink-2); }
/* Trois cartes identiques alignees, c'est le gabarit par defaut de tous les
   sites generes. Ici : une seule ligne de texte, separateurs en points, et le
   bouton dans le meme flux. Un tiers de la hauteur precedente. */
.collab-bloc { display: flex; flex-direction: column; align-items: center; gap: 14px; }
.collab-bloc h2 { max-width: 26ch; }
.collab-bloc .c-points {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 22px;
  font-size: 14px; color: var(--ink-2);
}
.collab-bloc .c-points span { position: relative; }
.collab-bloc .c-points span + span::before {
  content: "·"; position: absolute; left: -13px; color: var(--ink-3);
}


/* =========================================================================
   EN-TETE, deuxieme passe (2026-08-23)
   Le nom en capitales espacees a gauche, le menu a droite en petites capitales,
   un filet fin sous la barre. La page courante porte un trait sous son nom.
   ========================================================================= */
.bar-in { padding-inline: 0; }
.bar .logo { font-family: var(--heading); }
.bar nav { justify-self: end; }
.bar nav a {
  font-family: var(--body);
  font-size: 13.5px; font-weight: 600;
  text-transform: uppercase; letter-spacing: .1em;
  position: relative; padding-block: 6px;
}
.bar nav a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px;
  background: var(--ink); transform: scaleX(0); transform-origin: right;
  transition: transform .3s cubic-bezier(.16,1,.3,1);
}
.bar nav a:hover::after { transform: scaleX(1); transform-origin: left; }

@media (max-width: 560px) {
  .bar-in { grid-template-columns: 1fr; justify-items: center; gap: 10px; }
  .bar nav { justify-self: center; }
  .bar .logo { font-size: 21px; }
  .bar nav { gap: 14px; }
  .bar nav a { font-size: 11px; letter-spacing: .07em; }

}


/* =========================================================================
   LE BLOC CLAIR, reutilisable (2026-08-23)
   La porte du portfolio a impose sa forme : surface claire pleine largeur,
   titre en geometrique, fleche ronde a droite. V2 veut ce contraste ailleurs.
   `.porte` reste le nom, `--haut` reduit la hauteur pour les usages secondaires.
   ========================================================================= */
.porte.porte-mince { padding: 6px 8px 6px 12px; }
.porte.porte-mince .p-titre { font-size: 13px; }

/* Version sombre du meme bloc : meme geometrie, valeurs inversees. Sert a
   alterner sans changer de grammaire. */
.porte-sombre {
  background: var(--paper); color: var(--ink);
  border: 1px solid var(--trait-fort);
}
.porte-sombre .p-sous { color: var(--ink-3); }
.porte-sombre .p-fleche { background: var(--clair); color: var(--clair-txt); }

/* La formule mise en avant sur une page famille reprend la surface claire. */
.ligne.ligne-claire {
  background: linear-gradient(180deg, #FBFBFC, var(--clair));
  color: var(--clair-txt); border-radius: var(--radius); border-bottom: 0;
  padding-inline: 20px;
}
.ligne.ligne-claire .ligne-desc { color: rgba(12,12,13,.62); }


/* Le portfolio sur telephone : une seule colonne, pleine largeur. */
/* Pinterest garde DEUX colonnes sur telephone : c'est ce qui donne la
   sensation de flux. Trois au-dela de 900 px, quatre sur grand ecran. */
@media (min-width: 900px)  { .galerie { columns: 3; column-gap: 10px; } .vignette { margin-bottom: 10px; } }
@media (min-width: 1300px) { .galerie { columns: 4; } }


/* ------------------------------------------------- les hauteurs variees
   Les quatorze photos sont TOUTES en 1638x2048, soit 4:5 exactement. Sans
   intervention, les deux colonnes se calent et le mur redevient une grille.
   On applique donc une suite de sept rapports qui ne se repete pas d'une
   colonne a l'autre : le decalage nait de la, sans deformer une seule image.
   Le jour ou les photos auront des formats differents, il suffira de
   supprimer ce bloc : le mur se construira sur les vraies proportions. */
.vignette img { width: 100%; height: 100%; object-fit: cover; display: block; }
.vignette:nth-child(7n+1) img { aspect-ratio: 4 / 5; }
.vignette:nth-child(7n+2) img { aspect-ratio: 1 / 1; }
.vignette:nth-child(7n+3) img { aspect-ratio: 3 / 4; }
.vignette:nth-child(7n+4) img { aspect-ratio: 4 / 3; }
.vignette:nth-child(7n+5) img { aspect-ratio: 2 / 3; }
.vignette:nth-child(7n+6) img { aspect-ratio: 5 / 4; }
.vignette:nth-child(7n+7) img { aspect-ratio: 9 / 16; }
.vignette:active { transform: scale(.985); }


/* ============================================== Liquid Glass · 25/08/2026
   Meme grammaire que les configurateurs (assets/conf.css) : une matiere
   floutee au fond, des surfaces qui la laissent passer, une gouttiere large
   pour que rien ne colle aux bords. Ajoute ici sans rien retirer. */
:root{
  --verre:rgba(255,255,255,.05);
  --verre-haut:rgba(255,255,255,.10);
  --verre-bord:rgba(255,255,255,.13);
  --verre-bord-fort:rgba(255,255,255,.30);
  --lisere:inset 0 1px 0 rgba(255,255,255,.10);
}

.decor{ position:fixed; inset:0; z-index:-1; overflow:hidden; pointer-events:none; }
.decor span{
  position:absolute; display:block; width:72vmax; height:72vmax; border-radius:50%;
  background-size:cover; background-position:center;
  filter:blur(40px) saturate(.55); opacity:.5; transform:translateZ(0);
}
.decor .l1{ top:-24vmax; left:-20vmax; }
.decor .l2{ bottom:-28vmax; right:-22vmax; opacity:.34; }
.decor::after{ content:""; position:absolute; inset:0;
  background:linear-gradient(180deg, rgba(10,10,11,.52), rgba(10,10,11,.72) 50%, rgba(10,10,11,.88)); }

/* La barre : meme verre que les configurateurs, meme gouttiere. */
.bar{
  background:linear-gradient(180deg, rgba(10,10,11,.62), rgba(10,10,11,.30));
  -webkit-backdrop-filter:blur(16px) saturate(1.5);
          backdrop-filter:blur(16px) saturate(1.5);
}
.bar .wrap{ max-width:1140px; padding-inline:clamp(22px,6vw,72px); }
@media (max-width:480px){ .bar .wrap{ padding-inline:18px; } }

@media (prefers-reduced-transparency:reduce){
  .bar{ -webkit-backdrop-filter:none; backdrop-filter:none; background:rgba(10,10,11,.92); }
}


/* ==================================================== 2026-08-25 · matiere
   Meme bascule que les configurateurs : la geometrique (Jost/Futura) datait
   les titres. Elle reste le logotype, tout le reste passe en grotesque au
   crenage serre. Ajoute sans rien retirer. */
:root{ --heading:"Archivo","Helvetica Neue",Helvetica,Arial,sans-serif; }
.logo, .bar .logo{ font-family:"Jost","Futura","Century Gothic",sans-serif; }
.tt{ letter-spacing:-.032em; font-weight:600; }
.tt-xl{ letter-spacing:-.04em; }
.tt-l{ letter-spacing:-.034em; }

/* Le verre du site : bordures qu'on devine, angles plus ronds, ombre douce. */
.case{
  border-radius:22px;
  border-color:rgba(255,255,255,.08);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 14px 34px -22px rgba(0,0,0,1);
}
.case[aria-selected="true"]{ border-radius:22px; }


/* ================================================ plus aucun angle droit
   Releve du 26/08 : la barre du haut et le bandeau des pages interieures
   etaient les deux dernieres surfaces a angles vifs du site. Sur un site
   dont tout le reste est arrondi, un rectangle plein barre l'ecran et casse
   la confiance. Elles prennent la meme capsule que l'accueil. */
.bar{
  background:transparent !important; border-bottom:0 !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  padding-inline:14px;
}
.bar-in{
  margin-top:12px; margin-bottom:2px;
  padding:11px 22px 12px !important;
  border-radius:24px;
  background:linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.008)),
             rgba(10,10,12,.42);
  border:1px solid rgba(255,255,255,.05);
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.06),
             0 18px 40px -34px rgba(0,0,0,.9);
  -webkit-backdrop-filter:blur(10px) saturate(1.2);
          backdrop-filter:blur(10px) saturate(1.2);
  min-height:0;
}

/* Le bandeau d'ouverture des pages interieures : arrondi et detache des
   bords, comme toutes les autres surfaces. */
.bandeau{
  border-radius:26px;
  margin-inline:clamp(10px,2.4vw,20px);
  overflow:hidden;
}
