/* Cocoa XP Galleria — brown + black, champagne accent */
:root{
--bg:#0d0a07;--panel:#17110b;--line:rgba(200,177,138,.18);
--gold:#c8b18a;--gold-deep:#9a8464;--text:#f2ece1;--muted:#b8a88f;
--radius:16px;--font-cards:"Caprasimo","Playfair Display",Georgia,serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:"Inter",system-ui,sans-serif;color:var(--text);
background:radial-gradient(1100px 500px at 50% -8%,rgba(200,177,138,.08),transparent 60%),linear-gradient(180deg,#1a110a 0%,var(--bg) 42%,#060403 100%);
min-height:100vh;display:flex;flex-direction:column;line-height:1.6}
/* ---------- NAV : iPhone-style liquid glass ---------- */
.nav{--glass-a:rgba(66,46,28,.48);--glass-b:rgba(16,11,7,.32);
display:flex;align-items:center;gap:16px;padding:16px clamp(18px,4vw,44px);
position:sticky;top:0;z-index:10;
background:linear-gradient(180deg,var(--glass-a),var(--glass-b));
-webkit-backdrop-filter:blur(28px) saturate(190%) brightness(1.06);
backdrop-filter:blur(28px) saturate(190%) brightness(1.06);
border-bottom:1px solid rgba(255,255,255,.10);
box-shadow:
  inset 0 1px 0 rgba(255,255,255,.16),
  inset 0 -1px 0 rgba(255,255,255,.05),
  0 8px 28px -10px rgba(0,0,0,.60),
  0 1px 3px rgba(0,0,0,.35);
isolation:isolate;
transition:background .45s ease,box-shadow .45s ease,backdrop-filter .45s ease}
/* sheen — light catching the glass */
.nav::before{content:"";position:absolute;inset:0 0 auto;height:58%;pointer-events:none;z-index:-1;
background:linear-gradient(180deg,rgba(255,255,255,.11),rgba(255,255,255,.03) 62%,rgba(255,255,255,0) 100%)}
/* scrolled: glass thickens + tint deepens as photos slide underneath */
.nav.is-scrolled{--glass-a:rgba(54,37,22,.64);--glass-b:rgba(13,9,6,.57);
-webkit-backdrop-filter:blur(38px) saturate(210%) brightness(1.10);
backdrop-filter:blur(38px) saturate(210%) brightness(1.10);
box-shadow:
  inset 0 1px 0 rgba(255,255,255,.20),
  inset 0 -1px 0 rgba(255,255,255,.06),
  0 14px 40px -12px rgba(0,0,0,.70),
  0 2px 6px rgba(0,0,0,.40)}
/* no backdrop-filter support → solid cocoa bar so text stays readable */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .nav,.nav.is-scrolled{background:rgba(19,13,8,.96)}
}
/* iOS "Reduce Transparency" accessibility setting */
@media (prefers-reduced-transparency:reduce){
  .nav,.nav.is-scrolled{background:rgba(19,13,8,.96);
    -webkit-backdrop-filter:none;backdrop-filter:none}
}
.brand{font-weight:700;letter-spacing:.28em;color:var(--text);text-decoration:none;font-size:13px}
.brand em{font-style:normal;color:var(--gold);font-weight:400}
.nav-count{margin-left:auto;color:var(--muted);font-size:12px;padding:6px 12px;border-radius:999px;
border:1px solid rgba(255,255,255,.12);
background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.02));
box-shadow:inset 0 1px 0 rgba(255,255,255,.10)}
.scroll-progress{position:absolute;left:0;right:0;bottom:-1px;height:2px;background:rgba(200,177,138,.12)}
.scroll-progress span{display:block;height:100%;transform:scaleX(0);transform-origin:left;background:var(--gold)}
.hero{text-align:center;position:relative;overflow:hidden;
background:radial-gradient(900px 420px at 50% 0%,rgba(200,177,138,.10),transparent 62%),linear-gradient(180deg,#241407 0%,#140c06 45%,#070403 100%)}
.hero-content{padding:clamp(48px,7vw,84px) 20px clamp(36px,5vw,56px)}
.eyebrow{color:var(--muted);letter-spacing:.34em;font-size:11px;font-weight:500}
.hero-logo{display:block;margin:14px auto;height:auto;
width:min(78vw, 360px, calc(36vh * 1.6667));
width:min(78vw, 360px, calc(36svh * 1.6667));
max-width:100%;aspect-ratio:1800 / 1080;object-fit:contain;
filter:drop-shadow(0 12px 30px rgba(0,0,0,.6))}
.gallery-title{font-family:var(--font-cards);font-size:clamp(40px,7vw,72px);line-height:1.05;
animation:g-fade-up .9s cubic-bezier(.22,.61,.21,1) backwards;
animation-delay:.04s;
text-shadow:0 4px 60px rgba(0,0,0,.7)}
.motto{letter-spacing:.22em;font-size:13px;font-weight:600;margin-top:12px;
  animation:g-fade-up .7s cubic-bezier(.22,.61,.21,1) backwards;
  animation-delay:.12s}
.rule{display:flex;justify-content:center;margin:20px 0 16px;
  animation:g-rule .75s cubic-bezier(.22,.61,.21,1) backwards}
.rule span{width:64px;height:1px;background:var(--gold);opacity:.55}
.sub{color:var(--muted);max-width:560px;margin:0 auto;font-size:15px;
  animation:g-fade-up .7s cubic-bezier(.22,.61,.21,1) backwards;
  animation-delay:.2s}
.hero-stats{display:flex;gap:10px;justify-content:center;margin-top:18px;color:var(--muted);font-size:13px;
  animation:g-fade-up .7s cubic-bezier(.22,.61,.21,1) backwards;
  animation-delay:.28s}
.hero-stats strong{color:var(--gold)}
.filterbar{display:flex;gap:10px;justify-content:center;padding:22px 16px 4px;flex-wrap:wrap}
.filter-btn{border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--muted);
padding:10px 20px;border-radius:999px;cursor:pointer;font-size:13px;letter-spacing:.06em;font-family:inherit}
.filter-btn:hover{color:var(--text);border-color:rgba(200,177,138,.45)}
.filter-btn.is-active{background:var(--gold);border-color:var(--gold);color:#1a110a;font-weight:700}
.section{max-width:1100px;margin:0 auto;padding:34px clamp(16px,4vw,32px) 10px;width:100%}
.section-head{text-align:center;margin-bottom:22px;
  animation:g-fade-up .8s cubic-bezier(.22,.61,.21,1) backwards;
  animation-delay:.44s}
.section-head h2{font-family:var(--font-cards);font-size:clamp(28px,4vw,42px);
  animation:g-fade-up .7s cubic-bezier(.22,.61,.21,1) backwards;animation-delay:.5s}
.section-head p{color:var(--muted);font-size:14px;margin-top:6px;
  animation:g-fade-up .65s cubic-bezier(.22,.61,.21,1) backwards;animation-delay:.58s}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid .g-item:nth-child(1){grid-column:span 2;grid-row:span 2}
.grid .g-item:nth-child(1) img{height:100%;min-height:420px;object-fit:cover}
.g-item{position:relative;border-radius:var(--radius);overflow:hidden;background:var(--panel);
border:1px solid var(--line);cursor:zoom-in;transition:transform .35s ease,border-color .35s ease,box-shadow .35s ease}
.g-item:hover{transform:translateY(-4px);border-color:rgba(200,177,138,.5);box-shadow:0 18px 40px rgba(0,0,0,.55)}
.g-item img{width:100%;height:280px;object-fit:cover;display:block}
.g-item figcaption{position:absolute;left:0;right:0;bottom:0;padding:36px 16px 14px;display:flex;flex-direction:column;gap:2px;
background:linear-gradient(180deg,transparent,rgba(0,0,0,.78))}
.cap-title{font-family:var(--font-cards);font-size:18px}
.cap-sub{color:var(--muted);font-size:12.5px}
.badge{position:absolute;top:12px;left:12px;background:rgba(0,0,0,.6);border:1px solid var(--line);
color:var(--gold);font-size:11px;letter-spacing:.14em;text-transform:uppercase;padding:6px 12px;border-radius:999px}
.g-item.is-hidden{display:none}
.cta-row{display:flex;gap:22px;justify-content:center;padding:34px 16px 10px;flex-wrap:wrap;
  animation:g-fade-up .8s cubic-bezier(.22,.61,.21,1) backwards;
  animation-delay:.52s}
.back-link{color:var(--muted);font-size:13px;letter-spacing:.08em;text-decoration:none;border-bottom:1px solid rgba(200,177,138,.4);padding-bottom:2px}
.back-link:hover{color:var(--gold)}
.back-link.gold{color:var(--gold)}
.lightbox{position:fixed;inset:0;z-index:99;display:flex;align-items:center;justify-content:center;gap:12px;
background:rgba(0,0,0,.9);backdrop-filter:blur(8px);padding:20px}
.lightbox[hidden]{display:none}
.lb-figure{max-width:min(900px,92vw);text-align:center}
.lb-figure img{max-width:100%;max-height:74vh;border-radius:12px;border:1px solid var(--line)}
.lb-figure figcaption{margin-top:12px;color:var(--muted);font-size:14px}
.lb-btn{border:1px solid var(--line);background:rgba(255,255,255,.06);color:var(--text);
width:46px;height:46px;border-radius:50%;cursor:pointer;font-size:18px;flex:none}
.lb-btn:hover{background:var(--gold);color:#1a110a;border-color:var(--gold)}
.lb-close{position:absolute;top:18px;right:18px}
.footer{margin-top:40px;text-align:center;padding:26px 16px 34px;border-top:1px solid rgba(200,177,138,.14);color:var(--muted);font-size:13px}
.credit{letter-spacing:.24em;text-transform:uppercase;font-size:10.5px;margin-top:6px}
/* entrance — pure CSS animation: it plays with or without JS, so a tile can never stay hidden */
.reveal{animation:g-rise .7s cubic-bezier(.22,.61,.21,1) backwards}
@keyframes g-rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
#photoGrid .g-item:nth-child(2){animation-delay:.07s}
#photoGrid .g-item:nth-child(3){animation-delay:.14s}
#photoGrid .g-item:nth-child(4){animation-delay:.21s}
#photoGrid .g-item:nth-child(5){animation-delay:.28s}
.reveal.in{opacity:1;transform:none}
@media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}.grid .g-item:nth-child(1){grid-column:span 2;grid-row:auto}.grid .g-item:nth-child(1) img{min-height:300px}}
@media(max-width:600px){.nav-count{font-size:11px;padding:5px 10px}.grid{grid-template-columns:1fr}.grid .g-item:nth-child(1){grid-column:auto}.g-item img{height:240px}.lb-prev,.lb-next{display:none}}


/* ============================================================
   ANIMATION LAYER — all CSS-only, so nothing can stay hidden
   ============================================================ */
@keyframes g-fade-up{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes g-fade-in{from{opacity:0}to{opacity:1}}
@keyframes g-rule{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes g-shimmer{0%{background-position:-150% 0}55%,100%{background-position:250% 0}}
@keyframes g-float{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(0,-13px,0)}}
@keyframes g-drift{0%{transform:scale(1) translate3d(0,0,0)}100%{transform:scale(1.07) translate3d(0,-2%,0)}}
@keyframes g-orb{0%,100%{transform:translate3d(0,0,0) scale(1);opacity:.45}
  50%{transform:translate3d(26px,-20px,0) scale(1.18);opacity:.8}}
@keyframes g-sheen{0%{transform:translateX(-130%) skewX(-18deg)}100%{transform:translateX(330%) skewX(-18deg)}}
@keyframes g-badge{from{opacity:0;transform:translateY(-9px) scale(.88)}to{opacity:1;transform:none}}
@keyframes g-cap{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:none}}
@keyframes g-lb-in{from{opacity:0}to{opacity:1}}
@keyframes g-lb-zoom{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}
@keyframes g-glow{0%,100%{box-shadow:0 0 0 0 rgba(200,177,138,0)}50%{box-shadow:0 0 24px 2px rgba(200,177,138,.32)}}

/* ---------- HERO : staggered entrance ---------- */
.hero-content > *{animation:g-fade-up .9s cubic-bezier(.22,.61,.21,1) backwards}
.hero-content > :nth-child(1){animation-delay:.04s}
.hero-content > :nth-child(2){animation-delay:.12s}
.hero-content > :nth-child(3){animation-delay:.2s}
.hero-content > :nth-child(4){animation-delay:.28s}
.hero-content > :nth-child(5){animation-delay:.36s}
.hero-content > :nth-child(6){animation-delay:.44s}
.hero-content > :nth-child(7){animation-delay:.52s}
/* logo breathes gently — opacity-only entrance so the float owns transform */
.hero-content > .hero-logo{animation:g-fade-in 1s ease backwards,g-float 7.5s ease-in-out 1.1s infinite}
/* ambient light orbs drifting behind the hero */
.hero::before,.hero::after{content:"";position:absolute;border-radius:50%;pointer-events:none;z-index:0;
  filter:blur(60px);mix-blend-mode:screen}
.hero::before{width:46vmax;height:46vmax;left:-16vmax;top:-18vmax;
  background:radial-gradient(circle at 35% 35%,rgba(200,177,138,.20),transparent 62%);
  animation:g-orb 17s ease-in-out infinite}
.hero::after{width:38vmax;height:38vmax;right:-14vmax;bottom:-16vmax;
  background:radial-gradient(circle at 60% 40%,rgba(154,132,100,.22),transparent 62%);
  animation:g-orb 21s ease-in-out 1.4s infinite reverse}
.hero-content{position:relative;z-index:1}
/* title gets a slow champagne shimmer sweeping across it */
.gallery-title{background:linear-gradient(100deg,#f2ece1 0%,#f2ece1 36%,#fff8e8 46%,#c8b18a 55%,#f2ece1 66%,#f2ece1 100%);
  background-size:250% 100%;-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
  animation:g-shimmer 7s ease-in-out infinite}
@supports not ((-webkit-background-clip:text) or (background-clip:text)){
  .gallery-title{color:var(--text);-webkit-text-fill-color:currentColor;background:none}
}
/* hairline draws itself outward */
.hero .rule span{transform-origin:50% 50%;animation:g-rule .95s cubic-bezier(.22,.61,.21,1) .6s backwards}

/* ---------- SECTION HEADINGS : underline draw-in ---------- */
.section-head h2{position:relative;display:inline-block}
.section-head h2::after{content:"";position:absolute;left:50%;bottom:-9px;width:70px;height:1px;
  background:var(--gold);opacity:.5;transform:translateX(-50%) scaleX(0);
  animation:g-rule .9s cubic-bezier(.22,.61,.21,1) .2s forwards}


/* ---------- TILES : hover choreography ---------- */
.g-item{transition:transform .45s cubic-bezier(.22,.61,.21,1),border-color .45s ease,box-shadow .45s ease}
.g-item img{transition:transform .8s cubic-bezier(.22,.61,.21,1),filter .6s ease}
.g-item:hover img{transform:scale(1.07);filter:saturate(1.1) brightness(1.04)}
.g-item:hover{transform:translateY(-6px);border-color:rgba(200,177,138,.55);
  box-shadow:0 22px 48px -10px rgba(0,0,0,.65),0 0 0 1px rgba(200,177,138,.14)}
/* caption slides up on hover/focus */
.g-item figcaption{transform:translateY(6px);opacity:.92;
  transition:transform .5s cubic-bezier(.22,.61,.21,1),opacity .5s ease}
.g-item:hover figcaption,.g-item:focus-visible figcaption{transform:none;opacity:1}
/* badge pops in, then the featured tile's badge breathes */
.badge{animation:g-badge .5s cubic-bezier(.22,.61,.21,1) backwards}
#photoGrid .g-item:nth-child(1) .badge{animation-delay:.5s}
#photoGrid .g-item:nth-child(2) .badge{animation-delay:.62s}
#photoGrid .g-item:nth-child(3) .badge{animation-delay:.74s}
#photoGrid .g-item:nth-child(4) .badge{animation-delay:.86s}
#photoGrid .g-item:nth-child(5) .badge{animation-delay:.98s}
#photoGrid .g-item:nth-child(1) .badge{animation:g-badge .5s cubic-bezier(.22,.61,.21,1) .5s backwards,
  g-glow 5.5s ease-in-out 2.2s infinite}
/* featured tile: slow ken-burns drift so the hero image is never static */
.grid .g-item:nth-child(1) img{animation:g-drift 24s ease-in-out infinite alternate}
/* a light sheen wipes across on hover */
.g-item::before{content:"";position:absolute;top:0;left:0;width:42%;height:100%;z-index:2;
  pointer-events:none;opacity:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.14),transparent)}
