/* ============================================
   PORTFOLIO — Lyrge
   Page Réalisations · UI/UX moderne · GPU-friendly
   ============================================ */

/* Progress bar de lecture */
#pf-bar{
  position:fixed;top:0;left:0;height:2px;width:0%;
  background:linear-gradient(90deg,var(--c-primary-container),var(--c-primary-fixed));
  z-index:10000;pointer-events:none;
  transition:width 80ms linear
}

/* Animations utilitaires (composite-only) */
@keyframes pf-up{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}
@keyframes pf-fade{from{opacity:0}to{opacity:1}}
@keyframes pf-tick{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes pf-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}

/* ============================================
   HERO
   ============================================ */
.pf-hero{
  position:relative;
  background:var(--c-surface);
  padding:clamp(2.5rem,5vw,4rem) var(--px) clamp(3rem,5vw,4.5rem);
  overflow:hidden;
  isolation:isolate
}
.pf-hero__inner{
  position:relative;z-index:2;
  max-width:var(--max-w);margin:0 auto;
  display:grid;grid-template-columns:1fr;gap:clamp(2.5rem,5vw,4rem);
  align-items:center
}
@media(min-width:1024px){
  .pf-hero__inner{grid-template-columns:1.05fr 1fr}
}

/* Décor : un blob blur + un anneau, statiques */
.pf-hero__blob{
  position:absolute;pointer-events:none;
  width:min(680px,75vw);aspect-ratio:1;
  border-radius:50%;
  background:radial-gradient(circle at 30% 30%,rgba(175,240,210,.55),transparent 65%);
  top:-22%;right:-12%;
  filter:blur(70px);opacity:.6;z-index:0
}
.pf-hero__ring{
  position:absolute;pointer-events:none;
  width:min(560px,62vw);aspect-ratio:1;
  border-radius:50%;
  border:1px solid rgba(26,92,69,.07);
  right:-6%;top:6%;z-index:0
}
.pf-hero__ring::after{
  content:'';position:absolute;inset:14%;border-radius:50%;
  border:1px dashed rgba(26,92,69,.10)
}

/* Eyebrow pill */
.pf-eyebrow-pill{
  display:inline-flex;align-items:center;gap:.6rem;
  font-family:var(--f-mono);font-size:.625rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--c-primary-container);
  background:rgba(26,92,69,.07);border:1px solid rgba(26,92,69,.14);
  padding:.45rem 1rem;border-radius:9999px;
  margin-bottom:clamp(1.25rem,2.5vw,1.75rem);
  animation:pf-fade .7s ease both
}
.pf-eyebrow-pill::before{
  content:'';width:6px;height:6px;border-radius:50%;
  background:var(--c-primary-container);
  animation:pf-pulse 2.2s ease-in-out infinite
}

/* Titre */
.pf-hero__title{
  font-family:var(--f-headline);
  font-size:clamp(2.25rem,7vw,5rem);
  font-weight:800;letter-spacing:-.04em;line-height:.95;
  color:var(--c-on-surface);
  margin:0;
  animation:pf-up .9s cubic-bezier(.16,1,.3,1) .1s both
}
.pf-hero__title em{
  font-style:normal;color:var(--c-primary-container)
}

/* Lead */
.pf-hero__lead{
  margin-top:clamp(1.25rem,2.5vw,1.75rem);
  max-width:50ch;
  font-size:1.0625rem;line-height:1.65;
  color:var(--c-on-surface-variant);
  animation:pf-up .9s cubic-bezier(.16,1,.3,1) .25s both
}

/* Stats */
.pf-hero__bottom{
  margin-top:clamp(2rem,4vw,3rem);
  display:flex;align-items:center;flex-wrap:wrap;
  gap:clamp(1.5rem,4vw,3rem);
  animation:pf-up .9s cubic-bezier(.16,1,.3,1) .4s both
}
.pf-hero__stats{display:flex;gap:clamp(1.5rem,4vw,3rem);flex-wrap:wrap}
.pf-stat{display:flex;flex-direction:column;gap:.25rem}
.pf-stat__num{
  font-family:var(--f-headline);font-weight:800;
  font-size:clamp(1.85rem,4vw,2.6rem);
  letter-spacing:-.04em;line-height:1;
  color:var(--c-on-surface);
  font-variant-numeric:tabular-nums
}
.pf-stat__lbl{
  font-family:var(--f-mono);font-size:.55rem;
  letter-spacing:.16em;text-transform:uppercase;
  color:var(--c-on-surface-variant)
}

