:root{
  --bg:#faf9f7;
  --card:#composed;
  --card-bg:#ffffff;
  --card-bg-2:#f2f0ec;
  --ink:#141416;
  --ink-dim:#6b6862;
  --ink-faint:#9a968e;
  --accent:#a9762f;
  --accent-soft:rgba(169,118,47,0.10);
  --line:rgba(20,20,22,0.10);
  --line-strong:rgba(20,20,22,0.20);
  --radius-lg:32px;
  --radius-md:22px;
  --radius-sm:14px;
}

*{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *{animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important;}
}

body{
  background:var(--bg);
  color:var(--ink);
  font-family:'Geist', sans-serif;
  font-weight:400;
  line-height:1.6;
  overflow-x:hidden;
  position:relative;
}

a{color:inherit; text-decoration:none;}
img{display:block; max-width:100%; height:auto;}
.mono{font-family:'IBM Plex Mono', monospace;}
::selection{background:var(--accent); color:#ffffff;}

a:focus-visible, button:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:4px;
}

.wrap{
  max-width:1180px;
  margin:0 auto;
  padding:0 32px;
}

h1,h2,h3{
  font-family:'Geist', sans-serif;
  font-weight:600;
  letter-spacing:-0.025em;
}

/* ---------- Ambient background ---------- */
.ambient{
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  overflow:hidden;
}
.ambient span{
  position:absolute;
  border-radius:50%;
  filter:blur(90px);
  opacity:0.16;
}
.ambient span{
  transform:translateZ(0);
  backface-visibility:hidden;
}
.ambient .b1{
  width:520px; height:520px;
  top:-140px; left:-120px;
  background:radial-gradient(circle, #c9c2b4, transparent 70%);
  animation:drift1 24s ease-in-out infinite;
}
.ambient .b2{
  width:460px; height:460px;
  top:20%; right:-160px;
  background:radial-gradient(circle, var(--accent), transparent 70%);
  opacity:0.1;
  animation:drift2 28s ease-in-out infinite;
}
.ambient .b3{
  width:400px; height:400px;
  bottom:-160px; left:30%;
  background:radial-gradient(circle, #c9c2b4, transparent 70%);
  opacity:0.07;
  animation:drift3 32s ease-in-out infinite;
}
/* Mobile: a fixed layer with filter:blur() gets re-rasterized every scroll
   frame in Safari. Kill the blur layer completely and fake the glow with a
   static gradient painted straight onto the background — zero repaint cost. */
@media (max-width:900px){
  .ambient{display:none;}
  body{
    background:
      radial-gradient(900px 500px at 15% -5%,  rgba(0,0,0,0.03), transparent 60%),
      radial-gradient(700px 500px at 100% 25%, rgba(169,118,47,0.05), transparent 60%),
      var(--bg);
    background-attachment:scroll;
  }
}
@keyframes drift1{
  0%,100%{transform:translate(0,0);}
  50%{transform:translate(60px,40px);}
}
@keyframes drift2{
  0%,100%{transform:translate(0,0);}
  50%{transform:translate(-50px,60px);}
}
@keyframes drift3{
  0%,100%{transform:translate(0,0);}
  50%{transform:translate(40px,-30px);}
}

/* ---------- Nav ---------- */
header{
  position:relative;
  z-index:10;
  padding:32px 0 12px;
}
nav{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
  flex-wrap:wrap;
}
.brand{
  font-size:16px;
  font-weight:600;
  letter-spacing:-0.02em;
}
.status-pill{
  display:flex;
  align-items:center;
  gap:8px;
  padding:8px 16px;
  border-radius:999px;
  background:var(--card-bg);
  border:1px solid var(--line);
  font-size:12px;
  color:var(--ink-dim);
  font-family:'IBM Plex Mono', monospace;
  letter-spacing:0.02em;
}
.status-pill .dot{
  width:7px; height:7px;
  border-radius:50%;
  background:#7ed684;
  box-shadow:0 0 0 3px rgba(126,214,132,0.18);
}
.nav-loc{
  font-size:13px;
  color:var(--ink-dim);
  font-family:'IBM Plex Mono', monospace;
  text-align:right;
}
.back-link{
  display:inline-flex;
  align-items:center;
  gap:8px;
  font-size:13px;
  color:var(--ink-dim);
  font-family:'IBM Plex Mono', monospace;
  padding:8px 14px;
  border-radius:999px;
  border:1px solid var(--line);
  transition:border-color .3s ease, color .3s ease;
}
.back-link:hover{border-color:var(--accent); color:var(--accent);}

/* ---------- Hero ---------- */
.hero{
  position:relative;
  z-index:1;
  padding:56px 0 40px;
  text-align:center;
}
.photo-blob{
  width:min(280px, 60vw);
  aspect-ratio:0.92/1;
  margin:0 auto 36px;
  border-radius:46% 46% 42% 42% / 50% 50% 46% 46%;
  overflow:hidden;
  background:linear-gradient(160deg, #1a1a1c, #2a2a2e);
  position:relative;
  box-shadow:0 24px 50px -22px rgba(0,0,0,0.28);
  opacity:0;
  transform:translateY(16px) scale(0.97);
  animation:blobIn .7s cubic-bezier(.2,.8,.2,1) .05s forwards;
}
@keyframes blobIn{
  to{opacity:1; transform:translateY(0) scale(1);}
}
.photo-blob img{
  width:100%; height:100%;
  object-fit:cover;
  filter:grayscale(1) contrast(1.05);
}
.photo-blob.placeholder{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:10px;
  color:#0b0b0c;
}
.photo-blob.placeholder svg{width:44px; height:44px; opacity:0.35;}
.photo-blob.placeholder span{
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.08em;
  text-transform:uppercase;
  opacity:0.45;
}

.hero h1{
  font-size:clamp(26px, 3.6vw, 38px);
  font-weight:500;
  letter-spacing:-0.02em;
  opacity:0;
  animation:fadeUp .5s ease .18s forwards;
}
.hero h1 b{font-weight:700;}
.hero h1 .role{color:var(--accent); font-weight:600;}

@keyframes fadeUp{
  from{opacity:0; transform:translateY(14px);}
  to{opacity:1; transform:translateY(0);}
}

.social-row{
  display:flex;
  justify-content:center;
  gap:12px;
  margin:26px 0 30px;
  opacity:0;
  animation:fadeUp .5s ease .28s forwards;
}
.social-row a{
  width:38px; height:38px;
  border-radius:50%;
  border:1px solid var(--line);
  display:flex;
  align-items:center;
  justify-content:center;
  transition:border-color .3s ease, transform .3s ease, background .3s ease;
}
.social-row a:hover{
  border-color:var(--accent);
  transform:translateY(-2px);
  background:var(--accent-soft);
}
.social-row svg{width:16px; height:16px;}

.cta-row{
  display:flex;
  justify-content:center;
  gap:14px;
  flex-wrap:wrap;
  opacity:0;
  animation:fadeUp .5s ease .36s forwards;
}
.btn{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:14px 26px;
  border-radius:999px;
  font-size:14px;
  font-weight:500;
  transition:all .3s ease;
  border:1px solid transparent;
}
.btn-fill{
  background:var(--ink);
  color:#faf9f7;
}
.btn-fill:hover{background:var(--accent); color:#fff;}
.btn-outline{
  border-color:var(--line-strong);
  color:var(--ink);
}
.btn-outline:hover{border-color:var(--accent); color:var(--accent);}

/* ---------- Stat cards ---------- */
.stats{
  position:relative;
  z-index:1;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:16px;
  margin-top:52px;
}
.stat-card{
  background:var(--card-bg);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  padding:26px 28px;
}
.stat-card .lbl{
  display:flex;
  align-items:center;
  gap:8px;
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.08em;
  text-transform:uppercase;
  color:var(--ink-dim);
  margin-bottom:14px;
}
.stat-card .lbl::before{
  content:"";
  width:5px; height:5px;
  border-radius:50%;
  background:var(--accent);
}
.stat-card .num{
  font-size:clamp(30px, 4vw, 42px);
  font-weight:700;
  letter-spacing:-0.03em;
}
.stat-card .sub{
  margin-top:6px;
  font-size:13px;
  color:var(--ink-dim);
}

/* ---------- About / specialties ---------- */
section{
  position:relative;
  z-index:1;
  padding:72px 0;
}
.section-tag{
  display:inline-flex;
  align-items:center;
  gap:8px;
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.1em;
  text-transform:uppercase;
  color:var(--ink-dim);
  background:var(--card-bg);
  border:1px solid var(--line);
  padding:8px 16px;
  border-radius:999px;
  margin-bottom:26px;
}
.section-tag .dot{width:6px; height:6px; border-radius:50%; background:var(--accent);}

.about-copy p{
  font-size:19px;
  color:var(--ink);
  max-width:60ch;
  font-weight:400;
  line-height:1.65;
  margin-bottom:16px;
}
.about-copy p span{color:var(--ink-dim);}

.spec-grid{
  margin-top:40px;
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:14px;
}
.spec-card{
  background:var(--card-bg);
  border:1px solid var(--line);
  border-radius:var(--radius-md);
  padding:24px;
  transition:border-color .3s ease, transform .3s ease, background .3s ease;
}
.spec-card:hover{
  border-color:var(--line-strong);
  background:var(--card-bg-2);
  transform:translateY(-3px);
}
.spec-card .n{
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  color:var(--accent);
  margin-bottom:14px;
  display:block;
}
.spec-card h3{
  font-size:16px;
  font-weight:600;
  margin-bottom:6px;
}
.spec-card p{
  font-size:13px;
  color:var(--ink-dim);
}

/* ---------- Work grid ---------- */
.work-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  flex-wrap:wrap;
  gap:20px;
  margin-bottom:36px;
}
.work-head h2{font-size:clamp(28px,4vw,40px);}
.work-grid{
  display:flex;
  flex-direction:column;
  gap:18px;
}
.work-card{
  position:relative;
  border-radius:var(--radius-lg);
  overflow:hidden;
  background:#141416;
  border:1px solid var(--line);
  box-shadow:0 8px 30px -14px rgba(0,0,0,0.25);
  aspect-ratio:16/6;
  min-height:180px;
  display:block;
  transition:transform .45s cubic-bezier(.2,.8,.2,1), border-color .3s ease;
}
@media (max-width:700px){
  .work-card{aspect-ratio:16/9; min-height:0;}
}
.work-card:hover{
  transform:translateY(-6px);
  border-color:var(--line-strong);
}
.work-card img{
  position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
  filter:saturate(0.95) brightness(0.9);
  transition:transform .8s cubic-bezier(.2,.8,.2,1), filter .5s ease;
}
.work-card:hover img{transform:scale(1.06); filter:saturate(1.05) brightness(0.8);}
.work-card::after{
  content:"";
  position:absolute; inset:0;
  background:
    radial-gradient(ellipse at center, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0.25) 60%, rgba(0,0,0,0.4) 100%),
    linear-gradient(to top, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.1) 60%);
  transition:background .4s ease;
}
.work-card:hover::after{
  background:
    radial-gradient(ellipse at center, rgba(0,0,0,0.45) 0%, rgba(0,0,0,0.2) 60%, rgba(0,0,0,0.35) 100%),
    linear-gradient(to top, rgba(0,0,0,0.45) 0%, rgba(0,0,0,0.08) 60%);
}
.work-card-body{
  position:absolute;
  inset:0;
  z-index:2;
  padding:26px 28px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  align-items:center;
  text-align:center;
  gap:14px;
}
.work-card-body .txt .cat{
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.12em;
  text-transform:uppercase;
  color:#d9a961;                      /* lighter gold — the dark one vanished on imagery */
  margin-bottom:10px;
  display:block;
  text-shadow:0 2px 12px rgba(0,0,0,0.7);
}
.work-card-body .txt h3{
  color:#ffffff;                      /* always light — it sits on dark imagery */
  font-size:clamp(24px, 3vw, 36px);
  font-weight:600;
  letter-spacing:-0.02em;
  text-shadow:0 2px 20px rgba(0,0,0,0.55);
}
.work-card-body .arrow{
  position:absolute;
  right:22px; bottom:22px;
  width:38px; height:38px;
  border-radius:50%;
  background:rgba(255,255,255,0.14);
  display:flex;
  align-items:center;
  justify-content:center;
  flex-shrink:0;
  transition:background .3s ease, transform .3s ease;
}
.work-card:hover .arrow{
  background:var(--accent);
  transform:rotate(45deg);
}
.work-card .arrow svg{width:15px; height:15px;}

.work-card.empty{
  background:linear-gradient(160deg, var(--card-bg-2), var(--card-bg));
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  padding:22px;
  overflow:hidden;
}
.work-card.empty .initial{
  position:absolute;
  right:6px; bottom:-24px;
  font-size:120px;
  font-weight:700;
  color:rgba(255,255,255,0.06);
  line-height:1;
  pointer-events:none;
  user-select:none;
}
.work-card.empty .top-row{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  position:relative;
  z-index:2;
}
.work-card.empty .top-row .arrow{
  width:38px; height:38px;
  border-radius:50%;
  background:rgba(255,255,255,0.06);
  display:flex;
  align-items:center;
  justify-content:center;
  flex-shrink:0;
  transition:background .3s ease, transform .3s ease;
}
.work-card.empty:hover .top-row .arrow{
  background:var(--accent);
  transform:rotate(45deg);
}
.work-card.empty .top-row .arrow svg{width:15px; height:15px;}
.work-card.empty .txt{position:relative; z-index:2;}
.work-card.empty .txt .cat{
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--accent);
  margin-bottom:6px;
  display:block;
}
.work-card.empty .txt h3{
  font-size:19px;
  font-weight:600;
}
.work-card.coming{
  display:flex;
  align-items:center;
  justify-content:center;
  border-style:dashed;
  border-color:var(--line-strong);
}
.work-card.coming .txt{
  text-align:center;
  color:var(--ink-faint);
}
.work-card.coming .txt span{
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.08em;
  text-transform:uppercase;
  display:block;
  margin-top:8px;
}

