:root {
  --ed-motion-ease: cubic-bezier(0.16, 1, 0.3, 1);
  --ed-motion-ease-soft: cubic-bezier(0.22, 1, 0.36, 1);
  --ed-motion-accent: currentColor;
  --ed-sticky-top: 7rem;
}

/* Page progress */
.ed-scroll-progress,
[data-ed-scroll-progress] {
  --ed-scroll-progress: 0;
}

.ed-scroll-progress {
  position: fixed;
  inset: 0 0 auto;
  z-index: var(--ed-progress-z, 80);
  height: var(--ed-progress-height, 2px);
  overflow: hidden;
  pointer-events: none;
}

.ed-scroll-progress__bar {
  position: absolute;
  inset: 0;
  background: var(--ed-progress-color, var(--ed-motion-accent));
  transform: scaleX(var(--ed-scroll-progress));
  transform-origin: 0 50%;
  will-change: transform;
}

/* Editorial mask reveals */
.ed-mask-line {
  display: block;
  overflow: hidden;
  overflow: clip;
  padding-block-end: 0.08em;
  margin-block-end: -0.08em;
}

.ed-mask-line__inner,
.ed-mask-word,
.ed-mask-word-clip {
  display: inline-block;
}

.ed-mask-word-clip {
  overflow: hidden;
  overflow: clip;
  padding-block: 0.06em 0.1em;
  margin-block: -0.06em -0.1em;
  vertical-align: bottom;
}

.ed-motion-enabled .ed-mask-line__inner,
.ed-motion-enabled .ed-mask-word {
  opacity: 0;
  transform: translate3d(0, 112%, 0) rotate(1.2deg);
  transform-origin: 0 100%;
  transition:
    opacity 520ms var(--ed-motion-ease),
    transform 820ms var(--ed-motion-ease);
}

.ed-motion-enabled .ed-mask-line__inner {
  transition-delay: calc(var(--ed-line-index, 0) * 82ms + var(--ed-mask-delay, 0ms));
}

.ed-motion-enabled .ed-mask-word {
  transition-delay: calc(var(--ed-word-index, 0) * 38ms + var(--ed-mask-delay, 0ms));
}

.ed-motion-enabled .ed-mask-reveal.is-ed-visible .ed-mask-line__inner,
.ed-motion-enabled .ed-mask-reveal.is-ed-visible .ed-mask-word,
.ed-motion-enabled [data-ed-mask-reveal].is-ed-visible .ed-mask-line__inner,
.ed-motion-enabled [data-ed-mask-reveal].is-ed-visible .ed-mask-word {
  opacity: 1;
  transform: translate3d(0, 0, 0) rotate(0deg);
}

.ed-motion-enabled .ed-mask-reveal--whole {
  opacity: 0;
  clip-path: inset(0 0 102% 0);
  transform: translate3d(0, 1.2rem, 0);
  transition:
    opacity 500ms var(--ed-motion-ease),
    clip-path 850ms var(--ed-motion-ease),
    transform 850ms var(--ed-motion-ease);
}

.ed-motion-enabled .ed-mask-reveal--whole.is-ed-visible {
  opacity: 1;
  clip-path: inset(0 0 0 0);
  transform: translate3d(0, 0, 0);
}

/* Staggered entries */
.ed-stagger {
  --ed-stagger-step: 72ms;
}

.ed-motion-enabled .ed-stagger__item {
  opacity: 0;
  transform: translate3d(0, var(--ed-stagger-distance, 1.75rem), 0);
  transition:
    opacity 650ms var(--ed-motion-ease-soft),
    transform 760ms var(--ed-motion-ease);
  transition-delay: calc(var(--ed-stagger-index, 0) * var(--ed-stagger-step));
}

