
/* Canonical effect contract */
[data-effect] {
  --tb-effect-delay: 0ms;
  --tb-effect-duration: var(--tb-motion-slow);
}

[data-effect="reveal-fade"],
[data-effect="reveal-up"],
[data-effect="reveal-left"],
[data-effect="reveal-right"] {
  opacity: 0;
  transition:
    opacity var(--tb-effect-duration) var(--tb-ease-standard) var(--tb-effect-delay),
    transform var(--tb-effect-duration) var(--tb-ease-standard) var(--tb-effect-delay);
}

[data-effect="reveal-up"]    { transform: translateY(var(--tb-reveal-distance)); }
[data-effect="reveal-left"]  { transform: translateX(calc(var(--tb-reveal-distance) * -1)); }
[data-effect="reveal-right"] { transform: translateX(var(--tb-reveal-distance)); }

[data-effect].is-visible {
  opacity: 1;
  transform: none;
}

[data-hover="hover-zoom"] { overflow: hidden; }
[data-hover="hover-zoom"] img,
[data-hover="hover-zoom"].tb-media {
  transition: transform var(--tb-motion-slow) var(--tb-ease-standard);
}
[data-hover="hover-zoom"]:hover img,
[data-hover="hover-zoom"].tb-media:hover {
  transform: scale(var(--tb-hover-scale));
}

[data-hover="hover-lift"] {
  transition:
    transform var(--tb-motion-normal) var(--tb-ease-standard),
    box-shadow var(--tb-motion-normal) var(--tb-ease-standard);
}
[data-hover="hover-lift"]:hover {
  transform: translateY(-7px);
  box-shadow: var(--tb-shadow-md);
}

[data-hover="hover-expand"] {
  transition: transform var(--tb-motion-normal) var(--tb-ease-standard);
}
[data-hover="hover-expand"]:hover {
  transform: scale(1.018);
}

[data-parallax="parallax-soft"],
[data-parallax] {
  background-position: 50% var(--tb-parallax-y, 50%);
  background-size: cover;
}

@media (prefers-reduced-motion: reduce) {
  [data-effect],
  [data-hover] {
    transition: none !important;
    transform: none !important;
    opacity: 1 !important;
  }
}