/* ---------- Frame grid (detail pages) ---------- */
.frame-head{
  margin-bottom:48px;
}
.frame-head h1{
  font-size:clamp(34px, 5vw, 54px);
  margin:18px 0 14px;
  line-height:1.12;
}
.frame-head p{
  color:var(--ink-dim);
  font-size:16px;
  max-width:56ch;
}
.frame-grid{
  display:grid;
  grid-template-columns:repeat(2, 1fr);
  gap:16px;
}
.frame-card{
  position:relative;
  border-radius:var(--radius-md);
  overflow:hidden;
  border:1px solid var(--line);
  aspect-ratio:16/9;
}
.frame-card img{
  width:100%; height:100%;
  object-fit:cover;
  transition:transform 1s cubic-bezier(.2,.8,.2,1);
}
.frame-card:hover img{transform:scale(1.045);}
.frame-card .tag{
  position:absolute;
  left:14px; bottom:14px;
  z-index:2;
  font-family:'IBM Plex Mono', monospace;
  font-size:10.5px;
  letter-spacing:0.06em;
  color:var(--ink);
  background:rgba(0,0,0,0.55);
  backdrop-filter:blur(6px);
  padding:6px 12px;
  border-radius:999px;
  opacity:0;
  transform:translateY(6px);
  transition:opacity .3s ease, transform .3s ease;
}
.frame-card:hover .tag{opacity:1; transform:translateY(0);}

