/* -------- Échelle responsive globale --------
 * Tout est exprimé en rem. La taille de base est ajustée par paliers de
 * media query — on évite vw direct pour respecter le réglage utilisateur
 * (zoom navigateur, accessibilité). 100 % = la préférence par défaut du
 * navigateur (typiquement 16 px). */
html { font-size: 100%; }
@media (max-width: 600px)  { html { font-size: 87.5%; } }   /* ~14 px */
@media (min-width: 1600px) { html { font-size: 112.5%; } }  /* ~18 px */
@media (min-width: 2200px) { html { font-size: 125%; } }    /* ~20 px */

:root {
  /* Fond général, chaud/neutre */
  --c-bg: #f8f5fb;
  --c-surface: #fff;
  --c-surface-2: #f2ecf6;
  --c-text: #1a1620;
  --c-muted: #6e6578;
  --c-border: #e3dbea;

  /* Couleur de rappel — violet (famille indigo/pourpre).
     Peut être surchargée par page via --c-accent sur <body>, par exemple
     pour afficher une collection sur un thème (Halloween, Noël, etc.). */
  --c-accent: #6b3d9e;
  --c-accent-dark: #4c2776;
  --c-accent-soft: #ebe0f7;

  /* Couleur dédiée aux likes — rouge un peu clair, indépendant de l'accent
     violet (et donc non affecté par les collections thématiques). */
  --c-like: #ef5a6b;
  --c-like-soft: #fde7ea;

  --c-error: #a02020;

  --w-wide: 72rem;
  --w-prose: 38rem;

  /* Référence bretonne : moucheture d'hermine stylisée, SVG inline utilisé
     comme background-image via var() ; couleur pilotée par --c-mouch.
     Path identique au motif-mouchette du sprite, mais ici en data URL car
     background-image ne supporte pas currentColor avec url externe. */
  --c-mouch: #1a1620;
  --hermine-moucheture: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path fill='%231a1620' d='M20 3q1 3 4 4-3 1-4 4-1-3-4-4 3-1 4-4m-7 7q1 3 4 4-3 1-4 4-1-3-4-4 3-1 4-4m10 4q3-1 4-4 1 3 4 4-3 1-4 4-1-3-4-4m-3 2q1 10 6 17-2 1-4 0-2 2-2 4 0-2-2-4-2 1-4 0 5-7 6-17'/></svg>");
}

* { box-sizing: border-box; }

html, body {
  margin: 0; padding: 0;
  font: 1rem/1.55 Arial, Helvetica, sans-serif;
  color: var(--c-text);
  background: var(--c-bg);
}

h1, h2, h3 { font-family: Arial, Helvetica, sans-serif; font-weight: 600; }
h1 { font-size: 2rem; margin: 0 0 0.5rem; }
h2 { font-size: 1.5rem; margin: 2rem 0 1rem; }
h3 { font-size: 1.1rem; margin: 1rem 0 0.5rem; }
p { margin: 0 0 1rem; }
a { color: var(--c-accent); text-decoration: none; }
a:hover { text-decoration: underline; }
.muted { color: var(--c-muted); }

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

.wrap { max-width: var(--w-wide); margin: 0 auto; padding: 0 1.25rem; }

.skip {
  position: absolute; left: -9999px;
  background: var(--c-accent); color: #fff;
  padding: 0.5rem 1rem; border-radius: 0 0 4px 4px;
}
.skip:focus { left: 1rem; top: 0; z-index: 100; }

/* -------- Header -------- */
.site-header {
  border-bottom: 1px solid var(--c-border);
  background: var(--c-surface);
  position: sticky; top: 0; z-index: 10;
  /* Frise d'hermines subtile sous le header */
  background-image: linear-gradient(var(--c-surface), var(--c-surface)),
                    linear-gradient(to right, var(--c-accent), var(--c-accent));
  background-position: 0 0, 0 100%;
  background-size: 100% calc(100% - 2px), 100% 2px;
  background-repeat: no-repeat;
}
.site-header .wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
}
/* Logo : lettrage cursif "La Patte d'Hermine" en stroke currentColor.
   ViewBox du symbole ~6.5:1 (346×53). Couleur = c-accent. */
