[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"piksl-site-content":3,"piksl-page-\u002Fsysteme\u002Fentete-live":587,"piksl-page-\u002F-live":610,"piksl-page-\u002Fsysteme\u002Fpied-live":649,"piksl-posts":661,"piksl-galleries":711,"piksl-products":860},{"site":4,"settings":14,"navigation":15,"cssGlobal":18,"cssBlocs":19,"gabarit":20,"texts":24,"theme":574},{"id":5,"name":6,"slug":7,"siteTypes":8,"sector":13},"0ec20383-192b-449e-ac98-2d62dda3f633","Naidi","naidi-tattoo",[9,10,11,12],"vitrine","portfolio","ecommerce","blog","tatoueur",{"hero_image_url":15,"logo_url":16,"loader_image_urls":17},null,"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fnaidi-logo.svg",[],"\u002F* Identité graphique — compilée, ne pas modifier à la main. *\u002F\n:root, .bloc-scene-hote {\n  --site-echelle-base: 1.0625rem;\n  --site-echelle-ratio: 1.25;\n  --site-densite-choix: 1;\n  --site-accent-2: #f16742;\n  --site-texte-attenue: #95a1a3;\n  --site-bordure: rgba(238, 234, 225, .18);\n  --site-t1-police: var(--site-police-titre);\n  --site-t1-graisse: 700;\n  --site-t1-casse: none;\n  --site-t1-lettres: -0.03em;\n  --site-t1-ligne: 1.15;\n  --site-t2-police: var(--site-police-titre);\n  --site-t2-graisse: 700;\n  --site-t2-casse: none;\n  --site-t2-lettres: -0.015em;\n  --site-t2-ligne: 1.15;\n  --site-t3-police: var(--site-police-titre);\n  --site-t3-graisse: 600;\n  --site-t3-casse: none;\n  --site-t3-lettres: 0;\n  --site-t3-ligne: 1.35;\n  --site-surtitre-police: var(--site-police-corps);\n  --site-surtitre-graisse: 600;\n  --site-surtitre-casse: uppercase;\n  --site-surtitre-lettres: 0.18em;\n  --site-surtitre-ligne: 1.35;\n  --site-corps-police: var(--site-police-corps);\n  --site-corps-graisse: 400;\n  --site-corps-casse: none;\n  --site-corps-lettres: 0;\n  --site-corps-ligne: 1.6;\n  --site-bouton-police: var(--site-police-corps);\n  --site-bouton-graisse: 600;\n  --site-bouton-casse: none;\n  --site-bouton-lettres: 0;\n  --site-bouton-ligne: 1;\n  --site-lien-couleur: var(--site-accent);\n  --site-lien-decoration: underline;\n  --site-rayon-bouton: 0px;\n  --site-rayon-image: 0px;\n  --site-rayon-carte: 0px;\n  --site-bordure-epaisseur: 1px;\n  --site-ombre: none;\n  --site-ombre-bouton: none;\n  --site-mouvement-titres: aucun;\n  --site-mouvement-images: aucun;\n  --site-mouvement-vitesse: normale;\n  --site-mouvement-cascade: aucun;\n  --site-mouvement-survol-images: aucun;\n  --site-largeur-contenu: 72rem;\n  --site-largeur-lecture: 48rem;\n  --site-respiration-titre: 0;\n  --site-t1-echelle: clamp(2.25rem, 1.8616rem + 1.7261vw, 3.2425rem);\n  --site-t2-echelle: clamp(1.6666rem, 1.5067rem + 0.7106vw, 2.0752rem);\n  --site-t3-echelle: clamp(1.4344rem, 1.346rem + 0.3927vw, 1.6602rem);\n  --site-corps-echelle: 1.0625rem;\n  --site-bouton-echelle: 1.0625rem;\n  --site-surtitre-echelle: 0.85rem;\n  --site-espace-0: 0rem;\n  --site-densite: 1;\n  --site-espace-1: 0.25rem;\n  --site-espace-2: 0.5rem;\n  --site-espace-3: 0.75rem;\n  --site-espace-4: 1rem;\n  --site-espace-5: 1.5rem;\n  --site-espace-6: 2rem;\n  --site-espace-7: 3rem;\n  --site-espace-8: 4rem;\n  --site-espace-9: 6rem;\n  --site-espace-10: 8rem;\n  --site-section-aucun: 0rem;\n  --site-section-compact: clamp(2rem, 1.8043rem + 0.8696vw, 2.5rem);\n  --site-section-normal: clamp(3rem, 2.2174rem + 3.4783vw, 5rem);\n  --site-section-aere: clamp(4rem, 2.4348rem + 6.9565vw, 8rem);\n}\n\n\u002F* Niveaux de texte, du plus GÉNÉRAL au plus PARTICULIER.\n\n   L'ordre n'est pas cosmétique. Un surtitre est un paragraphe : il est donc\n   visé par la règle du corps de texte comme par la sienne, et les deux\n   sélecteurs pèsent exactement pareil — une classe plus un type ou un\n   attribut, la pseudo-classe « is » prenant la spécificité de son argument le\n   plus fort. À égalité, c'est la DERNIÈRE règle écrite qui l'emporte.\n\n   Écrites dans l'autre sens, le corps de texte reprenait au surtitre sa\n   taille, sa casse et son interlettrage : réglé sur « MAJUSCULES, très\n   espacé », il s'affichait en minuscules serrées. Constaté au rendu réel,\n   invisible partout ailleurs.\n\n   Le ciblage des titres se fait par BALISE et non par le marqueur « titre » :\n   celui-ci est posé indifféremment sur un h1 ou un h2 selon le bloc, et\n   régler les deux ensemble ferait perdre l'intérêt d'avoir deux niveaux. *\u002F\n.bloc-scene-hote :is(p, li, [data-el=\"texte\"], [data-el=\"intro\"], [data-el=\"corps\"]) { --piksl-niveau: 1.0625rem; font-family: var(--site-police-corps); font-size: var(--piksl-niveau); font-weight: 400; text-transform: none; letter-spacing: 0; line-height: 1.6; }\n.bloc-scene-hote h1 { --piksl-niveau: clamp(2.25rem, 1.8616rem + 1.7261vw, 3.2425rem); font-family: var(--site-police-titre); font-size: var(--piksl-niveau); font-weight: 700; text-transform: none; letter-spacing: -0.03em; line-height: 1.15; }\n.bloc-scene-hote h2 { --piksl-niveau: clamp(1.6666rem, 1.5067rem + 0.7106vw, 2.0752rem); font-family: var(--site-police-titre); font-size: var(--piksl-niveau); font-weight: 700; text-transform: none; letter-spacing: -0.015em; line-height: 1.15; }\n.bloc-scene-hote :is(h3, h4) { --piksl-niveau: clamp(1.4344rem, 1.346rem + 0.3927vw, 1.6602rem); font-family: var(--site-police-titre); font-size: var(--piksl-niveau); font-weight: 600; text-transform: none; letter-spacing: 0; line-height: 1.35; }\n.bloc-scene-hote [data-el=\"surtitre\"] { --piksl-niveau: 0.85rem; font-family: var(--site-police-corps); font-size: var(--piksl-niveau); font-weight: 600; text-transform: uppercase; letter-spacing: 0.18em; line-height: 1.35; }\n.bloc-scene-hote :is([data-el=\"boutons\"] :is(a, button), [data-el=\"bouton\"]) { --piksl-niveau: 1.0625rem; font-family: var(--site-police-corps); font-size: var(--piksl-niveau); font-weight: 600; text-transform: none; letter-spacing: 0; line-height: 1; }\n\n\u002F* Le surtitre garde son opacité d'origine : c'est ce qui le tient en retrait. *\u002F\n.bloc-scene-hote [data-el=\"surtitre\"] { color: var(--site-texte-attenue); opacity: 1; }\n.bloc-scene-hote :is([data-el=\"meta\"], [data-el=\"prix\"] small, figcaption) { color: var(--site-texte-attenue); }\n\n\u002F* Liens dans le texte courant — jamais les boutons, ni le menu. *\u002F\n.bloc-scene-hote :is(p, li, [data-el=\"texte\"], [data-el=\"intro\"], [data-el=\"corps\"]) a {\n  color: var(--site-lien-couleur);\n  text-decoration-line: var(--site-lien-decoration);\n  text-underline-offset: 0.2em;\n}\n\n\u002F* Formes *\u002F\n.bloc-scene-hote :is([data-el=\"boutons\"] :is(a, button), [data-el=\"bouton\"]) {\n  border-radius: var(--site-rayon-bouton);\n  box-shadow: var(--site-ombre-bouton);\n}\n.bloc-scene-hote :is(img, video):not([data-el=\"logo\"]):not([data-el=\"logo\"] *) {\n  border-radius: var(--site-rayon-image);\n}\n.bloc-scene-hote :is([data-el=\"offres\"] > *, [data-el=\"avis\"] > *, [data-el=\"chiffres\"] > *, [data-el=\"entrees\"] > *, [data-el=\"comparaisons\"] > *) {\n  border-radius: var(--site-rayon-carte);\n  box-shadow: var(--site-ombre);\n}\n.bloc-scene-hote [class*=\"border\"] { border-color: var(--site-bordure); }\n\n\u002F* Rythme *\u002F\n.bloc-scene-hote .max-w-6xl { max-width: var(--site-largeur-contenu); }\n.bloc-scene-hote .max-w-3xl { max-width: var(--site-largeur-lecture); }\n.bloc-scene-hote :is(h1, h2, h3) { margin-bottom: var(--site-respiration-titre); }\n\n\u002F* Naïdi Tattoo — feuille du design validé le 17\u002F09\u002F2026 (index.html) *\u002F\n:root {\n      --ink: #07090b;\n      --ink-soft: #0d1316;\n      --paper: #eeeae1;\n      --paper-deep: #d8d1c5;\n      --cyan: #2297a8;\n      --orange: #f16742;\n      --mist: #95a1a3;\n      --line-dark: rgba(7, 9, 11, .18);\n      --line-light: rgba(238, 234, 225, .18);\n      --display: \"Darker Grotesque\", Arial, sans-serif;\n      --text: \"Manrope\", Arial, sans-serif;\n      --gutter: clamp(22px, 4.4vw, 84px);\n    }\n\n    *,\n    *::before,\n    *::after {\n      box-sizing: border-box;\n    }\n\n    html {\n      scroll-behavior: smooth;\n      background: var(--ink);\n    }\n\n    body {\n      margin: 0;\n      overflow-x: hidden;\n      background: var(--ink);\n      color: var(--paper);\n      font-family: var(--text);\n      -webkit-font-smoothing: antialiased;\n    }\n\n    body.is-loading {\n      overflow: hidden;\n    }\n\n    a {\n      color: inherit;\n      text-decoration: none;\n    }\n\n    button {\n      color: inherit;\n      font: inherit;\n    }\n\n    img {\n      display: block;\n      max-width: 100%;\n    }\n\n    ::selection {\n      background: var(--orange);\n      color: var(--ink);\n    }\n\n    .loader {\n      position: fixed;\n      z-index: 1000;\n      inset: 0;\n      display: grid;\n      place-items: center;\n      background: var(--paper);\n      color: var(--ink);\n    }\n\n    .loader__inner {\n      display: grid;\n      grid-template-columns: 76px auto;\n      align-items: center;\n      gap: 24px;\n    }\n\n    .loader__mark {\n      width: 76px;\n      height: 76px;\n      object-fit: contain;\n    }\n\n    .loader__brand {\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(32px, 4vw, 58px);\n      font-weight: 400;\n      line-height: .9;\n      letter-spacing: .04em;\n      text-transform: uppercase;\n    }\n\n    .loader__brand i {\n      color: var(--cyan);\n      font-style: normal;\n    }\n\n    .loader__line {\n      grid-column: 1 \u002F -1;\n      width: 100%;\n      height: 1px;\n      overflow: hidden;\n      background: rgba(7, 9, 11, .16);\n    }\n\n    .loader__line::after {\n      content: \"\";\n      display: block;\n      width: 100%;\n      height: 100%;\n      background: var(--orange);\n      transform-origin: left;\n      animation: loader-line 1.8s cubic-bezier(.76, 0, .24, 1) forwards;\n    }\n\n    @keyframes loader-line {\n      from { transform: scaleX(0); }\n      to { transform: scaleX(1); }\n    }\n\n    .cursor {\n      position: fixed;\n      z-index: 999;\n      top: 0;\n      left: 0;\n      width: 38px;\n      height: 38px;\n      border: 1px solid rgba(34, 151, 168, .7);\n      border-radius: 50%;\n      pointer-events: none;\n      transform: translate(-50%, -50%);\n      mix-blend-mode: difference;\n    }\n\n    .cursor::after {\n      content: \"\";\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      width: 5px;\n      height: 5px;\n      border-radius: 50%;\n      background: var(--cyan);\n      transform: translate(-50%, -50%);\n    }\n\n    .site-header {\n      position: fixed;\n      z-index: 50;\n      top: 0;\n      left: 0;\n      display: grid;\n      grid-template-columns: 1fr auto 1fr;\n      align-items: center;\n      width: 100%;\n      height: 92px;\n      padding: 0 var(--gutter);\n      border-bottom: 1px solid var(--line-light);\n      background: linear-gradient(\n        180deg,\n        rgba(7, 9, 11, .82) 0%,\n        rgba(7, 9, 11, .54) 100%\n      );\n      color: var(--paper);\n      backdrop-filter: blur(12px) saturate(.82);\n      -webkit-backdrop-filter: blur(12px) saturate(.82);\n    }\n\n    .brand {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      justify-self: start;\n    }\n\n    .brand img {\n      width: 30px;\n      height: 30px;\n      object-fit: contain;\n      filter: invert(1);\n    }\n\n    .brand__text {\n      display: grid;\n      line-height: 1;\n      text-transform: uppercase;\n    }\n\n    .brand__text strong {\n      font-size: 13px;\n      font-weight: 600;\n      letter-spacing: .22em;\n    }\n\n    .brand__text small {\n      margin-top: 7px;\n      color: rgba(238, 234, 225, .72);\n      font-size: 8px;\n      font-weight: 500;\n      letter-spacing: .3em;\n      text-shadow: 0 1px 8px rgba(0, 0, 0, .9);\n    }\n\n    .site-nav {\n      display: flex;\n      align-items: center;\n      gap: clamp(18px, 2.1vw, 38px);\n      font-size: 9px;\n      letter-spacing: .16em;\n      text-transform: uppercase;\n    }\n\n    .site-nav a {\n      position: relative;\n      padding: 8px 0;\n    }\n\n    .site-nav a::after {\n      content: \"\";\n      position: absolute;\n      right: 0;\n      bottom: 2px;\n      left: 0;\n      height: 1px;\n      background: var(--orange);\n      transform: scaleX(0);\n      transform-origin: right;\n      transition: transform .45s cubic-bezier(.76, 0, .24, 1);\n    }\n\n    .site-nav a:hover::after,\n    .site-nav a:focus-visible::after {\n      transform: scaleX(1);\n      transform-origin: left;\n    }\n\n    .header-index {\n      justify-self: end;\n      color: var(--mist);\n      font-size: 9px;\n      letter-spacing: .18em;\n      text-transform: uppercase;\n    }\n\n    .hero {\n      position: relative;\n      min-height: 100svh;\n      overflow: hidden;\n      isolation: isolate;\n      background: var(--ink) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Faquarelle\u002Fnaidi-ink-dark-4k-2560.webp\") center \u002F cover no-repeat;\n    }\n\n    .hero::after {\n      content: \"\";\n      position: absolute;\n      z-index: -1;\n      inset: 0;\n      background:\n        linear-gradient(90deg, rgba(7, 9, 11, .5), transparent 38%, transparent 70%, rgba(7, 9, 11, .3)),\n        linear-gradient(0deg, rgba(7, 9, 11, .6), transparent 42%);\n    }\n\n    .hero__meta {\n      position: absolute;\n      z-index: 10;\n      top: 50%;\n      left: var(--gutter);\n      display: flex;\n      align-items: center;\n      gap: 18px;\n      color: var(--mist);\n      font-size: 8px;\n      letter-spacing: .28em;\n      text-transform: uppercase;\n      transform: translate(-48%, -50%) rotate(-90deg);\n      transform-origin: center;\n    }\n\n    .hero__meta::before {\n      content: \"\";\n      width: 52px;\n      height: 1px;\n      background: var(--orange);\n    }\n\n    .compass {\n      --reveal-x: 58%;\n      --reveal-y: 48%;\n      position: absolute;\n      z-index: 4;\n      top: 53%;\n      left: 54%;\n      width: min(67vw, 810px, 82svh);\n      aspect-ratio: 1;\n      transform: translate(-50%, -50%);\n    }\n\n    .compass__rings,\n    .compass__rings::before,\n    .compass__rings::after {\n      position: absolute;\n      border-radius: 50%;\n      pointer-events: none;\n    }\n\n    .compass__rings {\n      inset: 7%;\n      border: 1px solid rgba(238, 234, 225, .2);\n    }\n\n    .compass__rings::before,\n    .compass__rings::after {\n      content: \"\";\n    }\n\n    .compass__rings::before {\n      inset: 15%;\n      border: 1px dashed rgba(34, 151, 168, .46);\n    }\n\n    .compass__rings::after {\n      inset: 31%;\n      border: 1px solid rgba(238, 234, 225, .12);\n    }\n\n    .whale {\n      position: absolute;\n      z-index: 3;\n      inset: 0;\n    }\n\n    .whale img {\n      position: absolute;\n      inset: 0;\n      width: 100%;\n      height: 100%;\n      object-fit: contain;\n      filter: drop-shadow(0 30px 45px rgba(0, 0, 0, .36));\n      user-select: none;\n      -webkit-user-drag: none;\n    }\n\n    .whale__mono {\n      opacity: .68;\n      filter: grayscale(1) brightness(.48) contrast(1.12) drop-shadow(0 30px 45px rgba(0, 0, 0, .4)) !important;\n    }\n\n    .whale__color {\n      clip-path: circle(21% at var(--reveal-x) var(--reveal-y));\n      transition: clip-path .5s cubic-bezier(.2, .75, .2, 1);\n    }\n\n    .compass:hover .whale__color {\n      clip-path: circle(28% at var(--reveal-x) var(--reveal-y));\n    }\n\n    .compass__center {\n      position: absolute;\n      z-index: 8;\n      top: 50%;\n      left: 50%;\n      display: grid;\n      place-items: center;\n      width: 88px;\n      aspect-ratio: 1;\n      border: 1px solid var(--cyan);\n      border-radius: 50%;\n      background: rgba(7, 9, 11, .84);\n      font-size: 9px;\n      letter-spacing: .22em;\n      text-transform: uppercase;\n      transform: translate(-50%, -50%);\n    }\n\n    .compass__center::before {\n      content: \"\";\n      position: absolute;\n      inset: -8px;\n      border: 1px solid rgba(34, 151, 168, .34);\n      border-radius: 50%;\n    }\n\n    .compass__point {\n      position: absolute;\n      z-index: 9;\n      display: grid;\n      min-width: 136px;\n      color: var(--paper);\n      font-size: 10px;\n      line-height: 1.55;\n      letter-spacing: .18em;\n      text-transform: uppercase;\n    }\n\n    .compass__point small {\n      color: var(--mist);\n      font-size: 7px;\n      letter-spacing: .25em;\n    }\n\n    .compass__point::after {\n      content: \"\";\n      position: absolute;\n      width: 7px;\n      height: 7px;\n      border-radius: 50%;\n      background: var(--orange);\n      box-shadow: 0 0 0 6px rgba(241, 103, 66, .08);\n    }\n\n    .compass__point--north {\n      bottom: 94%;\n      left: 50%;\n      justify-items: center;\n      transform: translateX(-50%);\n    }\n\n    .compass__point--north::after {\n      top: calc(100% + 13px);\n      left: 50%;\n      transform: translateX(-50%);\n    }\n\n    .compass__point--east {\n      top: 50%;\n      left: 94%;\n      transform: translateY(-50%);\n    }\n\n    .compass__point--east::after {\n      top: 50%;\n      right: calc(100% + 13px);\n      transform: translateY(-50%);\n    }\n\n    .compass__point--south {\n      top: 94%;\n      left: 50%;\n      justify-items: center;\n      transform: translateX(-50%);\n    }\n\n    .compass__point--south::after {\n      bottom: calc(100% + 13px);\n      left: 50%;\n      transform: translateX(-50%);\n    }\n\n    .compass__point--west {\n      top: 50%;\n      right: 94%;\n      justify-items: end;\n      text-align: right;\n      transform: translateY(-50%);\n    }\n\n    .compass__point--west::after {\n      top: 50%;\n      left: calc(100% + 13px);\n      transform: translateY(-50%);\n    }\n\n    .hero__copy {\n      position: absolute;\n      z-index: 12;\n      bottom: clamp(28px, 6vh, 70px);\n      left: var(--gutter);\n      width: min(700px, 40vw);\n    }\n\n    .eyebrow {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      margin: 0 0 20px;\n      color: var(--orange);\n      font-size: 8px;\n      letter-spacing: .3em;\n      text-transform: uppercase;\n    }\n\n    .eyebrow::before {\n      content: \"\";\n      width: 28px;\n      height: 1px;\n      background: currentColor;\n    }\n\n    .hero__title {\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(48px, 4.15vw, 78px);\n      font-weight: 300;\n      line-height: .88;\n      letter-spacing: -.025em;\n      text-transform: uppercase;\n    }\n\n    .hero__title span {\n      display: block;\n    }\n\n    .hero__title span:last-child {\n      margin-left: clamp(24px, 3vw, 58px);\n      color: var(--cyan);\n    }\n\n    .hero__intro {\n      max-width: 470px;\n      margin: 22px 0 0;\n      color: rgba(238, 234, 225, .84);\n      font-size: clamp(12px, .9vw, 15px);\n      line-height: 1.7;\n    }\n\n    .scroll-note {\n      position: absolute;\n      z-index: 10;\n      right: var(--gutter);\n      bottom: 42px;\n      display: grid;\n      justify-items: center;\n      gap: 13px;\n      color: var(--mist);\n      font-size: 7px;\n      letter-spacing: .3em;\n      text-transform: uppercase;\n    }\n\n    .scroll-note::after {\n      content: \"\";\n      width: 1px;\n      height: 52px;\n      background: linear-gradient(var(--orange), transparent);\n    }\n\n    .marquee {\n      overflow: hidden;\n      border-top: 1px solid var(--line-light);\n      border-bottom: 1px solid var(--line-light);\n      background: var(--ink);\n      color: var(--paper);\n    }\n\n    .marquee__track {\n      display: flex;\n      width: max-content;\n      padding: 17px 0 19px;\n      animation: marquee 28s linear infinite;\n    }\n\n    .marquee__item {\n      display: flex;\n      align-items: center;\n      gap: 32px;\n      padding-right: 32px;\n      font-family: var(--display);\n      font-size: clamp(22px, 2.1vw, 38px);\n      font-weight: 300;\n      letter-spacing: .07em;\n      text-transform: uppercase;\n      white-space: nowrap;\n    }\n\n    .marquee__item::after {\n      content: \"\";\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: var(--orange);\n    }\n\n    @keyframes marquee {\n      to { transform: translateX(-50%); }\n    }\n\n    .paper-section {\n      position: relative;\n      overflow: hidden;\n      min-height: 100svh;\n      padding: clamp(110px, 13vw, 220px) var(--gutter);\n      background: var(--paper) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-paper-light.webp\") center \u002F cover;\n      color: var(--ink);\n    }\n\n    .paper-section::before {\n      content: \"02\";\n      position: absolute;\n      top: 80px;\n      right: var(--gutter);\n      color: rgba(7, 9, 11, .08);\n      font-family: var(--display);\n      font-size: clamp(150px, 22vw, 390px);\n      font-weight: 300;\n      line-height: .7;\n    }\n\n    .manifesto {\n      position: relative;\n      z-index: 2;\n      display: grid;\n      grid-template-columns: minmax(0, 1.15fr) minmax(320px, .65fr);\n      gap: clamp(50px, 9vw, 160px);\n      align-items: center;\n      max-width: 1500px;\n      margin: 0 auto;\n    }\n\n    .section-label {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      margin: 0 0 34px;\n      color: var(--orange);\n      font-size: 8px;\n      letter-spacing: .3em;\n      text-transform: uppercase;\n    }\n\n    .section-label::before {\n      content: \"\";\n      width: 28px;\n      height: 1px;\n      background: currentColor;\n    }\n\n    .manifesto__title {\n      max-width: 900px;\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(58px, 7.5vw, 138px);\n      font-weight: 300;\n      line-height: .78;\n      letter-spacing: -.04em;\n      text-transform: uppercase;\n    }\n\n    .manifesto__title .blue {\n      color: var(--cyan);\n    }\n\n    .manifesto__title .orange {\n      color: var(--orange);\n    }\n\n    .manifesto__text {\n      display: grid;\n      grid-template-columns: 46px 1fr;\n      gap: 22px;\n      max-width: 520px;\n      margin: 48px 0 0;\n      font-size: 14px;\n      line-height: 1.8;\n    }\n\n    .manifesto__text span {\n      color: var(--cyan);\n      font-size: 10px;\n      letter-spacing: .18em;\n    }\n\n    .portrait-card {\n      position: relative;\n      align-self: stretch;\n      min-height: 620px;\n      overflow: hidden;\n      background: var(--ink);\n    }\n\n    .portrait-card img {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n      filter: grayscale(1) contrast(1.06);\n    }\n\n    .portrait-card__caption {\n      position: absolute;\n      right: 18px;\n      bottom: 22px;\n      left: 18px;\n      display: flex;\n      justify-content: space-between;\n      padding-top: 12px;\n      border-top: 1px solid rgba(238, 234, 225, .42);\n      color: var(--paper);\n      font-size: 7px;\n      letter-spacing: .22em;\n      text-transform: uppercase;\n    }\n\n    .works {\n      position: relative;\n      padding: clamp(110px, 12vw, 210px) var(--gutter);\n      background: var(--ink);\n    }\n\n    .works__head {\n      display: grid;\n      grid-template-columns: 1fr auto;\n      align-items: end;\n      gap: 30px;\n      margin-bottom: clamp(58px, 8vw, 120px);\n    }\n\n    .works__title {\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(70px, 12vw, 220px);\n      font-weight: 300;\n      line-height: .68;\n      letter-spacing: -.045em;\n      text-transform: uppercase;\n    }\n\n    .works__title span {\n      display: block;\n      margin-left: clamp(40px, 11vw, 200px);\n      color: transparent;\n      -webkit-text-stroke: 1px rgba(238, 234, 225, .5);\n    }\n\n    .works__count {\n      margin: 0 0 8px;\n      color: var(--mist);\n      font-size: 8px;\n      line-height: 1.8;\n      letter-spacing: .22em;\n      text-align: right;\n      text-transform: uppercase;\n    }\n\n    .works-grid {\n      display: grid;\n      grid-template-columns: repeat(12, 1fr);\n      gap: clamp(16px, 2vw, 34px);\n      max-width: 1600px;\n      margin: 0 auto;\n    }\n\n    .work-card {\n      position: relative;\n      overflow: hidden;\n      background: #111;\n    }\n\n    .work-card:nth-child(1) {\n      grid-column: 1 \u002F span 5;\n      aspect-ratio: .82;\n    }\n\n    .work-card:nth-child(2) {\n      grid-column: 7 \u002F span 6;\n      aspect-ratio: 1.28;\n      margin-top: 17%;\n    }\n\n    .work-card:nth-child(3) {\n      grid-column: 2 \u002F span 4;\n      aspect-ratio: .74;\n      margin-top: 9%;\n    }\n\n    .work-card:nth-child(4) {\n      grid-column: 8 \u002F span 4;\n      aspect-ratio: .76;\n      margin-top: -5%;\n    }\n\n    .work-card img {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n      filter: grayscale(1) saturate(.3);\n      transform: scale(1.01);\n      transition: filter .8s ease, transform 1.2s cubic-bezier(.2, .75, .2, 1);\n    }\n\n    .work-card:hover img {\n      filter: grayscale(0) saturate(1);\n      transform: scale(1.05);\n    }\n\n    .work-card__caption {\n      position: absolute;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      display: flex;\n      align-items: end;\n      justify-content: space-between;\n      padding: 48px 18px 17px;\n      background: linear-gradient(transparent, rgba(7, 9, 11, .88));\n      font-size: 9px;\n      letter-spacing: .18em;\n      text-transform: uppercase;\n    }\n\n    .work-card__caption span:last-child {\n      color: var(--orange);\n      font-size: 8px;\n    }\n\n    .works__link {\n      display: grid;\n      place-items: center;\n      width: 150px;\n      aspect-ratio: 1;\n      margin: clamp(70px, 9vw, 140px) auto 0;\n      border: 1px solid rgba(34, 151, 168, .7);\n      border-radius: 50%;\n      font-size: 8px;\n      letter-spacing: .2em;\n      text-align: center;\n      text-transform: uppercase;\n    }\n\n    .routes {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      min-height: 92svh;\n      background: var(--paper);\n      color: var(--ink);\n    }\n\n    .route-panel {\n      position: relative;\n      display: flex;\n      flex-direction: column;\n      justify-content: space-between;\n      min-height: 92svh;\n      padding: clamp(90px, 8vw, 145px) var(--gutter) 54px;\n      overflow: hidden;\n    }\n\n    .route-panel + .route-panel {\n      border-left: 1px solid var(--line-dark);\n    }\n\n    .route-panel--dark {\n      background: var(--ink-soft) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-ink-dark.webp\") center \u002F cover;\n      color: var(--paper);\n    }\n\n    .route-panel__number {\n      position: absolute;\n      top: 80px;\n      right: 4vw;\n      color: rgba(7, 9, 11, .07);\n      font-family: var(--display);\n      font-size: clamp(140px, 18vw, 330px);\n      line-height: .7;\n    }\n\n    .route-panel--dark .route-panel__number {\n      color: rgba(238, 234, 225, .05);\n    }\n\n    .route-panel__title {\n      position: relative;\n      z-index: 2;\n      max-width: 620px;\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(64px, 7.5vw, 140px);\n      font-weight: 300;\n      line-height: .74;\n      letter-spacing: -.045em;\n      text-transform: uppercase;\n    }\n\n    .route-panel__title em {\n      display: block;\n      color: var(--cyan);\n      font-style: normal;\n    }\n\n    .route-panel__bottom {\n      position: relative;\n      z-index: 2;\n      display: grid;\n      grid-template-columns: 1fr auto;\n      gap: 32px;\n      align-items: end;\n      padding-top: 24px;\n      border-top: 1px solid currentColor;\n    }\n\n    .route-panel__bottom p {\n      max-width: 420px;\n      margin: 0;\n      font-size: 12px;\n      line-height: 1.75;\n    }\n\n    .route-panel__bottom a {\n      color: var(--orange);\n      font-size: 9px;\n      letter-spacing: .2em;\n      text-transform: uppercase;\n    }\n\n    .closing {\n      position: relative;\n      display: grid;\n      min-height: 100svh;\n      place-items: center;\n      overflow: hidden;\n      background: var(--ink);\n      text-align: center;\n    }\n\n    .closing__whale {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      width: min(53vw, 700px);\n      opacity: .2;\n      filter: grayscale(1);\n      transform: translate(-50%, -50%) rotate(-8deg);\n    }\n\n    .closing__content {\n      position: relative;\n      z-index: 3;\n      padding: 90px var(--gutter);\n    }\n\n    .closing__title {\n      margin: 0;\n      font-family: var(--display);\n      font-size: clamp(78px, 15vw, 270px);\n      font-weight: 300;\n      line-height: .68;\n      letter-spacing: -.05em;\n      text-transform: uppercase;\n    }\n\n    .closing__title span {\n      display: block;\n      color: var(--cyan);\n    }\n\n    .closing__link {\n      display: inline-grid;\n      place-items: center;\n      width: 150px;\n      aspect-ratio: 1;\n      margin-top: 70px;\n      border: 1px solid var(--orange);\n      border-radius: 50%;\n      background: rgba(7, 9, 11, .72);\n      font-size: 8px;\n      letter-spacing: .22em;\n      text-transform: uppercase;\n    }\n\n    .site-footer {\n      display: grid;\n      grid-template-columns: 1fr auto 1fr;\n      align-items: center;\n      min-height: 110px;\n      padding: 22px var(--gutter);\n      border-top: 1px solid var(--line-light);\n      background: var(--ink);\n      color: var(--mist);\n      font-size: 8px;\n      letter-spacing: .18em;\n      text-transform: uppercase;\n    }\n\n    .site-footer__socials {\n      display: flex;\n      gap: 24px;\n      justify-self: center;\n    }\n\n    .site-footer__top {\n      justify-self: end;\n      color: var(--paper);\n    }\n\n    .reveal {\n      opacity: 0;\n      transform: translateY(42px);\n      transition: opacity 1.1s ease, transform 1.1s cubic-bezier(.2, .75, .2, 1);\n    }\n\n    .reveal.is-visible {\n      opacity: 1;\n      transform: translateY(0);\n    }\n\n    @media (max-width: 1050px) {\n      .site-header {\n        grid-template-columns: 1fr auto;\n      }\n\n      .site-nav {\n        display: none;\n      }\n\n      .compass {\n        left: 58%;\n        width: min(76vw, 720px, 74svh);\n      }\n\n      .hero__copy {\n        width: 52vw;\n      }\n\n      .manifesto {\n        grid-template-columns: 1fr .65fr;\n      }\n\n      .portrait-card {\n        min-height: 520px;\n      }\n    }\n\n    @media (max-width: 760px) {\n      .cursor {\n        display: none;\n      }\n\n      .site-header {\n        height: 76px;\n      }\n\n      .header-index {\n        font-size: 7px;\n      }\n\n      .hero {\n        min-height: 850px;\n      }\n\n      .hero__meta {\n        display: none;\n      }\n\n      .compass {\n        top: 39%;\n        left: 50%;\n        width: min(112vw, 560px);\n      }\n\n      .compass__point {\n        min-width: 105px;\n        font-size: 8px;\n      }\n\n      .hero__copy {\n        right: var(--gutter);\n        bottom: 36px;\n        width: auto;\n      }\n\n      .hero__title {\n        font-size: clamp(52px, 15vw, 74px);\n      }\n\n      .hero__title span:last-child {\n        margin-left: 0;\n      }\n\n      .scroll-note {\n        display: none;\n      }\n\n      .manifesto {\n        grid-template-columns: 1fr;\n      }\n\n      .manifesto__title {\n        font-size: clamp(58px, 18vw, 92px);\n      }\n\n      .portrait-card {\n        min-height: 560px;\n      }\n\n      .works__head {\n        grid-template-columns: 1fr;\n      }\n\n      .works__count {\n        text-align: left;\n      }\n\n      .work-card:nth-child(n) {\n        grid-column: 1 \u002F -1;\n        aspect-ratio: .82;\n        margin-top: 0;\n      }\n\n      .routes {\n        grid-template-columns: 1fr;\n      }\n\n      .route-panel + .route-panel {\n        border-top: 1px solid var(--line-dark);\n        border-left: 0;\n      }\n\n      .route-panel__bottom {\n        grid-template-columns: 1fr;\n      }\n\n      .closing__whale {\n        width: 100vw;\n      }\n\n      .site-footer {\n        grid-template-columns: 1fr;\n        gap: 22px;\n        text-align: center;\n      }\n\n      .site-footer__socials,\n      .site-footer__top {\n        justify-self: center;\n      }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      html {\n        scroll-behavior: auto;\n      }\n\n      *,\n      *::before,\n      *::after {\n        animation-duration: .01ms !important;\n        animation-iteration-count: 1 !important;\n        transition-duration: .01ms !important;\n      }\n\n      .reveal {\n        opacity: 1;\n        transform: none;\n      }\n\n      .whale__color {\n        clip-path: none;\n      }\n    }\n\n\n\u002F* ═══ Montage dans le gabarit Piks-l ═══════════════════════════════════════\n   Rien ici ne modifie le design : ces règles rendent au code d'origine\n   l'environnement d'une page nue (celui de index.html ouvert seul).\n   ═════════════════════════════════════════════════════════════════════════ *\u002F\n\n\u002F* Nuxt UI pose color-scheme: dark (html.dark) : barres de défilement et\n   contrôles natifs sombres. L'original n'en déclare aucun. *\u002F\n:root { color-scheme: normal; }\n\n\u002F* Les enveloppes du gabarit peignent le fond du thème (en style EN LIGNE sur\n   .bloc-scene-hote, d'où !important) : le fond est celui du body d'origine. *\u002F\n#__nuxt .bg-default,\n.bloc-scene-hote,\n.bloc-scene,\n.bloc-scene > section[data-type=\"html\"] { background: transparent !important; }\n\n\u002F* L'héritage du \u003Cbody> d'origine. Entre \u003Cbody> et le HTML du design, le\n   gabarit intercale ses enveloppes : .text-default (couleur Nuxt UI),\n   .bloc-scene-hote (taille et interligne du thème), et le préflight Tailwind\n   met line-height: 1.5 sur \u003Chtml>. Chaque bloc HTML repart donc des valeurs\n   qu'un enfant direct du \u003Cbody> d'origine hérite. *\u002F\n.bloc-scene-hote .bloc-html {\n  color: var(--paper);\n  font-family: var(--text);\n  font-size: medium;\n  font-weight: 400;\n  font-style: normal;\n  line-height: normal;\n  letter-spacing: normal;\n  text-transform: none;\n  text-align: start;\n  -webkit-tap-highlight-color: initial;\n  \u002F* Scene.vue : .bloc-scene-hote :is(h1, h2, h3) { text-transform: var(--site-casse-titres) }\n     pèse plus lourd que les classes du design (0,1,1 contre 0,1,0). On lui\n     donne la valeur que le design écrit sur tous ses titres. *\u002F\n  --site-casse-titres: uppercase;\n}\n\n\u002F* Le préflight Tailwind remet à zéro les marges que le navigateur donne par\n   défaut. Le design s'appuie sur deux d'entre elles : \u003Cp class=\"hero__meta\">\n   et \u003Cfigure class=\"portrait-card\">, qui n'en déclarent aucune. Poids nul\n   (:where) : toute règle du design passe devant. *\u002F\n:where(.bloc-html) p { margin-block: 1em; }\n:where(.bloc-html) figure { margin: 1em 40px; }\n\n\u002F* Le même préflight pose border: 0 solid sur tout élément : invisible tant\n   que la largeur est nulle, mais un design qui ne donnerait qu'une largeur\n   verrait apparaître un trait. On rend le style par défaut (none). *\u002F\n:where(.bloc-html) *,\n:where(.bloc-html) *::before,\n:where(.bloc-html) *::after { border-style: none; }\n\n\u002F* Hors design : les pages que rend le gabarit (mentions légales,\n   confidentialité). L'entête du design est fixe — 92 px, 76 px sous 760 px,\n   ses propres valeurs : la première section de ces pages commence dessous. *\u002F\nmain .bloc-scene > section:first-child:not([data-type=\"html\"]) { margin-top: 92px; }\n@media (max-width: 760px) {\n  main .bloc-scene > section:first-child:not([data-type=\"html\"]) { margin-top: 76px; }\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — l'effet de boussole (demandé par Piks-l) ═══\n   Une rose graduée posée sur l'anneau extérieur, un repère orange qui glisse\n   sur les graduations, et une aiguille aimantée : elle cherche le pointeur,\n   se cale sur le point cardinal survolé, oscille avant de se fixer et revient\n   au nord quand plus rien ne bouge. Couleurs, épaisseurs et courbes sont\n   celles du design (papier, cyan, orange, filets de 1 px).\n   Plans (demandé par Piks-l) : les crans et les anneaux au fond, l'aiguille\n   devant eux, la baleine (z-index 3) devant l'aiguille. *\u002F\n.compass__rose {\n  position: absolute;\n  z-index: 2;\n  inset: 7%;\n  width: 86%;\n  height: 86%;\n  overflow: visible;\n  pointer-events: none;\n}\n\n.compass__tick {\n  stroke: rgba(238, 234, 225, .42);\n  stroke-width: .8;\n  vector-effect: non-scaling-stroke;\n}\n\n.compass__tick--15 {\n  stroke: rgba(238, 234, 225, .58);\n}\n\n.compass__tick--30 {\n  stroke: rgba(238, 234, 225, .75);\n}\n\n.compass__tick--cap {\n  stroke: var(--paper);\n  stroke-width: 1.4;\n}\n\n.compass__tick--in {\n  stroke: rgba(34, 151, 168, .7);\n}\n\n.compass__deg {\n  fill: var(--mist);\n  font-family: var(--text);\n  font-size: 3.6px;\n  letter-spacing: .18em;\n  text-anchor: middle;\n}\n\n.compass__bearing,\n.compass__needle {\n  transform-box: view-box;\n  transform-origin: 100px 100px;\n}\n\n.compass__bearing-mark {\n  fill: var(--cyan);\n}\n\n.compass__needle {\n  filter: drop-shadow(0 6px 10px rgba(0, 0, 0, .55));\n  opacity: 0;\n  transition: opacity .9s ease;\n}\n\n.compass.is-aimantee .compass__needle {\n  opacity: 1;\n}\n\n.compass__needle-north {\n  fill: var(--orange);\n}\n\n.compass__needle-south {\n  fill: rgba(238, 234, 225, .72);\n}\n\n.compass__needle-axis {\n  stroke: rgba(7, 9, 11, .55);\n  stroke-width: .5;\n  vector-effect: non-scaling-stroke;\n}\n\n.compass__point {\n  transition: color .45s cubic-bezier(.76, 0, .24, 1);\n}\n\n.compass__point.is-cap {\n  color: var(--orange);\n}\n\n.compass__point.is-cap small {\n  color: var(--paper);\n}\n\n@media (max-width: 760px) {\n  .compass__deg {\n    display: none;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .compass__needle {\n    transition: none;\n  }\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — les voyages entre les pages (demandé par Piks-l) ═══\n   Chaque page est un lieu de la boussole : Sur la peau au nord, Hors peau au\n   sud, Sur la route à l'ouest, Se rencontrer à l'est, l'accueil au centre et\n   L'approche « dedans » (on entre par le centre). Aller d'un lieu à l'autre\n   fait voyager l'écran dans la direction du trajet : un rideau d'encre, filet\n   orange en tête, traverse l'écran pendant que la page part dans le même sens. *\u002F\n.voyage {\n  position: fixed;\n  z-index: 998;\n  inset: 0;\n  display: grid;\n  place-items: center;\n  overflow: hidden;\n  background: var(--ink-soft) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-ink-dark.webp\") center \u002F cover;\n  color: var(--paper);\n  pointer-events: none;\n  visibility: hidden;\n}\n\n.voyage.is-actif {\n  visibility: visible;\n  pointer-events: auto;\n}\n\n.voyage::before {\n  content: \"\";\n  position: absolute;\n  background: var(--orange);\n}\n\n.voyage[data-cap=\"nord\"]::before { top: 0; right: 0; left: 0; height: 1px; }\n.voyage[data-cap=\"sud\"]::before { right: 0; bottom: 0; left: 0; height: 1px; }\n.voyage[data-cap=\"ouest\"]::before { top: 0; bottom: 0; left: 0; width: 1px; }\n.voyage[data-cap=\"est\"]::before { top: 0; right: 0; bottom: 0; width: 1px; }\n.voyage[data-cap*=\"-\"]::before,\n.voyage[data-cap=\"dedans\"]::before,\n.voyage[data-cap=\"dehors\"]::before { display: none; }\n\n\u002F* En aquarelle (evolutions\u002Faquarelle.js), le rideau est peint par le shader :\n   plus de fond CSS ni de filet droit, et une marge hors écran dans l'axe du\n   trajet pour que la lisière mouillée ne laisse jamais voir la page pendant\n   le changement. *\u002F\n.voyage.aquarelle-prete {\n  background: none;\n  isolation: isolate;\n}\n\n.voyage.aquarelle-prete::before {\n  display: none;\n}\n\n.voyage.aquarelle-prete[data-cap=\"nord\"],\n.voyage.aquarelle-prete[data-cap=\"sud\"] { inset: min(-14vh, -9vw) 0; }\n.voyage.aquarelle-prete[data-cap=\"ouest\"],\n.voyage.aquarelle-prete[data-cap=\"est\"] { inset: 0 min(-14vw, -9vh); }\n.voyage.aquarelle-prete[data-cap*=\"-\"] { inset: min(-14vh, -9vw) min(-14vw, -9vh); }\n\n.voyage__contenu {\n  position: relative;\n  display: grid;\n  justify-items: center;\n  padding: 0 var(--gutter);\n  text-align: center;\n}\n\n.voyage__contenu .section-label {\n  margin-bottom: 28px;\n}\n\n.voyage__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(58px, 9vw, 160px);\n  font-weight: 300;\n  line-height: .78;\n  letter-spacing: -.045em;\n  text-transform: uppercase;\n}\n\n.voyage__rose {\n  width: 46px;\n  height: 46px;\n  margin-top: 34px;\n  overflow: visible;\n}\n\n.voyage__rose circle {\n  fill: none;\n  stroke: rgba(238, 234, 225, .3);\n  stroke-width: 1;\n}\n\n.voyage__rose path:first-of-type { fill: var(--orange); }\n.voyage__rose path:last-of-type { fill: rgba(238, 234, 225, .72); }\n\n\u002F* Un bloc « Hors peau » ou « Sur la route » seul sur sa page prend toute la\n   largeur (dans le design, les deux partageaient la section). *\u002F\n.routes--seule {\n  grid-template-columns: 1fr;\n}\n\n\u002F* Le lien actif du menu : le filet orange du survol reste tiré. *\u002F\n.site-nav a[aria-current=\"page\"]::after {\n  transform: scaleX(1);\n  transform-origin: left;\n}\n\n\u002F* ── Le menu des petits écrans ──\n   Sous 1050 px le design masque la navigation : tant que le site tenait sur\n   une page, on la parcourait en défilant. Devenu multipage, il lui faut un\n   accès — un bouton « Menu » dans l'entête, et un volet d'encre qui reprend\n   les liens de la navigation (mêmes textes, relus dans l'entête). *\u002F\n.menu-toggle {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  padding: 10px 0 10px 10px;\n  border: 0;\n  background: none;\n  color: var(--paper);\n  font-size: 9px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n  cursor: pointer;\n}\n\n.menu-toggle__traits {\n  display: grid;\n  gap: 5px;\n  width: 22px;\n}\n\n.menu-toggle__traits::before,\n.menu-toggle__traits::after {\n  content: \"\";\n  height: 1px;\n  background: currentColor;\n}\n\n.menu-toggle__traits::after {\n  width: 60%;\n  justify-self: end;\n  background: var(--orange);\n}\n\n.menu-mobile {\n  position: fixed;\n  z-index: 990;\n  inset: 0;\n  display: grid;\n  align-content: center;\n  gap: 8px;\n  padding: 96px var(--gutter) 48px;\n  background: var(--ink-soft) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-ink-dark.webp\") center \u002F cover;\n  color: var(--paper);\n  clip-path: inset(0 0 100% 0);\n  visibility: hidden;\n  transition: clip-path .7s cubic-bezier(.76, 0, .24, 1), visibility 0s linear .7s;\n}\n\n.menu-mobile.is-ouvert {\n  clip-path: inset(0 0 0 0);\n  visibility: visible;\n  transition: clip-path .7s cubic-bezier(.76, 0, .24, 1), visibility 0s;\n}\n\n.menu-mobile a {\n  display: flex;\n  align-items: baseline;\n  gap: 16px;\n  font-family: var(--display);\n  font-size: clamp(40px, 11vw, 72px);\n  font-weight: 300;\n  line-height: .95;\n  letter-spacing: -.03em;\n  text-transform: uppercase;\n}\n\n.menu-mobile a small {\n  color: var(--orange);\n  font-family: var(--text);\n  font-size: 9px;\n  letter-spacing: .22em;\n}\n\n.menu-mobile a[aria-current=\"page\"] {\n  color: var(--cyan);\n}\n\n.menu-mobile__fermer {\n  position: absolute;\n  top: 24px;\n  right: var(--gutter);\n  padding: 10px 0 10px 10px;\n  border: 0;\n  background: none;\n  color: var(--paper);\n  font-size: 9px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n  cursor: pointer;\n}\n\n@media (max-width: 1050px) {\n  .site-header {\n    grid-template-columns: 1fr auto auto;\n    column-gap: 22px;\n  }\n\n  .menu-toggle {\n    display: inline-flex;\n  }\n}\n\n\u002F* Sur un téléphone, le texte d'accueil recouvre le point « Boutique » de la\n   boussole : il laisse passer le toucher (il ne contient aucun lien).\n   L'entête n'a pas la place de trois colonnes à 390 px (la signature du logo\n   passait sur deux lignes) : le bouton prend l'emplacement de « Toulouse ·\n   France », dans sa typographie. *\u002F\n@media (max-width: 760px) {\n  .hero__copy {\n    pointer-events: none;\n  }\n\n  .site-header {\n    grid-template-columns: 1fr auto;\n  }\n\n  .site-header .header-index {\n    display: none;\n  }\n\n  .menu-toggle {\n    font-size: 7px;\n  }\n}\n\n\u002F* La goutte (entre deux pages) n'a pas de direction : ni cap ni rose, le seul nom de la destination. *\u002F\n.voyage[data-cap=\"goutte\"] .section-label,\n.voyage[data-cap=\"goutte\"] .voyage__rose {\n  display: none;\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — la texture du fond en aquarelle (three.js) ═══\n   Les trois fonds texturés du design (encre du bandeau d'accueil, papier de\n   L'approche, encre du panneau Sur la route) sont repeints par un shader :\n   la même image, dont les pigments migrent lentement, s'accumulent en bord de\n   tache et fleurissent sous le pointeur comme de l'eau posée sur le papier.\n   La texture CSS d'origine reste dessous : sans WebGL, ou tant que le shader\n   n'a pas peint sa première image, rien ne change. *\u002F\n.aquarelle {\n  position: absolute;\n  z-index: -1;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 1.2s ease;\n}\n\n.aquarelle.is-prete {\n  opacity: 1;\n}\n\n.paper-section.has-aquarelle,\n.route-panel--dark.has-aquarelle {\n  isolation: isolate;\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — la galerie 3D de l'accueil ═══\n   Sous le bandeau : une scène WebGL plein écran (evolutions\u002Fgalerie3d.js),\n   le titre et les filtres posés dessus dans le vocabulaire du design\n   (surtitre orange, capitales espacées, filet qui se dessine au survol). *\u002F\n.galerie3d {\n  position: relative;\n  height: 100svh;\n  min-height: 640px;\n  overflow: hidden;\n  isolation: isolate;\n  border-bottom: 1px solid var(--line-light);\n  background: var(--ink);\n  color: var(--paper);\n}\n\n.galerie3d::before {\n  content: \"\";\n  position: absolute;\n  z-index: 2;\n  inset: 0;\n  pointer-events: none;\n  background:\n    radial-gradient(ellipse 80% 75% at 50% 50%, transparent 52%, rgba(7, 9, 11, .72) 100%),\n    linear-gradient(180deg, rgba(7, 9, 11, .92) 0%, rgba(7, 9, 11, 0) 24%, rgba(7, 9, 11, 0) 68%, rgba(7, 9, 11, .94) 100%);\n}\n\n.galerie3d__scene {\n  position: absolute;\n  z-index: 1;\n  inset: 0;\n  cursor: grab;\n  touch-action: pan-y;\n  user-select: none;\n  -webkit-user-select: none;\n  -webkit-tap-highlight-color: transparent;\n}\n\n.galerie3d.is-glisse .galerie3d__scene {\n  cursor: grabbing;\n}\n\n.galerie3d.is-clavier .galerie3d__scene {\n  outline: 1px solid rgba(34, 151, 168, .7);\n  outline-offset: -14px;\n}\n\n.galerie3d__canvas {\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  transition: opacity 1.6s ease;\n}\n\n.galerie3d--prete .galerie3d__canvas {\n  opacity: 1;\n}\n\n\u002F* En attendant three.js : le filet de l'écran de chargement. *\u002F\n.galerie3d--attente::after {\n  content: \"\";\n  position: absolute;\n  z-index: 3;\n  top: 50%;\n  left: 50%;\n  width: 140px;\n  height: 1px;\n  background: var(--orange);\n  transform: translateX(-50%) scaleX(0);\n  animation: galerie3d-attente 1.8s cubic-bezier(.76, 0, .24, 1) infinite;\n}\n\n@keyframes galerie3d-attente {\n  0% { transform: translateX(-50%) scaleX(0); transform-origin: left; }\n  50% { transform: translateX(-50%) scaleX(1); transform-origin: left; }\n  51% { transform-origin: right; }\n  100% { transform: translateX(-50%) scaleX(0); transform-origin: right; }\n}\n\n.galerie3d__entete {\n  position: absolute;\n  z-index: 4;\n  top: clamp(122px, 16vh, 180px);\n  left: var(--gutter);\n  pointer-events: none;\n}\n\n.galerie3d__entete .section-label {\n  margin: 0 0 26px;\n}\n\n.galerie3d__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(54px, 6.4vw, 124px);\n  font-weight: 300;\n  line-height: .8;\n  letter-spacing: -.04em;\n  text-transform: uppercase;\n  text-shadow: 0 2px 30px rgba(7, 9, 11, .6);\n}\n\n.galerie3d__titre span {\n  display: block;\n}\n\n.galerie3d__titre span:last-child {\n  margin-left: clamp(24px, 3vw, 58px);\n  color: var(--cyan);\n}\n\n.galerie3d__pied {\n  position: absolute;\n  z-index: 4;\n  right: var(--gutter);\n  bottom: clamp(26px, 5vh, 54px);\n  left: var(--gutter);\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  gap: 24px;\n  align-items: end;\n  padding-top: 18px;\n  border-top: 1px solid var(--line-light);\n  pointer-events: none;\n}\n\n.galerie3d__aide {\n  max-width: 290px;\n  margin: 0;\n  color: rgba(238, 234, 225, .78);\n  font-size: 12px;\n  line-height: 1.7;\n}\n\n.galerie3d__filtres {\n  display: flex;\n  gap: clamp(18px, 2.1vw, 38px);\n  pointer-events: auto;\n}\n\n.galerie3d__filtre {\n  position: relative;\n  padding: 8px 0;\n  border: 0;\n  background: none;\n  color: var(--mist);\n  font-size: 9px;\n  letter-spacing: .16em;\n  text-transform: uppercase;\n  cursor: pointer;\n  transition: color .3s ease;\n}\n\n.galerie3d__filtre[hidden] {\n  display: none;\n}\n\n.galerie3d__filtre::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 2px;\n  left: 0;\n  height: 1px;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: right;\n  transition: transform .45s cubic-bezier(.76, 0, .24, 1);\n}\n\n.galerie3d__filtre:hover,\n.galerie3d__filtre:focus-visible,\n.galerie3d__filtre[aria-pressed=\"true\"] {\n  color: var(--paper);\n}\n\n.galerie3d__filtre:hover::after,\n.galerie3d__filtre:focus-visible::after,\n.galerie3d__filtre[aria-pressed=\"true\"]::after {\n  transform: scaleX(1);\n  transform-origin: left;\n}\n\n.galerie3d__compte {\n  justify-self: end;\n  margin: 0;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n}\n\n\u002F* La légende qui suit le pointeur sur une œuvre. *\u002F\n.galerie3d__legende {\n  position: absolute;\n  z-index: 5;\n  top: 0;\n  left: 0;\n  display: grid;\n  gap: 8px;\n  margin: 0;\n  padding: 12px 16px 13px;\n  border-left: 1px solid var(--orange);\n  background: rgba(7, 9, 11, .82);\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity .25s ease;\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n}\n\n.galerie3d__legende.is-visible {\n  opacity: 1;\n}\n\n.galerie3d__legende-rubrique {\n  color: var(--orange);\n  font-size: 7px;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n}\n\n.galerie3d__legende-titre {\n  font-family: var(--display);\n  font-size: 28px;\n  font-weight: 400;\n  line-height: .9;\n  letter-spacing: -.01em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n\u002F* La liste des œuvres : bandeau sans script ni WebGL ; accès clavier et\n   lecteur d'écran sinon (hors de la vue, mais pas hors de l'arbre). *\u002F\n.galerie3d__liste {\n  position: absolute;\n  z-index: 3;\n  top: 50%;\n  right: 0;\n  left: 0;\n  display: flex;\n  gap: 18px;\n  margin: 0;\n  padding: 0 var(--gutter) 14px;\n  overflow-x: auto;\n  list-style: none;\n  transform: translateY(-46%);\n  scroll-snap-type: x mandatory;\n}\n\n.galerie3d__liste li {\n  flex: 0 0 min(46vw, 250px);\n  scroll-snap-align: start;\n}\n\n.galerie3d__liste li[hidden] {\n  display: none;\n}\n\n.galerie3d__liste button {\n  display: grid;\n  gap: 9px;\n  width: 100%;\n  padding: 0;\n  border: 0;\n  background: none;\n  color: var(--paper);\n  text-align: left;\n  cursor: pointer;\n}\n\n.galerie3d__liste img {\n  width: 100%;\n  height: auto;\n  aspect-ratio: .8;\n  object-fit: cover;\n  background: #111;\n  filter: grayscale(1) saturate(.3);\n  transition: filter .8s ease;\n}\n\n.galerie3d__liste button:hover img,\n.galerie3d__liste button:focus-visible img {\n  filter: grayscale(0) saturate(1);\n}\n\n.galerie3d__liste span {\n  font-size: 9px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n}\n\n.galerie3d__liste small {\n  color: var(--mist);\n  font-size: 7px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n}\n\n.galerie3d--attente .galerie3d__liste,\n.galerie3d--3d .galerie3d__liste {\n  top: auto;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip-path: inset(50%);\n  white-space: nowrap;\n  transform: none;\n}\n\n\u002F* Le curseur du design, au-dessus de la galerie : un anneau orange sur une\n   œuvre, resserré pendant le glisser. *\u002F\n.cursor::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border: 1px solid transparent;\n  border-radius: 50%;\n  transition: transform .45s cubic-bezier(.2, .75, .2, 1), border-color .3s ease;\n}\n\n.cursor.is-voir::before {\n  border-color: rgba(241, 103, 66, .9);\n  transform: scale(1.85);\n}\n\n.cursor.is-glisse::before {\n  border-color: rgba(34, 151, 168, .8);\n  transform: scale(.55);\n}\n\n@media (max-width: 1050px) {\n  .galerie3d__pied {\n    grid-template-columns: 1fr auto;\n  }\n\n  .galerie3d__aide {\n    grid-column: 1 \u002F -1;\n  }\n}\n\n@media (max-width: 760px) {\n  .galerie3d {\n    height: 88svh;\n    min-height: 600px;\n  }\n\n  .galerie3d__entete {\n    top: 104px;\n  }\n\n  .galerie3d::before {\n    background:\n      radial-gradient(ellipse 90% 70% at 50% 55%, transparent 45%, rgba(7, 9, 11, .7) 100%),\n      linear-gradient(180deg, rgba(7, 9, 11, .96) 0%, rgba(7, 9, 11, .78) 26%, rgba(7, 9, 11, 0) 44%, rgba(7, 9, 11, 0) 60%, rgba(7, 9, 11, .96) 100%);\n  }\n\n  .galerie3d__titre {\n    font-size: clamp(46px, 13vw, 70px);\n  }\n\n  .galerie3d__pied {\n    grid-template-columns: 1fr;\n    gap: 14px;\n  }\n\n  .galerie3d__filtres {\n    flex-wrap: wrap;\n  }\n\n  .galerie3d__compte {\n    justify-self: start;\n  }\n\n  .galerie3d__legende {\n    display: none;\n  }\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — Tattoo, Agenda, Qui suis-je, Contact ═══\n   Les quatre pages du nouveau menu. Aucune règle du design n'est retouchée :\n   ces composants reprennent ses mesures (gouttière, filets de 1 px, surtitres\n   orange à 8 px, titres Darker Grotesque 300 en capitales serrées, papier et\n   encre) et ses classes (.hero, .works, .paper-section, .route-panel,\n   .closing) quand elles existent déjà. *\u002F\n\n.nt-verrou {\n  overflow: hidden;\n}\n\n\u002F* ── L'entête de page : le fond d'encre de l'accueil (aquarelle comprise),\n   le cap de la boussole, un titre à l'échelle des sections du design. ── *\u002F\n.hero.hero--page {\n  display: grid;\n  align-items: end;\n  min-height: min(90svh, 980px);\n  padding: 150px var(--gutter) clamp(38px, 8vh, 86px);\n}\n\n.hero--page .page-tete {\n  position: relative;\n  z-index: 12;\n  max-width: 1180px;\n  margin-left: clamp(0px, 3.4vw, 64px);\n}\n\n.hero--page .hero__title {\n  font-size: clamp(78px, 12.6vw, 238px);\n  line-height: .76;\n  letter-spacing: -.05em;\n}\n\n.hero--page .hero__title span:last-child {\n  max-width: 760px;\n  margin: 22px 0 0 clamp(24px, 5vw, 96px);\n  font-size: clamp(24px, 2.5vw, 46px);\n  line-height: .95;\n  letter-spacing: -.01em;\n}\n\n.hero--page .hero__intro {\n  max-width: 540px;\n  margin: 30px 0 0 clamp(24px, 5vw, 96px);\n}\n\n.page-rose {\n  position: absolute;\n  z-index: 10;\n  top: clamp(132px, 18vh, 196px);\n  right: var(--gutter);\n  display: grid;\n  justify-items: center;\n  gap: 14px;\n  width: clamp(70px, 7vw, 112px);\n  color: var(--mist);\n  font-size: 7px;\n  letter-spacing: .28em;\n  text-transform: uppercase;\n}\n\n.page-rose svg {\n  width: 100%;\n  height: auto;\n  overflow: visible;\n}\n\n.page-rose circle {\n  fill: none;\n  stroke: rgba(238, 234, 225, .38);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n}\n\n.page-rose line {\n  stroke: rgba(238, 234, 225, .5);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n}\n\n.page-rose path:first-of-type { fill: var(--orange); }\n.page-rose path:last-of-type { fill: rgba(238, 234, 225, .72); }\n\n.sommaire {\n  position: absolute;\n  z-index: 12;\n  right: var(--gutter);\n  bottom: clamp(38px, 8vh, 86px);\n  display: grid;\n  gap: 6px;\n  justify-items: end;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.sommaire a {\n  position: relative;\n  display: flex;\n  gap: 16px;\n  align-items: baseline;\n  padding: 7px 0;\n  font-size: 9px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n}\n\n.sommaire a small {\n  color: var(--orange);\n  font-size: 8px;\n}\n\n.sommaire a::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 2px;\n  left: 0;\n  height: 1px;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: right;\n  transition: transform .45s cubic-bezier(.76, 0, .24, 1);\n}\n\n.sommaire a:hover::after,\n.sommaire a:focus-visible::after {\n  transform: scaleX(1);\n  transform-origin: left;\n}\n\n\u002F* ── Le grand chiffre des sections papier, par section ── *\u002F\n.paper-section[data-numero]::before {\n  content: attr(data-numero);\n}\n\n\u002F* ── Tattoo : chapitres ── *\u002F\n.chapitre .works__head {\n  margin-bottom: clamp(38px, 5vw, 70px);\n}\n\n.chapitre .works__head .section-label {\n  margin-bottom: 30px;\n}\n\n.chapitre__texte {\n  max-width: 520px;\n  margin: 0 0 clamp(58px, 7vw, 110px) clamp(40px, 11vw, 200px);\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.chapitre--papier {\n  min-height: 0;\n}\n\n.chapitre--papier .works__title span {\n  -webkit-text-stroke-color: rgba(7, 9, 11, .5);\n}\n\n.chapitre--papier .works__count {\n  color: rgba(7, 9, 11, .62);\n}\n\n.chapitre--suite {\n  padding-top: clamp(80px, 9vw, 150px);\n}\n\n.chapitre__vide {\n  max-width: 560px;\n  margin: 0 auto;\n  padding: 34px 0 0;\n  border-top: 1px solid currentColor;\n  font-size: 13px;\n  line-height: 1.75;\n  text-align: center;\n}\n\n.chapitre__vide p {\n  margin: 0 0 18px;\n}\n\n.chapitre--papier > :not(.aquarelle) {\n  position: relative;\n  z-index: 2;\n}\n\n.chapitre-intro,\n.chapitre-intro .route-panel {\n  min-height: 74svh;\n}\n\n.chapitre__vide[hidden] {\n  display: none;\n}\n\n.chapitre__vide a {\n  color: var(--orange);\n  font-size: 9px;\n  letter-spacing: .2em;\n  text-transform: uppercase;\n}\n\nbutton.work-card {\n  display: block;\n  width: 100%;\n  padding: 0;\n  border: 0;\n  color: var(--paper);\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n}\n\n.work-card:focus-visible {\n  outline: 1px solid var(--cyan);\n  outline-offset: 5px;\n}\n\n.work-card:focus-visible img {\n  filter: grayscale(0) saturate(1);\n  transform: scale(1.05);\n}\n\n.work-card[data-galerie=\"hors-peau\"] img {\n  padding: clamp(14px, 3vw, 46px);\n  object-fit: contain;\n}\n\n\u002F* Au-delà de quatre œuvres, le rythme des quatre cartes du design se répète. *\u002F\n.works-grid--flux .work-card:nth-child(4n+1) { grid-column: 1 \u002F span 5; aspect-ratio: .82; margin-top: 0; }\n.works-grid--flux .work-card:nth-child(4n+2) { grid-column: 7 \u002F span 6; aspect-ratio: 1.28; margin-top: 17%; }\n.works-grid--flux .work-card:nth-child(4n+3) { grid-column: 2 \u002F span 4; aspect-ratio: .74; margin-top: 9%; }\n.works-grid--flux .work-card:nth-child(4n+4) { grid-column: 8 \u002F span 4; aspect-ratio: .76; margin-top: -5%; }\n\n.chapitre__fin {\n  padding: 0 var(--gutter) clamp(90px, 10vw, 170px);\n  background: var(--ink);\n}\n\n.chapitre__fin .works__link {\n  margin-top: 0;\n}\n\n\u002F* ── Agenda : les escales en cartes (20\u002F09) ── *\u002F\n.escales {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(min(100%, 560px), 1fr));\n  gap: clamp(28px, 3vw, 48px);\n  max-width: 1600px;\n  margin: 0 auto;\n}\n\n.escales:empty {\n  display: none;\n}\n\n.escale {\n  display: grid;\n  grid-template-columns: minmax(150px, 36%) minmax(0, 1fr);\n  gap: clamp(22px, 2.6vw, 40px);\n  align-items: start;\n  padding: clamp(22px, 2.4vw, 36px);\n  border: 1px solid var(--line-light);\n  background: linear-gradient(160deg, rgba(238, 234, 225, .05), rgba(238, 234, 225, .015));\n}\n\n.escale--sans-affiche {\n  grid-template-columns: minmax(0, 1fr);\n}\n\n.escale__affiche {\n  margin: 4px 0 0;\n}\n\n.escale__affiche img {\n  display: block;\n  width: 100%;\n  height: auto;\n  filter: grayscale(1) contrast(1.06);\n}\n\n.escale__corps {\n  min-width: 0;\n}\n\n.escale__sur {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px 18px;\n  margin: 0 0 18px;\n  font-size: 9px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n}\n\n.escale__numero {\n  color: var(--cyan);\n}\n\n.escale__type {\n  color: var(--orange);\n}\n\n.escale__statut {\n  color: var(--mist);\n}\n\n.escale__date {\n  margin: 0 0 14px;\n  color: var(--paper);\n  font-family: var(--display);\n  font-size: clamp(30px, 2.6vw, 46px);\n  font-weight: 700;\n  line-height: .9;\n  letter-spacing: -.02em;\n  text-transform: uppercase;\n}\n\n.escale__titre {\n  margin: 0;\n  color: var(--cyan);\n  font-family: var(--display);\n  font-size: clamp(26px, 2.1vw, 38px);\n  font-weight: 400;\n  line-height: .9;\n  letter-spacing: -.02em;\n  text-transform: uppercase;\n}\n\n.escale__lieu {\n  margin: 14px 0 0;\n  color: rgba(238, 234, 225, .84);\n  font-size: 13px;\n  line-height: 1.7;\n}\n\n.escale__texte {\n  margin-top: 18px;\n  padding-top: 18px;\n  border-top: 1px solid var(--line-light);\n  color: rgba(238, 234, 225, .78);\n  font-size: 13px;\n  line-height: 1.8;\n}\n\n.escale__texte > :first-child {\n  margin-top: 0;\n}\n\n.escale__texte > :last-child {\n  margin-bottom: 0;\n}\n\n.escale__texte :is(h2, h3) {\n  margin: 1.4em 0 .5em;\n  font-family: var(--display);\n  font-size: 24px;\n  font-weight: 400;\n  line-height: .9;\n}\n\n.escale__texte ul {\n  padding-left: 1.2em;\n  list-style: disc;\n}\n\n.escale__texte a {\n  color: var(--orange);\n}\n\n.agenda__vide {\n  display: grid;\n  justify-items: center;\n  max-width: 620px;\n  margin: 0 auto;\n  padding: 46px 0 0;\n  border-top: 1px solid var(--line-light);\n  text-align: center;\n}\n\n.agenda__vide[hidden] {\n  display: none;\n}\n\n.agenda__vide-titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(38px, 4vw, 70px);\n  font-weight: 300;\n  line-height: .82;\n  letter-spacing: -.035em;\n  text-transform: uppercase;\n}\n\n.agenda__vide-texte {\n  max-width: 440px;\n  margin: 26px 0 30px;\n  color: rgba(238, 234, 225, .84);\n  font-size: 13px;\n  line-height: 1.75;\n}\n\n.agenda__vide a,\n.coordonnee a {\n  color: var(--orange);\n  font-size: 9px;\n  letter-spacing: .2em;\n  text-transform: uppercase;\n}\n\n\u002F* ── Points numérotés (Agenda : réserver en déplacement ; Qui suis-je :\n   démarche) ── *\u002F\n.points {\n  position: relative;\n  z-index: 2;\n  display: grid;\n  grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);\n  gap: clamp(50px, 8vw, 150px);\n  max-width: 1500px;\n  margin: 0 auto;\n}\n\n.points__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(54px, 6.4vw, 118px);\n  font-weight: 300;\n  line-height: .8;\n  letter-spacing: -.04em;\n  text-transform: uppercase;\n}\n\n.points__titre span {\n  display: block;\n  color: var(--cyan);\n}\n\n.points__liste {\n  display: grid;\n  gap: 0;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.point {\n  display: grid;\n  grid-template-columns: 46px 1fr;\n  gap: 8px 22px;\n  padding: 30px 0 34px;\n  border-top: 1px solid var(--line-dark);\n}\n\n.route-panel--dark .point,\n.recit .point {\n  border-top-color: var(--line-light);\n}\n\n.point__numero {\n  grid-row: 1 \u002F span 2;\n  color: var(--cyan);\n  font-size: 10px;\n  letter-spacing: .18em;\n}\n\n.point__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(28px, 2.4vw, 42px);\n  font-weight: 400;\n  line-height: .9;\n  letter-spacing: -.01em;\n  text-transform: uppercase;\n}\n\n.point__texte {\n  max-width: 540px;\n  margin: 10px 0 0;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n\u002F* ── Qui suis-je : récit, démarche, hygiène, méthode ── *\u002F\n.recit {\n  position: relative;\n  padding: clamp(110px, 12vw, 210px) var(--gutter);\n  background: var(--ink);\n}\n\n.recit__grille {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: clamp(50px, 8vw, 150px);\n  max-width: 1500px;\n  margin: 0 auto;\n}\n\n.recit__tete {\n  align-self: start;\n  position: sticky;\n  top: 140px;\n}\n\n.recit__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(54px, 6.4vw, 118px);\n  font-weight: 300;\n  line-height: .8;\n  letter-spacing: -.04em;\n  text-transform: uppercase;\n}\n\n.recit__titre span {\n  display: block;\n  margin-left: clamp(24px, 3vw, 58px);\n  color: transparent;\n  -webkit-text-stroke: 1px rgba(238, 234, 225, .55);\n}\n\n.recit__texte p {\n  max-width: 600px;\n  margin: 0 0 1.4em;\n  color: rgba(238, 234, 225, .86);\n  font-size: 14px;\n  line-height: 1.85;\n}\n\n.recit__texte .recit__chapeau {\n  color: var(--paper);\n  font-family: var(--display);\n  font-size: clamp(28px, 2.4vw, 42px);\n  font-weight: 400;\n  line-height: 1;\n  letter-spacing: -.01em;\n}\n\n.route-panel.demarche {\n  justify-content: flex-start;\n  gap: clamp(60px, 8vw, 130px);\n  min-height: 0;\n  padding-bottom: clamp(90px, 9vw, 150px);\n}\n\n.demarche .points__liste {\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: clamp(22px, 3vw, 54px);\n  position: relative;\n  z-index: 2;\n}\n\n.demarche .point {\n  grid-template-columns: 1fr;\n  align-content: start;\n  border-top-color: currentColor;\n}\n\n.demarche .point__numero {\n  grid-row: auto;\n}\n\n.demarche .point__titre {\n  margin-top: 18px;\n}\n\n.hygiene__grille {\n  position: relative;\n  z-index: 2;\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: clamp(50px, 8vw, 150px);\n  max-width: 1500px;\n  margin: 0 auto;\n}\n\n.hygiene__texte p {\n  max-width: 560px;\n  margin: 0 0 1.3em;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.hygiene__texte .points__titre {\n  margin-bottom: 48px;\n}\n\n.sous-titre {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin: 0 0 18px;\n  color: var(--orange);\n  font-size: 8px;\n  letter-spacing: .3em;\n  text-transform: uppercase;\n}\n\n.sous-titre::before {\n  content: \"\";\n  width: 28px;\n  height: 1px;\n  background: currentColor;\n}\n\n.eviter {\n  margin-top: 56px;\n}\n\n.eviter details {\n  border-top: 1px solid var(--line-dark);\n}\n\n.eviter details:last-child {\n  border-bottom: 1px solid var(--line-dark);\n}\n\n.eviter summary {\n  display: flex;\n  justify-content: space-between;\n  gap: 20px;\n  padding: 20px 0;\n  font-family: var(--display);\n  font-size: 26px;\n  font-weight: 400;\n  line-height: .95;\n  text-transform: uppercase;\n  list-style: none;\n  cursor: pointer;\n}\n\n.eviter summary::-webkit-details-marker {\n  display: none;\n}\n\n.eviter summary::after {\n  content: \"+\";\n  color: var(--orange);\n  font-family: var(--text);\n  font-size: 16px;\n  transition: transform .4s cubic-bezier(.2, .75, .2, 1);\n}\n\n.eviter details[open] summary::after {\n  transform: rotate(45deg);\n}\n\n.eviter details p {\n  max-width: 560px;\n  margin: 0;\n  padding: 0 0 22px;\n  font-size: 13px;\n  line-height: 1.75;\n}\n\n.methode {\n  position: relative;\n  padding: clamp(110px, 12vw, 210px) var(--gutter);\n  background: var(--ink);\n}\n\n.methode__tete {\n  display: grid;\n  grid-template-columns: 1fr auto;\n  gap: 30px;\n  align-items: end;\n  max-width: 1600px;\n  margin: 0 auto clamp(58px, 7vw, 110px);\n}\n\n.etapes {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 0 clamp(22px, 3vw, 54px);\n  max-width: 1600px;\n  margin: 0 auto;\n  padding: 0;\n  list-style: none;\n}\n\n.etapes .point {\n  grid-template-columns: 1fr;\n  align-content: start;\n  border-top-color: var(--line-light);\n}\n\n.etapes .point__numero {\n  grid-row: auto;\n  color: var(--orange);\n}\n\n.etapes .point__titre {\n  margin-top: 18px;\n}\n\n.etapes .point__texte {\n  color: rgba(238, 234, 225, .84);\n}\n\n.conditions {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: 0;\n  max-width: 1600px;\n  margin: clamp(70px, 8vw, 130px) auto 0;\n  padding: 0;\n  border: 1px solid var(--line-light);\n  list-style: none;\n}\n\n.conditions li {\n  display: grid;\n  gap: 12px;\n  align-content: start;\n  padding: 26px 24px 28px;\n}\n\n.conditions li + li {\n  border-left: 1px solid var(--line-light);\n}\n\n.conditions strong {\n  font-family: var(--display);\n  font-size: clamp(30px, 2.6vw, 46px);\n  font-weight: 300;\n  line-height: .85;\n  text-transform: uppercase;\n}\n\n.conditions span {\n  color: rgba(238, 234, 225, .8);\n  font-size: 12px;\n  line-height: 1.7;\n}\n\n\u002F* ── Contact : formulaire et coordonnées ── *\u002F\n.formulaire__grille {\n  position: relative;\n  z-index: 2;\n  display: grid;\n  grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr);\n  gap: clamp(50px, 8vw, 150px);\n  max-width: 1500px;\n  margin: 0 auto;\n}\n\n.formulaire__texte {\n  max-width: 440px;\n  margin: 40px 0 0;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.formulaire__conditions {\n  display: grid;\n  gap: 0;\n  max-width: 440px;\n  margin: 40px 0 0;\n  padding: 0;\n  list-style: none;\n}\n\n.formulaire__conditions li {\n  padding: 14px 0;\n  border-top: 1px solid var(--line-dark);\n  font-size: 9px;\n  letter-spacing: .2em;\n  text-transform: uppercase;\n}\n\n.formulaire__conditions li:last-child {\n  border-bottom: 1px solid var(--line-dark);\n}\n\n.nt-formulaire {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 34px 28px;\n}\n\n.champ {\n  display: grid;\n  gap: 12px;\n  align-content: start;\n  margin: 0;\n}\n\n.champ--large {\n  grid-column: 1 \u002F -1;\n}\n\n.champ label {\n  color: rgba(7, 9, 11, .72);\n  font-size: 8px;\n  letter-spacing: .24em;\n  text-transform: uppercase;\n}\n\n.champ abbr {\n  color: var(--orange);\n  text-decoration: none;\n}\n\n.champ :is(input, textarea) {\n  width: 100%;\n  padding: 10px 0 12px;\n  border: 0;\n  border-bottom: 1px solid rgba(7, 9, 11, .34);\n  border-style: none none solid;\n  border-radius: 0;\n  outline: none;\n  background: transparent;\n  color: var(--ink);\n  font-family: var(--text);\n  font-size: 15px;\n  line-height: 1.5;\n  transition: border-color .3s ease;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n.champ textarea {\n  min-height: 150px;\n  resize: vertical;\n}\n\n.champ :is(input, textarea)::placeholder {\n  color: rgba(7, 9, 11, .38);\n}\n\n.champ :is(input, textarea):focus {\n  border-bottom-color: var(--cyan);\n  box-shadow: 0 1px 0 var(--cyan);\n}\n\n.champ-piege {\n  position: absolute;\n  left: -9999px;\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n}\n\n.formulaire__mention {\n  grid-column: 1 \u002F -1;\n  max-width: 520px;\n  margin: 0;\n  color: rgba(7, 9, 11, .66);\n  font-size: 11px;\n  line-height: 1.7;\n}\n\n.formulaire__mention a {\n  color: var(--ink);\n  text-decoration: underline;\n  text-underline-offset: 3px;\n}\n\n.formulaire__envoi {\n  grid-column: 1 \u002F -1;\n  display: flex;\n  gap: 30px;\n  align-items: center;\n}\n\n.formulaire__bouton {\n  display: grid;\n  flex: 0 0 auto;\n  place-items: center;\n  width: 150px;\n  aspect-ratio: 1;\n  padding: 0;\n  border: 1px solid var(--orange);\n  border-style: solid;\n  border-radius: 50%;\n  background: var(--ink);\n  color: var(--paper);\n  font-size: 8px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n  cursor: pointer;\n  transition: background .4s ease, color .4s ease;\n}\n\n.formulaire__bouton:hover,\n.formulaire__bouton:focus-visible {\n  background: var(--orange);\n  color: var(--ink);\n}\n\n.formulaire__bouton:disabled {\n  opacity: .55;\n  cursor: progress;\n}\n\n.formulaire__etat {\n  margin: 0;\n  color: rgba(7, 9, 11, .8);\n  font-size: 12px;\n  line-height: 1.7;\n}\n\n.nt-formulaire[data-etat=\"erreur\"] .formulaire__etat {\n  color: #b23c1c;\n}\n\n.formulaire__merci {\n  padding-top: 26px;\n  border-top: 1px solid currentColor;\n  outline: none;\n}\n\n.formulaire__merci[hidden] {\n  display: none;\n}\n\n.formulaire__merci-titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(58px, 7vw, 120px);\n  font-weight: 300;\n  line-height: .8;\n  letter-spacing: -.04em;\n  text-transform: uppercase;\n}\n\n.formulaire__merci-texte {\n  max-width: 440px;\n  margin: 24px 0 0;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.coordonnees {\n  padding: clamp(90px, 9vw, 150px) var(--gutter);\n  background: var(--ink);\n}\n\n.coordonnees__grille {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: clamp(22px, 3vw, 54px);\n  max-width: 1600px;\n  margin: 0 auto;\n}\n\n.coordonnee {\n  display: grid;\n  gap: 18px;\n  align-content: start;\n  padding-top: 24px;\n  border-top: 1px solid var(--line-light);\n}\n\n.coordonnee .section-label {\n  margin: 0;\n}\n\n.coordonnee__valeur {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(28px, 2.6vw, 46px);\n  font-weight: 300;\n  line-height: .9;\n  letter-spacing: -.02em;\n  overflow-wrap: anywhere;\n}\n\n.coordonnee__valeur a {\n  color: var(--paper);\n  font-family: inherit;\n  font-size: inherit;\n  letter-spacing: inherit;\n  text-transform: none;\n}\n\n.closing--page .closing__title {\n  font-size: clamp(64px, 10vw, 184px);\n}\n\n@media (max-width: 1050px) {\n  .sommaire {\n    position: relative;\n    right: auto;\n    bottom: auto;\n    justify-items: start;\n    margin: 40px 0 0 clamp(24px, 5vw, 96px);\n  }\n\n\n  .etapes,\n  .demarche .points__liste {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .conditions {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .conditions li:nth-child(3) {\n    border-left: 0;\n  }\n\n  .conditions li:nth-child(n+3) {\n    border-top: 1px solid var(--line-light);\n  }\n}\n\n@media (max-width: 760px) {\n  .hero.hero--page {\n    min-height: 640px;\n    padding-top: 130px;\n  }\n\n  .hero--page .page-tete,\n  .hero--page .hero__intro,\n  .sommaire {\n    margin-left: 0;\n  }\n\n  .hero--page .hero__title {\n    font-size: clamp(62px, 21vw, 110px);\n  }\n\n  .hero--page .hero__title span:last-child {\n    margin-left: 0;\n    font-size: clamp(22px, 7vw, 32px);\n  }\n\n  .page-rose {\n    top: 104px;\n    width: 58px;\n  }\n\n  .chapitre__texte {\n    margin-left: 0;\n  }\n\n  .works-grid--flux .work-card:nth-child(n) {\n    grid-column: 1 \u002F -1;\n    aspect-ratio: .82;\n    margin-top: 0;\n  }\n\n  .escale {\n    grid-template-columns: minmax(0, 1fr);\n  }\n\n  .escale__affiche {\n    max-width: 260px;\n  }\n\n  .points,\n  .recit__grille,\n  .hygiene__grille,\n  .formulaire__grille {\n    grid-template-columns: 1fr;\n  }\n\n  .recit__tete {\n    position: static;\n  }\n\n  .etapes,\n  .demarche .points__liste,\n  .coordonnees__grille {\n    grid-template-columns: 1fr;\n  }\n\n  .methode__tete {\n    grid-template-columns: 1fr;\n  }\n\n  .conditions {\n    grid-template-columns: 1fr;\n  }\n\n  .conditions li + li {\n    border-top: 1px solid var(--line-light);\n    border-left: 0;\n  }\n\n  .nt-formulaire {\n    grid-template-columns: 1fr;\n  }\n\n  .formulaire__envoi {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n}\n\n\u002F* Le grand chiffre des sections papier passerait sous les champs du formulaire. *\u002F\n.paper-section.formulaire::before {\n  display: none;\n}\n\n\u002F* ═══ 19\u002F09 — La prochaine escale sur l'accueil ═══\n   Une bande sobre entre la galerie et la conclusion : la première date publiée\n   dans l'agenda (relue en direct par contenus.js), et le chemin vers l'agenda.\n   Sans date publiée, la section est masquée — rien à annoncer, rien à montrer. *\u002F\n.escale-une {\n  position: relative;\n  padding: clamp(70px, 11vh, 150px) var(--gutter);\n  background: var(--ink);\n  border-top: 1px solid var(--line-light);\n}\n\n.escale-une__cadre {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1.55fr) auto;\n  align-items: end;\n  column-gap: clamp(24px, 4vw, 72px);\n  row-gap: 26px;\n  max-width: 1560px;\n  margin: 0 auto;\n}\n\n.escale-une .section-label {\n  grid-column: 1 \u002F -1;\n  margin: 0 0 clamp(26px, 4vh, 54px);\n  padding-bottom: 18px;\n  border-bottom: 1px solid var(--line-light);\n}\n\n.escale-une__corps,\n.escale-une__event {\n  display: contents;\n}\n\n\u002F* Microdonnées schema.org (lieu, artiste) : lues par les moteurs, hors flux. *\u002F\n.nt-micro {\n  display: none;\n}\n\n.escale-une__date {\n  margin: 0;\n  color: var(--cyan);\n  font-family: var(--display);\n  font-size: clamp(30px, 3.4vw, 56px);\n  font-weight: 800;\n  line-height: .96;\n  letter-spacing: -.012em;\n  text-transform: uppercase;\n}\n\n.escale-une__titre {\n  margin: 0;\n  color: var(--paper);\n  font-family: var(--display);\n  font-size: clamp(30px, 3.4vw, 56px);\n  font-weight: 800;\n  line-height: .96;\n  letter-spacing: -.012em;\n  text-transform: uppercase;\n}\n\n.escale-une__lieu {\n  grid-column: 2;\n  margin: 12px 0 0;\n  color: var(--mist);\n  font-size: 11px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n}\n\n.escale-une__lien {\n  position: relative;\n  grid-row: 2;\n  grid-column: 3;\n  align-self: end;\n  padding-bottom: 10px;\n  color: var(--paper);\n  font-size: 11px;\n  letter-spacing: .24em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.escale-une__lien::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  height: 1px;\n  background: var(--orange);\n  transform-origin: right center;\n  transform: scaleX(.34);\n  transition: transform .6s cubic-bezier(.2, .75, .2, 1);\n}\n\n.escale-une__lien:hover::after,\n.escale-une__lien:focus-visible::after {\n  transform: scaleX(1);\n}\n\n@media (max-width: 900px) {\n  .escale-une__cadre {\n    grid-template-columns: 1fr;\n    align-items: start;\n  }\n\n  .escale-une__lieu,\n  .escale-une__lien {\n    grid-column: 1;\n    grid-row: auto;\n  }\n\n  .escale-une__date {\n    font-size: clamp(26px, 7.6vw, 40px);\n  }\n\n  .escale-une__titre {\n    margin-top: 10px;\n    font-size: clamp(26px, 7.6vw, 40px);\n  }\n\n  .escale-une__lien {\n    justify-self: start;\n    margin-top: 22px;\n  }\n}\n\n\u002F* ═══ 19\u002F09 — Les pages légales (bloc texte-riche du gabarit), dans la langue du site ═══ *\u002F\n[data-type=\"texte-riche\"] h2[data-el=\"titre\"],\n.bloc-riche h1 {\n  font-family: var(--display);\n  font-size: clamp(44px, 6vw, 96px);\n  font-weight: 800;\n  line-height: .9;\n  letter-spacing: -.02em;\n  text-transform: uppercase;\n}\n\n.bloc-riche h1 {\n  margin: 0 0 clamp(28px, 4vh, 48px);\n}\n\n\u002F* Le texte porte son propre \u003Ch1> : le titre du gabarit (un \u003Ch2>) se retire. *\u002F\n[data-type=\"texte-riche\"]:has(.bloc-riche > h1) h2[data-el=\"titre\"] {\n  display: none;\n}\n\n.bloc-riche h2 {\n  margin: clamp(44px, 6vh, 72px) 0 16px;\n  font-family: var(--display);\n  font-size: clamp(26px, 2.6vw, 40px);\n  font-weight: 800;\n  line-height: .95;\n  letter-spacing: -.01em;\n  text-transform: uppercase;\n  color: var(--cyan);\n}\n\n.bloc-riche p,\n.bloc-riche li {\n  color: rgba(238, 234, 225, .84);\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.bloc-riche p {\n  margin: 0 0 14px;\n}\n\n.bloc-riche ul {\n  margin: 0 0 18px;\n  padding-left: 20px;\n}\n\n.bloc-riche li {\n  margin: 6px 0;\n}\n\n.bloc-riche li::marker {\n  color: var(--orange);\n}\n\n.bloc-riche strong {\n  color: var(--paper);\n  font-weight: 600;\n}\n\n.bloc-riche a {\n  color: var(--paper);\n  text-decoration: underline;\n  text-decoration-thickness: 1px;\n  text-underline-offset: 3px;\n  text-decoration-color: rgba(238, 234, 225, .4);\n  transition: text-decoration-color .3s ease, color .3s ease;\n}\n\n.bloc-riche a:hover,\n.bloc-riche a:focus-visible {\n  color: var(--orange);\n  text-decoration-color: currentColor;\n}\n\n\n\u002F* ═══ 20\u002F09 — Les titres sur grand écran (retour Piks-l à 1920 px) ═══\n   Les largeurs venaient du design en pixels fixes alors que les corps\n   grandissent en vw : à 1920 px, « QUI SUIS-JE » (238 px) débordait de ses\n   1180 px et rejetait « JE » à la ligne ; « L'image quitte le corps » tombait\n   en quatre lignes d'un mot. Les largeurs suivent maintenant le corps (em). *\u002F\n.hero--page .page-tete {\n  max-width: min(1500px, 84vw);\n}\n\n@media (min-width: 1051px) {\n  .hero--page .hero__title > span:first-child {\n    white-space: nowrap;\n  }\n}\n\nbody:has(.hero--page) .route-panel__title {\n  max-width: 7.3em;\n}\n\nbody:has(.hero--page) .manifesto__title {\n  max-width: 8.4em;\n}\n\nbody:has(.hero--page) .hero__title span:last-child {\n  max-width: 21em;\n}\n\n\u002F* Les titres posés dans une colonne (points, récit, hygiène, formulaire,\n   manifeste) suivent la colonne : le corps est borné par la largeur du\n   conteneur (cqw), pour que le mot le plus long — « DÉPLACEMENT. » — tienne\n   toujours sur sa ligne. Sinon, à 1920 px, les lettres se coupaient ou le mot\n   sortait de la colonne. *\u002F\nbody:has(.hero--page) :is(.points__tete, .hygiene__texte, .formulaire__tete, .recit__tete, .manifesto__copy) {\n  container-type: inline-size;\n}\n\nbody:has(.hero--page) :is(.points__titre, .recit__titre) {\n  font-size: min(clamp(54px, 6.4vw, 118px), 15.5cqw);\n}\n\nbody:has(.hero--page) .manifesto__title {\n  font-size: min(clamp(58px, 7.5vw, 138px), 14cqw);\n}\n\n\u002F* ═══ 20\u002F09 — Les listes de points en cartes (retour Piks-l : « rends un peu\n   plus agréable ce genre de texte ») ═══\n   Étapes de la méthode, points de la démarche, du déplacement, de l'hygiène :\n   chaque point devient une carte — un fond à peine teinté, un liseré, le\n   numéro en grand en filigrane dans l'angle (compteur CSS), le petit numéro\n   avec son trait, le titre, le texte. Sur l'encre comme sur le papier. *\u002F\n.points__liste,\n.etapes {\n  gap: clamp(16px, 1.6vw, 24px);\n  counter-reset: nt-point;\n}\n\n.point {\n  position: relative;\n  overflow: hidden;\n  grid-template-columns: minmax(0, 1fr);\n  gap: 0;\n  align-content: start;\n  padding: clamp(24px, 2.2vw, 34px) clamp(22px, 2vw, 32px) clamp(28px, 2.4vw, 40px);\n  border: 1px solid var(--line-dark);\n  background: linear-gradient(160deg, rgba(7, 9, 11, .05), rgba(7, 9, 11, .015));\n  counter-increment: nt-point;\n  transition: border-color .5s ease;\n}\n\n.route-panel--dark .point,\n.recit .point,\n.etapes .point {\n  border-color: var(--line-light);\n  background: linear-gradient(160deg, rgba(238, 234, 225, .05), rgba(238, 234, 225, .015));\n}\n\n.point::before {\n  content: counter(nt-point, decimal-leading-zero);\n  position: absolute;\n  top: 8px;\n  right: 16px;\n  color: rgba(7, 9, 11, .06);\n  font-family: var(--display);\n  font-size: clamp(88px, 7.5vw, 140px);\n  font-weight: 300;\n  line-height: .72;\n  letter-spacing: -.04em;\n  pointer-events: none;\n  transition: color .5s ease;\n}\n\n.route-panel--dark .point::before,\n.recit .point::before,\n.etapes .point::before {\n  color: rgba(238, 234, 225, .055);\n}\n\n.point__numero {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  grid-row: auto;\n  color: var(--orange);\n  font-size: 9px;\n  letter-spacing: .24em;\n}\n\n.point__numero::before {\n  content: \"\";\n  width: 22px;\n  height: 1px;\n  background: currentColor;\n}\n\n.point__titre {\n  position: relative;\n  margin-top: 24px;\n  max-width: 12em;\n}\n\n.point__texte {\n  position: relative;\n  max-width: 46ch;\n  margin-top: 12px;\n  color: rgba(7, 9, 11, .78);\n  line-height: 1.75;\n}\n\n.route-panel--dark .point__texte,\n.recit .point__texte,\n.etapes .point__texte {\n  color: rgba(238, 234, 225, .8);\n}\n\n@media (hover: hover) {\n  .point:hover {\n    border-color: rgba(7, 9, 11, .36);\n  }\n\n  .route-panel--dark .point:hover,\n  .recit .point:hover,\n  .etapes .point:hover {\n    border-color: rgba(238, 234, 225, .38);\n  }\n\n  .point:hover::before {\n    color: rgba(241, 103, 66, .16);\n  }\n}\n\n\u002F* Le fond des cartes : la texture du site, floutée dessous (Piks-l, 20\u002F09 :\n   « ajoute un fond texturé avec du blur dessus et c'est parfait »). L'encre\n   aquarellée sur les cartes sombres, le papier sur les cartes claires ; la\n   texture déborde de 16 px pour que le flou n'ait pas de bord pâle. *\u002F\n.point {\n  isolation: isolate;\n}\n\n.point::after {\n  content: \"\";\n  position: absolute;\n  z-index: -1;\n  inset: -16px;\n  background: url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-paper-light.webp\") center \u002F cover no-repeat;\n  filter: blur(7px) saturate(.9);\n  opacity: .55;\n  pointer-events: none;\n  transition: opacity .5s ease;\n}\n\n.route-panel--dark .point::after,\n.recit .point::after,\n.etapes .point::after {\n  background-image: url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-ink-dark.webp\");\n  opacity: .5;\n}\n\n\u002F* Un voile par-dessus la texture, pour que le texte reste net à lire. *\u002F\n.point {\n  background:\n    linear-gradient(160deg, rgba(7, 9, 11, .04), rgba(7, 9, 11, .1)),\n    var(--paper);\n}\n\n.route-panel--dark .point,\n.recit .point,\n.etapes .point {\n  background:\n    linear-gradient(160deg, rgba(7, 9, 11, .35), rgba(7, 9, 11, .62)),\n    var(--ink-soft);\n}\n\n.etapes .point:nth-child(3n+2)::after,\n.demarche .point:nth-child(2)::after {\n  background-position: 30% 60%;\n}\n\n.etapes .point:nth-child(3n)::after,\n.demarche .point:nth-child(3)::after {\n  background-position: 70% 30%;\n}\n\n@media (hover: hover) {\n  .point:hover::after {\n    opacity: .75;\n  }\n}\n\n\u002F* ═══ 21\u002F09 — retours Piks-l sur les pages intérieures ═══════════════════════ *\u002F\n\n\u002F* « Tous les contenus doivent faire la taille du conteneur général » : les\n   grilles des sections vont d'une marge à l'autre (var(--gutter)), comme\n   l'entête — plus de plafond à 1500\u002F1600 px centré. Les mesures de texte\n   (paragraphes, titres en em\u002Fcqw) restent, elles. *\u002F\n.manifesto,\n.works-grid,\n.escales,\n.points,\n.recit__grille,\n.hygiene__grille,\n.methode__tete,\n.etapes,\n.conditions,\n.formulaire__grille,\n.coordonnees__grille,\n.escale-une__cadre,\n.hero--page .page-tete {\n  max-width: none;\n}\n\n@media (min-width: 1051px) {\n  .escales {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n}\n\n\u002F* « Sur Qui suis-je, rends cette partie sticky » : le texte de l'hygiène reste\n   à hauteur d'écran pendant que les soins et la FAQ défilent. La section passe\n   d'overflow: hidden à clip : hidden en ferait le conteneur de défilement du\n   sticky, qui ne collerait plus. *\u002F\n.paper-section.hygiene {\n  overflow: clip;\n}\n\n.hygiene__grille {\n  align-items: start;\n}\n\n.hygiene__texte {\n  position: sticky;\n  top: 140px;\n  align-self: start;\n}\n\n@media (max-width: 760px) {\n  .hygiene__texte {\n    position: static;\n  }\n}\n\n\u002F* « Enlève les bordures ici » : les conditions (18 ans, 50 €, 3 à 5 jours, sur\n   étude) sans cadre ni cloisons, alignées sur les cartes de la méthode ; un\n   tiret orange au-dessus de chacune, comme le numéro des cartes. *\u002F\n.conditions,\n.conditions li,\n.conditions li + li,\n.conditions li:nth-child(3),\n.conditions li:nth-child(n+3) {\n  border: 0;\n}\n\n.conditions {\n  gap: clamp(28px, 3vw, 60px);\n}\n\n.conditions li {\n  gap: 14px;\n  padding: 0;\n}\n\n.conditions li::before {\n  content: \"\";\n  width: 22px;\n  height: 1px;\n  margin-bottom: 6px;\n  background: var(--orange);\n}\n\n@media (max-width: 1050px) {\n  .conditions li:nth-child(n+3) {\n    border-top: 0;\n  }\n}\n\n@media (max-width: 760px) {\n  .conditions li + li {\n    border-top: 0;\n  }\n}\n\n\u002F* « Rends ce texte lisible » (L'approche) : le design descendait à 7–10 px.\n   Les surtitres passent à 11 px ; le paragraphe du manifeste retrouve l'encre\n   et 16 px (la feuille d'origine teintait ses DEUX spans en cyan 10 px, numéro\n   et texte confondus) ; la légende du portrait, 10 px sur un voile sombre. *\u002F\n.section-label,\n.sous-titre,\n.eyebrow {\n  font-size: 11px;\n  letter-spacing: .26em;\n}\n\n.manifesto__text {\n  max-width: 580px;\n  gap: 18px;\n  font-size: 16px;\n  line-height: 1.8;\n}\n\n.manifesto__text span:first-child {\n  padding-top: 5px;\n  font-size: 12px;\n}\n\n.manifesto__text span:last-child {\n  color: var(--ink);\n  font-size: 16px;\n  letter-spacing: 0;\n}\n\n.portrait-card::after {\n  content: \"\";\n  position: absolute;\n  inset: auto 0 0;\n  height: 36%;\n  background: linear-gradient(180deg, rgba(7, 9, 11, 0), rgba(7, 9, 11, .8));\n  pointer-events: none;\n}\n\n.portrait-card__caption {\n  z-index: 1;\n  right: 22px;\n  bottom: 22px;\n  left: 22px;\n  border-top-color: rgba(238, 234, 225, .55);\n  font-size: 10px;\n  letter-spacing: .2em;\n}\n\n.hygiene__texte p,\n.recit__texte p {\n  font-size: 16px;\n}\n\n.point__texte {\n  font-size: 15px;\n}\n\n.eviter details p {\n  font-size: 15px;\n}\n\n.point__numero {\n  font-size: 11px;\n}\n\n.conditions span {\n  font-size: 14px;\n}\n\n\u002F* Contact (21\u002F09) : « le formulaire n'est pas assez lisible, les textes sont\n   trop gris ». Libellés en encre pleine et 11 px, saisies 16 px sur un filet\n   plus franc, indications (placeholders) à 58 %, conditions 11 px, mention et\n   état en encre, bouton 10 px. *\u002F\n.champ label {\n  color: var(--ink);\n  font-size: 11px;\n}\n\n.champ :is(input, textarea) {\n  border-bottom-color: rgba(7, 9, 11, .5);\n  font-size: 16px;\n}\n\n.champ :is(input, textarea)::placeholder {\n  color: rgba(7, 9, 11, .58);\n}\n\n.formulaire__texte {\n  font-size: 16px;\n}\n\n.formulaire__conditions li {\n  font-size: 11px;\n}\n\n.formulaire__mention {\n  color: var(--ink);\n  font-size: 13px;\n}\n\n.formulaire__etat {\n  color: var(--ink);\n  font-size: 14px;\n}\n\n.formulaire__bouton {\n  font-size: 10px;\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — l'œuvre agrandie (evolutions\u002Fvisionneuse.js) ═══\n   Pas de cadre ni de voile : l'image, l'encre du fond qu'elle répand, et le\n   texte à côté (dessous, sur téléphone). *\u002F\n.agrandi {\n  touch-action: none;\n  position: fixed;\n  z-index: 995;\n  inset: 0;\n  color: var(--paper);\n  font-family: var(--text);\n  line-height: normal;\n  -webkit-font-smoothing: antialiased;\n}\n\n.agrandi[hidden] {\n  display: none;\n}\n\n.agrandi__toile {\n  position: absolute;\n  inset: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n.agrandi__secours {\n  display: none;\n  position: absolute;\n  max-width: none;\n  object-fit: cover;\n}\n\n.agrandi--secours .agrandi__toile {\n  display: none;\n}\n\n.agrandi--secours .agrandi__secours {\n  display: block;\n}\n\n.agrandi__texte {\n  position: absolute;\n  top: 50%;\n  right: var(--gutter);\n  width: clamp(260px, 26vw, 420px);\n  padding-top: 20px;\n  transform: translateY(-50%);\n}\n\n.agrandi__texte::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 1px;\n  background: var(--line-light);\n  transform: scaleX(0);\n  transform-origin: left;\n  transition: transform .9s cubic-bezier(.76, 0, .24, 1);\n}\n\n.agrandi.is-texte .agrandi__texte::before {\n  transform: scaleX(1);\n}\n\n.agrandi__texte > * {\n  opacity: 0;\n  transform: translateY(26px);\n  transition: opacity .7s ease, transform .9s cubic-bezier(.2, .75, .2, 1);\n}\n\n.agrandi.is-texte .agrandi__texte > * {\n  opacity: 1;\n  transform: none;\n}\n\n.agrandi.is-texte .agrandi__texte > :nth-child(2) { transition-delay: .06s; }\n.agrandi.is-texte .agrandi__texte > :nth-child(3) { transition-delay: .12s; }\n.agrandi.is-texte .agrandi__texte > :nth-child(4) { transition-delay: .18s; }\n.agrandi.is-texte .agrandi__texte > :nth-child(5) { transition-delay: .24s; }\n.agrandi.is-texte .agrandi__texte > :nth-child(6) { transition-delay: .3s; }\n\n.agrandi__rubrique {\n  margin: 0 0 24px;\n}\n\n.agrandi__titre {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(44px, 4.4vw, 84px);\n  font-weight: 300;\n  line-height: .8;\n  letter-spacing: -.04em;\n  text-transform: uppercase;\n}\n\n.agrandi__alt {\n  max-width: 360px;\n  margin: 22px 0 0;\n  color: rgba(238, 234, 225, .78);\n  font-size: 12px;\n  line-height: 1.7;\n}\n\n.agrandi__alt:empty {\n  display: none;\n}\n\n.agrandi__compteur {\n  margin: 26px 0 0;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .22em;\n}\n\n.agrandi__nav {\n  display: flex;\n  gap: 28px;\n  margin: 30px 0 0;\n}\n\n.agrandi__nav[hidden] {\n  display: none;\n}\n\n.agrandi__bouton {\n  position: relative;\n  padding: 8px 0;\n  border: 0;\n  background: none;\n  color: var(--paper);\n  font-size: 9px;\n  letter-spacing: .18em;\n  text-transform: uppercase;\n  cursor: pointer;\n}\n\n.agrandi__bouton::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 2px;\n  left: 0;\n  height: 1px;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: right;\n  transition: transform .45s cubic-bezier(.76, 0, .24, 1);\n}\n\n.agrandi__bouton:focus {\n  outline: none;\n}\n\n.agrandi__bouton:focus-visible {\n  outline: 1px solid var(--cyan);\n  outline-offset: 6px;\n}\n\n.agrandi__bouton:hover::after,\n.agrandi__bouton:focus-visible::after {\n  transform: scaleX(1);\n  transform-origin: left;\n}\n\n.agrandi__lien {\n  display: inline-block;\n  margin-top: 34px;\n  color: var(--orange);\n  font-size: 9px;\n  letter-spacing: .2em;\n  text-transform: uppercase;\n}\n\n.agrandi__fermer {\n  position: absolute;\n  top: 30px;\n  right: var(--gutter);\n  opacity: 0;\n  transition: opacity .6s ease .3s;\n}\n\n.agrandi.is-texte .agrandi__fermer {\n  opacity: 1;\n}\n\n.agrandi__fermer span {\n  margin-left: 8px;\n  color: var(--orange);\n  font-size: 14px;\n}\n\n.work-card.is-agrandie img,\n.work-card.is-agrandie .work-card__caption {\n  opacity: 0 !important;\n  transition: none !important;\n}\n\n@media (max-width: 760px) {\n  .agrandi__texte {\n    top: auto;\n    right: var(--gutter);\n    bottom: 30px;\n    left: var(--gutter);\n    width: auto;\n    transform: none;\n  }\n\n  .agrandi__titre {\n    font-size: clamp(38px, 11vw, 56px);\n  }\n\n  .agrandi__alt {\n    display: none;\n  }\n\n  .agrandi__compteur,\n  .agrandi__nav {\n    margin-top: 16px;\n  }\n\n  .agrandi__lien {\n    margin-top: 14px;\n  }\n\n  .agrandi__fermer {\n    top: 22px;\n  }\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — le pied de page ═══\n   Dans le vocabulaire du design (encre, papier, cyan, orange, filets de 1 px,\n   capitales espacées, Darker Grotesque 300) : bandeau défilant, cap suivant,\n   quatre colonnes, signature géante remplie d'encre (evolutions\u002Fpied.js). *\u002F\n.pied {\n  position: relative;\n  overflow: hidden;\n  border-top: 1px solid var(--line-light);\n  background: var(--ink);\n  color: var(--paper);\n  font-family: var(--text);\n}\n\n\u002F* ── Bandeau défilant : mots pleins et mots détourés, point orange ── *\u002F\n.pied__bandeau {\n  overflow: hidden;\n  border-bottom: 1px solid var(--line-light);\n}\n\n.pied__piste {\n  display: flex;\n  width: max-content;\n  padding: 20px 0 22px;\n  animation: pied-defile 46s linear infinite;\n}\n\n.pied__bandeau:hover .pied__piste {\n  animation-play-state: paused;\n}\n\n@keyframes pied-defile {\n  to { transform: translateX(-50%); }\n}\n\n.pied__mot {\n  display: flex;\n  align-items: center;\n  gap: 40px;\n  padding-right: 40px;\n  font-family: var(--display);\n  font-size: clamp(30px, 3.4vw, 60px);\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: .05em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.pied__mot::after {\n  content: \"\";\n  flex: 0 0 auto;\n  width: 9px;\n  height: 9px;\n  border-radius: 50%;\n  background: var(--orange);\n}\n\n.pied__mot--creux {\n  color: transparent;\n  -webkit-text-stroke: 1px rgba(238, 234, 225, .5);\n}\n\n\u002F* ── Cap suivant : le nom de la page détouré, rempli de gauche à droite au survol ── *\u002F\n.pied__suivant {\n  display: grid;\n  gap: 18px;\n  margin: 0 var(--gutter);\n  padding: clamp(70px, 8vw, 130px) 0 clamp(50px, 5vw, 80px);\n  border-bottom: 1px solid var(--line-light);\n}\n\n.pied__suivant-haut {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 20px;\n}\n\n.pied__suivant-haut .section-label {\n  margin: 0;\n}\n\n.pied__suivant-cap {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n}\n\n.pied__suivant-cap svg {\n  width: 30px;\n  height: 30px;\n  overflow: visible;\n  transition: transform 1.1s cubic-bezier(.2, .75, .2, 1);\n}\n\n.pied__suivant-cap circle {\n  fill: none;\n  stroke: rgba(238, 234, 225, .38);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n}\n\n.pied__suivant-cap path:first-of-type { fill: var(--orange); }\n.pied__suivant-cap path:last-of-type { fill: rgba(238, 234, 225, .72); }\n\n.pied__suivant-titre {\n  position: relative;\n  display: block;\n  font-family: var(--display);\n  font-size: clamp(76px, 13vw, 240px);\n  font-weight: 300;\n  line-height: .78;\n  letter-spacing: -.05em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.pied__suivant-creux {\n  display: block;\n  color: transparent;\n  -webkit-text-stroke: 1px rgba(238, 234, 225, .55);\n}\n\n.pied__suivant-plein {\n  position: absolute;\n  inset: 0;\n  color: var(--cyan);\n  clip-path: inset(0 100% 0 0);\n  transition: clip-path 1s cubic-bezier(.76, 0, .24, 1);\n}\n\n.pied__suivant:hover .pied__suivant-plein,\n.pied__suivant:focus-visible .pied__suivant-plein {\n  clip-path: inset(0 0 0 0);\n}\n\n.pied__suivant:hover .pied__suivant-cap svg,\n.pied__suivant:focus-visible .pied__suivant-cap svg {\n  transform: rotate(var(--pied-cap, 0deg));\n}\n\n.pied__suivant:focus-visible {\n  outline: 1px solid var(--cyan);\n  outline-offset: 10px;\n}\n\n\u002F* ── Quatre colonnes ── *\u002F\n.pied__colonnes {\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: clamp(22px, 3vw, 54px);\n  padding: clamp(50px, 5vw, 80px) var(--gutter) clamp(40px, 4vw, 64px);\n}\n\n.pied__col {\n  display: grid;\n  align-content: start;\n  gap: 4px;\n}\n\n.pied__titre {\n  margin: 0 0 16px;\n  padding-bottom: 14px;\n  border-bottom: 1px solid var(--line-light);\n  color: var(--orange);\n  font-size: 8px;\n  letter-spacing: .3em;\n  text-transform: uppercase;\n}\n\n.pied__lien {\n  position: relative;\n  display: flex;\n  align-items: baseline;\n  gap: 14px;\n  width: fit-content;\n  padding: 6px 0;\n  font-family: var(--display);\n  font-size: clamp(24px, 1.9vw, 34px);\n  font-weight: 300;\n  line-height: 1;\n  text-transform: uppercase;\n  transition: color .35s ease;\n}\n\n.pied__lien small {\n  width: 18px;\n  color: var(--mist);\n  font-family: var(--text);\n  font-size: 8px;\n  letter-spacing: .2em;\n}\n\n.pied__lien::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 3px;\n  left: 32px;\n  height: 1px;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: right;\n  transition: transform .45s cubic-bezier(.76, 0, .24, 1);\n}\n\n.pied__lien--petit::after {\n  left: 0;\n}\n\n.pied__lien:hover,\n.pied__lien:focus-visible,\n.pied__lien[aria-current=\"page\"] {\n  color: var(--cyan);\n}\n\n.pied__lien:hover::after,\n.pied__lien:focus-visible::after {\n  transform: scaleX(1);\n  transform-origin: left;\n}\n\n.pied__lien--petit {\n  font-family: var(--text);\n  font-size: 9px;\n  letter-spacing: .18em;\n  line-height: 1.6;\n  overflow-wrap: anywhere;\n}\n\n.pied__texte {\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(24px, 1.9vw, 34px);\n  font-weight: 300;\n  line-height: 1.12;\n  text-transform: uppercase;\n}\n\n.pied__texte--doux {\n  margin-top: 12px;\n  color: var(--mist);\n  font-family: var(--text);\n  font-size: 9px;\n  letter-spacing: .18em;\n}\n\n.pied__logo {\n  width: 34px;\n  height: 34px;\n  margin-top: 22px;\n  filter: invert(1);\n  opacity: .8;\n}\n\n.pied__cta {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 18px;\n  padding: 20px 22px;\n  border: 1px solid var(--orange);\n  border-style: solid;\n  background: var(--paper);\n  color: var(--ink);\n  font-size: 9px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n  transition: background .45s ease, color .45s ease;\n}\n\n.pied__cta-fleche {\n  font-size: 15px;\n  transition: transform .45s cubic-bezier(.2, .75, .2, 1);\n}\n\n.pied__cta:hover,\n.pied__cta:focus-visible {\n  background: var(--orange);\n  color: var(--ink);\n}\n\n.pied__cta:hover .pied__cta-fleche,\n.pied__cta:focus-visible .pied__cta-fleche {\n  transform: translateX(6px);\n}\n\n.pied__note {\n  margin: 14px 0 0;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n}\n\n\u002F* ── La signature : le nom de Naïdi à pleine largeur. Sans WebGL, un détouré ;\n   avec, rempli d'encre qui bouge (pied.js). ── *\u002F\n.pied__signature {\n  position: relative;\n  padding: 0 var(--gutter);\n  line-height: 0;\n  user-select: none;\n}\n\n.pied__nom {\n  display: block;\n  width: max-content;\n  margin: 0 auto;\n  padding-top: .12em;\n  font-family: var(--display);\n  font-size: clamp(120px, 31vw, 560px);\n  font-weight: 500;\n  line-height: .74;\n  letter-spacing: -.055em;\n  text-align: center;\n  text-transform: uppercase;\n  white-space: nowrap;\n  color: transparent;\n  -webkit-text-stroke: 1px rgba(238, 234, 225, .16);\n  transition: opacity .9s ease;\n}\n\n.pied__encre {\n  position: absolute;\n  inset: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  transition: opacity 1.4s ease;\n}\n\n.pied__signature.is-encree .pied__encre {\n  opacity: 1;\n}\n\n.pied__signature.is-encree .pied__nom {\n  opacity: 0;\n}\n\n\u002F* ── Barre légale ── *\u002F\n.pied__bas {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  gap: 20px;\n  align-items: center;\n  padding: 24px var(--gutter) 28px;\n  border-top: 1px solid var(--line-light);\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .2em;\n  text-transform: uppercase;\n}\n\n.pied__bas a {\n  transition: color .3s ease;\n}\n\n.pied__bas a:hover,\n.pied__bas a:focus-visible {\n  color: var(--orange);\n}\n\n.pied__copyright a {\n  color: var(--paper);\n  \u002F* Le crédit est au milieu d'une phrase : sans soulignement, la couleur seule\n     ne suffit pas à le distinguer (WCAG 1.4.1, relevé par axe-core le 19\u002F09). *\u002F\n  text-decoration: underline;\n  text-decoration-thickness: 1px;\n  text-underline-offset: 3px;\n  text-decoration-color: rgba(238, 234, 225, .45);\n}\n\n.pied__copyright a:hover,\n.pied__copyright a:focus-visible {\n  text-decoration-color: currentColor;\n}\n\n.pied__legal {\n  display: flex;\n  gap: 24px;\n  justify-self: center;\n}\n\n.pied__haut {\n  justify-self: end;\n  color: var(--paper);\n}\n\n@media (max-width: 960px) {\n  .pied__colonnes {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    row-gap: 46px;\n  }\n}\n\n@media (max-width: 760px) {\n  .pied__piste {\n    padding: 14px 0 16px;\n  }\n\n  .pied__mot {\n    gap: 24px;\n    padding-right: 24px;\n  }\n\n  .pied__suivant-titre {\n    font-size: clamp(64px, 20vw, 110px);\n  }\n\n  .pied__colonnes {\n    grid-template-columns: 1fr;\n  }\n\n  .pied__bas {\n    grid-template-columns: 1fr;\n    justify-items: center;\n    gap: 14px;\n    text-align: center;\n  }\n\n  .pied__legal,\n  .pied__haut {\n    justify-self: center;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .pied__piste {\n    animation: none;\n  }\n}\n\n\u002F* Le nom de la destination sur le rideau, rempli d'encre (pied.js, encrer). *\u002F\n.voyage__titre {\n  position: relative;\n  white-space: nowrap;\n}\n\n.voyage__encre,\n.chargement__encre {\n  position: absolute;\n  top: -18%;\n  right: -8%;\n  bottom: -24%;\n  left: -8%;\n  width: 116%;\n  height: 142%;\n  pointer-events: none;\n}\n\n.voyage__titre.is-encree {\n  color: transparent;\n}\n\n\n\u002F* (17\u002F09, nuit) Piks-l : plus de « cap suivant », et le pied occupe tout l'écran —\n   bandeau en haut, colonnes, la signature prend la hauteur restante, barre légale en bas. *\u002F\n.pied {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n  min-height: 100svh;\n}\n\n.pied__bandeau {\n  flex: 0 0 auto;\n}\n\n.pied__colonnes {\n  flex: 0 0 auto;\n  padding-top: clamp(60px, 9vh, 120px);\n}\n\n.pied__signature {\n  display: flex;\n  flex: 1 1 auto;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: clamp(10px, 2vh, 24px);\n}\n\n.pied__bas {\n  flex: 0 0 auto;\n}\n\n\u002F* Sur écran large, le pied fait exactement un écran : la signature se contente\n   de la hauteur qui reste (pied.js ajuste la taille du mot en largeur et en hauteur).\n   Sur téléphone, les colonnes empilées dépassent un écran : le pied garde min-height. *\u002F\n@media (min-width: 961px) and (min-height: 560px), (min-width: 761px) and (min-height: 800px) {\n  .pied {\n    height: 100vh;\n    height: 100svh;\n  }\n\n  .pied__colonnes {\n    padding-top: clamp(40px, 6vh, 90px);\n  }\n\n  .pied__signature {\n    flex: 1 1 0;\n    min-height: 0;\n    overflow: hidden;\n  }\n}\n\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 — finitions (niveau Sire Kazarak) ═══ *\u002F\n\n\u002F* ── Lever des en-têtes de page : le titre sort de son masque, le reste suit ── *\u002F\n.hero--page.is-attente .hero__title span {\n  clip-path: inset(0 -6% 100% -2%);\n  transform: translateY(42%);\n}\n\n.hero--page.is-attente .eyebrow,\n.hero--page.is-attente .hero__intro,\n.hero--page.is-attente .sommaire a,\n.hero--page.is-attente .hero__meta,\n.hero--page.is-attente .page-rose {\n  opacity: 0;\n  transform: translateY(26px);\n}\n\n.hero--page.is-attente .hero__meta {\n  transform: translate(-48%, -50%) rotate(-90deg) translateX(-40px);\n}\n\n\u002F* L'aiguille part décalée de 150° puis se fixe sur le cap de la page.\n   :not(.is-levee) — sinon l'état d'attente, jamais retiré, écrase le cap. *\u002F\n.hero--page.is-attente:not(.is-levee) .page-rose svg {\n  transform: rotate(calc(var(--cap, 0deg) - 150deg)) !important;\n}\n\n.hero--page.is-levee .hero__title span {\n  clip-path: inset(-12% -6% -24% -2%);\n  transform: none;\n  transition: clip-path 1.3s cubic-bezier(.76, 0, .24, 1), transform 1.3s cubic-bezier(.2, .75, .2, 1);\n}\n\n.hero--page.is-levee .hero__title span:last-child {\n  transition-delay: .16s;\n}\n\n.hero--page.is-levee .eyebrow,\n.hero--page.is-levee .hero__intro,\n.hero--page.is-levee .sommaire a,\n.hero--page.is-levee .page-rose {\n  opacity: 1;\n  transform: none;\n  transition: opacity .9s ease, transform 1.1s cubic-bezier(.2, .75, .2, 1);\n}\n\n.hero--page.is-levee .hero__meta {\n  opacity: 1;\n  transform: translate(-48%, -50%) rotate(-90deg);\n  transition: opacity .9s ease .5s, transform 1.2s cubic-bezier(.2, .75, .2, 1) .5s;\n}\n\n.hero--page.is-levee .page-rose svg {\n  transition: transform 2.2s cubic-bezier(.2, .75, .2, 1) .2s;\n}\n\n.hero--page.is-levee .hero__intro { transition-delay: .34s; }\n.hero--page.is-levee .page-rose { transition-delay: .2s; }\n.hero--page.is-levee .sommaire a:nth-child(1) { transition-delay: .42s; }\n.hero--page.is-levee .sommaire a:nth-child(2) { transition-delay: .48s; }\n.hero--page.is-levee .sommaire a:nth-child(3) { transition-delay: .54s; }\n.hero--page.is-levee .sommaire a:nth-child(4) { transition-delay: .6s; }\n.hero--page.is-levee .sommaire a:nth-child(5) { transition-delay: .66s; }\n\n@media (max-width: 760px) {\n  .hero--page.is-attente .hero__meta,\n  .hero--page.is-levee .hero__meta {\n    transform: none;\n  }\n}\n\n\u002F* ── La baleine de la conclusion, dans l'eau (WebGL) ── *\u002F\n.closing__eau {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: calc(min(53vw, 700px) * 1.4);\n  height: auto;\n  aspect-ratio: 1;\n  pointer-events: none;\n  opacity: 0;\n  transform: translate(-50%, -50%) rotate(-8deg);\n  transition: opacity 1.6s ease;\n}\n\n.closing.has-eau .closing__eau {\n  opacity: 1;\n}\n\n.closing.has-eau .closing__whale {\n  opacity: 0;\n  transition: opacity 1.6s ease;\n}\n\n@media (max-width: 760px) {\n  .closing__eau {\n    width: 140vw;\n  }\n}\n\n\u002F* ── Défilement doux (Lenis, souris seulement) ── *\u002F\nhtml.lenis,\nhtml.lenis body {\n  height: auto;\n}\n\n.lenis.lenis-smooth {\n  scroll-behavior: auto !important;\n}\n\n.lenis.lenis-stopped {\n  overflow: hidden;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .hero--page.is-attente .hero__title span,\n  .hero--page.is-attente .eyebrow,\n  .hero--page.is-attente .hero__intro,\n  .hero--page.is-attente .sommaire a,\n  .hero--page.is-attente .page-rose {\n    clip-path: none;\n    opacity: 1;\n    transform: none;\n  }\n}\n\n\u002F* ── Typographie grasse des grands titres (demande Piks-l du 17\u002F09, soir) ──\n   Darker Grotesque 800 (chargée par le plugin SEO et par pied du script) ; les\n   capitales serrées du design gardent leur interligne, l'approche se relâche\n   un peu pour que les lettres pleines ne se touchent pas. *\u002F\n.hero__title,\n.works__title,\n.manifesto__title,\n.route-panel__title,\n.closing__title,\n.points__titre,\n.recit__titre,\n.galerie3d__titre,\n.pied__suivant-titre,\n.voyage__titre,\n.agrandi__titre,\n.agenda__vide-titre,\n.formulaire__merci-titre,\n.loader__brand {\n  font-weight: 800;\n  letter-spacing: -.018em;\n}\n\n.hero--page .hero__title {\n  letter-spacing: -.025em;\n}\n\n.hero--page .hero__title span:last-child,\n.hero__title span:last-child {\n  font-weight: 700;\n}\n\n.escale__titre,\n.point__titre,\n.escale__date,\n.conditions strong,\n.coordonnee__valeur,\n.pied__lien,\n.pied__texte,\n.pied__mot,\n.marquee__item,\n.galerie3d__legende-titre {\n  font-weight: 600;\n  letter-spacing: .01em;\n}\n\n.pied__mot,\n.marquee__item {\n  letter-spacing: .04em;\n}\n\n.pied__nom {\n  font-weight: 800;\n  letter-spacing: -.03em;\n}\n\n\u002F* En graisse 800, la conclusion « Votre idée. Son mouvement. » remplissait l'écran jusqu'à l'entête. *\u002F\n.closing__title {\n  font-size: clamp(64px, 10.5vw, 196px);\n}\n\n.closing--page .closing__title {\n  font-size: clamp(56px, 8vw, 150px);\n}\n\n\u002F* En graisse 800, le titre de l'accueil s'élargit : sa colonne aussi, sans rogner sur la boussole. *\u002F\n.hero:not(.hero--page) .hero__copy {\n  width: min(760px, 44vw);\n}\n\n.hero:not(.hero--page) .hero__title {\n  font-size: clamp(44px, 3.75vw, 72px);\n}\n\n@media (max-width: 1050px) {\n  .hero:not(.hero--page) .hero__copy {\n    width: 56vw;\n  }\n}\n\n@media (max-width: 760px) {\n  .hero:not(.hero--page) .hero__copy {\n    width: auto;\n  }\n\n  .hero:not(.hero--page) .hero__title {\n    font-size: clamp(44px, 12.5vw, 64px);\n  }\n}\n\n\u002F* En graisse 800, les mots longs (PROCHAINES, L’IMAGINAIRE, MOUVEMENT.) débordaient\n   sur téléphone : tailles recalées, et l'accueil gagne la hauteur du titre. *\u002F\n@media (max-width: 760px) {\n  .hero:not(.hero--page) {\n    min-height: 930px;\n  }\n\n  .hero:not(.hero--page) .compass {\n    top: 35.6%;\n  }\n\n  .works__title {\n    font-size: clamp(46px, 15vw, 92px);\n  }\n\n  .manifesto__title {\n    font-size: clamp(42px, 12.5vw, 70px);\n  }\n\n  .route-panel__title {\n    font-size: clamp(42px, 12vw, 70px);\n  }\n\n  .points__titre,\n  .recit__titre {\n    font-size: clamp(38px, 11vw, 64px);\n  }\n\n  .closing__title,\n  .closing--page .closing__title {\n    font-size: clamp(46px, 13vw, 80px);\n  }\n\n  .pied__suivant-titre {\n    font-size: clamp(40px, 12.5vw, 80px);\n  }\n\n  .hero--page .hero__title {\n    font-size: clamp(54px, 18vw, 96px);\n  }\n\n  .voyage__titre {\n    font-size: clamp(44px, 13vw, 80px);\n  }\n}\n\n\u002F* Sur téléphone, la boussole déborde de l'écran (112 vw, design d'origine) : Agenda\n   et Contact sortaient du cadre. Ils remontent au-dessus de leur point, dans l'écran. *\u002F\n@media (max-width: 760px) {\n  .compass__point--east {\n    top: calc(50% - 36px);\n    right: 9%;\n    left: auto;\n    justify-items: end;\n    text-align: right;\n    transform: translateY(-50%);\n  }\n\n  .compass__point--east::after {\n    top: calc(100% + 10px);\n    right: 0;\n    transform: none;\n  }\n\n  .compass__point--west {\n    top: calc(50% - 36px);\n    right: auto;\n    left: 9%;\n    justify-items: start;\n    text-align: left;\n    transform: translateY(-50%);\n  }\n\n  .compass__point--west::after {\n    top: calc(100% + 10px);\n    left: 0;\n    transform: none;\n  }\n\n  \u002F* (19\u002F09) Sur téléphone, Agenda et Contact se posent sur la baleine — en\n     couleur, les sous-titres en brume se perdaient sur le ventre orange.\n     Un halo d'encre sous les lettres, et le sous-titre en papier. *\u002F\n  .compass__point {\n    text-shadow: 0 0 12px var(--ink), 0 0 4px var(--ink), 0 1px 2px var(--ink);\n  }\n\n  .compass__point small {\n    color: var(--paper-deep);\n  }\n}\n\n\n\u002F* ── (17\u002F09, nuit) Piks-l : plus de texte « en bâton » (détouré) — les mots gardent\n   leur place et leur effet, mais sont pleins. ── *\u002F\n.works__title span,\n.recit__titre span {\n  color: var(--cyan);\n  -webkit-text-stroke: 0;\n}\n\n.chapitre--papier .works__title span {\n  color: var(--cyan);\n  -webkit-text-stroke: 0;\n}\n\n.pied__mot--creux {\n  color: var(--mist);\n  -webkit-text-stroke: 0;\n}\n\n.pied__suivant-creux {\n  color: var(--paper);\n  -webkit-text-stroke: 0;\n}\n\n.pied__nom {\n  color: rgba(238, 234, 225, .08);\n  -webkit-text-stroke: 0;\n}\n\n\u002F* ── La baleine du hero : pleine (on ne voit plus le fond à travers), toujours en noir et\n   blanc, la couleur sous le pointeur inchangée. ── *\u002F\n.whale__mono {\n  opacity: 1;\n  filter: grayscale(1) brightness(.5) contrast(1.12) drop-shadow(0 30px 45px rgba(0, 0, 0, .4)) !important;\n}\n\n\n\u002F* ── (17\u002F09, nuit) L'accueil sans texte : la baleine et la boussole seules, centrées et\n   plus grandes (le chargement les construit à cette place). ── *\u002F\n.nt-invisible {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.hero:not(.hero--page) .compass {\n  top: 52%;\n  left: 50%;\n  width: min(74vw, 880px, 80svh);\n}\n\n@media (max-width: 1050px) {\n  .hero:not(.hero--page) .compass {\n    left: 50%;\n    width: min(84vw, 760px, 74svh);\n  }\n}\n\n@media (max-width: 760px) {\n  .hero:not(.hero--page) {\n    min-height: max(640px, 100svh);\n  }\n\n  .hero:not(.hero--page) .compass {\n    top: 50%;\n    width: min(112vw, 560px);\n  }\n}\n\n\u002F* (21\u002F09) Sans GPU (pas d'encre WebGL dans le pied), le nom reste visible : détouré,\n   couleur transparente — le remplissage à 8 % est un texte illisible pour axe. *\u002F\nhtml.nt-sans-gpu .pied__nom {\n  color: transparent;\n  -webkit-text-stroke: 1px rgba(238, 234, 225, .22);\n}\n\n\u002F* ═══ 19\u002F09 — L'expérience des pages intérieures (demande Piks-l : « moins carré,\n   plus expérience visuelle »). Rien ici ne touche l'accueil : tout est sous\n   `body:has(.hero--page)`. Les mécaniques : bords de papier déchirés entre les\n   sections, tirages posés de travers avec parallaxe, titres qui se lèvent,\n   cartes légèrement inclinées, formulaire à l'encre, curseur « Voir ». ═══ *\u002F\n\n\u002F* ── 1. Le papier a des bords : la section claire ne se pose plus au cordeau ──\n   Masque en cinq couches : bord haut déchiré, son voile (une seconde déchirure\n   translucide), plein, voile bas, bord bas — tuiles raccordables\n   (outils\u002Fencre\u002Fbords.py). C'est le repli sans WebGL : dès que exp\u002F35-bords.js\n   peint ses bandes d'aquarelle, ce masque s'efface (body.nt-bords-aquarelle).\n   Les .routes--seule (un seul panneau sombre) n'ont pas de bord : leur papier\n   n'est qu'une bande de 72 px au-dessus de l'encre du panneau — c'était une\n   ligne droite sous une déchirure, vu par Piks-l. *\u002F\nbody:has(.hero--page) .paper-section,\nbody:has(.hero--page) .routes:not(.routes--seule) {\n  --nt-bord: 72px;\n  --nt-tuile: 1440px;\n  --nt-sable: 0px;\n  -webkit-mask-image: url(\u002Fnt\u002Fencre\u002Fbord-haut.svg), url(\u002Fnt\u002Fencre\u002Fbord-haut-voile.svg), linear-gradient(#000, #000), url(\u002Fnt\u002Fencre\u002Fbord-bas-voile.svg), url(\u002Fnt\u002Fencre\u002Fbord-bas.svg);\n  mask-image: url(\u002Fnt\u002Fencre\u002Fbord-haut.svg), url(\u002Fnt\u002Fencre\u002Fbord-haut-voile.svg), linear-gradient(#000, #000), url(\u002Fnt\u002Fencre\u002Fbord-bas-voile.svg), url(\u002Fnt\u002Fencre\u002Fbord-bas.svg);\n  -webkit-mask-size: var(--nt-tuile) var(--nt-bord), var(--nt-tuile) var(--nt-bord), 100% calc(100% - var(--nt-bord) * 2 + 2px), var(--nt-tuile) var(--nt-bord), var(--nt-tuile) var(--nt-bord);\n  mask-size: var(--nt-tuile) var(--nt-bord), var(--nt-tuile) var(--nt-bord), 100% calc(100% - var(--nt-bord) * 2 + 2px), var(--nt-tuile) var(--nt-bord), var(--nt-tuile) var(--nt-bord);\n  -webkit-mask-position: var(--nt-sable) top, calc(var(--nt-sable) * -.55) top, 0 calc(var(--nt-bord) - 1px), calc(var(--nt-sable) * .55) bottom, calc(var(--nt-sable) * -1) bottom;\n  mask-position: var(--nt-sable) top, calc(var(--nt-sable) * -.55) top, 0 calc(var(--nt-bord) - 1px), calc(var(--nt-sable) * .55) bottom, calc(var(--nt-sable) * -1) bottom;\n  -webkit-mask-repeat: repeat-x, repeat-x, no-repeat, repeat-x, repeat-x;\n  mask-repeat: repeat-x, repeat-x, no-repeat, repeat-x, repeat-x;\n}\n\nbody:has(.hero--page) .paper-section {\n  padding-top: calc(clamp(110px, 13vw, 220px) + var(--nt-bord));\n  padding-bottom: calc(clamp(110px, 13vw, 220px) + var(--nt-bord));\n}\n\nbody:has(.hero--page) .routes:not(.routes--seule) {\n  padding-top: var(--nt-bord);\n  padding-bottom: var(--nt-bord);\n}\n\n\u002F* Deux papiers qui se suivent partagent le même bord : le second prend l'autre déchirure. *\u002F\nbody:has(.hero--page) .paper-section + .paper-section,\nbody:has(.hero--page) .routes + .paper-section {\n  -webkit-mask-image: url(\u002Fnt\u002Fencre\u002Fbord-haut2.svg), url(\u002Fnt\u002Fencre\u002Fbord-haut2-voile.svg), linear-gradient(#000, #000), url(\u002Fnt\u002Fencre\u002Fbord-bas2-voile.svg), url(\u002Fnt\u002Fencre\u002Fbord-bas2.svg);\n  mask-image: url(\u002Fnt\u002Fencre\u002Fbord-haut2.svg), url(\u002Fnt\u002Fencre\u002Fbord-haut2-voile.svg), linear-gradient(#000, #000), url(\u002Fnt\u002Fencre\u002Fbord-bas2-voile.svg), url(\u002Fnt\u002Fencre\u002Fbord-bas2.svg);\n}\n\n@media (max-width: 760px) {\n  body:has(.hero--page) .paper-section,\n  body:has(.hero--page) .routes:not(.routes--seule) {\n    --nt-bord: 44px;\n    --nt-tuile: 900px;\n  }\n}\n\n\u002F* Les bords à l'aquarelle (exp\u002F35-bords.js) : deux bandes par papier, posées\n   sur le document à cheval sur la frontière, qui peignent le papier par-dessus\n   le voisin. Quand elles sont là, la déchirure SVG et sa marge s'effacent. *\u002F\nbody.nt-bords-aquarelle:has(.hero--page) .paper-section,\nbody.nt-bords-aquarelle:has(.hero--page) .routes:not(.routes--seule) {\n  -webkit-mask-image: none;\n  mask-image: none;\n}\n\nbody.nt-bords-aquarelle:has(.hero--page) .paper-section {\n  padding-top: clamp(110px, 13vw, 220px);\n  padding-bottom: clamp(110px, 13vw, 220px);\n}\n\nbody.nt-bords-aquarelle:has(.hero--page) .routes:not(.routes--seule) {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\n.nt-bord {\n  position: absolute;\n  z-index: 1;\n  left: 0;\n  width: 100%;\n  height: 170px;\n  pointer-events: none;\n}\n\n\u002F* ── 2. Les tirages : posés de travers, avec un liseré de papier, et une\n   parallaxe douce (experience.js pose --nt-px) ── *\u002F\nbody:has(.hero--page) .portrait-card,\nbody:has(.hero--page) .route-panel__image,\nbody:has(.hero--page) .escale__affiche img {\n  will-change: transform;\n}\n\nbody:has(.hero--page) .portrait-card img {\n  transform: translate3d(0, var(--nt-px, 0px), 0) scale(1.06);\n  transition: filter .8s ease;\n}\n\nbody:has(.hero--page) .portrait-card {\n  overflow: hidden; \u002F* l'image agrandie reste dans son liseré *\u002F\n  rotate: -2.2deg;\n  padding: 12px 12px 0;\n  background: var(--paper-deep);\n  box-shadow: 0 30px 60px -20px rgba(7, 9, 11, .45), 0 2px 0 rgba(7, 9, 11, .06);\n  transition: rotate .9s cubic-bezier(.2, .75, .2, 1);\n}\n\nbody:has(.hero--page) .portrait-card:hover {\n  rotate: 0deg;\n}\n\nbody:has(.hero--page) .escale__affiche img {\n  width: min(100%, 400px);\n  rotate: -1.8deg;\n  margin: 14px 0 58px 8px; \u002F* la parallaxe (±30 px) et l'inclinaison ne mordent pas sur le texte *\u002F\n  padding: 10px 10px 30px;\n  background: var(--paper);\n  box-shadow: 0 34px 60px -24px rgba(0, 0, 0, .8);\n  filter: grayscale(1) contrast(1.06);\n  transform: translate3d(0, var(--nt-px, 0px), 0);\n  transition: rotate .9s cubic-bezier(.2, .75, .2, 1), filter .9s ease;\n}\n\nbody:has(.hero--page) .escale__affiche img:hover {\n  rotate: 0deg;\n  filter: none;\n}\n\n\u002F* ── 3. Les cartes d'œuvres : un mur de tirages, pas une grille ──\n   Inclinaison légère par position (propriété rotate, indépendante du transform\n   du .reveal), parallaxe de l'image dans son cadre (--nt-px), redressement au survol. *\u002F\nbody:has(.hero--page) .work-card {\n  transition: opacity 1.1s ease, transform 1.1s cubic-bezier(.2, .75, .2, 1), rotate .9s cubic-bezier(.2, .75, .2, 1);\n  box-shadow: 0 30px 50px -30px rgba(0, 0, 0, .9);\n}\n\nbody:has(.hero--page) .works-grid--flux .work-card:nth-child(4n+1) { rotate: -1.3deg; }\nbody:has(.hero--page) .works-grid--flux .work-card:nth-child(4n+2) { rotate: 1.1deg; }\nbody:has(.hero--page) .works-grid--flux .work-card:nth-child(4n+3) { rotate: .9deg; }\nbody:has(.hero--page) .works-grid--flux .work-card:nth-child(4n+4) { rotate: -1.6deg; }\n\nbody:has(.hero--page) .work-card:hover,\nbody:has(.hero--page) .work-card:focus-visible {\n  rotate: 0deg;\n}\n\nbody:has(.hero--page) .work-card img {\n  transform: translate3d(0, var(--nt-px, 0px), 0) scale(1.14);\n}\n\nbody:has(.hero--page) .work-card:hover img {\n  transform: translate3d(0, var(--nt-px, 0px), 0) scale(1.19);\n}\n\n\u002F* ── 4. Les titres se lèvent de leur ligne quand la section arrive ── *\u002F\nbody:has(.hero--page) .reveal :is(.works__title, .recit__titre, .route-panel__title, .manifesto__title, .points__titre, .escale-une__titre) {\n  clip-path: inset(0 -6% 100% -2%);\n  transform: translateY(26%);\n  transition: clip-path 1.25s cubic-bezier(.76, 0, .24, 1) .08s, transform 1.25s cubic-bezier(.2, .75, .2, 1) .08s;\n}\n\nbody:has(.hero--page) .reveal.is-visible :is(.works__title, .recit__titre, .route-panel__title, .manifesto__title, .points__titre, .escale-une__titre) {\n  clip-path: inset(-14% -6% -22% -2%);\n  transform: none;\n}\n\n\u002F* ── 5. Les grands numéros de chapitre dérivent avec le défilement (--nt-py) ── *\u002F\nbody:has(.hero--page) .paper-section[data-numero]::before,\nbody:has(.hero--page) .route-panel__number {\n  transform: translate3d(0, var(--nt-py, 0px), 0);\n  will-change: transform;\n}\n\n\u002F* ── 6. La baleine veille dans chaque en-tête de page, en filigrane ── *\u002F\n.hero__baleine {\n  position: absolute;\n  z-index: 1;\n  top: 4vh;\n  right: -9vw;\n  width: min(64vw, 920px);\n  aspect-ratio: 1;\n  opacity: 0;\n  rotate: -9deg;\n  pointer-events: none;\n  user-select: none;\n  transform: translate3d(0, var(--nt-px, 0px), 0);\n  transition: opacity 2.4s ease .5s;\n}\n\n.hero__baleine img {\n  display: block;\n  width: 100%;\n  height: auto;\n  filter: grayscale(1) contrast(1.05);\n  transition: opacity 1.6s ease;\n}\n\n.hero--page.is-levee .hero__baleine {\n  opacity: .14;\n}\n\n\u002F* En WebGL (exp\u002F40-baleine.js) : la toile prend la place de l'image, le plan\n   porte lui-même l'inclinaison, et l'opacité vit dans le shader. *\u002F\n.hero__baleine-toile {\n  position: absolute;\n  inset: 0;\n  width: 100% !important;\n  height: 100% !important;\n  display: block;\n}\n\n.hero__baleine.is-webgl {\n  rotate: 0deg;\n  transition: none;\n}\n\n.hero--page.is-levee .hero__baleine.is-webgl {\n  opacity: 1;\n}\n\n.hero__baleine.is-webgl img {\n  opacity: 0;\n  transition: none;\n}\n\n@media (max-width: 760px) {\n  .hero__baleine {\n    top: 12vh;\n    right: -34vw;\n    width: 120vw;\n  }\n\n  .hero--page.is-levee .hero__baleine {\n    opacity: .11;\n  }\n}\n\n\u002F* ── 7. Les dates de l'agenda : des cartes (20\u002F09) ; l'affiche est un tirage\n   (encadré d'encre par exp\u002F20-cartes.js), la carte se redresse au survol ── *\u002F\nbody:has(.hero--page) .escale {\n  transition: border-color .5s ease, background-color .5s ease;\n}\n\nbody:has(.hero--page) .escale:hover {\n  border-color: rgba(238, 234, 225, .32);\n}\n\n\u002F* ── 8. Le formulaire à l'encre : le trait s'écrit sous le champ qu'on remplit ── *\u002F\nbody:has(.hero--page) .champ {\n  position: relative;\n}\n\nbody:has(.hero--page) .champ::after {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  height: 2px;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: left;\n  transition: transform .7s cubic-bezier(.2, .75, .2, 1);\n}\n\nbody:has(.hero--page) .champ:focus-within::after {\n  transform: scaleX(1);\n}\n\nbody:has(.hero--page) .champ :is(input, textarea):focus {\n  border-bottom-color: rgba(7, 9, 11, .34);\n  box-shadow: none;\n}\n\nbody:has(.hero--page) .champ label {\n  transition: color .4s ease, letter-spacing .4s ease;\n}\n\nbody:has(.hero--page) .champ:focus-within label {\n  color: var(--orange) !important; \u002F* le gabarit pose la couleur du label avec plus de poids *\u002F\n}\n\nbody:has(.hero--page) .formulaire__bouton {\n  position: relative;\n  isolation: isolate;\n}\n\nbody:has(.hero--page) .formulaire__bouton::before {\n  content: \"\";\n  position: absolute;\n  z-index: -1;\n  inset: -12px;\n  border: 1px dashed rgba(241, 103, 66, .7);\n  border-radius: 50%;\n  opacity: 0;\n  transition: opacity .5s ease, rotate 1s ease;\n  animation: nt-orbite 14s linear infinite;\n}\n\nbody:has(.hero--page) .formulaire__bouton:hover::before,\nbody:has(.hero--page) .formulaire__bouton:focus-visible::before {\n  opacity: 1;\n}\n\n@keyframes nt-orbite {\n  to { transform: rotate(360deg); }\n}\n\n\u002F* ── 9. Le curseur dit « Voir » sur ce qui s'ouvre ── *\u002F\n.cursor.is-voir {\n  mix-blend-mode: normal;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  body:has(.hero--page) .work-card,\n  body:has(.hero--page) .portrait-card,\n  body:has(.hero--page) .escale__affiche img {\n    rotate: 0deg;\n  }\n\n  body:has(.hero--page) .reveal :is(.works__title, .recit__titre, .route-panel__title, .manifesto__title, .points__titre, .escale-une__titre) {\n    clip-path: none;\n    transform: none;\n  }\n\n  body:has(.hero--page) .formulaire__bouton::before {\n    animation: none;\n  }\n}\n\n\u002F* ═══ Sous GSAP (exp\u002F*.js) : le CSS s'efface là où le script anime ═══ *\u002F\n.has-gsap .reveal :is(.works__title, .recit__titre, .route-panel__title, .manifesto__title, .points__titre, .escale-une__titre),\n.has-gsap .reveal.is-visible :is(.works__title, .recit__titre, .route-panel__title, .manifesto__title, .points__titre, .escale-une__titre) {\n  clip-path: none;\n  transform: none;\n  transition: none;\n}\n\n.has-gsap .work-card.reveal,\n.has-gsap .escale.reveal,\n.has-gsap .point.reveal,\n.has-gsap .conditions.reveal,\n.has-gsap .hygiene__soins.reveal,\n.has-gsap .hygiene__texte.reveal,\n.has-gsap .recit__texte.reveal,\n.has-gsap .escale-une__cadre.reveal {\n  opacity: 1;\n  transform: none;\n  transition: none;\n}\n\n\u002F* Les cartes de points gardent leur transition de liseré au survol. *\u002F\n.has-gsap .point.reveal {\n  transition: border-color .5s ease;\n}\n\n.has-gsap .work-card,\n.has-gsap .portrait-card {\n  transform-style: preserve-3d;\n  will-change: transform;\n}\n\n.has-gsap .work-card img {\n  backface-visibility: hidden;\n}\n\n\u002F* Le masque de SplitText (lignes) ne coupe pas les descendantes ni l'accent. *\u002F\n.has-gsap .nt-ligne {\n  padding-bottom: .12em;\n  margin-bottom: -.12em;\n  white-space: nowrap;\n}\n\n\u002F* Les boutons aimantés bougent seuls : pas de transition CSS qui les freine. *\u002F\n.has-gsap :is(.closing__link, .formulaire__bouton, .entete__menu, .pied__cta, .escale-une__lien, .works__link, .menu-plein__cta) {\n  transition-property: color, background-color, border-color, opacity;\n}\n\n\u002F* ── L'encre de Chine (exp\u002F20-cartes.js, exp\u002F50-pinceau.js) ──\n   Un tirage se révèle sous une tache d'encre qui grandit (--nt-tache : la\n   taille du masque, animée par GSAP) depuis un point du cadre (--nt-tache-pos). *\u002F\n\u002F* Deux masques croisés : la tache qui grandit (révélation), la bordure qui\n   reste (le rectangle entier aux bords d'encre). *\u002F\n.nt-tache {\n  -webkit-mask-image: var(--nt-tache-src), var(--nt-bordure-src);\n  mask-image: var(--nt-tache-src), var(--nt-bordure-src);\n  -webkit-mask-repeat: no-repeat, no-repeat;\n  mask-repeat: no-repeat, no-repeat;\n  -webkit-mask-position: var(--nt-tache-pos, center), center;\n  mask-position: var(--nt-tache-pos, center), center;\n  -webkit-mask-size: var(--nt-tache, 0%) auto, 100% 100%;\n  mask-size: var(--nt-tache, 0%) auto, 100% 100%;\n  -webkit-mask-composite: source-in;\n  mask-composite: intersect;\n}\n\n\u002F* Une carte aux bords rongés n'a plus d'ombre rectangulaire ; sa légende recule un peu du bord. *\u002F\n.has-gsap .work-card.nt-tache {\n  box-shadow: none;\n}\n\n.has-gsap .work-card.nt-tache .work-card__caption {\n  padding-bottom: 26px;\n}\n\n\u002F* Le trait de pinceau derrière le titre de page : posé par le script, écrit par\n   GSAP. Les lignes du titre passent devant lui (z-index) : le trait, fin, court\n   sous les lettres sans les couvrir (Piks-l, 21\u002F09). *\u002F\n.has-gsap .hero__title {\n  position: relative;\n}\n\n.has-gsap .hero__title > span {\n  position: relative;\n  z-index: 1;\n}\n\n.nt-trait {\n  position: absolute;\n  z-index: 0;\n  display: block;\n  pointer-events: none;\n  background: var(--orange);\n  opacity: .84;\n  clip-path: inset(0 100% 0 0);\n  -webkit-mask-image: url(\u002Fnt\u002Fencre\u002Fpinceau.webp);\n  mask-image: url(\u002Fnt\u002Fencre\u002Fpinceau.webp);\n  -webkit-mask-repeat: no-repeat;\n  mask-repeat: no-repeat;\n  -webkit-mask-size: 100% 100%;\n  mask-size: 100% 100%;\n}\n\n\u002F* ── La FAQ « à éviter » : la réponse se déplie (exp\u002F45-eviter.js) ── *\u002F\n.eviter .nt-repli {\n  overflow: hidden;\n}\n\n.eviter details.is-fermeture summary::after {\n  transform: none;\n}\n\n.has-gsap .eviter summary {\n  transition: padding-left .4s cubic-bezier(.2, .75, .2, 1);\n}\n\n.has-gsap .eviter summary:hover,\n.has-gsap .eviter details[open]:not(.is-fermeture) summary {\n  padding-left: 10px;\n}\n\n\u002F* Le pied de page commence par son bandeau défilant, dans les 100 px où la bande\n   d'aquarelle de sa frontière peint encore : le texte passait derrière (Piks-l,\n   21\u002F09). Les enfants du pied passent devant les bandes (z-index 2 > 1) — le\n   pied lui-même reste sans contexte d'empilement, pour que la bande peigne\n   toujours par-dessus la fin de la section précédente. *\u002F\nbody.nt-bords-aquarelle .pied > * {\n  position: relative;\n  z-index: 2;\n}\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 (nuit) — l'entête et le menu plein écran ═══ *\u002F\n.entete {\n  position: fixed;\n  z-index: 60;\n  top: 0;\n  left: 0;\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  align-items: center;\n  width: 100%;\n  height: 84px;\n  padding: 0 var(--gutter);\n  color: var(--paper);\n  font-family: var(--text);\n  transition: background .6s ease, border-color .6s ease, height .6s cubic-bezier(.2, .75, .2, 1);\n}\n\n.entete::before {\n  content: \"\";\n  position: absolute;\n  z-index: -1;\n  inset: 0;\n  border-bottom: 1px solid var(--line-light);\n  background: linear-gradient(180deg, rgba(7, 9, 11, .86), rgba(7, 9, 11, .58));\n  backdrop-filter: blur(14px) saturate(.8);\n  -webkit-backdrop-filter: blur(14px) saturate(.8);\n  transition: opacity .6s ease;\n}\n\nbody.is-defile .entete {\n  height: 68px;\n}\n\nbody.menu-ouvert .entete::before {\n  opacity: 0;\n}\n\n.entete__marque {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  justify-self: start;\n}\n\n.entete__marque img {\n  width: 30px;\n  height: 30px;\n  object-fit: contain;\n  filter: invert(1);\n  transition: transform .9s cubic-bezier(.2, .75, .2, 1);\n}\n\n.entete__marque:hover img {\n  transform: rotate(-12deg) scale(1.08);\n}\n\n.entete__nom {\n  display: grid;\n  line-height: 1;\n  text-transform: uppercase;\n}\n\n.entete__nom strong {\n  font-family: var(--display);\n  font-size: 21px;\n  font-weight: 800;\n  letter-spacing: .06em;\n}\n\n.entete__nom small {\n  margin-top: 5px;\n  color: rgba(238, 234, 225, .62);\n  font-size: 7px;\n  font-weight: 500;\n  letter-spacing: .3em;\n}\n\n\u002F* La navigation : lettre du cap au-dessus du nom, un curseur orange glisse dessous. *\u002F\n.entete__nav {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px;\n  border: 1px solid var(--line-light);\n  border-radius: 999px;\n  background: rgba(7, 9, 11, .35);\n  font-size: 10px;\n  letter-spacing: .16em;\n}\n\n.entete__nav a {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  align-items: baseline;\n  gap: 8px;\n  padding: 10px 16px 10px 14px;\n  border-radius: 999px;\n  text-transform: uppercase;\n  transition: color .35s ease;\n}\n\n.entete__nav a::after {\n  display: none;\n}\n\n.entete__nav a small {\n  color: var(--orange);\n  font-family: var(--display);\n  font-size: 13px;\n  font-weight: 800;\n  letter-spacing: 0;\n}\n\n.entete__nav a.is-sous-curseur,\n.entete__nav a.is-sous-curseur small {\n  color: var(--ink);\n}\n\n.entete__curseur {\n  position: absolute;\n  z-index: 0;\n  top: 6px;\n  bottom: 6px;\n  left: 0;\n  width: 0;\n  border-radius: 999px;\n  background: var(--paper);\n  opacity: 0;\n  transition: transform .55s cubic-bezier(.76, 0, .24, 1), width .55s cubic-bezier(.76, 0, .24, 1), opacity .35s ease, background .35s ease;\n}\n\n.entete__nav:hover .entete__curseur {\n  background: var(--orange);\n}\n\n.entete__droite {\n  display: flex;\n  align-items: center;\n  gap: 26px;\n  justify-self: end;\n}\n\n.entete__cap {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n}\n\n.entete__cap svg {\n  width: 26px;\n  height: 26px;\n  overflow: visible;\n  transition: transform 1.2s cubic-bezier(.2, .75, .2, 1);\n}\n\n.entete__cap circle {\n  fill: none;\n  stroke: rgba(238, 234, 225, .38);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n}\n\n.entete__cap path:first-of-type { fill: var(--orange); }\n.entete__cap path:last-of-type { fill: rgba(238, 234, 225, .72); }\n\n.entete__menu {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 12px 14px 12px 20px;\n  border: 1px solid rgba(238, 234, 225, .3);\n  border-style: solid;\n  border-radius: 999px;\n  background: transparent;\n  color: var(--paper);\n  font-size: 9px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n  cursor: pointer;\n  transition: background .4s ease, color .4s ease, border-color .4s ease;\n}\n\n.entete__menu:hover,\n.entete__menu:focus-visible,\n.entete__menu[aria-expanded=\"true\"] {\n  border-color: var(--orange);\n  background: var(--orange);\n  color: var(--ink);\n}\n\n.entete__menu-traits {\n  position: relative;\n  display: grid;\n  gap: 5px;\n  width: 22px;\n}\n\n.entete__menu-traits i {\n  display: block;\n  height: 1px;\n  background: currentColor;\n  transition: transform .5s cubic-bezier(.76, 0, .24, 1), width .5s cubic-bezier(.76, 0, .24, 1);\n}\n\n.entete__menu-traits i:last-child {\n  width: 60%;\n  justify-self: end;\n}\n\n.entete__menu:hover .entete__menu-traits i:last-child {\n  width: 100%;\n}\n\n.entete__menu[aria-expanded=\"true\"] .entete__menu-traits i:first-child {\n  transform: translateY(3px) rotate(45deg);\n}\n\n.entete__menu[aria-expanded=\"true\"] .entete__menu-traits i:last-child {\n  width: 100%;\n  transform: translateY(-3px) rotate(-45deg);\n}\n\n\u002F* ── Le menu plein écran ── *\u002F\n.menu-plein {\n  --mx: 90%;\n  --my: 42px;\n  position: fixed;\n  z-index: 55;\n  inset: 0;\n  overflow: hidden;\n  color: var(--paper);\n  font-family: var(--text);\n  clip-path: circle(0 at var(--mx) var(--my));\n  transition: clip-path 1s cubic-bezier(.76, 0, .24, 1);\n}\n\n.menu-plein[hidden] {\n  display: none;\n}\n\n.menu-plein.is-ouvert {\n  clip-path: circle(150vmax at var(--mx) var(--my));\n}\n\n.menu-plein__fond {\n  position: absolute;\n  inset: 0;\n  background: var(--ink-soft) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Ftextures\u002Fnaidi-ink-dark.webp\") center \u002F cover;\n}\n\n.menu-plein__fond.has-aquarelle {\n  isolation: isolate;\n}\n\n.menu-plein__fond::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(90deg, rgba(7, 9, 11, .82) 0%, rgba(7, 9, 11, .55) 55%, rgba(7, 9, 11, .3) 100%);\n}\n\n.menu-plein__grille {\n  position: relative;\n  z-index: 1;\n  display: grid;\n  grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr);\n  grid-template-rows: 1fr auto;\n  gap: 0 clamp(40px, 6vw, 110px);\n  height: 100%;\n  padding: 120px var(--gutter) 34px;\n}\n\n.menu-plein__liens {\n  display: grid;\n  align-content: center;\n  gap: clamp(2px, .6vh, 10px);\n}\n\n.menu-plein__lien {\n  display: flex;\n  align-items: baseline;\n  gap: 22px;\n  width: fit-content;\n  opacity: 0;\n  transform: translateY(40px);\n  transition: opacity .7s ease, transform .9s cubic-bezier(.2, .75, .2, 1), color .35s ease;\n}\n\n.menu-plein.is-ouvert .menu-plein__lien {\n  opacity: 1;\n  transform: none;\n}\n\n.menu-plein.is-ouvert .menu-plein__lien:nth-child(1) { transition-delay: .32s, .32s, 0s; }\n.menu-plein.is-ouvert .menu-plein__lien:nth-child(2) { transition-delay: .38s, .38s, 0s; }\n.menu-plein.is-ouvert .menu-plein__lien:nth-child(3) { transition-delay: .44s, .44s, 0s; }\n.menu-plein.is-ouvert .menu-plein__lien:nth-child(4) { transition-delay: .5s, .5s, 0s; }\n.menu-plein.is-ouvert .menu-plein__lien:nth-child(5) { transition-delay: .56s, .56s, 0s; }\n\n.menu-plein__lien small {\n  width: 84px;\n  flex: 0 0 auto;\n  color: var(--orange);\n  font-size: 9px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n}\n\n.menu-plein__lien span {\n  font-family: var(--display);\n  font-size: clamp(54px, 7.4vw, 132px);\n  font-weight: 800;\n  line-height: .86;\n  letter-spacing: -.02em;\n  text-transform: uppercase;\n  transition: transform .6s cubic-bezier(.2, .75, .2, 1), color .35s ease;\n}\n\n\u002F* Les autres pages s'estompent quand une est survolée ou visée au clavier.\n   (19\u002F09) `:focus-within` estompait TOUT dès l'ouverture — le menu pose le\n   focus sur son premier lien, qui n'est pas « focus-visible » après un clic ou\n   un doigt : les cinq pages restaient grises. Estompe seulement au survol\n   (souris) ou quand un lien porte un focus visible. *\u002F\n@media (hover: hover) {\n  .menu-plein__liens:hover .menu-plein__lien span {\n    color: rgba(238, 234, 225, .28);\n  }\n}\n\n.menu-plein__liens:has(.menu-plein__lien:focus-visible) .menu-plein__lien span {\n  color: rgba(238, 234, 225, .28);\n}\n\n.menu-plein__lien:hover span,\n.menu-plein__lien:focus-visible span {\n  color: var(--paper) !important;\n  transform: translateX(22px);\n}\n\n.menu-plein__lien[aria-current=\"page\"] span {\n  color: var(--cyan);\n}\n\n.menu-plein__lien:focus-visible {\n  outline: none;\n}\n\n\u002F* L'aperçu : l'œuvre de la page survolée, révélée de bas en haut. *\u002F\n.menu-plein__apercu {\n  position: relative;\n  align-self: center;\n  justify-self: end;\n  width: min(100%, 440px);\n  aspect-ratio: .75;\n  overflow: hidden;\n  background: #111;\n  opacity: 0;\n  transform: translateY(40px) rotate(2deg);\n  transition: opacity .8s ease .45s, transform 1.1s cubic-bezier(.2, .75, .2, 1) .45s;\n}\n\n.menu-plein.is-ouvert .menu-plein__apercu {\n  opacity: 1;\n  transform: rotate(2deg);\n}\n\n.menu-plein__apercu img {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  clip-path: inset(100% 0 0 0);\n  filter: grayscale(.2);\n  transform: scale(1.12);\n  transition: clip-path .8s cubic-bezier(.76, 0, .24, 1), transform 1.4s cubic-bezier(.2, .75, .2, 1);\n}\n\n.menu-plein__apercu img[data-nt-pour=\"\u002F\"] {\n  padding: 12%;\n  object-fit: contain;\n}\n\n.menu-plein__apercu img.is-vue {\n  clip-path: inset(0 0 0 0);\n  transform: scale(1);\n}\n\n.menu-plein__apercu-cap {\n  position: absolute;\n  right: 14px;\n  bottom: 14px;\n  left: 14px;\n  padding-top: 10px;\n  border-top: 1px solid rgba(238, 234, 225, .5);\n  color: var(--paper);\n  font-size: 8px;\n  letter-spacing: .24em;\n  text-transform: uppercase;\n  text-shadow: 0 1px 10px rgba(0, 0, 0, .8);\n}\n\n.menu-plein__pied {\n  grid-column: 1 \u002F -1;\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr)) auto;\n  gap: 30px;\n  align-items: end;\n  padding-top: 22px;\n  border-top: 1px solid var(--line-light);\n  opacity: 0;\n  transition: opacity .8s ease .6s;\n}\n\n.menu-plein.is-ouvert .menu-plein__pied {\n  opacity: 1;\n}\n\n.menu-plein__label {\n  margin: 0 0 8px;\n  color: var(--orange);\n  font-size: 8px;\n  letter-spacing: .28em;\n  text-transform: uppercase;\n}\n\n.menu-plein__valeur {\n  margin: 0;\n  font-size: 12px;\n  line-height: 1.6;\n}\n\na.menu-plein__valeur:hover {\n  color: var(--cyan);\n}\n\n.menu-plein__cta {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  padding: 16px 22px;\n  border: 1px solid var(--orange);\n  border-style: solid;\n  border-radius: 999px;\n  font-size: 9px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n  transition: background .4s ease, color .4s ease;\n}\n\n.menu-plein__cta:hover,\n.menu-plein__cta:focus-visible {\n  background: var(--orange);\n  color: var(--ink);\n}\n\n@media (max-width: 1050px) {\n  .entete {\n    grid-template-columns: 1fr auto;\n  }\n\n  .entete__nav,\n  .entete__cap {\n    display: none;\n  }\n\n  .menu-plein__grille {\n    grid-template-columns: 1fr;\n  }\n\n  .menu-plein__apercu {\n    display: none;\n  }\n}\n\n@media (max-width: 760px) {\n  .entete {\n    height: 72px;\n  }\n\n  .entete__nom strong {\n    font-size: 18px;\n  }\n\n  .menu-plein__grille {\n    padding-top: 100px;\n  }\n\n  \u002F* (19\u002F09) Le cap au-dessus du nom : « Qui suis-je » se cassait en deux. *\u002F\n  .menu-plein {\n    overflow-y: auto;\n  }\n\n  .menu-plein__liens {\n    gap: 16px;\n  }\n\n  .menu-plein__lien {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 5px;\n  }\n\n  .menu-plein__lien small {\n    width: auto;\n    font-size: 8px;\n    white-space: nowrap;\n  }\n\n  .menu-plein__lien span {\n    font-size: clamp(40px, 13.5vw, 64px);\n    white-space: nowrap;\n  }\n\n  .menu-plein__lien:hover span,\n  .menu-plein__lien:focus-visible span {\n    transform: none;\n  }\n\n  .menu-plein__pied {\n    grid-template-columns: 1fr;\n    gap: 16px;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .menu-plein,\n  .menu-plein__lien,\n  .menu-plein__apercu,\n  .menu-plein__apercu img {\n    transition-duration: .01ms !important;\n    transition-delay: 0s !important;\n  }\n}\n\n\u002F* ── Lien d'évitement (19\u002F09) : invisible jusqu'au premier Tab ──\n   Le clavier traversait l'entête à chaque page avant d'atteindre le contenu. *\u002F\n.entete__saut {\n  \u002F* Sous la barre plutôt que par-dessus la marque (retour Piks-l du 19\u002F09). *\u002F\n  position: absolute;\n  top: calc(100% + 10px);\n  left: var(--gutter);\n  z-index: 40;\n  padding: 10px 18px;\n  border-radius: 999px;\n  background: var(--paper);\n  color: var(--ink);\n  font-size: 10px;\n  letter-spacing: .22em;\n  text-transform: uppercase;\n  opacity: 0;\n  pointer-events: none;\n  clip-path: inset(50%);\n}\n\n.entete__saut:focus {\n  opacity: 1;\n  pointer-events: auto;\n  clip-path: none;\n  outline: 2px solid var(--orange);\n  outline-offset: 3px;\n}\n\nmain:focus {\n  outline: none;\n}\n\n\n\u002F* ═══ Évolution du 17\u002F09\u002F2026 (nuit) — l'écran de chargement ═══\n   CSS d'abord (servi avec la page) ; chargement.js le repeint en WebGL. *\u002F\n.loader.chargement {\n  position: fixed;\n  z-index: 1000;\n  inset: 0;\n  display: block;\n  overflow: hidden;\n  background: var(--ink);\n  color: var(--paper);\n  font-family: var(--text);\n}\n\n.chargement__fond {\n  position: absolute;\n  inset: 0;\n  background: var(--ink) url(\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Faquarelle\u002Fnaidi-ink-dark-4k-2560.webp\") center \u002F cover;\n  animation: chargement-fond 7s ease-out both;\n}\n\n@keyframes chargement-fond {\n  from { opacity: 0; transform: scale(1.12); }\n  to { opacity: 1; transform: scale(1); }\n}\n\n.chargement__toile {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.chargement__boussole {\n  position: absolute;\n  top: 42%;\n  left: 50%;\n  width: min(56vw, 520px, 54svh);\n  aspect-ratio: 1;\n  transform: translate(-50%, -50%);\n}\n\n.chargement__anneaux {\n  position: absolute;\n  inset: 7%;\n  width: 86%;\n  height: 86%;\n  overflow: visible;\n}\n\n.chargement__anneau {\n  fill: none;\n  stroke: rgba(238, 234, 225, .28);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n  stroke-dasharray: 700;\n  stroke-dashoffset: 700;\n  animation: chargement-trace 2.4s cubic-bezier(.76, 0, .24, 1) forwards;\n}\n\n.chargement__anneau--2 {\n  stroke: rgba(34, 151, 168, .5);\n  stroke-dasharray: 3 3 700;\n  animation-delay: .25s;\n}\n\n.chargement__anneau--3 {\n  animation-delay: .5s;\n}\n\n@keyframes chargement-trace {\n  to { stroke-dashoffset: 0; }\n}\n\n.chargement__crans line {\n  stroke: rgba(238, 234, 225, .4);\n  stroke-width: 1;\n  vector-effect: non-scaling-stroke;\n}\n\n.chargement__crans {\n  opacity: 0;\n  transform-origin: 100px 100px;\n  animation: chargement-crans 1.8s cubic-bezier(.2, .75, .2, 1) .6s forwards;\n}\n\n@keyframes chargement-crans {\n  from { opacity: 0; transform: rotate(-40deg); }\n  to { opacity: 1; transform: rotate(0); }\n}\n\n.chargement__baleine {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n  filter: grayscale(1) brightness(.5) contrast(1.12);\n  user-select: none;\n}\n\n.chargement__baleine--couleur {\n  filter: none;\n  clip-path: circle(0% at 55% 50%);\n  animation: chargement-couleur 2.6s cubic-bezier(.3, 0, .2, 1) .3s forwards;\n}\n\n@keyframes chargement-couleur {\n  to { clip-path: circle(46% at 55% 50%); }\n}\n\n.chargement.is-webgl .chargement__fond,\n.chargement.is-webgl .chargement__baleine {\n  visibility: hidden;\n}\n\n.chargement__texte {\n  position: absolute;\n  right: 0;\n  bottom: clamp(96px, 13vh, 150px);\n  left: 0;\n  display: grid;\n  justify-items: center;\n  text-align: center;\n}\n\n.chargement__surtitre {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin: 0 0 12px;\n  color: var(--orange);\n  font-size: 8px;\n  letter-spacing: .3em;\n  text-transform: uppercase;\n}\n\n.chargement__surtitre::before,\n.chargement__surtitre::after {\n  content: \"\";\n  width: 28px;\n  height: 1px;\n  background: currentColor;\n}\n\n.chargement__nom {\n  position: relative;\n  margin: 0;\n  font-family: var(--display);\n  font-size: clamp(54px, 8.4vw, 150px);\n  font-weight: 800;\n  line-height: .9;\n  letter-spacing: -.02em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.chargement__nom.is-encree {\n  color: transparent;\n}\n\n.chargement__bas {\n  position: absolute;\n  right: var(--gutter);\n  bottom: clamp(30px, 5vh, 54px);\n  left: var(--gutter);\n  display: grid;\n  grid-template-columns: auto 1fr auto;\n  gap: 24px;\n  align-items: center;\n  color: var(--mist);\n  font-size: 8px;\n  letter-spacing: .26em;\n  text-transform: uppercase;\n}\n\n.chargement__ligne {\n  position: relative;\n  height: 1px;\n  overflow: hidden;\n  background: rgba(238, 234, 225, .16);\n}\n\n.chargement__ligne i {\n  position: absolute;\n  inset: 0;\n  background: var(--orange);\n  transform: scaleX(0);\n  transform-origin: left;\n  animation: chargement-ligne 2.8s cubic-bezier(.3, 0, .2, 1) forwards;\n}\n\n.chargement.is-pilote .chargement__ligne i,\n.chargement.is-pilote .chargement__baleine--couleur {\n  animation: none;\n}\n\n@keyframes chargement-ligne {\n  to { transform: scaleX(.8); }\n}\n\n.chargement__pourcent {\n  color: var(--paper);\n  font-family: var(--display);\n  font-size: 30px;\n  font-weight: 800;\n  letter-spacing: 0;\n  font-variant-numeric: tabular-nums;\n}\n\n\u002F* La sortie : textes et anneaux s'effacent, l'eau ouvre l'encre (chargement.js). *\u002F\n.chargement.is-sortie .chargement__texte,\n.chargement.is-sortie .chargement__bas,\n.chargement.is-sortie .chargement__anneaux {\n  opacity: 0;\n  transform: translateY(-18px);\n  transition: opacity .6s ease, transform .9s cubic-bezier(.76, 0, .24, 1);\n}\n\n.chargement.is-sortie .chargement__anneaux {\n  transform: none;\n  transition: opacity 1.4s ease .3s;\n}\n\n@media (max-width: 760px) {\n  .chargement__boussole {\n    top: 42%;\n    width: 86vw;\n  }\n\n  .chargement__bas {\n    grid-template-columns: 1fr auto;\n  }\n\n  .chargement__etat {\n    display: none;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .chargement__fond,\n  .chargement__anneau,\n  .chargement__crans,\n  .chargement__baleine--couleur,\n  .chargement__ligne i {\n    animation-duration: .01ms !important;\n    animation-delay: 0s !important;\n  }\n}\n\n\u002F* Repeint en WebGL, l'écran n'a plus de fond propre : quand l'encre se retire à la\n   sortie, c'est la page (le hero) qui apparaît derrière la baleine. *\u002F\n.loader.chargement.is-webgl {\n  background: transparent;\n}",{},{"transitionPage":15,"jsGlobal":21,"chargement":22},"\u002F* Naïdi Tattoo — script du site (minifié par esbuild ; source lisible : port\u002Fjs-global.lisible.js) *\u002F\n(()=>{if(window.__naidiScript)return;window.__naidiScript=!0;const ee=document.body,fe=B=>document.querySelector(B),Le=()=>{window.setTimeout(()=>{const B=fe(\".loader\"),h=()=>{window.__ntChargementFini=!0,document.querySelectorAll(\".loader\").forEach(A=>A.remove()),ee.classList.remove(\"is-loading\")};if(!B){h();return}if(window.__ntChargement){window.__ntChargement.sortir().then(h);return}B.animate([{clipPath:\"inset(0 0 0 0)\"},{clipPath:\"inset(0 0 100% 0)\"}],{duration:1100,easing:\"cubic-bezier(.76, 0, .24, 1)\",fill:\"forwards\"}).finished.then(h)},1100)};document.readyState===\"complete\"?Le():window.addEventListener(\"load\",Le),window.addEventListener(\"pointermove\",B=>{const h=fe(\".cursor\"),A=fe(\".compass\");if(h&&(h.style.transform=`translate(${B.clientX-19}px, ${B.clientY-19}px)`),A){const $=A.getBoundingClientRect(),S=Math.max(0,Math.min(100,(B.clientX-$.left)\u002F$.width*100)),d=Math.max(0,Math.min(100,(B.clientY-$.top)\u002F$.height*100));A.style.setProperty(\"--reveal-x\",`${S}%`),A.style.setProperty(\"--reveal-y\",`${d}%`)}},{passive:!0});const Me=new IntersectionObserver(B=>{B.forEach(h=>{h.isIntersecting&&(h.target.classList.add(\"is-visible\"),Me.unobserve(h.target))})},{threshold:.15,rootMargin:\"0px 0px -8% 0px\"}),qe=()=>{document.querySelectorAll(\".reveal:not(.is-visible)\").forEach(B=>{B.__ntObserve||(B.__ntObserve=!0,Me.observe(B))})};qe();const Ce=()=>{window.__ntChargementFini&&document.querySelectorAll(\".loader\").forEach(B=>B.remove()),qe()};window.addEventListener(\"piksl:page\",Ce),new MutationObserver(Ce).observe(ee,{childList:!0,subtree:!0}),window.__ntSansGPU=(()=>{if(window.__ntForcerGPU||\u002F[?&]nt-gpu\b\u002F.test(location.search))return!1;try{const h=document.createElement(\"canvas\").getContext(\"webgl\");if(!h)return!1;const A=h.getExtension(\"WEBGL_debug_renderer_info\"),$=A?String(h.getParameter(A.UNMASKED_RENDERER_WEBGL)):\"\",S=h.getExtension(\"WEBGL_lose_context\");return S&&S.loseContext(),\u002Fswiftshader|llvmpipe|softpipe|software|mesa offscreen\u002Fi.test($)}catch{return!1}})(),window.__ntSansGPU&&document.documentElement.classList.add(\"nt-sans-gpu\");const Pe=(()=>{const B={north:0,east:90,south:180,west:270},h=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),A={angle:-38,vitesse:0,cible:0,verrou:null,dernier:0,rose:0},$=(R,y)=>(y-R+540)%360-180,S=R=>{const y=R&&R.className.match(\u002Fcompass__point--(north|east|south|west)\u002F);return y?B[y[1]]:null};window.addEventListener(\"pointermove\",R=>{const y=fe(\".compass\");if(!y)return;A.dernier=performance.now();const s=y.getBoundingClientRect(),t=R.clientX-(s.left+s.width\u002F2),o=R.clientY-(s.top+s.height\u002F2);Math.hypot(t,o)>18&&(A.cible=(Math.atan2(t,-o)*180\u002FMath.PI+360)%360)},{passive:!0}),document.addEventListener(\"pointerover\",R=>{const y=R.target.closest&&R.target.closest(\".compass__point\");A.verrou=S(y)});const d=R=>{A.verrou=R,A.dernier=performance.now()},P=R=>{const y=fe(\".compass\");if(y){const s=y.querySelector(\".compass__needle\"),t=y.querySelector(\".compass__bearing\");if(s&&t){y.classList.add(\"is-aimantee\");const o=R-A.dernier>2500;let g=A.verrou!==null?A.verrou:o?0:A.cible;A.verrou===null&&o&&(g+=Math.sin(R\u002F1300)*2.4+Math.sin(R\u002F470)*.8);const U=Math.min(40,Math.max(1,Math.round((R-(A.t||R-16.7))\u002F16.7)));if(A.t=R,h.matches)A.angle=g,A.vitesse=0,A.rose=g;else for(let v=0;v\u003CU;v++)A.vitesse+=$(A.angle,g)*.012,A.vitesse*=.86,A.angle+=A.vitesse,A.rose+=$(A.rose,A.angle)*.08;s.style.transform=`rotate(${A.angle.toFixed(2)}deg)`,t.style.transform=`rotate(${A.rose.toFixed(2)}deg)`;const a=(A.angle%360+360)%360;y.querySelectorAll(\".compass__point\").forEach(v=>{const T=S(v);v.classList.toggle(\"is-cap\",T!==null&&Math.abs($(a,T))\u003C12)})}}window.requestAnimationFrame(P)};return window.requestAnimationFrame(P),{pointer:d,capDe:S}})(),Be=(()=>{const B={\"\u002F\":{x:0,y:0,z:0},\"\u002Ftattoo\":{x:0,y:-1,z:0},\"\u002Fqui-suis-je\":{x:0,y:1,z:0},\"\u002Fagenda\":{x:-1,y:0,z:0},\"\u002Fcontact\":{x:1,y:0,z:0}},h={x:0,y:0,z:1},A={nord:\"Cap au nord\",sud:\"Cap au sud\",ouest:\"Cap à l’ouest\",est:\"Cap à l’est\",\"nord-est\":\"Cap au nord-est\",\"nord-ouest\":\"Cap au nord-ouest\",\"sud-est\":\"Cap au sud-est\",\"sud-ouest\":\"Cap au sud-ouest\",dedans:\"Au cœur\",dehors:\"Retour au centre\"};A.goutte=\"\";const $=\"cubic-bezier(.76, 0, .24, 1)\",S=\"cubic-bezier(.2, .75, .2, 1)\",d=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),P=L=>(L||\"\u002F\").replace(\u002F\\\u002F+$\u002F,\"\")||\"\u002F\",R=L=>B[P(L)]||h;let y=!1,s=P(location.pathname);const t=(L,M)=>{const i=R(L),D=R(M),w=D.x-i.x,q=D.y-i.y;if(w||q){const k=Math.hypot(w,q),x=w\u002Fk,n=q\u002Fk,f=n\u003C-.3?\"nord\":n>.3?\"sud\":\"\",c=x\u003C-.3?\"ouest\":x>.3?\"est\":\"\",F=(Math.atan2(x,-n)*180\u002FMath.PI+360)%360;return{ux:x,uy:n,cap:[f,c].filter(Boolean).join(\"-\"),angle:F}}return{ux:0,uy:0,cap:D.z>=i.z?\"dedans\":\"dehors\",angle:null}},o=()=>{let L=document.querySelector(\"body > .voyage\");return L||(L=document.createElement(\"div\"),L.className=\"voyage\",L.setAttribute(\"aria-hidden\",\"true\"),L.innerHTML='\u003Cdiv class=\"voyage__contenu\">\u003Cp class=\"section-label\">\u003C\u002Fp>\u003Cp class=\"voyage__titre\">\u003Cspan class=\"voyage__titre-texte\">\u003C\u002Fspan>\u003C\u002Fp>\u003Csvg class=\"voyage__rose\" viewBox=\"0 0 46 46\">\u003Ccircle cx=\"23\" cy=\"23\" r=\"21\"\u002F>\u003Cpath d=\"M23 5 L25.2 23 L20.8 23 Z\"\u002F>\u003Cpath d=\"M23 41 L25.2 23 L20.8 23 Z\"\u002F>\u003C\u002Fsvg>\u003C\u002Fdiv>',ee.appendChild(L)),L},g=L=>{const M=P(L);if(M===\"\u002F\")return(fe(\".brand__text strong\")||{}).textContent||\"Accueil\";const i=document.querySelector(`nav.site-nav a[href=\"${M}\"]`);return i?(i.querySelector(\"span\")||i).textContent.trim():\"\"},U=()=>document.querySelector(\"main section[data-bloc]\"),a=(L,M)=>new Promise(i=>{const D=performance.now(),w=()=>{const q=U();q&&q!==L&&document.contains(q)&&P(location.pathname)===M||performance.now()-D>4e3?i():window.requestAnimationFrame(w)};w()}),v=L=>{const M=document.getElementById(\"__nuxt\"),i=M&&M.__vue_app__&&M.__vue_app__.config.globalProperties.$router;i?i.push(L):window.location.href=L},T=()=>{const L=P(location.pathname);document.querySelectorAll(\"nav.site-nav a\").forEach(M=>{P(M.getAttribute(\"href\"))===L?M.setAttribute(\"aria-current\",\"page\"):M.removeAttribute(\"aria-current\")})},p=async(L,M)=>{const i=P(L.split(\"#\")[0]),D=P(location.pathname);if(y||i===D)return;y=!0;const w=t(D,i),q=!1,k=M&&(M.x||M.y)?[M.x,M.y]:[window.innerWidth\u002F2,window.innerHeight\u002F2];w.angle!==null&&Pe&&(D===\"\u002F\"||i===\"\u002F\")&&Pe.pointer(w.angle);const x=o(),n=fe(\"main\");x.dataset.cap=q?w.cap:\"goutte\",x.querySelector(\".section-label\").textContent=q&&A[w.cap]||\"\",(x.querySelector(\".voyage__titre-texte\")||x.querySelector(\".voyage__titre\")).textContent=g(i),x.querySelector(\".voyage__rose\").style.transform=`rotate(${w.angle||0}deg)`;const f=d.matches?260:q?820:1150,c=q&&w.angle!==null&&fe(\".compass\")&&!d.matches?380:0;await new Promise(N=>window.setTimeout(N,c)),x.classList.add(\"is-actif\");const F=!q&&!d.matches&&x.classList.contains(\"aquarelle-prete\"),b=N=>({clipPath:`circle(${N} at ${k[0]}px ${k[1]}px)`}),O=d.matches?[{opacity:0},{opacity:1}]:F?[{opacity:1},{opacity:1}]:q?[{transform:`translate(${-w.ux*100}%, ${-w.uy*100}%)`},{transform:\"translate(0, 0)\"}]:[b(\"0px\"),b(\"150vmax\")],H=d.matches?[{opacity:1},{opacity:1}]:q?[{transform:\"translate(0, 0)\",opacity:1},{transform:`translate(${w.ux*22}vw, ${w.uy*22}vh)`,opacity:.35}]:[{transform:\"scale(1)\"},{transform:\"scale(.985)\"}],r=x.querySelector(\".voyage__contenu\");r.animate(d.matches?[{opacity:0},{opacity:1}]:[{opacity:0,transform:q?`translate(${-w.ux*60}px, ${-w.uy*60}px)`:\"translateY(24px)\"},{opacity:1,transform:\"translate(0, 0)\"}],{duration:q?f:700,delay:f*(q?.35:.62),easing:S,fill:\"both\"});const e=x.animate(O,{duration:f,easing:q?$:\"cubic-bezier(.32, 0, .18, 1)\",fill:\"forwards\"});x.__ntZoom=F?{anim:e,sens:\"ouvre\",centre:k}:null,n&&n.animate(H,{duration:f,easing:$,fill:\"forwards\"}),await e.finished,window.__ntMenu&&window.__ntMenu.fermer(!0);const u=U();window.__ntLenis&&window.__ntLenis.scrollTo(0,{immediate:!0,force:!0}),window.scrollTo({top:0,left:0,behavior:\"instant\"}),v(L),await a(u,i),await new Promise(N=>window.setTimeout(N,q?180:380)),s=i,T(),window.__ntLenis&&(window.__ntLenis.resize(),window.__ntLenis.scrollTo(0,{immediate:!0,force:!0})),window.scrollTo({top:0,left:0,behavior:\"instant\"});const l=L.split(\"#\")[1],m=l&&document.getElementById(l);m&&(window.__ntLenis?window.__ntLenis.scrollTo(m,{immediate:!0,force:!0}):m.scrollIntoView({behavior:\"instant\",block:\"start\"}));const E=fe(\"main\");E&&E.getAnimations().forEach(N=>N.cancel());const W=d.matches?[{opacity:1},{opacity:0}]:F?[{opacity:1},{opacity:1}]:q?[{transform:\"translate(0, 0)\"},{transform:`translate(${w.ux*100}%, ${w.uy*100}%)`}]:[{opacity:1},{opacity:0}],z=d.matches?[{opacity:0},{opacity:1}]:q?[{transform:`translate(${-w.ux*22}vw, ${-w.uy*22}vh)`,opacity:.35},{transform:\"translate(0, 0)\",opacity:1}]:[{transform:\"scale(1.03)\"},{transform:\"scale(1)\"}];r.animate([{opacity:1},{opacity:0}],{duration:f*.35,easing:\"ease\",fill:\"forwards\"});const Y=x.animate(W,{duration:q?f:1050,easing:q?$:\"cubic-bezier(.45, 0, .2, 1)\",fill:\"forwards\"});if(document.dispatchEvent(new CustomEvent(\"nt:arrivee\")),F&&(x.__ntZoom={anim:Y,sens:\"trou\",centre:k}),E){const N=E.animate(z,{duration:f*1.15,easing:S});N.finished.then(()=>N.cancel()).catch(()=>{})}await Y.finished,x.classList.remove(\"is-actif\"),x.__ntZoom=null,x.getAnimations().forEach(N=>N.cancel()),r.getAnimations().forEach(N=>N.cancel()),y=!1};return document.addEventListener(\"click\",L=>{if(L.defaultPrevented||L.button!==0||L.metaKey||L.ctrlKey||L.shiftKey||L.altKey)return;const M=L.target.closest&&L.target.closest(\"a[href]\");if(!M||M.target===\"_blank\"||M.hasAttribute(\"download\"))return;const i=M.getAttribute(\"href\")||\"\",[D,w]=i.split(\"#\");if(i.startsWith(\"#\")||w&&D&&P(D)===P(location.pathname)){if(i===\"#\")return;L.preventDefault();const q=w&&document.getElementById(w),k=window.__ntLenis;k?k.scrollTo(!q||w===\"top\"?0:q,{duration:1.4}):!q||w===\"top\"?window.scrollTo({top:0,behavior:d.matches?\"instant\":\"smooth\"}):q.scrollIntoView({behavior:d.matches?\"instant\":\"smooth\",block:\"start\"});return}!i.startsWith(\"\u002F\")||i.startsWith(\"\u002F\u002F\")||i.startsWith(\"\u002F_nuxt\")||(L.preventDefault(),L.stopImmediatePropagation(),p(i,L.detail?{x:L.clientX,y:L.clientY}:null))},!0),window.addEventListener(\"piksl:page\",()=>{const L=P(location.pathname);if(T(),y||L===s)return;const M=t(s,L);M.depuisAccueil=s===\"\u002F\",s=L,!d.matches&&window.setTimeout(()=>{const i=fe(\"main\");if(!i)return;const w=i.animate(!1?[{transform:`translate(${-M.ux*12}vw, ${-M.uy*12}vh)`,opacity:0},{transform:\"translate(0, 0)\",opacity:1}]:[{transform:`scale(${M.cap===\"dedans\"?.94:1.06})`,opacity:0},{transform:\"scale(1)\",opacity:1}],{duration:700,easing:S});w.finished.then(()=>w.cancel()).catch(()=>{})},60)}),o(),T(),{partir:p}})(),we=(()=>{const B=\".hero, .paper-section, .route-panel--dark, .voyage, .menu-plein__fond\",h=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Fthree@0.169.0\u002Fbuild\u002Fthree.module.min.js\",A={\"naidi-ink-dark-4k.png\":\"aquarelle\u002Fnaidi-ink-dark-4k-2560.webp\"},$=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),S=new Set;let d=null,P=null;const R=[],y=\"varying vec2 vUv; void main(){ vUv = uv; gl_Position = vec4(position.xy, 0.0, 1.0); }\",s=`\n      precision highp float;\n      uniform sampler2D uTex; uniform vec2 uRes; uniform vec2 uTexSize; uniform float uTime;\n      uniform vec3 uTraces[10]; uniform float uClair;\n      uniform float uRideau; uniform vec2 uCap; uniform float uRayon; uniform float uBord; uniform vec2 uCentre; uniform float uTrou;\n      varying vec2 vUv;\n      vec2 hash(vec2 p){ p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3))); return -1.0 + 2.0 * fract(sin(p) * 43758.5453123); }\n      float noise(vec2 p){\n        const float K1 = 0.366025404; const float K2 = 0.211324865;\n        vec2 i = floor(p + (p.x + p.y) * K1); vec2 a = p - i + (i.x + i.y) * K2;\n        float m = step(a.y, a.x); vec2 o = vec2(m, 1.0 - m);\n        vec2 b = a - o + K2; vec2 c = a - 1.0 + 2.0 * K2;\n        vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);\n        vec3 n = h * h * h * h * vec3(dot(a, hash(i)), dot(b, hash(i + o)), dot(c, hash(i + 1.0)));\n        return dot(n, vec3(70.0)) * 0.5 + 0.5;\n      }\n      float fbm(vec2 p){ float v = 0.0; float a = 0.5; for (int i = 0; i \u003C 4; i++){ v += a * noise(p); p = p * 2.03 + 17.1; a *= 0.5; } return v; }\n      vec2 couvrir(vec2 uv){\n        float ra = uRes.x \u002F uRes.y; float ta = uTexSize.x \u002F uTexSize.y;\n        vec2 s = ra > ta ? vec2(1.0, ta \u002F ra) : vec2(ra \u002F ta, 1.0);\n        return (uv - 0.5) * s + 0.5;\n      }\n      void main(){\n        vec2 uv = vUv;\n        float aspect = uRes.x \u002F uRes.y;\n        vec2 p = uv * vec2(aspect, 1.0) * 1.35;\n        float t = uTime * 0.035;\n        \u002F* La migration des pigments : un champ de bruit replié sur lui-même\n           (domain warping), qui dérive lentement. *\u002F\n        vec2 q = vec2(fbm(p + vec2(0.0, t)), fbm(p + vec2(5.2, 1.3) - t));\n        vec2 r = vec2(fbm(p + 2.8 * q + vec2(1.7, 9.2) + t * 1.4), fbm(p + 2.8 * q + vec2(8.3, 2.8) - t * 1.1));\n        vec2 migration = (r - 0.5) * 0.02;\n        vec2 migration2 = (q - 0.5) * 0.012;\n        \u002F* Le passage du pointeur (adouci le 17\u002F09, jugé « moche et trop\n           puissant » par Piks-l) : plus d'auréole ni de poussée du pigment,\n           seulement un voile d'eau très léger qui s'efface lentement. *\u002F\n        vec2 fleur = vec2(0.0); float mouille = 0.0;\n        for (int i = 0; i \u003C 10; i++){\n          vec3 tr = uTraces[i];\n          float age = uTime - tr.z;\n          if (tr.z \u003C 0.0 || age > 7.0) continue;\n          vec2 d = (uv - tr.xy) * vec2(aspect, 1.0);\n          float l = length(d);\n          float rayon = 0.05 + 0.05 * (1.0 - exp(-age * 0.8));\n          float vie = exp(-age * 0.9);\n          float dedans = exp(-pow(l \u002F rayon, 2.0)) * vie;\n          fleur += d \u002F (l + 0.015) * dedans * 0.002;\n          mouille += dedans;\n        }\n        mouille = clamp(mouille, 0.0, 1.0);\n        vec2 tuv = couvrir(uv + migration - fleur);\n        vec3 c1 = texture2D(uTex, tuv).rgb;\n        vec3 c2 = texture2D(uTex, couvrir(uv - migration2 - fleur * 0.6)).rgb;\n        \u002F* Deux lavis superposés : le plus chargé en pigment l'emporte à moitié,\n           les bords de tache se dédoublent et s'effrangent. *\u002F\n        float l1 = dot(c1, vec3(0.299, 0.587, 0.114)); float l2 = dot(c2, vec3(0.299, 0.587, 0.114));\n        vec3 charge = mix(l1 \u003C l2 ? c1 : c2, l1 \u003C l2 ? c2 : c1, uClair);\n        vec3 c = mix(c1, charge, 0.22);\n        vec2 e = vec2(1.8 \u002F uRes.x, 1.8 \u002F uRes.y);\n        vec3 flou = (texture2D(uTex, tuv + vec2(e.x, 0.0)).rgb + texture2D(uTex, tuv - vec2(e.x, 0.0)).rgb\n                   + texture2D(uTex, tuv + vec2(0.0, e.y)).rgb + texture2D(uTex, tuv - vec2(0.0, e.y)).rgb) * 0.25;\n        float bord = clamp(length(c1 - flou) * 5.0 + (fbm(p * 3.0 + t) - 0.5) * 0.15, 0.0, 1.0);\n        c = mix(c, c * (1.0 - 0.16 * bord), 1.0 - uClair * 0.5);\n        float grain = noise(gl_FragCoord.xy \u002F 1.8) * 0.6 + noise(gl_FragCoord.xy \u002F 7.0) * 0.4;\n        c *= 0.975 + 0.04 * grain;\n        vec3 dilue = uClair > 0.5 ? mix(c, vec3(0.93, 0.92, 0.88), 0.25) : c * 1.12 + vec3(0.0, 0.006, 0.008);\n        c = mix(c, dilue, mouille * 0.3);\n        \u002F* Le rideau des transitions. Depuis ou vers l'accueil : ses bords dans\n           l'axe du trajet sont mouillés (frange irrégulière, pigment en lisière,\n           pointe d'orange). Entre deux pages (demande Piks-l du 17\u002F09) : une\n           goutte tombe là où l'on a cliqué — anneaux d'onde, éclaboussures —\n           et l'encre se répand jusqu'à couvrir l'écran ; à l'arrivée, l'eau\n           ouvre l'encre depuis le même point. *\u002F\n        float alpha = 1.0;\n        if (uRideau > 0.5) {\n          float tb = uTime * 0.7;\n          float masque = 1.0; float bande = 0.0; float onde = 0.0;\n          if (uRayon >= 0.0) {\n            vec2 px = uv * uRes;\n            vec2 cpx = uCentre * uRes;\n            vec2 dv = px - cpx;\n            float dist = length(dv);\n            float loin = max(max(length(cpx), length(cpx - vec2(uRes.x, 0.0))), max(length(cpx - vec2(0.0, uRes.y)), length(cpx - uRes)));\n            float R = uRayon * (loin + uBord * 1.3);\n            float amp = min(uBord, R * 0.5 + 3.0);\n            float ang = atan(dv.y, dv.x);\n            float n = fbm(vec2(cos(ang), sin(ang)) * 2.6 + tb) * 0.65 + fbm(dv * 0.011 + tb) * 0.35;\n            float e = uTrou > 0.5 ? dist - R + amp * (1.0 - n) : R - dist - amp * n;\n            masque = uRayon \u003C= 0.001 ? uTrou : smoothstep(-2.0, 14.0, e);\n            bande = exp(-pow((e - 8.0) \u002F 9.0, 2.0)) * masque;\n            if (uTrou \u003C 0.5 && uRayon > 0.0 && uRayon \u003C 0.55) {\n              float vie = 1.0 - uRayon \u002F 0.55;\n              for (int k = 0; k \u003C 3; k++) {\n                float fk = float(k);\n                float Rr = R * (1.3 + 0.32 * fk) + 14.0 + fk * 10.0;\n                float largeur = 1.6 + 1.4 * fk + R * 0.004;\n                onde = max(onde, exp(-pow((dist - Rr - (noise(vec2(ang * 3.0, fk + tb)) - 0.5) * 6.0) \u002F largeur, 2.0)) * vie * (0.7 - 0.18 * fk));\n              }\n              float zone = smoothstep(R * 1.02, R * 1.15, dist) * (1.0 - smoothstep(R * 1.8 + 30.0, R * 2.3 + 70.0, dist));\n              onde = max(onde, smoothstep(0.8, 0.87, noise(px \u002F 8.5 + 3.7)) * zone * vie);\n            }\n          } else {\n            float eMin = 100000.0;\n            if (uCap.y > 0.5) {\n              float ey = min(uv.y, 1.0 - uv.y) * uRes.y;\n              float n = fbm(vec2(uv.x * uRes.x * 0.0045, (uv.y > 0.5 ? 3.1 : 7.7) + tb));\n              eMin = min(eMin, ey - uBord * (0.25 + 0.75 * n));\n            }\n            if (uCap.x > 0.5) {\n              float ex = min(uv.x, 1.0 - uv.x) * uRes.x;\n              float n = fbm(vec2(uv.y * uRes.y * 0.0045, (uv.x > 0.5 ? 5.3 : 1.9) + tb));\n              eMin = min(eMin, ex - uBord * (0.25 + 0.75 * n));\n            }\n            if (eMin \u003C 10000.0) { masque = smoothstep(-2.0, 14.0, eMin); bande = exp(-pow((eMin - 8.0) \u002F 9.0, 2.0)); }\n          }\n          c = mix(c, c * 0.5, bande * 0.75);\n          c = mix(c, vec3(0.945, 0.404, 0.259), bande * 0.22);\n          alpha = max(masque, onde * 0.85);\n        }\n        gl_FragColor = vec4(c * alpha, alpha);\n      }`,t=()=>window.__ntSansGPU?Promise.reject(new Error(\"sans GPU\")):P||(P=import(h).then(n=>(d=n,n))),o=n=>{const f=getComputedStyle(n).backgroundImage.match(\u002Furl\\(\"?([^\")]+)\"?\\)\u002F);if(!f)return null;const c=f[1].split(\"\u002F\").pop();return A[c]?f[1].replace(\u002Fkit\\\u002F[^\"]*$\u002F,\"kit\u002F\"+A[c]):f[1]},g=async n=>{n.__ntAquarelle=!0;const f=o(n);if(!f)return;let c;try{c=await t()}catch{return}if(!document.contains(n)||!n.__ntAquarelle)return;let F;const b=n.classList.contains(\"voyage\");try{F=new c.WebGLRenderer({antialias:!1,alpha:b,premultipliedAlpha:!0,powerPreference:\"low-power\"})}catch{return}F.setPixelRatio(window.innerWidth\u003C760?Math.min(window.devicePixelRatio||1,1):Math.min(window.devicePixelRatio||1,1.25));const O=F.domElement;O.className=\"aquarelle\",O.setAttribute(\"aria-hidden\",\"true\");const H={uTex:{value:null},uRes:{value:new c.Vector2(1,1)},uTexSize:{value:new c.Vector2(16,9)},uTime:{value:0},uTraces:{value:Array.from({length:10},()=>new c.Vector3(0,0,-1))},uClair:{value:n.classList.contains(\"paper-section\")?1:0},uRideau:{value:b?1:0},uCap:{value:new c.Vector2(0,0)},uRayon:{value:-1},uBord:{value:90},uCentre:{value:new c.Vector2(.5,.5)},uTrou:{value:0}},r=new c.Scene,e=new c.OrthographicCamera(-1,1,1,-1,0,1);r.add(new c.Mesh(new c.PlaneGeometry(2,2),new c.ShaderMaterial({uniforms:H,vertexShader:y,fragmentShader:s}))),b&&F.setClearColor(0,0);const u={el:n,renderer:F,scene:r,camera:e,uniforms:H,canvas:O,rideau:b,visible:!0,pret:!1,t0:performance.now()};new c.TextureLoader().setCrossOrigin(\"anonymous\").load(f,l=>{l.colorSpace=c.NoColorSpace,l.minFilter=c.LinearFilter,l.generateMipmaps=!1,H.uTex.value=l,H.uTexSize.value.set(l.image.width,l.image.height),u.pret=!0}),n.insertBefore(O,n.firstChild),n.classList.add(\"has-aquarelle\"),u.io=new IntersectionObserver(([l])=>{u.visible=l.isIntersecting},{rootMargin:\"120px\"}),u.io.observe(n),S.add(u)},U=n=>{n.io.disconnect();try{n.renderer.forceContextLoss()}catch{}n.renderer.dispose(),n.uniforms.uTex.value&&n.uniforms.uTex.value.dispose(),n.canvas.remove(),S.delete(n)},a=()=>window.innerWidth\u003C760?3:5,v=1.1,T=2.8,p=n=>n.classList.contains(\"voyage\")?\"rideau\":n.classList.contains(\"menu-plein__fond\")?\"menu\":\"fond\",L=n=>{const f=n.getBoundingClientRect();return f.height?Math.max(0,f.top-window.innerHeight,-f.bottom)\u002F(window.innerHeight||1):1\u002F0},M=n=>{n.el.__ntAquarelle=!1,n.el.classList.remove(\"aquarelle-prete\",\"has-aquarelle\"),n.canvas.classList.remove(\"is-prete\"),U(n)},i=()=>[...S].filter(n=>p(n.el)===\"fond\"),D=()=>{const n=i();if(n.length\u003Ca())return!0;const f=n.map(c=>[L(c.el),c]).sort((c,F)=>F[0]-c[0])[0];return!f||f[0]\u003C.25?!1:(M(f[1]),!0)},w=()=>{i().forEach(n=>{L(n.el)>T&&M(n)})},q=()=>{S.forEach(n=>{(!document.contains(n.el)||!document.contains(n.canvas))&&(n.el.__ntAquarelle=!1,n.el.classList.remove(\"aquarelle-prete\"),U(n))}),w(),document.querySelectorAll(B).forEach(n=>{if(n.__ntAquarelle)return;const f=p(n);if(f===\"menu\"){const c=n.closest(\"#menu-plein\");if(c&&c.hidden)return}f===\"fond\"&&(L(n)>v||!D())||g(n)})};window.addEventListener(\"pointermove\",n=>{const f=R[R.length-1],c=performance.now();f&&Math.hypot(n.clientX-f[0],n.clientY-f[1])\u003C46&&c-f[2]\u003C260||(R.push([n.clientX,n.clientY,c]),R.length>10&&R.shift())},{passive:!0});const k=n=>{const f=!!document.querySelector(\".voyage.is-actif\")||!!document.querySelector(\".loader.chargement:not(.is-sortie)\");S.forEach(c=>{if(!c.pret||document.hidden)return;const F=c.canvas.classList.contains(\"is-prete\");if(c.rideau?F&&!c.el.classList.contains(\"is-actif\"):!c.visible||f&&F)return;const b=c.el.getBoundingClientRect();if(!b.width||!b.height)return;const O=Math.round(b.width),H=Math.round(b.height);(c.canvas.width!==Math.round(O*c.renderer.getPixelRatio())||c.canvas.height!==Math.round(H*c.renderer.getPixelRatio()))&&(c.renderer.setSize(O,H,!1),c.uniforms.uRes.value.set(O,H));const r=$.matches?0:(n-c.t0)\u002F1e3;if(c.uniforms.uTime.value=r,c.rideau){const e=c.el.dataset.cap||\"\";c.uniforms.uCap.value.set(\u002Fouest|est\u002F.test(e)?1:0,\u002Fnord|sud\u002F.test(e)?1:0);const u=c.el.__ntZoom,l=u&&u.anim.effect?u.anim.effect.getComputedTiming().progress:null,m=l===null?u&&u.sens===\"ferme\"?0:1:l;c.uniforms.uRayon.value=u?u.sens===\"ferme\"?1-m:m:-1,c.uniforms.uTrou.value=u&&u.sens===\"trou\"?1:0;const E=u&&u.centre?u.centre:[window.innerWidth\u002F2,window.innerHeight\u002F2];c.uniforms.uCentre.value.set((E[0]-b.left)\u002Fb.width,1-(E[1]-b.top)\u002Fb.height),c.uniforms.uBord.value=Math.min(window.innerWidth,window.innerHeight)*.12}c.uniforms.uTraces.value.forEach((e,u)=>{const l=R[u];if(!l||$.matches){e.set(0,0,-1);return}e.set((l[0]-b.left)\u002Fb.width,1-(l[1]-b.top)\u002Fb.height,(l[2]-c.t0)\u002F1e3)}),c.renderer.render(c.scene,c.camera),F||(c.canvas.classList.add(\"is-prete\"),c.el.classList.add(\"aquarelle-prete\"))}),n-x>600&&(x=n,q()),window.requestAnimationFrame(k)};let x=0;return window.requestAnimationFrame(k),window.addEventListener(\"piksl:page\",()=>window.setTimeout(q,120)),new MutationObserver(()=>q()).observe(ee,{childList:!0,subtree:!0}),q(),{synchroniser:q,chargerThree:t}})(),Q=(()=>{const B=\"https:\u002F\u002Fapp.piks-l.com\u002Fapi\u002Fpublic\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\",h=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002F\",A=[\"tatouages\",\"flashs\",\"hors-peau\"],$={tatouages:\"Sur la peau\",flashs:\"Sur la peau\",\"hors-peau\":\"Hors peau\"},S=n=>String(n==null?\"\":n).replace(\u002F&\u002Fg,\"&amp;\").replace(\u002F\u003C\u002Fg,\"&lt;\").replace(\u002F>\u002Fg,\"&gt;\").replace(\u002F\"\u002Fg,\"&quot;\"),d=n=>String(n).padStart(2,\"0\"),P=(n,f,c)=>\u002F\\\u002Fstorage\\\u002Fv1\\\u002Fobject\\\u002Fpublic\\\u002F\u002F.test(n)&&(!c||c>f)?n.replace(\"\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002F\",\"\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002F\")+\"?width=\"+f+\"&resize=contain&quality=78\":n,R=n=>{const f=F=>{const b=A.indexOf(F.slug);return b\u003C0?99:b},c=[];return[...n||[]].sort((F,b)=>f(F)-f(b)||(F.sort_order||0)-(b.sort_order||0)).forEach(F=>[...F.photos||[]].sort((b,O)=>(b.sort_order||0)-(O.sort_order||0)).forEach(b=>c.push({src:b.url,largeur:b.width||0,hauteur:b.height||0,titre:b.description||b.alt||F.title,alt:b.alt||b.description||F.title,galerie:F.slug,famille:$[F.slug]||F.title,rubrique:F.title}))),c},y=n=>{const f=JSON.stringify(n);let c=5381;for(let F=0;F\u003Cf.length;F++)c=(c\u003C\u003C5)+c+f.charCodeAt(F)>>>0;return c.toString(36)+\"-\"+f.length.toString(36)},s=n=>`data-nt-oeuvre data-src=\"${S(n.src)}\" data-titre=\"${S(n.titre)}\" data-alt=\"${S(n.alt)}\" data-famille=\"${S(n.famille)}\" data-rubrique=\"${S(n.rubrique)}\" data-galerie=\"${S(n.galerie)}\" data-largeur=\"${n.largeur}\" data-hauteur=\"${n.hauteur}\"`,t=n=>n.largeur&&n.hauteur?` width=\"${n.largeur}\" height=\"${n.hauteur}\"`:\"\",o=(n,f)=>`\u003Cbutton type=\"button\" class=\"work-card reveal\" ${s(n)} aria-label=\"Agrandir : ${S(n.titre)}\">\u003Cimg src=\"${S(P(n.src,1100,n.largeur))}\" alt=\"${S(n.alt)}\" loading=\"lazy\"${t(n)}>\u003Cspan class=\"work-card__caption\">\u003Cspan>${S(n.titre)}\u003C\u002Fspan>\u003Cspan>${d(f+1)}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fbutton>`,g=n=>n.map(o).join(\"\"),U=n=>n.map(f=>`\u003Cli>\u003Cbutton type=\"button\" ${s(f)}>\u003Cimg src=\"${S(P(f.src,200,f.largeur))}\" data-nt-grand=\"${S(P(f.src,480,f.largeur))}\" alt=\"\" loading=\"lazy\"${t(f)}>\u003Cspan>${S(f.titre)}\u003C\u002Fspan>\u003Csmall>${S(f.famille)} · ${S(f.rubrique)}\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>`).join(\"\"),a=n=>`${d(n)} œuvre${n>1?\"s\":\"\"}`,v=n=>String(n||\"\").replace(\u002F\u003C(script|style|iframe|object|embed|form)[\\s\\S]*?\u003C\\\u002F\\1\\s*>\u002Fgi,\"\").replace(\u002F\u003C(script|style|iframe|object|embed|link|meta|form|input|button)\\b[^>]*>\u002Fgi,\"\").replace(\u002F\\s(on\\w+|style)\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)\u002Fgi,\"\").replace(\u002F(href|src)\\s*=\\s*(\"|')\\s*javascript:[^\"']*\\2\u002Fgi,'$1=\"#\"'),T=[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],p=n=>{const f=String(n||\"\").toLowerCase().normalize(\"NFD\").replace(\u002F[\\u0300-\\u036f]\u002Fg,\"\");return T.findIndex(c=>c.normalize(\"NFD\").replace(\u002F[\\u0300-\\u036f]\u002Fg,\"\").startsWith(f.slice(0,4)))},L=(n,f,c)=>c+\"-\"+String(f+1).padStart(2,\"0\")+\"-\"+String(n).padStart(2,\"0\"),M=n=>{const f=String(n||\"\").toLowerCase().replace(\u002F\\u00a0\u002Fg,\" \"),c=\"\\\\b(\\\\d{1,2})(?:er)?\\\\b\",F=\"([a-zéèêûôîàç]+)\",b=\"\\\\b(\\\\d{4})\\\\b\",O=\"\\\\s*(?:&|et|au|à|[–—-])\\\\s*\",H=(e,u,l)=>{const m=p(u);return m\u003C0?null:L(+e,m,l)};let r=f.match(new RegExp(c+\"\\\\s+\"+F+\"\\\\s+\"+b+O+c+\"\\\\s+\"+F+\"\\\\s+\"+b));if(r){const e=H(r[1],r[2],r[3]),u=H(r[4],r[5],r[6]);if(e&&u)return{debut:e,fin:u}}if(r=f.match(new RegExp(c+\"\\\\s+\"+F+O+c+\"\\\\s+\"+F+\"\\\\s+\"+b)),r){const e=H(r[1],r[2],r[5]),u=H(r[3],r[4],r[5]);if(e&&u&&e\u003C=u)return{debut:e,fin:u}}if(r=f.match(new RegExp(c+O+c+\"\\\\s+\"+F+\"\\\\s+\"+b)),r){const e=H(r[1],r[3],r[4]),u=H(r[2],r[3],r[4]);if(e&&u&&e\u003C=u)return{debut:e,fin:u}}if(r=f.match(new RegExp(c+\"\\\\s+\"+F+\"\\\\s+\"+b)),r){const e=H(r[1],r[2],r[3]);if(e)return{debut:e,fin:null}}return null},i=\"Naïdi Tattoo\",D=n=>n?' itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FEvent\"':\"\",w=(n,f,c)=>n?`\u003Cmeta itemprop=\"startDate\" content=\"${n.debut}\">`+(n.fin?`\u003Cmeta itemprop=\"endDate\" content=\"${n.fin}\">`:\"\")+`\u003Cmeta itemprop=\"eventStatus\" content=\"https:\u002F\u002Fschema.org\u002FEventScheduled\">\u003Cmeta itemprop=\"eventAttendanceMode\" content=\"https:\u002F\u002Fschema.org\u002FOfflineEventAttendanceMode\">\u003Cspan class=\"nt-micro\" itemprop=\"performer\" itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FOrganization\">\u003Cmeta itemprop=\"name\" content=\"${S(i)}\">\u003C\u002Fspan>`+(f&&f.cover_url?`\u003Cmeta itemprop=\"image\" content=\"${S(f.cover_url)}\">`:\"\")+(c?`\u003Cspan class=\"nt-micro\" itemprop=\"location\" itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FPlace\">\u003Cmeta itemprop=\"name\" content=\"${S(c)}\">\u003Cmeta itemprop=\"address\" content=\"${S(c)}\">\u003C\u002Fspan>`:\"\"):\"\",q=(n,f)=>{const c=String(n.excerpt||\"\").trim(),F=c.includes(\"·\")?c.split(\"·\").map(E=>E.trim()):[],[b=\"\",O=\"\",H=\"\"]=F,r=(n.tags||[]).map(E=>String(E).toLowerCase()),e=r.includes(\"guest\")?\"Guest\":r.includes(\"convention\")?\"Convention\":\"\",u=v(n.content_html||n.content||\"\"),l=(!F.length&&c?`\u003Cp>${S(c)}\u003C\u002Fp>`:\"\")+u,m=M(b);return`\u003Carticle class=\"escale reveal${n.cover_url?\"\":\" escale--sans-affiche\"}\"${D(m)}>`+w(m,n,O)+(n.cover_url?`\u003Cdiv class=\"escale__affiche\">\u003Cimg src=\"${S(P(n.cover_url,900))}\" alt=\"\" loading=\"lazy\">\u003C\u002Fdiv>`:\"\")+`\u003Cdiv class=\"escale__corps\">\u003Cp class=\"escale__sur\">\u003Cspan class=\"escale__numero\">${d(f+1)}\u003C\u002Fspan>${e?`\u003Cspan class=\"escale__type\">${e}\u003C\u002Fspan>`:\"\"}${H?`\u003Cspan class=\"escale__statut\">${S(H)}\u003C\u002Fspan>`:\"\"}\u003C\u002Fp>`+(b?`\u003Cp class=\"escale__date\">${S(b)}\u003C\u002Fp>`:\"\")+`\u003Ch3 class=\"escale__titre\"${m?' itemprop=\"name\"':\"\"}>${S(n.title)}\u003C\u002Fh3>`+(O?`\u003Cp class=\"escale__lieu\">${S(O)}\u003C\u002Fp>`:\"\")+(l?`\u003Cdiv class=\"escale__texte\">${l}\u003C\u002Fdiv>`:\"\")+\"\u003C\u002Fdiv>\u003C\u002Farticle>\"};return{API:B,STOCK:h,GROUPES:A,FAMILLES:$,echap:S,nn:d,vignette:P,oeuvres:R,signature:y,grille:g,liste3d:U,compte:a,agenda:n=>(n||[]).map(q).join(\"\"),prochaine:n=>{const f=(n||[])[0];if(!f)return\"\";const c=String(f.excerpt||\"\").trim(),F=c.includes(\"·\")?c.split(\"·\").map(e=>e.trim()):[],[b=\"\",O=\"\",H=\"\"]=F,r=M(b);return`\u003Cdiv class=\"escale-une__event\"${D(r)}>`+w(r,f,O)+`\u003Cp class=\"escale-une__date\">${S(b)}\u003C\u002Fp>\u003Ch2 class=\"escale-une__titre\" id=\"escale-une-titre\"${r?' itemprop=\"name\"':\"\"}>${S(f.title)}\u003C\u002Fh2>\u003Cp class=\"escale-une__lieu\">${S(O)}${H?\" · \"+S(H):\"\"}\u003C\u002Fp>\u003C\u002Fdiv>`},dates:M}})(),ye=(()=>{const B=window.matchMedia(\"(prefers-reduced-motion: reduce)\");let h=null,A=[],$=0,S=null,d=null,P=!1,R=!1,y=!1,s=0;const t={gl:null,prog:null,u:{},tex:[null,null],pret:[0,0],aspect:[1,1]},o={rect:[0,0,1,1],humide:0,fond:0,couleur:0,mix:0,opacite:1,t0:performance.now()},g=new Set,U=r=>({src:r.dataset.src,titre:r.dataset.titre,alt:r.dataset.alt,famille:r.dataset.famille,rubrique:r.dataset.rubrique,galerie:r.dataset.galerie,largeur:+r.dataset.largeur||0,hauteur:+r.dataset.hauteur||0}),a=r=>r\u003C.5?8*r*r*r*r:1-Math.pow(-2*r+2,4)\u002F2,v=r=>1-Math.pow(1-r,3),T=(r,e,u=a,l=0)=>new Promise(m=>{const E={debut:performance.now()+l,duree:B.matches?Math.min(r,220):r,pas:e,courbe:u,ok:m};g.add(E),w()}),p=`\n      precision highp float;\n      uniform vec2 uRes; uniform float uDpr; uniform float uTime;\n      uniform vec4 uRect; uniform float uHumide; uniform float uFond; uniform float uCouleur; uniform float uMix; uniform float uOpacite;\n      uniform sampler2D uTexA; uniform sampler2D uTexB; uniform float uAspA; uniform float uAspB; uniform float uPretA; uniform float uPretB;\n      const vec3 ENCRE = vec3(0.027, 0.035, 0.043);\n      vec2 hash(vec2 p){ p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3))); return -1.0 + 2.0 * fract(sin(p) * 43758.5453123); }\n      float noise(vec2 p){\n        const float K1 = 0.366025404; const float K2 = 0.211324865;\n        vec2 i = floor(p + (p.x + p.y) * K1); vec2 a = p - i + (i.x + i.y) * K2;\n        float m = step(a.y, a.x); vec2 o = vec2(m, 1.0 - m);\n        vec2 b = a - o + K2; vec2 c = a - 1.0 + 2.0 * K2;\n        vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);\n        vec3 n = h * h * h * h * vec3(dot(a, hash(i)), dot(b, hash(i + o)), dot(c, hash(i + 1.0)));\n        return dot(n, vec3(70.0)) * 0.5 + 0.5;\n      }\n      float fbm(vec2 p){ return noise(p) * 0.57 + noise(p * 2.03 + 17.1) * 0.29 + noise(p * 4.1 + 31.7) * 0.14; }\n      vec2 couvrir(vec2 q, float cadre, float image){\n        vec2 s = cadre > image ? vec2(1.0, image \u002F cadre) : vec2(cadre \u002F image, 1.0);\n        return (q - 0.5) * s + 0.5;\n      }\n      vec3 lire(sampler2D tex, vec2 uv, float pret){\n        \u002F* Les images détourées (la baleine) : sur le fond des cartes au départ, sur l'encre à l'arrivée. *\u002F\n        vec3 dessous = mix(vec3(0.067), ENCRE, uFond);\n        vec4 t = texture2D(tex, uv);\n        return mix(dessous, t.rgb + dessous * (1.0 - t.a), pret);\n      }\n      void main(){\n        vec2 px = vec2(gl_FragCoord.x, uRes.y * uDpr - gl_FragCoord.y) \u002F uDpr;\n        float t = uTime * 0.3;\n        vec2 taille = max(uRect.zw, vec2(1.0));\n        vec2 centre = uRect.xy + taille * 0.5;\n        \u002F* L'encre du fond, répandue depuis l'œuvre. *\u002F\n        float fond = 0.0;\n        if (uFond >= 0.999) fond = 1.0;\n        else if (uFond > 0.0) {\n          float rf = length(px - centre) \u002F length(uRes);\n          float seuilF = uFond * 1.35;\n          if (rf \u003C seuilF - 0.36) fond = 1.0;\n          else if (rf \u003C seuilF + 0.16) fond = smoothstep(seuilF, seuilF - 0.2, rf + (fbm(px * 0.0035 + t) - 0.5) * 0.3);\n        }\n        \u002F* L'œuvre : bords mouillés pendant le trajet. *\u002F\n        vec2 q = (px - uRect.xy) \u002F taille;\n        float d = min(min(q.x, 1.0 - q.x) * taille.x, min(q.y, 1.0 - q.y) * taille.y);\n        float frange = 1.5 + 44.0 * uHumide;\n        float masque = 0.0; float lisiere = 0.0;\n        if (d > frange + 2.0) masque = 1.0;\n        else if (d > -frange) {\n          float n = uHumide > 0.001 ? fbm(px * 0.016 + vec2(t, -t)) : 0.62;\n          float bord = d + (n - 0.62) * frange;\n          masque = smoothstep(-1.2, 1.2, bord);\n          lisiere = exp(-pow((bord - 7.0) \u002F 8.0, 2.0)) * uHumide;\n        }\n        masque *= uOpacite;\n        if (masque \u003C= 0.0) { gl_FragColor = vec4(ENCRE * fond, fond); return; }\n        vec2 dc = (q - 0.5) * taille;\n        float r = length(dc) \u002F (0.5 * length(taille));\n        vec2 qa = q;\n        if (uHumide > 0.001) qa = clamp(q + (vec2(noise(dc * 0.006 + t), noise(dc * 0.006 + 7.3 - t)) - 0.5) * 0.018 * uHumide, 0.0, 1.0);\n        float cadre = taille.x \u002F taille.y;\n        vec3 c = lire(uTexA, couvrir(qa, cadre, uAspA), uPretA);\n        float bordLavis = 0.0;\n        \u002F* Précédente \u002F suivante : un lavis qui part du centre. *\u002F\n        if (uMix >= 0.999) c = lire(uTexB, couvrir(qa, cadre, uAspB), uPretB);\n        else if (uMix > 0.0) {\n          float seuilM = uMix * 1.5;\n          float nm = r + (fbm(dc * 0.008 + 9.0 - t) - 0.5) * 0.5;\n          float lavis = smoothstep(seuilM, seuilM - 0.28, nm);\n          if (lavis > 0.0) c = mix(c, lire(uTexB, couvrir(qa, cadre, uAspB), uPretB), lavis);\n          bordLavis = exp(-pow((nm - seuilM + 0.14) \u002F 0.07, 2.0));\n        }\n        \u002F* La couleur arrive du centre (depuis le gris des cartes). *\u002F\n        if (uCouleur \u003C 0.999) {\n          float seuilC = uCouleur * 1.55;\n          float teinte = smoothstep(seuilC, seuilC - 0.32, r + (fbm(dc * 0.006 + 5.0 + t * 0.6) - 0.5) * 0.5);\n          c = mix(vec3(dot(c, vec3(0.2126, 0.7152, 0.0722))) * 0.94, c, teinte);\n        }\n        float pigment = lisiere + bordLavis;\n        if (pigment > 0.0) {\n          c = mix(c, c * 0.46, pigment * 0.75);\n          c = mix(c, vec3(0.945, 0.404, 0.259), pigment * 0.16 * smoothstep(0.04, 0.3, dot(c, vec3(0.2126, 0.7152, 0.0722))));\n        }\n        float alpha = masque + fond * (1.0 - masque);\n        gl_FragColor = vec4(c * masque + ENCRE * fond * (1.0 - masque), alpha);\n      }`,L=r=>{if(window.__ntSansGPU)return!1;const e=r.getContext(\"webgl\",{premultipliedAlpha:!0,alpha:!0,antialias:!1});if(!e)return!1;const u=(Y,N)=>{const K=e.createShader(Y);return e.shaderSource(K,N),e.compileShader(K),e.getShaderParameter(K,e.COMPILE_STATUS)?K:null},l=u(e.VERTEX_SHADER,\"attribute vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }\"),m=u(e.FRAGMENT_SHADER,p);if(!l||!m)return!1;const E=e.createProgram();if(e.attachShader(E,l),e.attachShader(E,m),e.linkProgram(E),!e.getProgramParameter(E,e.LINK_STATUS))return!1;e.useProgram(E);const W=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,W),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),e.STATIC_DRAW);const z=e.getAttribLocation(E,\"p\");return e.enableVertexAttribArray(z),e.vertexAttribPointer(z,2,e.FLOAT,!1,0,0),[\"uRes\",\"uDpr\",\"uTime\",\"uRect\",\"uHumide\",\"uFond\",\"uCouleur\",\"uMix\",\"uOpacite\",\"uTexA\",\"uTexB\",\"uAspA\",\"uAspB\",\"uPretA\",\"uPretB\"].forEach(Y=>{t.u[Y]=e.getUniformLocation(E,Y)}),e.uniform1i(t.u.uTexA,0),e.uniform1i(t.u.uTexB,1),t.tex=[e.createTexture(),e.createTexture()],t.tex.forEach((Y,N)=>{e.activeTexture(e.TEXTURE0+N),e.bindTexture(e.TEXTURE_2D,Y),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([17,17,17,255])),[e.TEXTURE_WRAP_S,e.TEXTURE_WRAP_T].forEach(K=>e.texParameteri(e.TEXTURE_2D,K,e.CLAMP_TO_EDGE)),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR)}),Object.assign(t,{gl:e,prog:E}),!0},M=(r,e)=>{const u=t.tex[r],l=u&&(u.__ntJeton=(u.__ntJeton||0)+1)||Math.random();let m=-1;const E=[...new Set([Q.vignette(e.src,720,e.largeur),Q.vignette(e.src,1100,e.largeur),Q.vignette(e.src,1800,e.largeur)])];return t.pret[r]=0,new Promise(W=>{let z=!0;const Y=()=>{z&&(z=!1,W())};E.forEach((N,K)=>{const Z=new Image;Z.crossOrigin=\"anonymous\",Z.decoding=\"async\",Z.onload=()=>{if(u&&u.__ntJeton!==l||K\u003Cm)return;m=K;const oe=u?t.tex.indexOf(u):r;if(t.gl&&u){const te=t.gl;te.activeTexture(te.TEXTURE0+oe),te.bindTexture(te.TEXTURE_2D,u);try{te.texImage2D(te.TEXTURE_2D,0,te.RGBA,te.RGBA,te.UNSIGNED_BYTE,Z)}catch{return}}t.aspect[oe]=Z.naturalWidth\u002FZ.naturalHeight,t.pret[oe]=1,oe===0&&(h.querySelector(\".agrandi__secours\").src=Z.src),D(),Y()},Z.onerror=()=>{K===E.length-1&&Y()},Z.src=N}),window.setTimeout(Y,1500)})},i=()=>{if(t.tex.reverse(),t.pret.reverse(),t.aspect.reverse(),t.gl){const r=t.gl;r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,t.tex[0]),r.activeTexture(r.TEXTURE1),r.bindTexture(r.TEXTURE_2D,t.tex[1])}},D=()=>{if(!h||h.hidden)return;const r=h.querySelector(\".agrandi__toile\"),e=Math.min(window.devicePixelRatio||1,1.5),u=window.innerWidth,l=window.innerHeight;if(t.gl){(r.width!==Math.round(u*e)||r.height!==Math.round(l*e))&&(r.width=Math.round(u*e),r.height=Math.round(l*e));const m=t.gl;m.viewport(0,0,r.width,r.height),m.uniform2f(t.u.uRes,u,l),m.uniform1f(t.u.uDpr,e),m.uniform1f(t.u.uTime,B.matches?0:(performance.now()-o.t0)\u002F1e3),m.uniform4f(t.u.uRect,o.rect[0],o.rect[1],o.rect[2],o.rect[3]),m.uniform1f(t.u.uHumide,B.matches?0:o.humide),m.uniform1f(t.u.uFond,o.fond),m.uniform1f(t.u.uCouleur,o.couleur),m.uniform1f(t.u.uMix,o.mix),m.uniform1f(t.u.uOpacite,o.opacite),m.uniform1f(t.u.uAspA,t.aspect[0]),m.uniform1f(t.u.uAspB,t.aspect[1]),m.uniform1f(t.u.uPretA,t.pret[0]),m.uniform1f(t.u.uPretB,t.pret[1]),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.drawArrays(m.TRIANGLES,0,3)}else{const m=h.querySelector(\".agrandi__secours\");Object.assign(m.style,{left:o.rect[0]+\"px\",top:o.rect[1]+\"px\",width:o.rect[2]+\"px\",height:o.rect[3]+\"px\",opacity:String(o.opacite)}),h.style.backgroundColor=`rgba(7, 9, 11, ${o.fond})`}},w=()=>{if(s)return;const r=e=>{s=0,g.forEach(u=>{const l=Math.max(0,Math.min(1,(e-u.debut)\u002Fu.duree));e\u003Cu.debut||(u.pas(u.courbe(l),l),l>=1&&(g.delete(u),u.ok()))}),D(),(g.size||o.humide>.001&&!B.matches)&&(s=window.requestAnimationFrame(r))};s=window.requestAnimationFrame(r)},q=r=>{const e=window.innerWidth,u=window.innerHeight,l=Math.max(22,Math.min(84,e*.044));let m,E,W,z;if(e>760){const K=Math.max(260,Math.min(420,e*.26));m=l,E=e-l-K-Math.max(30,Math.min(90,e*.05)),W=96,z=u-56}else{const K=h.querySelector(\".agrandi__texte\");m=l,E=e-l,W=76,z=u-(K?K.offsetHeight:220)-52}let Y=E-m,N=Y\u002Fr;return N>z-W&&(N=z-W,Y=N*r),[m+(E-m-Y)\u002F2,W+(z-W-N)\u002F2,Y,N]},k=r=>r.largeur&&r.hauteur?r.largeur\u002Fr.hauteur:.8,x=(r,e,u)=>r.map((l,m)=>l+(e[m]-l)*u),n=r=>Math.sin(Math.PI*r),f=()=>{if(h&&document.contains(h))return h;h=document.createElement(\"div\"),h.className=\"agrandi\",h.setAttribute(\"role\",\"dialog\"),h.setAttribute(\"aria-modal\",\"true\"),h.setAttribute(\"aria-label\",\"Œuvre agrandie\"),h.hidden=!0,h.innerHTML='\u003Ccanvas class=\"agrandi__toile\" aria-hidden=\"true\">\u003C\u002Fcanvas>\u003Cimg class=\"agrandi__secours\" alt=\"\" aria-hidden=\"true\">\u003Cdiv class=\"agrandi__texte\">\u003Cp class=\"section-label agrandi__rubrique\">\u003C\u002Fp>\u003Cp class=\"agrandi__titre\">\u003C\u002Fp>\u003Cp class=\"agrandi__alt\">\u003C\u002Fp>\u003Cp class=\"agrandi__compteur\">\u003C\u002Fp>\u003Cp class=\"agrandi__nav\">\u003Cbutton type=\"button\" class=\"agrandi__bouton agrandi__bouton--prec\">← Précédente\u003C\u002Fbutton>\u003Cbutton type=\"button\" class=\"agrandi__bouton agrandi__bouton--suiv\">Suivante →\u003C\u002Fbutton>\u003C\u002Fp>\u003Ca class=\"agrandi__lien\" href=\"\u002Ftattoo\">Voir sur la page Tattoo →\u003C\u002Fa>\u003C\u002Fdiv>\u003Cbutton type=\"button\" class=\"agrandi__bouton agrandi__fermer\">Fermer \u003Cspan aria-hidden=\"true\">×\u003C\u002Fspan>\u003C\u002Fbutton>',ee.appendChild(h),L(h.querySelector(\".agrandi__toile\"))||h.classList.add(\"agrandi--secours\"),h.querySelector(\".agrandi__fermer\").addEventListener(\"click\",()=>O()),h.querySelector(\".agrandi__bouton--prec\").addEventListener(\"click\",()=>b(-1)),h.querySelector(\".agrandi__bouton--suiv\").addEventListener(\"click\",()=>b(1)),h.querySelector(\".agrandi__lien\").addEventListener(\"click\",()=>O(!0));let r=null;return h.addEventListener(\"pointerdown\",e=>{e.pointerType!==\"mouse\"&&!e.target.closest(\".agrandi__texte, .agrandi__fermer\")&&(r={x:e.clientX,y:e.clientY,t:performance.now()})}),h.addEventListener(\"pointerup\",e=>{if(!r)return;const u=e.clientX-r.x,l=e.clientY-r.y,m=performance.now()-r.t\u003C700;r=null,m&&Math.abs(u)>48&&Math.abs(u)>Math.abs(l)*1.4&&(h.__ntBalaye=!0,b(u\u003C0?1:-1))}),h.addEventListener(\"pointercancel\",()=>{r=null}),h.addEventListener(\"click\",e=>{if(h.__ntBalaye){h.__ntBalaye=!1;return}if(e.target.closest(\".agrandi__texte, .agrandi__fermer\"))return;const[u,l,m,E]=o.rect;e.clientX>=u&&e.clientX\u003C=u+m&&e.clientY>=l&&e.clientY\u003C=l+E||O()}),h},c=()=>{const r=A[$];h.querySelector(\".agrandi__rubrique\").textContent=[r.famille,r.rubrique].filter(Boolean).join(\" · \"),h.querySelector(\".agrandi__titre\").textContent=r.titre||\"\",h.querySelector(\".agrandi__alt\").textContent=r.alt&&r.alt!==r.titre?r.alt:\"\",h.querySelector(\".agrandi__compteur\").textContent=`${Q.nn($+1)} \u002F ${Q.nn(A.length)}`,h.querySelector(\".agrandi__lien\").setAttribute(\"href\",\"\u002Ftattoo\"+(r.galerie?\"#\"+r.galerie:\"\")),h.querySelector(\".agrandi__nav\").hidden=A.length\u003C2},F=async(r,e,u,l)=>{if(!r.length||P||R)return;f(),R=!0,P=!0,A=r,$=Math.max(0,Math.min(e,r.length-1)),S=u||document.activeElement,d=l||null;const m=A[$];c(),h.classList.remove(\"is-texte\"),h.hidden=!1,ee.classList.add(\"nt-verrou\"),h.querySelector(\".agrandi__fermer\").focus({preventScroll:!0});const E=d&&d.rect($),W=d&&d.couleur?d.couleur($):0;t.aspect[0]=k(m);const z=q(t.aspect[0]);Object.assign(o,{rect:E?[E.x,E.y,E.w,E.h]:[z[0]+z[2]*.4,z[1]+z[3]*.4,z[2]*.2,z[3]*.2],humide:0,fond:0,couleur:W,mix:0,opacite:E?1:0});const Y=M(0,m);d&&(d.pause(!0),d.cacher($)),D(),await Promise.race([Y,new Promise(Z=>window.setTimeout(Z,260))]);const N=o.rect.slice(),K=o.opacite;window.setTimeout(()=>{P&&h.classList.add(\"is-texte\")},B.matches?0:620),await Promise.all([T(1150,(Z,oe)=>{const te=q(t.aspect[0]);o.rect=x(N,te,Z),o.humide=n(oe),o.opacite=K+(1-K)*Math.min(1,oe*3)}),T(1300,Z=>{o.fond=Z},v),T(1e3,Z=>{o.couleur=W+(1-W)*Z},v,180)]),o.humide=0,D(),R=!1,y&&(y=!1,O())},b=async r=>{if(!P||R||A.length\u003C2)return;R=!0,$=($+r+A.length)%A.length;const e=A[$];h.classList.remove(\"is-texte\"),t.aspect[1]=k(e),await Promise.race([M(1,e),new Promise(l=>window.setTimeout(l,500))]),c();const u=o.rect.slice();window.setTimeout(()=>{P&&h.classList.add(\"is-texte\")},B.matches?0:420),await Promise.all([T(900,(l,m)=>{o.rect=x(u,q(t.aspect[1]),l),o.humide=n(m)*.6}),T(1e3,l=>{o.mix=l},v)]),i(),o.mix=0,o.humide=0,D(),R=!1,y&&(y=!1,O())},O=async r=>{if(!P)return;if(R){if(!r){y=!0;return}g.clear(),d&&(d.montrer(),d.pause(!1)),h.hidden=!0,h.classList.remove(\"is-texte\"),ee.classList.remove(\"nt-verrou\"),S=null,d=null,P=!1,R=!1;return}R=!0,h.classList.remove(\"is-texte\");const e=!r&&d&&d.rect($),u=d&&d.couleur?d.couleur($):0;d&&e&&d.cacher($);const l=o.rect.slice(),m=e?[e.x,e.y,e.w,e.h]:[l[0]+l[2]*.3,l[1]+l[3]*.3,l[2]*.4,l[3]*.4];await Promise.all([T(r?380:950,(E,W)=>{o.rect=x(l,m,E),o.humide=n(W),e||(o.opacite=1-E)}),T(r?380:900,E=>{o.fond=1-E},a),T(700,E=>{o.couleur=1+(u-1)*E},v)]),d&&(d.montrer(),d.pause(!1)),h.hidden=!0,ee.classList.remove(\"nt-verrou\"),!r&&S&&document.contains(S)&&!S.closest(\".galerie3d__liste\")&&S.focus({preventScroll:!0}),S=null,d=null,P=!1,R=!1,y=!1},H=r=>{let e=null;const u=l=>r[l]&&r[l].querySelector(\"img\");return{rect:l=>{const m=u(l);if(!m)return null;const E=m.getBoundingClientRect();if(!E.width||E.bottom\u003C0||E.top>window.innerHeight)return null;const W=getComputedStyle(m);if(W.objectFit!==\"contain\"||!m.naturalWidth)return{x:E.left,y:E.top,w:E.width,h:E.height};const z=parseFloat(W.paddingLeft)||0,Y=parseFloat(W.paddingTop)||0,N=E.width-z-(parseFloat(W.paddingRight)||0),K=E.height-Y-(parseFloat(W.paddingBottom)||0),Z=m.naturalWidth\u002Fm.naturalHeight,oe=Math.min(N,K*Z),te=oe\u002FZ;return{x:E.left+z+(N-oe)\u002F2,y:E.top+Y+(K-te)\u002F2,w:oe,h:te}},cacher:l=>{e&&e.classList.remove(\"is-agrandie\"),e=r[l]||null,e&&e.classList.add(\"is-agrandie\")},montrer:()=>{e&&e.classList.remove(\"is-agrandie\"),e=null},couleur:l=>r[l]&&r[l].matches(\":hover, :focus-visible\")?1:0,pause:()=>{}}};return document.addEventListener(\"click\",r=>{const e=r.target.closest&&r.target.closest(\"[data-nt-oeuvre]\");if(!e||e.closest(\".agrandi\"))return;const u=e.closest(\"[data-nt-groupe]\")||e.parentElement,l=u.closest(\".galerie3d\");if(l&&l.__ntOuvrir&&l.__ntOuvrir(e))return;const m=[...u.querySelectorAll(\"[data-nt-oeuvre]\")].filter(E=>!E.closest(\"[hidden]\"));F(m.map(U),Math.max(0,m.indexOf(e)),e,l?null:H(m))}),document.addEventListener(\"keydown\",r=>{if(!(!P||!h)){if(r.key===\"Escape\")r.preventDefault(),O();else if(r.key===\"ArrowRight\")b(1);else if(r.key===\"ArrowLeft\")b(-1);else if(r.key===\"Tab\"){const e=[...h.querySelectorAll(\"button, a[href]\")].filter(l=>!l.closest(\"[hidden]\")),u=e.indexOf(document.activeElement);r.shiftKey&&u\u003C=0?(r.preventDefault(),e[e.length-1].focus()):!r.shiftKey&&u===e.length-1&&(r.preventDefault(),e[0].focus())}}}),window.addEventListener(\"resize\",()=>{P&&!R&&(o.rect=q(t.aspect[0]),D())}),window.addEventListener(\"piksl:page\",()=>O(!0)),{ouvrir:F,fermer:O,lire:U,couvert:()=>P&&o.fond>=.999}})(),De=(()=>{const B={},h=R=>{const y=B[R];if(y&&performance.now()-y.t\u003C6e4)return y.p;const s=fetch(Q.API+R,{headers:{Accept:\"application\u002Fjson\"}}).then(t=>t.ok?t.json():Promise.reject(new Error(String(t.status))));return B[R]={t:performance.now(),p:s},s.catch(()=>{delete B[R]}),s},A=(R,y,s)=>{const t=Q.signature(y);R.dataset.ntSignature!==t&&(R.innerHTML=s(y),R.dataset.ntSignature=t)},$=(R,y)=>document.querySelectorAll(`[data-nt-vide=\"${R}\"]`).forEach(s=>{s.hidden=y>0}),S=async()=>{const R=document.querySelectorAll(\"[data-nt-galerie]\"),y=document.querySelectorAll(\"[data-nt-compte]\"),s=document.querySelectorAll(\".galerie3d__liste\");if(R.length||y.length||s.length)try{const{galleries:g}=await h(\"\u002Fgalleries\"),U=Q.oeuvres(g);R.forEach(a=>{const v=U.filter(T=>T.galerie===a.dataset.ntGalerie);A(a,v,Q.grille),$(a.dataset.ntGalerie,v.length)}),s.forEach(a=>A(a,U,Q.liste3d)),y.forEach(a=>{const v=a.dataset.ntCompte,T=Q.compte(v===\"tout\"?U.length:U.filter(p=>p.galerie===v||p.famille===v).length);a.textContent!==T&&(a.textContent=T)})}catch{}const t=document.querySelectorAll(\"[data-nt-agenda]\"),o=document.querySelectorAll(\"[data-nt-escale]\");if(t.length||o.length)try{const{posts:g}=await h(\"\u002Fposts?categorie=agenda\");t.forEach(U=>A(U,g||[],Q.agenda)),o.forEach(U=>{A(U,(g||[]).slice(0,1),Q.prochaine);const a=U.closest(\"section\");a&&(a.hidden=!(g||[]).length)}),$(\"agenda\",(g||[]).length)}catch{}document.querySelectorAll(\"form.nt-formulaire\").forEach(g=>{g.__ntAffiche||(g.__ntAffiche=Date.now())})};let d=0;const P=()=>{window.clearTimeout(d),d=window.setTimeout(S,120)};return document.addEventListener(\"submit\",async R=>{const y=R.target.closest&&R.target.closest(\"form.nt-formulaire\");if(!y||(R.preventDefault(),y.dataset.etat===\"envoi\"))return;const s=y.querySelector(\".formulaire__etat\"),t=y.querySelector('[type=\"submit\"]'),o={},g={};y.querySelectorAll(\"[data-nt-champ]\").forEach(a=>{const v=(a.value||\"\").trim(),T=a.dataset.ntChamp;if(!v)return;g[T]=v;const p=a.dataset.ntRole;p&&!o[p]&&(o[p]=v)});const U=y.querySelector('[name=\"site_web\"]');y.dataset.etat=\"envoi\",t&&(t.disabled=!0),s&&(s.textContent=\"Envoi en cours…\");try{const a=await fetch(Q.API+\"\u002Fmessages\",{method:\"POST\",headers:{\"Content-Type\":\"application\u002Fjson\",Accept:\"application\u002Fjson\"},body:JSON.stringify({path:location.pathname,blocId:y.dataset.ntBloc||void 0,...o,champs:g,piege:U?U.value:\"\",saisieMs:y.__ntAffiche?Date.now()-y.__ntAffiche:void 0})});if(!a.ok){let T=\"\";try{const p=await a.json();T=p.message||p.statusMessage||\"\"}catch{}throw Object.assign(new Error(\"refus\"),{serveur:T})}y.dataset.etat=\"envoye\",y.hidden=!0;const v=y.parentElement.querySelector(\".formulaire__merci\");v&&(v.hidden=!1,v.focus({preventScroll:!1}))}catch(a){y.dataset.etat=\"erreur\",s&&(s.textContent=a&&a.serveur||\"L’envoi a échoué. Réessaie dans un instant — ta saisie est conservée.\")}finally{t&&(t.disabled=!1)}}),window.addEventListener(\"piksl:page\",P),new MutationObserver(P).observe(ee,{childList:!0,subtree:!0}),S(),{hydrater:S,lire:h}})(),Ue=(()=>{const B=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),h=window.matchMedia(\"(hover: none)\"),A=new Set,$=20,S=38,d=.85,P=10,R=[-.5,.22],y=\"0.027, 0.035, 0.043\",s=`\n      uniform float uFlexX; uniform float uFlexY;\n      varying vec2 vUv;\n      void main(){\n        vUv = uv;\n        vec3 p = position;\n        p.z -= pow(uv.x - 0.5, 2.0) * uFlexX + pow(uv.y - 0.5, 2.0) * uFlexY;\n        gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0);\n      }`,t=`\n      precision highp float;\n      uniform sampler2D uTex; uniform float uPret; uniform float uCouleur; uniform float uApparition;\n      uniform float uEteint; uniform float uBrume; uniform vec2 uEchelle;\n      varying vec2 vUv;\n      void main(){\n        vec2 uv = (vUv - 0.5) * uEchelle + 0.5;\n        vec4 t = texture2D(uTex, uv);\n        vec3 c = mix(vec3(0.067), t.rgb, t.a * uPret);\n        \u002F* grayscale(1) saturate(.3) du design, puis la couleur au survol *\u002F\n        vec3 gris = vec3(dot(c, vec3(0.2126, 0.7152, 0.0722)));\n        c = mix(gris * 0.94, c, uCouleur);\n        c *= mix(1.0, 0.24, uEteint);\n        c = mix(c, vec3(${y}), uBrume);\n        gl_FragColor = vec4(c, uApparition);\n      }`,o=(i,D)=>(i%D+D)%D,g=i=>[...i.querySelectorAll(\".galerie3d__liste [data-nt-oeuvre]\")],U=i=>i.map(D=>D.dataset.src+\"#\"+D.dataset.famille).join(\"|\"),a=i=>()=>(i=i*16807%2147483647,(i-1)\u002F2147483646),v=()=>document.querySelector(\".cursor\"),T=async(i,D)=>{const w=i.querySelector(\".galerie3d__scene\"),q=g(i);if(!w||!q.length)return;i.__ntEnCours=!0,i.classList.add(\"galerie3d--attente\");let k;try{k=await we.chargerThree()}catch{k=null}if(i.__ntEnCours=!1,!document.contains(i))return;if(U(g(i))!==D){M();return}let x=null;if(k)try{x=new k.WebGLRenderer({antialias:!0,alpha:!0,powerPreference:\"high-performance\"})}catch{x=null}if(!x){i.querySelectorAll(\".galerie3d__liste img[data-nt-grand]\").forEach(_=>{const C=Math.max(160,Math.min(960,Math.ceil((_.getBoundingClientRect().width||240)*Math.min(window.devicePixelRatio||1,2)\u002F80)*80));_.src=_.dataset.ntGrand.replace(\u002Fwidth=\\d+\u002F,\"width=\"+C)}),i.classList.remove(\"galerie3d--attente\"),i.classList.add(\"galerie3d--plate\");return}const n=q.map(ye.lire);x.setClearColor(0,0),x.setPixelRatio(Math.min(window.devicePixelRatio||1,window.innerWidth\u003C760?1.5:1.75));const f=x.domElement;f.className=\"galerie3d__canvas\",f.setAttribute(\"aria-hidden\",\"true\"),w.appendChild(f);const c=new k.Scene,F=new k.PerspectiveCamera(S,1,.1,400);F.position.set(0,0,$);const b=new k.PlaneGeometry(1,1,10,10),O=new k.Raycaster,H=i.querySelector(\".galerie3d__legende\"),r={el:i,signature:D,renderer:x,canvas:f,geometrie:b,cartes:[],textures:[],ecouteurs:[],vivant:!0,visible:!1,redisposer:!0,raf:0,dernier:0,halfH:1,spanX:1,spanY:1,K:.02},e={off:{x:0,y:0},vx:0,vy:0,px:0,py:0,ndc:new k.Vector2(9,9),dedans:!1,glisse:!1,id:null,parcours:0,debutT:0,dernierX:0,dernierY:0,dernierT:0,cible:null,survol:null,clavier:!1,rotX:0,rotY:0,affiche:null,aOuvrir:null,sx:0,sy:0,pause:!1,cachee:null},u=(_,C,I,X)=>{_.addEventListener(C,I,X),r.ecouteurs.push([_,C,I,X])},l=_=>{const C=r.textures[_.oeuvre],I=Math.max(.62,Math.min(1.6,C.aspect));let X=_.cellW*_.taille,V=X\u002FI;const j=_.cellH*.86;V>j&&(V=j,X=V*I),_.w=X,_.h=V;const J=_.mesh.material.uniforms;J.uTex.value=C.texture,J.uPret.value=C.pret?1:0;const le=X\u002FV;J.uEchelle.value.set(le>C.aspect?1:le\u002FC.aspect,le>C.aspect?C.aspect\u002Fle:1)},m=new k.TextureLoader().setCrossOrigin(\"anonymous\"),E=window.innerWidth\u003C760?480:720;r.textures=n.map(_=>({texture:null,aspect:_.largeur&&_.hauteur?_.largeur\u002F_.hauteur:.8,pret:!1,demandee:!1,src:_.src,reelle:_.largeur}));const W=_=>{const C=r.textures[_];!C||C.demandee||(C.demandee=!0,m.load(Q.vignette(C.src,E,C.reelle),I=>{if(!r.vivant){I.dispose();return}I.colorSpace=k.NoColorSpace,I.anisotropy=Math.min(4,x.capabilities.getMaxAnisotropy()),C.texture=I,C.aspect=I.image.width\u002FI.image.height,C.pret=!0,r.cartes.forEach(X=>{X.oeuvre===_&&l(X)})},void 0,()=>{C.demandee=!1}))};r.demander=W;const z=()=>{r.cartes.forEach(ne=>{c.remove(ne.mesh),ne.mesh.material.dispose()}),r.cartes=[];const _=w.clientWidth||1,C=w.clientHeight||1;x.setSize(_,C,!1),F.aspect=_\u002FC,F.updateProjectionMatrix();const I=Math.tan(S*Math.PI\u002F360)*$,X=I*F.aspect,V=_>=1100?5.2:_>=760?4:2.3,j=2*X\u002FV,J=j*1.3,le=Math.min(.02,$\u002FMath.pow(2.8*Math.max(X,I),2)),pe=(ne,ue)=>{const ae=1.18*ne,ve=$*$-4*ue*ae*ae*$;return ve>0?($-Math.sqrt(ve))\u002F(2*ue*ae):Math.sqrt($\u002Fue)};let ce=Math.ceil(2*(pe(X,le)+j)\u002Fj)+1,G=Math.ceil(2*(pe(I,le*d)+J)\u002FJ)+1;for(;ce*G\u003Cn.length*1.5;)ce+=1;Object.assign(r,{halfW:X,halfH:I,cellW:j,spanX:ce*j,spanY:G*J,K:le});const ie=a(20260917),re=n.length,de=new Array(re).fill(0),se=[];for(let ne=0;ne\u003Cce;ne++){const ue=ie()*J;for(let ae=0;ae\u003CG;ae++){const ve=new Set([se[(ne-1)*G+ae],se[(ne-1)*G+ae+1],se[ne*G+ae-1]]);ne===ce-1&&(ve.add(se[ae]),ve.add(se[ae+1])),ae===G-1&&ve.add(se[ne*G]);let he=-1;for(let Ae=0;Ae\u003Cre;Ae++){const Re=(ne*2+ae*3+Ae)%re;re>3&&ve.has(Re)||(he\u003C0||de[Re]\u003Cde[he])&&(he=Re)}he\u003C0&&(he=(ne+ae)%re),de[he]+=1,se[ne*G+ae]=he;const Fe=new k.ShaderMaterial({uniforms:{uTex:{value:null},uPret:{value:0},uCouleur:{value:0},uApparition:{value:0},uEteint:{value:0},uBrume:{value:0},uEchelle:{value:new k.Vector2(1,1)},uFlexX:{value:0},uFlexY:{value:0}},vertexShader:s,fragmentShader:t,transparent:!0,depthWrite:!1}),Te=new k.Mesh(b,Fe),Se={mesh:Te,oeuvre:he,cellW:j,cellH:J,taille:.7+ie()*.2,bx:(ne-(ce-1)\u002F2)*j+(ie()-.5)*j*.1,by:(ae-(G-1)\u002F2)*J+ue+(ie()-.5)*J*.08,x:0,y:0,couleur:0,echelle:1,eteint:0,apparition:0,w:1,h:1};Te.userData.carte=Se,l(Se),c.add(Te),r.cartes.push(Se)}}r.redisposer=!1},Y=(_,C)=>{e.ndc.set(_,C),O.setFromCamera(e.ndc,F);const I=O.intersectObjects(r.cartes.map(V=>V.mesh),!1)[0],X=I?I.object.userData.carte:null;return X&&X.eteint\u003C.5?X:null},N=(_,C,I)=>{if(!H)return;const X=_?n[_.oeuvre]:null;X!==e.affiche&&(e.affiche=X,H.classList.toggle(\"is-visible\",!!X),X&&(H.querySelector(\".galerie3d__legende-rubrique\").textContent=`${X.famille} · ${X.rubrique}`,H.querySelector(\".galerie3d__legende-titre\").textContent=X.titre)),X&&C!==void 0&&(H.style.transform=`translate(${Math.round(C)}px, ${Math.round(I)}px)`)},K=new k.Vector3,Z=_=>{const C=f.getBoundingClientRect();let I=1\u002F0,X=1\u002F0,V=-1\u002F0,j=-1\u002F0;return _.mesh.updateMatrixWorld(),F.updateMatrixWorld(),[[-.5,-.5],[.5,-.5],[.5,.5],[-.5,.5]].forEach(([J,le])=>{K.set(J,le,0).applyMatrix4(_.mesh.matrixWorld).project(F);const pe=C.left+(K.x+1)\u002F2*C.width,ce=C.top+(1-K.y)\u002F2*C.height;I=Math.min(I,pe),X=Math.min(X,ce),V=Math.max(V,pe),j=Math.max(j,ce)}),{x:I,y:X,w:V-I,h:j-X}},oe=_=>{const C=f.getBoundingClientRect();let I=null;return r.cartes.forEach(X=>{if(X.oeuvre!==_)return;const V=Z(X),j=V.x+V.w\u002F2,J=V.y+V.h\u002F2;j\u003CC.left||j>C.right||J\u003CMath.max(0,C.top)||J>Math.min(window.innerHeight,C.bottom)||(!I||Math.hypot(X.x,X.y)\u003CMath.hypot(I.x,I.y))&&(I=X)}),I},te=_=>{const C=g(i).filter(j=>!j.closest(\"[hidden]\")),I=q[_.oeuvre],X=C.indexOf(I);if(X\u003C0)return;const V=j=>{const J=q.indexOf(C[j]);return J===_.oeuvre?_:oe(J)};ye.ouvrir(C.map(ye.lire),X,I,{rect:j=>{const J=V(j);return J?Z(J):null},cacher:j=>{e.cachee=V(j),e.cachee&&(e.cachee.apparition=0,e.cachee.mesh.material.uniforms.uApparition.value=0)},montrer:()=>{e.cachee&&(e.cachee.apparition=1),e.cachee=null},couleur:j=>{const J=V(j);return J?Math.min(1,J.couleur):0},pause:j=>{e.pause=j,j&&Object.assign(e,{vx:0,vy:0,glisse:!1,survol:null,cible:null}),i.classList.remove(\"is-glisse\")}})};i.__ntOuvrir=_=>{const C=q.indexOf(_);if(C\u003C0)return!1;const I=e.survol&&e.survol.oeuvre===C?e.survol:oe(C);return I?(te(I),!0):!1};const ge=_=>{const C=w.getBoundingClientRect();e.px=(_.clientX-C.left)\u002FC.width*2-1,e.py=-((_.clientY-C.top)\u002FC.height*2-1),e.sx=_.clientX-C.left,e.sy=_.clientY-C.top};u(w,\"pointermove\",_=>{if(ge(_),_.pointerType===\"mouse\"&&(e.dedans=!0),!e.glisse||_.pointerId!==e.id)return;const C=performance.now(),I=_.clientX-e.dernierX,X=_.clientY-e.dernierY,V=Math.max(8,C-e.dernierT)\u002F1e3,j=2*r.halfH\u002F(w.clientHeight||1)*1.1;e.off.x+=I*j,e.off.y-=X*j,e.vx=e.vx*.5+I*j\u002FV*.5,e.vy=e.vy*.5+-X*j\u002FV*.5,e.dernierX=_.clientX,e.dernierY=_.clientY,e.dernierT=C,e.parcours+=Math.hypot(I,X)},{passive:!0}),u(w,\"pointerdown\",_=>{if(!(_.button!==0||e.pause)){if(ge(_),Object.assign(e,{glisse:!0,id:_.pointerId,parcours:0,debutT:performance.now(),dernierT:performance.now(),dernierX:_.clientX,dernierY:_.clientY,vx:0,vy:0,cible:null}),_.pointerType===\"mouse\")try{w.setPointerCapture(_.pointerId)}catch{}i.classList.add(\"is-glisse\")}});const be=(_,C)=>{if(!e.glisse||_.pointerId!==e.id)return;e.glisse=!1,i.classList.remove(\"is-glisse\"),!C&&e.parcours\u003C8&&performance.now()-e.debutT\u003C500?(e.vx=0,e.vy=0,ge(_),e.aOuvrir=Y(e.px,e.py)):(B.matches||performance.now()-e.dernierT>90)&&(e.vx=0,e.vy=0),_.pointerType!==\"mouse\"&&(e.dedans=!1,e.survol=null)};u(w,\"pointerup\",_=>be(_,!1)),u(w,\"click\",()=>{const _=e.aOuvrir;e.aOuvrir=null,_&&te(_)}),u(w,\"pointercancel\",_=>be(_,!0)),u(w,\"pointerleave\",_=>{_.pointerType===\"mouse\"&&!e.glisse&&(e.dedans=!1,e.survol=null)});const Ee=i.querySelector(\".galerie3d__liste\");u(Ee,\"focusin\",_=>{const C=_.target.closest&&_.target.closest(\"[data-nt-oeuvre]\"),I=q.indexOf(C);if(I\u003C0)return;let X=null;r.cartes.forEach(V=>{V.oeuvre===I&&(!X||Math.hypot(V.x,V.y)\u003CMath.hypot(X.x,X.y))&&(X=V)}),X&&(e.cible={x:e.off.x-X.x,y:e.off.y-X.y},e.survol=X,e.clavier=!0,i.classList.add(\"is-clavier\"))}),u(Ee,\"focusout\",()=>{e.clavier=!1,e.cible=null,i.classList.remove(\"is-clavier\"),e.dedans||(e.survol=null)});const me=new ResizeObserver(()=>{r.redisposer=!0});me.observe(w);const xe=new IntersectionObserver(([_])=>{if(r.visible=_.isIntersecting,r.visible&&!r.amorcee){r.amorcee=!0;for(let C=0;C\u003CMath.min(6,n.length);C++)W(C)}},{rootMargin:\"120px\"});xe.observe(i),Object.assign(r,{ro:me,io:xe});const _e=_=>{if(!r.vivant)return;r.raf=window.requestAnimationFrame(_e);const C=Math.min(.05,Math.max(0,(_-(r.dernier||_))\u002F1e3));if(r.dernier=_,!r.visible||document.hidden||e.pause&&ye.couvert())return;r.redisposer&&z();const I=G=>1-Math.exp(-C*G);if(e.pause)e.vx=0,e.vy=0;else if(e.cible)e.off.x+=(e.cible.x-e.off.x)*I(5),e.off.y+=(e.cible.y-e.off.y)*I(5),e.vx=0,e.vy=0;else if(!e.glisse){let G=0,ie=0;if(!B.matches)if(e.dedans){const re=Math.hypot(e.px,e.py),de=.4;if(re>de){const se=Math.min(1,(re-de)\u002F(1-de));G=-(e.px\u002Fre)*se*se*P,ie=-(e.py\u002Fre)*se*se*P}}else e.clavier||(G=R[0],ie=R[1]);e.vx+=(G-e.vx)*I(2.4),e.vy+=(ie-e.vy)*I(2.4),e.off.x+=e.vx*C,e.off.y+=e.vy*C}const X=e.dedans&&!B.matches;e.rotY+=((X?-e.px*.05:0)-e.rotY)*I(3),e.rotX+=((X?e.py*.035:0)-e.rotX)*I(3),F.rotation.set(e.rotX,e.rotY,0);const V=i.dataset.filtre&&i.dataset.filtre!==\"tout\"?i.dataset.filtre:null,j=Math.hypot(e.vx,e.vy),J=r.K,le=r.K*d;r.cartes.forEach(G=>{const ie=o(G.bx+e.off.x+r.spanX\u002F2,r.spanX)-r.spanX\u002F2,re=o(G.by+e.off.y+r.spanY\u002F2,r.spanY)-r.spanY\u002F2,de=-(J*ie*ie+le*re*re);G.x=ie,G.y=re;const se=G===e.survol||h.matches&&!e.pause&&Math.hypot(ie\u002F(r.cellW||1),re\u002F((r.cellW||1)*1.3))\u003C.62,ne=V&&n[G.oeuvre].famille!==V?1:0;G.couleur+=((se?1:0)-G.couleur)*I(se?5:2.2),G.echelle+=((se?1.06:ne?.84:1)-G.echelle)*I(6),G.eteint+=(ne-G.eteint)*I(4),!r.textures[G.oeuvre].demandee&&Math.abs(ie)\u003Cr.halfW+G.w&&Math.abs(re)\u003Cr.halfH+G.h&&W(G.oeuvre),G.apparition+=((r.textures[G.oeuvre].pret&&G!==e.cachee?1:0)-G.apparition)*(G===e.cachee?1:I(2)),G.mesh.position.set(ie,re,de),G.mesh.lookAt(ie+2*J*ie,re+2*le*re,de+1),G.mesh.scale.set(G.w*G.echelle,G.h*G.echelle,1);const ue=G.mesh.material.uniforms;ue.uCouleur.value=G.couleur,ue.uEteint.value=G.eteint,ue.uApparition.value=G.apparition,ue.uBrume.value=Math.min(.72,Math.max(0,(-de-.6)\u002F7));const ae=Math.min(1,j\u002F28)*.35;ue.uFlexX.value=ae,ue.uFlexY.value=ae*.7}),e.dedans&&!e.glisse&&!e.pause&&(e.survol=Y(e.px,e.py));const pe=!!e.survol&&!e.glisse&&!e.pause;e.pause?N(null):e.clavier&&e.survol?N(e.survol,(w.clientWidth||0)\u002F2+24,(w.clientHeight||0)\u002F2+24):N(pe&&e.dedans?e.survol:null,(e.sx||0)+26,(e.sy||0)+26);const ce=v();ce&&(ce.classList.toggle(\"is-galerie\",e.dedans&&!e.pause),ce.classList.toggle(\"is-voir\",e.dedans&&pe),ce.classList.toggle(\"is-glisse\",e.dedans&&e.glisse)),x.render(c,F),i.classList.contains(\"galerie3d--prete\")||(i.classList.add(\"galerie3d--prete\",\"galerie3d--3d\"),i.classList.remove(\"galerie3d--attente\"))};r.raf=window.requestAnimationFrame(_e),A.add(r)},p=i=>{i.vivant=!1,window.cancelAnimationFrame(i.raf),i.ro.disconnect(),i.io.disconnect(),i.ecouteurs.forEach(([w,q,k,x])=>w.removeEventListener(q,k,x)),i.cartes.forEach(w=>w.mesh.material.dispose()),i.geometrie.dispose(),i.textures.forEach(w=>w.texture&&w.texture.dispose()),i.renderer.dispose(),i.canvas.remove(),delete i.el.__ntOuvrir,i.el.classList.remove(\"galerie3d--prete\",\"galerie3d--3d\",\"is-glisse\",\"is-clavier\");const D=v();D&&D.classList.remove(\"is-galerie\",\"is-voir\",\"is-glisse\"),A.delete(i)},L=(i,D)=>{i.dataset.filtre=D,i.querySelectorAll(\"[data-nt-filtre]\").forEach(w=>w.setAttribute(\"aria-pressed\",String(w.dataset.ntFiltre===D))),g(i).forEach(w=>{w.parentElement.hidden=D!==\"tout\"&&w.dataset.famille!==D})};document.addEventListener(\"click\",i=>{const D=i.target.closest&&i.target.closest(\"[data-nt-filtre]\"),w=D&&D.closest(\".galerie3d\");w&&L(w,D.dataset.ntFiltre)});const M=()=>{A.forEach(i=>{(!document.contains(i.el)||!document.contains(i.canvas))&&p(i)}),document.querySelectorAll(\".galerie3d\").forEach(i=>{const D=g(i),w=new Set(D.map(x=>x.dataset.famille));if(i.querySelectorAll(\"[data-nt-filtre]\").forEach(x=>{x.hidden=x.dataset.ntFiltre!==\"tout\"&&!w.has(x.dataset.ntFiltre)}),i.dataset.filtre&&i.dataset.filtre!==\"tout\"&&!w.has(i.dataset.filtre)?L(i,\"tout\"):i.dataset.filtre&&L(i,i.dataset.filtre),i.__ntEnCours)return;const q=U(D),k=[...A].find(x=>x.el===i);if(!(k&&k.signature===q)){if(k)p(k);else if(i.__ntEssai===q)return;i.__ntEssai=q,T(i,q)}})};return window.addEventListener(\"piksl:page\",()=>window.setTimeout(M,60)),new MutationObserver(()=>M()).observe(ee,{childList:!0,subtree:!0}),M(),{synchroniser:M}})(),$e=(()=>{const B=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),h=[\"\u002F\",\"\u002Ftattoo\",\"\u002Fagenda\",\"\u002Fqui-suis-je\",\"\u002Fcontact\"],A={\"\u002F\":[\"Centre\",0],\"\u002Ftattoo\":[\"Nord\",0],\"\u002Fagenda\":[\"Ouest\",270],\"\u002Fqui-suis-je\":[\"Sud\",180],\"\u002Fcontact\":[\"Est\",90]},$=t=>(t||\"\u002F\").replace(\u002F\\\u002F+$\u002F,\"\")||\"\u002F\",S=()=>{const t=$(location.pathname),o=h.indexOf(t),g=h[(o+1)%h.length]||\"\u002F\",U=document.querySelector(`nav.site-nav a[href=\"${g}\"]`),a=g===\"\u002F\"?\"Accueil\":U?(U.querySelector(\"span\")||U).textContent.trim():g.slice(1);document.querySelectorAll(\"a[data-nt-suivant]\").forEach(v=>{v.getAttribute(\"href\")!==g&&v.setAttribute(\"href\",g),v.querySelectorAll(\".pied__suivant-creux, .pied__suivant-plein\").forEach(p=>{p.textContent!==a&&(p.textContent=a)});const T=v.querySelector(\".pied__suivant-cap span\");T&&T.textContent!==A[g][0]&&(T.textContent=A[g][0]),v.style.setProperty(\"--pied-cap\",A[g][1]+\"deg\"),v.setAttribute(\"aria-label\",`Page suivante : ${a}`)}),document.querySelectorAll('.pied__lien[href^=\"\u002F\"]').forEach(v=>$(v.getAttribute(\"href\"))===t?v.setAttribute(\"aria-current\",\"page\"):v.removeAttribute(\"aria-current\"))},d=`\n      precision highp float;\n      uniform sampler2D uMasque; uniform sampler2D uEncre;\n      uniform vec2 uRes; uniform float uTime; uniform vec2 uSouris; uniform float uVie; uniform float uEntree; uniform float uPret; uniform float uClair;\n      const vec3 LUM = vec3(0.2126, 0.7152, 0.0722);\n      vec2 hash(vec2 p){ p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3))); return -1.0 + 2.0 * fract(sin(p) * 43758.5453123); }\n      float noise(vec2 p){\n        const float K1 = 0.366025404; const float K2 = 0.211324865;\n        vec2 i = floor(p + (p.x + p.y) * K1); vec2 a = p - i + (i.x + i.y) * K2;\n        float m = step(a.y, a.x); vec2 o = vec2(m, 1.0 - m);\n        vec2 b = a - o + K2; vec2 c = a - 1.0 + 2.0 * K2;\n        vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);\n        vec3 n = h * h * h * h * vec3(dot(a, hash(i)), dot(b, hash(i + o)), dot(c, hash(i + 1.0)));\n        return dot(n, vec3(70.0)) * 0.5 + 0.5;\n      }\n      float fbm(vec2 p){ return noise(p) * 0.57 + noise(p * 2.03 + 17.1) * 0.29 + noise(p * 4.1 + 31.7) * 0.14; }\n      void main(){\n        vec2 uv = gl_FragCoord.xy \u002F uRes;\n        float aspect = uRes.x \u002F uRes.y;\n        vec2 p = uv * vec2(aspect, 1.0) * 1.4;\n        float t = uTime * 0.045;\n        \u002F* Ronds dans l'eau autour du pointeur. *\u002F\n        vec2 dp = (uv - uSouris) * vec2(aspect, 1.0);\n        float dl = length(dp);\n        \u002F* (17\u002F09, nuit) Piks-l : l'effet était trop gros — ronds serrés, courts et discrets. *\u002F\n        float onde = sin(dl * 110.0 - uTime * 6.0) * exp(-dl * 16.0) * uVie;\n        vec2 dec = dp \u002F (dl + 0.0001) * onde * 0.0022;\n        \u002F* La lettre : masque adouci, lu à travers le bruit — lisière effrangée. *\u002F\n        vec2 derive = (vec2(fbm(p * 2.2 + t), fbm(p * 2.2 + 7.1 - t)) - 0.5) * 0.01;\n        float m = texture2D(uMasque, vec2(uv.x, 1.0 - uv.y) + dec + derive).r;\n        float n = fbm(p * 3.2 + t * 2.0);\n        float lettre = smoothstep(0.43 + (n - 0.5) * 0.2, 0.55 + (n - 0.5) * 0.08, m);\n        \u002F* Un voile d'encre diluée déborde à peine des lettres. *\u002F\n        float voile = smoothstep(0.12, 0.42, m) * (1.0 - lettre) * (0.1 + 0.12 * n);\n        \u002F* L'encre entre dans les lettres : un front mouillé de gauche à droite. *\u002F\n        float front = uEntree * 1.5 - (uv.x * 0.75 + (1.0 - uv.y) * 0.25) + (fbm(p * 1.7 - t) - 0.5) * 0.3;\n        float entree = smoothstep(0.0, 0.14, front);\n        float lisiereFront = exp(-pow((front - 0.07) \u002F 0.05, 2.0)) * (1.0 - step(0.999, uEntree));\n        \u002F* Les pigments : l'encre du design, étirée et déplacée lentement. *\u002F\n        vec2 q = vec2(fbm(p + vec2(0.0, t)), fbm(p + vec2(5.2, 1.3) - t));\n        vec2 ue = vec2(uv.x * 0.8 + 0.1, uv.y * 0.55 + 0.22) + (q - 0.5) * 0.09 + dec * 1.5;\n        vec3 encre = texture2D(uEncre, ue).rgb;\n        float l = dot(encre, LUM);\n        vec3 c = vec3(0.035, 0.16, 0.19) + encre * 2.3;\n        c = mix(c, vec3(0.133, 0.592, 0.659), smoothstep(0.06, 0.26, l) * 0.55);\n        c = mix(c, vec3(0.933, 0.918, 0.882), smoothstep(0.64, 0.82, fbm(p * 1.2 - t * 1.6)) * 0.42);\n        c = mix(c, vec3(0.945, 0.404, 0.259), smoothstep(0.8, 0.88, noise(p * 7.0 + 3.0)) * 0.85);\n        \u002F* Pigment accumulé au bord des lettres. *\u002F\n        float bord = smoothstep(0.3, 0.52, m) - smoothstep(0.52, 0.9, m);\n        c *= 1.0 - bord * 0.5;\n        c = mix(c, vec3(0.945, 0.404, 0.259), lisiereFront * lettre * 0.5);\n        \u002F* Sur le rideau (uClair) : pigment dilué, papier qui transparaît — lisible sur l'encre. *\u002F\n        if (uClair > 0.5) {\n          c = mix(vec3(0.93, 0.918, 0.882), c, 0.28 + 0.3 * smoothstep(0.05, 0.3, l));\n          c = mix(c, vec3(0.945, 0.404, 0.259), smoothstep(0.8, 0.88, noise(p * 7.0 + 3.0)) * 0.7);\n        }\n        float a = lettre * entree * uPret;\n        float av = voile * entree * uPret;\n        vec3 dilue = vec3(0.07, 0.3, 0.34);\n        gl_FragColor = vec4(c * a + dilue * av * (1.0 - a), a + av * (1.0 - a));\n      }`,P=new Set,R=(t,o,g={})=>{const U=document.createElement(\"canvas\");U.className=g.classe||\"pied__encre\",U.setAttribute(\"aria-hidden\",\"true\");const a=window.__ntSansGPU?null:U.getContext(\"webgl\",{premultipliedAlpha:!0,alpha:!0,antialias:!1});if(!a)return null;const v=(l,m)=>{const E=a.createShader(l);return a.shaderSource(E,m),a.compileShader(E),a.getShaderParameter(E,a.COMPILE_STATUS)?E:null},T=v(a.VERTEX_SHADER,\"attribute vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }\"),p=v(a.FRAGMENT_SHADER,d);if(!T||!p)return null;const L=a.createProgram();if(a.attachShader(L,T),a.attachShader(L,p),a.linkProgram(L),!a.getProgramParameter(L,a.LINK_STATUS))return null;a.useProgram(L),a.bindBuffer(a.ARRAY_BUFFER,a.createBuffer()),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),a.STATIC_DRAW);const M=a.getAttribLocation(L,\"p\");a.enableVertexAttribArray(M),a.vertexAttribPointer(M,2,a.FLOAT,!1,0,0);const i={};[\"uMasque\",\"uEncre\",\"uRes\",\"uTime\",\"uSouris\",\"uVie\",\"uEntree\",\"uPret\",\"uClair\"].forEach(l=>{i[l]=a.getUniformLocation(L,l)});const D=l=>{const m=a.createTexture();return a.activeTexture(a.TEXTURE0+l),a.bindTexture(a.TEXTURE_2D,m),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,1,1,0,a.RGBA,a.UNSIGNED_BYTE,new Uint8Array([0,0,0,255])),[a.TEXTURE_WRAP_S,a.TEXTURE_WRAP_T].forEach(E=>a.texParameteri(a.TEXTURE_2D,E,a.CLAMP_TO_EDGE)),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),m},w=D(0),q=D(1);a.uniform1i(i.uMasque,0),a.uniform1i(i.uEncre,1),a.uniform1f(i.uClair,g.clair?1:0);const k=g.duree||2.6,x=g.actif||(()=>!0),n={visible:!1,entree:0,souris:[.5,.5],vie:0,pret:0,masque:!1,t0:performance.now(),raf:0,largeur:0,hauteur:0,vivant:!0,etaitActif:!1,texte:\"\"},f={hote:t,nom:o,canvas:U,gl:a,etat:n},c=new Image;c.crossOrigin=\"anonymous\",c.onload=()=>{n.vivant&&(a.activeTexture(a.TEXTURE1),a.bindTexture(a.TEXTURE_2D,q),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,c),n.pret+=1,H())},c.src=Q.STOCK+\"kit\u002Faquarelle\u002Fnaidi-ink-dark-4k-2560.webp\";const F=()=>Math.min(window.devicePixelRatio||1,1.5);let b=0;const O=async()=>{const l=++b;if(g.ajuster){if(o.dataset.court){o.dataset.long||(o.dataset.long=o.textContent.trim());const I=window.innerWidth\u003C761?o.dataset.court:o.dataset.long;o.textContent!==I&&(o.textContent=I)}const me=getComputedStyle(t),xe=t.clientWidth-parseFloat(me.paddingLeft)-parseFloat(me.paddingRight);o.style.fontSize=\"\";const _e=o.scrollWidth,_=parseFloat(getComputedStyle(o).fontSize);let C=_e&&xe>0?Math.min(_*xe\u002F_e,900):0;if(C&&me.overflow===\"hidden\"){const I=t.clientHeight-parseFloat(me.paddingTop)-parseFloat(me.paddingBottom);I>0&&(C=Math.min(C,I\u002F.9))}C&&(o.style.fontSize=C+\"px\")}const m=getComputedStyle(o);try{await document.fonts.load(`${m.fontWeight} ${Math.round(parseFloat(m.fontSize))}px ${m.fontFamily.split(\",\")[0]}`)}catch{}if(l!==b||!n.vivant)return;const E=U.getBoundingClientRect(),W=o.getBoundingClientRect();if(!E.width||!E.height)return;const z=F();U.width=Math.round(E.width*z),U.height=Math.round(E.height*z),n.largeur=U.width,n.hauteur=U.height;const Y=document.createElement(\"canvas\");Y.width=U.width,Y.height=U.height;const N=Y.getContext(\"2d\"),K=parseFloat(m.fontSize)*z;N.font=`${m.fontWeight} ${K}px ${m.fontFamily}`,\"letterSpacing\"in N&&(N.letterSpacing=`${parseFloat(m.letterSpacing)*z||0}px`),N.textAlign=\"center\",N.textBaseline=\"alphabetic\";const Z=(o.textContent||\"\").trim().toUpperCase();n.texte=Z;const oe=N.measureText(Z),te=oe.actualBoundingBoxAscent||K*.7,ge=oe.actualBoundingBoxDescent||0,be=(W.left-E.left+W.width\u002F2)*z,Ee=(W.top-E.top+W.height\u002F2)*z+(te-ge)\u002F2;N.fillStyle=\"#000\",N.fillRect(0,0,Y.width,Y.height),N.fillStyle=\"#fff\",N.filter=`blur(${Math.max(1.2,K*.009)}px)`,N.fillText(Z,be,Ee),N.filter=\"none\",a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,w),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,Y),n.masque||(n.masque=!0,n.pret+=1,H()),g.rejouer&&(n.entree=0),r(performance.now())},H=()=>{n.pret>=2&&(t.classList.add(\"is-encree\"),u())},r=l=>{n.largeur&&(a.viewport(0,0,n.largeur,n.hauteur),a.uniform2f(i.uRes,n.largeur,n.hauteur),a.uniform1f(i.uTime,B.matches?0:(l-n.t0)\u002F1e3),a.uniform2f(i.uSouris,n.souris[0],n.souris[1]),a.uniform1f(i.uVie,B.matches?0:n.vie),a.uniform1f(i.uEntree,B.matches?1:n.entree),a.uniform1f(i.uPret,n.pret>=2?1:0),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.drawArrays(a.TRIANGLES,0,3))};let e=performance.now();const u=()=>{if(n.raf||!n.vivant)return;const l=m=>{if(n.raf=0,!n.vivant)return;const E=Math.min(.05,(m-e)\u002F1e3);e=m;const W=n.visible&&x();g.rejouer&&W&&!n.etaitActif&&(n.entree=0,(o.textContent||\"\").trim().toUpperCase()!==n.texte&&O()),n.etaitActif=W,W&&n.pret>=2&&(n.entree=Math.min(1,n.entree+E\u002Fk),n.vie=Math.max(0,n.vie-E*.55),r(m)),n.visible&&!B.matches&&(n.raf=window.requestAnimationFrame(l))};n.raf=window.requestAnimationFrame(l)};return t.insertBefore(U,t.firstChild),f.io=new IntersectionObserver(([l])=>{n.visible=l.isIntersecting,n.visible&&u()},{rootMargin:\"60px\"}),f.io.observe(t),f.ro=new ResizeObserver(()=>O()),f.ro.observe(t),f.suivi=new MutationObserver(()=>{(o.textContent||\"\").trim().toUpperCase()!==n.texte&&O()}),f.suivi.observe(o,{childList:!0,characterData:!0,subtree:!0}),f.bouge=l=>{const m=U.getBoundingClientRect();n.souris=[(l.clientX-m.left)\u002Fm.width,1-(l.clientY-m.top)\u002Fm.height],n.vie=Math.min(.7,n.vie+.05),u()},(g.surface||t).addEventListener(\"pointermove\",f.bouge,{passive:!0}),f.surface=g.surface||t,P.add(f),O(),f},y=t=>{t.etat.vivant=!1,window.cancelAnimationFrame(t.etat.raf),t.io.disconnect(),t.ro.disconnect(),t.suivi.disconnect(),t.surface.removeEventListener(\"pointermove\",t.bouge);const o=t.gl.getExtension(\"WEBGL_lose_context\");o&&o.loseContext(),t.canvas.remove(),t.hote.classList.remove(\"is-encree\"),t.hote.__ntEncre=!1,P.delete(t)},s=()=>{S(),P.forEach(t=>{(!document.contains(t.hote)||!document.contains(t.canvas))&&y(t)}),document.querySelectorAll(\".pied__signature\").forEach(t=>{if(t.__ntEncre)return;t.__ntEncre=!0;const o=t.querySelector(\".pied__nom\");o&&R(t,o,{ajuster:!0})}),document.querySelectorAll(\".chargement .chargement__nom\").forEach(t=>{t.__ntEncre||window.__ntChargementFini||(t.__ntEncre=!0,R(t,t,{classe:\"chargement__encre\",clair:!0,duree:1.5}))}),document.querySelectorAll(\".voyage .voyage__titre\").forEach(t=>{if(t.__ntEncre)return;t.__ntEncre=!0;const o=t.closest(\".voyage\"),g=t.closest(\".voyage__contenu\"),U=t.querySelector(\".voyage__titre-texte\");if(!U){t.__ntEncre=!1;return}R(t,U,{classe:\"voyage__encre\",clair:!0,duree:.85,rejouer:!0,surface:o,actif:()=>o.classList.contains(\"is-actif\")&&parseFloat(getComputedStyle(g).opacity)>.15})})};return window.addEventListener(\"piksl:page\",()=>window.setTimeout(s,80)),new MutationObserver(()=>s()).observe(ee,{childList:!0,subtree:!0}),s(),{synchroniser:s}})(),Ie=(()=>{const B=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),h=()=>{document.querySelectorAll(\".hero--page\").forEach(a=>{a.__ntLever||(a.__ntLever=!0,a.classList.add(\"is-attente\"),d())})},A=()=>window.__ntChargementFini&&!document.querySelector(\".voyage.is-actif\")&&!document.querySelector(\".loader\"),$=()=>document.querySelectorAll(\".hero--page.is-attente:not(.is-levee)\").forEach(a=>{a.offsetWidth,a.classList.add(\"is-levee\")});let S=0;const d=()=>{if(S)return;const a=()=>{if(S=0,!!document.querySelector(\".hero--page.is-attente:not(.is-levee)\")){if(A()){$();return}S=window.requestAnimationFrame(a)}};S=window.requestAnimationFrame(a)};document.addEventListener(\"nt:arrivee\",()=>window.requestAnimationFrame($));const P=()=>{const a=document.querySelector(\"main\");a&&(a.id||(a.id=\"contenu\"),a.hasAttribute(\"tabindex\")||a.setAttribute(\"tabindex\",\"-1\"))};P(),document.addEventListener(\"click\",a=>{if(!(a.target.closest&&a.target.closest(\".entete__saut\")))return;const T=document.getElementById(\"contenu\")||document.querySelector(\"main\");if(!T)return;a.preventDefault(),T.focus({preventScroll:!0});const p=window.__ntLenis;p?p.scrollTo(0,{immediate:!0}):window.scrollTo({top:0,behavior:\"instant\"})}),document.addEventListener(\"piksl:page\",()=>window.setTimeout(P,60)),document.addEventListener(\"focusin\",a=>{const v=a.target;if(!v||v===document.body||!v.getBoundingClientRect||v.closest&&v.closest(\".menu-plein, .voyage, .loader, .visionneuse\"))return;const T=v.getBoundingClientRect();if(!T.width&&!T.height)return;const p=T.top\u003C110,L=T.bottom>window.innerHeight-24;if(!p&&!L)return;const M=Math.max(0,window.scrollY+T.top-Math.max(120,(window.innerHeight-T.height)\u002F2)),i=window.__ntLenis;i?i.scrollTo(M,{duration:B.matches?0:.5}):window.scrollTo({top:M,behavior:B.matches?\"instant\":\"smooth\"})});const R=`\n      precision highp float;\n      uniform sampler2D uBaleine; uniform float uTime; uniform float uPret;\n      uniform vec3 uRonds[6];\n      varying vec2 vUv;\n      vec2 hash(vec2 p){ p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3))); return -1.0 + 2.0 * fract(sin(p) * 43758.5453123); }\n      float noise(vec2 p){\n        const float K1 = 0.366025404; const float K2 = 0.211324865;\n        vec2 i = floor(p + (p.x + p.y) * K1); vec2 a = p - i + (i.x + i.y) * K2;\n        float m = step(a.y, a.x); vec2 o = vec2(m, 1.0 - m);\n        vec2 b = a - o + K2; vec2 c = a - 1.0 + 2.0 * K2;\n        vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);\n        vec3 n = h * h * h * h * vec3(dot(a, hash(i)), dot(b, hash(i + o)), dot(c, hash(i + 1.0)));\n        return dot(n, vec3(70.0)) * 0.5 + 0.5;\n      }\n      void main(){\n        float t = uTime;\n        vec2 uv = vUv;\n        \u002F* Houle lente et ronds dans l'eau. *\u002F\n        vec2 flot = vec2(noise(uv * 3.0 + vec2(t * 0.05, 0.0)), noise(uv * 3.0 + vec2(4.0, -t * 0.04))) - 0.5;\n        vec2 dec = flot * 0.014;\n        float ride = 0.0;\n        for (int i = 0; i \u003C 6; i++) {\n          vec3 r = uRonds[i];\n          float age = t - r.z;\n          if (r.z \u003C 0.0 || age > 3.5) continue;\n          vec2 d = uv - r.xy;\n          float l = length(d);\n          float front = age * 0.16;\n          float onde = sin((l - front) * 70.0) * exp(-pow((l - front) * 9.0, 2.0)) * exp(-age * 1.1);\n          dec += d \u002F (l + 0.0001) * onde * 0.01;\n          ride += onde;\n        }\n        vec2 ub = (uv - 0.5) * 1.4 + 0.5 + dec + vec2(0.0, sin(t * 0.5) * 0.008);\n        vec4 w = texture2D(uBaleine, clamp(ub, 0.0, 1.0));\n        float dedans = step(0.0, ub.x) * step(ub.x, 1.0) * step(0.0, ub.y) * step(ub.y, 1.0);\n        float a = w.a * dedans;\n        float gris = dot(w.rgb, vec3(0.2126, 0.7152, 0.0722));\n        \u002F* Caustiques : fines lignes de lumière qui passent sur la baleine. *\u002F\n        float n1 = noise(uv * 7.0 + vec2(t * 0.12, t * 0.07));\n        float n2 = noise(uv * 7.0 - vec2(t * 0.09, -t * 0.11) + 3.3);\n        float caustique = pow(1.0 - abs(n1 - n2), 14.0);\n        vec3 c = vec3(gris) * 0.95 + vec3(0.133, 0.592, 0.659) * caustique * 0.9 + vec3(0.9, 0.95, 0.95) * max(ride, 0.0) * 0.25;\n        float opacite = a * (0.24 + caustique * 0.18) * uPret;\n        gl_FragColor = vec4(c * opacite, opacite);\n      }`,y=\"attribute vec2 p; varying vec2 vUv; void main(){ vUv = vec2(p.x * 0.5 + 0.5, 0.5 - p.y * 0.5); gl_Position = vec4(p, 0.0, 1.0); }\",s=new Set,t=a=>{a.__ntEau=!0;const v=a.querySelector(\".closing__whale\");if(!v)return;const T=document.createElement(\"canvas\");T.className=\"closing__eau\",T.setAttribute(\"aria-hidden\",\"true\");const p=window.__ntSansGPU?null:T.getContext(\"webgl\",{premultipliedAlpha:!0,alpha:!0,antialias:!1});if(!p)return;const L=(O,H)=>{const r=p.createShader(O);return p.shaderSource(r,H),p.compileShader(r),p.getShaderParameter(r,p.COMPILE_STATUS)?r:null},M=L(p.VERTEX_SHADER,y),i=L(p.FRAGMENT_SHADER,R);if(!M||!i)return;const D=p.createProgram();if(p.attachShader(D,M),p.attachShader(D,i),p.linkProgram(D),!p.getProgramParameter(D,p.LINK_STATUS))return;p.useProgram(D),p.bindBuffer(p.ARRAY_BUFFER,p.createBuffer()),p.bufferData(p.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),p.STATIC_DRAW);const w=p.getAttribLocation(D,\"p\");p.enableVertexAttribArray(w),p.vertexAttribPointer(w,2,p.FLOAT,!1,0,0);const q={temps:p.getUniformLocation(D,\"uTime\"),pret:p.getUniformLocation(D,\"uPret\"),ronds:p.getUniformLocation(D,\"uRonds\")},k=p.createTexture(),x={vivant:!0,visible:!1,pret:0,t0:performance.now(),raf:0,ronds:[],dernierRond:0},n=new Image;n.crossOrigin=\"anonymous\",n.onload=()=>{x.vivant&&(p.bindTexture(p.TEXTURE_2D,k),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,p.RGBA,p.UNSIGNED_BYTE,n),[p.TEXTURE_WRAP_S,p.TEXTURE_WRAP_T].forEach(O=>p.texParameteri(p.TEXTURE_2D,O,p.CLAMP_TO_EDGE)),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),x.pret=1,a.classList.add(\"has-eau\"),c())},n.src=Q.vignette(v.currentSrc||v.src,900,1200);const f=O=>{const H=T.getBoundingClientRect(),r=Math.min(window.devicePixelRatio||1,1.5),e=Math.round(T.offsetWidth*r),u=Math.round(T.offsetHeight*r);if(!e||!u||!H.width)return;(T.width!==e||T.height!==u)&&(T.width=e,T.height=u),p.viewport(0,0,e,u);const l=B.matches?0:(O-x.t0)\u002F1e3;p.uniform1f(q.temps,l),p.uniform1f(q.pret,x.pret);const m=new Float32Array(18).fill(-1);x.ronds.slice(-6).forEach((E,W)=>{m[W*3]=E[0],m[W*3+1]=E[1],m[W*3+2]=E[2]}),p.uniform3fv(q.ronds,m),p.clearColor(0,0,0,0),p.clear(p.COLOR_BUFFER_BIT),p.drawArrays(p.TRIANGLES,0,3)},c=()=>{if(x.raf||!x.vivant)return;const O=H=>{x.raf=0,!(!x.vivant||!x.visible||document.hidden)&&(f(H),B.matches||(x.raf=window.requestAnimationFrame(O)))};x.raf=window.requestAnimationFrame(O)},F=O=>{const H=performance.now();if(H-x.dernierRond\u003C140||B.matches)return;const r=T.getBoundingClientRect(),e=r.left+r.width\u002F2,u=r.top+r.height\u002F2,l=T.offsetWidth||1,m=8*Math.PI\u002F180,E=O.clientX-e,W=O.clientY-u,z=E*Math.cos(m)-W*Math.sin(m),Y=E*Math.sin(m)+W*Math.cos(m),N=z\u002Fl+.5,K=Y\u002Fl+.5;N\u003C-.1||N>1.1||K\u003C-.1||K>1.1||(x.dernierRond=H,x.ronds.push([N,K,(H-x.t0)\u002F1e3]),x.ronds.length>6&&x.ronds.shift())};a.addEventListener(\"pointermove\",F,{passive:!0}),v.insertAdjacentElement(\"afterend\",T);const b=new IntersectionObserver(([O])=>{x.visible=O.isIntersecting,x.visible&&c()},{rootMargin:\"80px\"});b.observe(a),s.add({section:a,canvas:T,gl:p,e:x,io:b,bouge:F})},o=()=>{s.forEach(a=>{if(document.contains(a.section)&&document.contains(a.canvas))return;a.e.vivant=!1,window.cancelAnimationFrame(a.e.raf),a.io.disconnect(),a.section.removeEventListener(\"pointermove\",a.bouge);const v=a.gl.getExtension(\"WEBGL_lose_context\");v&&v.loseContext(),a.canvas.remove(),a.section.classList.remove(\"has-eau\"),a.section.__ntEau=!1,s.delete(a)}),document.querySelectorAll(\".closing\").forEach(a=>{a.__ntEau||t(a)})};window.matchMedia(\"(pointer: fine)\").matches&&!B.matches&&import(\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flenis@1.1.13\u002F+esm\").then(a=>{const v=a.default||a.Lenis,T=new v({duration:1.1,easing:M=>Math.min(1,1.001-Math.pow(2,-10*M)),smoothWheel:!0,syncTouch:!1});window.__ntLenis=T;const p=M=>{T.raf(M),window.requestAnimationFrame(p)};window.requestAnimationFrame(p);const L=()=>{ee.classList.contains(\"nt-verrou\")||ee.classList.contains(\"is-loading\")?T.stop():T.start()};new MutationObserver(L).observe(ee,{attributes:!0,attributeFilter:[\"class\"]}),L()}).catch(()=>{});const U=()=>{h(),o()};return window.addEventListener(\"piksl:page\",()=>window.setTimeout(U,80)),new MutationObserver(()=>U()).observe(ee,{childList:!0,subtree:!0}),U(),{synchroniser:U}})(),Oe=(()=>{const B=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),h=window.matchMedia(\"(pointer: fine)\"),A=[[\".works-grid .work-card\",\"--nt-px\",v=>[.055,-.04,.045,-.06][v%4]],[\".portrait-card\",\"--nt-px\",()=>.08],[\".escale__affiche img\",\"--nt-px\",()=>.07],[\".route-panel__image\",\"--nt-px\",()=>.06],[\".hero__baleine\",\"--nt-px\",()=>.22],[\".paper-section[data-numero]\",\"--nt-py\",()=>.14],[\".route-panel__number\",\"--nt-py\",()=>.1]];let $=[],S=0,d=\"\";const P=()=>{if(!document.querySelector(\".hero--page\")){$=[];return}const v=[];A.forEach(([T,p,L])=>{document.querySelectorAll(T).forEach((M,i)=>v.push({el:M,variable:p,f:L(i),derniere:null}))}),$=v},R=()=>{if(S=0,!$.length||B.matches||document.hidden)return;const v=window.innerHeight||1;for(const T of $){const p=T.el.getBoundingClientRect();if(p.bottom\u003C-v*.5||p.top>v*1.5)continue;const L=(p.top+p.height\u002F2-v\u002F2)\u002Fv,M=Math.round(-L*T.f*v*10)\u002F10;M!==T.derniere&&(T.el.style.setProperty(T.variable,M+\"px\"),T.derniere=M)}},y=()=>{S||(S=window.requestAnimationFrame(R))};window.addEventListener(\"scroll\",y,{passive:!0}),window.addEventListener(\"resize\",y,{passive:!0});const s=()=>{window.__ntLenis&&!window.__ntLenis.__ntExperience&&(window.__ntLenis.__ntExperience=!0,window.__ntLenis.on(\"scroll\",y))};s(),document.addEventListener(\"nt:arrivee\",()=>{s(),P(),y()}),new MutationObserver(()=>{const v=document.querySelectorAll(\".work-card, .escale, .portrait-card\").length+\":\"+location.pathname;v!==d&&(d=v,P(),y())}).observe(document.body,{childList:!0,subtree:!0}),window.addEventListener(\"piksl:page\",()=>window.setTimeout(()=>{P(),y()},150));const o=()=>document.querySelector(\".cursor\");document.addEventListener(\"pointerover\",v=>{if(!h.matches)return;const T=o();if(!T)return;const p=v.target.closest&&v.target.closest(\".work-card, .escale__affiche, .portrait-card\");T.classList.toggle(\"is-voir\",!!p&&!document.querySelector(\".galerie3d.is-glisse\"))}),document.addEventListener(\"pointerout\",v=>{if(!h.matches)return;const T=o();if(!T)return;v.relatedTarget&&v.relatedTarget.closest&&v.relatedTarget.closest(\".work-card, .escale__affiche, .portrait-card\")||T.classList.remove(\"is-voir\")});const g=\"b2c5a08c\";let U=null;const a=()=>{U||B.matches||!document.querySelector(\".hero--page\")||(U=import(\"\u002Fnt\u002Fexperience.js?v=\"+g).catch(()=>{U=null}))};return a(),document.addEventListener(\"nt:arrivee\",a),P(),y(),{collecter:P,demander:y}})(),Xe=(()=>{const B={\"\u002F\":[\"Centre\",0],\"\u002Ftattoo\":[\"Nord\",0],\"\u002Fagenda\":[\"Ouest\",270],\"\u002Fqui-suis-je\":[\"Sud\",180],\"\u002Fcontact\":[\"Est\",90]},h=s=>(s||\"\u002F\").replace(\u002F\\\u002F+$\u002F,\"\")||\"\u002F\";let A=null;const $=s=>{const t=document.querySelector(\".entete__nav\");if(!t)return;const o=t.querySelector(\".entete__curseur\"),g=s||t.querySelector('a[aria-current=\"page\"]');if(!o)return;if(t.querySelectorAll(\"a\").forEach(v=>v.classList.toggle(\"is-sous-curseur\",v===g)),!g){o.style.opacity=\"0\";return}const U=t.getBoundingClientRect(),a=g.getBoundingClientRect();o.style.width=a.width+\"px\",o.style.transform=`translateX(${a.left-U.left}px)`,o.style.opacity=\"1\"},S=()=>{const s=h(location.pathname),t=B[s]||[\"Ailleurs\",0];document.querySelectorAll(\".entete__cap\").forEach(o=>{const g=o.querySelector(\".entete__cap-texte\"),U=s===\"\u002F\"?\"Accueil\":(document.querySelector(`.entete__nav a[href=\"${s}\"] span`)||{}).textContent||\"\",a=U?`${t[0]} · ${U}`:t[0];g&&g.textContent!==a&&(g.textContent=a);const v=o.querySelector(\"svg\");v&&(v.style.transform=`rotate(${t[1]}deg)`)}),document.querySelectorAll(\".menu-plein__lien\").forEach(o=>h(o.getAttribute(\"href\"))===s?o.setAttribute(\"aria-current\",\"page\"):o.removeAttribute(\"aria-current\")),$()},d=s=>{const t=document.querySelector(\".menu-plein__apercu\");if(!t)return;t.querySelectorAll(\"img\").forEach(U=>U.classList.toggle(\"is-vue\",U.dataset.ntPour===s));const o=document.querySelector(`.menu-plein__lien[href=\"${s}\"]`),g=t.querySelector(\".menu-plein__apercu-cap\");g&&o&&(g.textContent=o.querySelector(\"small\").textContent+\" — \"+o.querySelector(\"span\").textContent)},P=()=>{const s=document.getElementById(\"menu-plein\"),t=document.querySelector(\".entete__menu\");if(!s||!t||s.classList.contains(\"is-ouvert\"))return;const o=t.getBoundingClientRect();s.style.setProperty(\"--mx\",`${o.left+o.width\u002F2}px`),s.style.setProperty(\"--my\",`${o.top+o.height\u002F2}px`),A=document.activeElement,s.hidden=!1;try{we.synchroniser()}catch{}s.offsetWidth,s.classList.add(\"is-ouvert\"),t.setAttribute(\"aria-expanded\",\"true\"),t.querySelector(\".entete__menu-texte\").textContent=\"Fermer\",ee.classList.add(\"menu-ouvert\",\"nt-verrou\"),s.querySelectorAll(\".menu-plein__apercu img\").forEach(g=>{g.loading=\"eager\"}),d(h(location.pathname)),typeof we!=\"undefined\"&&window.setTimeout(()=>we.synchroniser(),30),window.setTimeout(()=>{const g=s.querySelector(\".menu-plein__lien\");g&&g.focus({preventScroll:!0})},420)},R=s=>{const t=document.getElementById(\"menu-plein\"),o=document.querySelector(\".entete__menu\");if(!t||t.hidden)return;t.classList.remove(\"is-ouvert\"),o&&(o.setAttribute(\"aria-expanded\",\"false\"),o.querySelector(\".entete__menu-texte\").textContent=\"Menu\"),ee.classList.remove(\"menu-ouvert\",\"nt-verrou\");const g=()=>{t.classList.contains(\"is-ouvert\")||(t.hidden=!0)};s?(t.style.transition=\"none\",g(),t.offsetWidth,t.style.transition=\"\"):window.setTimeout(g,1e3),!s&&A&&document.contains(A)&&A.focus({preventScroll:!0})};window.__ntMenu={ouvrir:P,fermer:R},document.addEventListener(\"click\",s=>{const t=s.target;if(!t.closest)return;if(t.closest(\".entete__menu\")){const g=document.getElementById(\"menu-plein\");g&&g.classList.contains(\"is-ouvert\")?R():P();return}const o=t.closest(\".menu-plein a[href]\");if(o){const g=o.getAttribute(\"href\")||\"\";(!g.startsWith(\"\u002F\")||h(g.split(\"#\")[0])===h(location.pathname))&&R(!g.startsWith(\"\u002F\"))}}),document.addEventListener(\"pointerover\",s=>{s.target.closest&&s.target.closest(\".entete__menu\")&&document.querySelectorAll(\".menu-plein__apercu img\").forEach(t=>{t.loading=\"eager\"})},{once:!1,passive:!0}),document.addEventListener(\"pointerover\",s=>{const t=s.target.closest&&s.target.closest(\".menu-plein__lien\");t&&d(t.getAttribute(\"href\"));const o=s.target.closest&&s.target.closest(\".entete__nav a\");o&&$(o)}),document.addEventListener(\"pointerout\",s=>{s.target.closest&&s.target.closest(\".entete__nav\")&&!(s.relatedTarget&&s.relatedTarget.closest&&s.relatedTarget.closest(\".entete__nav\"))&&$()}),document.addEventListener(\"focusin\",s=>{const t=s.target.closest&&s.target.closest(\".menu-plein__lien\");t&&d(t.getAttribute(\"href\"))}),document.addEventListener(\"keydown\",s=>{const t=document.getElementById(\"menu-plein\");if(!(!t||t.hidden)){if(s.key===\"Escape\"){s.preventDefault(),R();return}if(s.key===\"Tab\"){const o=[document.querySelector(\".entete__menu\"),...t.querySelectorAll(\"a[href]\")].filter(Boolean),g=o.indexOf(document.activeElement);s.shiftKey&&g\u003C=0?(s.preventDefault(),o[o.length-1].focus()):!s.shiftKey&&g===o.length-1&&(s.preventDefault(),o[0].focus())}}});let y=!1;return window.addEventListener(\"scroll\",()=>{const s=window.scrollY>40;s!==y&&(y=s,ee.classList.toggle(\"is-defile\",s))},{passive:!0}),window.addEventListener(\"resize\",()=>$()),window.addEventListener(\"piksl:page\",()=>window.setTimeout(S,60)),new MutationObserver(()=>{document.querySelector(\".entete\")&&!document.querySelector(\".entete\").__ntVu&&(document.querySelector(\".entete\").__ntVu=!0,S())}).observe(ee,{childList:!0,subtree:!0}),document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>$()),S(),{ouvrir:P,fermer:R,etat:S}})(),ke=(()=>{const B=document.querySelector(\".loader.chargement\");if(!B||window.__ntChargementFini)return null;const h=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),A=h.matches?600:3e3,$=11e3,S=performance.now()-Math.min(performance.now(),1200);B.classList.add(\"is-pilote\");const d={progres:0,affiche:0,trou:0,lavage:0,hero:0,signaux:0,total:5,gl:null,pret:[0,0],raf:0,fini:!1},P=()=>{d.signaux=Math.min(d.total,d.signaux+1)};document.fonts&&document.fonts.ready?document.fonts.ready.then(P,P):P(),document.readyState===\"complete\"?P():window.addEventListener(\"load\",P,{once:!0});try{we.chargerThree().then(P,P)}catch{P()}const R=`\n      precision highp float;\n      uniform sampler2D uEncre; uniform sampler2D uBaleine;\n      uniform vec2 uRes; uniform float uDpr; uniform float uTime; uniform vec4 uRect; uniform vec2 uEncreTaille;\n      uniform float uProgres; uniform float uTrou; uniform float uLavage; uniform float uHero; uniform float uPretE; uniform float uPretB;\n      const vec3 ENCRE = vec3(0.027, 0.035, 0.043);\n      vec2 hash(vec2 p){ p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3))); return -1.0 + 2.0 * fract(sin(p) * 43758.5453123); }\n      float noise(vec2 p){\n        const float K1 = 0.366025404; const float K2 = 0.211324865;\n        vec2 i = floor(p + (p.x + p.y) * K1); vec2 a = p - i + (i.x + i.y) * K2;\n        float m = step(a.y, a.x); vec2 o = vec2(m, 1.0 - m);\n        vec2 b = a - o + K2; vec2 c = a - 1.0 + 2.0 * K2;\n        vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);\n        vec3 n = h * h * h * h * vec3(dot(a, hash(i)), dot(b, hash(i + o)), dot(c, hash(i + 1.0)));\n        return dot(n, vec3(70.0)) * 0.5 + 0.5;\n      }\n      float fbm(vec2 p){ return noise(p) * 0.57 + noise(p * 2.03 + 17.1) * 0.29 + noise(p * 4.1 + 31.7) * 0.14; }\n      vec2 couvrir(vec2 uv){\n        float ra = uRes.x \u002F uRes.y; float ta = uEncreTaille.x \u002F uEncreTaille.y;\n        vec2 s = ra > ta ? vec2(1.0, ta \u002F ra) : vec2(ra \u002F ta, 1.0);\n        return (uv - 0.5) * s + 0.5;\n      }\n      void main(){\n        vec2 px = vec2(gl_FragCoord.x, uRes.y * uDpr - gl_FragCoord.y) \u002F uDpr;\n        vec2 uv = px \u002F uRes;\n        float t = uTime;\n        vec2 p = uv * vec2(uRes.x \u002F uRes.y, 1.0) * 1.3;\n        vec2 q = vec2(fbm(p + t * 0.03), fbm(p + 5.2 - t * 0.03));\n        vec3 fond = mix(ENCRE, texture2D(uEncre, couvrir(uv + (q - 0.5) * 0.03)).rgb, uPretE);\n        fond *= 1.0 - 0.35 * smoothstep(0.35, 0.95, length((uv - 0.5) * vec2(1.2, 1.0)));\n        \u002F* Le lavage de sortie : l'encre du fond se retire en lisières mouillées. *\u002F\n        float fondA = 1.0; float bandeL = 0.0;\n        if (uLavage > 0.0) {\n          vec2 centre = uRect.xy + uRect.zw * 0.5;\n          float d = length((px - centre) \u002F length(uRes));\n          float front = uLavage * 1.6 - (fbm(p * 1.3 + t * 0.2) * 0.75 + (1.0 - d) * 0.45);\n          fondA = 1.0 - smoothstep(0.0, 0.1, front);\n          bandeL = exp(-pow((front - 0.02) \u002F 0.03, 2.0)) * fondA;\n        }\n        vec3 c = mix(fond, fond * 0.5 + vec3(0.945, 0.404, 0.259) * 0.12, bandeL);\n        float alpha = fondA;\n        \u002F* La baleine : sa forme s'encre depuis le cœur, puis la couleur la gagne ; à la\n           sortie elle prend l'état du hero (gris, cercle de couleur à 58 % \u002F 48 %). *\u002F\n        vec2 qb = (px - uRect.xy) \u002F max(uRect.zw, vec2(1.0));\n        if (qb.x > 0.0 && qb.x \u003C 1.0 && qb.y > 0.0 && qb.y \u003C 1.0 && uPretB > 0.0) {\n          vec4 w = texture2D(uBaleine, clamp(qb + (q - 0.5) * 0.004 * (1.0 - uHero), 0.0, 1.0));\n          float l = dot(w.rgb, vec3(0.2126, 0.7152, 0.0722));\n          vec3 gris = vec3(clamp((l * 0.5 - 0.5) * 1.12 + 0.5, 0.0, 1.0));\n          vec2 dc = qb - vec2(0.55, 0.5);\n          float r = length(dc) \u002F 0.62;\n          float nf = fbm(dc * 5.0 + t * 0.2);\n          float seuilF = clamp(uProgres \u002F 0.45, 0.0, 1.0) * 1.4;\n          float frontF = r + (nf - 0.5) * 0.4;\n          float forme = uHero > 0.0 ? 1.0 : smoothstep(seuilF, seuilF - 0.16, frontF);\n          float lisiereF = exp(-pow((frontF - seuilF + 0.08) \u002F 0.05, 2.0)) * (1.0 - step(0.999, seuilF \u002F 1.4));\n          float seuilC = clamp((uProgres - 0.35) \u002F 0.65, 0.0, 1.0) * 1.35;\n          float nc = fbm(dc * 6.0 + t * 0.25);\n          float front = r + (nc - 0.5) * 0.35;\n          float teinte = smoothstep(seuilC, seuilC - 0.18, front);\n          float lisiere = exp(-pow((front - seuilC + 0.09) \u002F 0.05, 2.0)) * step(0.01, seuilC) * (1.0 - step(0.999, seuilC \u002F 1.35));\n          float heroC = 1.0 - smoothstep(0.205, 0.215, length(qb - vec2(0.58, 0.48)));\n          teinte = mix(teinte, heroC, uHero);\n          lisiere *= 1.0 - uHero;\n          vec3 b = mix(gris, w.rgb, teinte);\n          b = mix(b, b * 0.5 + vec3(0.945, 0.404, 0.259) * 0.25, max(lisiere, lisiereF * 0.8));\n          float wa = w.a * uPretB * forme;\n          c = c * alpha * (1.0 - wa) + b * wa;\n          alpha = wa + alpha * (1.0 - wa);\n          c = alpha > 0.0 ? c \u002F alpha : c;\n        }\n        \u002F* Sortie sans hero sur la page : l'eau ouvre l'encre depuis la baleine. *\u002F\n        if (uTrou > 0.0) {\n          vec2 centre = uRect.xy + uRect.zw * 0.5;\n          vec2 d = px - centre;\n          float dist = length(d);\n          float R = uTrou * length(uRes) * 1.05;\n          float ang = atan(d.y, d.x);\n          float amp = min(min(uRes.x, uRes.y) * 0.12, R * 0.5 + 3.0);\n          float n = fbm(vec2(cos(ang), sin(ang)) * 2.6 + t * 0.7) * 0.65 + fbm(d * 0.011 + t) * 0.35;\n          float bord = dist - R + amp * (1.0 - n);\n          float trou = smoothstep(-2.0, 14.0, bord);\n          float bande = exp(-pow((bord - 8.0) \u002F 9.0, 2.0)) * trou;\n          c = mix(c, c * 0.5, bande * 0.75);\n          c = mix(c, vec3(0.945, 0.404, 0.259), bande * 0.22);\n          alpha *= trou;\n        }\n        gl_FragColor = vec4(c * alpha, alpha);\n      }`,y={},s=document.createElement(\"canvas\");s.className=\"chargement__toile\",s.setAttribute(\"aria-hidden\",\"true\");const t=window.__ntSansGPU?null:s.getContext(\"webgl\",{premultipliedAlpha:!0,alpha:!0,antialias:!1}),o=B.querySelector(\".chargement__boussole\");if(t){const M=(q,k)=>{const x=t.createShader(q);return t.shaderSource(x,k),t.compileShader(x),t.getShaderParameter(x,t.COMPILE_STATUS)?x:null},i=M(t.VERTEX_SHADER,\"attribute vec2 p; void main(){ gl_Position = vec4(p, 0.0, 1.0); }\"),D=M(t.FRAGMENT_SHADER,R),w=i&&D&&t.createProgram();if(w)if(t.attachShader(w,i),t.attachShader(w,D),t.linkProgram(w),t.getProgramParameter(w,t.LINK_STATUS)){t.useProgram(w),t.bindBuffer(t.ARRAY_BUFFER,t.createBuffer()),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),t.STATIC_DRAW);const q=t.getAttribLocation(w,\"p\");t.enableVertexAttribArray(q),t.vertexAttribPointer(q,2,t.FLOAT,!1,0,0),[\"uEncre\",\"uBaleine\",\"uRes\",\"uDpr\",\"uTime\",\"uRect\",\"uEncreTaille\",\"uProgres\",\"uTrou\",\"uLavage\",\"uHero\",\"uPretE\",\"uPretB\"].forEach(x=>{y[x]=t.getUniformLocation(w,x)}),t.uniform1i(y.uEncre,0),t.uniform1i(y.uBaleine,1),d.gl=t;const k=(x,n,f)=>{const c=t.createTexture();t.activeTexture(t.TEXTURE0+x),t.bindTexture(t.TEXTURE_2D,c),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array([7,9,11,255]));const F=new Image;F.crossOrigin=\"anonymous\",F.onload=()=>{t.activeTexture(t.TEXTURE0+x),t.bindTexture(t.TEXTURE_2D,c),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,F),[t.TEXTURE_WRAP_S,t.TEXTURE_WRAP_T].forEach(b=>t.texParameteri(t.TEXTURE_2D,b,t.CLAMP_TO_EDGE)),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),f(F),P(),d.pret[0]&&d.pret[1]&&B.classList.add(\"is-webgl\")},F.onerror=P,F.src=n};k(0,Q.STOCK+\"kit\u002Faquarelle\u002Fnaidi-ink-dark-4k-2560.webp\",x=>{d.pret[0]=1,t.uniform2f(y.uEncreTaille,x.naturalWidth,x.naturalHeight)}),k(1,Q.vignette(Q.STOCK+\"kit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\",1100,1200),()=>{d.pret[1]=1}),B.insertBefore(s,o)}else d.gl=null,P(),P();else d.gl=null,P(),P()}else P(),P();const g=B.querySelector(\".chargement__pourcent\"),U=B.querySelector(\".chargement__ligne i\"),a=B.querySelector(\".chargement__baleine--couleur\");let v=performance.now();const T=M=>{const i=M-S,D=Math.min(.1,Math.max(0,(M-v)\u002F1e3));v=M;const w=d.forcer?1:Math.min(.97,Math.max(d.signaux\u002Fd.total,Math.min(.9,i\u002F11e3)),i\u002FA);d.affiche+=(w-d.affiche)*(1-Math.exp(-D*4)),d.forcer&&(d.affiche=Math.min(1,d.affiche+D*.9));const q=Math.round(d.affiche*100);if(g&&g.textContent!==String(q).padStart(3,\"0\")&&(g.textContent=String(q).padStart(3,\"0\")),U&&(U.style.transform=`scaleX(${d.affiche})`),a&&(a.style.clipPath=`circle(${(d.affiche*48).toFixed(1)}% at 55% 50%)`),d.gl&&d.pret[0]+d.pret[1]>0){const k=Math.min(window.devicePixelRatio||1,1.25),x=Math.round(window.innerWidth*k),n=Math.round(window.innerHeight*k);(s.width!==x||s.height!==n)&&(s.width=x,s.height=n);const f=o.getBoundingClientRect();t.viewport(0,0,x,n),t.uniform2f(y.uRes,window.innerWidth,window.innerHeight),t.uniform1f(y.uDpr,k),t.uniform1f(y.uTime,h.matches?0:M\u002F1e3),t.uniform4f(y.uRect,f.left,f.top,f.width,f.height),t.uniform1f(y.uProgres,d.affiche),t.uniform1f(y.uTrou,d.trou),t.uniform1f(y.uLavage,d.lavage),t.uniform1f(y.uHero,d.hero),t.uniform1f(y.uPretE,d.pret[0]),t.uniform1f(y.uPretB,d.pret[1]),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLES,0,3)}},p=M=>{d.fini||(T(M),d.raf=window.requestAnimationFrame(p))};d.raf=window.requestAnimationFrame(p);const L=()=>new Promise(M=>{const i=()=>{const D=performance.now()-S;if((d.signaux>=d.total||D>$)&&D>=A&&(d.forcer=!0),d.forcer&&d.affiche>=1){B.classList.add(\"is-sortie\");const w=document.querySelector(\".hero .compass\"),q=w&&w.getBoundingClientRect(),k=d.gl&&B.classList.contains(\"is-webgl\"),x=()=>{d.fini=!0,window.cancelAnimationFrame(d.raf);const b=d.gl&&d.gl.getExtension(\"WEBGL_lose_context\");b&&b.loseContext(),M()},n=b=>b\u003C.5?4*b*b*b:1-Math.pow(-2*b+2,3)\u002F2;if(document.dispatchEvent(new CustomEvent(\"nt:arrivee\")),q&&q.width>10&&q.bottom>0&&q.top\u003Cwindow.innerHeight&&!h.matches){const b=o.getBoundingClientRect();Object.assign(o.style,{left:b.left+\"px\",top:b.top+\"px\",width:b.width+\"px\",transform:\"none\"});const O=performance.now(),H=1700,r=e=>{const u=Math.min(1,(e-O)\u002FH),l=n(u);o.style.left=b.left+(q.left-b.left)*l+\"px\",o.style.top=b.top+(q.top-b.top)*l+\"px\",o.style.width=b.width+(q.width-b.width)*l+\"px\",d.hero=Math.min(1,u*1.6),d.lavage=Math.max(0,(u-.25)\u002F.75),k||(B.style.opacity=String(1-Math.max(0,(u-.5)\u002F.5))),u>=1?B.animate([{opacity:1},{opacity:0}],{duration:260,easing:\"ease\",fill:\"forwards\"}).finished.then(x):window.requestAnimationFrame(r)};window.requestAnimationFrame(r);return}const f=performance.now(),c=h.matches?300:1300,F=b=>{const O=Math.min(1,(b-f-250)\u002Fc);k?d.trou=Math.max(0,n(Math.max(0,O))):B.style.opacity=String(1-Math.max(0,O)),O>=1?x():window.requestAnimationFrame(F)};window.requestAnimationFrame(F);return}window.requestAnimationFrame(i)};i()});return window.__ntChargement={sortir:L},{sortir:L}})()})();",{"barre":23,"splash":15},false,{"realisation.fil_ariane_accueil":25,"confidentialite.seo_titre":26,"billet.seo_titre_suffixe":27,"produit.seo_titre_suffixe":28,"boutique.seo_titre":29,"blog.seo_titre":30,"commun.filtre_aria":31,"flash.fil_ariane_label":32,"global.logo":33,"contact.seo_titre":34,"journal.seo_titre":35,"portfolio.surtitre":36,"erreur404.seo_titre":37,"apropos.seo_titre":38,"panier.seo_titre":39,"accueil.hero_image_alt":40,"mentions.seo_titre":41,"article.seo_titre_defaut":42,"global.logo_aria":43,"billet.seo_description_debut":44,"produit.seo_description_repli":45,"mentions.seo_description":46,"journal.seo_description":47,"panier.seo_description":48,"accueil.hero_surtitre":49,"article.seo_description_defaut":50,"flash.fil_ariane_accueil":25,"blog.seo_description":51,"boutique.seo_description":52,"realisation.fil_ariane_portfolio":53,"confidentialite.seo_description":54,"portfolio.titre":55,"commun.filtre_tout":56,"contact.seo_description":57,"erreur404.seo_description":58,"apropos.seo_description":59,"billet.seo_description_fin":60,"journal.hero_surtitre":61,"accueil.hero_titre":62,"contact.seo_og_description":63,"apropos.hero_image_alt":64,"article.introuvable_titre":65,"commun.carte_article_type_convention":66,"global.nav_portfolio":53,"erreur404.seo_og_titre":37,"mentions.seo_og_titre":41,"realisation.titre_defaut":67,"flash.fil_ariane_portfolio":53,"blog.hero_titre":68,"produit.seo_og_titre_suffixe":69,"portfolio.description":70,"boutique.surtitre":71,"panier.titre":72,"confidentialite.seo_og_titre":26,"portfolio.onglet_flashs":73,"article.introuvable_texte":74,"erreur404.seo_og_description":75,"contact.hero_surtitre":76,"accueil.hero_texte":77,"realisation.vignette_alt_repli":78,"flash.fil_ariane_flashs":73,"confidentialite.seo_og_description":54,"global.nav_boutique":79,"produit.seo_og_description_repli":80,"journal.hero_titre":81,"mentions.seo_og_description":46,"apropos.hero_surtitre":82,"panier.compteur_oeuvre":83,"commun.carte_article_type_guest":84,"boutique.titre":85,"blog.hero_texte":86,"billet.seo_og_titre_defaut":87,"apropos.hero_titre":88,"flash.image_alt_repli":89,"article.introuvable_bouton":90,"boutique.introduction":91,"portfolio.onglet_realisations":92,"confidentialite.surtitre":93,"billet.jsonld_auteur_nom":94,"mentions.surtitre":95,"contact.hero_titre":96,"global.nav_journal":97,"produit.erreur_introuvable":98,"panier.compteur_oeuvres":99,"journal.hero_texte":100,"accueil.hero_bouton_portfolio":101,"erreur404.code":102,"blog.filtre_tous":103,"realisation.info_zone_label":104,"commun.carte_article_reservations_ouvertes":105,"apropos.hero_texte":106,"mentions.titre":107,"global.nav_apropos":108,"produit.image_alt_vue":109,"billet.jsonld_editeur_nom":94,"contact.hero_texte_1":110,"commun.carte_article_complet":111,"confidentialite.titre":112,"flash.image_alt_vue":109,"portfolio.filtre_statut_label":113,"boutique.filtre_tout":114,"panier.compteur_selectionnee":115,"blog.vide_titre_filtre":116,"erreur404.titre":117,"realisation.zone_avant_bras":118,"accueil.hero_bouton_boutique":119,"article.type_defaut":66,"journal.filtre_prochaines":120,"blog.vide_texte_filtre":121,"commun.carte_article_lien":122,"apropos.bio_image_alt":123,"produit.image_precedente_aria":124,"erreur404.texte":125,"billet.erreur_introuvable":126,"contact.hero_texte_2":127,"article.statut_ouvert":105,"boutique.skate_surtitre":128,"global.nav_contact":129,"realisation.zone_bras":130,"portfolio.filtre_statut_tous":131,"flash.statut_disponible":132,"accueil.univers_surtitre":133,"journal.filtre_archives":134,"mentions.editeur_titre":135,"panier.compteur_selectionnees":136,"confidentialite.intro":137,"contact.formulaire_titre":138,"realisation.zone_cuisse":139,"accueil.univers_titre":140,"apropos.bio_surtitre":141,"produit.image_suivante_aria":142,"portfolio.statut_disponible":132,"article.statut_complet":143,"panier.lien_continuer":144,"billet.temps_lecture":145,"blog.vide_titre":146,"boutique.skate_dimensions_libelle":147,"commun.carte_flash_alt_prefixe":89,"confidentialite.collecte_titre":148,"mentions.editeur_nom_libelle":149,"journal.liste_vide_prochaines":150,"global.panier_aria":151,"flash.statut_reserve":152,"erreur404.bouton_accueil":43,"boutique.skate_dimensions":153,"erreur404.nav_surtitre":154,"blog.vide_texte":155,"panier.confirmation_titre":156,"mentions.editeur_nom":157,"apropos.bio_titre":158,"journal.liste_vide_archives":159,"billet.partage_label":160,"commun.carte_flash_taille_libelle":161,"article.statut_passe":162,"produit.surtitre":163,"global.bouton_contact":164,"portfolio.statut_reserve":152,"flash.statut_tatoue":165,"confidentialite.collecte_intro":166,"contact.formulaire_texte":167,"realisation.zone_mollet":168,"accueil.univers_texte":169,"global.menu_ouvrir_aria":170,"mentions.editeur_activite_libelle":171,"article.infos_titre":172,"blog.carte_bouton":173,"panier.confirmation_texte":174,"erreur404.lien_portfolio":53,"realisation.zone_dos":175,"accueil.portfolio_surtitre":176,"boutique.skate_technique_libelle":177,"apropos.bio_texte_1":178,"flash.statut_inconnu":179,"portfolio.statut_tatoue":165,"commun.carte_flash_zones_libelle":180,"journal.carte_type_defaut":66,"confidentialite.collecte_nom_terme":181,"produit.statut_disponible":132,"billet.partage_twitter_aria":182,"contact.form_nom_libelle":183,"portfolio.filtre_couleur_label":184,"accueil.portfolio_titre":185,"boutique.skate_technique":186,"panier.vide_titre":187,"produit.statut_vendue":188,"mentions.editeur_activite":189,"erreur404.lien_boutique":79,"billet.partage_facebook_aria":190,"commun.carte_flash_reserver":191,"confidentialite.collecte_nom_texte":192,"apropos.bio_texte_2":193,"global.menu_fermer_aria":194,"contact.form_nom_placeholder":195,"journal.carte_statut_ouvert":105,"article.infos_adresse_titre":196,"realisation.zone_epaule":197,"flash.info_reference_label":198,"journal.carte_statut_complet":143,"accueil.portfolio_texte":199,"apropos.bio_texte_3":200,"contact.form_nom_erreur":201,"realisation.zone_poignet":202,"commun.carte_produit_piece_unique":128,"flash.info_type_label":203,"erreur404.lien_journal":97,"boutique.statut_disponible":132,"mentions.editeur_statut_libelle":204,"portfolio.filtre_couleur_tous":205,"panier.vide_texte":206,"article.infos_horaires_titre":207,"confidentialite.collecte_email_terme":208,"global.nav_panier":209,"produit.statut_reservee":210,"billet.partage_lien_aria":211,"flash.type_noir_gris":212,"confidentialite.collecte_email_texte":213,"article.infos_site_titre":214,"commun.carte_produit_vendue":188,"global.header_nav_aria":215,"apropos.bio_texte_4":216,"realisation.zone_cheville":217,"accueil.portfolio_statut_disponible":132,"mentions.statut":218,"billet.partage_copie_confirmation":219,"portfolio.filtre_couleur_couleur":220,"journal.carte_statut_passe":162,"erreur404.lien_contact":129,"boutique.statut_vendu":221,"panier.vide_bouton":222,"produit.piece_unique":128,"contact.form_email_libelle":223,"article.infos_site_bouton":224,"portfolio.filtre_couleur_noir_gris":212,"boutique.skate_bouton":225,"realisation.zone_non_specifiee":226,"commun.carte_produit_disponible":132,"produit.dimensions_titre":227,"confidentialite.collecte_telephone_terme":228,"panier.article_quantite_libelle":229,"apropos.demarche_surtitre":230,"mentions.editeur_adresse_libelle":231,"journal.carte_bouton_projet":232,"global.footer_baseline":233,"flash.type_couleur":220,"accueil.portfolio_statut_tatoue":165,"contact.form_email_placeholder":234,"billet.contenu_vide":235,"boutique.tableaux_titre":236,"global.footer_titre_navigation":237,"produit.dimensions_defaut":238,"commun.statut_flash_disponible":132,"journal.carte_bouton_details":122,"contact.adresse":239,"article.contexte_titre":240,"contact.form_email_erreur_requis":241,"realisation.info_type_label":203,"portfolio.flash_reserver_bouton":191,"apropos.demarche_titre":242,"confidentialite.collecte_telephone_texte":243,"billet.retour_bouton":244,"accueil.portfolio_flash_titre_defaut":245,"panier.article_retirer":246,"flash.info_description_label":247,"portfolio.flashs_vide":248,"mentions.editeur_email_libelle":249,"apropos.demarche_bloc1_titre":250,"confidentialite.collecte_projet_terme":251,"journal.cta_titre":252,"produit.technique_titre":253,"commun.statut_flash_reserve":152,"global.footer_titre_contact":129,"boutique.tableaux_texte":254,"article.contexte_defaut_debut":255,"flash.info_tarif_label":256,"accueil.portfolio_realisation_titre_defaut":257,"realisation.type_flash_tatoue":258,"contact.form_email_erreur_invalide":259,"panier.recap_titre":260,"commun.statut_flash_tatoue":165,"panier.recap_sous_total":261,"confidentialite.collecte_projet_texte":262,"flash.tarif_precision":263,"accueil.portfolio_bouton":264,"apropos.demarche_bloc1_texte":265,"contact.email":266,"produit.technique_defaut":267,"portfolio.filtre_realisations_label":268,"boutique.infos_titre":269,"realisation.type_collaboration":270,"global.footer_email":266,"contact.form_telephone_libelle":271,"article.contexte_defaut_fin":272,"journal.cta_texte":273,"confidentialite.collecte_zone_terme":274,"realisation.type_projet_personnel":275,"boutique.infos_livraison":276,"contact.form_telephone_mention":277,"global.footer_localisation":278,"commun.statut_flash_projet_personnel":275,"article.modalites_titre":279,"produit.livraison_titre":280,"flash.reserver_bouton":191,"apropos.demarche_bloc2_titre":281,"mentions.hebergement_titre":282,"accueil.boutique_surtitre":283,"portfolio.filtre_realisations_tous":284,"journal.cta_bouton":285,"panier.reception_titre":286,"commun.chargement":287,"apropos.demarche_bloc2_texte":288,"confidentialite.collecte_zone_texte":289,"panier.reception_retrait_titre":290,"accueil.boutique_titre":291,"produit.livraison_texte":292,"global.footer_titre_reseaux":293,"flash.acompte_texte":294,"boutique.infos_retrait":295,"portfolio.filtre_realisations_couleur":220,"mentions.hebergement_phrase_debut":296,"realisation.info_couleur_label":220,"article.modalites_conditions_titre":297,"contact.form_telephone_placeholder":298,"realisation.couleur_noir_gris":212,"confidentialite.collecte_disponibilites_terme":299,"global.footer_instagram_aria":300,"produit.bouton_ajouter":225,"article.condition_acompte_debut":301,"boutique.soin_titre":302,"flash.indisponible_tatoue":303,"panier.reception_retrait_detail":304,"mentions.hebergement_nom":305,"portfolio.filtre_realisations_noir_gris":212,"accueil.boutique_texte":306,"apropos.demarche_bloc3_titre":307,"contact.form_objet_libelle":308,"commun.theme_accent_aria":309,"boutique.soin_tableaux":310,"apropos.demarche_bloc3_texte":311,"flash.indisponible_reserve":312,"article.acompte_defaut":313,"accueil.boutique_badge_unique":128,"commun.theme_mode_clair_aria":314,"global.footer_copyright":315,"produit.indisponible_message":316,"realisation.couleur_couleur":220,"confidentialite.collecte_disponibilites_texte":317,"portfolio.filtre_realisations_projets_perso":318,"mentions.hebergement_phrase_fin":319,"panier.reception_livraison_titre":320,"contact.form_objet_placeholder":321,"apropos.studio_surtitre":322,"accueil.boutique_bouton":323,"article.condition_acompte_fin":324,"boutique.soin_skate":325,"commun.theme_mode_sombre_aria":326,"confidentialite.collecte_fichiers_terme":327,"contact.form_objet_option_flash":328,"flash.autres_flashs_bouton":329,"global.footer_lien_mentions":330,"mentions.hebergement_editeur_libelle":331,"panier.reception_livraison_detail":332,"portfolio.filtre_realisations_flashs_tatoues":333,"produit.aide":334,"realisation.info_taille_label":335,"portfolio.realisations_vide":336,"global.footer_lien_confidentialite":337,"accueil.journal_surtitre":61,"apropos.studio_titre":338,"article.condition_taille_min_label":339,"panier.recap_livraison":340,"mentions.hebergement_editeur":305,"produit.similaires_surtitre":283,"realisation.taille_petit_format":341,"boutique.archive_titre":342,"flash.bon_a_savoir_titre":343,"commun.theme_aria":344,"confidentialite.collecte_fichiers_texte":345,"contact.form_objet_option_creation":346,"portfolio.cta_titre":347,"flash.bon_a_savoir_texte":348,"confidentialite.collecte_conclusion":349,"produit.similaires_titre":350,"global.footer_signature":351,"article.condition_taille_max_label":352,"boutique.archive_texte":353,"panier.recap_livraison_gratuite":354,"accueil.journal_titre":355,"mentions.hebergement_site_libelle":356,"contact.form_objet_option_oeuvre":357,"realisation.taille_format_moyen":358,"apropos.studio_texte_1":359,"mentions.hebergement_site_url":360,"apropos.studio_texte_2":361,"contact.form_objet_option_convention":362,"panier.recap_total":363,"accueil.journal_texte":364,"realisation.taille_grand_format":365,"portfolio.cta_description":366,"boutique.contact_intro":367,"flash.rendez_vous_titre":368,"confidentialite.finalite_titre":369,"global.footer_signature_marque":305,"produit.similaires_bouton":370,"article.condition_styles_label":371,"accueil.journal_bouton_date":232,"global.seo_titre_modele":372,"mentions.hebergement_contact_libelle":373,"article.styles_defaut":374,"apropos.conditions_titre":375,"boutique.contact_bouton":376,"contact.form_objet_option_autre":377,"realisation.taille_a_definir":378,"flash.rendez_vous_texte":379,"portfolio.cta_bouton":380,"confidentialite.finalite_intro":381,"panier.bouton_valider":382,"flash.similaires_surtitre":383,"apropos.condition_age":384,"article.condition_age":385,"realisation.cta_surtitre":386,"mentions.hebergement_contact_email":387,"panier.conditions_paiement":388,"global.seo_nom_site":157,"portfolio.seo_titre":389,"accueil.about_surtitre":82,"confidentialite.finalite_demandes_terme":390,"contact.form_objet_erreur":391,"contact.form_description_libelle":392,"mentions.propriete_titre":393,"realisation.cta_titre":394,"article.condition_delai":395,"flash.similaires_titre":396,"apropos.condition_acompte":397,"panier.lien_retour_boutique":398,"confidentialite.finalite_demandes_texte":399,"accueil.about_titre":88,"portfolio.seo_description":400,"accueil.about_texte":401,"mentions.propriete_texte_1":402,"realisation.cta_description":403,"contact.form_description_placeholder":404,"flash.seo_titre_suffixe":405,"article.modalites_mention":406,"apropos.condition_projet":407,"confidentialite.finalite_reservations_terme":408,"confidentialite.finalite_reservations_texte":409,"realisation.cta_bouton":410,"flash.seo_titre_defaut":411,"accueil.about_bouton":412,"article.formulaire_titre_ouvert":413,"mentions.propriete_texte_2":414,"contact.form_description_aide":415,"apropos.condition_delai":416,"accueil.cta_titre":96,"article.formulaire_titre_ferme":417,"flash.seo_description":418,"contact.form_description_erreur_requis":419,"mentions.propriete_texte_3":420,"confidentialite.finalite_conventions_terme":421,"realisation.similaires_surtitre":422,"apropos.studio_bouton_projet":164,"contact.form_description_erreur_longueur":423,"accueil.cta_texte":366,"apropos.studio_bouton_portfolio":424,"confidentialite.finalite_conventions_texte":425,"article.ferme_texte_complet":426,"mentions.propriete_texte_4":427,"realisation.similaires_titre":428,"accueil.cta_bouton_projet":164,"contact.form_zone_libelle":274,"realisation.seo_titre_suffixe":429,"confidentialite.finalite_dessin_terme":430,"apropos.studio_image_alt":431,"mentions.donnees_titre":93,"article.ferme_texte_passe":432,"accueil.cta_bouton_email":376,"contact.form_zone_placeholder":433,"mentions.donnees_texte_collecte":434,"article.ferme_bouton":435,"confidentialite.finalite_dessin_texte":436,"apropos.contact_surtitre":437,"realisation.seo_description_intro":438,"accueil.seo_titre":439,"contact.form_zone_erreur":440,"apropos.contact_titre":96,"article.formulaire_intro":441,"realisation.seo_og_titre_suffixe":69,"mentions.donnees_finalite_libelle":442,"confidentialite.finalite_conclusion":443,"mentions.donnees_finalite_texte":444,"realisation.seo_og_description":445,"confidentialite.conservation_titre":446,"apropos.contact_texte":366,"contact.form_taille_libelle":447,"article.formulaire_nom_label":448,"accueil.seo_description":449,"apropos.contact_bouton_projet":164,"contact.form_taille_placeholder":450,"mentions.donnees_base_legale_libelle":451,"confidentialite.conservation_intro":452,"article.formulaire_nom_placeholder":453,"accueil.seo_og_titre":439,"apropos.contact_bouton_email":376,"article.formulaire_email_label":454,"confidentialite.conservation_refus_debut":455,"contact.form_taille_erreur":456,"accueil.seo_og_description":457,"mentions.donnees_base_legale_texte":458,"article.formulaire_email_placeholder":459,"mentions.donnees_conservation_libelle":460,"apropos.contact_email":266,"confidentialite.conservation_refus_delai":461,"contact.form_dispos_libelle":462,"accueil.jsonld_nom":157,"confidentialite.conservation_refus_fin":463,"mentions.donnees_conservation_texte":464,"contact.form_dispos_placeholder":465,"article.formulaire_description_label":251,"apropos.contact_reseaux_texte":466,"accueil.jsonld_description":467,"confidentialite.conservation_realise_debut":468,"apropos.contact_instagram_pseudo":469,"accueil.jsonld_ville":470,"contact.form_dispos_erreur":471,"mentions.donnees_destinataires_libelle":472,"article.formulaire_description_placeholder":473,"mentions.donnees_destinataires_texte":474,"article.formulaire_zone_label":274,"confidentialite.conservation_realise_delai":475,"accueil.jsonld_region":476,"contact.form_references_libelle":477,"mentions.donnees_droits_libelle":478,"confidentialite.conservation_realise_fin":479,"contact.form_references_mention":277,"article.formulaire_zone_placeholder":480,"article.formulaire_taille_label":447,"confidentialite.conservation_photos":481,"contact.form_references_texte":482,"mentions.donnees_droits_texte":483,"article.formulaire_taille_placeholder":484,"contact.form_references_precision":485,"confidentialite.conservation_conclusion":486,"mentions.donnees_texte_navigation":487,"article.formulaire_dispo_label":488,"mentions.cookies_titre":489,"contact.form_age_libelle_debut":490,"confidentialite.droits_titre":491,"contact.form_age_libelle_accent":492,"mentions.cookies_texte":493,"confidentialite.droits_intro":494,"article.formulaire_dispo_placeholder":495,"mentions.cookies_renvoi_debut":496,"contact.form_age_libelle_fin":497,"article.formulaire_succes":498,"confidentialite.droits_acces_terme":499,"confidentialite.droits_acces_texte":500,"contact.form_age_erreur":501,"mentions.cookies_renvoi_lien":502,"article.formulaire_erreur":503,"mentions.cookies_renvoi_fin":504,"contact.form_succes_titre":505,"article.formulaire_bouton_envoi":506,"confidentialite.droits_rectification_terme":507,"mentions.retour_bouton":43,"confidentialite.droits_rectification_texte":508,"contact.form_succes_texte":509,"article.formulaire_bouton":510,"confidentialite.droits_suppression_terme":511,"contact.form_erreur_titre":512,"article.contact_titre":513,"contact.form_erreur_texte":514,"confidentialite.droits_suppression_texte":515,"article.contact_texte":516,"confidentialite.droits_opposition_terme":517,"contact.form_erreur_inattendue":512,"article.contact_bouton":376,"article.partage_titre":518,"confidentialite.droits_opposition_texte":519,"contact.form_bouton":510,"article.partage_texte":520,"contact.form_bouton_envoi":506,"confidentialite.droits_portabilite_terme":521,"confidentialite.droits_portabilite_texte":522,"article.autres_titre":523,"contact.infos_titre":172,"confidentialite.droits_exercice_debut":524,"article.autres_texte":525,"contact.infos_texte":526,"confidentialite.droits_exercice_email":266,"contact.infos_age_titre":527,"article.autres_bouton":435,"confidentialite.droits_exercice_fin":528,"contact.infos_age_texte":529,"confidentialite.droits_delai_debut":530,"contact.infos_acompte_titre":531,"contact.infos_acompte_texte":532,"confidentialite.droits_delai_valeur":533,"confidentialite.droits_delai_fin":534,"contact.infos_delai_titre":535,"contact.infos_delai_texte":536,"confidentialite.cookies_titre":537,"contact.infos_inspiration_titre":538,"confidentialite.cookies_intro_debut":539,"confidentialite.cookies_intro_accent":540,"contact.infos_inspiration_texte_debut":541,"confidentialite.cookies_intro_fin":542,"contact.infos_inspiration_lien_portfolio":10,"confidentialite.cookies_session_terme":543,"contact.infos_inspiration_texte_milieu":544,"confidentialite.cookies_session_texte":545,"contact.infos_inspiration_lien_flashs":546,"confidentialite.cookies_preference_terme":547,"contact.infos_inspiration_texte_fin":548,"confidentialite.cookies_preference_texte":549,"contact.coord_titre":550,"confidentialite.cookies_texte_partage":551,"contact.coord_texte":552,"contact.coord_email_titre":553,"confidentialite.cookies_texte_audience":554,"contact.coord_email_texte":555,"confidentialite.securite_titre":556,"contact.coord_email_adresse":266,"confidentialite.securite_intro":557,"confidentialite.securite_https":558,"contact.coord_instagram_titre":559,"contact.coord_instagram_texte":560,"confidentialite.securite_acces":561,"confidentialite.securite_sauvegarde":562,"contact.coord_instagram_pseudo":469,"contact.coord_studio_titre":563,"confidentialite.securite_suppression":564,"contact.coord_studio_texte":565,"confidentialite.securite_conclusion":566,"confidentialite.modification_titre":567,"confidentialite.modification_texte_1":568,"confidentialite.modification_texte_2":569,"confidentialite.contact_titre":129,"confidentialite.contact_intro":570,"confidentialite.contact_nom":157,"confidentialite.contact_adresse":571,"confidentialite.contact_email_libelle":249,"confidentialite.contact_email":266,"confidentialite.contact_instagram_libelle":572,"confidentialite.contact_instagram_pseudo":469,"confidentialite.maj_libelle":573},"Accueil","Politique de Confidentialité — Naïdi Tattoo","— Naidi Tattoo","— Boutique Naïdi Tattoo","Boutique — Œuvres Hors Peau | Naïdi Tattoo","Blog — Naidi Tattoo","Filtres","Fil d'Ariane","NAÏDI TATTOO","Contact — Proposer un Projet | Naïdi Tattoo","Journal — Conventions et Guests | Naïdi Tattoo","Sur peau","Page introuvable — Naïdi Tattoo","Naïdi — Tatoueuse et artiste surréali","Ton panier — Naïdi Tattoo","Tatouage surréaliste par Naïdi","Mentions Légales — Naïdi Tattoo","Date introuvable","Retour à l'accueil","Découvrez l'article","œuvre originale de Naïdi.","Mentions légales du site de Naïdi Tattoo : éditeur, hébergement, propriété intellectuelle et données personnelles.","Retrouve les prochaines dates de déplacements de Naïdi : conventions de tatouage et guests dans d'autres studios. Réserve ta séance hors Toulouse.","Vérifie les œuvres sélectionnées avant de finaliser ta commande. Tableaux originaux et pièces uniques par Naïdi.","TATOUAGE — ART SURRÉALISTE — TOULOUSE","Détail d'une date de convention ou de guest pour Naïdi Tattoo.","Découvrez nos derniers articles sur l'univers du tatouage, nos réalisations et nos inspirations artistiques.","Découvre les œuvres originales de Naïdi : tableaux surréalistes et skate décoré à la main. Chaque pièce est unique, réalisée avec le même imaginaire que ses tatouages.","Portfolio","Collecte, utilisation et protection de vos données personnelles lorsque vous proposez un projet ou contactez Naïdi Tattoo.","Des formes imaginées. Des pièces incarnées.","Tout","Propose ton projet de tatouage ou pose ta question à Naïdi. Remplis le formulaire avec ton idée, la zone souhaitée et tes disponibilités. Âge minimum 18 ans, acompte non remboursable.","La page que tu cherches n'existe pas ou a été déplacée. Retourne sur le portfolio, la boutique ou le journal des dates.","Naïdi développe un univers surréaliste qui passe de la peau à la toile. Installée dans un studio privé au nord de Toulouse, elle crée des formes organiques, créatures et compositions qui lui sont propres.","sur le blog de Naidi Tattoo.","SUR LA ROUTE","L'IMAGINAIRE PREND CORPS.","Propose ton projet de tatouage ou pose ta question à Naïdi. Remplis le formulaire avec ton idée, la zone souhaitée et tes disponibilités.","Naïdi au travail dans son studio de tatouage privé à Toulouse","DATE INTROUVABLE","Convention","Réalisation","Blog","— Naïdi Tattoo","Les flashs sont des dessins disponibles à la réservation, prêts à être encrés tels quels ou légèrement adaptés. Les réalisations montrent des projets déjà tatoués, du trait initial à la peau cicatrisée.","Hors peau","Ton panier","Flashs","Cette date n'existe pas ou n'est plus disponible.","La page que tu cherches n'existe pas ou a été déplacée.","Proposer un Projet","Naïdi transforme les formes qui traversent son imaginaire en tatouages, tableaux et pièces uniques. Découvre ses flashs, ses réalisations et les prochaines villes où la rencontrer.","Vue","Boutique","Œuvre originale de Naïdi.","NAÏDI SE DÉPLACE.","NAÏDI","œuvre","Guest","DES ŒUVRES À GARDER PRÈS DE SOI.","Plongez dans l'univers du tatouage à travers nos articles : inspirations, conseils, coulisses de nos créations et rencontres avec nos artistes.","Article — Naidi Tattoo","UN ART SURRÉALISTE GUIDÉ PAR L'IMAGINAIRE.","Flash","Retour au journal","Retrouve les créations originales de Naïdi réalisées hors peau. Chaque tableau et chaque objet est présenté avec son format, sa technique, son prix et sa disponibilité. Ce sont des pièces uniques, pensées pour exister au-delà du studio et porter le même imaginaire surréaliste que ses tatouages.","Réalisations","Données personnelles","Naidi Tattoo","Informations Légales","UNE IDÉE À FAIRE PRENDRE CORPS ?","Journal","Œuvre introuvable","œuvres","Naïdi quitte régulièrement son studio toulousain pour tatouer dans d'autres villes. Retrouve ici ses prochaines conventions, ses guests dans d'autres studios et les informations pour réserver une séance lors de ces déplacements.","Explorer le portfolio","404","Tous les articles","Zone","Réservations ouvertes","Tatoueuse et artiste installée dans un studio privé au nord de Toulouse, Naïdi développe des créatures et des compositions qui lui sont propres.","Mentions Légales","À propos","vue","Présente ton projet, indique la zone du corps, le format souhaité et tes disponibilités. Naïdi te répondra si la proposition correspond à son univers et à son planning.","Complet","Politique de Confidentialité","Filtrer par statut","Tout le catalogue","sélectionnée","Aucun article dans cette sélection","CETTE PAGE N'EXISTE PAS.","Avant-bras","Voir les œuvres disponibles","Prochaines dates","Essaie une autre rubrique, ou reviens à la liste complète.","Voir les détails","Portrait de Naïdi dans son studio de tatouage, concentrée sur son travail","Image précédente","La page que tu cherches est introuvable ou a été déplacée. Elle a peut-être fait partie d'une ancienne série de flashs, d'une convention passée ou d'une œuvre déjà vendue.","Article non trouvé","Que tu aies un flash en tête, un projet personnel à développer ou une question sur une œuvre, remplis le formulaire ci-dessous. Les demandes détaillées avec références visuelles sont privilégiées.","Pièce unique","Contact","Bras","Tous les flashs","Disponible","UN MÊME TRAIT, PLUSIEURS SUPPORTS","Archives","Éditeur du site","sélectionnées","Cette politique détaille la manière dont Naïdi Tattoo collecte, utilise et protège vos données personnelles lorsque vous proposez un projet ou contactez le studio.","Formulaire de Proposition","Cuisse","SUR LA PEAU, LA TOILE OU UN OBJET.","PARCOURS","Image suivante","Réservations complètes","Continuer mes achats","min de lecture","Aucun article publié pour le moment","Dimensions :","Données collectées","Nom :","Aucune date prochaine pour le moment. Reviens bientôt pour découvrir les prochains déplacements.","Voir le panier","Réservé","80 cm × 20 cm","Ou explore une autre section","Nous préparons du contenu passionnant. Revenez bientôt pour découvrir nos premiers articles sur l'art du tatouage.","Commande enregistrée avec succès","Naïdi Tattoo","DU DESSIN À LA PEAU, DE LA PEAU À LA TOILE.","Aucune date passée disponible.","Partager cet article","Taille :","Date passée","ŒUVRE ORIGINALE","Proposer un projet","Tatoué","Lorsque vous remplissez le formulaire de proposition de projet ou contactez Naïdi Tattoo par email, les données suivantes sont collectées :","Remplis chaque champ avec le plus de détails possible. Plus ton projet est précis, plus Naïdi pourra évaluer sa faisabilité et te répondre rapidement.","Mollet","Le travail de Naïdi se développe sans frontière fixe entre tatouage et création plastique. Chaque pièce part d'un dessin personnel, d'une forme étrange ou d'une créature née de son imaginaire.","Ouvrir le menu","Activité :","INFORMATIONS PRATIQUES","Lire l'article","Naïdi a bien reçu ta commande et te contactera sous 48 heures pour convenir des modalités de paiement et de livraison. Le paiement sécurisé sera effectué via Stripe.","Dos","SUR PEAU","Technique :","Naïdi a commencé par dessiner. Des formes qui venaient, des créatures étranges, des compositions qu'elle ne cherchait pas à expliquer. L'imaginaire s'imposait, et le dessin suivait.","Statut inconnu","Zones :","Nom et prénom","Partager sur Twitter","Nom complet","Filtrer par couleur","DES FLASHS DISPONIBLES. DES PIÈCES DÉJÀ ENCRÉES.","Acrylique et marqueurs sur deck, vernis de protection","Ton panier est vide","Vendue","Tatouage et création artistique","Partager sur Facebook","Réserver ce flash",": pour vous identifier et personnaliser la réponse.","Le tatouage est arrivé comme une évidence : une manière de faire exister ces formes autrement, de les ancrer dans la peau, de leur donner un corps réel. Chaque projet part d'un échange, d'une intention, d'une zone du corps qui appelle une composition précise.","Fermer le menu","Ton prénom et nom","Adresse","Épaule","Référence","Parcours les dessins encore disponibles et une sélection de projets déjà réalisés.","Puis le travail s'est étendu à la toile et aux objets. Les mêmes créatures, le même trait, le même bleu signature, mais sur d'autres supports. Des tableaux originaux, un skate décoré, des pièces uniques qui prolongent l'univers hors du studio.","Le nom est obligatoire.","Poignet","Type","Statut :","Toutes les couleurs","Explore les tableaux originaux et le skate décoré disponibles dans la boutique.","Horaires","Adresse email","Panier","Réservée","Copier le lien","Noir et gris",": pour vous répondre et échanger sur votre projet.","Site de l'événement","Navigation principale","Installée dans un studio privé au nord de Toulouse, Naïdi travaille sur rendez-vous et se déplace régulièrement pour des conventions et des guests dans d'autres villes. Chaque projet est pensé pour correspondre à son imaginaire et au corps qui le porte.","Cheville","Artiste tatoueuse indépendante","Lien copié dans le presse-papiers","Couleur","Vendu","Voir la boutique","Email","Consulter le site","Ajouter au panier","Zone non spécifiée","Dimensions","Numéro de téléphone","Quantité :","DÉMARCHE","Adresse :","Proposer un projet pour cette date","Art surréaliste sur peau, toile et objets. Studio privé au nord de Toulouse.","ton.email@exemple.com","Le contenu de cet article sera bientôt disponible.","TABLEAUX ORIGINAUX","Navigation","À confirmer lors de la commande","Studio privé, Nord de Toulouse, France","Contexte du déplacement","L'email est obligatoire.","L'IMAGINAIRE COMME POINT DE DÉPART.","(facultatif) : si vous souhaitez être contactée par téléphone.","Retour au blog","Flash disponible","Retirer","Description","Aucun flash ne correspond aux filtres sélectionnés.","Email :","FORMES ORGANIQUES ET CRÉATURES","Description du projet","ENVIE DE TATOUER AVEC NAÏDI LORS D'UNE PROCHAINE DATE ?","Technique","Des compositions surréalistes sur toile et papier, créées avec les mêmes formes organiques et créatures qui traversent les tatouages de Naïdi.","Naïdi quitte temporairement son studio toulousain pour tatouer à","Tarif indicatif","Tatouage réalisé","Flash tatoué","L'email n'est pas valide.","Récapitulatif","Sous-total",": détails de votre demande, motif souhaité, inspirations, éléments à intégrer.","Le tarif final dépend de la taille et du placement définitifs.","Voir tout le portfolio","Le travail de Naïdi repose sur des formes qui viennent d'elles-mêmes : créatures hybrides, compositions surréalistes, détails inattendus. Chaque dessin naît d'une intuition, d'une image mentale qui demande à prendre corps.","contact@naidi-tattoo.com","Création originale à la main","Filtrer les réalisations","LIVRAISON ET RETRAIT","Collaboration","Téléphone","Une occasion de découvrir son travail surréaliste dans un autre lieu, avec des conditions de réservation adaptées au déplacement.","Si tu souhaites réserver une séance pendant un déplacement ou proposer un projet spécifique pour une convention ou un guest à venir, contacte Naïdi avec les détails de ton idée et tes disponibilités.","Zone du corps","Projet personnel","Les tableaux peuvent être envoyés en France métropolitaine avec assurance et emballage renforcé. Le skate nécessite un envoi spécialisé ou peut être récupéré directement au studio à Toulouse.","(facultatif)","Nord de Toulouse, France","MODALITÉS DE RÉSERVATION","Livraison & retrait","COULEURS SIGNATURE","Hébergement","HORS PEAU","Tous","Contacte-la","Mode de réception","Chargement…","Le bleu structure l'identité visuelle de Naïdi. C'est une couleur qui revient, qui ancre, qui donne une continuité entre les pièces. L'orange intervient en accent : pour un détail, une tension, un point de focalisation. Le noir et le blanc cassé complètent la palette.",": partie du corps où vous souhaitez être tatouée.","Retrait au studio","L'IMAGINAIRE CHANGE DE SUPPORT.","Envoi sécurisé ou retrait au studio à Toulouse","Suivre Naïdi","Un acompte de 50 € non remboursable sera demandé pour valider la réservation.","Le retrait au studio est possible sur rendez-vous. C'est aussi l'occasion de découvrir d'autres créations et de discuter d'un projet de tatouage.","Ce site est hébergé par","Conditions spécifiques","06 12 34 56 78","Disponibilités","Instagram de Naïdi Tattoo","Acompte de","SOIN DES ŒUVRES","Ce flash a été tatoué.","Gratuit — Toulouse Nord","Piks-l","Des tableaux originaux et un skate décoré à la main. Des pièces réalisées en exemplaire unique, pensées pour exister hors du studio.","CONTINUITÉ ENTRE SUPPORTS","Objet de ta demande","Choisir la couleur d'accent","Les tableaux sont réalisés avec des matériaux de qualité artistique. Évite une exposition directe au soleil pour préserver les couleurs dans le temps.","Une même créature peut devenir tatouage, tableau ou motif sur un objet. Le passage d'un support à l'autre ne change pas le vocabulaire graphique : trait noir expressif, nuances de bleu, détails orange, formes organiques. L'imaginaire reste cohérent, quel que soit le corps qui le reçoit.","Ce flash est actuellement réservé.","50 € non remboursable","Passer en mode clair","Naïdi Tattoo. Tous droits réservés.","Cette œuvre n'est plus disponible",": dates, périodes, flexibilité pour planifier la séance.","Projets personnels",", plateforme de création et de gestion de sites web.","Livraison en France","Sélectionne un objet","STUDIO PRIVÉ — TOULOUSE NORD","Entrer dans la boutique","requis à la réservation, non remboursable en cas d'annulation.","Le skate décoré est protégé par un vernis résistant. Il peut être exposé ou utilisé, mais l'usage intensif modifiera naturellement son aspect au fil du temps.","Passer en mode sombre","Fichiers joints","Projet de tatouage — Flash disponible","Voir d'autres flashs disponibles","Mentions légales","Éditeur de la plateforme :","15,00 € — Colissimo suivi","Flashs tatoués","Une question sur cette pièce ? Écris à Naïdi.","Taille","Aucune réalisation ne correspond au filtre sélectionné.","Confidentialité","UN ESPACE DE TRAVAIL ADAPTÉ ET SÉCURISÉ.","Taille minimale :","Livraison","Petit format (5–7 cm)","Une œuvre vendue reste visible","Bon à savoir :","Thème",": images de référence, dessins préparatoires ou captures d'écran envoyés pour illustrer votre projet.","Projet de tatouage — Création personnalisée","Une idée en tête ?","Un flash est un dessin prêt à être tatoué. Sa taille et son placement peuvent être adaptés selon ta morphologie, mais le dessin lui-même reste fidèle à la composition originale.","Aucune donnée bancaire n'est collectée directement via le site. Les paiements d'acompte se font en espèces, par virement ou via des plateformes sécurisées tierces dont la politique de confidentialité s'applique séparément.","D'AUTRES CRÉATIONS ORIGINALES.","Propulsé par","Taille maximale :","Chaque création vendue reste accessible dans le catalogue avec la mention « Vendue ». Cela permet de conserver une trace de l'univers visuel de Naïdi et de voir quelles pièces ont déjà trouvé leur place.","Gratuit","CONVENTIONS ET GUESTS : LES PROCHAINES DATES.","Site web :","Question sur une œuvre (tableau ou skate)","Format moyen (10–15 cm)","Le studio de Naïdi est un espace privé situé au nord de Toulouse. Les séances se déroulent sur rendez-vous, dans un environnement calme et respectueux de chaque projet. Chaque client dispose du temps nécessaire pour que la pièce soit réalisée dans de bonnes conditions.","https:\u002F\u002Fpiks-l.com","L'hygiène est une priorité absolue : matériel à usage unique (aiguilles, buses, gants), stérilisation par autoclave du matériel réutilisable, plan de travail désinfecté entre chaque séance. Le studio respecte les normes d'hygiène en vigueur pour les tatoueurs professionnels.","Réservation pendant une convention ou guest","Total","Naïdi quitte régulièrement son studio toulousain pour tatouer dans d'autres villes. Retrouve ici ses prochaines conventions, ses guests et les informations pour réserver.","Grand format (20+ cm)","Présente ton projet, indique la zone, le format souhaité et tes disponibilités. Naïdi te répondra si la proposition correspond à son univers et à son planning.","Une question sur une œuvre, la livraison ou une commande spéciale ?","Rendez-vous :","Finalité de la collecte","Voir toutes les œuvres","Styles privilégiés :","%s — Naïdi Tattoo","Contact :","Créatures organiques, formes surréalistes, compositions personnelles","CONDITIONS DE PRISE DE RENDEZ-VOUS","Écrire à Naïdi","Autre demande","Format à définir","Studio privé au nord de Toulouse. L'adresse exacte est communiquée après validation de la réservation.","Propose ton projet","Les données personnelles collectées sont utilisées exclusivement pour :","Valider ma commande","Autres flashs disponibles","Âge minimum : 18 ans révolus (vérification d'identité demandée).","Âge minimum : 18 ans. Une pièce d'identité sera demandée le jour de la séance.","Ton projet","contact@piks-l.com","Le paiement sécurisé sera effectué via Stripe après validation de ta commande par Naïdi.","Portfolio — Flashs et Réalisations | Naïdi Tattoo","Répondre aux demandes de projet","L'objet de la demande est obligatoire.","Description détaillée de ton projet","Propriété intellectuelle","Envie d'un tatouage dans cet esprit ?","Les propositions de projet reçoivent une réponse sous 5 à 7 jours. Naïdi sélectionne les projets en fonction de son univers et de son planning.","Explore d'autres formes à incarner.","Acompte de 50 € requis pour valider le rendez-vous (non remboursable en cas d'annulation).","Revenir à la boutique",": analyser votre proposition, évaluer sa faisabilité, vous donner un retour sur la possibilité de réaliser le tatouage.","Découvre les flashs disponibles de Naïdi et une sélection de tatouages déjà réalisés. Des créatures surréalistes incarnées sur la peau.","Tatoueuse et artiste installée dans un studio privé au nord de Toulouse, Naïdi développe des créatures et des compositions qui lui sont propres. Son travail mêle lignes, couleurs, formes organiques et détails inattendus.","L'ensemble des contenus présents sur ce site — tatouages, flashs, dessins préparatoires, tableaux, créations originales, photographies et textes — est la propriété exclusive de Naïdi.","Présente ton idée, la zone souhaitée et tes disponibilités. Naïdi te répondra si le projet correspond à son imaginaire et à son planning.","Décris ton idée, le style souhaité, les éléments importants, l'ambiance recherchée… Plus tu es précis·e, mieux Naïdi pourra évaluer ton projet.","— Flash Naïdi Tattoo","Les réservations sont confirmées uniquement après validation du projet par Naïdi et versement de l'acompte. Le planning définitif est communiqué une semaine avant la date du déplacement.","Chaque projet est étudié individuellement. Naïdi se réserve le droit de refuser une demande qui ne correspond pas à son univers.","Gérer les réservations",": fixer une date de rendez-vous, confirmer la séance, envoyer les consignes de préparation et de soins.","Proposer ton projet","Flash — Naïdi Tattoo","Découvrir son parcours","PROPOSER UN PROJET POUR CETTE DATE","Toute reproduction, représentation, modification, publication ou adaptation de tout ou partie des éléments du site, quel que soit le moyen ou le procédé utilisé, est strictement interdite sans l'autorisation écrite préalable de Naïdi.","Minimum 50 caractères — Décris ton projet avec le maximum de détails.","Délai de réponse sous 3 à 5 jours ouvrés. Les demandes incomplètes ne recevront pas de réponse.","RÉSERVATION","Flash disponible pour tatouage, créé par Naïdi, tatoueuse surréaliste à Toulouse.","La description du projet est obligatoire.","Les œuvres présentées dans le portfolio et la boutique sont des créations originales issues de l'imaginaire de l'artiste. Elles ne peuvent être reproduites, tatouées par un autre artiste, copiées ou exploitées sans accord explicite.","Vous contacter pour les conventions et guests","Autres réalisations","La description doit faire au moins 50 caractères.","Voir le portfolio",": vous informer des disponibilités lors des déplacements, proposer un créneau si vous avez mentionné une ville de passage.","Toutes les créneaux pour cette date ont été réservés. Consulte les prochains déplacements de Naïdi ci-dessous.","Les photographies de tatouages réalisés par Naïdi représentent des créations portées par des personnes ayant consenti à leur publication. Le droit à l'image des personnes tatouées est respecté.","Dans le même esprit.","— Réalisation — Naïdi Tattoo","Échanger sur le dessin","Intérieur du studio de tatouage de Naïdi, espace de travail sécurisé et matériel stérilisé","Cette date est déjà passée. Consulte les prochains déplacements de Naïdi ci-dessous.","Ex : avant-bras gauche, mollet, omoplate…","Les données personnelles collectées via le formulaire de contact (nom, prénom, adresse email, description du projet) sont destinées uniquement à Naïdi pour répondre aux demandes de renseignements et de projets de tatouage.","Voir toutes les dates",": adapter le motif, préciser les détails, valider le flash ou la composition personnalisée avant la séance.","RESTONS EN CONTACT","Découvre cette réalisation de tatouage surréaliste par Naïdi.","Naïdi Tattoo — Tatouage surréaliste à Toulouse","La zone du corps est obligatoire pour un projet de tatouage.","Présente ton projet en détaillant l'idée, la zone du corps souhaitée, la taille approximative et tes disponibilités pendant cette date. Naïdi te répondra si la proposition correspond à son univers.","Finalité du traitement :","Vos données ne sont jamais cédées, louées ou vendues à des tiers. Elles ne sont pas utilisées à des fins commerciales, publicitaires ou de prospection non sollicitée.","Réponse aux demandes de contact, organisation des rendez-vous et suivi des projets de tatouage.","Réalisation de tatouage surréaliste par Naïdi","Durée de conservation","Taille approximative","Ton nom","Naïdi transforme les formes de son imaginaire en tatouages, tableaux et pièces uniques. Studio privé au nord de Toulouse. Découvre ses flashs disponibles, ses réalisations et ses prochaines dates.","Ex : 10×15 cm, format carte postale, demi-bras…","Base légale :","Les données sont conservées uniquement le temps nécessaire au traitement de votre demande :","Prénom Nom","Ton email","Si le projet est refusé ou si vous ne donnez pas suite, vos données sont supprimées dans un délai de","La taille approximative est obligatoire pour un projet de tatouage.","Naïdi transforme les formes de son imaginaire en tatouages, tableaux et pièces uniques. Studio privé au nord de Toulouse.","Consentement de la personne concernée par l'envoi du formulaire.","email@exemple.com","Durée de conservation :","3 mois","Tes disponibilités","après le dernier échange.","Les données sont conservées pendant la durée nécessaire au traitement de la demande, puis archivées pour une durée maximale de trois ans, sauf obligation légale contraire.","Indique tes créneaux possibles, jours de la semaine préférés, période souhaitée…","Retrouve Naïdi sur Instagram pour suivre ses nouvelles créations et prochains déplacements.","Tatouage surréaliste et art sur peau, toile et objets","Si le projet est réalisé, vos coordonnées sont conservées","@naidi.tattoo","Toulouse","Tes disponibilités sont obligatoires.","Destinataires :","Décris ton idée, les formes ou créatures qui t'intéressent, l'ambiance souhaitée…","Les données collectées sont accessibles uniquement par Naïdi et ne sont jamais transmises à des tiers, sauf obligation légale.","1 an maximum","Occitanie","Références visuelles","Droits des personnes :","après la séance, sauf accord explicite de votre part pour rester en contact en vue de projets futurs.","Avant-bras, cuisse, dos…","Les photos de tatouages cicatrisés envoyées par les clientes et publiées sur le portfolio ou Instagram sont conservées tant qu'elles servent de référence visuelle. Vous pouvez demander leur retrait à tout moment.","Glisse tes images de référence ici ou envoie-les par email après validation de ta demande.","Conformément au Règlement Général sur la Protection des Données (RGPD), vous disposez d'un droit d'accès, de rectification, de suppression et de limitation du traitement de vos données personnelles. Vous pouvez exercer ces droits en écrivant à l'adresse email indiquée ci-dessus.","10×15 cm, demi-bras…","Les fichiers joints seront disponibles dans une version ultérieure. Pour l'instant, mentionne-les dans ta description ou envoie-les par email après ton premier contact.","Passé ce délai, vos données personnelles sont définitivement effacées des systèmes de Naïdi Tattoo, sauf obligation légale de conservation (par exemple, facturation ou comptabilité).","Aucune donnée personnelle n'est collectée lors de la simple navigation sur le site. Les données analytiques de consultation sont anonymisées et utilisées uniquement à des fins statistiques d'amélioration du site.","Tes disponibilités pendant cette date","Cookies et traceurs","Je confirme avoir","Vos droits","18 ans révolus","Ce site utilise des cookies strictement nécessaires à son fonctionnement et à la mesure d'audience anonymisée. Aucun cookie publicitaire ou de suivi commercial n'est déposé.","Conformément au Règlement Général sur la Protection des Données (RGPD), vous disposez des droits suivants :","Indique les jours et créneaux horaires où tu es disponible.","Pour toute question concernant l'utilisation des cookies, vous pouvez consulter la",". Le tatouage de mineurs est strictement interdit, même avec autorisation parentale.","Ta proposition a bien été envoyée. Naïdi te répondra dès que possible si le projet correspond à son univers et à son planning.","Droit d'accès",": vous pouvez demander une copie des données personnelles détenues à votre sujet.","Tu dois confirmer avoir 18 ans révolus pour continuer.","politique de confidentialité","Une erreur s'est produite. Réessaie ou contacte directement Naïdi par email.",".","Ta proposition a été envoyée avec succès !","Envoi en cours…","Droit de rectification",": vous pouvez corriger des informations inexactes ou incomplètes (changement d'email, de numéro de téléphone, de disponibilités).","Naïdi te répondra dans les prochains jours si ton projet correspond à son univers et à son planning. Vérifie bien ta boîte email (y compris les spams).","Envoyer ma proposition","Droit de suppression","Une erreur s'est produite.","CONTACT DIRECT","Impossible d'envoyer ta demande pour le moment. Réessaie dans quelques instants ou contacte Naïdi directement par email.",": vous pouvez demander l'effacement de vos données si vous retirez votre projet, si vous ne souhaitez plus être contactée ou si les données ne sont plus nécessaires.","Si tu préfères poser une question avant de proposer un projet, écris directement à Naïdi.","Droit d'opposition","PARTAGER CETTE DATE",": vous pouvez refuser que vos données soient utilisées pour une finalité particulière, notamment la conservation après réalisation du tatouage.","Tu connais quelqu'un qui pourrait être intéressé par cette date ?","Droit à la portabilité",": vous pouvez récupérer vos données dans un format lisible et les transmettre à un autre prestataire si vous le souhaitez.","AUTRES DATES À VENIR","Pour exercer ces droits, contactez Naïdi Tattoo par email à l'adresse","Retrouve les prochains déplacements de Naïdi.","Quelques éléments à connaître avant de proposer ton projet.","Âge Minimum","en précisant votre demande et en joignant une pièce d'identité si nécessaire pour confirmer votre identité.","Le tatouage est interdit aux personnes de moins de 18 ans, même avec autorisation parentale. Une pièce d'identité sera demandée lors du rendez-vous.","Une réponse vous sera adressée dans un délai de","Acompte Non Remboursable","Une fois ta proposition validée, un acompte te sera demandé pour bloquer ton créneau. Cet acompte est non remboursable en cas d'annulation.","30 jours maximum","suivant la réception de votre demande.","Délai de Réponse","Naïdi reçoit de nombreuses demandes. Compte quelques jours avant de recevoir une réponse. Si ton projet ne correspond pas à son univers, elle te le dira avec honnêteté.","Cookies et technologies de suivi","Inspiration","Le site naidi-tattoo.piks-l.com n'utilise","aucun cookie publicitaire ou de tracking tiers","Parcours le",". Les seuls cookies déposés sont des cookies techniques strictement nécessaires au bon fonctionnement du site :","Cookies de session","et les",": maintiennent votre navigation active, mémorisent les éléments ajoutés au panier le temps de votre visite.","flashs disponibles","Cookies de préférence","pour mieux comprendre le style de Naïdi et affiner ton projet.",": retiennent vos choix d'interface (mode sombre\u002Fclair si applicable, langue) pour améliorer votre expérience.","AUTRES MOYENS DE CONTACT","Ces cookies ne collectent aucune donnée personnelle identifiable et ne sont pas partagés avec des tiers. Ils disparaissent à la fermeture de votre navigateur ou après une courte période d'inactivité.","Tu peux aussi contacter Naïdi directement par email ou suivre son travail sur Instagram.","Email Direct","Aucun outil de mesure d'audience externe (Google Analytics, Facebook Pixel, etc.) n'est installé. Les statistiques de visite sont recueillies de manière anonyme via les logs serveur, sans identification individuelle.","Pour une question précise ou envoyer des références visuelles","Sécurité des données","Naïdi Tattoo met en œuvre des mesures techniques et organisationnelles appropriées pour protéger vos données personnelles contre tout accès non autorisé, perte, destruction ou divulgation accidentelle :","Transmission sécurisée via protocole HTTPS.","Instagram","Découvre les créations récentes et l'univers de Naïdi","Accès aux données limité à Naïdi uniquement, aucun tiers non autorisé.","Sauvegarde régulière et stockage chiffré des informations sensibles.","Studio Privé au Nord de Toulouse","Suppression définitive des données une fois le délai de conservation écoulé.","Naïdi travaille dans un studio privé. L'adresse exacte est communiquée lors de la confirmation du rendez-vous. Le studio est équipé de matériel à usage unique et respecte l'ensemble des normes d'hygiène et de salubrité en vigueur.","En cas de violation de données susceptible de porter atteinte à vos droits et libertés, vous serez informée dans les meilleurs délais conformément à la réglementation en vigueur.","Modification de la politique","Cette politique de confidentialité peut être mise à jour pour refléter des changements dans les pratiques de traitement des données ou dans la législation applicable.","Toute modification substantielle sera communiquée via une mention visible sur le site. La date de dernière mise à jour sera systématiquement indiquée en haut de cette page. Il est recommandé de consulter régulièrement cette politique pour rester informée.","Pour toute question concernant cette politique de confidentialité, l'utilisation de vos données personnelles ou l'exercice de vos droits, contactez :","Studio privé — Nord de Toulouse","Instagram :","Dernière mise à jour :",{"fond":575,"texte":576,"accent":577,"bordure":578,"surAccent":575,"fondSombre":575,"interligne":579,"texteClair":576,"casseTitres":580,"fondAttenue":581,"policeCorps":582,"policeTitre":583,"echelleTexte":584,"texteAttenue":585,"accentSecondaire":586},"#07090b","#eeeae1","#2297a8","rgba(238, 234, 225, .18)","1.7","uppercase","#0d1316","\"Manrope\", Arial, sans-serif","\"Darker Grotesque\", Arial, sans-serif","1rem","#95a1a3","#f16742",{"path":588,"title":589,"seo":590,"libraryVersion":591,"publishedAt":592,"apercu":23,"theme":593,"blocks":594},"\u002Fsysteme\u002Fentete","Entête du site",{"title":589,"description":15,"image":15},"1.21.0","2026-09-21T08:40:01.748+00:00",{"fond":575,"texte":576,"accent":577,"bordure":578,"surAccent":575,"fondSombre":575,"interligne":579,"texteClair":576,"casseTitres":580,"fondAttenue":581,"policeCorps":582,"policeTitre":583,"echelleTexte":584,"texteAttenue":585,"accentSecondaire":586},[595,604],{"id":596,"nom":597,"type":598,"props":599,"masque":601,"variant":602,"espacement":603},"html-nt-document","Document — feuille d’origine seule, body en chargement","html",{"code":600},"\u003Cscript>\n(function () {\n  var M = \"\u002F* Naïdi Tattoo — feuille du design validé le 17\u002F09\u002F2026 (index.html) *\u002F\";\n  function net(s) { var t = s.textContent || ''; var i = t.indexOf(M); if (i > 0) s.textContent = t.slice(i); return i >= 0; }\n  function tout() { var l = document.getElementsByTagName('style'); for (var k = 0; k \u003C l.length; k++) if (net(l[k]) && !l[k].__ntVeille && window.MutationObserver) { l[k].__ntVeille = 1; (function (s) { new MutationObserver(function () { net(s); }).observe(s, { childList: true, characterData: true, subtree: true }); })(l[k]); } }\n  tout(); document.addEventListener('DOMContentLoaded', tout); window.addEventListener('load', tout);\n  if (!window.__ntChargementFini && document.body) document.body.classList.add('is-loading');\n})();\n\u003C\u002Fscript>",[],"pleine","aucun",{"id":605,"nom":606,"type":598,"props":607,"masque":609,"variant":602,"espacement":603},"html-nt-entete","Écran de chargement, curseur et entête",{"code":608},"\u003Cdiv class=\"loader chargement\" aria-hidden=\"true\">\n    \u003Cdiv class=\"chargement__fond\">\u003C\u002Fdiv>\n    \u003Cdiv class=\"chargement__boussole\">\n      \u003Csvg class=\"chargement__anneaux\" viewBox=\"0 0 200 200\">\u003Ccircle class=\"chargement__anneau chargement__anneau--1\" cx=\"100\" cy=\"100\" r=\"99\"\u002F>\u003Ccircle class=\"chargement__anneau chargement__anneau--2\" cx=\"100\" cy=\"100\" r=\"70\"\u002F>\u003Ccircle class=\"chargement__anneau chargement__anneau--3\" cx=\"100\" cy=\"100\" r=\"38\"\u002F>\u003Cg class=\"chargement__crans\">\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"10\" transform=\"rotate(0 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(5 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(10 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(15 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(20 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(25 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(30 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(35 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(40 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(45 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(50 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(55 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(60 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(65 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(70 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(75 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(80 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(85 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"10\" transform=\"rotate(90 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(95 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(100 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(105 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(110 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(115 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(120 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(125 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(130 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(135 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(140 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(145 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(150 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(155 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(160 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(165 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(170 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(175 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"10\" transform=\"rotate(180 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(185 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(190 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(195 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(200 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(205 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(210 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(215 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(220 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(225 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(230 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(235 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(240 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(245 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(250 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(255 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(260 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(265 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"10\" transform=\"rotate(270 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(275 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(280 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(285 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(290 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(295 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(300 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(305 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(310 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(315 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(320 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(325 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"7\" transform=\"rotate(330 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(335 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(340 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(345 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(350 100 100)\"\u002F>\u003Cline x1=\"100\" y1=\"1\" x2=\"100\" y2=\"4\" transform=\"rotate(355 100 100)\"\u002F>\u003C\u002Fg>\u003C\u002Fsvg>\n      \u003Cimg class=\"chargement__baleine\" src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" srcset=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=600&resize=contain&quality=80 600w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=80 900w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp 1200w\" sizes=\"(max-width: 760px) 86vw, min(56vw, 520px)\" alt=\"\" width=\"1200\" height=\"1200\" fetchpriority=\"high\" decoding=\"async\">\n      \u003Cimg class=\"chargement__baleine chargement__baleine--couleur\" src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" srcset=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=600&resize=contain&quality=80 600w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=80 900w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp 1200w\" sizes=\"(max-width: 760px) 86vw, min(56vw, 520px)\" alt=\"\" width=\"1200\" height=\"1200\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"chargement__texte\">\n      \u003Cp class=\"chargement__surtitre\">Œuvres vivantes · Toulouse\u003C\u002Fp>\n      \u003Cp class=\"chargement__nom\">Naïdi Tattoo\u003C\u002Fp>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"chargement__bas\">\n      \u003Cspan class=\"chargement__etat\">L’encre se prépare\u003C\u002Fspan>\n      \u003Cspan class=\"chargement__ligne\">\u003Ci>\u003C\u002Fi>\u003C\u002Fspan>\n      \u003Cspan class=\"chargement__pourcent\">000\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003Cdiv class=\"cursor\" aria-hidden=\"true\">\u003C\u002Fdiv>\n\n  \u003Cheader class=\"entete\" role=\"banner\">\n    \u003Ca class=\"entete__saut\" href=\"#contenu\" data-pxl-id=\"entete-saut\" data-pxl-texte=\"Aller au contenu\" data-pxl-label=\"Entête — lien d’évitement\">Aller au contenu\u003C\u002Fa>\n    \u003Ca class=\"entete__marque\" href=\"\u002F\">\n      \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fnaidi-logo.svg\" alt=\"\" width=\"30\" height=\"30\" data-pxl-id=\"entete-logo\" data-pxl-image=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fnaidi-logo.svg\" data-pxl-label=\"Entête — logo\">\n      \u003Cspan class=\"entete__nom\">\u003Cstrong data-pxl-id=\"entete-nom\" data-pxl-texte=\"Naïdi Tattoo\" data-pxl-label=\"Entête — nom\">Naïdi Tattoo\u003C\u002Fstrong>\u003Csmall data-pxl-id=\"entete-signature\" data-pxl-texte=\"Tatouage · Flash · Création\" data-pxl-label=\"Entête — signature\">Tatouage · Flash · Création\u003C\u002Fsmall>\u003C\u002Fspan>\n    \u003C\u002Fa>\n    \u003Cnav class=\"site-nav entete__nav\" aria-label=\"Navigation principale\">\n      \u003Ca href=\"\u002Ftattoo\">\u003Csmall aria-hidden=\"true\">N\u003C\u002Fsmall>\u003Cspan data-pxl-id=\"menu-1\" data-pxl-texte=\"Tattoo\" data-pxl-label=\"Menu — lien 1\">Tattoo\u003C\u002Fspan>\u003C\u002Fa>\n      \u003Ca href=\"\u002Fagenda\">\u003Csmall aria-hidden=\"true\">O\u003C\u002Fsmall>\u003Cspan data-pxl-id=\"menu-2\" data-pxl-texte=\"Agenda\" data-pxl-label=\"Menu — lien 2\">Agenda\u003C\u002Fspan>\u003C\u002Fa>\n      \u003Ca href=\"\u002Fqui-suis-je\">\u003Csmall aria-hidden=\"true\">S\u003C\u002Fsmall>\u003Cspan data-pxl-id=\"menu-3\" data-pxl-texte=\"Qui suis-je\" data-pxl-label=\"Menu — lien 3\">Qui suis-je\u003C\u002Fspan>\u003C\u002Fa>\n      \u003Ca href=\"\u002Fcontact\">\u003Csmall aria-hidden=\"true\">E\u003C\u002Fsmall>\u003Cspan data-pxl-id=\"menu-4\" data-pxl-texte=\"Contact\" data-pxl-label=\"Menu — lien 4\">Contact\u003C\u002Fspan>\u003C\u002Fa>\n      \u003Cspan class=\"entete__curseur\" aria-hidden=\"true\">\u003C\u002Fspan>\n    \u003C\u002Fnav>\n    \u003Cdiv class=\"entete__droite\">\n      \u003Cspan class=\"entete__cap\" aria-hidden=\"true\">\u003Csvg viewBox=\"0 0 46 46\">\u003Ccircle cx=\"23\" cy=\"23\" r=\"21\"\u002F>\u003Cpath d=\"M23 5 L25.2 23 L20.8 23 Z\"\u002F>\u003Cpath d=\"M23 41 L25.2 23 L20.8 23 Z\"\u002F>\u003C\u002Fsvg>\u003Cspan class=\"entete__cap-texte\">Centre\u003C\u002Fspan>\u003C\u002Fspan>\n      \u003Cbutton type=\"button\" class=\"entete__menu\" aria-expanded=\"false\" aria-controls=\"menu-plein\">\u003Cspan class=\"entete__menu-texte\">Menu\u003C\u002Fspan>\u003Cspan class=\"entete__menu-traits\" aria-hidden=\"true\">\u003Ci>\u003C\u002Fi>\u003Ci>\u003C\u002Fi>\u003C\u002Fspan>\u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n  \u003C\u002Fheader>\n  \u003Cdiv class=\"menu-plein\" id=\"menu-plein\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Menu\" hidden>\n    \u003Cdiv class=\"menu-plein__fond\" aria-hidden=\"true\">\u003C\u002Fdiv>\n    \u003Cdiv class=\"menu-plein__grille\">\n      \u003Cnav class=\"menu-plein__liens\" aria-label=\"Pages du site\">\n        \u003Ca class=\"menu-plein__lien\" href=\"\u002F\" data-nt-apercu=\"\u002F\">\u003Csmall>00 · Centre\u003C\u002Fsmall>\u003Cspan>Accueil\u003C\u002Fspan>\u003C\u002Fa>\n        \u003Ca class=\"menu-plein__lien\" href=\"\u002Ftattoo\" data-nt-apercu=\"\u002Ftattoo\">\u003Csmall>01 · Nord\u003C\u002Fsmall>\u003Cspan>Tattoo\u003C\u002Fspan>\u003C\u002Fa>\n        \u003Ca class=\"menu-plein__lien\" href=\"\u002Fagenda\" data-nt-apercu=\"\u002Fagenda\">\u003Csmall>02 · Ouest\u003C\u002Fsmall>\u003Cspan>Agenda\u003C\u002Fspan>\u003C\u002Fa>\n        \u003Ca class=\"menu-plein__lien\" href=\"\u002Fqui-suis-je\" data-nt-apercu=\"\u002Fqui-suis-je\">\u003Csmall>03 · Sud\u003C\u002Fsmall>\u003Cspan>Qui suis-je\u003C\u002Fspan>\u003C\u002Fa>\n        \u003Ca class=\"menu-plein__lien\" href=\"\u002Fcontact\" data-nt-apercu=\"\u002Fcontact\">\u003Csmall>04 · Est\u003C\u002Fsmall>\u003Cspan>Contact\u003C\u002Fspan>\u003C\u002Fa>\n      \u003C\u002Fnav>\n      \u003Cdiv class=\"menu-plein__apercu\" aria-hidden=\"true\">\n        \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=78\" alt=\"La baleine, œuvre-signature de Naïdi\" data-nt-pour=\"\u002F\" loading=\"lazy\" width=\"900\" height=\"1200\">\n        \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-24_DZ-LRvsNdVX_731438763.jpg?width=900&resize=contain&quality=78\" alt=\"Crâne d’oiseau tatoué\" data-nt-pour=\"\u002Ftattoo\" loading=\"lazy\" width=\"900\" height=\"1200\">\n        \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-01_DbgNuOwiL68_763276665.jpg?width=900&resize=contain&quality=78\" alt=\"Affiche de l’Auch Tattoo Convention 2026\" data-nt-pour=\"\u002Fagenda\" loading=\"lazy\" width=\"900\" height=\"1200\">\n        \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fapproach\u002Feditorial\u002Fnaidi-au-travail.jpg?width=900&resize=contain&quality=78\" alt=\"Naïdi tatouant dans son atelier\" data-nt-pour=\"\u002Fqui-suis-je\" loading=\"lazy\" width=\"900\" height=\"1200\">\n        \u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-04_DAte57nIoVg_461947176.jpg?width=900&resize=contain&quality=78\" alt=\"L’œil observé, aquarelle de Naïdi\" data-nt-pour=\"\u002Fcontact\" loading=\"lazy\" width=\"900\" height=\"1200\">\n        \u003Cspan class=\"menu-plein__apercu-cap\">\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"menu-plein__pied\">\n        \u003Cdiv>\u003Cp class=\"menu-plein__label\">Studio\u003C\u002Fp>\u003Cp class=\"menu-plein__valeur\">Studio privé — Toulouse nord, sur rendez-vous\u003C\u002Fp>\u003C\u002Fdiv>\n        \u003Cdiv>\u003Cp class=\"menu-plein__label\">Écrire\u003C\u002Fp>\u003Ca class=\"menu-plein__valeur\" href=\"mailto:contact@naidi-tattoo.com\">contact@naidi-tattoo.com\u003C\u002Fa>\u003C\u002Fdiv>\n        \u003Cdiv>\u003Cp class=\"menu-plein__label\">Suivre\u003C\u002Fp>\u003Ca class=\"menu-plein__valeur\" href=\"https:\u002F\u002Finstagram.com\u002Fnaidi.tattoo\" target=\"_blank\" rel=\"noopener\">@naidi.tattoo\u003C\u002Fa>\u003C\u002Fdiv>\n        \u003Ca class=\"menu-plein__cta\" href=\"\u002Fcontact\">Proposer un projet \u003Cspan aria-hidden=\"true\">→\u003C\u002Fspan>\u003C\u002Fa>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>",[],{"path":611,"title":25,"seo":612,"libraryVersion":591,"publishedAt":616,"apercu":23,"theme":617,"blocks":618},"\u002F",{"title":613,"description":614,"image":615},"Naïdi Tattoo — L’encre en mouvement","Naïdi Tattoo, Toulouse — tatouages sur mesure, planches flash et créations hors peau, dans une galerie sans bord.","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fseo\u002Fog-accueil-v2.jpg","2026-09-21T08:51:44.741+00:00",{"fond":575,"texte":576,"accent":577,"bordure":578,"surAccent":575,"fondSombre":575,"interligne":579,"texteClair":576,"casseTitres":580,"fondAttenue":581,"policeCorps":582,"policeTitre":583,"echelleTexte":584,"texteAttenue":585,"accentSecondaire":586},[619,625,631,637,643],{"id":620,"nom":621,"type":598,"props":622,"masque":624,"variant":602,"espacement":603},"html-nt-accueil","Accueil — baleine et boussole",{"code":623},"\u003Csection class=\"hero\" id=\"top\">\n      \n\n      \u003Cdiv class=\"compass\" aria-label=\"Boussole de navigation\">\n        \u003Cdiv class=\"compass__rings\" aria-hidden=\"true\">\u003C\u002Fdiv>\n\n        \u003Csvg class=\"compass__rose\" viewBox=\"0 0 200 200\" aria-hidden=\"true\" focusable=\"false\">\u003Cg class=\"compass__ticks\">\u003Cline class=\"compass__tick compass__tick--cap\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"11\" transform=\"rotate(0 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(5 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(10 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(15 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(20 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(25 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(30 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(35 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(40 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(45 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(50 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(55 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(60 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(65 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(70 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(75 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(80 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(85 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--cap\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"11\" transform=\"rotate(90 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(95 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(100 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(105 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(110 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(115 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(120 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(125 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(130 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(135 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(140 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(145 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(150 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(155 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(160 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(165 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(170 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(175 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--cap\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"11\" transform=\"rotate(180 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(185 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(190 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(195 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(200 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(205 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(210 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(215 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(220 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(225 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(230 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(235 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(240 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(245 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(250 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(255 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(260 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(265 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--cap\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"11\" transform=\"rotate(270 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(275 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(280 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(285 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(290 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(295 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(300 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(305 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(310 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(315 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(320 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(325 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--30\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"8\" transform=\"rotate(330 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(335 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(340 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--15\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"5.5\" transform=\"rotate(345 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(350 100 100)\"\u002F>\u003Cline class=\"compass__tick\" x1=\"100\" y1=\"0\" x2=\"100\" y2=\"3.4\" transform=\"rotate(355 100 100)\"\u002F>\u003C\u002Fg>\u003Cg class=\"compass__degs\">\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(30 100 100)\">030\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(60 100 100)\">060\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(120 100 100)\">120\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(150 100 100)\">150\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(210 100 100)\">210\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(240 100 100)\">240\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(300 100 100)\">300\u003C\u002Ftext>\u003Ctext class=\"compass__deg\" x=\"100\" y=\"16.5\" transform=\"rotate(330 100 100)\">330\u003C\u002Ftext>\u003C\u002Fg>\u003Cg class=\"compass__ticks-in\">\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"58.8\" x2=\"100\" y2=\"62.0\" transform=\"rotate(0 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(10 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(20 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(30 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(40 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(50 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(60 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(70 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(80 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"58.8\" x2=\"100\" y2=\"62.0\" transform=\"rotate(90 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(100 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(110 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(120 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(130 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(140 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(150 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(160 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(170 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"58.8\" x2=\"100\" y2=\"62.0\" transform=\"rotate(180 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(190 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(200 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(210 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(220 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(230 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(240 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(250 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(260 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"58.8\" x2=\"100\" y2=\"62.0\" transform=\"rotate(270 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(280 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(290 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(300 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(310 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(320 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(330 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(340 100 100)\"\u002F>\u003Cline class=\"compass__tick compass__tick--in\" x1=\"100\" y1=\"60.2\" x2=\"100\" y2=\"62.0\" transform=\"rotate(350 100 100)\"\u002F>\u003C\u002Fg>\u003Cg class=\"compass__bearing\">\u003Cpath class=\"compass__bearing-mark\" d=\"M100 13.5 L96.8 7.4 L103.2 7.4 Z\"\u002F>\u003C\u002Fg>\u003Cg class=\"compass__needle\">\u003Cpath class=\"compass__needle-north\" d=\"M100 23 L102.8 100 L97.2 100 Z\"\u002F>\u003Cpath class=\"compass__needle-south\" d=\"M100 177 L102.8 100 L97.2 100 Z\"\u002F>\u003Cline class=\"compass__needle-axis\" x1=\"100\" y1=\"23\" x2=\"100\" y2=\"177\"\u002F>\u003C\u002Fg>\u003C\u002Fsvg>\n\n        \u003Cdiv class=\"whale\">\n          \u003Cimg class=\"whale__mono\" src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" srcset=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=600&resize=contain&quality=80 600w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=80 900w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp 1200w\" sizes=\"(max-width: 760px) 112vw, min(74vw, 880px)\" width=\"1200\" height=\"1200\"\n            alt=\"\"\n            aria-hidden=\"true\"\n           data-pxl-id=\"hero-baleine-mono\" data-pxl-image=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" data-pxl-label=\"Accueil — baleine (calque monochrome)\">\n          \u003Cimg class=\"whale__color\" src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" srcset=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=600&resize=contain&quality=80 600w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=80 900w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp 1200w\" sizes=\"(max-width: 760px) 112vw, min(74vw, 880px)\" width=\"1200\" height=\"1200\"\n            alt=\"Baleine illustrée, œuvre signature de Naïdi\"\n           data-pxl-id=\"hero-baleine\" data-pxl-image=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" data-pxl-label=\"Accueil — baleine (calque couleur)\">\n        \u003C\u002Fdiv>\n\n        \u003Ca class=\"compass__center\" href=\"#galerie\" data-pxl-id=\"boussole-centre\" data-pxl-texte=\"Visite\" data-pxl-label=\"Boussole — centre\">Visite\u003C\u002Fa>\n\n        \u003Ca class=\"compass__point compass__point--north\" href=\"\u002Ftattoo\">\n          Tattoo \u003Csmall data-pxl-id=\"boussole-nord\" data-pxl-texte=\"Sur la peau · Hors peau\" data-pxl-label=\"Boussole — nord, sous-titre\">Sur la peau · Hors peau\u003C\u002Fsmall>\n        \u003C\u002Fa>\n        \u003Ca class=\"compass__point compass__point--east\" href=\"\u002Fcontact\">\n          Contact \u003Csmall data-pxl-id=\"boussole-est\" data-pxl-texte=\"Se rencontrer\" data-pxl-label=\"Boussole — est, sous-titre\">Se rencontrer\u003C\u002Fsmall>\n        \u003C\u002Fa>\n        \u003Ca class=\"compass__point compass__point--south\" href=\"\u002Fqui-suis-je\">\n          Qui suis-je \u003Csmall data-pxl-id=\"boussole-sud\" data-pxl-texte=\"L’approche\" data-pxl-label=\"Boussole — sud, sous-titre\">L’approche\u003C\u002Fsmall>\n        \u003C\u002Fa>\n        \u003Ca class=\"compass__point compass__point--west\" href=\"\u002Fagenda\">\n          Agenda \u003Csmall data-pxl-id=\"boussole-ouest\" data-pxl-texte=\"Sur la route\" data-pxl-label=\"Boussole — ouest, sous-titre\">Sur la route\u003C\u002Fsmall>\n        \u003C\u002Fa>\n      \u003C\u002Fdiv>\n\n      \u003Ch1 class=\"nt-invisible\">Naïdi Tattoo — tatouage sur mesure, flashs et créations hors peau à Toulouse\u003C\u002Fh1>\n\n      \u003Cspan class=\"scroll-note\" data-pxl-id=\"hero-entrer\" data-pxl-texte=\"Entrer\" data-pxl-label=\"Accueil — invitation à défiler\">Entrer\u003C\u002Fspan>\n    \u003C\u002Fsection>",[],{"id":626,"nom":627,"type":598,"props":628,"masque":630,"variant":602,"espacement":603},"html-nt-bandeau","Bandeau défilant",{"code":629},"\u003Cdiv class=\"marquee\" aria-hidden=\"true\">\n      \u003Cdiv class=\"marquee__track\">\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-1\" data-pxl-texte=\"Tatouage sur mesure\" data-pxl-label=\"Bandeau défilant — mot 1\">Tatouage sur mesure\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-2\" data-pxl-texte=\"Flashs singuliers\" data-pxl-label=\"Bandeau défilant — mot 2\">Flashs singuliers\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-3\" data-pxl-texte=\"Créations hors peau\" data-pxl-label=\"Bandeau défilant — mot 3\">Créations hors peau\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-4\" data-pxl-texte=\"Conventions &amp; voyages\" data-pxl-label=\"Bandeau défilant — mot 4\">Conventions & voyages\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-5\" data-pxl-texte=\"Tatouage sur mesure\" data-pxl-label=\"Bandeau défilant — mot 1 (répétition de la boucle)\">Tatouage sur mesure\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-6\" data-pxl-texte=\"Flashs singuliers\" data-pxl-label=\"Bandeau défilant — mot 2 (répétition de la boucle)\">Flashs singuliers\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-7\" data-pxl-texte=\"Créations hors peau\" data-pxl-label=\"Bandeau défilant — mot 3 (répétition de la boucle)\">Créations hors peau\u003C\u002Fspan>\n        \u003Cspan class=\"marquee__item\" data-pxl-id=\"bandeau-8\" data-pxl-texte=\"Conventions &amp; voyages\" data-pxl-label=\"Bandeau défilant — mot 4 (répétition de la boucle)\">Conventions & voyages\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>",[],{"id":632,"nom":633,"type":598,"props":634,"masque":636,"variant":602,"espacement":603},"html-nt-galerie3d","Galerie 3D — toutes les œuvres",{"code":635},"\u003Csection class=\"galerie3d\" id=\"galerie\" aria-labelledby=\"galerie-titre\">\n      \u003Cdiv class=\"galerie3d__scene\">\u003C\u002Fdiv>\n      \u003Cdiv class=\"galerie3d__entete\">\n        \u003Cp class=\"section-label\" data-pxl-id=\"galerie-surtitre\" data-pxl-texte=\"02 — La galerie · Sur la peau, hors peau\" data-pxl-label=\"Galerie 3D — surtitre\">02 — La galerie · Sur la peau, hors peau\u003C\u002Fp>\n        \u003Ch2 class=\"galerie3d__titre\" id=\"galerie-titre\">\u003Cspan data-pxl-id=\"galerie-titre-1\" data-pxl-titre=\"Tout l’art\" data-pxl-label=\"Galerie 3D — titre, ligne 1\">Tout l’art\u003C\u002Fspan>\u003Cspan data-pxl-id=\"galerie-titre-2\" data-pxl-titre=\"de Naïdi.\" data-pxl-label=\"Galerie 3D — titre, ligne 2\">de Naïdi.\u003C\u002Fspan>\u003C\u002Fh2>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"galerie3d__pied\">\n        \u003Cp class=\"galerie3d__aide\" data-pxl-id=\"galerie-aide\" data-pxl-texte=\"Glissez pour voyager, choisissez une œuvre : la galerie n’a pas de bord.\" data-pxl-label=\"Galerie 3D — mode d’emploi\">Glissez pour voyager, choisissez une œuvre : la galerie n’a pas de bord.\u003C\u002Fp>\n        \u003Cdiv class=\"galerie3d__filtres\" role=\"group\" aria-label=\"Filtrer les œuvres\">\n          \u003Cbutton type=\"button\" class=\"galerie3d__filtre\" data-nt-filtre=\"tout\" aria-pressed=\"true\">Tout\u003C\u002Fbutton>\n          \u003Cbutton type=\"button\" class=\"galerie3d__filtre\" data-nt-filtre=\"Sur la peau\" aria-pressed=\"false\">Sur la peau\u003C\u002Fbutton>\n          \u003Cbutton type=\"button\" class=\"galerie3d__filtre\" data-nt-filtre=\"Hors peau\" aria-pressed=\"false\">Hors peau\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n        \u003Cp class=\"galerie3d__compte\" data-nt-compte=\"tout\">21 œuvres\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"galerie3d__legende\" aria-hidden=\"true\">\u003Cspan class=\"galerie3d__legende-rubrique\">\u003C\u002Fspan>\u003Cspan class=\"galerie3d__legende-titre\">\u003C\u002Fspan>\u003C\u002Fp>\n      \u003Cul class=\"galerie3d__liste\" aria-label=\"Les œuvres de la galerie\" data-nt-groupe data-nt-signature=\"iek8c2-5ve\">\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_771968455.jpg\" data-titre=\"Oiseau, haut du bras\" data-alt=\"Oiseau tatoué sur le haut du bras — vue 1 sur 4\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_771968455.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_771968455.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Oiseau, haut du bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772521499.jpg\" data-titre=\"Oiseau, haut du bras\" data-alt=\"Oiseau tatoué sur le haut du bras — vue 2 sur 4\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772521499.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772521499.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Oiseau, haut du bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772559925.jpg\" data-titre=\"Oiseau, haut du bras\" data-alt=\"Oiseau tatoué sur le haut du bras — vue 3 sur 4\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772559925.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772559925.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Oiseau, haut du bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772760536.jpg\" data-titre=\"Oiseau, haut du bras\" data-alt=\"Oiseau tatoué sur le haut du bras — vue 4 sur 4\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772760536.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772760536.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Oiseau, haut du bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_746268819.jpg\" data-titre=\"Composition sur le bras\" data-alt=\"Composition sur le bras — vues du 15 juillet 2026 — vue 1 sur 2\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_746268819.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_746268819.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Composition sur le bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_748287200.jpg\" data-titre=\"Composition sur le bras\" data-alt=\"Composition sur le bras — vues du 15 juillet 2026 — vue 2 sur 2\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_748287200.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_748287200.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Composition sur le bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746842690.jpg\" data-titre=\"Composition sur le bras, deuxième série\" data-alt=\"Composition sur le bras — deuxième série du 15 juillet 2026 — vue 1 sur 3\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746842690.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746842690.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Composition sur le bras, deuxième série\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746854705.jpg\" data-titre=\"Composition sur le bras, deuxième série\" data-alt=\"Composition sur le bras — deuxième série du 15 juillet 2026 — vue 2 sur 3\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746854705.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746854705.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Composition sur le bras, deuxième série\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_748287640.jpg\" data-titre=\"Composition sur le bras, deuxième série\" data-alt=\"Composition sur le bras — deuxième série du 15 juillet 2026 — vue 3 sur 3\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_748287640.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_748287640.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Composition sur le bras, deuxième série\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-27_DaGcSx2NBC9_730049393.jpg\" data-titre=\"Lion sur le torse\" data-alt=\"Lion tatoué sur le torse\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-27_DaGcSx2NBC9_730049393.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-27_DaGcSx2NBC9_730049393.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Lion sur le torse\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-24_DZ-LRvsNdVX_731438763.jpg\" data-titre=\"Crâne d’oiseau\" data-alt=\"Crâne d’oiseau tatoué\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-24_DZ-LRvsNdVX_731438763.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-24_DZ-LRvsNdVX_731438763.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Crâne d’oiseau\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-12_DZfmyAmN13i_721575898.jpg\" data-titre=\"Motif organique, avant-bras\" data-alt=\"Motif organique tatoué sur l’avant-bras\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-12_DZfmyAmN13i_721575898.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-12_DZfmyAmN13i_721575898.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>Motif organique, avant-bras\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fenvol-floral.jpg\" data-titre=\"Envol floral\" data-alt=\"Tatouage Envol floral\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"640\" data-hauteur=\"853\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fenvol-floral.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fenvol-floral.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"640\" height=\"853\">\u003Cspan>Envol floral\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fjardin-organique.jpg\" data-titre=\"Jardin organique\" data-alt=\"Tatouage Jardin organique\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"640\" data-hauteur=\"853\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fjardin-organique.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fjardin-organique.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"640\" height=\"853\">\u003Cspan>Jardin organique\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fheron-lunaire.jpg\" data-titre=\"Héron lunaire\" data-alt=\"Tatouage Héron lunaire\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"640\" data-hauteur=\"853\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fheron-lunaire.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fheron-lunaire.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"640\" height=\"853\">\u003Cspan>Héron lunaire\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fgardienne-iris.jpg\" data-titre=\"Gardienne Iris\" data-alt=\"Tatouage Gardienne Iris\" data-famille=\"Sur la peau\" data-rubrique=\"Tatouages\" data-galerie=\"tatouages\" data-largeur=\"640\" data-hauteur=\"853\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fgardienne-iris.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fgardienne-iris.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"640\" height=\"853\">\u003Cspan>Gardienne Iris\u003C\u002Fspan>\u003Csmall>Sur la peau · Tatouages\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-09-01_DcwK6yRNu34_791477421.jpg\" data-titre=\"Créature\" data-alt=\"Flash disponible — dessin de créature\" data-famille=\"Sur la peau\" data-rubrique=\"Planches flash\" data-galerie=\"flashs\" data-largeur=\"1440\" data-hauteur=\"1624\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-09-01_DcwK6yRNu34_791477421.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-09-01_DcwK6yRNu34_791477421.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1624\">\u003Cspan>Créature\u003C\u002Fspan>\u003Csmall>Sur la peau · Planches flash\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-27_DbTliqYt-BP_758480986.jpg\" data-titre=\"L’hirondelle\" data-alt=\"L’hirondelle — flash disponible\" data-famille=\"Sur la peau\" data-rubrique=\"Planches flash\" data-galerie=\"flashs\" data-largeur=\"1440\" data-hauteur=\"1920\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-27_DbTliqYt-BP_758480986.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-27_DbTliqYt-BP_758480986.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1920\">\u003Cspan>L’hirondelle\u003C\u002Fspan>\u003Csmall>Sur la peau · Planches flash\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-22_DBbwt0iIcKs_464079843.jpg\" data-titre=\"Libre\" data-alt=\"Libre — aquarelle sur feuille A3\" data-famille=\"Hors peau\" data-rubrique=\"Tableaux, skates &amp; créations\" data-galerie=\"hors-peau\" data-largeur=\"1440\" data-hauteur=\"1800\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-22_DBbwt0iIcKs_464079843.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-22_DBbwt0iIcKs_464079843.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1800\">\u003Cspan>Libre\u003C\u002Fspan>\u003Csmall>Hors peau · Tableaux, skates &amp; créations\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-04_DAte57nIoVg_461947176.jpg\" data-titre=\"L’œil observé\" data-alt=\"L’œil observé — aquarelle et crayon, format A3\" data-famille=\"Hors peau\" data-rubrique=\"Tableaux, skates &amp; créations\" data-galerie=\"hors-peau\" data-largeur=\"1440\" data-hauteur=\"1800\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-04_DAte57nIoVg_461947176.jpg?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-04_DAte57nIoVg_461947176.jpg?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1440\" height=\"1800\">\u003Cspan>L’œil observé\u003C\u002Fspan>\u003Csmall>Hors peau · Tableaux, skates &amp; créations\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003Cli>\u003Cbutton type=\"button\" data-nt-oeuvre data-src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" data-titre=\"La baleine — œuvre-signature\" data-alt=\"Baleine illustrée, œuvre signature de Naïdi\" data-famille=\"Hors peau\" data-rubrique=\"Tableaux, skates &amp; créations\" data-galerie=\"hors-peau\" data-largeur=\"1200\" data-hauteur=\"1200\">\u003Cimg src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=200&amp;resize=contain&amp;quality=78\" data-nt-grand=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=480&amp;resize=contain&amp;quality=78\" alt=\"\" loading=\"lazy\" width=\"1200\" height=\"1200\">\u003Cspan>La baleine — œuvre-signature\u003C\u002Fspan>\u003Csmall>Hors peau · Tableaux, skates &amp; créations\u003C\u002Fsmall>\u003C\u002Fbutton>\u003C\u002Fli>\u003C\u002Ful>\n    \u003C\u002Fsection>",[],{"id":638,"nom":639,"type":598,"props":640,"masque":642,"variant":602,"espacement":603},"html-nt-escale","Prochaine escale",{"code":641},"\u003Csection class=\"escale-une\" id=\"escale\" aria-labelledby=\"escale-une-titre\">\n      \u003Cdiv class=\"escale-une__cadre reveal\">\n        \u003Cp class=\"section-label\" data-pxl-id=\"escale-surtitre\" data-pxl-texte=\"03 — Prochaine escale · Sur la route\" data-pxl-label=\"Prochaine escale — surtitre\">03 — Prochaine escale · Sur la route\u003C\u002Fp>\n        \u003Cdiv class=\"escale-une__corps\" data-nt-escale data-nt-signature=\"xe0hto-1gg\">\u003Cdiv class=\"escale-une__event\" itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FEvent\">\u003Cmeta itemprop=\"startDate\" content=\"2026-10-03\">\u003Cmeta itemprop=\"endDate\" content=\"2026-10-04\">\u003Cmeta itemprop=\"eventStatus\" content=\"https:\u002F\u002Fschema.org\u002FEventScheduled\">\u003Cmeta itemprop=\"eventAttendanceMode\" content=\"https:\u002F\u002Fschema.org\u002FOfflineEventAttendanceMode\">\u003Cspan class=\"nt-micro\" itemprop=\"performer\" itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FOrganization\">\u003Cmeta itemprop=\"name\" content=\"Naïdi Tattoo\">\u003C\u002Fspan>\u003Cmeta itemprop=\"image\" content=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-01_DbgNuOwiL68_763276665.jpg\">\u003Cspan class=\"nt-micro\" itemprop=\"location\" itemscope itemtype=\"https:\u002F\u002Fschema.org\u002FPlace\">\u003Cmeta itemprop=\"name\" content=\"Auch, La Maison de Gascogne\">\u003Cmeta itemprop=\"address\" content=\"Auch, La Maison de Gascogne\">\u003C\u002Fspan>\u003Cp class=\"escale-une__date\">3 &amp; 4 octobre 2026\u003C\u002Fp>\u003Ch2 class=\"escale-une__titre\" id=\"escale-une-titre\" itemprop=\"name\">Auch Tattoo Convention — La Maison d’Encre\u003C\u002Fh2>\u003Cp class=\"escale-une__lieu\">Auch, La Maison de Gascogne · Naïdi présente\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\n        \u003Ca class=\"escale-une__lien\" href=\"\u002Fagenda\" data-pxl-id=\"escale-lien\" data-pxl-url=\"\u002Fagenda\" data-pxl-label=\"Prochaine escale — lien vers l’agenda\">Voir l’agenda\u003C\u002Fa>\n      \u003C\u002Fdiv>\n    \u003C\u002Fsection>",[],{"id":644,"nom":645,"type":598,"props":646,"masque":648,"variant":602,"espacement":603},"html-nt-contact","Se rencontrer",{"code":647},"\u003Csection class=\"closing\" id=\"contact\">\n      \u003Cimg\n        class=\"closing__whale\"\n        src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" srcset=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=600&resize=contain&quality=80 600w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Frender\u002Fimage\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp?width=900&resize=contain&quality=80 900w, https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp 1200w\" sizes=\"(max-width: 760px) 100vw, min(53vw, 700px)\" width=\"1200\" height=\"1200\" loading=\"lazy\" decoding=\"async\"\n        alt=\"\"\n        aria-hidden=\"true\"\n       data-pxl-id=\"contact-baleine\" data-pxl-image=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp\" data-pxl-label=\"Se rencontrer — baleine\">\n      \u003Cdiv class=\"closing__content reveal\">\n        \u003Cp class=\"section-label\" data-pxl-id=\"contact-surtitre\" data-pxl-texte=\"04 · Se rencontrer\" data-pxl-label=\"Se rencontrer — surtitre\">04 · Se rencontrer\u003C\u002Fp>\n        \u003Ch2 class=\"closing__title\">Votre idée.\u003Cspan data-pxl-id=\"contact-titre-accent\" data-pxl-titre=\"Son mouvement.\" data-pxl-label=\"Se rencontrer — titre, partie bleue\">Son mouvement.\u003C\u002Fspan>\u003C\u002Fh2>\n        \u003Ca class=\"closing__link\" href=\"\u002Fcontact\" data-pxl-id=\"contact-lien\" data-pxl-url=\"\u002Fcontact\" data-pxl-label=\"Se rencontrer — adresse du bouton « Parler du projet »\">Parler du\u003Cbr>projet\u003C\u002Fa>\n      \u003C\u002Fdiv>\n    \u003C\u002Fsection>",[],{"path":650,"title":651,"seo":652,"libraryVersion":591,"publishedAt":653,"apercu":23,"theme":654,"blocks":655},"\u002Fsysteme\u002Fpied","Pied de page",{"title":651,"description":15,"image":15},"2026-09-21T08:40:04.155+00:00",{"fond":575,"texte":576,"accent":577,"bordure":578,"surAccent":575,"fondSombre":575,"interligne":579,"texteClair":576,"casseTitres":580,"fondAttenue":581,"policeCorps":582,"policeTitre":583,"echelleTexte":584,"texteAttenue":585,"accentSecondaire":586},[656],{"id":657,"nom":651,"type":598,"props":658,"masque":660,"variant":602,"espacement":603},"html-nt-pied",{"code":659},"\u003Cfooter class=\"pied\" role=\"contentinfo\">\n    \u003Cdiv class=\"pied__bandeau\" aria-hidden=\"true\">\u003Cdiv class=\"pied__piste\">\u003Cspan class=\"pied__mot\" data-pxl-id=\"pied-mot-1\" data-pxl-texte=\"Tatouage sur mesure\" data-pxl-label=\"Pied — bandeau, mot 1\">Tatouage sur mesure\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\" data-pxl-id=\"pied-mot-2\" data-pxl-texte=\"Flashs singuliers\" data-pxl-label=\"Pied — bandeau, mot 2\">Flashs singuliers\u003C\u002Fspan>\u003Cspan class=\"pied__mot\" data-pxl-id=\"pied-mot-3\" data-pxl-texte=\"Créations hors peau\" data-pxl-label=\"Pied — bandeau, mot 3\">Créations hors peau\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\" data-pxl-id=\"pied-mot-4\" data-pxl-texte=\"Conventions &amp; guests\" data-pxl-label=\"Pied — bandeau, mot 4\">Conventions & guests\u003C\u002Fspan>\u003Cspan class=\"pied__mot\" data-pxl-id=\"pied-mot-5\" data-pxl-texte=\"Studio privé · Toulouse nord\" data-pxl-label=\"Pied — bandeau, mot 5\">Studio privé · Toulouse nord\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\" data-pxl-id=\"pied-mot-6\" data-pxl-texte=\"Sur rendez-vous\" data-pxl-label=\"Pied — bandeau, mot 6\">Sur rendez-vous\u003C\u002Fspan>\u003Cspan class=\"pied__mot\">Tatouage sur mesure\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\">Flashs singuliers\u003C\u002Fspan>\u003Cspan class=\"pied__mot\">Créations hors peau\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\">Conventions & guests\u003C\u002Fspan>\u003Cspan class=\"pied__mot\">Studio privé · Toulouse nord\u003C\u002Fspan>\u003Cspan class=\"pied__mot pied__mot--creux\">Sur rendez-vous\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"pied__colonnes\">\n      \u003Cnav class=\"pied__col\" aria-label=\"Pages du site\">\n        \u003Cp class=\"pied__titre\" data-pxl-id=\"pied-pages-titre\" data-pxl-texte=\"Pages\" data-pxl-label=\"Pied — colonne pages, titre\">Pages\u003C\u002Fp>\n        \u003Ca class=\"pied__lien\" href=\"\u002F\">\u003Csmall>00\u003C\u002Fsmall>Accueil\u003C\u002Fa>\n        \u003Ca class=\"pied__lien\" href=\"\u002Ftattoo\">\u003Csmall>N\u003C\u002Fsmall>Tattoo\u003C\u002Fa>\n        \u003Ca class=\"pied__lien\" href=\"\u002Fagenda\">\u003Csmall>O\u003C\u002Fsmall>Agenda\u003C\u002Fa>\n        \u003Ca class=\"pied__lien\" href=\"\u002Fqui-suis-je\">\u003Csmall>S\u003C\u002Fsmall>Qui suis-je\u003C\u002Fa>\n        \u003Ca class=\"pied__lien\" href=\"\u002Fcontact\">\u003Csmall>E\u003C\u002Fsmall>Contact\u003C\u002Fa>\n      \u003C\u002Fnav>\n      \u003Cdiv class=\"pied__col\">\n        \u003Cp class=\"pied__titre\" data-pxl-id=\"pied-studio-titre\" data-pxl-texte=\"Studio\" data-pxl-label=\"Pied — colonne studio, titre\">Studio\u003C\u002Fp>\n        \u003Cp class=\"pied__texte\" data-pxl-id=\"pied-studio-1\" data-pxl-texte=\"Studio privé\" data-pxl-label=\"Pied — studio, ligne 1\">Studio privé\u003C\u002Fp>\n        \u003Cp class=\"pied__texte\" data-pxl-id=\"pied-studio-2\" data-pxl-texte=\"Toulouse nord\" data-pxl-label=\"Pied — studio, ligne 2\">Toulouse nord\u003C\u002Fp>\n        \u003Cp class=\"pied__texte pied__texte--doux\" data-pxl-id=\"pied-studio-3\" data-pxl-texte=\"Sur rendez-vous · 18 ans révolus\" data-pxl-label=\"Pied — studio, ligne 3\">Sur rendez-vous · 18 ans révolus\u003C\u002Fp>\n        \u003Cimg class=\"pied__logo\" src=\"https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fnaidi-logo.svg\" alt=\"\" width=\"34\" height=\"34\" loading=\"lazy\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pied__col\">\n        \u003Cp class=\"pied__titre\" data-pxl-id=\"pied-suivre-titre\" data-pxl-texte=\"Suivre\" data-pxl-label=\"Pied — colonne suivre, titre\">Suivre\u003C\u002Fp>\n        \u003Ca class=\"pied__lien pied__lien--petit\" href=\"https:\u002F\u002Finstagram.com\u002Fnaidi.tattoo\" target=\"_blank\" rel=\"noopener\" data-pxl-id=\"pied-instagram\" data-pxl-url=\"https:\u002F\u002Finstagram.com\u002Fnaidi.tattoo\" data-pxl-label=\"Pied — lien Instagram\">Instagram — @naidi.tattoo\u003C\u002Fa>\n        \u003Ca class=\"pied__lien pied__lien--petit\" href=\"mailto:contact@naidi-tattoo.com\" data-pxl-id=\"pied-email\" data-pxl-url=\"mailto:contact@naidi-tattoo.com\" data-pxl-label=\"Pied — adresse e-mail\">contact@naidi-tattoo.com\u003C\u002Fa>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"pied__col\">\n        \u003Cp class=\"pied__titre\" data-pxl-id=\"pied-projet-titre\" data-pxl-texte=\"Une idée ?\" data-pxl-label=\"Pied — colonne projet, titre\">Une idée ?\u003C\u002Fp>\n        \u003Ca class=\"pied__cta\" href=\"\u002Fcontact\">\u003Cspan data-pxl-id=\"pied-projet-bouton\" data-pxl-texte=\"Proposer un projet\" data-pxl-label=\"Pied — bouton projet\">Proposer un projet\u003C\u002Fspan>\u003Cspan class=\"pied__cta-fleche\" aria-hidden=\"true\">→\u003C\u002Fspan>\u003C\u002Fa>\n        \u003Cp class=\"pied__note\" data-pxl-id=\"pied-projet-note\" data-pxl-texte=\"Réponse sous 3 à 5 jours ouvrés\" data-pxl-label=\"Pied — note sous le bouton\">Réponse sous 3 à 5 jours ouvrés\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"pied__signature\" aria-hidden=\"true\">\u003Cspan class=\"pied__nom\" data-court=\"Naïdi\">Naïdi Tattoo\u003C\u002Fspan>\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"pied__bas\">\n      \u003Cspan class=\"pied__copyright\">\u003Cspan data-pxl-id=\"pied-copyright\" data-pxl-texte=\"© 2026 Naïdi Tattoo\" data-pxl-label=\"Pied — mention\">© 2026 Naïdi Tattoo\u003C\u002Fspan> — site par \u003Ca href=\"https:\u002F\u002Fwww.piks-l.com\" target=\"_blank\" rel=\"noopener\">Piks-l\u003C\u002Fa>\u003C\u002Fspan>\n      \u003Cspan class=\"pied__legal\">\u003Ca href=\"\u002Fmentions-legales\">Mentions légales\u003C\u002Fa>\u003Ca href=\"\u002Fconfidentialite\">Confidentialité\u003C\u002Fa>\u003C\u002Fspan>\n      \u003Ca class=\"pied__haut\" href=\"#top\" data-pxl-id=\"pied-haut\" data-pxl-texte=\"Retour en haut ↑\" data-pxl-label=\"Pied — retour en haut\">Retour en haut ↑\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Ffooter>",[],[662,676,687,699],{"id":663,"slug":664,"title":665,"excerpt":666,"content_html":667,"cover_url":668,"published_at":669,"tags":670,"category":672,"content":667,"content_text":675},"4a7eeb7b-1677-428d-aed8-2466bf208894","auch-tattoo-convention-2026","Auch Tattoo Convention — La Maison d’Encre","3 & 4 octobre 2026 · Auch, La Maison de Gascogne · Naïdi présente","\u003Cp>Naïdi sera à l’\u003Cstrong>Auch Tattoo Convention — La Maison d’Encre\u003C\u002Fstrong>, les \u003Cstrong>3 et 4 octobre 2026\u003C\u002Fstrong>, à la Maison de Gascogne, 32000 Auch.\u003C\u002Fp>\u003Cp>Pour réserver un créneau sur place, écrivez dès maintenant en précisant la zone et le format : les conditions du studio s’appliquent (acompte de 50 €, 18 ans révolus).\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.instagram.com\u002Fla_maison_dencre\u002Fp\u002FDbgNuOwiL68\u002F\" target=\"_blank\" rel=\"noopener\">L’annonce de la convention sur Instagram\u003C\u002Fa>\u003C\u002Fp>","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-01_DbgNuOwiL68_763276665.jpg","2026-09-17T11:44:57.718+00:00",[671],"convention",{"label":673,"slug":674,"color":15},"Agenda","agenda","Naïdi sera à l’Auch Tattoo Convention — La Maison d’Encre, les 3 et 4 octobre 2026, à la Maison de Gascogne, 32000 Auch.\nPour réserver un créneau sur place, écrivez dès maintenant en précisant la zone et le format : les conditions du studio s’appliquent (acompte de 50 €, 18 ans révolus).\nL’annonce de la convention sur Instagram",{"id":677,"slug":678,"title":679,"excerpt":680,"content_html":681,"cover_url":682,"published_at":683,"tags":684,"category":15,"content":681,"content_text":686},"3cf27dae-c138-4cb6-adb3-f2b6d813bc26","conventions-2026-ou-me-trouver","Conventions 2026 : où me trouver","Trois dates posées, deux guests en préparation. Le calendrier de l'année, mis à jour au fil des confirmations.","\u003Cp>L'année s'organise — voici les dates confirmées, les autres suivront ici même.\u003C\u002Fp>\u003Ch2>Les dates posées\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cstrong>Mars — Toulouse\u003C\u002Fstrong> : à domicile, stand partagé avec l'atelier. Flashs réservés aux conventions, créés pour l'occasion.\u003C\u002Fli>\u003Cli>\u003Cstrong>Juin — Lyon\u003C\u002Fstrong> : première fois là-bas, projets moyens et grands formats privilégiés.\u003C\u002Fli>\u003Cli>\u003Cstrong>Octobre — Barcelone\u003C\u002Fstrong> : guest d'une semaine en atelier, en plus de la convention.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Réserver une place en convention\u003C\u002Fh2>\u003Cp>Les créneaux de convention partent vite et se réservent à l'avance — un message avec votre projet et la date visée, et je vous dis si c'est jouable. Les acomptes suivent les mêmes règles qu'à l'atelier.\u003C\u002Fp>\u003Cp>Les pièces réalisées en convention rejoignent la galerie \u003Cem>Réalisations\u003C\u002Fem> au retour, avec l'accord de chacun.\u003C\u002Fp>","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002F1785850778075-349447-berserk.jpg","2026-08-02T17:43:52.790228+00:00",[685,674],"conventions","L'année s'organise — voici les dates confirmées, les autres suivront ici même.\nLes dates posées\nMars — Toulouse : à domicile, stand partagé avec l'atelier. Flashs réservés aux conventions, créés pour l'occasion.\nJuin — Lyon : première fois là-bas, projets moyens et grands formats privilégiés.\nOctobre — Barcelone : guest d'une semaine en atelier, en plus de la convention.\nRéserver une place en convention\nLes créneaux de convention partent vite et se réservent à l'avance — un message avec votre projet et la date visée, et je vous dis si c'est jouable. Les acomptes suivent les mêmes règles qu'à l'atelier.\nLes pièces réalisées en convention rejoignent la galerie Réalisations au retour, avec l'accord de chacun.",{"id":688,"slug":689,"title":690,"excerpt":691,"content_html":692,"cover_url":693,"published_at":694,"tags":695,"category":15,"content":692,"content_text":698},"4cee749f-d74d-4269-aec3-1497c5d85a7e","flashs-d-automne-la-serie-est-en-ligne","Flashs d'automne : la série est en ligne","Douze dessins, chacun tatoué une seule fois. La galerie est ouverte, les réservations aussi.","\u003Cp>La série d'automne est en ligne dans la galerie \u003Cem>Flashs disponibles\u003C\u002Fem> : douze pièces autour des forêts renversées et des bêtes couronnées — du 8 cm discret à la pièce d'avant-bras.\u003C\u002Fp>\u003Cp>Le principe ne change pas : \u003Cstrong>chaque flash n'est tatoué qu'une seule fois\u003C\u002Fstrong>, puis retiré du catalogue. Le prix affiché comprend la séance et la retouche à six semaines.\u003C\u002Fp>\u003Ch2>Comment réserver\u003C\u002Fh2>\u003Cp>Un message avec le nom du flash et l'emplacement souhaité suffit. Je réponds sous 48 h avec les créneaux — un acompte de 30 % cale la date.\u003C\u002Fp>\u003Cp>Les pièces qui ne trouvent pas preneur au bout de trois mois finissent en tirage d'art, à retrouver dans la boutique.\u003C\u002Fp>","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002F1785847505419-berserk-dark-fantasy-manga-artwork-hfe79ahht04btnav.jpg","2026-07-29T17:43:52.790228+00:00",[696,697],"flashs","actualite","La série d'automne est en ligne dans la galerie Flashs disponibles : douze pièces autour des forêts renversées et des bêtes couronnées — du 8 cm discret à la pièce d'avant-bras.\nLe principe ne change pas : chaque flash n'est tatoué qu'une seule fois, puis retiré du catalogue. Le prix affiché comprend la séance et la retouche à six semaines.\nComment réserver\nUn message avec le nom du flash et l'emplacement souhaité suffit. Je réponds sous 48 h avec les créneaux — un acompte de 30 % cale la date.\nLes pièces qui ne trouvent pas preneur au bout de trois mois finissent en tirage d'art, à retrouver dans la boutique.",{"id":700,"slug":701,"title":702,"excerpt":703,"content_html":704,"cover_url":705,"published_at":706,"tags":707,"category":15,"content":704,"content_text":710},"ab1cf0e6-c08d-49ec-a0fc-65b9f630cc59","soigner-son-tatouage-les-8-premiers-jours","Soigner son tatouage : les 8 premiers jours","Ce que je répète en fin de séance, posé par écrit : le film, le savon, la crème — et les trois erreurs qui coûtent une retouche.","\u003Cp>Un tatouage guérit en deux temps : une semaine de soins actifs, un mois de patience. Voici la première semaine, jour par jour.\u003C\u002Fp>\u003Ch2>Jours 1 à 3 — le film et le savon\u003C\u002Fh2>\u003Cp>Gardez le film de protection trois heures, pas plus. Ensuite : lavage à la main, savon neutre, eau tiède, séchage en tamponnant avec un essuie-tout. Deux fois par jour, pas dix.\u003C\u002Fp>\u003Ch2>Jours 3 à 8 — la crème, en couche fine\u003C\u002Fh2>\u003Cp>Une noisette, massée jusqu'à absorption. Si la peau brille, c'est trop. La croûte fine qui se forme ne se gratte pas — elle part seule, avec l'excédent d'encre.\u003C\u002Fp>\u003Ch2>Les trois erreurs qui coûtent une retouche\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cstrong>La piscine et le soleil\u003C\u002Fstrong> — un mois d'abstinence, sans négociation.\u003C\u002Fli>\u003Cli>\u003Cstrong>Le sport intensif\u003C\u002Fstrong> les trois premiers jours : la sueur macère sous le vêtement.\u003C\u002Fli>\u003Cli>\u003Cstrong>Gratter.\u003C\u002Fstrong> Ça démange au jour 5, c'est normal, ça passe.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Un doute, une rougeur qui s'étend, une douleur qui augmente au lieu de baisser : écrivez-moi, photo à l'appui. La retouche à six semaines est comprise — autant qu'elle serve à ajuster un détail, pas à réparer une semaine de piscine.\u003C\u002Fp>","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002F1785840347209-a6d8957d-d02f-456f-a05e-ce91f468c129-md.jpeg","2026-07-15T17:43:52.790228+00:00",[708,709],"soins","conseils","Un tatouage guérit en deux temps : une semaine de soins actifs, un mois de patience. Voici la première semaine, jour par jour.\nJours 1 à 3 — le film et le savon\nGardez le film de protection trois heures, pas plus. Ensuite : lavage à la main, savon neutre, eau tiède, séchage en tamponnant avec un essuie-tout. Deux fois par jour, pas dix.\nJours 3 à 8 — la crème, en couche fine\nUne noisette, massée jusqu'à absorption. Si la peau brille, c'est trop. La croûte fine qui se forme ne se gratte pas — elle part seule, avec l'excédent d'encre.\nLes trois erreurs qui coûtent une retouche\nLa piscine et le soleil — un mois d'abstinence, sans négociation.\nLe sport intensif les trois premiers jours : la sueur macère sous le vêtement.\nGratter. Ça démange au jour 5, c'est normal, ça passe.\nUn doute, une rougeur qui s'étend, une douleur qui augmente au lieu de baisser : écrivez-moi, photo à l'appui. La retouche à six semaines est comprise — autant qu'elle serve à ajuster un détail, pas à réparer une semaine de piscine.",[712,815,834],{"id":713,"slug":714,"title":715,"description":716,"cover_url":717,"categories":718,"accent_color":15,"is_hero":23,"sort_order":719,"tags":720,"category":15,"photos":721,"photo_count":814},"458dc061-f008-4a7d-86af-750c0e11fbe0","tatouages","Tatouages","Sur la peau : des pièces dessinées pour la personne qui les porte.","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_771968455.jpg",[],10,[],[722,728,733,738,743,749,754,760,765,770,776,782,788,796,802,808],{"id":723,"gallery_id":713,"url":717,"alt":724,"description":725,"width":726,"height":727,"sort_order":719},"7e9988c1-b83e-4dff-871d-85a6a78dece5","Oiseau tatoué sur le haut du bras — vue 1 sur 4","Oiseau, haut du bras",1440,1920,{"id":729,"gallery_id":713,"url":730,"alt":731,"description":725,"width":726,"height":727,"sort_order":732},"cf0e94ee-8dac-43b4-b5c3-4f98e9e1844f","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772521499.jpg","Oiseau tatoué sur le haut du bras — vue 2 sur 4",20,{"id":734,"gallery_id":713,"url":735,"alt":736,"description":725,"width":726,"height":727,"sort_order":737},"822ac58e-1909-4566-aca9-7f344ae9024a","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772559925.jpg","Oiseau tatoué sur le haut du bras — vue 3 sur 4",30,{"id":739,"gallery_id":713,"url":740,"alt":741,"description":725,"width":726,"height":727,"sort_order":742},"70811572-79b5-47ba-9ecd-06cd4b6c3c30","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-08-10_Db3qS34DSzG_772760536.jpg","Oiseau tatoué sur le haut du bras — vue 4 sur 4",40,{"id":744,"gallery_id":713,"url":745,"alt":746,"description":747,"width":726,"height":727,"sort_order":748},"b111f61c-6070-4f18-9e17-d4ff79062305","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_746268819.jpg","Composition sur le bras — vues du 15 juillet 2026 — vue 1 sur 2","Composition sur le bras",50,{"id":750,"gallery_id":713,"url":751,"alt":752,"description":747,"width":726,"height":727,"sort_order":753},"2a339e33-ece2-433f-bc2c-bd18dd0e199b","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0ecTijakM_748287200.jpg","Composition sur le bras — vues du 15 juillet 2026 — vue 2 sur 2",60,{"id":755,"gallery_id":713,"url":756,"alt":757,"description":758,"width":726,"height":727,"sort_order":759},"452deab5-dcc2-4bb9-ae5e-65356a63cd80","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746842690.jpg","Composition sur le bras — deuxième série du 15 juillet 2026 — vue 1 sur 3","Composition sur le bras, deuxième série",70,{"id":761,"gallery_id":713,"url":762,"alt":763,"description":758,"width":726,"height":727,"sort_order":764},"9306b7fc-be2f-4763-98e9-81896376e28b","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_746854705.jpg","Composition sur le bras — deuxième série du 15 juillet 2026 — vue 2 sur 3",80,{"id":766,"gallery_id":713,"url":767,"alt":768,"description":758,"width":726,"height":727,"sort_order":769},"6d25c32a-53bb-4679-b749-1a254c1f48d4","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-15_Da0eQzkjfmC_748287640.jpg","Composition sur le bras — deuxième série du 15 juillet 2026 — vue 3 sur 3",90,{"id":771,"gallery_id":713,"url":772,"alt":773,"description":774,"width":726,"height":727,"sort_order":775},"cf89b965-7aab-4ed7-bebb-4fede13bc30c","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-27_DaGcSx2NBC9_730049393.jpg","Lion tatoué sur le torse","Lion sur le torse",100,{"id":777,"gallery_id":713,"url":778,"alt":779,"description":780,"width":726,"height":727,"sort_order":781},"9e663a02-e33e-4297-a6d9-55c2827e4ac6","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-24_DZ-LRvsNdVX_731438763.jpg","Crâne d’oiseau tatoué","Crâne d’oiseau",110,{"id":783,"gallery_id":713,"url":784,"alt":785,"description":786,"width":726,"height":727,"sort_order":787},"f8941117-a359-4730-bcaa-28b7302c1755","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-06-12_DZfmyAmN13i_721575898.jpg","Motif organique tatoué sur l’avant-bras","Motif organique, avant-bras",120,{"id":789,"gallery_id":713,"url":790,"alt":791,"description":792,"width":793,"height":794,"sort_order":795},"bbbf2c8a-5cb9-40ec-ae27-653e721781b6","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fenvol-floral.jpg","Tatouage Envol floral","Envol floral",640,853,510,{"id":797,"gallery_id":713,"url":798,"alt":799,"description":800,"width":793,"height":794,"sort_order":801},"c3f1ea41-bbe6-4c9f-85ee-51fc9c0f442f","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fjardin-organique.jpg","Tatouage Jardin organique","Jardin organique",520,{"id":803,"gallery_id":713,"url":804,"alt":805,"description":806,"width":793,"height":794,"sort_order":807},"9649cf5a-7603-47f3-9e34-809f0939266b","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fheron-lunaire.jpg","Tatouage Héron lunaire","Héron lunaire",530,{"id":809,"gallery_id":713,"url":810,"alt":811,"description":812,"width":793,"height":794,"sort_order":813},"3b402f1b-d646-4c65-9bc6-bed02327833a","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fportfolio\u002Frealisations\u002Fgardienne-iris.jpg","Tatouage Gardienne Iris","Gardienne Iris",540,16,{"id":816,"slug":696,"title":817,"description":818,"cover_url":819,"categories":820,"accent_color":15,"is_hero":23,"sort_order":732,"tags":821,"category":15,"photos":822,"photo_count":833},"b9a6a058-d220-4b59-af36-ea643cfc93b2","Planches flash","Des dessins prêts à être tatoués, chacun une seule fois.","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-09-01_DcwK6yRNu34_791477421.jpg",[],[],[823,828],{"id":824,"gallery_id":816,"url":819,"alt":825,"description":826,"width":726,"height":827,"sort_order":719},"855cf684-7695-4c3d-a2ca-5685cfbe5a1a","Flash disponible — dessin de créature","Créature",1624,{"id":829,"gallery_id":816,"url":830,"alt":831,"description":832,"width":726,"height":727,"sort_order":732},"44dfb8b7-b805-4d40-8950-fb0801cbbaca","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2026-07-27_DbTliqYt-BP_758480986.jpg","L’hirondelle — flash disponible","L’hirondelle",2,{"id":835,"slug":836,"title":837,"description":838,"cover_url":839,"categories":840,"accent_color":15,"is_hero":23,"sort_order":737,"tags":841,"category":15,"photos":842,"photo_count":859},"7bc320bd-34fb-4651-9c91-a0dec3120dc3","hors-peau","Tableaux, skates & créations","Hors peau : originaux, tableaux et objets tatoués — les mêmes lignes, sur d’autres matières.","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-22_DBbwt0iIcKs_464079843.jpg",[],[],[843,848,853],{"id":844,"gallery_id":835,"url":839,"alt":845,"description":846,"width":726,"height":847,"sort_order":719},"b8ce49b6-7094-468b-9f10-bc3315ca4f5f","Libre — aquarelle sur feuille A3","Libre",1800,{"id":849,"gallery_id":835,"url":850,"alt":851,"description":852,"width":726,"height":847,"sort_order":732},"97cf1c7d-4c8a-4c46-8d52-4c0171f48d5c","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Finstagram\u002Flot-01\u002F2024-10-04_DAte57nIoVg_461947176.jpg","L’œil observé — aquarelle et crayon, format A3","L’œil observé",{"id":854,"gallery_id":835,"url":855,"alt":856,"description":857,"width":858,"height":858,"sort_order":795},"424a17a6-e84c-4c92-846f-cd777cd802e9","https:\u002F\u002Fjunsemvatdqpwwyivtys.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fmedia\u002Fsites\u002F0ec20383-192b-449e-ac98-2d62dda3f633\u002Fkit\u002Fassets\u002Fui\u002Fwhale\u002Fnaidi-whale-master.webp","Baleine illustrée, œuvre signature de Naïdi","La baleine — œuvre-signature",1200,3,[861,874,886,898,909,920],{"id":862,"slug":863,"name":864,"description":865,"price_cents":866,"currency":867,"images":868,"stock":869,"active":870,"tags":871,"category":15,"description_html":865,"variants":873},"2257a7e8-2a7c-4163-b487-3a0820d61d4f","bon-cadeau-seance","Bon cadeau — séance de tatouage","Un bon à offrir, valable un an sur toutes les prestations : flash, projet personnalisé ou toile. Envoyé par e-mail sous 24 h avec sa mise en page dédiée, ou imprimé sur papier coton sur demande.\n\nLe montant se déduit du devis final.",10000,"EUR",[],99,true,[872],"cadeau",[],{"id":875,"slug":876,"name":877,"description":878,"price_cents":879,"currency":867,"images":880,"stock":881,"active":870,"tags":882,"category":15,"description_html":878,"variants":885},"710bccf3-6ce2-4e98-a54f-f3c864a2edc2","toile-le-jardin-des-songes","Toile — Le Jardin des songes","Acrylique et encre sur toile, 50 × 70 cm. Une serre de plantes impossibles où poussent des yeux clos — pièce unique, signée, vendue avec certificat.\n\nRemise en main propre à Toulouse ou envoi caisse bois.",42000,[682],1,[883,884],"toile","piece-unique",[],{"id":887,"slug":888,"name":889,"description":890,"price_cents":891,"currency":867,"images":892,"stock":881,"active":870,"tags":893,"category":15,"description_html":890,"variants":897},"b59c5e57-c814-48c7-ba88-e4f42470284b","flash-le-corbeau-roi","Flash — Le Corbeau Roi","Dessin unique, tatoué une seule fois puis retiré du catalogue. Corbeau couronné aux ramures végétales, encre noire et ombrages gris — environ 15 cm, avant-bras ou mollet.\n\nLe prix comprend la séance et une retouche à six semaines.",18000,[693],[894,895,896],"flash","disponible","noir-et-gris",[],{"id":899,"slug":900,"name":901,"description":902,"price_cents":903,"currency":867,"images":904,"stock":732,"active":870,"tags":905,"category":15,"description_html":902,"variants":908},"b7e8ed08-14cf-4351-8496-12f2031fa554","tirage-l-encre-de-lune","Tirage d'art — L'Encre de lune","Impression fine art A3 sur papier coton 310 g, encres pigmentaires. Édition limitée à 30 exemplaires, numérotés et signés au dos.\n\nExpédié à plat sous cartonnage rigide.",4500,[682],[906,907],"tirage","edition-limitee",[],{"id":910,"slug":911,"name":912,"description":913,"price_cents":914,"currency":867,"images":915,"stock":859,"active":870,"tags":916,"category":15,"description_html":913,"variants":919},"cc0af0c9-556b-4c01-8d80-0edd99356718","skate-nuit-blanche","Skate peint main — Nuit blanche","Planche érable 8\", peinte à la main puis vernie. Motif crâne lunaire et papillons de nuit — à rouler ou à accrocher, fixation murale fournie.\n\nChaque planche est peinte à la commande : comptez trois semaines.",15000,[705],[917,918],"skate","peint-main",[],{"id":921,"slug":922,"name":923,"description":15,"price_cents":903,"currency":867,"images":924,"stock":719,"active":870,"tags":925,"category":15,"description_html":15,"variants":926},"40e75e7d-f830-4bb2-a3df-edfbcd679fd3","skate-1","Skate 1",[],[],[]]