/* ---------- Contact ---------- */
.contact{
  text-align:center;
}
.contact h2{
  font-size:clamp(32px, 6vw, 58px);
  margin:18px auto 16px;
  max-width:16ch;
  line-height:1.14;
}
.contact h2 .accent{color:var(--accent); font-weight:600;}
.contact p.sub{
  color:var(--ink-dim);
  max-width:46ch;
  margin:0 auto 40px;
  font-size:15px;
}

/* ---------- Footer ---------- */
footer{
  position:relative;
  z-index:1;
  padding:32px 0 40px;
  border-top:1px solid var(--line);
  margin-top:20px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:12px;
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  color:var(--ink-faint);
}
footer a{color:var(--ink-dim); transition:color .3s ease;}
footer a:hover{color:var(--accent);}

/* ---------- Reveal ---------- */
/* Content is visible by default; JS adds .js-anim to <html> and only then do we
   hide-then-reveal. If JS never runs, nothing is stuck invisible. */
.reveal{
  opacity:1;
  transform:none;
  transition:opacity .5s cubic-bezier(.22,.9,.28,1), transform .5s cubic-bezier(.22,.9,.28,1);
}
.reveal.in{opacity:1; transform:translateY(0);}

/* Staggered children — each item eases in just after the one before it */
.stagger > *{
  opacity:1;
  transform:none;
  transition:opacity .5s cubic-bezier(.22,.9,.28,1), transform .5s cubic-bezier(.22,.9,.28,1);
}
.stagger.in > *{
  opacity:1;
  transform:translateY(0);
}
.stagger.in > *:nth-child(1){transition-delay:0ms;}
.stagger.in > *:nth-child(2){transition-delay:45ms;}
.stagger.in > *:nth-child(3){transition-delay:90ms;}
.stagger.in > *:nth-child(4){transition-delay:135ms;}
.stagger.in > *:nth-child(5){transition-delay:180ms;}
.stagger.in > *:nth-child(6){transition-delay:225ms;}
.stagger.in > *:nth-child(7){transition-delay:270ms;}
.stagger.in > *:nth-child(8){transition-delay:315ms;}
.stagger.in > *:nth-child(9){transition-delay:360ms;}