/* Showcase desktop : 2 mockups statiques empilés */
.pf-hero__showcase{
  position:relative;display:none;
  aspect-ratio:5/4
}
@media(min-width:1024px){
  .pf-hero__showcase{
    display:block;
    animation:pf-up 1.1s cubic-bezier(.16,1,.3,1) .25s both
  }
}
.pf-show-card{
  position:absolute;
  border-radius:14px;overflow:hidden;
  background:#f0f0ed;
  border:1px solid rgba(0,0,0,.06);
  box-shadow:
    0 1px 2px rgba(0,0,0,.04),
    0 12px 28px rgba(0,0,0,.08),
    0 28px 60px rgba(0,0,0,.10)
}
.pf-show-card__chrome{
  display:flex;align-items:center;gap:.4rem;
  padding:.5rem .75rem;
  background:#eeeee9;
  border-bottom:1px solid rgba(0,0,0,.06)
}
.pf-show-card__chrome .dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.pf-show-card__url{
  flex:1;height:16px;
  background:rgba(0,0,0,.05);border-radius:4px;
  font-family:var(--f-mono);font-size:.5rem;letter-spacing:.03em;
  display:flex;align-items:center;justify-content:center;
  color:rgba(0,0,0,.4);
  padding:0 .35rem
}
.pf-show-card img{
  width:100%;height:auto;display:block;
  aspect-ratio:16/10;
  object-fit:cover;object-position:top
}
.pf-show-card--main{
  width:78%;top:6%;right:0;
  transform:rotate(-2.5deg);
  z-index:2
}
.pf-show-card--alt{
  width:60%;bottom:6%;left:0;
  transform:rotate(4deg);
  z-index:1;
  filter:saturate(.9)
}
/* Lighthouse badge */
.pf-show-badge{
  position:absolute;
  bottom:18%;right:8%;
  z-index:3;
  background:var(--c-primary-container);color:#fff;
  padding:.7rem 1rem;border-radius:14px;
  display:flex;flex-direction:column;align-items:center;
  box-shadow:0 12px 28px rgba(0,68,48,.22),inset 0 1px 0 rgba(255,255,255,.15);
  border:1px solid rgba(255,255,255,.1);
  animation:pf-up .8s cubic-bezier(.16,1,.3,1) .9s both
}
.pf-show-badge__num{
  font-family:var(--f-headline);font-weight:800;
  font-size:1.65rem;line-height:1;letter-spacing:-.04em
}
.pf-show-badge__lbl{
  font-family:var(--f-mono);font-size:.5rem;
  letter-spacing:.14em;text-transform:uppercase;
  opacity:.75;margin-top:.25rem
}

/* ============================================
   TICKER
   ============================================ */
.pf-ticker{
  background:var(--c-primary-container);
  overflow:hidden;padding:.85rem 0;
  user-select:none
}
.pf-ticker__track{
  display:flex;white-space:nowrap;
  animation:pf-tick 32s linear infinite;
  will-change:transform
}
.pf-ticker:hover .pf-ticker__track{animation-play-state:paused}
.pf-ticker__item{
  font-family:var(--f-mono);font-size:.625rem;
  letter-spacing:.18em;text-transform:uppercase;
  color:rgba(255,255,255,.55);
  padding:0 2rem;flex-shrink:0
}
.pf-ticker__item strong{
  color:var(--c-primary-fixed);font-weight:700
}

/* ============================================
   FILTRES (sticky)
   ============================================ */
