@import url('https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700&display=swap');
:root{--fond:#fff;--texte:#1a1714;--doux:#5c5449;--bord:#e8e3da}
*{box-sizing:border-box}
/* contour de focus du studio — voir serveur/publication.ts */
:focus-visible{outline:2px solid var(--accent,#8a6a3a);outline-offset:3px}
body{margin:0;background:var(--fond);color:var(--texte);
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
  font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
.section{padding:48px 40px;max-width:1180px;margin:0 auto}
.titre{margin:0 0 14px;line-height:1.1;letter-spacing:-.02em;font-weight:700}
.texte{margin:0 0 14px}
.bouton{display:inline-block;padding:11px 22px;color:#fff;text-decoration:none;
  font-weight:600;font-size:15px;margin:6px 0 18px}
/* Deux éléments portent .image : le <div> d'attente, à hauteur fixe, et la vraie
   <img>. Les règles du div appliquées à une img la forçaient à 1200px de large et
   280px de haut — elle débordait de la page et s'écrasait. Chacune ses règles. */
div.image{height:280px;margin:12px 0}
/* Les attributs width et height sont écrits sur la balise : le navigateur en
   déduit seul le rapport et réserve la place avant le chargement, donc rien ne
   saute. Tenter aspect-ratio:attr(width)/attr(height) était inutile — attr() ne
   fonctionne pas hors de content, la déclaration était simplement ignorée.
   (Aucune apostrophe inverse ici : ce commentaire vit DANS le gabarit CSS, et
   une apostrophe inverse y refermerait le littéral.) */
img.image{display:block;width:100%;height:auto;margin:12px 0}
/* Aucune page publiée ne défile horizontalement. */
html,body{max-width:100%;overflow-x:hidden}
img{max-width:100%}
/* Le décor garde sa place avant que le moteur ne l'occupe : sans hauteur, la page
   sauterait au chargement. */
.decor{margin:16px 0;background:linear-gradient(160deg,#2f3b46,#1a1714);overflow:hidden}
.collection{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px}
.card{display:flex;flex-direction:column;gap:8px}
.card div.image{height:190px;margin:0}
.card img.image{height:190px;object-fit:cover;margin:0}
.navigation{padding-top:8px}
/* Le crédit des images d'attente : discret, mais PRÉSENT. Le cacher reviendrait
   à ne pas l'écrire — et l'attribution CC-BY est une obligation. */
.credits-medias{padding:12px 40px;font-size:11px;line-height:1.5;color:var(--doux);
  border-top:1px solid var(--bord)}
.credits-medias a{color:inherit}
/* Un média manquant se voit et se nomme : sans ce mot, un aplat teinté se lit
   comme une décision de charte, et personne ne va chercher le fichier absent. */
.image-absente{position:relative;min-height:80px}
.image-absente::after{content:"média manquant";position:absolute;left:12px;top:10px;
  font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8a5a52}
/* ── LES DEUX COUCHES D'UN DÉCOR ────────────────────────────────────────
   « fond » se pose derrière le contenu de sa section et n'occupe AUCUNE place ;
   « devant » le recouvre — un voile de lecture, un grain — et laisse passer les
   clics, sans quoi il rendrait la section inutilisable.
   La section devient le repère : sans une position relative sur elle, un enfant
   absolu remonterait jusqu'au corps du document et couvrirait la page entière. */
section{position:relative}
/* un decor en fond couvre sa section PAR DEFAUT — voir serveur/publication.ts */
.decor-fond,.decor-devant{position:absolute;inset:0;pointer-events:none}
.decor-fond{z-index:0}
.decor-devant{z-index:2}
/* LE :where() A UNE SPÉCIFICITÉ NULLE, ET C'EST TOUT L'OBJET DE CETTE LIGNE.
   Écrite « section > :not(.decor-fond):not(.decor-devant) », elle pesait (0,2,1)
   — plus que le sélecteur d'attribut par lequel un bloc reçoit ses règles, qui
   pèse (0,1,0). Un bloc pouvait donc
   écrire position:fixed par la sortie de secours, la feuille l'émettait, et le
   navigateur rendait relative : la porte acceptait, la décision partait, rien ne
   l'appliquait et rien ne le disait. Mesuré le 27/08 sur une barre de navigation ;
   l'ingénieur avait fini par la fixer en JavaScript, faute de pouvoir le faire en
   CSS.
   Ce que la règle VEUT dire est « par défaut, un enfant de section est dans le
   flux, au-dessus des décors ». Un défaut se surcharge ; un ordre, non. Avec
   le :where() le sélecteur choisit les mêmes éléments et pèse (0,0,1) : le défaut
   tient partout où personne ne décide, et cède dès qu'un bloc décide.
   (Ce commentaire vit DANS un gabarit : pas un seul accent grave ici, il
   fermerait la chaîne. Quatrième fois que ce dépôt paie cette leçon.) */
section > :where(:not(.decor-fond):not(.decor-devant)){position:relative;z-index:1}
/* la couche d un bloc quelconque — voir serveur/publication.ts */
section > [data-couche="fond"]{z-index:0}
section > [data-couche="devant"]{z-index:3}
/* Les dispositions. Quatre formes, et l'absence de forme reste l'empilement —
   une section qui ne déclare rien se comporte exactement comme avant. */
[data-disposition]{display:flex;gap:var(--espacement,24px)}
[data-disposition="bande"]{flex-direction:row;align-items:center;flex-wrap:wrap;justify-content:center}
/* Sans base de largeur, un enfant qui ne tient sa taille que de sa hauteur —
   l'aplat d'image en est un — se réduit à ZÉRO en flex : la bande occupait
   400 px de haut et ne montrait rien. En bloc il remplissait la ligne, ce qui
   masquait le défaut. Les enfants d'une bande se partagent donc la largeur. */
[data-disposition="bande"]>*{flex:1 1 0;min-width:80px}
[data-disposition="bande"][data-defile="oui"]>*{flex:0 0 auto;width:180px}
/* Un logo n'est pas une photo pleine page : dans une bande, l'aplat d'attente
   prend une hauteur de logo, pas les 280 px d'une image de contenu. */
[data-disposition="bande"]>div.image{height:88px;margin:0}
[data-disposition="bande"]>img.image{height:88px;object-fit:contain;margin:0}
[data-disposition="bande"][data-defile="oui"]{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;
  scrollbar-width:thin;padding-bottom:8px}
[data-disposition="cote-a-cote"]{flex-direction:row;align-items:flex-start}
[data-disposition="cote-a-cote"]>*{flex:1 1 0;min-width:0}
[data-disposition="grille"]{display:grid;
  grid-template-columns:repeat(var(--colonnes,3),minmax(0,1fr))}
[data-colonnes="2"]{--colonnes:2}[data-colonnes="3"]{--colonnes:3}
[data-colonnes="4"]{--colonnes:4}[data-colonnes="5"]{--colonnes:5}[data-colonnes="6"]{--colonnes:6}
[data-alignement="centre"]{align-items:center}
[data-alignement="fin"]{align-items:flex-end}
[data-alignement="etire"]{align-items:stretch}
/* Une bande de logos DOIT retomber en colonne sur téléphone : six logos côte à
   côte sur 375 px donnent six timbres illisibles. */
@media(max-width:640px){
  [data-disposition="cote-a-cote"]{flex-direction:column}
  [data-disposition="grille"]{--colonnes:2}
  [data-disposition="bande"]:not([data-defile="oui"]){gap:16px}
}
.entete-site{display:flex;align-items:center;gap:28px;padding:18px 40px;
  border-bottom:1px solid var(--bord);position:sticky;top:0;z-index:50;
  background:color-mix(in srgb, var(--fond) 88%, transparent);backdrop-filter:blur(8px)}
.entete-site .marque{font-weight:700;letter-spacing:-.02em;text-decoration:none;color:var(--texte)}
.navigation{display:flex;gap:20px;align-items:center;flex-wrap:wrap}
/* Dans la navigation, un bouton redevient un lien : le fond et le rayon du
   bouton de contenu n'ont rien à faire dans un en-tête. */
.navigation .bouton{background:none!important;padding:0;color:var(--doux);
  text-decoration:none;font-size:14px;border-radius:0!important}
.navigation .bouton:hover{color:var(--texte)}
.pied-site{padding:28px 40px;border-top:1px solid var(--bord);color:var(--doux);font-size:14px}
@media(max-width:640px){/* Les dispositions. Quatre formes, et l'absence de forme reste l'empilement —
   une section qui ne déclare rien se comporte exactement comme avant. */
[data-disposition]{display:flex;gap:var(--espacement,24px)}
[data-disposition="bande"]{flex-direction:row;align-items:center;flex-wrap:wrap;justify-content:center}
/* Sans base de largeur, un enfant qui ne tient sa taille que de sa hauteur —
   l'aplat d'image en est un — se réduit à ZÉRO en flex : la bande occupait
   400 px de haut et ne montrait rien. En bloc il remplissait la ligne, ce qui
   masquait le défaut. Les enfants d'une bande se partagent donc la largeur. */
[data-disposition="bande"]>*{flex:1 1 0;min-width:80px}
[data-disposition="bande"][data-defile="oui"]>*{flex:0 0 auto;width:180px}
/* Un logo n'est pas une photo pleine page : dans une bande, l'aplat d'attente
   prend une hauteur de logo, pas les 280 px d'une image de contenu. */
[data-disposition="bande"]>div.image{height:88px;margin:0}
[data-disposition="bande"]>img.image{height:88px;object-fit:contain;margin:0}
[data-disposition="bande"][data-defile="oui"]{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;
  scrollbar-width:thin;padding-bottom:8px}
[data-disposition="cote-a-cote"]{flex-direction:row;align-items:flex-start}
[data-disposition="cote-a-cote"]>*{flex:1 1 0;min-width:0}
[data-disposition="grille"]{display:grid;
  grid-template-columns:repeat(var(--colonnes,3),minmax(0,1fr))}
[data-colonnes="2"]{--colonnes:2}[data-colonnes="3"]{--colonnes:3}
[data-colonnes="4"]{--colonnes:4}[data-colonnes="5"]{--colonnes:5}[data-colonnes="6"]{--colonnes:6}
[data-alignement="centre"]{align-items:center}
[data-alignement="fin"]{align-items:flex-end}
[data-alignement="etire"]{align-items:stretch}
/* Une bande de logos DOIT retomber en colonne sur téléphone : six logos côte à
   côte sur 375 px donnent six timbres illisibles. */
@media(max-width:640px){
  [data-disposition="cote-a-cote"]{flex-direction:column}
  [data-disposition="grille"]{--colonnes:2}
  [data-disposition="bande"]:not([data-defile="oui"]){gap:16px}
}
.entete-site{padding:14px 20px;gap:16px}.navigation{gap:12px}}
.pied-orphic{padding:22px 40px;border-top:1px solid var(--bord);font-size:12px;color:#8b8275;
  max-width:1180px;margin:0 auto}
@media(max-width:640px){.section{padding:32px 20px}div.image{height:200px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* Identité du site — métier « joaillerie », enquêté le 2026-08-27 */
:root{--fond:#000000;--texte:#e0e0e0;--accent:#604020}
body{font-family:MaisonNeue,Inter,system-ui,sans-serif}
.titre,h1,h2,h3{font-family:Syne,Georgia,serif}
.bouton{background:var(--accent)}