/* Subtle parallax drift on card images while scrolling */
.work-card img{
  transform:scale(1.14) translateY(var(--par, 0px));
}
.work-card:hover img{
  transform:scale(1.18) translateY(var(--par, 0px));
}

/* ---------- Responsive ---------- */
@media (max-width:820px){
  .spec-grid{grid-template-columns:1fr 1fr;}
  .frame-grid{grid-template-columns:1fr;}
  .stats{grid-template-columns:1fr;}
}
@media (max-width:560px){
  .wrap{padding:0 20px;}
  .spec-grid{grid-template-columns:1fr;}
  nav{flex-direction:column; align-items:flex-start; gap:12px;}
  .nav-loc{text-align:left;}
}

/* ---------- Video reels (client pages) ---------- */
.reel-grid{
  display:flex;
  flex-direction:column;
  gap:28px;
  max-width:440px;
  margin:0 auto;
}

.reel-item{
  position:relative;
  border-radius:var(--radius-md);
  overflow:hidden;
  border:1px solid var(--line);
  background:#000;
  box-shadow:0 10px 34px -16px rgba(0,0,0,0.3);
  aspect-ratio:9/16;
}
.reel-item video{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}
.reel-item .sound-btn{
  position:absolute;
  top:12px; right:12px;
  z-index:3;
  width:38px; height:38px;
  border-radius:50%;
  border:1px solid rgba(255,255,255,0.18);
  background:rgba(0,0,0,0.5);
  backdrop-filter:blur(8px);
  color:var(--ink);
  display:flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  transition:background .3s ease, border-color .3s ease, transform .2s ease;
}
.reel-item .sound-btn:hover{
  background:var(--accent);
  border-color:var(--accent);
  color:#0b0b0c;
  transform:scale(1.06);
}
.reel-item .sound-btn svg{width:17px; height:17px; pointer-events:none;}
.reel-item .sound-btn .icon-off{display:block;}
.reel-item .sound-btn .icon-on{display:none;}
.reel-item .sound-btn.unmuted .icon-off{display:none;}
.reel-item .sound-btn.unmuted .icon-on{display:block;}