.g-item:hover::before{opacity:1;animation:g-sheen 1.1s ease-out}

/* ---------- FILTER BUTTONS ---------- */
.filter-btn{transition:color .35s ease,border-color .35s ease,transform .35s cubic-bezier(.22,.61,.21,1),box-shadow .35s ease}
.filter-btn:hover{transform:translateY(-2px)}
.filter-btn.is-active{animation:g-glow 4.5s ease-in-out infinite}

/* ---------- LIGHTBOX : zoom entrance ---------- */
.lightbox:not([hidden]){animation:g-lb-in .28s ease backwards}
.lightbox:not([hidden]) .lb-figure{animation:g-lb-zoom .42s cubic-bezier(.22,.61,.21,1) backwards}
.lightbox:not([hidden]) .lb-figure figcaption{animation:g-cap .5s ease .12s backwards}

/* ---------- CTAs + FOOTER ---------- */
.back-link{position:relative;transition:color .35s ease,padding-left .35s ease}
.back-link::after{content:" →";opacity:0;transition:opacity .35s ease}
.back-link:hover{padding-left:2px}
.back-link:hover::after{opacity:.85}
.footer p{animation:g-fade-up .8s cubic-bezier(.22,.61,.21,1) .3s backwards}
.credit{animation-delay:.45s}

/* never leave tiles invisible — reduced-motion users get instant content */
@media (prefers-reduced-motion:reduce){
html{scroll-behavior:auto}
.reveal{opacity:1 !important;transform:none !important;transition:none !important;animation:none !important}
.hero-content > *,.hero::before,.hero::after,.section-head h2::after,.badge,.footer p,
.hero .rule span,.grid .g-item:nth-child(1) img,.filter-btn.is-active{
  animation:none !important;opacity:1 !important;transform:none !important}
.gallery-title{animation:none !important;background:none !important;
  -webkit-text-fill-color:currentColor !important;color:var(--text) !important}
.g-item::before{display:none}
}

