:root {
  --motion-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --motion-ease-soft: cubic-bezier(0.22, 1, 0.36, 1);
}

.reveal {
  --reveal-x: 0px;
  --reveal-y: 28px;
  --reveal-scale: 0.985;
  --reveal-blur: 5px;
  --reveal-delay: 0ms;
  --reveal-stagger: 72ms;
}

.reveal.d1 { --reveal-delay: 80ms; }
.reveal.d2 { --reveal-delay: 160ms; }
.reveal.d3 { --reveal-delay: 240ms; }
.reveal.d4 { --reveal-delay: 320ms; }

.reveal[data-reveal="soft"] {
  --reveal-y: 20px;
  --reveal-scale: 1;
  --reveal-blur: 4px;
}

.reveal[data-reveal="block"] {
  --reveal-y: 24px;
  --reveal-scale: 0.99;
  --reveal-blur: 0px;
}

.reveal[data-reveal="card"] {
  --reveal-y: 34px;
  --reveal-scale: 0.975;
  --reveal-blur: 0px;
}

.reveal[data-reveal="media-left"] {
  --reveal-x: -46px;
  --reveal-y: 0px;
  --reveal-scale: 0.985;
  --reveal-blur: 0px;
}

.reveal[data-reveal="media-right"] {
  --reveal-x: 46px;
  --reveal-y: 0px;
  --reveal-scale: 0.985;
  --reveal-blur: 0px;
}

.reveal[data-stagger="fast"] { --reveal-stagger: 48ms; }

.js:not(.reduce-motion) .reveal {
  opacity: 0;
  translate: var(--reveal-x) var(--reveal-y);
  scale: var(--reveal-scale);
  filter: blur(var(--reveal-blur));
  transition:
    opacity 520ms ease-out var(--reveal-delay),
    translate 820ms var(--motion-ease-out) var(--reveal-delay),
    scale 820ms var(--motion-ease-out) var(--reveal-delay),
    filter 620ms ease-out var(--reveal-delay),
    clip-path 920ms var(--motion-ease-soft) var(--reveal-delay);
  will-change: opacity, translate, scale, filter;
}

.js:not(.reduce-motion) .reveal.is-visible {
  opacity: 1;
  translate: 0 0;
  scale: 1;
  filter: blur(0);
}

.js:not(.reduce-motion) .reveal[data-reveal="media-left"] {
  clip-path: inset(0 11% 0 0 round var(--radius));
}

.js:not(.reduce-motion) .reveal[data-reveal="media-right"] {
  clip-path: inset(0 0 0 11% round var(--radius));
}

.js:not(.reduce-motion) .reveal[data-reveal^="media"].is-visible {
  clip-path: inset(0 0 0 0 round var(--radius));
}

.js:not(.reduce-motion) .reveal[data-reveal^="media"] img {
  scale: 1.055;
  transition: scale 1250ms var(--motion-ease-out);
}

.js:not(.reduce-motion) .reveal[data-reveal^="media"].is-visible img { scale: 1; }

.js:not(.reduce-motion) .reveal[data-reveal="stagger"],
.js:not(.reduce-motion) .reveal[data-reveal="title"] {
  opacity: 1;
  translate: none;
  scale: 1;
  filter: none;
  transition: none;
  will-change: auto;
}

.js:not(.reduce-motion) .reveal[data-reveal="stagger"] > *,
.js:not(.reduce-motion) .reveal[data-reveal="title"] > * {
  opacity: 0;
  translate: 0 24px;
  scale: 0.985;
  filter: blur(4px);
  transition:
    opacity 500ms ease-out calc(var(--reveal-delay) + (var(--reveal-index, 0) * var(--reveal-stagger))),
    translate 780ms var(--motion-ease-out) calc(var(--reveal-delay) + (var(--reveal-index, 0) * var(--reveal-stagger))),
    scale 780ms var(--motion-ease-out) calc(var(--reveal-delay) + (var(--reveal-index, 0) * var(--reveal-stagger))),
    filter 580ms ease-out calc(var(--reveal-delay) + (var(--reveal-index, 0) * var(--reveal-stagger))),
    clip-path 820ms var(--motion-ease-soft) calc(var(--reveal-delay) + (var(--reveal-index, 0) * var(--reveal-stagger)));
  will-change: opacity, translate, scale, filter;
}

