/* GWC motion layer (p5). transform/opacity only -> no layout shift. Reduced motion: movement off, gentle fades kept. */
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.28s}
.hero{position:relative;isolation:isolate;overflow:hidden}
.hero::before{content:"";position:absolute;inset:-30%;z-index:-1;pointer-events:none;
 background:radial-gradient(35% 40% at 20% 30%,rgba(28,95,168,.16),transparent 70%),radial-gradient(30% 35% at 80% 20%,rgba(196,164,106,.20),transparent 70%),radial-gradient(40% 40% at 60% 85%,rgba(18,69,118,.12),transparent 70%);
 animation:gwc-drift 18s ease-in-out infinite alternate;will-change:transform}
@keyframes gwc-drift{0%{transform:translate3d(-3%,-2%,0) rotate(0)}50%{transform:translate3d(3%,2%,0) rotate(6deg)}100%{transform:translate3d(-1%,3%,0) rotate(-4deg)}}
.hero-copy > *{animation:gwc-in .7s cubic-bezier(.2,.7,.2,1) both}
.hero-copy > :nth-child(2){animation-delay:.06s}.hero-copy > :nth-child(3){animation-delay:.12s}.hero-copy > :nth-child(4){animation-delay:.2s}.hero-copy > :nth-child(5){animation-delay:.28s}
@keyframes gwc-in{from{opacity:0;transform:translate3d(0,18px,0)}to{opacity:1;transform:none}}
/* hover lifts on real links/cards */
.service-grid article,.grant-card,.post-grid li,.price-card,.feature-row .card-link,.btn{transition:transform .2s ease,box-shadow .2s ease,background-color .2s ease}
.service-grid article:hover,.grant-card:hover,.post-grid li:hover{transform:translateY(-4px);box-shadow:0 12px 28px rgba(12,39,68,.14)}
.btn:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(12,39,68,.18)}
.btn{position:relative;overflow:hidden}
.btn::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.35) 50%,transparent 70%);transform:translateX(-120%);pointer-events:none}
.btn:hover::after{transform:translateX(120%);transition:transform .7s ease}
/* scroll reveal with stagger (motion.js adds .m-in) */
.js .m-reveal{opacity:0;transform:translate3d(0,26px,0);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}
.js .m-reveal.m-in{opacity:1;transform:none}
/* timeline for step lists */
ol.steps{position:relative}
ol.steps::before{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background:linear-gradient(#c4a46a,#124576);transform-origin:top;transform:scaleY(var(--tl,0));transition:transform .2s linear;border-radius:3px}
ol.steps > li{position:relative;padding-left:1.4rem}
ol.steps > li::before{content:"";position:absolute;left:-5px;top:.45rem;width:13px;height:13px;border-radius:50%;background:#fff;border:3px solid #124576;transform:scale(.4);opacity:.4;transition:transform .4s ease,opacity .4s ease}
ol.steps > li.m-in::before{transform:scale(1);opacity:1}
/* duo characters */
.gwc-duo{position:relative;display:flex;align-items:flex-end;justify-content:center;gap:4%;width:100%;aspect-ratio:460/360}
.gwc-duo svg{width:46%;height:auto;overflow:visible}
.gwc-duo .bubble{position:absolute;top:4%;left:50%;transform:translateX(-50%);background:#fff;color:#0c2744;border-radius:14px;padding:.45rem .8rem;font-size:.85rem;font-weight:600;box-shadow:0 6px 18px rgba(12,39,68,.15);white-space:nowrap;animation:gwc-bubble 7s ease-in-out infinite}
@keyframes gwc-bubble{0%,8%{opacity:0;transform:translate(-50%,6px)}14%,44%{opacity:1;transform:translate(-50%,0)}50%,100%{opacity:0;transform:translate(-50%,-4px)}}
.ch .breathe{transform-box:fill-box;transform-origin:50% 100%;animation:ch-breathe 4.2s ease-in-out infinite}
.ch .eyes{transform-box:fill-box;transform-origin:50% 50%;animation:ch-blink 5s infinite}
.ch.h .eyes{animation-delay:1.7s}
.ch .arm-wave{transform-box:fill-box;transform-origin:15% 90%;animation:ch-wave 7s ease-in-out infinite}
.ch .mouth{transform-box:fill-box;transform-origin:50% 0;animation:ch-talk 7s infinite}
.ch.h .mouth{animation-delay:3.5s}
.ch .glow{animation:ch-glow 2.4s ease-in-out infinite}
@keyframes ch-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.015,1.03)}}
@keyframes ch-blink{0%,46%,50%,100%{transform:scaleY(1)}48%{transform:scaleY(.1)}}
@keyframes ch-wave{0%,4%,30%,100%{transform:rotate(0)}8%,16%,24%{transform:rotate(-22deg)}12%,20%{transform:rotate(8deg)}}
@keyframes ch-talk{0%,14%,44%,100%{transform:scaleY(1)}17%,23%,29%,35%,41%{transform:scaleY(1.9)}20%,26%,32%,38%{transform:scaleY(.8)}}
@keyframes ch-glow{0%,100%{opacity:.35}50%{opacity:.9}}
.counter-pop{animation:gwc-pop2 .5s ease}
@keyframes gwc-pop2{50%{transform:scale(1.08)}}
@media (prefers-reduced-motion:reduce){
 .hero::before,.ch *,.gwc-duo .bubble{animation:none!important}
 .gwc-duo .bubble{opacity:1}
 .hero-copy > *{animation:gwc-fade .5s ease both!important}
 @keyframes gwc-fade{from{opacity:0}to{opacity:1}}
 .js .m-reveal{transform:none;transition:opacity .5s ease}
 .btn:hover,.service-grid article:hover,.grant-card:hover,.post-grid li:hover{transform:none}
}
/* calmer reveals (p6) */
.js .m-reveal{transform:translate3d(0,8px,0)!important;transition:opacity .45s ease,transform .45s ease!important;transition-delay:0s!important}
.js .m-reveal.m-in{transform:none!important}
.js .m-reveal{transition:opacity .25s ease,transform .25s ease!important}
@media (prefers-reduced-motion:reduce){.js .m-reveal{opacity:1!important;transform:none!important;transition:none!important}}
/* ===== p8: richer, still calm motion. transform/opacity only (no CLS). ===== */
/* hero funding journey: line draws, nodes light up in sequence, a travelling pulse */
.journey-svg .journey-line{stroke-dasharray:364;stroke-dashoffset:364;animation:gwc-draw 1.6s .2s cubic-bezier(.4,0,.2,1) forwards}
.journey-svg .journey-node{opacity:0;animation:gwc-node .5s ease forwards}
.journey-svg .journey-node:nth-of-type(1){animation-delay:.3s}.journey-svg .journey-node:nth-of-type(2){animation-delay:.6s}.journey-svg .journey-node:nth-of-type(3){animation-delay:.9s}.journey-svg .journey-node:nth-of-type(4){animation-delay:1.2s}.journey-svg .journey-node:nth-of-type(5){animation-delay:1.5s}
.journey-svg .journey-node circle{transform-box:fill-box;transform-origin:center;animation:gwc-ping 3.2s ease-in-out infinite}
.journey-svg .journey-node:nth-of-type(2) circle{animation-delay:.64s}.journey-svg .journey-node:nth-of-type(3) circle{animation-delay:1.28s}.journey-svg .journey-node:nth-of-type(4) circle{animation-delay:1.92s}.journey-svg .journey-node:nth-of-type(5) circle{animation-delay:2.56s}
@keyframes gwc-draw{to{stroke-dashoffset:0}}
@keyframes gwc-node{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
@keyframes gwc-ping{0%,70%,100%{transform:scale(1)}80%{transform:scale(1.45)}}
/* moving accent shapes behind bands and the hero (pointer-events none, absolutely positioned => no layout impact) */
.band,.hero{position:relative;isolation:isolate}
.band::after,.hero::after{content:"";position:absolute;z-index:-1;pointer-events:none;width:280px;height:280px;border-radius:50%;
 background:radial-gradient(circle at 30% 30%,rgba(196,164,106,.18),transparent 65%);right:-90px;top:-90px;animation:gwc-float 22s ease-in-out infinite alternate;will-change:transform}
.band:nth-of-type(even)::after{left:-110px;right:auto;top:auto;bottom:-120px;background:radial-gradient(circle at 60% 60%,rgba(28,95,168,.14),transparent 65%);animation-duration:26s}
.band{overflow:hidden}
@keyframes gwc-float{0%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(-30px,24px,0) scale(1.08)}100%{transform:translate3d(18px,-16px,0) scale(.96)}}
/* hover lifts on more card types */
.price-card,.why-grid > *,.feature-row > *,.card-photo{transition:transform .22s ease,box-shadow .22s ease}
.price-card:hover,.why-grid > *:hover,.feature-row > *:hover{transform:translateY(-4px);box-shadow:0 14px 30px rgba(12,39,68,.14)}
.card-photo{overflow:hidden}.card-photo img{transition:transform .5s ease}
.grant-card:hover .card-photo img,.post-grid li:hover .card-photo img{transform:scale(1.04)}
.service-icon{transition:transform .3s cubic-bezier(.3,1.6,.5,1)}
.service-grid article:hover .service-icon,.grant-card:hover .service-icon{transform:translateY(-3px) rotate(-6deg) scale(1.08)}
/* animated underline on nav links */
.nav a:not(.btn){background-image:linear-gradient(currentColor,currentColor);background-size:0 2px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .25s ease}
.nav a:not(.btn):hover,.nav a:not(.btn):focus-visible{background-size:100% 2px}
/* stats: gentle pop when the count finishes */
.stat-num [data-count].done{display:inline-block;animation:gwc-pop2 .45s ease}
.proof-stats li{transition:transform .25s ease}.proof-stats li:hover{transform:translateY(-3px)}
/* section eyebrow shimmer once on reveal */
.eyebrow{background:linear-gradient(90deg,currentColor 40%,#c4a46a 50%,currentColor 60%) 0 0/250% 100%;-webkit-background-clip:text;background-clip:text}
.m-in .eyebrow,.is-in .eyebrow,.section-head.m-in .eyebrow{animation:gwc-shine 1.4s ease .1s 1}
@keyframes gwc-shine{from{background-position:100% 0}to{background-position:0 0}}
@media (prefers-reduced-motion:reduce){
 .journey-svg .journey-line{stroke-dashoffset:0;animation:none}
 .journey-svg .journey-node{opacity:1;animation:none}.journey-svg .journey-node circle{animation:none}
 .band::after,.hero::after,.stat-num [data-count].done,.m-in .eyebrow{animation:none!important}
 .price-card:hover,.why-grid > *:hover,.feature-row > *:hover,.proof-stats li:hover,.service-grid article:hover .service-icon,.grant-card:hover .service-icon{transform:none}
 .grant-card:hover .card-photo img,.post-grid li:hover .card-photo img{transform:none}
}
