/* =========================================================
   HOOLALA.TM — PORTFOLIO (design V2) · inspiration « Trionn »
   Gris clair minimal, ruban 3D de visuels, grille bento.
   ========================================================= */
.pf{--pf-stage:#e9e8e4}
@media (prefers-color-scheme:dark){.pf{--pf-stage:#141414}}

/* ---------- HERO + RUBAN ---------- */
.pf-hero{position:relative;overflow:hidden;background:var(--pf-stage);padding:clamp(18px,2.4vw,30px) 0 clamp(28px,3vw,44px)}
.pf-top{position:relative;z-index:4;display:flex;justify-content:space-between;gap:16px;font:500 12px var(--hd-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--hd-fg-2)}
.pf-top a:hover{color:var(--hd-fg)}
.pf-ribbon-stage{position:relative;height:clamp(380px,62vh,640px);perspective:1400px}
.pf-side{position:absolute;z-index:1;top:50%;margin:0;transform:translateY(-50%);font:500 clamp(40px,6.2vw,116px)/.9 var(--hd-sans);letter-spacing:-.06em;text-transform:uppercase;white-space:nowrap;color:var(--hd-fg)}
.pf-side--l{left:-.06em}
.pf-side--r{right:-.06em}
.pf-ribbon{position:absolute;inset:0;z-index:2;transform-style:preserve-3d;pointer-events:none}
.pf-rcard{position:absolute;left:50%;top:50%;width:clamp(86px,9.5vw,170px);aspect-ratio:4/5;margin:0;border-radius:10px;overflow:hidden;background:var(--hd-bg);box-shadow:0 18px 40px rgba(0,0,0,.18);will-change:transform,opacity;backface-visibility:hidden}
.pf-rcard img{width:100%;height:100%;object-fit:cover}
.pf-hero-foot{position:relative;z-index:4;display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}
.pf-hero-foot p{margin:0;max-width:52ch;font:500 15px/1.5 var(--hd-sans);text-transform:uppercase;letter-spacing:.02em}
.pf-scroll{display:inline-flex;align-items:center;gap:12px;font:600 13px var(--hd-sans);letter-spacing:.04em;text-transform:uppercase}
.pf-scroll span{padding:8px 12px;border-radius:99px;background:var(--hd-fg);color:var(--hd-bg)}

/* ---------- LISTE ---------- */
.pf-list{padding:clamp(64px,8vw,120px) 0}
.hd-page .pf-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:clamp(24px,3vw,40px)}
.hd-page .pf-filters button{min-height:42px;padding:0 18px;border-radius:999px;border:1px solid var(--hd-line);font:500 13px var(--hd-sans);transition:background .2s,color .2s,border-color .2s}
.hd-page .pf-filters button.is-active,.hd-page .pf-filters button:hover{background:var(--hd-fg);color:var(--hd-bg);border-color:var(--hd-fg)}
.pf-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-flow:dense;gap:clamp(12px,1.6vw,22px)}
.pf-card.is-hidden{display:none}
.pf-card{display:flex;flex-direction:column;gap:14px}
.pf-card.is-feature{grid-column:span 2;grid-row:span 2}
.pf-card-media{position:relative;overflow:hidden;border-radius:18px;background:var(--pf-stage);aspect-ratio:4/5}
.pf-card.is-feature .pf-card-media{aspect-ratio:auto;flex:1;min-height:420px}
.pf-card-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform 1s var(--hd-ease),opacity .6s var(--hd-ease)}
.pf-card-alt{opacity:0}
.pf-card:hover .pf-card-media img{transform:scale(1.04)}
.pf-card:hover .pf-card-alt{opacity:1}
.pf-card-count{position:absolute;right:12px;top:12px;z-index:2;padding:7px 11px;border-radius:99px;background:var(--hd-glass);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font:600 11px var(--hd-sans);letter-spacing:.06em}
.pf-card-cat{font:500 12px var(--hd-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--hd-fg-2)}
.pf-card-title{margin:6px 0 4px;font:600 clamp(22px,2vw,32px)/1.05 var(--hd-sans);letter-spacing:-.035em}
.pf-card.is-feature .pf-card-title{font-size:clamp(30px,3vw,48px)}
.pf-card-desc{margin:0;font-size:14px;max-width:52ch;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pf-empty{padding:80px 24px;text-align:center;border:1px dashed var(--hd-line);border-radius:22px}
.pf-empty h2{margin:0 0 8px;font:600 32px var(--hd-sans);letter-spacing:-.03em}

/* ---------- PROJET ---------- */
.pf-hero--project .pf-ribbon-stage{height:clamp(320px,52vh,540px)}
.pf-hero--project .pf-side{opacity:.9;font-size:clamp(40px,7vw,120px)}
.pf-project-head{position:relative;z-index:4;display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(20px,4vw,64px);align-items:end}
.pf-title{margin:0;font:600 clamp(40px,5.6vw,96px)/.92 var(--hd-sans);letter-spacing:-.055em}
.pf-project-side p{margin:0 0 18px;max-width:52ch}
.pf-meta{display:grid;grid-template-columns:repeat(3,auto);justify-content:start;gap:clamp(16px,3vw,48px);margin:0;padding-top:14px;border-top:1px solid var(--hd-line-2)}
.pf-meta dt{font:500 11px var(--hd-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--hd-fg-2)}
.pf-meta dd{margin:4px 0 0;font:600 18px var(--hd-sans);letter-spacing:-.02em}
.pf-work{padding:clamp(56px,7vw,110px) 0}
.pf-bento{display:grid;grid-template-columns:repeat(6,1fr);grid-auto-rows:clamp(160px,17vw,300px);gap:clamp(10px,1.4vw,18px)}
.hd-page .pf-tile{position:relative;display:block;overflow:hidden;border-radius:16px;background:var(--pf-stage);cursor:zoom-in;grid-column:span 2}
.pf-tile img{width:100%;height:100%;object-fit:cover;transition:transform 1s var(--hd-ease)}
.pf-tile:hover img{transform:scale(1.04)}
.pf-tile-n{position:absolute;left:12px;bottom:10px;font:700 13px var(--hd-sans);color:#fff;text-shadow:0 1px 10px rgba(0,0,0,.5)}
/* Compositions bento selon le nombre d'images */
.pf-bento--1 .pf-tile{grid-column:1/-1;grid-row:span 2}
.pf-bento--2 .pf-tile{grid-column:span 3;grid-row:span 2}
.pf-bento--3 .pf-tile:first-child{grid-column:span 4;grid-row:span 2}
.pf-bento--3 .pf-tile:not(:first-child){grid-column:span 2}
.pf-bento--4 .pf-tile:first-child{grid-column:span 4;grid-row:span 2}
.pf-bento--4 .pf-tile:nth-child(2),.pf-bento--4 .pf-tile:nth-child(3){grid-column:span 2}
.pf-bento--4 .pf-tile:nth-child(4){grid-column:1/-1}
.pf-bento--5 .pf-tile:first-child{grid-column:span 3;grid-row:span 2}
.pf-bento--5 .pf-tile:nth-child(2){grid-column:span 3}
.pf-bento--5 .pf-tile:nth-child(n+3){grid-column:span 1}
.pf-bento--5 .pf-tile:nth-child(3){grid-column:span 2}
.pf-bento--6 .pf-tile:first-child{grid-column:span 4;grid-row:span 2}
.pf-bento--6 .pf-tile:nth-child(4),.pf-bento--6 .pf-tile:nth-child(5),.pf-bento--6 .pf-tile:nth-child(6){grid-column:span 2}

/* Visionneuse (identifiants d'origine) */
.portfolio-lightbox{position:fixed;inset:0;z-index:9800;display:none;place-items:center;padding:56px 16px;background:rgba(10,10,10,.94)}
.portfolio-lightbox.is-open{display:grid}
.portfolio-lightbox-stage{display:grid;place-items:center;width:100%;height:100%}
.portfolio-lightbox-image{max-width:min(94vw,1400px);max-height:84vh;object-fit:contain;border-radius:12px}
.portfolio-lightbox button{position:absolute;display:grid;place-items:center;width:52px;height:52px;border-radius:50%;border:0;background:rgba(255,255,255,.14);color:#fff;font-size:30px;line-height:1;cursor:pointer}
.portfolio-lightbox-close{top:16px;right:16px}.portfolio-lightbox-prev{left:16px;top:50%;transform:translateY(-50%)}.portfolio-lightbox-next{right:16px;top:50%;transform:translateY(-50%)}

/* Bloc final Behance */
.pf-final{display:block;background:var(--hd-fg);color:var(--hd-bg)}
.pf-final-in{display:grid;gap:10px;padding:clamp(40px,6vw,90px) 0}
.pf-final-kick{font:500 13px var(--hd-sans);letter-spacing:.08em;text-transform:uppercase;opacity:.6}
.pf-final-title{display:flex;align-items:center;justify-content:space-between;gap:24px;font:600 clamp(40px,7vw,120px)/.9 var(--hd-sans);letter-spacing:-.055em}
.pf-final-title svg{flex:none;width:clamp(44px,6vw,100px);height:auto;fill:none;stroke:currentColor;stroke-width:2;transition:transform .5s var(--hd-ease)}
.pf-final:hover .pf-final-title svg{transform:translate(8px,-8px)}

/* ---------- Responsive ---------- */
@media (max-width:1000px){
  .pf-grid{grid-template-columns:1fr 1fr}
  .pf-project-head{grid-template-columns:1fr}
  .pf-bento{grid-template-columns:repeat(2,1fr);grid-auto-rows:clamp(150px,36vw,280px)}
  .pf-bento .pf-tile{grid-column:span 1 !important;grid-row:span 1 !important}
  .pf-bento .pf-tile:first-child{grid-column:1/-1 !important;grid-row:span 2 !important}
}
@media (max-width:640px){
  .pf-grid{grid-template-columns:1fr}
  .pf-card.is-feature{grid-column:auto;grid-row:auto}
  .pf-card.is-feature .pf-card-media{min-height:0;aspect-ratio:4/5}
  .pf-side{top:auto;bottom:6%;transform:none;font-size:clamp(40px,13vw,72px)}
  .pf-side--l{top:4%;bottom:auto}
  .pf-meta{grid-template-columns:repeat(2,auto)}
}
@media (prefers-reduced-motion:reduce){
  .pf-ribbon{display:flex;align-items:center;justify-content:center;gap:12px}
  .pf-rcard{position:relative;left:auto;top:auto}
  .pf-rcard:nth-child(n+5){display:none}
}

/* =========================================================
   V3 — DYNAMIQUE : scène fixée pilotée par le défilement
   ========================================================= */
.pf-pin{position:relative;height:330vh;background:var(--pf-stage)}
.pf-sticky{position:sticky;top:var(--hd-hdr);height:calc(100svh - var(--hd-hdr));display:grid;grid-template-rows:auto 1fr auto;padding:clamp(14px,2vw,26px) 0;overflow:hidden}
.pf-pin .pf-ribbon-stage{height:auto;min-height:0}
.pf-top{align-items:center;font-family:"JetBrains Mono",ui-monospace,monospace;font-size:11px}
.pf-steps{display:flex;gap:4px;padding:4px;border-radius:99px;background:var(--hd-glass);border:1px solid var(--hd-glass-line)}
.pf-steps i{padding:6px 12px;border-radius:99px;font:600 11px var(--hd-sans);font-style:normal;letter-spacing:.06em;color:var(--hd-fg-2);transition:background .4s,color .4s}
.pf-steps i.is-on{background:var(--hd-fg);color:var(--hd-bg)}
[data-pf-type]{display:inline-block;min-width:1ch}
[data-pf-type].is-typing::after{content:"▌";margin-left:2px;animation:pf-caret .8s steps(2) infinite}
@keyframes pf-caret{50%{opacity:0}}

/* Mots latéraux : lettres qui arrivent depuis les bords + suivent le défilement */
.pf-side{will-change:transform,opacity}
.pf-l{display:inline-block;white-space:pre;transform:translateY(105%) rotate(8deg);opacity:0;filter:blur(8px);transition:transform 1.1s var(--hd-ease),opacity .9s var(--hd-ease),filter .9s var(--hd-ease);transition-delay:calc(var(--i) * 45ms + .2s)}
.pf-side--l .pf-l{transform:translate(-60%,105%) rotate(-10deg)}
.pf-side--r .pf-l{transform:translate(60%,105%) rotate(10deg)}
.is-ready .pf-l{transform:none;opacity:1;filter:none}
.pf-side:hover .pf-l{transition-delay:0s;transition-duration:.4s}
.pf-side .pf-l:hover{transform:translateY(-12%) rotate(-4deg)}
.pf-side.is-static .pf-l{opacity:1;transform:none;filter:none}

.pf-rcard{display:block;cursor:pointer;pointer-events:auto}
.pf-ribbon{pointer-events:auto}
.pf-rcard img{transition:transform .6s var(--hd-ease)}
.pf-rcard:hover img{transform:scale(1.08)}

.pf-caption{position:absolute;left:50%;bottom:4%;z-index:5;margin:0;transform:translateX(-50%);padding:10px 18px;border-radius:99px;background:var(--hd-fg);color:var(--hd-bg);font:500 12px "JetBrains Mono",ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap;opacity:0;transition:opacity .5s}
.pf-caption.is-on{opacity:1}

.pf-intro{max-width:56ch;margin:0;font:500 clamp(15px,1.2vw,18px)/1.45 var(--hd-sans)}
.pf-progress{display:flex;align-items:center;gap:12px;font:500 11px "JetBrains Mono",ui-monospace,monospace;text-transform:uppercase;letter-spacing:.1em}
.pf-progress b{font:700 22px var(--hd-sans);letter-spacing:-.03em;min-width:2.2ch}
.pf-progress span{position:relative;width:clamp(80px,12vw,180px);height:2px;background:var(--hd-line)}
.pf-progress i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--hd-fg)}
.pf-progress small{color:var(--hd-fg-2)}

/* Bande géante des titres */
.pf-band{overflow:hidden;white-space:nowrap;padding:clamp(18px,2.4vw,32px) 0;border-bottom:1px solid var(--hd-line);background:var(--hd-bg)}
.pf-band>div{display:inline-flex;align-items:center;gap:clamp(20px,3vw,48px);will-change:transform}
.pf-band span{font:600 clamp(48px,7vw,120px)/1 var(--hd-sans);letter-spacing:-.05em;color:transparent;-webkit-text-stroke:1.5px var(--hd-fg);transition:color .3s}
.pf-band span:hover{color:var(--hd-fg)}
.pf-band i{font-style:normal;font-size:clamp(20px,2vw,32px)}

/* Liste : titre + cartes vivantes */
.pf-list-title{margin:0 0 clamp(24px,3vw,40px);font:600 clamp(40px,5.6vw,92px)/.92 var(--hd-sans);letter-spacing:-.055em;max-width:14ch}
.pf-list-title .hd-it{font-size:1.06em}
.pf-card{transform-style:preserve-3d;transition:transform .5s var(--hd-ease)}
.pf-card-media{transform:translateZ(0)}
.pf-card-media img[data-pf-parallax]{inset:-8% 0;height:116%;transform:translateY(var(--py,0))}
.pf-card:hover .pf-card-media img[data-pf-parallax]{transform:translateY(var(--py,0)) scale(1.05)}
.pf-card-go{position:absolute;left:14px;bottom:14px;z-index:2;display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--hd-bg);color:var(--hd-fg);transform:scale(0) rotate(-90deg);transition:transform .5s var(--hd-ease)}
.pf-card-go svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2}
.pf-card:hover .pf-card-go{transform:none}
.pf-card-idx{display:inline-block;margin-right:6px;padding:2px 7px;border-radius:6px;background:var(--hd-fg);color:var(--hd-bg);font-weight:700}
.pf-card-title{transition:letter-spacing .5s var(--hd-ease)}
.pf-card:hover .pf-card-title{letter-spacing:-.02em}