.reel-item .reel-label{
  position:absolute;
  left:12px; bottom:12px;
  z-index:3;
  font-family:'IBM Plex Mono', monospace;
  font-size:10.5px;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--ink);
  background:rgba(0,0,0,0.55);
  backdrop-filter:blur(6px);
  padding:6px 12px;
  border-radius:999px;
}

.sound-hint{
  display:inline-flex;
  align-items:center;
  gap:8px;
  margin-bottom:22px;
  font-family:'IBM Plex Mono', monospace;
  font-size:11px;
  letter-spacing:0.06em;
  text-transform:uppercase;
  color:var(--ink-faint);
}
.sound-hint svg{width:14px; height:14px;}

/* ---------- Wide / cinematic reel (landscape 2.35:1) ---------- */
.reel-grid.wide{
  max-width:100%;
}
.reel-item.wide{
  aspect-ratio:2.35/1;
  border-radius:var(--radius-md);
}
.reel-item.wide video{
  object-fit:contain;
  background:#000;
}
@media (max-width:600px){
  .reel-item.wide{aspect-ratio:2.35/1;}
}


/* Respect reduced-motion: no parallax, no stagger delays */
@media (prefers-reduced-motion: reduce){
  .work-card img,
  .work-card:hover img{
    transform:scale(1.02) !important;
  }
  .stagger.in > *{transition-delay:0ms !important;}
}


/* If a container staggers its children, it shouldn't animate itself */
.reveal.stagger{
  opacity:1;
  transform:none;
  transition:none;
}


/* Only animate once JS is confirmed alive */
.js-anim .reveal{
  opacity:0;
  transform:translateY(28px);
}
.js-anim .reveal.in{
  opacity:1;
  transform:translateY(0);
}
.js-anim .stagger > *{
  opacity:0;
  transform:translateY(30px);
}
.js-anim .stagger.in > *{
  opacity:1;
  transform:translateY(0);
}
.js-anim .reveal.stagger{
  opacity:1;
  transform:none;
}


/* backdrop-filter is a known performance sink on iOS Safari.
   Solid translucent fills look identical over dark imagery and cost nothing. */
@media (max-width:900px){
  .reel-item .sound-btn,
  .reel-item .reel-label,
  .frame-card .tag{
    backdrop-filter:none;
    background:rgba(0,0,0,0.62);
  }
  /* No parallax on touch devices — the transform stays put */
  .work-card img,
  .work-card:hover img{
    transform:scale(1.02);
  }
}