.logo {
  color: var(--c-accent);
  display: inline-flex;
  line-height: 0;
}
.logo:hover { text-decoration: none; color: var(--c-accent-dark); }
.logo__main { width: 17rem; height: 2.6rem; display: block; }
@media (max-width: 720px) {
  .logo__main { width: 13rem; height: 2rem; }
}

.nav ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 1.25rem; font-family: Arial, Helvetica, sans-serif; font-size: 0.95rem; }
.nav a { color: var(--c-text); padding: 0.25rem 0; border-bottom: 2px solid transparent; }
.nav li.active a, .nav a:hover { border-color: var(--c-accent); color: var(--c-accent); text-decoration: none; }

/* -------- Main -------- */
.site-main { min-height: 60vh; padding: 1.5rem 0 3rem; overflow-x: hidden; }

/* -------- Hero -------- */
.hero {
  padding: 2.5rem 1.25rem 2rem;
  position: relative;
}
/* Filigrane d'hermines dans le hero — très léger, évoque le drapeau breton */
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--hermine-moucheture);
  background-size: 2.5rem auto;
  background-repeat: space;
  opacity: 0.04;
  pointer-events: none;
  z-index: 0;
}
.hero > * { position: relative; z-index: 1; }
.hero h1 { font-size: 2.4rem; max-width: var(--w-prose); }
.lead { font-size: 1.1rem; color: var(--c-muted); max-width: var(--w-prose); }

/* -------- Home hero (rayures + accroche) --------
 * Bande horizontale sous le header de la home uniquement. Les rayures
 * ondulées occupent le coin gauche, fondues via un masque alpha (rectangulaire
 * sur PC, diagonal sur mobile). Le texte est centré et flanqué de mouchettes.
 * Pas de fond ni de bordure : le hero se fond dans la page.
 *
 * Hauteur calculée pour matcher une ligne de la galerie (tile image carré +
 * caption ~2.5rem). Formule : (largeur container - gaps) / nb-colonnes
 * + hauteur caption. .wrap a max-width 72rem et padding horizontal 1.25rem ;
 * la grille a 4 colonnes en PC et 1rem de gap (donc 3rem de gap total). */