.pf-filters{
  position:sticky;top:0;
  background:rgba(249,249,246,.85);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--c-surface-variant);
  z-index:50
}
.pf-filters__inner{
  max-width:var(--max-w);margin:0 auto;
  padding:.75rem var(--px);
  display:flex;gap:.4rem;
  overflow-x:auto;scrollbar-width:none
}
.pf-filters__inner::-webkit-scrollbar{display:none}
.pf-fbtn{
  flex-shrink:0;
  padding:.55rem 1.15rem;
  border-radius:9999px;
  border:1px solid transparent;
  background:transparent;cursor:pointer;
  font-family:var(--f-body);font-size:.8125rem;font-weight:500;
  color:var(--c-on-surface-variant);
  white-space:nowrap;
  transition:background .18s,color .18s,border-color .18s,transform .12s
}
.pf-fbtn:hover{
  background:var(--c-surface-mid);
  color:var(--c-on-surface)
}
.pf-fbtn:active{transform:scale(.96)}
.pf-fbtn.is-on{
  background:var(--c-on-surface);
  color:var(--c-surface);
  border-color:var(--c-on-surface)
}

/* ============================================
   GRID + CARTES
   ============================================ */
.pf-main{
  max-width:var(--max-w);margin:0 auto;
  padding:clamp(2.5rem,5vw,4rem) var(--px);
  background:var(--c-surface)
}
.pf-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:clamp(1rem,2vw,1.5rem)
}
@media(min-width:600px){
  .pf-grid{grid-template-columns:repeat(2,1fr)}
  .pf-card--c2,.pf-card--c3{grid-column:span 2}
}
@media(min-width:1024px){
  .pf-grid{grid-template-columns:repeat(12,1fr);gap:clamp(1.25rem,2vw,1.75rem)}
  .pf-card{grid-column:span 4}
  .pf-card--c2{grid-column:span 8}
  .pf-card--c3{grid-column:span 12}
}

/* Carte */
.pf-card{
  position:relative;
  border-radius:1.25rem;overflow:hidden;
  background:#fff;
  box-shadow:0 2px 8px rgba(26,28,27,.05),0 0 0 1px rgba(26,28,27,.04);
  transition:transform .35s cubic-bezier(.22,1,.36,1),
             box-shadow .35s cubic-bezier(.22,1,.36,1)
}
@media(hover:hover){
  .pf-card:hover{
    transform:translateY(-6px);
    box-shadow:0 22px 48px rgba(26,28,27,.10),0 0 0 1px rgba(26,28,27,.04)
  }
}
.pf-card.is-out{display:none}
.pf-card:focus-visible{outline:3px solid var(--c-primary-fixed);outline-offset:3px}

