/**
 * HoverAnimation - Hover animation styles
 *
 * Pure CSS animations triggered on hover.
 * Wrapped in @media (hover: hover) to disable on touch devices.
 *
 * Self-hover classes: .has-hover-animation .has-hover-{type} .has-hover-level-{level}
 * Parent-hover classes: .has-hover-child-animation .has-hover-{type} .has-hover-level-{level}
 * Parent trigger class: .is-hover-trigger
 *
 * Self-hover: element animates when hovered directly.
 * Parent-hover: element animates when a parent .is-hover-trigger is hovered.
 */

@media (hover: hover) {

  /* ── Base transitions (self-hover) ─────────────────────────────── */

  .has-hover-animation:not(.has-hover-fade):not(.has-hover-fade-in):not(.has-hover-fade-in-up):not(.has-hover-fade-in-down):not(.has-hover-fade-in-left):not(.has-hover-fade-in-right):not(.has-hover-fade-out):not(.has-hover-bounce):not(.has-hover-pulse):not(.has-hover-underline):not(.has-hover-text-underline):not(.has-hover-text-underline-slide):not(.has-hover-color-overlay) {
    transition: transform 0.3s ease;
  }

  .has-hover-animation.has-hover-fade,
  .has-hover-animation.has-hover-fade-out {
    transition: opacity 0.3s ease;
  }

  .has-hover-animation.has-hover-level-subtle { transition-duration: 0.2s; }
  .has-hover-animation.has-hover-level-medium { transition-duration: 0.3s; }
  .has-hover-animation.has-hover-level-strong { transition-duration: 0.35s; }
  .has-hover-animation.has-hover-level-extra { transition-duration: 0.4s; }

  /* ── Base transitions (parent-hover) ───────────────────────────── */

  .has-hover-child-animation:not(.has-hover-fade):not(.has-hover-fade-in):not(.has-hover-fade-in-up):not(.has-hover-fade-in-down):not(.has-hover-fade-in-left):not(.has-hover-fade-in-right):not(.has-hover-fade-out):not(.has-hover-bounce):not(.has-hover-pulse):not(.has-hover-underline):not(.has-hover-text-underline):not(.has-hover-text-underline-slide):not(.has-hover-color-overlay) {
    transition: transform 0.3s ease;
  }

  .has-hover-child-animation.has-hover-fade,
  .has-hover-child-animation.has-hover-fade-out {
    transition: opacity 0.3s ease;
  }

  /* Fade In default state: hidden (parent-hover only) */
  .has-hover-child-animation.has-hover-fade-in {
    transition: opacity 0.3s ease;
  }
  .has-hover-child-animation.has-hover-fade-in.has-hover-level-subtle { opacity: 0.15; }
  .has-hover-child-animation.has-hover-fade-in.has-hover-level-medium:not(.wp-block-brandy-add-to-wishlist.added) { opacity: 0; }
  .has-hover-child-animation.has-hover-fade-in.has-hover-level-strong:not(.wp-block-brandy-add-to-wishlist.added) { opacity: 0; }
  .has-hover-child-animation.has-hover-fade-in.has-hover-level-extra:not(.wp-block-brandy-add-to-wishlist.added) { opacity: 0; }

  .has-hover-child-animation.has-hover-level-subtle { transition-duration: 0.2s; }
  .has-hover-child-animation.has-hover-level-medium { transition-duration: 0.3s; }
  .has-hover-child-animation.has-hover-level-strong { transition-duration: 0.4s; }
  .has-hover-child-animation.has-hover-level-extra { transition-duration: 0.5s; }

  /* ── Fly Up ───────────────────────────────────────────────────── */

  .has-hover-fly-up.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-up.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-up.has-hover-level-subtle {
    transform: translateY(-5px);
  }

  .has-hover-fly-up.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-up.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-up.has-hover-level-medium {
    transform: translateY(-15px);
  }

  .has-hover-fly-up.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-up.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-up.has-hover-level-strong {
    transform: translateY(-30px);
  }

  .has-hover-fly-up.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-up.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-up.has-hover-level-extra {
    transform: translateY(-50px);
  }

  /* ── Fly Down ─────────────────────────────────────────────────── */

  .has-hover-fly-down.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-down.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-down.has-hover-level-subtle {
    transform: translateY(5px);
  }

  .has-hover-fly-down.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-down.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-down.has-hover-level-medium {
    transform: translateY(15px);
  }

  .has-hover-fly-down.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-down.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-down.has-hover-level-strong {
    transform: translateY(30px);
  }

  .has-hover-fly-down.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-down.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-down.has-hover-level-extra {
    transform: translateY(50px);
  }

  /* ── Fly Left ─────────────────────────────────────────────────── */

  .has-hover-fly-left.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-left.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-left.has-hover-level-subtle {
    transform: translateX(-5px);
  }

  .has-hover-fly-left.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-left.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-left.has-hover-level-medium {
    transform: translateX(-15px);
  }

  .has-hover-fly-left.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-left.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-left.has-hover-level-strong {
    transform: translateX(-30px);
  }

  .has-hover-fly-left.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-left.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-left.has-hover-level-extra {
    transform: translateX(-50px);
  }

  /* ── Fly Right ────────────────────────────────────────────────── */

  .has-hover-fly-right.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-right.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-right.has-hover-level-subtle {
    transform: translateX(5px);
  }

  .has-hover-fly-right.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-right.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-right.has-hover-level-medium {
    transform: translateX(15px);
  }

  .has-hover-fly-right.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-right.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-right.has-hover-level-strong {
    transform: translateX(30px);
  }

  .has-hover-fly-right.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fly-right.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fly-right.has-hover-level-extra {
    transform: translateX(50px);
  }

  /* ── Zoom In ──────────────────────────────────────────────────── */

  .has-hover-zoom-in.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-in.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-in.has-hover-level-subtle {
    transform: scale(1.02);
  }

  .has-hover-zoom-in.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-in.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-in.has-hover-level-medium {
    transform: scale(1.05);
  }

  .has-hover-zoom-in.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-in.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-in.has-hover-level-strong {
    transform: scale(1.10);
  }

  .has-hover-zoom-in.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-in.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-in.has-hover-level-extra {
    transform: scale(1.20);
  }

  /* ── Zoom Out ─────────────────────────────────────────────────── */

  .has-hover-zoom-out.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-out.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-out.has-hover-level-subtle {
    transform: scale(0.98);
  }

  .has-hover-zoom-out.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-out.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-out.has-hover-level-medium {
    transform: scale(0.95);
  }

  .has-hover-zoom-out.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-out.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-out.has-hover-level-strong {
    transform: scale(0.90);
  }

  .has-hover-zoom-out.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-zoom-out.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-zoom-out.has-hover-level-extra {
    transform: scale(0.80);
  }

  /* ── Fade ──────────────────────────────────────────────────────── */

  .has-hover-fade.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade.has-hover-level-subtle {
    opacity: 0.85;
  }

  .has-hover-fade.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade.has-hover-level-medium {
    opacity: 0.7;
  }

  .has-hover-fade.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade.has-hover-level-strong {
    opacity: 0.5;
  }

  .has-hover-fade.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade.has-hover-level-extra {
    opacity: 0.3;
  }

  /* ── Fade In (parent-hover only: block starts hidden, appears on hover) ── */

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in.has-hover-level-subtle {
    opacity: 0.85;
  }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in.has-hover-level-medium {
    opacity: 1;
  }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in.has-hover-level-strong {
    opacity: 1;
  }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in.has-hover-level-extra {
    opacity: 1;
  }

  /* ── Fade In Up (parent-hover only: block starts hidden + offset, appears on hover) ── */

  .has-hover-child-animation.has-hover-fade-in-up.has-hover-level-subtle { transition: opacity 0.2s ease, transform 0.2s ease; opacity: 0.15; transform: translateY(5px); }
  .has-hover-child-animation.has-hover-fade-in-up.has-hover-level-medium:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.3s ease, transform 0.3s ease; opacity: 0; transform: translateY(15px); }
  .has-hover-child-animation.has-hover-fade-in-up.has-hover-level-strong:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.4s ease, transform 0.4s ease; opacity: 0; transform: translateY(25px); }
  .has-hover-child-animation.has-hover-fade-in-up.has-hover-level-extra:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.5s ease, transform 0.5s ease; opacity: 0; transform: translateY(40px); }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in-up[class*="has-hover-level-"],
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in-up[class*="has-hover-level-"] {
    opacity: 1;
    transform: translateY(0);
  }

  /* ── Fade In Down (parent-hover only) ── */

  .has-hover-child-animation.has-hover-fade-in-down.has-hover-level-subtle { transition: opacity 0.2s ease, transform 0.2s ease; opacity: 0.15; transform: translateY(-5px); }
  .has-hover-child-animation.has-hover-fade-in-down.has-hover-level-medium:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.3s ease, transform 0.3s ease; opacity: 0; transform: translateY(-15px); }
  .has-hover-child-animation.has-hover-fade-in-down.has-hover-level-strong:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.4s ease, transform 0.4s ease; opacity: 0; transform: translateY(-25px); }
  .has-hover-child-animation.has-hover-fade-in-down.has-hover-level-extra:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.5s ease, transform 0.5s ease; opacity: 0; transform: translateY(-40px); }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in-down[class*="has-hover-level-"],
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in-down[class*="has-hover-level-"] {
    opacity: 1;
    transform: translateY(0);
  }

  /* ── Fade In Left (parent-hover only) ── */

  .has-hover-child-animation.has-hover-fade-in-left.has-hover-level-subtle { transition: opacity 0.2s ease, transform 0.2s ease; opacity: 0.15; transform: translateX(5px); }
  .has-hover-child-animation.has-hover-fade-in-left.has-hover-level-medium:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.3s ease, transform 0.3s ease; opacity: 0; transform: translateX(15px); }
  .has-hover-child-animation.has-hover-fade-in-left.has-hover-level-strong:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.4s ease, transform 0.4s ease; opacity: 0; transform: translateX(25px); }
  .has-hover-child-animation.has-hover-fade-in-left.has-hover-level-extra:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.5s ease, transform 0.5s ease; opacity: 0; transform: translateX(40px); }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in-left[class*="has-hover-level-"],
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in-left[class*="has-hover-level-"] {
    opacity: 1;
    transform: translateX(0);
  }

  /* ── Fade In Right (parent-hover only) ── */

  .has-hover-child-animation.has-hover-fade-in-right.has-hover-level-subtle { transition: opacity 0.2s ease, transform 0.2s ease; opacity: 0.15; transform: translateX(-5px); }
  .has-hover-child-animation.has-hover-fade-in-right.has-hover-level-medium:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.3s ease, transform 0.3s ease; opacity: 0; transform: translateX(-15px); }
  .has-hover-child-animation.has-hover-fade-in-right.has-hover-level-strong:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.4s ease, transform 0.4s ease; opacity: 0; transform: translateX(-25px); }
  .has-hover-child-animation.has-hover-fade-in-right.has-hover-level-extra:not(.wp-block-brandy-add-to-wishlist.added) { transition: opacity 0.5s ease, transform 0.5s ease; opacity: 0; transform: translateX(-40px); }

  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-in-right[class*="has-hover-level-"],
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-in-right[class*="has-hover-level-"] {
    opacity: 1;
    transform: translateX(0);
  }

  /* ── Fade Out ────────────────────────────────────────────────── */

  .has-hover-fade-out.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-out.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-out.has-hover-level-subtle {
    opacity: 0.85;
  }

  .has-hover-fade-out.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-out.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-out.has-hover-level-medium {
    opacity: 0.7;
  }

  .has-hover-fade-out.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-out.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-out.has-hover-level-strong {
    opacity: 0.5;
  }

  .has-hover-fade-out.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-fade-out.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-fade-out.has-hover-level-extra {
    opacity: 0.3;
  }

  /* ── Rotate CW ────────────────────────────────────────────────── */

  .has-hover-rotate-cw.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-subtle {
    transform: rotate(2deg);
  }

  .has-hover-rotate-cw.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-medium {
    transform: rotate(5deg);
  }

  .has-hover-rotate-cw.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-strong {
    transform: rotate(10deg);
  }

  .has-hover-rotate-cw.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-cw.has-hover-level-extra {
    transform: rotate(15deg);
  }

  /* ── Rotate CCW ───────────────────────────────────────────────── */

  .has-hover-rotate-ccw.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-subtle {
    transform: rotate(-2deg);
  }

  .has-hover-rotate-ccw.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-medium {
    transform: rotate(-5deg);
  }

  .has-hover-rotate-ccw.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-strong {
    transform: rotate(-10deg);
  }

  .has-hover-rotate-ccw.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-rotate-ccw.has-hover-level-extra {
    transform: rotate(-15deg);
  }

  /* ── Skew ──────────────────────────────────────────────────────── */

  .has-hover-skew.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-skew.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-skew.has-hover-level-subtle {
    transform: skew(1deg);
  }

  .has-hover-skew.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-skew.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-skew.has-hover-level-medium {
    transform: skew(3deg);
  }

  .has-hover-skew.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-skew.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-skew.has-hover-level-strong {
    transform: skew(5deg);
  }

  .has-hover-skew.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-skew.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-skew.has-hover-level-extra {
    transform: skew(8deg);
  }

  /* ── Bounce (keyframe) ────────────────────────────────────────── */

  .has-hover-bounce:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-bounce,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-bounce {
    animation-name: brandyHoverBounce;
    animation-timing-function: cubic-bezier(0.28, 0.84, 0.42, 1);
    animation-fill-mode: both;
  }

  .has-hover-bounce.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-bounce.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-bounce.has-hover-level-subtle {
    animation-duration: 0.6s;
    --brandy-bounce-y: -5px;
  }

  .has-hover-bounce.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-bounce.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-bounce.has-hover-level-medium {
    animation-duration: 0.7s;
    --brandy-bounce-y: -12px;
  }

  .has-hover-bounce.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-bounce.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-bounce.has-hover-level-strong {
    animation-duration: 0.8s;
    --brandy-bounce-y: -20px;
  }

  .has-hover-bounce.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-bounce.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-bounce.has-hover-level-extra {
    animation-duration: 0.9s;
    --brandy-bounce-y: -35px;
  }

  @keyframes brandyHoverBounce {
    0% {
      transform: translateY(0);
    }
    20% {
      transform: translateY(var(--brandy-bounce-y, -12px));
    }
    40% {
      transform: translateY(calc(var(--brandy-bounce-y, -12px) * -0.15));
    }
    50% {
      transform: translateY(calc(var(--brandy-bounce-y, -12px) * 0.6));
    }
    65% {
      transform: translateY(calc(var(--brandy-bounce-y, -12px) * -0.08));
    }
    75% {
      transform: translateY(calc(var(--brandy-bounce-y, -12px) * 0.25));
    }
    88% {
      transform: translateY(calc(var(--brandy-bounce-y, -12px) * -0.03));
    }
    100% {
      transform: translateY(0);
    }
  }

  /* ── Pulse (keyframe) ─────────────────────────────────────────── */

  .has-hover-pulse:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-pulse,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-pulse {
    animation-name: brandyHoverPulse;
    animation-timing-function: ease-in-out;
    animation-iteration-count: infinite;
  }

  .has-hover-pulse.has-hover-level-subtle:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-pulse.has-hover-level-subtle,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-pulse.has-hover-level-subtle {
    animation-duration: 1s;
    --brandy-pulse-scale: 1.02;
  }

  .has-hover-pulse.has-hover-level-medium:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-pulse.has-hover-level-medium,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-pulse.has-hover-level-medium {
    animation-duration: 0.8s;
    --brandy-pulse-scale: 1.05;
  }

  .has-hover-pulse.has-hover-level-strong:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-pulse.has-hover-level-strong,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-pulse.has-hover-level-strong {
    animation-duration: 0.7s;
    --brandy-pulse-scale: 1.08;
  }

  .has-hover-pulse.has-hover-level-extra:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-pulse.has-hover-level-extra,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-pulse.has-hover-level-extra {
    animation-duration: 0.6s;
    --brandy-pulse-scale: 1.12;
  }

  @keyframes brandyHoverPulse {
    0%, 100% {
      transform: scale(1);
    }
    50% {
      transform: scale(var(--brandy-pulse-scale, 1.05));
    }
  }

  /* ── Underline ───────────────────────────────────────────────────── */

  .has-hover-underline,
  .has-hover-child-animation.has-hover-underline {
    position: relative;
  }

  .has-hover-underline::after,
  .has-hover-child-animation.has-hover-underline::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: var(--brandy-underline-height, 2px);
    background: var(--brandy-underline-color, currentColor);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.3s ease;
  }

  .has-hover-underline.has-hover-level-subtle { --brandy-underline-height: 1px; }
  .has-hover-underline.has-hover-level-medium { --brandy-underline-height: 2px; }
  .has-hover-underline.has-hover-level-strong { --brandy-underline-height: 3px; }
  .has-hover-underline.has-hover-level-extra { --brandy-underline-height: 4px; }

  .has-hover-child-animation.has-hover-underline.has-hover-level-subtle { --brandy-underline-height: 1px; }
  .has-hover-child-animation.has-hover-underline.has-hover-level-medium { --brandy-underline-height: 2px; }
  .has-hover-child-animation.has-hover-underline.has-hover-level-strong { --brandy-underline-height: 3px; }
  .has-hover-child-animation.has-hover-underline.has-hover-level-extra { --brandy-underline-height: 4px; }

  .has-hover-underline:hover::after,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-underline::after,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-underline::after {
    transform: scaleX(1);
  }

  /* ── Text Underline (per-line, follows wrapped text) ─────────── */

  .has-hover-text-underline,
  .has-hover-child-animation.has-hover-text-underline {
    text-decoration: underline transparent;
    text-underline-offset: var(--brandy-text-underline-offset, 3px);
    text-decoration-thickness: var(--brandy-text-underline-thickness, 2px);
    text-decoration-color: transparent;
    transition: text-decoration-color 0.3s ease;
  }

  .has-hover-text-underline.has-hover-level-subtle { --brandy-text-underline-thickness: 1px; --brandy-text-underline-offset: 2px; }
  .has-hover-text-underline.has-hover-level-medium { --brandy-text-underline-thickness: 2px; --brandy-text-underline-offset: 3px; }
  .has-hover-text-underline.has-hover-level-strong { --brandy-text-underline-thickness: 3px; --brandy-text-underline-offset: 4px; }
  .has-hover-text-underline.has-hover-level-extra { --brandy-text-underline-thickness: 4px; --brandy-text-underline-offset: 5px; }

  .has-hover-child-animation.has-hover-text-underline.has-hover-level-subtle { --brandy-text-underline-thickness: 1px; --brandy-text-underline-offset: 2px; }
  .has-hover-child-animation.has-hover-text-underline.has-hover-level-medium { --brandy-text-underline-thickness: 2px; --brandy-text-underline-offset: 3px; }
  .has-hover-child-animation.has-hover-text-underline.has-hover-level-strong { --brandy-text-underline-thickness: 3px; --brandy-text-underline-offset: 4px; }
  .has-hover-child-animation.has-hover-text-underline.has-hover-level-extra { --brandy-text-underline-thickness: 4px; --brandy-text-underline-offset: 5px; }

  .has-hover-text-underline:hover,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-text-underline,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-text-underline {
    text-decoration-color: var(--brandy-underline-color, currentColor);
  }

  /* ── Text Underline Slide (per-line, slides left→right via inline span) ─ */

  .brandy-text-slide-inner {
    display: inline;
    background-image: linear-gradient(var(--brandy-underline-color, currentColor), var(--brandy-underline-color, currentColor));
    background-position: 0% 100%;
    background-repeat: no-repeat;
    background-size: 0% var(--brandy-text-slide-height, 2px);
    transition: background-size 0.4s ease;
    padding-bottom: var(--brandy-text-slide-offset, 2px);
  }

  .has-hover-level-subtle > .brandy-text-slide-inner { --brandy-text-slide-height: 1px; --brandy-text-slide-offset: 1px; }
  .has-hover-level-medium > .brandy-text-slide-inner { --brandy-text-slide-height: 2px; --brandy-text-slide-offset: 2px; }
  .has-hover-level-strong > .brandy-text-slide-inner { --brandy-text-slide-height: 3px; --brandy-text-slide-offset: 3px; }
  .has-hover-level-extra > .brandy-text-slide-inner { --brandy-text-slide-height: 4px; --brandy-text-slide-offset: 4px; }

  /* Self-hover trigger */
  .has-hover-text-underline-slide:hover > .brandy-text-slide-inner {
    background-size: 100% var(--brandy-text-slide-height, 2px);
  }

  /* Parent-hover trigger */
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-text-underline-slide > .brandy-text-slide-inner,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-text-underline-slide > .brandy-text-slide-inner {
    background-size: 100% var(--brandy-text-slide-height, 2px);
  }

  /* ── Color Overlay (opacity controlled by color alpha, no intensity levels) ── */

  .has-hover-color-overlay,
  .has-hover-child-animation.has-hover-color-overlay {
    position: relative;
    overflow: hidden;
  }

  .has-hover-color-overlay > img,
  .has-hover-child-animation.has-hover-color-overlay > img {
    border-radius: inherit;
  }

  .has-hover-color-overlay::before,
  .has-hover-child-animation.has-hover-color-overlay::before {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--brandy-overlay-color, rgba(0,0,0,0.5));
    border-radius: inherit;
    opacity: 0;
    transition: opacity 0.3s ease;
    pointer-events: none;
    z-index: 1;
  }

  .has-hover-color-overlay:hover::before,
  .is-hover-trigger:hover > .has-hover-child-animation.has-hover-color-overlay::before,
  .is-hover-trigger:hover .has-hover-child-animation.has-hover-color-overlay::before {
    opacity: 1;
  }

}

