/* P42 Effects — styles that support the toggleable JS effects */

/* Mesh gradient hero canvas */
.p42fx-mesh-canvas {
  position: absolute; inset: 0; width: 100%; height: 100%;
  z-index: 0; pointer-events: none;
}
.p42-hero > .p42-container, .p42-hero-inner { position: relative; z-index: 2; }

/* Ambient blobs layer */
.p42fx-blobs {
  position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden;
}
.p42fx-blob {
  position: absolute; border-radius: 50%;
  filter: blur(90px); opacity: .35;
  will-change: transform;
}

/* Grain overlay */
.p42fx-grain {
  position: fixed; inset: -60px; z-index: 998; pointer-events: none;
  opacity: .05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation: p42fx-grain-shift 1.2s steps(4) infinite;
}
@keyframes p42fx-grain-shift {
  0% { transform: translate(0, 0); }
  25% { transform: translate(-24px, 14px); }
  50% { transform: translate(16px, -20px); }
  75% { transform: translate(-10px, -12px); }
  100% { transform: translate(0, 0); }
}

/* Scroll reveals */
.p42fx-reveal {
  opacity: 0; transform: translateY(34px);
  transition: opacity .9s cubic-bezier(.22,1,.36,1), transform .9s cubic-bezier(.22,1,.36,1);
  transition-delay: var(--p42fx-delay, 0ms);
}
.p42fx-reveal.p42fx-in { opacity: 1; transform: none; }

/* Kinetic headlines */
.p42fx-kinetic .p42fx-word {
  display: inline-block; overflow: hidden; vertical-align: top;
}
.p42fx-kinetic .p42fx-word > span {
  display: inline-block; transform: translateY(110%);
  transition: transform .85s cubic-bezier(.22,1,.36,1);
  transition-delay: var(--p42fx-delay, 0ms);
}
.p42fx-kinetic.p42fx-in .p42fx-word > span { transform: translateY(0); }

/* Morphing cursor */
.p42fx-cursor {
  position: fixed; top: 0; left: 0; z-index: 9999;
  width: 14px; height: 14px; border-radius: 50%;
  background: #0a0a0c;
  mix-blend-mode: difference;
  pointer-events: none;
  transform: translate(-50%, -50%);
  transition: width .3s, height .3s, opacity .3s;
  opacity: 0;
}
.p42fx-cursor.p42fx-cursor-active { opacity: 1; }
.p42fx-cursor.p42fx-cursor-grow { width: 56px; height: 56px; background: #fff; }
@media (hover: none), (pointer: coarse) { .p42fx-cursor { display: none; } }

/* Tilt cards */
.p42fx-tilt { transform-style: preserve-3d; }
.p42fx-tilt .p42fx-glare {
  position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: radial-gradient(420px circle at var(--p42fx-gx, 50%) var(--p42fx-gy, 50%), rgba(255,255,255,.55), transparent 45%);
  opacity: 0; transition: opacity .35s; z-index: 3; mix-blend-mode: soft-light;
}
.p42fx-tilt:hover .p42fx-glare { opacity: 1; }

/* Marquee */
.p42fx-marquee-anim .p42-marquee-track {
  animation: p42fx-marquee var(--p42fx-mq-speed, 28s) linear infinite;
}
.p42fx-marquee-anim:hover .p42-marquee-track { animation-play-state: paused; }
@keyframes p42fx-marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* Marker underline draw-on */
.p42-underline-draw { background-size: 0% 38%; transition: background-size 1.1s cubic-bezier(.22,1,.36,1) .2s; }
.p42-underline-draw.p42fx-in { background-size: 100% 38%; }

/* Reduced motion: kill everything */
@media (prefers-reduced-motion: reduce) {
  .p42fx-grain { animation: none; }
  .p42fx-reveal, .p42fx-kinetic .p42fx-word > span { opacity: 1 !important; transform: none !important; transition: none !important; }
  .p42fx-marquee-anim .p42-marquee-track { animation: none; }
  .p42-underline-draw { background-size: 100% 38%; transition: none; }
  .p42fx-cursor, .p42fx-blobs, .p42fx-mesh-canvas { display: none !important; }
}