/* Révélation en volet (cartes et images de projet) */
[data-pf-reveal]{clip-path:inset(100% 0 0 0 round 18px);transition:clip-path 1.2s var(--hd-ease);transition-delay:var(--d,0ms)}
[data-pf-reveal].is-in{clip-path:inset(0 0 0 0 round 18px)}
[data-pf-reveal] img{transform:scale(1.25);transition:transform 1.6s var(--hd-ease) var(--d,0ms)}
[data-pf-reveal].is-in img{transform:none}
.pf-card [data-pf-reveal].is-in img[data-pf-parallax]{transform:translateY(var(--py,0))}

/* Titre de projet lettre par lettre */
[data-pf-letters] .pf-l{transition-delay:calc(var(--i) * 28ms + .15s)}

@media (max-width:640px){
  .pf-pin{height:260vh}
  .pf-steps{display:none}
  .pf-progress small{display:none}
  .pf-caption{font-size:10px;bottom:2%}
}
@media (prefers-reduced-motion:reduce){
  .pf-pin{height:auto}
  .pf-sticky{position:relative;height:auto;min-height:70vh}
  .pf-l{opacity:1;transform:none;filter:none}
  [data-pf-reveal]{clip-path:none}
  [data-pf-reveal] img{transform:none}
}

/* V3.1 — les mots rejoignent le centre (JS) + vague continue sur les lettres */
.pf-pin .pf-side{transform-origin:0 50%}
.pf-pin .is-ready .pf-l,.pf-pin .pf-side.is-ready .pf-l{animation:pf-wave 3.4s ease-in-out infinite;animation-delay:calc(var(--i) * 110ms + 1.8s)}
@keyframes pf-wave{0%,100%{translate:0 0}50%{translate:0 -9%}}
@media (prefers-reduced-motion:reduce){.pf-pin .pf-l{animation:none}}
