  
                                       
                                                                             
                                                                          
   

/* Portale property pages — the injected cinematic figure inherited an
   editorial off-grid width that enlarged the document by up to 440px. */
body[data-page="portale-property"].cv3-witness-luxury-property .bien-gal{
  min-width:0;
  overflow:clip;
}
body[data-page="portale-property"].cv3-witness-luxury-property .bien-gal > .cv3-plane--horizon{
  box-sizing:border-box;
  left:auto !important;
  right:auto !important;
  width:min(100%,1180px) !important;
  max-width:100% !important;
  margin-inline:auto !important;
  transform:none !important;
}
body[data-page="portale-property"].cv3-witness-luxury-property .bien-gal > .cv3-plane--horizon > img{
  max-width:100% !important;
}

/* The final seal is intentionally rotated, but must never create a mobile
   horizontal scroll region. Keep its gesture inside the reading frame. */
@media (max-width:900px){
  body[data-page="portale-property"].cv3-witness-luxury-property .cachet-final{
    box-sizing:border-box;
    width:calc(100% - 24px) !important;
    max-width:calc(100% - 24px) !important;
    margin-inline:auto !important;
    transform:rotate(-2deg) scale(.98) !important;
    transform-origin:center !important;
  }
}

@media (prefers-reduced-motion:reduce){
  body[data-page="portale-property"].cv3-witness-luxury-property .cachet-final{
    transform:none !important;
  }
}

/* Urgence éditoriale 14.08.2026 -----------------------------------------
   Ces règles ferment les dernières collisions visuelles observées sur les
   témoins 1440 / 390. Elles n'ajoutent aucun moteur, canvas ou RAF. */

/* La neige reste une condition lumineuse et thermique. Les anciens points
   blancs, trop proches d'un filtre décoratif, sont supprimés. */
body[data-cv-weather="snow"] #accueil #oc-maison::after,
body.cv-local-snow #accueil #oc-maison::after{
  content:none !important;
  display:none !important;
  animation:none !important;
}
/* Le même motif ponctué avait été réinjecté par les chambres CV3, notamment
   sur Portale. Les champs lumineux subsistent, leur semis de points non. */
body[data-page] .cv3-boussole-field::after,
body[data-page] .cv3-room-light::before{
  content:none !important;
  display:none !important;
  animation:none !important;
}

/* Contraste explicite : aucun texte blanc sur ivoire, ni graphite sur nuit. */
body[data-page] :is(.sec--blanc,.sec--creme){
  color:#171718 !important;
}
body[data-page] :is(.sec--blanc,.sec--creme)
  :is(h1,h2,h3,h4,.display,.h2,.stmt,.lead,.body,p,li){
  color:inherit;
  -webkit-text-fill-color:currentColor;
}
body[data-page] :is(.sec--noir,.lux-deep,.folco,.cp-article,.ft){
  color:#f3eee5 !important;
}
body[data-page] :is(.sec--noir,.lux-deep,.folco,.cp-article,.ft)
  :is(h1,h2,h3,h4,.display,.h2,.stmt,.lead,.body,p,li){
  color:inherit;
  -webkit-text-fill-color:currentColor;
}

/* Titres et signatures restent dans leur boîte, y compris avec les fontes
   Bodoni chargées tardivement et les traductions plus longues. */
body[data-page] :is(.display,.h2,.ph-h1,.pj-h1,.cp-page-title,.cp-title,
  .pensee-h1,.pm-stanza,.folco-name,.folco-signature){
  max-width:100%;
  overflow:visible;
  overflow-wrap:anywhere;
  text-wrap:balance;
}

/* Maison / Folco : la colonne éditoriale ne coupe ni le nom ni la signature. */
body[data-page="about"] .folco,
body[data-page="about"] .folco-grid,
body[data-page="about"] .folco-text{
  overflow:visible !important;
}
body[data-page="about"] .folco-name{
  display:block !important;
  height:auto !important;
  min-height:0 !important;
  max-height:none !important;
  line-height:var(--cv-typo-current-lh, 1.08) !important;
  padding-block:.12em .22em !important;
  font-size:var(--cv-typo-current-fs, clamp(62px,6.2vw,92px)) !important;
  overflow:visible !important;
  overflow-wrap:normal !important;
  word-break:normal !important;
}
body[data-page="about"] .folco-name span,
body[data-page="about"] .folco-name em{
  display:block !important;
  height:auto !important;
  min-height:1.4em !important;
  max-height:none !important;
  line-height:var(--cv-typo-current-lh, 1.08) !important;
  padding-block:.08em .18em !important;
  box-sizing:content-box !important;
  white-space:normal !important;
  overflow:visible !important;
}
/* K3-B : l'italique Bodoni de « Caravelli » déborde son chasse à droite ;
   sans réserve inline, le « i » final est rogné (« Caravell. »). */
body[data-page="about"] .folco-name em{
  padding-inline-end:.14em !important;
}
body[data-page="about"] .folco-signature{
  width:auto !important;
  white-space:normal;
}
body[data-page="about"] .split .display{
  font-size:var(--cv-typo-current-fs, clamp(56px,5.4vw,78px)) !important;
  line-height:var(--cv-typo-current-lh, .96) !important;
}

/* Pensée — l'ancienne sculpture procédurale low-poly et son texte ivoire sur
   ivoire ne respectaient pas le niveau visuel demandé. La section devient un
   cartel minéral lisible : sobriété, profondeur, aucun volume artificiel. */