/* ── Editor fallback: text-underline-slide preview via text-decoration ── */

.block-editor-block-list__block.has-hover-text-underline-slide {
  text-decoration: underline transparent;
  text-decoration-thickness: var(--brandy-text-slide-height, 2px);
  text-underline-offset: var(--brandy-text-slide-offset, 2px);
  transition: text-decoration-color 0.3s ease;
}

.block-editor-block-list__block.has-hover-text-underline-slide.has-hover-level-subtle { --brandy-text-slide-height: 1px; --brandy-text-slide-offset: 2px; }
.block-editor-block-list__block.has-hover-text-underline-slide.has-hover-level-medium { --brandy-text-slide-height: 2px; --brandy-text-slide-offset: 3px; }
.block-editor-block-list__block.has-hover-text-underline-slide.has-hover-level-strong { --brandy-text-slide-height: 3px; --brandy-text-slide-offset: 4px; }
.block-editor-block-list__block.has-hover-text-underline-slide.has-hover-level-extra { --brandy-text-slide-height: 4px; --brandy-text-slide-offset: 5px; }

.block-editor-block-list__block.has-hover-text-underline-slide:hover {
  text-decoration-color: var(--brandy-underline-color, currentColor);
}

/* ── Editor: disable fade animation CSS so content stays visible ── */

.block-editor-block-list__block.brandy-editor-fade-override {
  opacity: 1 !important;
  transform: none !important;
}