/* About is now one short paragraph — trim its padding so it doesn't leave a
   hole between it and the client cards. */
#about{
  padding-top:56px;
  padding-bottom:40px;
}
#work{
  padding-top:24px;
}
.about-copy p:last-child{
  margin-bottom:0;
}

@media (max-width:820px){
  section{padding:48px 0;}
  #about{
    padding-top:32px;
    padding-bottom:24px;
  }
  #work{padding-top:16px;}
  .work-head{margin-bottom:24px;}
}


/* Trim the remaining holes: after the last client card, and above About */
#work{
  padding-bottom:40px;
}
.contact{
  padding-top:56px;
}
@media (max-width:820px){
  #work{padding-bottom:24px;}
  .contact{padding-top:36px;}
  .stats{margin-top:36px;}
}


/* Card internals always sit on dark imagery — pin them to light, independent
   of the page theme. */
.work-card .work-card-body .arrow{
  color:#ffffff;
  background:rgba(255,255,255,0.16);
}
.work-card:hover .work-card-body .arrow{
  background:var(--accent);
  color:#ffffff;
}
.work-card.empty .txt h3{color:#ffffff;}
.work-card.empty .txt .cat{color:#d9a961;}

/* Reel labels / sound buttons also live on video — keep them light */
.reel-item .reel-label,
.reel-item .sound-btn{
  color:#ffffff;
}
.frame-card .tag{color:#ffffff;}

/* ============================================================
   FILM STRIP — two rows scrolling in opposite directions, forever
   ============================================================
   The trick to a seamless loop: render the tiles TWICE inside the track,
   then translate the track by exactly -50%. At that moment the second copy
   sits precisely where the first began, so the reset is invisible.
   Animating transform (not left/margin) keeps it on the GPU compositor —
   no layout, no repaint, smooth even on a phone. */

.strip{
  padding:72px 0 80px;
  overflow:hidden;          /* clip the overflowing track */
  position:relative;
  z-index:1;
}
.strip .strip-head{
  max-width:1180px;
  margin:0 auto 34px;
  padding:0 32px;
}

.strip-rows{
  display:flex;
  flex-direction:column;
  gap:16px;
}

.marquee{
  overflow:hidden;
  /* fade the tiles out at both edges so they don't just get chopped off */
  -webkit-mask-image:linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
          mask-image:linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
}

.marquee-track{
  display:flex;
  width:max-content;
  will-change:transform;
}

/* Row 1 drifts left, row 2 drifts right — opposing motion reads as depth */
.marquee.left  .marquee-track{ animation:scroll-left  60s linear infinite; }
.marquee.right .marquee-track{ animation:scroll-right 60s linear infinite; }

@keyframes scroll-left{
  from{ transform:translate3d(0,0,0); }
  to  { transform:translate3d(-50%,0,0); }
}
@keyframes scroll-right{
  from{ transform:translate3d(-50%,0,0); }
  to  { transform:translate3d(0,0,0); }
}

/* Pause on hover so a visitor can actually look at a frame */
.marquee:hover .marquee-track{ animation-play-state:paused; }

.frame-tile{
  flex:0 0 auto;
  width:260px;
  height:260px;
  margin-right:16px;      /* each tile carries its own gap -> -50% lands exactly */
  border-radius:var(--radius-md);
  overflow:hidden;
  background:#141416;
  border:1px solid var(--line);
  position:relative;
}
.frame-tile img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
  transition:transform .6s cubic-bezier(.2,.8,.2,1), filter .4s ease;
}
.marquee:hover .frame-tile img{ filter:saturate(0.85) brightness(0.8); }
.frame-tile:hover img{
  transform:scale(1.06);
  filter:saturate(1.05) brightness(1) !important;
}

@media (max-width:820px){
  .strip{padding:48px 0 56px;}
  .strip .strip-head{padding:0 20px; margin-bottom:24px;}
  .frame-tile{width:170px; height:170px; margin-right:12px;}
  .strip-rows{gap:12px;}
  /* a little quicker on the smaller tiles so it doesn't feel sluggish */
  .marquee.left  .marquee-track{ animation-duration:45s; }
  .marquee.right .marquee-track{ animation-duration:45s; }
}

@media (prefers-reduced-motion: reduce){
  .marquee-track{ animation:none !important; }
  .marquee{
    overflow-x:auto;
    -webkit-mask-image:none; mask-image:none;
  }
}