.home-hero {
  position: relative;
  height: calc((min(72rem, 100vw - 2.5rem) - 3rem) / 4 + 2.5rem);
  overflow: hidden;
  /* Compense entierement le padding-top du .site-main (1.5rem) pour coller
     le hero au header, sans bande blanche residuelle. */
  margin-top: -1.5rem;
}
.home-hero__bands {
  position: absolute;
  inset: 0;
  background: url('/hero-bands.svg') bottom left / 12vw auto repeat;
  -webkit-mask-image: linear-gradient(115deg, #000 0%, transparent 30%);
          mask-image: linear-gradient(115deg, #000 0%, transparent 30%);
}
.home-hero__text {
  position: relative;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.2rem;
  padding: 0 2rem;
  z-index: 1;
}
.home-hero__mouchette {
  width: 1.8rem; height: 1.8rem;
  color: var(--c-accent);
  opacity: 0.7;
  flex-shrink: 0;
}
.home-hero__line {
  margin: 0;
  font-family: Arial, Helvetica, sans-serif;
  font-style: italic;
  font-size: 1.3rem;
  color: var(--c-accent-dark);
  text-align: center;
  max-width: 32rem;
  line-height: 1.35;
}

@media (max-width: 720px) {
  /* Sur mobile : 2 colonnes, gap 0.6rem. */
  .home-hero { height: calc((100vw - 2.5rem - 0.6rem) / 2 + 2rem); }
  /* Sur mobile, le mask diagonal clip a la zone (0,0)-(25%,25%). On garde
     le tile en x+y avec une taille un peu plus genereuse vu le viewport
     plus etroit (20vw au lieu de 10vw). */
  .home-hero__bands {
    background-size: 20vw auto;
    -webkit-mask-image: linear-gradient(135deg, #000 0%, transparent 35%);
            mask-image: linear-gradient(135deg, #000 0%, transparent 35%);
  }
  .home-hero__text { gap: 0.75rem; padding: 0 1rem; }
  .home-hero__mouchette { width: 1.4rem; height: 1.4rem; }
  .home-hero__line {
    font-size: 1rem;
    max-width: 18rem;
  }
}

/* -------- Home : feed (grille créations + lignes collections) -------- */
.home-feed { margin-top: 1.5rem; }

.home-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}
@media (max-width: 720px) {
  .home-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.6rem;
    margin-bottom: 1rem;
  }
}

/* -------- Lignes "collection" intercalées dans le feed --------
 * Bandeau pleine largeur (full-bleed). Couleur "forte" = couleur de la
 * collection (--col-strong, défaut accent) ; "faible" = teinte claire dérivée.
 *
 * Géométrie alignée sur la grille (M = marge externe, C = colonne) :
 *   M C C C C M  pour une grille 4 colonnes.
 *   --col = largeur colonne ; --mar = bord viewport → 1re colonne.
 * Le cap gauche occupe (M - C/2) de couleur forte + C de transition
 * (= M + C/2). M - C/2 est clampé à >= 0 (négatif sur écrans < ~1424px). */
.collection-row {
  --col-strong: var(--c-accent);
  --col-weak: color-mix(in srgb, var(--col-strong) 14%, #fff);
  --lcr-wrap: min(100vw, var(--w-wide));
  --lcr-col: calc((var(--lcr-wrap) - 5.5rem) / 4);          /* 2*1.25 pad + 3*1 gap */
  --lcr-mar: calc((100vw - var(--lcr-wrap)) / 2 + 1.25rem); /* bord → 1re colonne */
  --lcr-cap: calc(var(--lcr-mar) + var(--lcr-col) / 2);     /* M + C/2 = forte + transition */

  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-top: 1.5rem;
  margin-bottom: 1.5rem;
  display: flex;
  align-items: stretch;
  background: var(--col-weak);
  border-top: 2px solid var(--col-strong);
  border-bottom: 2px solid var(--col-strong);
}
/* Cap gauche, largeur M + C/2. Traité comme un motif de fond :
   - couleur forte pleine (background-color) sur la partie gauche (M - C/2)
   - une transition forte→faible de largeur exactement C, collée au bord droit
   La transition occupe donc [M-C/2, M+C/2]. Si M-C/2 < 0 (écran étroit), sa
   moitié gauche déborde hors du cap et est simplement clippée — purement
   décoratif. Pour un futur SVG 2-couleurs : remplacer le background-image en
   gardant background-size/position. */
.collection-row__cap {
  flex: 0 0 var(--lcr-cap);
  background-color: var(--col-strong);
  background-image: linear-gradient(to right, var(--col-strong), var(--col-weak));
  background-repeat: no-repeat;
  background-size: var(--lcr-col) 100%;
  background-position: right center;
}
/* Variante avec motif SVG (ex. Céleste). Le cap peint la couleur forte,
   masquée par le motif : couche 1 = bloc plein à gauche (zone forte, largeur
   cap - C), couche 2 = motif SVG sur la transition (C de large, ratio 1:1,
   tuilé verticalement, collé à droite). Les creux laissent voir la couleur
   faible (fond du cap). Le SVG déborde et est clippé sur écran étroit. */
.collection-row--motif .collection-row__cap {
  background: var(--col-weak);
  position: relative;
}
.collection-row--motif .collection-row__cap::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: var(--col-strong);
  -webkit-mask:
    linear-gradient(#000, #000) left center / calc(100% - var(--lcr-col)) 100% no-repeat,
    var(--cap-motif) right center / var(--lcr-col) calc(var(--lcr-col) * 2) repeat-y;
          mask:
    linear-gradient(#000, #000) left center / calc(100% - var(--lcr-col)) 100% no-repeat,
    var(--cap-motif) right center / var(--lcr-col) calc(var(--lcr-col) * 2) repeat-y;
}
.collection-row__scroller {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  gap: 1rem;
  padding: 1.25rem 0;
  /* Marge faible fixe à droite, HORS de la zone scrollable (margin, pas
     padding) : la barre de défilement s'arrête avant, et le gutter weak
     reste statique. Juste la marge de centrage (sans le padding 1.25rem du
     .wrap, qui était compté en trop). */
  margin-right: calc((100vw - var(--lcr-wrap)) / 2);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  /* Barre de défilement aux couleurs de la collection (thumb=forte, track=faible). */
  scrollbar-width: thin;
  scrollbar-color: var(--col-strong) var(--col-weak);
}
.collection-row__scroller::-webkit-scrollbar { height: 0.55rem; }
.collection-row__scroller::-webkit-scrollbar-track { background: var(--col-weak); }
.collection-row__scroller::-webkit-scrollbar-thumb {
  background: var(--col-strong);
  border-radius: 999px;
}
/* Intro (titre + description) : 1er élément du scroll, largeur 3C/2. */
.collection-row__intro {
  flex: 0 0 calc(var(--lcr-col) * 1.5);
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-left: 1rem;     /* écarte le titre/desc du cap (motif/dégradé) */
  padding-right: 0.5rem;
}
.collection-row__name { font-size: 1.7rem; margin: 0 0 0.4rem; }
.collection-row__name a { color: var(--c-text); }
.collection-row__name a:hover { color: var(--col-strong); text-decoration: none; }
.collection-row__desc { margin: 0 0 0.6rem; color: var(--c-muted); font-size: 1.05rem; }
.collection-row__more { font-size: 1rem; color: var(--col-strong); white-space: nowrap; }
/* Cartes : largeur = colonne de grille. */
.collection-row__tile {
  flex: 0 0 var(--lcr-col);
  scroll-snap-align: start;
}

/* ---- Repli mobile (< 721px) : pas de cap, intro et cartes plein écran ---- */
@media (max-width: 720px) {
  .collection-row {
    display: block;
    background: var(--col-weak);
    padding: 0.25rem 0 0.75rem;
  }
  .collection-row__cap { display: none; }
  .collection-row__scroller {
    padding: 1rem;
    margin-right: 0;
    scroll-padding-left: 1rem;
  }
  .collection-row__intro { flex-basis: 70vw; }
  .collection-row__tile { flex-basis: 58vw; }
}

@media (max-width: 720px) {
  .collection-row__scroller { grid-auto-columns: 58vw; gap: 0.5rem; }
  .collection-row__head { padding: 0 1rem 0.5rem; }
  .collection-row__scroller { padding: 0 1rem 0.25rem; scroll-padding-left: 1rem; }
  .collection-row__name { font-size: 1.15rem; }
}

/* -------- Boutons -------- */
.btn {
  display: inline-block;
  padding: 0.6rem 1.2rem;
  font: inherit;
  font-family: Arial, Helvetica, sans-serif;
  font-weight: 500;
  border-radius: 4px;
  border: 1px solid var(--c-accent);
  color: var(--c-accent);
  background: transparent;
  cursor: pointer;
  text-decoration: none;
}
.btn:hover { background: var(--c-accent-soft); text-decoration: none; }
.btn--primary { background: var(--c-accent); color: #fff; }
.btn--primary:hover { background: var(--c-accent-dark); border-color: var(--c-accent-dark); }
.btn--ghost { border-color: var(--c-border); color: var(--c-muted); }
.btn--ghost:hover { background: var(--c-surface-2); color: var(--c-text); }

/* -------- Filtres -------- */
.filters { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 1.5rem; font-family: Arial, Helvetica, sans-serif; }
.filters input, .filters select {
  padding: 0.5rem 0.7rem; font: inherit;
  border: 1px solid var(--c-border); border-radius: 4px; background: var(--c-surface);
}
.filters input[type="search"] { flex: 1 1 14rem; min-width: 10rem; }

/* Container des résultats /creations pendant un swap (recherche live). */
#creations-results { transition: opacity 0.15s; }
#creations-results.is-loading { opacity: 0.55; pointer-events: none; }

/* -------- Grille de tuiles -------- */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
  gap: 1.25rem;
  margin-bottom: 2rem;
}
.tile {
  position: relative;
  display: block;
  color: inherit;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: 4px;
  /* Pas d'overflow:hidden ici : sinon l'animation du bouton like (pulse +
     burst de coeurs) serait rognee. On clippe l'image au niveau de .tile__img. */
  transition: transform 0.12s, box-shadow 0.12s;
}
.tile:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.06); text-decoration: none; }
/* Lien interne de la tuile (image + nom). Le bouton like est son frère,
   en overlay, pour eviter un <button> imbrique dans un <a> (HTML invalide). */
.tile__link { display: block; color: inherit; text-decoration: none; }
.tile__link:hover { text-decoration: none; }
.tile__img {
  position: relative;
  aspect-ratio: 1 / 1;
  background: var(--c-surface-2);
  overflow: hidden;
  border-radius: 4px 4px 0 0;
}
.tile__img img { width: 100%; height: 100%; object-fit: cover; }
.tile__badge {
  position: absolute; top: 0.5rem; left: 0.5rem;
  background: rgba(0,0,0,0.7); color: #fff;
  font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.06em;
  padding: 0.15rem 0.5rem; border-radius: 2px;
  font-family: Arial, Helvetica, sans-serif;
}
/* Bouton like en overlay (coin haut-droit de la tuile). Surcharge le style
   pilule de .like pour une version compacte sur fond translucide. */
.tile__like {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  z-index: 2;
  margin: 0;
  padding: 0.2rem 0.5rem;
  gap: 0.3rem;
  font-size: 0.8rem;
  background: rgba(255, 255, 255, 0.92);
  -webkit-backdrop-filter: blur(2px);
  backdrop-filter: blur(2px);
}
.tile__like svg { width: 1.1em; height: 1.1em; }
.tile__play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 2.4rem; height: 2.4rem;
  display: grid;
  place-items: center;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  border-radius: 50%;
  font-size: 1rem;
  pointer-events: none;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
  transition: background 0.15s, transform 0.15s;
}
.tile:hover .tile__play { background: var(--c-accent); }

.tile__caption { padding: 0.5rem 0.75rem 0.75rem; }
.tile__name { font-family: Arial, Helvetica, sans-serif; font-weight: 500; font-size: 0.95rem; line-height: 1.3; }
.tile__price { margin-top: 0.15rem; font-size: 0.85rem; color: var(--c-muted); font-family: Arial, Helvetica, sans-serif; }

/* -------- Pager -------- */
.pager {
  display: flex; justify-content: space-between; align-items: center;
  padding: 1rem 0;
  font-family: Arial, Helvetica, sans-serif;
  border-top: 1px solid var(--c-border);
  margin-top: 1rem;
}

/* -------- Breadcrumb -------- */
.breadcrumb {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.9rem;
  color: var(--c-muted);
  margin-bottom: 0.75rem;
}
.breadcrumb span { margin: 0 0.35rem; }

/* -------- Page création détail -------- */
.creation__layout {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
  gap: 2rem;
  margin-bottom: 2rem;
}
/* -------- Carousel images -------- */
.carousel {
  position: relative;
  background: var(--c-surface-2);
  border-radius: 4px;
  overflow: hidden;
  outline: none;
}
.carousel:focus-visible { box-shadow: 0 0 0 3px var(--c-accent-soft); }
.carousel__viewport {
  display: flex;
  transition: transform 0.32s cubic-bezier(.22, .61, .36, 1);
  will-change: transform;
}
.carousel__slide {
  flex: 0 0 100%;
  margin: 0;
  min-width: 0;
}
.carousel__slide img,
.carousel__slide video { width: 100%; height: auto; display: block; }
.carousel__video { background: #000; aspect-ratio: 1 / 1; object-fit: cover; }
.carousel__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 2.5rem;
  height: 2.5rem;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.92);
  color: var(--c-text);
  font-size: 1.6rem;
  line-height: 1;
  cursor: pointer;
  transition: background 0.15s, transform 0.15s;
  display: grid;
  place-items: center;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.carousel__nav:hover { background: #fff; transform: translateY(-50%) scale(1.05); }
.carousel__nav:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
.carousel__nav--prev { left: 0.6rem; }
.carousel__nav--next { right: 0.6rem; }
.carousel[data-image-count="1"] .carousel__nav,
.carousel[data-image-count="1"] .carousel__dots { display: none; }
.carousel__dots {
  position: absolute;
  bottom: 0.6rem;
  left: 0; right: 0;
  display: flex;
  gap: 0.35rem;
  justify-content: center;
  pointer-events: none;
}
.carousel__dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.55);
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.25);
  transition: background 0.2s, width 0.2s;
}
.carousel__dot.is-active {
  background: var(--c-accent);
  width: 18px;
  border-radius: 3px;
}
.carousel__thumbs {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(4.5rem, 1fr));
  gap: 0.4rem;
  margin-top: 0.6rem;
}
.carousel__thumb {
  border: 2px solid transparent;
  border-radius: 3px;
  padding: 0;
  background: var(--c-surface-2);
  cursor: pointer;
  overflow: hidden;
  aspect-ratio: 1 / 1;
}
.carousel__thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.carousel__thumb.is-active { border-color: var(--c-accent); }
.carousel__thumb:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
@media (prefers-reduced-motion: reduce) {
  .carousel__viewport { transition: none; }
}

