/* Four shuffled pointer styles; all particles keep bounded shared cleanup. */
.bubble-v12-stage-relative{position:relative}
.bubble-v12-layer{position:absolute;inset:0;z-index:6;display:block;overflow:visible;pointer-events:none!important;user-select:none;contain:layout style}
.bubble-v12-layer *{pointer-events:none!important;user-select:none}
.bubble-v12-particle{position:absolute;display:block;width:var(--bubble-size,24px);height:var(--bubble-size,24px);margin:calc(var(--bubble-size,24px) * -.5);border:1px solid #fff9;border-radius:50%;background:radial-gradient(circle at 27% 25%,#fffc 0%,#fff3 16%,transparent 34%),radial-gradient(circle at 70% 78%,var(--bubble-tone,#bd759e) 0%,transparent 63%);box-shadow:inset -2px -2px 5px #fff5,inset 2px 2px 5px #fff4,0 3px 10px #7641521a;opacity:0;animation:bubble-v12-scatter var(--bubble-duration,1200ms) cubic-bezier(.18,.65,.3,1) var(--bubble-delay,0ms) both;will-change:transform,opacity}
.bubble-v12-particle::after{content:'';position:absolute;inset:11% 14% 60% 22%;border-top:1px solid #fffc;border-radius:50%;transform:rotate(-28deg)}
.bubble-v12-glow{position:absolute;display:block;width:var(--bubble-size,150px);height:var(--bubble-size,150px);margin:calc(var(--bubble-size,150px) * -.5);border-radius:50%;background:radial-gradient(circle,#fff9 0%,#fff3 29%,transparent 69%);opacity:0;animation:bubble-v12-soft-glow var(--bubble-duration,1200ms) ease-out both;will-change:transform,opacity}
@keyframes bubble-v12-scatter{0%{opacity:0;transform:translate3d(0,0,0) scale(.4)}18%{opacity:.92;transform:translate3d(calc(var(--bubble-dx,70px) * .13),calc(var(--bubble-dy,-90px) * .13),0) scale(.95)}62%{opacity:.6}100%{opacity:0;transform:translate3d(var(--bubble-dx,70px),var(--bubble-dy,-90px),0) scale(1.16)}}
@keyframes bubble-v12-soft-glow{0%{opacity:0;transform:scale(.55)}30%{opacity:.44}100%{opacity:0;transform:scale(1.22)}}
/* The banner is the interaction surface, so hovering copy or a CTA feels alive.
   The layer never intercepts controls and its particles remain translucent. */
#heroLuxury>.bubble-v33-hero-layer{position:absolute;inset:0;display:block;z-index:5;overflow:hidden;border-radius:inherit;pointer-events:none!important;user-select:none}
#heroLuxury>.bubble-v33-hero-layer .bubble-v12-particle.bubble-v46-bubble{border-color:#fff9;background:radial-gradient(circle at 27% 25%,#fff 0%,#fff8 8%,#fff1 29%,transparent 43%),radial-gradient(circle at 74% 76%,var(--bubble-tone,#b49ce0) 0%,transparent 68%);box-shadow:inset -3px -3px 8px #fff5,inset 2px 2px 6px #fff8,0 6px 18px #34244712}
.bubble-v12-particle.bubble-v46-sparkle{border:0;border-radius:0;background:linear-gradient(135deg,#fff 18%,var(--bubble-tone,#bd759e) 75%);clip-path:polygon(50% 0%,60% 37%,100% 50%,60% 60%,50% 100%,40% 60%,0% 50%,40% 37%);box-shadow:none}
.bubble-v12-particle.bubble-v46-glowing-dot{border:0;border-radius:50%;background:radial-gradient(circle,#fff 0%,#fff 15%,var(--bubble-tone,#bd759e) 48%,transparent 74%);box-shadow:0 0 9px 3px var(--bubble-tone,#bd759e);clip-path:none}
.bubble-v12-particle.bubble-v46-starburst{border:0;border-radius:0;background:linear-gradient(35deg,var(--bubble-tone,#bd759e),#fff 60%,var(--bubble-tone,#bd759e));clip-path:polygon(50% 0%,59% 31%,85% 15%,69% 41%,100% 50%,69% 59%,85% 85%,59% 69%,50% 100%,41% 69%,15% 85%,31% 59%,0% 50%,31% 41%,15% 15%,41% 31%);box-shadow:none}
.bubble-v12-particle.bubble-v46-sparkle::after,.bubble-v12-particle.bubble-v46-glowing-dot::after,.bubble-v12-particle.bubble-v46-starburst::after{display:none;content:none}
#heroLuxury>.bubble-v33-hero-layer .bubble-v33-ambient{animation-name:bubble-v33-drift}
@keyframes bubble-v33-drift{0%{opacity:0;transform:translate3d(0,12px,0) scale(.76)}22%{opacity:.62}68%{opacity:.4}100%{opacity:0;transform:translate3d(calc(var(--bubble-dx,30px)*.35),var(--bubble-dy,-70px),0) scale(1.06)}}
@media(prefers-reduced-motion:reduce){.bubble-v12-layer{display:none!important}.bubble-v12-particle,.bubble-v12-glow{animation:none!important;transition:none!important}}
