/* Keep the opaque customer surfaces solid during legacy arrival-opacity pulses. */
.ecosystem .flow-stage-2 .flow-art{opacity:1!important}
.ecosystem .hpp-surface{position:absolute;bottom:0;left:50%;width:220px;height:220px;transform:translateX(-50%);z-index:1;pointer-events:none}
.ecosystem .hub-population{position:absolute;bottom:0;left:50%;width:220px;height:220px;transform:translateX(-50%);z-index:4;overflow:hidden;pointer-events:none;opacity:0;isolation:isolate}
.hub-population[data-ready="true"]{opacity:1}
.hpp-drop,.hpp-shadow,.hpp-landing,.hpp-notice,.hpp-charge,.hpp-main-heart{opacity:0}
.hpp-drop{transform-origin:0 0;transform-box:view-box}
.hub-population[data-population="running"] .hpp-drop{animation:hpp-drop 420ms linear var(--arrival-delay) both}
.hub-population[data-population="running"] .hpp-shadow{animation:hpp-shadow 420ms ease-out var(--arrival-delay) both}
.hub-population[data-population="running"] .hpp-landing{animation:hpp-land 350ms ease-out var(--arrival-delay) both;transform-box:fill-box;transform-origin:center}
.hub-population[data-population="running"] .hpp-charge{animation:hpp-charge 700ms ease-out both;stroke-dasharray:.2 .8}
.hub-population[data-population="running"] .hpp-notice{animation:hpp-notice 180ms ease-out var(--notice-delay) both}
.hpp-notice-scale{transform-box:fill-box;transform-origin:center}
.hub-population[data-population="running"] .hpp-notice-scale{animation:hpp-notice-scale 180ms cubic-bezier(.2,.75,.25,1) var(--notice-delay) both}
.hub-population[data-population="running"] .hpp-finish{animation:hpp-finish 2250ms linear both}
.hub-population[data-population="complete"] .hpp-drop,.hub-population[data-population="complete"] .hpp-shadow,.hub-population[data-population="complete"] .hpp-notice{animation:none;opacity:1}
.hub-population[data-population="complete"] .hpp-charge{opacity:.2;stroke-dasharray:none}
.hub-population[data-population="complete"] .hpp-main-heart{animation:hpp-heart 4s ease-in-out infinite}
.hub-population.hpp-paused *{animation-play-state:paused!important}
@keyframes hpp-drop{0%{opacity:.05;transform:translateY(-360px);animation-timing-function:cubic-bezier(.65,0,.95,.45)}75%{opacity:1;transform:translateY(0) scaleY(.94);animation-timing-function:ease-out}88%{opacity:1;transform:translateY(-2px) scaleY(1.008)}100%{opacity:1;transform:translateY(0) scaleY(1)}}
@keyframes hpp-shadow{0%,45%{opacity:0}100%{opacity:1}}
@keyframes hpp-land{0%{opacity:0;transform:scale(.5)}20%{opacity:.75}100%{opacity:0;transform:scale(1.3)}}
@keyframes hpp-charge{0%{opacity:0;stroke-dashoffset:1}35%{opacity:.65}100%{opacity:.2;stroke-dashoffset:0}}
@keyframes hpp-notice{from{opacity:0}to{opacity:1}}
@keyframes hpp-notice-scale{from{transform:scale(.65)}to{transform:scale(1)}}
@keyframes hpp-finish{from{opacity:0}to{opacity:0}}
@keyframes hpp-heart{0%,100%{opacity:.08}50%{opacity:.28}}
@media(prefers-reduced-motion:reduce){.hub-population *{animation:none!important}.hub-population .hpp-drop,.hub-population .hpp-shadow,.hub-population .hpp-notice{opacity:1}.hub-population .hpp-main-heart,.hub-population .hpp-charge{opacity:.2}}

.hpp-main-heart{mix-blend-mode:screen}

/* Mandatory approved footer credit; canonical logo stays stationary. */
footer .greenworx-credit{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:260px;max-width:100%;min-height:68px;margin:28px auto 0;padding:12px 0;box-sizing:border-box;color:#e8eeeb;text-decoration:none;border:0;outline:0;background:transparent;box-shadow:none}
footer .greenworx-credit__label{font:600 10px/1.5 system-ui,sans-serif;letter-spacing:.15em;text-align:center;color:#e8eeeb}
footer .greenworx-credit__logo{display:block;width:100%;height:auto;filter:none;mix-blend-mode:normal}
footer .greenworx-credit:focus-visible{outline:0;text-decoration:underline;text-decoration-color:currentColor;text-underline-offset:4px}