/* Visuel */
.pf-visual{
  position:relative;overflow:hidden;
  aspect-ratio:4/3;
  background:#f0f0ed
}
@media(min-width:1024px){
  .pf-card--c2 .pf-visual,
  .pf-card--c3 .pf-visual{aspect-ratio:16/8}
}
.pf-chrome{
  position:absolute;top:0;left:0;right:0;height:30px;
  background:rgba(245,245,242,.96);
  border-bottom:1px solid rgba(26,28,27,.06);
  display:flex;align-items:center;
  padding:0 .75rem;gap:.4rem;
  z-index:3
}
.dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.dot-r{background:#ff5f57}
.dot-y{background:#febc2e}
.dot-g{background:#28c840}
.pf-url{
  flex:1;margin:0 .5rem;height:16px;
  background:rgba(26,28,27,.06);border-radius:4px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--f-mono);font-size:.5rem;letter-spacing:.04em;
  color:rgba(26,28,27,.4)
}

.pf-screen-wrap{position:absolute;inset:30px 0 0;overflow:hidden}
.pf-screen{
  width:100%;height:100%;display:block;
  object-fit:cover;object-position:top;
  transition:transform .55s cubic-bezier(.22,1,.36,1)
}
@media(hover:hover){
  .pf-card:hover .pf-screen{transform:scale(1.04)}
}

/* Mockup CSS (Enhanced) */
.pf-mockup{
  position:absolute;inset:30px 0 0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:1.5rem;
  transition:transform .45s ease
}
.pf-card:hover .pf-mockup{transform:scale(1.03)}
.pf-mockup-name{
  font-family:var(--f-headline);font-weight:800;
  letter-spacing:-.03em;line-height:1;text-align:center;
  font-size:clamp(1.5rem,3.5vw,2.75rem);
  color:rgba(255,255,255,.92)
}
.pf-mockup-sub{
  font-family:var(--f-mono);font-size:.5rem;
  letter-spacing:.22em;text-transform:uppercase;
  color:rgba(255,255,255,.4);
  margin-top:.6rem;text-align:center
}

/* Overlay au survol */
.pf-overlay{
  position:absolute;inset:0;z-index:4;
  background:rgba(10,10,8,.78);
  display:flex;align-items:center;justify-content:center;
  opacity:0;
  transition:opacity .25s ease
}
@media(hover:hover){
  .pf-card:hover .pf-overlay{opacity:1;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
}
.pf-overlay-body{
  text-align:center;padding:1.5rem 1.75rem;color:#fff;
  transform:translateY(8px);
  transition:transform .3s ease
}
.pf-card:hover .pf-overlay-body{transform:translateY(0)}
.pf-otag{
  font-family:var(--f-mono);font-size:.5rem;
  letter-spacing:.2em;text-transform:uppercase;
  color:var(--c-primary-fixed);
  display:block;margin-bottom:.625rem
}
.pf-otitle{
  font-family:var(--f-headline);font-weight:800;
  font-size:clamp(1.4rem,3vw,2.2rem);
  letter-spacing:-.03em;line-height:1;
  margin:0 0 .75rem
}
.pf-odesc{
  font-size:.85rem;color:rgba(255,255,255,.7);
  line-height:1.6;max-width:30ch;margin:0 auto 1.25rem
}
.pf-obtn{
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.6rem 1.5rem;border-radius:9999px;
  font-family:var(--f-body);font-size:.8rem;font-weight:700;
  text-decoration:none;border:none;cursor:pointer;
  background:#fff;color:#0f0f0d;
  transition:transform .18s,background .18s
}
.pf-obtn:hover{
  background:var(--c-primary-fixed);
  transform:scale(1.04)
}
.pf-obtn-off{
  background:rgba(255,255,255,.1);
  color:rgba(255,255,255,.4);
  cursor:default;pointer-events:none
}

/* Méta */
.pf-meta{
  padding:1.125rem 1.375rem 1.375rem;
  border-top:1px solid var(--c-surface-variant)
}
.pf-meta-row{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:.5rem
}
.pf-tag{
  font-family:var(--f-mono);font-size:.5rem;
  letter-spacing:.14em;text-transform:uppercase;
  padding:.3rem .75rem;border-radius:9999px;font-weight:600
}
.tag-green{background:rgba(175,240,210,.3);color:var(--c-primary)}
.tag-orange{background:rgba(253,155,94,.18);color:var(--c-secondary)}
.tag-blue{background:rgba(74,144,217,.15);color:#2563b5}
.tag-slate{background:rgba(100,100,100,.1);color:#555}
.tag-purple{background:rgba(124,58,237,.12);color:#6d28d9}
.pf-n{
  font-family:var(--f-mono);font-size:.55rem;
  color:var(--c-on-surface-variant);opacity:.4
}
.pf-ctitle{
  font-family:var(--f-headline);font-weight:700;
  font-size:clamp(1.1rem,2vw,1.4rem);
  letter-spacing:-.02em;line-height:1.15;
  color:var(--c-on-surface);
  margin:0 0 .35rem
}
.pf-cdesc{
  font-family:var(--f-body);font-size:.8125rem;
  color:var(--c-on-surface-variant);line-height:1.65;
  margin:0
}
.pf-insights{
  display:flex;gap:1rem;
  margin-top:1rem;padding-top:1rem;
  border-top:1px solid var(--c-surface-variant)
}
.pf-insight{display:flex;flex-direction:column;gap:.15rem;flex:1}
.pf-insight__val{
  font-family:var(--f-headline);font-weight:700;
  font-size:clamp(.95rem,1.8vw,1.15rem);
  letter-spacing:-.02em;
  color:var(--c-primary-container);line-height:1
}
.pf-insight__lbl{
  font-family:var(--f-mono);font-size:.5rem;
  letter-spacing:.12em;text-transform:uppercase;
  color:var(--c-on-surface-variant)
}

/* Reveal léger sur scroll (composite-only) */
.pf-rev{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .65s cubic-bezier(.22,1,.36,1) calc(var(--d,0) * 90ms),
             transform .65s cubic-bezier(.22,1,.36,1) calc(var(--d,0) * 90ms)
}
.pf-rev.in{opacity:1;transform:translateY(0)}

/* Empty state */
.pf-empty{
  display:none;grid-column:1/-1;
  padding:4rem 2rem;text-align:center;
  font-family:var(--f-mono);font-size:.7rem;
  letter-spacing:.15em;text-transform:uppercase;
  color:var(--c-on-surface-variant)
}

/* ============================================
   PREVIEW MODAL
   ============================================ */
#pf-preview-backdrop{
  position:fixed;inset:0;z-index:10010;
  background:rgba(10,10,8,.72);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  opacity:0;pointer-events:none;
  transition:opacity .3s ease
}
#pf-preview-backdrop.is-open{opacity:1;pointer-events:auto}
#pf-preview{
  position:fixed;z-index:10020;
  inset:clamp(.75rem,3vw,2rem);
  border-radius:1rem;overflow:hidden;
  display:flex;flex-direction:column;
  background:#f5f5f2;
  box-shadow:0 32px 80px rgba(0,0,0,.45),0 0 0 1px rgba(0,0,0,.1);
  opacity:0;pointer-events:none;
  transform:translateY(20px) scale(.97);
  transition:opacity .3s ease,transform .3s cubic-bezier(.16,1,.3,1)
}
#pf-preview.is-open{
  opacity:1;pointer-events:auto;
  transform:translateY(0) scale(1)
}
#pf-preview-chrome{
  flex-shrink:0;height:42px;
  background:rgba(245,245,242,.96);
  border-bottom:1px solid rgba(26,28,27,.1);
  display:flex;align-items:center;
  padding:0 .9rem;gap:.625rem
}
.pf-preview-dots{display:flex;gap:.4rem;flex-shrink:0}
.pf-preview-dots .dot{width:10px;height:10px;border-radius:50%}
#pf-preview-url{
  flex:1;height:20px;
  background:rgba(26,28,27,.07);border-radius:5px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--f-mono);font-size:.55rem;letter-spacing:.04em;
  color:rgba(26,28,27,.45)
}
#pf-preview-close{
  flex-shrink:0;width:28px;height:28px;border-radius:50%;
  border:none;background:transparent;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  color:var(--c-on-surface-variant);
  transition:background .15s,color .15s
}
#pf-preview-close:hover{
  background:rgba(26,28,27,.08);
  color:var(--c-on-surface)
}
#pf-preview-close .material-symbols-outlined{font-size:1.1rem}
#pf-preview-iframe{
  flex:1;width:100%;border:none;background:#fff
}
body.preview-open{overflow:hidden}
.pf-preview-btn{
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.6rem 1.5rem;border-radius:9999px;
  border:none;cursor:pointer;
  font-family:var(--f-body);font-size:.8rem;font-weight:700;
  text-decoration:none;
  background:#fff;color:#0f0f0d;
  transition:transform .18s,background .18s
}
.pf-preview-btn:hover{
  background:var(--c-primary-fixed);
  transform:scale(1.04)
}

/* ============================================
   Reduced motion
   ============================================ */
@media (prefers-reduced-motion:reduce){
  .pf-eyebrow-pill,
  .pf-rev,
  .pf-hero__title,
  .pf-hero__lead,
  .pf-hero__bottom,
  .pf-hero__showcase,
  .pf-show-badge,
  .pf-card,
  .pf-screen,
  .pf-overlay,
  .pf-overlay-body,
  .pf-mockup{
    animation:none!important;
    transition:none!important;
    opacity:1!important;
    transform:none!important
  }
  .pf-rev{opacity:1!important;transform:none!important}
  .pf-ticker__track{animation-play-state:paused}
  .pf-eyebrow-pill::before{animation:none}
}