body[data-page="pensee"] .hc-atelier{
  background:
    radial-gradient(circle at 68% 18%,rgba(221,204,171,.08),transparent 36%),
    linear-gradient(137deg,#111315,#070809 78%) !important;
  color:#f3eee5 !important;
  border-block:1px solid rgba(211,190,151,.2);
  overflow:hidden;
}
body[data-page="pensee"] .hc-atelier .container{
  position:relative;
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:clamp(18px,2.2vw,34px);
  max-width:min(1040px,calc(100% - 2 * var(--pad))) !important;
  padding-block:clamp(88px,10vw,148px) !important;
}
body[data-page="pensee"] .hc-atelier .container::before{
  content:"";
  position:absolute;
  inset:clamp(42px,5vw,76px) 0 auto;
  height:1px;
  background:linear-gradient(90deg,transparent,rgba(211,190,151,.48),transparent);
}
body[data-page="pensee"] .hc-atelier .hc-sculpture{
  display:none !important;
}
body[data-page="pensee"] .hc-atelier :is(.hc-capitale,.hc-eclat,.hc-atelier-note){
  position:relative;
  max-width:760px;
  color:inherit !important;
  -webkit-text-fill-color:currentColor !important;
  text-shadow:0 14px 46px rgba(0,0,0,.42);
}
body[data-page="pensee"] .hc-atelier .hc-capitale{
  color:#d5bf8d !important;
  -webkit-text-fill-color:#d5bf8d !important;
  letter-spacing:var(--cv-typo-current-ls, .22em);
}
body[data-page="pensee"] .hc-atelier .hc-eclat{
  font-size:var(--cv-typo-current-fs, clamp(48px,7vw,112px)) !important;
  line-height:var(--cv-typo-current-lh, .92) !important;
}
body[data-page="pensee"] .hc-atelier .hc-atelier-note{
  color:rgba(243,238,229,.82) !important;
  -webkit-text-fill-color:rgba(243,238,229,.82) !important;
  font-size:var(--cv-typo-current-fs, clamp(19px,2vw,31px)) !important;
  line-height:var(--cv-typo-current-lh, 1.62) !important;
}
body[data-page="pensee"] .hc-atelier .hc-filet{
  width:min(320px,100%);
  border-color:rgba(211,190,151,.38) !important;
}

/* Les héros institutionnels peuvent être clairs sur leur moitié haute. Le
   bandeau desktop reçoit donc un fond stable au lieu de compter sur l'image. */
@media (min-width:1181px){
  body[data-page="about"] .hd,
  body[data-page="portfolio"] .hd,
  body[data-page="savoir-faire"] .hd,
  body[data-page="pensee"] .hd,
  body[data-page="chantiers-prives"] .hd,
  body[data-page^="projets-"] .hd{
    background:rgba(20,20,21,.94) !important;
    border-bottom:1px solid rgba(243,238,229,.14) !important;
    backdrop-filter:blur(16px) saturate(108%);
  }
}

/* Portfolio, Méthode, Pensée et Chantiers : rythme plus net, contenus sans
   largeur implicite, médias contenus et paragraphes toujours lisibles. */
body[data-page="portfolio"] :is(.v6-inline-portfolio-32,.v6-inline-portfolio-118),
body[data-page="savoir-faire"] :is(.split,.sf-grid),
body[data-page="chantiers-prives"] .cp-article,
body[data-page="pensee"] :is(.pensee-hero-inner,.pensee-body-inner){
  min-width:0;
}
body[data-page="portfolio"] :is(.v6-inline-portfolio-32,.v6-inline-portfolio-118) > *,
body[data-page="savoir-faire"] :is(.split,.sf-grid) > *,
body[data-page="chantiers-prives"] .cp-article > *{
  min-width:0;
}
body[data-page="chantiers-prives"] .cp-content{
  padding:clamp(48px,6vw,96px) !important;
}
body[data-page="chantiers-prives"] .cp-article{
  align-items:center;
  background:
    radial-gradient(circle at 84% 18%,rgba(211,190,151,.08),transparent 32%),
    linear-gradient(135deg,#111315,#070809 78%) !important;
}
body[data-page="chantiers-prives"] .cp-media{
  overflow:hidden;
  background:#090b0d;
}
body[data-page="chantiers-prives"] .cp-media :is(video,img){
  display:block;
  width:100%;
  height:100%;
  min-height:clamp(420px,58vw,760px);
  object-fit:cover;
  object-position:center;
}
/* K3-E : olympe-system impose object-fit:contain sur la vidéo verticale
   720×1280 des articles — d'où deux larges bandes noires latérales dans
   l'écrin. Le média remplit désormais l'écrin, cadré au centre. */
body[data-page="chantiers-prives"] .cp-article > .cp-media :is(video,img){
  object-fit:cover !important;
  object-position:center center !important;
}
body[data-page="chantiers-prives"] .cp-content :is(.cp-kicker,.cp-title,.cp-copy,.cp-meta){
  color:#f3eee5 !important;
  -webkit-text-fill-color:currentColor !important;
}
body[data-page="chantiers-prives"] .cp-copy{
  max-width:62ch;
  color:rgba(243,238,229,.82) !important;
}
body[data-page="chantiers-prives"] .cp-title{
  overflow:visible !important;
  line-height:var(--cv-typo-current-lh, 1.12) !important;
  padding-block:.1em .2em !important;
}
body[data-page="chantiers-prives"] .cp-copy,
body[data-page="savoir-faire"] :is(.lead,.sf-b),
body[data-page="pensee"] .pm-stanza{
  line-height:var(--cv-typo-current-lh, 1.62);
}
/* Le titre de matière appartient à une demi-colonne, pas au plein écran. */
body[data-page="savoir-faire"] .sec--noir .split .display{
  font-size:var(--cv-typo-current-fs, clamp(42px,4.3vw,74px)) !important;
  line-height:var(--cv-typo-current-lh, 1.08) !important;
  clip-path:none !important;
  overflow:visible !important;
}

/* Chantiers privés — la vidéo reste cadrée dans son écrin, mais l'article ne
   coupe plus le texte. Le défaut observé venait d'un overflow hérité sur le
   conteneur global : les blocs éditoriaux étaient plus hauts que leur boîte. */
body[data-page="chantiers-prives"] .cp-article{
  overflow:visible !important;
  height:auto !important;
  min-height:88svh !important;
  align-items:stretch !important;
}
body[data-page="chantiers-prives"] .cp-content{
  overflow:visible !important;
  min-height:auto !important;
  align-self:center !important;
}
body[data-page="chantiers-prives"] .cp-actions{
  position:relative;
  z-index:3;
}
body[data-page="pensee"] .pensee-body-inner{
  width:min(880px,calc(100% - 2 * var(--pad)));
  margin-inline:auto;
}
/* Pensée : le seuil et le papier éditorial partagent leur encre Albâtre.
   Le film et la sculpture conservent leur contrechamp d'origine. */
body[data-page="pensee"] .pensee-hero :is(h1,h1 span,h1 em,p,.pensee-eyebrow){
  color:#243840 !important;
  -webkit-text-fill-color:currentColor;
  text-shadow:none;
}
body[data-page="pensee"] .pensee-hero::before{
  opacity:.12;
  background:linear-gradient(110deg,rgba(245,249,247,.9),rgba(205,223,224,.3));
  animation:none;
}

/* Portfolio — recadrage plus éditorial : les images gardent une respiration et
   ne se comportent plus comme une mosaïque brute. */
body[data-page="portfolio"] :is(.v6-inline-portfolio-32,.c12p__grid){
  gap:clamp(22px,3vw,54px) !important;
}
body[data-page="portfolio"] .v6-inline-portfolio-32 > a{
  background:#101214;
  border:1px solid rgba(213,191,142,.18);
  box-shadow:0 28px 90px rgba(0,0,0,.22);
}
body[data-page="portfolio"] .v6-inline-portfolio-32 > a :is(img,video),
body[data-page="portfolio"] .c12p__card img{
  width:100% !important;
  object-fit:cover !important;
  object-position:center 46% !important;
}
body[data-page="portfolio"] .v6-inline-portfolio-32 > a :is(img,video){
  aspect-ratio:16 / 11;
  height:auto !important;
  min-height:clamp(280px,32vw,560px);
}
/* K3-D : lorsque l'orchestrateur pose .cv3-witness-portfolio, l'ancre a sa
   propre hauteur (min-height monumentale au desktop, aspect-ratio 4/5 au
   mobile). Le média en flux laissait alors une bande vide entre l'image et
   la légende — la « carte cassée ». Le média remplit désormais l'écrin. */
body.cv3-witness-portfolio[data-page="portfolio"] .v6-inline-portfolio-32 > a :is(img,video){
  position:absolute;
  inset:0;
  aspect-ratio:auto;
  min-height:0;
  height:100% !important;
}
/* K3-D : Cap-Ferrat — la colonne de droite (deux visuels 16/10) est plus
   haute que le visuel principal ; en flux, l'image principale laissait une
   bande vide. Elle remplit désormais son écrin étiré par la grille. */
body[data-page="portfolio"] .v6-inline-portfolio-83{
  position:absolute;
  inset:0;
  height:100% !important;
}
/* Cartels et chiffres : les minima intrinsèques ne doivent jamais pousser
   une colonne hors écran. Aucun média ni contenu n'est remplacé. */
body[data-page="about"] .v6-inline-about-48{
  grid-template-columns:repeat(2,minmax(0,1fr));
}
body[data-page="about"] .v6-inline-about-48 > div{min-width:0;}
body[data-page="about"] .v6-inline-about-48 > div > p:first-child{
  font-size:var(--cv-typo-current-fs, 10px) !important;line-height:var(--cv-typo-current-lh, 1.45) !important;letter-spacing:var(--cv-typo-current-ls, .08em);
}
body[data-page="about"] .v6-inline-about-48 > div > p:last-child{
  font-size:var(--cv-typo-current-fs, 32px) !important;line-height:var(--cv-typo-current-lh, 1.15) !important;
}
body[data-page="about"] .sig-note,
body[data-page="about"] .sig-note :is(p,em){
  color:#243840 !important;
  -webkit-text-fill-color:#243840 !important;
}
@media(max-width:760px){
  body[data-page="about"] .v6-inline-about-48 > div{padding:20px 16px;}
  body[data-page="portfolio"] .v6-inline-portfolio-81{grid-template-columns:minmax(0,1fr);}
  body[data-page="portfolio"] .v6-inline-portfolio-82{min-height:460px;}
  body[data-page="portfolio"] .v6-inline-portfolio-85{padding:28px 24px;}
  body[data-page="portfolio"] .v6-inline-portfolio-85 :is(.v6-inline-portfolio-86,.v6-inline-portfolio-89){
    font-size:var(--cv-typo-current-fs, 11px) !important;line-height:var(--cv-typo-current-lh, 1.55) !important;letter-spacing:var(--cv-typo-current-ls, .1em);
  }
  body[data-page="portfolio"] .v6-inline-portfolio-85 .v6-inline-portfolio-87{
    font-size:var(--cv-typo-current-fs, 36px) !important;line-height:var(--cv-typo-current-lh, 1.05) !important;
  }
  body[data-page="portfolio"] .v6-inline-portfolio-90{
    grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto;
  }
  body[data-page="portfolio"] .v6-inline-portfolio-97,
  body[data-page="portfolio"] .v6-inline-portfolio-99{grid-template-columns:minmax(0,1fr);}
  body[data-page="portfolio"] .v6-inline-portfolio-99 > div{min-width:0;}
}
/* K3-PORTFOLIO-20260818 : la grille livrée (chambre Carrara claire) avait des
   cartes à fond #111315 — d'où blocs noirs géants et titres noirs sur noir.
   La carte livrée redevient claire ; l'écrin sombre est réservé au rail
   « Chantiers en cours » (section nuit, texte clair). */
body[data-page="portfolio"] .c12p__grid{
  align-items:start;
}
body[data-page="portfolio"] .c12p__card{
  overflow:hidden;
}
body[data-page="portfolio"] .c12p--delivered .c12p__card{
  background:#f8f6f1;
  border:1px solid rgba(21,22,22,.10);
  box-shadow:0 22px 64px rgba(21,22,22,.10);
}
body[data-page="portfolio"] .c12p--ongoing .c12p__card{
  background:#111315;
  border:1px solid rgba(213,191,142,.16);
  box-shadow:0 26px 82px rgba(0,0,0,.2);
}
/* Le média remplit intégralement son écrin (le 16/10 forcé laissait une
   bande vide au-dessus du fond de carte). Mobile : le flux naturel du
   media query de base (height:auto) est conservé. */
@media(min-width:681px){
  body[data-page="portfolio"] .c12p__card img{
    aspect-ratio:auto;
    min-height:0;
    height:100% !important;
    object-fit:cover !important;
  }
}

/* K3-DUBAI-20260818 : les cadres .dxb-media reçoivent une min-height
   cérémonielle (62vw desktop) plus haute que l'image 16/9 — le reste du
   cadre affichait le fond near-black oklch(.145) → bande noire sous chaque
   image. Le média remplit désormais tout le cadre ; la légende conserve son
   cartouche sombre posé en bas de l'image. */
body[data-page="dubai-bureaux"] .dxb-media{
  position:relative;
}
body[data-page="dubai-bureaux"] .dxb-media picture{
  position:absolute;
  inset:0;
  display:block;
}
body[data-page="dubai-bureaux"] .dxb-media picture img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  max-height:none;
  object-fit:cover;
}
body[data-page="dubai-bureaux"] .dxb-media .dxb-cap,
body.cv3-nonhome[data-page="dubai-bureaux"] .cv3-chapter .dxb-media .dxb-cap{
  position:absolute;
  left:0;
  right:0;
  bottom:0;
  top:auto;
  z-index:2;
  margin:0;
}

/* Portale : une seule scène média utile. Les canvas décoratifs secondaires
   sont neutralisés et le seuil ne réclame plus 155 % d'un écran. */
body[data-page="portale-home"] :is(#hero-lens,#sdf-canvas,#guilloche-canvas){
  display:none !important;
}
body[data-page="portale-home"] main > .stage-seuil{
  height:100svh !important;
  min-height:100svh !important;
}
body[data-page="portale-home"] .stage-seuil > .stage-sticky{
  position:relative !important;
  top:auto !important;
  height:100svh !important;
}

/* Siège parisien — distinct de la maison de ville publiée dans le Portfolio. */
body[data-page="contact"] .contact-offices .v6-inline-contact-40{
  background:
    radial-gradient(circle at 88% 10%,rgba(202,178,132,.12),transparent 34%),
    linear-gradient(145deg,#17191b,#0b0d0f 72%) !important;
  color:#f4f0e8 !important;
}
body[data-page="contact"] .contact-offices .v6-inline-contact-41{
  color:#d2b784 !important;
  -webkit-text-fill-color:#d2b784 !important;
}
body[data-page="contact"] .contact-offices .v6-inline-contact-42,
body[data-page="contact"] .contact-offices .v6-inline-contact-42 em{
  color:#f6f2ea !important;
  -webkit-text-fill-color:#f6f2ea !important;
  text-shadow:0 8px 30px rgba(0,0,0,.38);
}
body[data-page="contact"] .contact-offices .v6-inline-contact-43{
  color:rgba(244,240,232,.84) !important;
  -webkit-text-fill-color:rgba(244,240,232,.84) !important;
}
body[data-page="contact"] .contact-offices .v6-inline-contact-44{
  color:#cab58d !important;
  -webkit-text-fill-color:#cab58d !important;
}
body[data-page="contact"] .contact-paris-gallery{
  grid-column:1 / -1;
  display:grid;
  grid-template-columns:1.18fr .82fr;
  gap:clamp(12px,2vw,28px);
  margin:clamp(18px,3vw,42px) 0 clamp(52px,7vw,92px);
}
body[data-page="contact"] .contact-paris-gallery figure{
  margin:0;
  overflow:hidden;
  background:#d8d4cc;
}
body[data-page="contact"] .contact-paris-gallery img{
  display:block;
  width:100%;
  height:clamp(260px,34vw,520px);
  object-fit:cover;
}
body[data-page="contact"] .contact-paris-credit{
  grid-column:1 / -1;
  margin:0;
  color:#5d5a54 !important;
  -webkit-text-fill-color:#5d5a54 !important;
  font-size:var(--cv-typo-current-fs, .68rem);
  line-height:var(--cv-typo-current-lh, 1.55);
  letter-spacing:var(--cv-typo-current-ls, .12em);
  text-transform:var(--cv-typo-current-tt, uppercase);
}

@media (max-width:760px){
  body[data-page] :is(.display,.h2,.ph-h1,.pj-h1,.cp-page-title,.cp-title,
    .pensee-h1,.folco-name){
    hyphens:auto;
    word-break:normal;
  }
  body[data-page="about"] .folco{
    overflow:hidden !important;
    padding-inline:20px !important;
  }
  body[data-page="about"] .folco-grid,
  body[data-page="about"] .folco-text{
    overflow:visible !important;
  }
  body[data-page="about"] .folco-name{
    font-size:var(--cv-typo-current-fs, clamp(46px,15.5vw,70px)) !important;
    line-height:var(--cv-typo-current-lh, 1.12) !important;
    padding-block:.14em .24em !important;
  }
  body[data-page="about"] .folco-name em{
    font-size:var(--cv-typo-current-fs, .88em);
    line-height:var(--cv-typo-current-lh, 1.12) !important;
    padding-inline-end:.14em !important; /* K3-B : réserve pour le « i » italique */
  }
  body[data-page="projets-neuilly"] #cv-atmosphere-control{
    top:auto !important;
    right:14px !important;
    bottom:86px !important;
    width:min(228px,calc(100vw - 28px)) !important;
  }
  body[data-page="chantiers-prives"] .cp-page-hero{
    min-height:78svh !important;
    padding:132px 20px 70px !important;
  }
  body[data-page="chantiers-prives"] .cp-content{
    padding:48px 20px 70px !important;
  }
  body[data-page="savoir-faire"] .sf-grid{
    gap:1px;
  }
  body[data-page="pensee"] .pensee-body{
    padding-inline:0;
  }
  body[data-page="portale-home"] main > .stage-seuil,
  body[data-page="portale-home"] .stage-seuil > .stage-sticky{
    height:auto !important;
    min-height:78svh !important;
  }
  body[data-page="contact"] .contact-paris-gallery{
    grid-template-columns:1fr;
  }
  body[data-page="contact"] .contact-paris-gallery img{
    height:clamp(240px,92vw,420px);
  }
}

/* Final witness signatures -------------------------------------------------
   One perceptible material gesture per family. Every layer remains inside the
   authored room-light plane (z-index 0); copy and controls stay at z-index 2+
   through the V3 orchestrator. No opacity is applied to readable content. */

/* Dubaï — a daylight caustic crosses the mineral hero, like reflected glass. */
body.cv3-witness-dubai .dxb-hero > .cv3-room-light::after{
  opacity:.78 !important;
  background:
    radial-gradient(ellipse at 72% 20%,rgba(255,255,255,.42) 0 3%,transparent 16%),
    linear-gradient(106deg,transparent 27%,rgba(255,246,222,.28) 48%,transparent 67%) !important;
  animation:cvf-dubai-caustic 11s cubic-bezier(.22,.61,.36,1) infinite alternate var(--cv3-fx-play,running) !important;
}

/* Institution — a platinum engraving traverses the archival film room. */
body.cv3-witness-institution .cine > .cv3-room-light::after{
  opacity:.58 !important;
  background:
    linear-gradient(90deg,transparent 0 46%,rgba(247,240,222,.5) 49%,transparent 52%),
    repeating-linear-gradient(90deg,transparent 0 91px,rgba(214,202,178,.18) 92px,transparent 94px 184px) !important;
  animation:cvf-platinum-etch 14s cubic-bezier(.16,1,.3,1) infinite alternate var(--cv3-fx-play,running) !important;
}

/* Contact — a warm sculptural light breathes around the intake, never over it. */
body.cv3-witness-contact .contact-intake > .cv3-room-light::after{
  opacity:.52 !important;
  background:
    url("../assets/palette02/light_sweep_albatre_cold.png") 78% 34% / min(68vw,920px) auto no-repeat,
    url("../assets/palette02/brume_albatre_01.png") 72% 40% / min(62vw,860px) auto no-repeat !important;
  animation:cvf-contact-breath 14s ease-in-out infinite alternate var(--cv3-fx-play,running) !important;
}

/* Portale — one spectral mineral vein opens the ceremonial threshold. */
body.cv3-family-portale .stage > .cv3-room-light::after{
  opacity:.58 !important;
  background:
    url("../assets/palette02/caustique_malachite_1024.png") 74% 42% / min(54vw,760px) auto no-repeat,
    linear-gradient(151deg,transparent 38%,rgba(207,224,226,.24) 48%,transparent 56%) !important;
  -webkit-mask:url("../assets/palette02/vein_reveal_mask_alpha.png") 72% 44% / min(58vw,800px) min(58vw,800px) no-repeat;
  mask:url("../assets/palette02/vein_reveal_mask_alpha.png") 72% 44% / min(58vw,800px) min(58vw,800px) no-repeat;
  animation:cvf-spectral-vein 18s cubic-bezier(.16,1,.3,1) infinite alternate var(--cv3-fx-play,running) !important;
}

body.cv-atmo-paused,
.cv3-room:not(.cv3-room-active){--cv3-fx-play:paused}

@media (prefers-reduced-motion:reduce){
  body{--cv3-fx-play:paused}
}

@keyframes cvf-dubai-caustic{
  from{transform:translate3d(-8%,-2%,0) rotate(-1deg)}
  to{transform:translate3d(8%,2%,0) rotate(1deg)}
}
@keyframes cvf-platinum-etch{
  from{transform:translate3d(-10%,0,0)}
  to{transform:translate3d(10%,0,0)}
}
@keyframes cvf-contact-breath{
  from{transform:translate3d(-2%,1%,0) scale(.98);filter:saturate(.86)}
  to{transform:translate3d(2%,-1%,0) scale(1.03);filter:saturate(1.08)}
}
@keyframes cvf-spectral-vein{
  from{transform:translate3d(-9%,0,0) skewX(-1deg)}
  to{transform:translate3d(9%,0,0) skewX(1deg)}
}

@media (max-width:760px),(hover:none),(pointer:coarse){
  body.cv3-witness-dubai .dxb-hero > .cv3-room-light::after,
  body.cv3-witness-institution .cine > .cv3-room-light::after,
  body.cv3-witness-contact .contact-intake > .cv3-room-light::after,
  body.cv3-family-portale .stage > .cv3-room-light::after{
    opacity:.5 !important;
    animation-duration:20s !important;
  }
}

@media (prefers-reduced-motion:reduce){
  body.cv3-witness-dubai .dxb-hero > .cv3-room-light::after,
  body.cv3-witness-institution .cine > .cv3-room-light::after,
  body.cv3-witness-contact .contact-intake > .cv3-room-light::after,
  body.cv3-family-portale .stage > .cv3-room-light::after{
    animation:none !important;
    transform:none !important;
  }
}

/* K3-C2 — Hero Méthode « scène vivante » : micro-parallax très lent et
   respiration lumineuse, volontairement sous le seuil de perception directe.
   Aucun effet gadget ; tout est désactivé en prefers-reduced-motion.
   Architecture finale : nouvel asset bas-relief validé (seul fond visuel,
   réservé EXCLUSIVEMENT à la page Méthode — ne jamais réutiliser sur
   l'accueil, Contact, Portfolio ni ailleurs) → overlay/lumière/parallax →
   texte DOM inchangé. Plus aucune couche chantier. Repli technique neutre :
   background-color minéral sombre si l'asset ne charge pas. */
body[data-page="savoir-faire"] .ph-bg.v6-inline-savoir-faire-1{
  transform-origin:50% 42%;
  will-change:transform;
  animation:k3-sf-hero-drift 52s ease-in-out infinite alternate;
}
body[data-page="savoir-faire"] .ph-bg.v6-inline-savoir-faire-1::before{
  animation:k3-sf-hero-veil 19s ease-in-out infinite alternate;
}
@keyframes k3-sf-hero-drift{
  from{transform:scale(1) translate3d(0,0,0)}
  to{transform:scale(1.045) translate3d(-.55%,.35%,0)}
}
@keyframes k3-sf-hero-veil{
  from{opacity:.13}
  to{opacity:.24}
}
@media (max-width:760px),(hover:none),(pointer:coarse){
  body[data-page="savoir-faire"] .ph-bg.v6-inline-savoir-faire-1{
    animation-duration:64s;
    /* Mobile : recadrage cover vertical — la fenêtre est recentrée sur le
       corps de la villa (loggia et double escalier) pour qu'elle ne soit
       ni décapitée ni perdue hors champ. */
    background-position:68% 30%;
  }
}
@media (prefers-reduced-motion:reduce){
  body[data-page="savoir-faire"] .ph-bg.v6-inline-savoir-faire-1,
  body[data-page="savoir-faire"] .ph-bg.v6-inline-savoir-faire-1::before{
    animation:none !important;
    transform:none !important;
  }
}
/* K3 clôture — Méthode desktop : la pastille SON OFF (fixe, bas-gauche,
   top ≈ 798 px à 1440×900) chevauchait de 8 px la dernière ligne du
   .ph-sub (« …exécution avec une exigence constante. »). Le bloc hero est
   remonté de ~44 px via padding-top réduit, uniquement sur cette page et
   uniquement en desktop ; le mobile (sain) est exclu. Mesuré avant/après
   par Playwright (bounding boxes .ph-sub vs #oc-sound-toggle). */
@media (min-width:861px){
  html body[data-page="savoir-faire"] .ph > .container{
    padding-top:clamp(108px,12.5vh,150px) !important;
  }
}
/* K3 clôture — Accueil desktop après ENTRER : la pastille SON OFF (fixe,
   x 28–140, y 784–826 à 1440×900) masquait le début du .hero-sub
   (« Direction et orchestration… », chevauchement mesuré 10×35 px) et les
   boutons .hero-act étaient partiellement sous la ligne de flottaison.
   Le bloc .hero-body est remonté de 64 px, uniquement en contexte home
   révélée et uniquement en desktop ; le portail V6.1 (hors oc-entree-passee)
   et le mobile (sain) ne sont pas touchés. Mesuré avant/après Playwright. */
@media (min-width:861px){
  html.oc-entree-passee body[data-page="index"] .hero-body{
    margin-top:-64px !important; /* !important requis : strict-house-2026 (#hero .hero-body) passe par un ID */
  }
}
/* K3 clôture — Dubaï bureaux desktop : la pastille SON OFF (fixe, bas-gauche)
   masquait deux lignes du .hero-sub (« …installe une présence privée dédiée
   aux rendez-vous… », chevauchement mesuré 40×42 px à 1440×900). Bloc hero
   remonté de 78 px, page et desktop uniquement ; mobile sain (mesuré). */
@media (min-width:861px){
  html body[data-page="dubai-bureaux"] .dxb-hero .container{
    margin-top:-78px !important;
  }
}
/* K3 finition 2026-08-18 — Folco : le portrait (vidéo 540×960) était cadré
   center 42% → le chapeau touchait le haut du cadre et la plaque nom
   recouvrait le visage. Le sujet est remonté dans le cadre (28 %) : tête
   et visage entièrement au-dessus de la plaque, desktop et mobile. */
body[data-page="about"] .folco-video{
  object-position:center 26% !important;
}
/* K3 audit 2026-08-18 — Merci (MAJEUR layout) : le layout du bloc .merci a
   disparu lors de l'extraction des styles inline en classes v6-inline-*.
   Sans règle de base, .merci-inner restait en largeur auto sans marges :
   titre géant collé au bord gauche, « V » tronquée, fond .merci-bg sans
   hauteur. Restauration d'un hero centré pleine hauteur, fidèle à
   l'intention (contenu centré, eyebrow et boutons déjà en text-align/flex
   center via v6-inline-merci-*), desktop + mobile. */
body[data-page="merci"] .merci{
  position:relative;min-height:100svh;display:flex;align-items:center;justify-content:center;
  overflow:hidden;color:var(--c-lit,#f4f1ea);
}
body[data-page="merci"] .merci-bg{
  position:absolute;inset:0;background-size:cover;background-position:center;opacity:1;
}
body[data-page="merci"] .merci-inner{
  position:relative;z-index:2;
  width:min(920px,calc(100% - 2*clamp(24px,6vw,96px)));
  margin-inline:auto;
  padding-block:clamp(148px,20vh,210px) clamp(72px,10vh,110px);
  text-align:center;
}
body[data-page="merci"] .merci-h{
  max-width:15ch;margin:0 auto clamp(18px,3vh,30px);
  font-size:var(--cv-typo-current-fs, clamp(46px,7vw,104px));line-height:var(--cv-typo-current-lh, .94);
}
body[data-page="merci"] .merci-sub{
  max-width:56ch;margin:0 auto 26px;
}
@media (max-width:860px){
  body[data-page="merci"] .merci-inner{
    width:min(100% - 30px,1160px);
    padding-block:clamp(128px,17vh,180px) max(70px,9svh);
  }
}
/* K3 audit 2026-08-18 — Contact / galerie Neuilly (MAJEUR vide) : le layout
   witness (caravelli-v3-orchestrator, body.cv3-witness-contact) impose
   img{min-height:clamp(420px,50vw,740px)} à TOUTES les images de la grille,
   y compris celles de .contact-paris-gallery, pendant que les figures sont
   étirées par la grille interne (mesuré : figure 980 px vs img 720 px →
   bloc ivoire vide de 260 px sous la photo ; figure 2 : 359 px vs 720 px →
   image tronquée). On aligne figure et image sur une même hauteur fixe,
   desktop uniquement ; le mobile passe déjà en display:block via
   l'orchestrateur (ligne 2425). */
@media (min-width:861px){
  body[data-page="contact"] .contact-paris-gallery{
    align-items:start;
  }
  body[data-page="contact"] .contact-paris-gallery figure{
    height:clamp(300px,32vw,460px);
    min-height:0;   /* neutralise .cv3-plane--monument{min-height:980px} */
    aspect-ratio:auto; /* neutralise .cv3-plane--detail{aspect-ratio:4/5} */
  }
  body[data-page="contact"] .contact-paris-gallery img{
    height:100% !important;
    min-height:0 !important;
    object-fit:cover;
  }
}
/* K3 audit 2026-08-18 — Méthode & Prestations (MAJEUR vide savoir-faire /
   mineur services) : .sf-grid est en repeat(3,1fr) avec exactement 4 cartes
   → rangée 3+1 et, sur savoir-faire, deux cases vides bordées (fond de
   grille visible) donnant l'impression d'un cadre cassé. Passage en 2×2
   symétrique sur desktop pour ces deux pages ; le mobile est déjà en 1fr
   (olympe-system l.191). */
@media (min-width:861px){
  body[data-page="savoir-faire"] .sf-grid,
  body[data-page="services"] .sf-grid{
    grid-template-columns:repeat(2,1fr);
  }
}
/* QA finale 2026-08-25 — Prestations / Zones d'intervention : entre 821 et
   1180 px, la grille historique restait en deux colonnes alors que la
   navigation était déjà passée en mode compact. Au desktop, sa colonne titre
   de .82fr était plus étroite que l'italique Bodoni « d'intervention » et le
   clip-path du reveal en coupait la fin. La séquence de reveal est conservée ;
   seule la géométrie de cette section est rendue compatible avec son texte. */
body[data-page="services"] main > .sec--noir > .container.split > *{
  min-width:0;
}
@media (min-width:821px) and (max-width:1180px){
  body[data-page="services"] main > .sec--noir > .container.split{
    grid-template-columns:minmax(0,1fr);
  }
}
@media (min-width:1181px){
  body[data-page="services"] main > .sec--noir > .container.split{
    grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);
    gap:clamp(46px,6vw,96px);
  }
  body[data-page="services"] main > .sec--noir > .container.split .display{
    font-size:var(--cv-typo-current-fs, clamp(62px,5.7vw,96px));
    line-height:var(--cv-typo-current-lh, .92);
  }
}
/* K3 audit 2026-08-18 — Fiches Portale Caravelli (MAJEUR troncation) :
   l'orchestrateur pousse .bien-desc à droite (margin-left:auto, grande
   fonte display) jusqu'à passer SOUS le rail fixe « RETOUR À LA MAISON
   CARAVELLI » (mesuré : desc x 536→1380, rail fixe x 1335→1391 à 1440 px) —
   fins de mots masquées sur verbier, maison-belvedere, cas limite florence.
   On réserve un couloir droit sur desktop ; le mobile repasse déjà à
   margin-left:0 via l'orchestrateur (l.2433). */
@media (min-width:861px){
  body.cv3-witness-luxury-property .bien-desc{
    margin-right:clamp(96px,9vw,150px);
  }
}
/* K3 audit 2026-08-18 — Pastille SON OFF non stylée (fiches Portale +
   pages légales) : le style de base du bouton ne vit que dans
   olymphe-system.css, que ces pages ne chargent pas ; le bouton injecté
   par olympe-audio.js reste en position static, padding 1px 6px (mesuré).
   Restauration de la pastille fixe bas-gauche au style Maison, scopée aux
   pages concernées pour ne pas toucher les pages déjà stylées. */
body.bien-page .oc-sound-toggle,
body.legal .oc-sound-toggle,
body[data-page^="portale"] .oc-sound-toggle{
  position:fixed;left:24px;right:auto;top:auto;bottom:24px;z-index:760;
  display:inline-flex;align-items:center;gap:8px;
  min-height:38px;padding:9px 18px;margin:0;border-radius:999px;
  background:rgba(14,13,16,.62);border:1px solid rgba(244,241,234,.30);
  color:rgba(244,241,234,.82);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  font-family:var(--cv-typo-current-ff, var(--font-ui,ui-sans-serif,system-ui,sans-serif));
  font-size:var(--cv-typo-current-fs, 8px);letter-spacing:var(--cv-typo-current-ls, .22em);text-transform:var(--cv-typo-current-tt, uppercase);line-height:var(--cv-typo-current-lh, 1);
  cursor:pointer;transition:background .3s ease,color .3s ease;
}
body.bien-page .oc-sound-toggle:hover,
body.legal .oc-sound-toggle:hover,
body[data-page^="portale"] .oc-sound-toggle:hover{
  background:rgba(244,241,234,.92);color:rgba(20,19,22,.9);
}
/* Fiches Portale : la pastille tient dans la marge de 60px, hors du texte.
   SON et son état restent lisibles et le handler existant reste inchangé. */
@media (min-width:861px){
  body.bien-page[data-page="portale-property"] .oc-sound-toggle{
    left:6px;width:44px;min-width:44px;height:44px;min-height:44px;
    padding:5px 2px;flex-direction:column;justify-content:center;gap:5px;
    letter-spacing:var(--cv-typo-current-ls, .1em);border-radius:8px;
  }
}
@media (max-width:860px){
  body.bien-page .oc-sound-toggle,
  body.legal .oc-sound-toggle,
  body[data-page^="portale"] .oc-sound-toggle{ left:16px;bottom:16px; }
}
@media (min-width:861px) and (max-width:1249px){
  body.bien-page[data-page="portale-property"] .oc-sound-toggle{
    left:1px;width:32px;min-width:32px;padding-inline:2px;
  }
}
/* K3 audit 2026-08-18 — Sceau footer fiches « FIRENZE · DAL 1948 » coupé au
   bord gauche : .bien-footer p{margin:6px 0} (bien.css) écrase le centrage
   du sceau injecté par l'orchestrateur (mesuré : x=0 au lieu de marge auto).
   Restauration du centrage, fiches uniquement. */
body.bien-page footer .cv3-finale-seal{
  margin:clamp(28px,5vw,64px) auto 0;
}
/* K3 audit 2026-08-18 — Merci (lisibilité) : une fois le layout restauré,
   la photo de fond (villa-ext-vue-generale.jpg, ciel très clair) rendait
   le titre ivoire et le paragraphe peu lisibles. Renforcement du voile
   sombre porté par .merci-bg::before (défini à opacité .18 dans
   olympe-system), scopé à la page merci, sans toucher au média. */
body[data-page="merci"] .merci-bg::before{
  content:"";position:absolute;inset:0;  /* le pseudo-élément n'existait pas : aucun content n'était défini */
  opacity:1 !important;
  mix-blend-mode:normal;
  background:linear-gradient(180deg,
    rgba(10,9,8,.58) 0%,
    rgba(10,9,8,.40) 42%,
    rgba(10,9,8,.62) 100%) !important;
}
body[data-page="merci"] .merci-h,
body[data-page="merci"] .merci-sub,
body[data-page="merci"] .v6-inline-merci-3{
  text-shadow:0 2px 34px rgba(6,5,4,.55);
}
/* K3 audit 2026-08-18 — Listes .pillars (La Maison « 01Respect » sans espace ;
   Prestations « • —Côte d'Azur » double puce) : aucune règle de base n'existe
   pour .pillars/.p-n → puce native du navigateur + tiret .p-n superposés, et
   numéro collé au texte. Suppression de la puce native et espacement propre,
   sans toucher à la typographie existante. */
body[data-page] .pillars{
  list-style:none;
  padding-left:0;
}
body[data-page] .pillars li{
  display:flex;
  align-items:baseline;
  gap:16px;
}
body[data-page] .pillars .p-n{
  flex:0 0 auto;
  min-width:2ch;
}
/* K3 audit 2026-08-18 — Accueil « La main avant l'image » (pillarbox) :
   l'image equipe-chantier-plans.jpg est PORTRAIT (1080×1439) dans un cadre
   .legacy-media paysage (aspect-ratio 16/9 puis 3/2) sans object-fit →
   bandes noires latérales. Couverture propre du cadre, page index
   uniquement. */
body[data-page="index"] .legacy-media img{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center 38%;
  display:block;
}
/* K3 audit 2026-08-18 — Merci mobile (lisibilité) : à 390 px le paragraphe
   retombe sur le mur blanc de la villa (mesuré visuellement illisible malgré
   le voile global). Voile local renforcé derrière le bloc texte + ombre plus
   marquée, mobile uniquement. */
@media (max-width:860px){
  body[data-page="merci"] .merci-bg::before{
    background:linear-gradient(180deg,
      rgba(10,9,8,.66) 0%,
      rgba(10,9,8,.55) 45%,
      rgba(10,9,8,.70) 100%) !important;
  }
  body[data-page="merci"] .merci-sub{
    text-shadow:0 1px 18px rgba(6,5,4,.85),0 2px 40px rgba(6,5,4,.6);
  }
}
/* K3 pack environnement 2026-08-18 — Variables environnementales continues.
   Enregistrées pour que tout changement météo soit INTERPOLÉ (transition de
   plusieurs secondes), jamais instantané : soleil → pluie ne saute pas.
   Posées par JS/caravelli-atmosphere.js (publishEnvironment). */
@property --cv-env-light { syntax:"<number>"; inherits:true; initial-value:.7; }
@property --cv-env-cloud { syntax:"<number>"; inherits:true; initial-value:.2; }
@property --cv-env-wetness { syntax:"<number>"; inherits:true; initial-value:0; }
@property --cv-env-wind { syntax:"<number>"; inherits:true; initial-value:.1; }
@property --cv-env-haze { syntax:"<number>"; inherits:true; initial-value:.05; }
@property --cv-env-warmth { syntax:"<number>"; inherits:true; initial-value:.05; }
@property --cv-env-night { syntax:"<number>"; inherits:true; initial-value:.3; }
@property --cv-env-uv { syntax:"<number>"; inherits:true; initial-value:0; }
@property --cv-env-aqi { syntax:"<number>"; inherits:true; initial-value:0; }
:root{
  transition:--cv-env-light 6s ease,--cv-env-cloud 6s ease,--cv-env-wetness 6s ease,
    --cv-env-wind 4s ease,--cv-env-haze 6s ease,--cv-env-warmth 6s ease,
    --cv-env-night 6s ease,--cv-env-uv 6s ease,--cv-env-aqi 6s ease;
}
@media (prefers-reduced-motion:reduce){
  :root{ transition:none; }
}

/* ════════════════════════════════════════════════════════════════════
   K3-FIN §5 — PALETTE TERTIAIRE (cahier des charges, point 5)
   2026-08-18 — Six teintes tertiaires de la Maison, définies ici puis
   appliquées DISCRÈTEMENT (alpha 4–12 % via color-mix) sur des détails
   non critiques uniquement : filets/hairlines, reflets hover des liens
   de navigation, détails de cartouches, boutons secondaires.
   AUCUNE palette principale n'est modifiée ; le portail et le hero de
   la page index sont explicitement exclus (:not([data-page="index"])).
   ════════════════════════════════════════════════════════════════════ */
:root{
  --cv-t3-platinum: #C4BFB5;
  --cv-t3-bronze:   #8B7058;
  --cv-t3-verde:    #53635A;
  --cv-t3-bordeaux: #70464C;
  --cv-t3-night:    #303A47;
  --cv-t3-stone:    #A99178;
}

/* §5.1 — Reflet hover des liens de navigation principale (.nl) :
   halo platinum à 10 %, purement lumineux, ne change ni la couleur du
   texte ni la graisse — lisibilité intacte, index exclu (portail/hero). */
body[data-page]:not([data-page="index"]) .nav .nl:hover{
  text-shadow:0 0 14px color-mix(in srgb, var(--cv-t3-platinum) 10%, transparent);
}

/* §5.2 — Filets éditoriaux (hr.hc-filet et filets de cartouche) :
   hairline bronze à 12 %, remplace le gris neutre par une teinte Maison
   sans alourdir le trait (épaisseur inchangée). */
body[data-page]:not([data-page="index"]) hr.hc-filet{
  border-color:color-mix(in srgb, var(--cv-t3-bronze) 12%, transparent);
}

/* §5.3 — Détail du cartouche fondateur (.folco-plaque) : liseré supérieur
   pierre à 12 % en ombre interne d'1 px — aucun impact sur la géométrie
   ni sur le texte « Folco Caravelli » (vérifié mission §13). */
body[data-page]:not([data-page="index"]) .folco-plaque{
  box-shadow:inset 0 1px 0 color-mix(in srgb, var(--cv-t3-stone) 12%, transparent);
}

/* §5.4 — Boutons secondaires (.btn-n) au survol : réverbération verde
   à 8 % en halo externe doux ; les boutons primaires (.btn-l) et le CTA
   de navigation (.ncta) ne sont pas touchés. */
body[data-page]:not([data-page="index"]) .btn-n:hover{
  box-shadow:0 2px 22px color-mix(in srgb, var(--cv-t3-verde) 8%, transparent);
}

/* §5.5 — Pied de page (.ft) : filet supérieur nuit à 6 %, assombrissement
   à peine perceptible qui ancre le bas de page sans créer de coupure
   visuelle ; opacité volontairement minimale. */
body[data-page]:not([data-page="index"]) .ft{
  border-top:1px solid color-mix(in srgb, var(--cv-t3-night) 6%, transparent);
}

/* K3-CLOTURE §7 — passerelle Fondazione : lien footer externe très discret,
   subordonné aux liens internes ; aucun appel au don, aucune emphase. */
.ft-fondazione{
  font-size:var(--cv-typo-current-fs, .62rem) !important;
  letter-spacing:var(--cv-typo-current-ls, .14em);
  text-transform:var(--cv-typo-current-tt, uppercase);
  opacity:.8;
  transition:opacity .4s ease;
}
.ft-fondazione:hover{opacity:.9}

/* CV-009 — Méthode / Prestations : un seul voile sombre lisible remplace
   l'empilement de lavis screen qui déminéralisait les photographies.
   Portée volontairement limitée aux deux héros concernés. */
body:is([data-page="savoir-faire"],[data-page="services"]) .ph::before{
  opacity:.72;
  mix-blend-mode:normal;
  background:
    linear-gradient(103deg,rgba(3,8,14,.74) 0 14%,rgba(3,8,14,.20) 53%,transparent 100%),
    radial-gradient(48vw 46vw at var(--cv3-x) var(--cv3-y),rgba(214,199,164,.045),transparent 74%);
}
body:is([data-page="savoir-faire"],[data-page="services"]) .ph::after{
  z-index:0;
  opacity:1;
  mix-blend-mode:normal;
  background-image:
    linear-gradient(90deg,rgba(2,11,24,.68) 0%,rgba(2,11,24,.12) 52%,rgba(2,11,24,.32) 100%),
    linear-gradient(0deg,rgba(2,11,24,.62) 0%,rgba(2,11,24,0) 62%) !important;
}
body:is([data-page="savoir-faire"],[data-page="services"]) .ph-bg{
  opacity:.9;
}
body:is([data-page="savoir-faire"],[data-page="services"]) .ph-bg::after{
  opacity:0;
}

/* ATM-001/002 — une seule lumière froide, statique et localisée dans la
   photographie. Les masques la tiennent hors des colonnes de lecture. */
body[data-page="savoir-faire"] .ph-bg::after{
  content:"";
  inset:0;
  opacity:.17;
  transform:none;
  transition:none;
  mix-blend-mode:screen;
  background:url("../assets/palette02/light_sweep_albatre_cold.png") 82% 30% / min(64vw,920px) auto no-repeat;
  -webkit-mask-image:linear-gradient(90deg,transparent 0 44%,#000 56% 100%);
  mask-image:linear-gradient(90deg,transparent 0 44%,#000 56% 100%);
}

body[data-page="services"] .ph-bg::after{
  content:"";
  inset:0;
  opacity:.14;
  transform:none;
  transition:none;
  mix-blend-mode:screen;
  background:url("../assets/palette02/light_sweep_albatre_cold.png") 76% 26% / min(60vw,860px) auto no-repeat;
  -webkit-mask-image:linear-gradient(90deg,transparent 0 38%,#000 48% 64%,transparent 72% 100%);
  mask-image:linear-gradient(90deg,transparent 0 38%,#000 48% 64%,transparent 72% 100%);
}

@media (max-width:900px){
  body[data-page="savoir-faire"] .ph-bg::after{
    opacity:.10;
    background-position:72% 28%;
    background-size:152vw auto;
  }
  body[data-page="services"] .ph-bg::after{
    opacity:.08;
    background-position:68% 24%;
    background-size:148vw auto;
  }
}

@media (prefers-reduced-motion:reduce){
  body:is([data-page="savoir-faire"],[data-page="services"]) .ph-bg::after{
    animation:none;
    transform:none;
    transition:none;
  }
}

/* CV-008 — Héros secondaires : une Maison, six tempéraments.
   Le socle, la typographie, les médias et les atmosphères restent communs.
   Seuls l'édition des signes existants et le rythme du contenu varient. */

/* Chantiers privés — carnet documentaire : le grand index et le cadre fermé
   sont raréfiés ; le filet latéral/bas conserve le vocabulaire de la Maison. */
body[data-page="chantiers-prives"] .cp-page-hero::before{
  content:"";
}
body[data-page="chantiers-prives"] .cp-page-hero::after{
  inset:10% 3% 7%;
  border:0;
  border-left:1px solid oklch(.82 .014 252.3 / .18);
  border-bottom:1px solid oklch(.82 .014 252.3 / .18);
  clip-path:none;
}

/* Prestations — plan architectural : titre et mandat occupent deux registres
   lisibles, sans modifier le voile photographique certifié par CV-009. */
body[data-page="services"] .ph > .container{
  display:grid;
  grid-template-columns:minmax(0,1.45fr) minmax(260px,.55fr);
  grid-template-rows:auto auto;
  column-gap:clamp(48px,7vw,112px);
  align-content:center;
}
body[data-page="services"] .ph > .container > .kicker{
  grid-column:1 / -1;
  grid-row:1;
}
body[data-page="services"] .ph > .container > .ph-h1{
  grid-column:1;
  grid-row:2;
  width:auto;
}
body[data-page="services"] .ph > .container > .ph-sub{
  grid-column:2;
  grid-row:2;
  align-self:end;
  width:auto;
  max-width:32ch;
}

/* Contact — seuil calme : l'index décoratif s'efface et le texte respire.
   Le logo, l'image, la palette et le langage typographique restent intacts. */
body[data-page="contact"] .ph::before{
  content:"";
  opacity:.12;
  background:linear-gradient(110deg,#f2f6f2,#c7d6d6);
}
body[data-page="contact"] .ph::after{
  background:linear-gradient(110deg,rgba(233,240,235,.72),rgba(215,228,227,.52)) !important;
}
body[data-page="contact"] .ph > .container > .ph-sub{
  width:min(100%,36ch);
  max-width:36ch;
}

@media (max-width:900px){
  body[data-page="services"] .ph > .container{
    display:block;
  }
}

@media (max-width:760px){
  body[data-page="chantiers-prives"] .cp-page-hero::after{
    inset:8% 3% 5%;
  }
  body[data-page="contact"] .ph > .container > .ph-sub{
    width:100%;
    max-width:34ch;
  }
}