.creation__no-img {
  aspect-ratio: 4 / 3;
  display: grid; place-items: center;
  background: var(--c-surface-2);
  color: var(--c-muted);
  border-radius: 4px;
}

.creation__info h1 { margin-top: 0; }
.creation__price {
  font-size: 1.4rem;
  color: var(--c-accent);
  font-family: Arial, Helvetica, sans-serif;
  margin-bottom: 1rem;
}
.badge { display: inline-block; padding: 0.25rem 0.6rem; border-radius: 3px; font-family: Arial, Helvetica, sans-serif; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.06em; }
.badge--sold { background: var(--c-surface-2); color: var(--c-muted); }
.creation__description { margin: 1rem 0; }
.tag-list { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 1rem 0; }
.tag-list a {
  display: inline-block;
  padding: 0.2rem 0.55rem;
  background: var(--c-accent-soft);
  color: var(--c-accent-dark);
  border-radius: 3px;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.8rem;
}
.tag-list a:hover { background: var(--c-accent); color: #fff; text-decoration: none; }

/* Ligne tags + bouton like : tags à gauche (wrap interne), like collé à
   droite via margin-left auto. Si pas de place, le like passe sous les tags
   tout en restant à droite (l'auto-margin reste actif sur sa propre ligne). */
.creation__tags-like {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 0.75rem;
  margin: 1rem 0 0;
}
.creation__tags-like .tag-list { margin: 0; }
.creation__tags-like .like { margin-top: 0; margin-left: auto; }

.creation__cta { margin-top: 1.25rem; }
/* Bouton contact : police et padding réduits pour éviter le retour à la
   ligne disgracieux du libellé long. */
.creation__cta-btn { font-size: 0.85rem; padding: 0.45rem 0.85rem; }

/* -------- Bouton "J'aime" --------
 * État au repos : cœur vide, contour, couleur muted.
 * État liked    : cœur plein, accent.
 * Animation :
 *   - sur clic, scale 1 → 1.25 → 1 (pulse)
 *   - le cœur lui-même fait un petit "drop" (translateY) au passage liked
 *   - quand on dé-like, transition douce en sens inverse (transform + color)
 */
.like {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .4rem .8rem;
  font: inherit;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.95rem;
  background: #fff8;
  color: var(--c-muted);
  border: 1px solid var(--c-border);
  border-radius: 999px;
  cursor: pointer;
  transition: color 0.2s, border-color 0.2s, background 0.2s, transform 0.15s;
  -webkit-tap-highlight-color: transparent;
}
.like:hover {
  color: var(--c-like);
  border-color: var(--c-like-soft);
  background: #fff;
}
.like:focus-visible {
  outline: 2px solid var(--c-like);
  outline-offset: 2px;
  background: #fff;
}
.like svg {
  width: 1.3em;
  height: 1.3em;
  transition: transform 0.25s cubic-bezier(.34,1.56,.64,1);
}
.like .like__heart {
  fill: transparent;
  transition: fill 0.25s, stroke 0.25s;
}
.like--on {
  color: var(--c-like);
  border-color: var(--c-like);
  background: var(--c-like-soft);
}
.like--on .like__heart { fill: currentColor; }
.like__count {
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  min-width: 1.2em;
  text-align: left;
}
.like[disabled] { opacity: 0.5; cursor: not-allowed; }

/* Animation au clic : pulse + petit décollage du cœur */
.like.is-pulsing { animation: like-pulse 0.45s cubic-bezier(.34,1.56,.64,1); }
.like.is-pulsing svg { transform: scale(1.35) rotate(-8deg); }
@keyframes like-pulse {
  0%   { transform: scale(1); }
  35%  { transform: scale(1.07); }
  60%  { transform: scale(0.97); }
  100% { transform: scale(1); }
}

/* Petit feedback "burst" quand on like (3 cœurs qui s'envolent) */
.like.is-pulsing.like--on::before,
.like.is-pulsing.like--on::after {
  content: "❤️";
  position: absolute;
  color: var(--c-like); /* fallback si la plateforme rend le coeur en texte */
  font-size: 1.5em;
  pointer-events: none;
  opacity: 0;
  animation: like-burst 0.8s ease-out;
}
.like.is-pulsing.like--on::before { left: 0.4rem; animation-delay: 0s; }
.like.is-pulsing.like--on::after  { right: 0.4rem; animation-delay: 0.08s; }
@keyframes like-burst {
  0%   { opacity: 1; transform: translateY(0) scale(0.7); }
  100% { opacity: 0; transform: translateY(-2.6rem) scale(1.25); }
}

@media (prefers-reduced-motion: reduce) {
  .like, .like svg, .like .like__heart, .like.is-pulsing { transition: none; animation: none; }
  .like.is-pulsing svg { transform: none; }
  .like.is-pulsing.like--on::before, .like.is-pulsing.like--on::after { animation: none; }
}

.creation__story {
  max-width: var(--w-prose);
  margin: 2rem auto;
  padding: 1.5rem 0;
  border-top: 1px solid var(--c-border);
}

.creation__related { border-top: 1px solid var(--c-border); padding-top: 1.5rem; }

/* Collections colorées : un lot peut définir sa propre couleur.
   Le template applique style="--c-accent: #XXX" sur le conteneur ; on
   redérive ici les variantes via color-mix (toutes versions modernes). */
@supports (color: color-mix(in srgb, red, blue)) {
  .lot-themed {
    --c-accent-dark: color-mix(in srgb, var(--c-accent) 70%, #000);
    --c-accent-soft: color-mix(in srgb, var(--c-accent) 12%, #fff);
    --c-mouch: var(--c-accent);
  }
}
.lot-themed .lot-header {
  background: var(--c-accent-soft);
  border-radius: 6px;
  padding: 1.5rem;
}
.lot-themed h1 { color: var(--c-accent-dark); }
.lot-themed .tile__badge { background: var(--c-accent-dark); }

/* -------- Page /collections : grille de cartes -------- */
.lots-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
  gap: 1.5rem;
  margin-top: 1.5rem;
}
.lot-card {
  display: flex;
  flex-direction: column;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: 6px;
  overflow: hidden;
  color: inherit;
  transition: transform 0.12s, box-shadow 0.12s;
  border-left: 4px solid var(--c-accent);
}
.lot-card:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.06); text-decoration: none; }
.lot-card__img { aspect-ratio: 16/9; background: var(--c-surface-2); overflow: hidden; }
.lot-card__img img { width: 100%; height: 100%; object-fit: cover; }
.lot-card__body {
  padding: 1rem 1.25rem 1.1rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  flex: 1 1 auto;
}
.lot-card__body h3 { margin: 0; }
.lot-card__desc { color: var(--c-muted); margin: 0; font-size: 0.95rem; }
.lot-card__meta {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-top: auto;
  padding-top: 0.5rem;
}
.lot-card__previews { display: inline-flex; gap: 0.25rem; }
.lot-card__preview-thumb {
  width: 2.4rem; height: 2.4rem;
  border-radius: 3px; overflow: hidden;
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
}
.lot-card__preview-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lot-card__count {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.85rem;
  color: var(--c-muted);
}
.lot-card__more {
  color: var(--c-accent);
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.9rem;
  margin-top: 0.25rem;
}
@supports (color: color-mix(in srgb, red, blue)) {
  .lot-card--themed {
    --c-accent-dark: color-mix(in srgb, var(--c-accent) 70%, #000);
    --c-accent-soft: color-mix(in srgb, var(--c-accent) 12%, #fff);
  }
}

.lot-header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 1.5rem;
  margin-bottom: 2rem;
}
.lot-header__img { aspect-ratio: 4 / 3; background: var(--c-surface-2); border-radius: 4px; overflow: hidden; }
.lot-header__img img { width: 100%; height: 100%; object-fit: cover; }

/* -------- Prose -------- */
.prose { max-width: var(--w-prose); }
.prose p, .prose h2, .prose h3 { max-width: 100%; }

/* -------- Modal détail création -------- */
.modal {
  /* Le <dialog> remplit l'écran ; ::backdrop fait l'assombrissement.
     Le contenu est centré dans .modal__inner. */
  width: 100vw;
  height: 100vh;
  max-width: 100vw;
  max-height: 100vh;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  overflow: hidden;
}
.modal::backdrop {
  background: rgba(20, 16, 32, 0.62);
  backdrop-filter: blur(2px);
}
.modal__inner {
  position: relative;
  max-width: 64rem;
  width: calc(100vw - 2rem);
  max-height: calc(100vh - 2rem);
  margin: 1rem auto;
  background: var(--c-surface);
  border-radius: 8px;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 1rem 1.25rem;
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
  animation: modal-pop 0.18s ease-out;
}
@keyframes modal-pop {
  from { opacity: 0; transform: scale(0.97); }
  to   { opacity: 1; transform: scale(1); }
}
.modal__close {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  width: 2.5rem;
  height: 2.5rem;
  border: 0;
  border-radius: 50%;
  background: var(--c-surface-2);
  color: var(--c-text);
  cursor: pointer;
  display: grid;
  place-items: center;
  z-index: 5;
  transition: background 0.15s, color 0.15s;
}
.modal__close:hover { background: var(--c-accent); color: #fff; }
.modal__close:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }

/* À l'intérieur du modal, on enlève le margin-top de h1 et la mise en page
   "page wrapper" — le contenu est déjà cadré par modal__inner. */
.modal .creation { padding: 1.25rem 0 0; }
.modal .creation__layout { margin-bottom: 1rem; }
.modal .creation__related,
.modal .creation__story { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--c-border); }