.ed-motion-enabled .ed-stagger.is-ed-visible > .ed-stagger__item,
.ed-motion-enabled [data-ed-stagger].is-ed-visible > .ed-stagger__item {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

/* Media parallax. Apply to an image wrapper, never directly to video. */
.ed-parallax-frame {
  position: relative;
  overflow: hidden;
  overflow: clip;
}

.ed-parallax-media,
[data-ed-parallax] {
  --ed-parallax-y: 0px;
  --ed-parallax-scale: 1.045;
  transform: translate3d(0, var(--ed-parallax-y), 0) scale(var(--ed-parallax-scale));
  transform-origin: 50% 50%;
}

.ed-parallax-media.is-ed-parallax-active,
[data-ed-parallax].is-ed-parallax-active {
  will-change: transform;
}

/* Native sticky chapter composition */
.ed-chapters {
  --ed-chapters-progress: 0;
  display: grid;
  grid-template-columns: minmax(13rem, 0.72fr) minmax(0, 1.68fr);
  gap: clamp(2.5rem, 8vw, 9rem);
  align-items: start;
}

.ed-chapters__pin {
  position: sticky;
  top: var(--ed-sticky-top);
  align-self: start;
}

.ed-chapters__progress {
  transform: scaleY(var(--ed-chapters-progress));
  transform-origin: 50% 0;
}

.ed-chapter {
  min-height: max(34rem, 78svh);
  scroll-margin-top: calc(var(--ed-sticky-top) + 1rem);
  opacity: 0.44;
  transform: translate3d(0, 1.4rem, 0);
  transition:
    opacity 480ms var(--ed-motion-ease),
    transform 680ms var(--ed-motion-ease);
}

.ed-chapter.is-ed-active {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

[data-ed-chapter-target] {
  opacity: 0.46;
  transition:
    color 220ms ease,
    opacity 220ms ease,
    transform 340ms var(--ed-motion-ease);
}

[data-ed-chapter-target].is-ed-active {
  opacity: 1;
  transform: translate3d(0.35rem, 0, 0);
}

/* Services accordion */
.ed-services-accordion {
  isolation: isolate;
}

.ed-service__trigger,
[data-ed-service-trigger] {
  width: 100%;
  color: inherit;
  font: inherit;
  text-align: inherit;
  cursor: pointer;
  touch-action: manipulation;
}

button.ed-service__trigger,
button[data-ed-service-trigger] {
  padding: 0;
  border: 0;
  background: none;
}

.ed-service__trigger:focus-visible,
[data-ed-service-trigger]:focus-visible,
[data-ed-chapter-target]:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 0.35rem;
}

.ed-service__panel,
[data-ed-service-panel] {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition:
    grid-template-rows 520ms var(--ed-motion-ease),
    opacity 320ms ease;
}

.ed-service__panel-inner {
  min-height: 0;
  overflow: hidden;
  overflow: clip;
}

.ed-service.is-open > .ed-service__panel,
.ed-service.is-open > [data-ed-service-panel],
[data-ed-service].is-open > .ed-service__panel,
[data-ed-service].is-open > [data-ed-service-panel] {
  grid-template-rows: 1fr;
  opacity: 1;
}

.ed-service__indicator {
  transition: transform 420ms var(--ed-motion-ease);
}

.ed-service.is-open .ed-service__indicator,
[data-ed-service].is-open .ed-service__indicator {
  transform: rotate(45deg);
}

/* Fine-pointer CTA physics */
.ed-magnetic,
[data-ed-magnetic],
.ed-tilt,
[data-ed-tilt] {
  --ed-magnetic-x: 0px;
  --ed-magnetic-y: 0px;
  --ed-tilt-rx: 0deg;
  --ed-tilt-ry: 0deg;
  --ed-pointer-scale: 1;
  transform:
    perspective(var(--ed-tilt-perspective, 52rem))
    translate3d(var(--ed-magnetic-x), var(--ed-magnetic-y), 0)
    rotateX(var(--ed-tilt-rx))
    rotateY(var(--ed-tilt-ry))
    scale(var(--ed-pointer-scale));
  transform-style: preserve-3d;
  transition: transform 480ms var(--ed-motion-ease);
}

.ed-fine-pointer-motion .ed-magnetic.is-ed-pointer-active,
.ed-fine-pointer-motion [data-ed-magnetic].is-ed-pointer-active,
.ed-fine-pointer-motion .ed-tilt.is-ed-pointer-active,
.ed-fine-pointer-motion [data-ed-tilt].is-ed-pointer-active {
  transition-duration: 70ms;
  will-change: transform;
}

.ed-magnetic:active,
[data-ed-magnetic]:active,
.ed-tilt:active,
[data-ed-tilt]:active {
  --ed-pointer-scale: 0.985;
}

/* Cursor-follow hint scoped to a prototype. The system cursor remains intact. */
.ed-prototype,
[data-ed-prototype] {
  position: relative;
}

.ed-cursor-hint,
[data-ed-cursor-hint] {
  --ed-hint-x: 0px;
  --ed-hint-y: 0px;
  position: absolute;
  inset: 0 auto auto 0;
  z-index: var(--ed-hint-z, 4);
  opacity: 0;
  pointer-events: none;
  transform: translate3d(var(--ed-hint-x), var(--ed-hint-y), 0) scale(0.84);
  transform-origin: 50% 50%;
  transition:
    opacity 180ms ease,
    transform 320ms var(--ed-motion-ease);
}

.ed-fine-pointer-motion .is-ed-hint-visible > .ed-cursor-hint,
.ed-fine-pointer-motion .is-ed-hint-visible > [data-ed-cursor-hint] {
  opacity: 1;
  transform: translate3d(var(--ed-hint-x), var(--ed-hint-y), 0) scale(1);
}

.ed-fine-pointer-motion .is-ed-hint-over-control > .ed-cursor-hint,
.ed-fine-pointer-motion .is-ed-hint-over-control > [data-ed-cursor-hint] {
  opacity: 0.34;
}

.ed-fine-pointer-motion .is-ed-hint-pressed > .ed-cursor-hint,
.ed-fine-pointer-motion .is-ed-hint-pressed > [data-ed-cursor-hint] {
  transform: translate3d(var(--ed-hint-x), var(--ed-hint-y), 0) scale(0.9);
}

@media (max-width: 899px) {
  .ed-chapters {
    grid-template-columns: minmax(0, 1fr);
    gap: 2rem;
  }

  .ed-chapters__pin {
    position: relative;
    top: auto;
  }

  .ed-chapter {
    min-height: auto;
    opacity: 1;
    transform: none;
  }
}

@media (hover: none), (pointer: coarse) {
  .ed-cursor-hint,
  [data-ed-cursor-hint] {
    display: none;
  }
}

.ed-motion-static .ed-mask-line__inner,
.ed-motion-static .ed-mask-word,
.ed-motion-static .ed-mask-reveal--whole,
.ed-motion-static .ed-stagger__item,
.ed-motion-static .ed-chapter,
.ed-motion-static .ed-magnetic,
.ed-motion-static [data-ed-magnetic],
.ed-motion-static .ed-tilt,
.ed-motion-static [data-ed-tilt],
.ed-motion-static .ed-parallax-media,
.ed-motion-static [data-ed-parallax] {
  opacity: 1;
  clip-path: none;
  transform: none;
  transition: none;
}

.ed-motion-static .ed-service__panel,
.ed-motion-static [data-ed-service-panel],
.ed-motion-static .ed-service__indicator {
  transition: none;
}

.ed-motion-static .ed-cursor-hint,
.ed-motion-static [data-ed-cursor-hint] {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .ed-mask-line__inner,
  .ed-mask-word,
  .ed-mask-reveal--whole,
  .ed-stagger__item,
  .ed-chapter,
  .ed-magnetic,
  [data-ed-magnetic],
  .ed-tilt,
  [data-ed-tilt],
  .ed-parallax-media,
  [data-ed-parallax] {
    opacity: 1 !important;
    clip-path: none !important;
    transform: none !important;
    transition: none !important;
  }

  .ed-service__panel,
  [data-ed-service-panel],
  .ed-service__indicator {
    transition: none !important;
  }

  .ed-cursor-hint,
  [data-ed-cursor-hint] {
    display: none !important;
  }
}

@media print {
  .ed-scroll-progress,
  .ed-cursor-hint,
  [data-ed-cursor-hint] {
    display: none !important;
  }

  .ed-mask-line__inner,
  .ed-mask-word,
  .ed-mask-reveal--whole,
  .ed-stagger__item,
  .ed-chapter,
  .ed-parallax-media,
  [data-ed-parallax] {
    opacity: 1 !important;
    clip-path: none !important;
    transform: none !important;
  }
}