.js:not(.reduce-motion) .reveal[data-reveal="stagger"].is-visible > *,
.js:not(.reduce-motion) .reveal[data-reveal="title"].is-visible > * {
  opacity: 1;
  translate: 0 0;
  scale: 1;
  filter: blur(0);
}

.reveal[data-reveal="title"] { --reveal-stagger: 68ms; }

.js:not(.reduce-motion) .reveal[data-reveal="title"] > * {
  translate: 0 30px;
  scale: 1;
  filter: none;
  clip-path: inset(0 0 100% 0);
}

.js:not(.reduce-motion) .reveal[data-reveal="title"].is-visible > * {
  translate: 0 0;
  clip-path: inset(0 0 0 0);
}

.js:not(.reduce-motion) .hero-bg {
  animation: hero-background-in 1600ms var(--motion-ease-out) both;
}

.js:not(.reduce-motion) .stat + .stat::before {
  transform: scaleY(0);
  transform-origin: center;
  transition: transform 650ms var(--motion-ease-out) 260ms;
}

.js:not(.reduce-motion) .stats-grid.is-visible .stat + .stat::before { transform: scaleY(1); }

.stat-num {
  font-variant-numeric: tabular-nums lining-nums;
  transform-origin: 50% 70%;
}

.js:not(.reduce-motion) .stat-num.is-counting {
  animation: stat-number-count 1650ms ease-out both;
}

.js:not(.reduce-motion) .stat-num.is-complete {
  animation: stat-number-finish 440ms var(--motion-ease-soft) both;
}

.js:not(.reduce-motion) .band::before,
.js:not(.reduce-motion) .grid-section::before {
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 1050ms var(--motion-ease-out);
}

.js:not(.reduce-motion) .band.section-visible::before,
.js:not(.reduce-motion) .grid-section.section-visible::before { transform: scaleX(1); }

.js:not(.reduce-motion) .contact-card::before {
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 1050ms var(--motion-ease-out) 180ms;
}

.js:not(.reduce-motion) .contact-card.is-visible::before { transform: scaleX(1); }

.js:not(.reduce-motion) .steps.is-visible .step-stamp {
  animation: stamp-settle 560ms var(--motion-ease-soft) both;
  animation-delay: calc(220ms + (var(--reveal-index, 0) * var(--reveal-stagger)));
}

.reveal.is-settled,
.reveal.is-settled > * { will-change: auto; }

@keyframes hero-background-in {
  from { opacity: 0.58; scale: 1.035; }
  to { opacity: 1; scale: 1; }
}

@keyframes stamp-settle {
  0% { opacity: 0.25; scale: 0.72; }
  72% { opacity: 1; scale: 1.08; }
  100% { opacity: 1; scale: 1; }
}

@keyframes stat-number-count {
  0% { opacity: 0.45; translate: 0 8px; filter: brightness(0.82); }
  24% { opacity: 1; }
  100% { opacity: 1; translate: 0 0; filter: brightness(1); }
}

@keyframes stat-number-finish {
  0% { scale: 1; filter: brightness(1); }
  48% { scale: 1.045; filter: brightness(1.18) drop-shadow(0 0 10px rgba(225, 29, 37, 0.24)); }
  100% { scale: 1; filter: brightness(1); }
}

@media (max-width: 640px) {
  .reveal.d1 { --reveal-delay: 60ms; }
  .reveal.d2 { --reveal-delay: 120ms; }
  .reveal.d3 { --reveal-delay: 180ms; }
  .reveal.d4 { --reveal-delay: 240ms; }

  .reveal[data-reveal="media-left"],
  .reveal[data-reveal="media-right"] {
    --reveal-x: 0px;
    --reveal-y: 24px;
  }

  .reveal[data-reveal="stagger"] { --reveal-stagger: 54ms; }
  .reveal[data-stagger="fast"] { --reveal-stagger: 38ms; }

  .js:not(.reduce-motion) .reveal[data-reveal^="media"] {
    clip-path: inset(7% 0 0 0 round var(--radius));
  }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    transition-delay: 0ms !important;
  }

  .reveal,
  .reveal > * {
    opacity: 1 !important;
    translate: none !important;
    scale: 1 !important;
    filter: none !important;
    clip-path: none !important;
  }
}