/* Empêche le scroll du body quand le modal est ouvert. */
body.modal-open { overflow: hidden; }

/* Sur mobile, layout empilé, hauteur 100vh, et un peu plus de marge en haut
   pour que la croix de fermeture ne recouvre pas la première image. */
@media (max-width: 720px) {
  .modal__inner {
    width: 100vw;
    max-height: 100vh;
    margin: 0;
    border-radius: 0;
    padding: 3rem 1rem 1rem;
  }
  .modal .creation__layout { grid-template-columns: 1fr; }
}

/* -------- Footer -------- */
.site-footer {
  margin-top: 3rem;
  padding: 2rem 0;
  background: var(--c-surface-2);
  border-top: 3px solid var(--c-accent);
  font-family: Arial, Helvetica, sans-serif;
  font-size: 0.9rem;
  position: relative;
}
/* Bande d'hermines décorative en haut du footer */
.site-footer::before {
  content: "";
  position: absolute;
  top: 3px; left: 0; right: 0;
  height: 2.5rem;
  background-image: var(--hermine-moucheture);
  background-size: 1.6rem auto;
  background-repeat: space;
  background-position: center;
  opacity: 0.08;
  pointer-events: none;
}
.site-footer__cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
  gap: 2rem;
}
.site-footer h3 { margin: 0 0 0.5rem; color: var(--c-muted); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; }
.site-footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.2rem; }
.site-footer__credit p { color: var(--c-muted); margin: 0; }

.social {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--c-text);
}
.social svg { color: var(--c-accent); flex-shrink: 0; }
.social:hover { color: var(--c-accent); text-decoration: none; }

/* -------- Responsive -------- */
@media (max-width: 720px) {
  .site-header .wrap { flex-direction: column; align-items: flex-start; gap: 0.5rem; padding: 0.75rem 1rem; }
  .nav ul { flex-wrap: wrap; gap: 0.75rem; }
  .hero h1 { font-size: 1.8rem; }
  .creation__layout { grid-template-columns: 1fr; }
  .lot-header { grid-template-columns: 1fr; }
  /* 2 colonnes fixes sur mobile (sinon minmax(14rem) retombe à 1 colonne). */
  .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.6rem; }
}
