/* v33 apfx shared parts (see apfx-core.js). Everything is hidden unless html[data-apfx] is set (never under reduced motion). */
.apfx-sky,.apfx-fx,.apfx-hs,.apfx-halo,.apfx-glow,.apfx-sh{pointer-events:none;display:none}
.apfx-rel{position:relative}
html[data-apfx] .apfx-sky{display:block;position:fixed;inset:0;overflow:hidden;contain:strict;opacity:.8}
html[data-apfx] .apfx-sky i{position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);border-radius:50%;background:var(--c,#fff);opacity:0;will-change:transform,opacity;animation:apfxFloat var(--t) linear var(--d) infinite}
@keyframes apfxFloat{0%{opacity:0;transform:translate3d(0,0,0)}15%{opacity:var(--o,.7)}85%{opacity:var(--o,.7)}100%{opacity:0;transform:translate3d(var(--dx),-14vh,0)}}
@keyframes apfxTwinkle{0%,100%{opacity:.08;transform:scale(.6)}50%{opacity:var(--o,.9);transform:scale(1)}}
@keyframes apfxFall{0%{opacity:0;transform:translate3d(0,-6vh,0)}12%{opacity:var(--o,.7)}88%{opacity:var(--o,.7)}100%{opacity:0;transform:translate3d(var(--dx),18vh,0)}}
/* tap bloom */
html[data-apfx] .apfx-fx{display:block;position:fixed;inset:0;z-index:1200;overflow:hidden}
.apfx-fx i{position:absolute;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;border:2px solid var(--apfx-rip,var(--acc));background:radial-gradient(circle,color-mix(in srgb,var(--apfx-rip,var(--acc)) 26%,transparent),transparent 70%);animation:apfxBloom .62s cubic-bezier(.2,.7,.3,1) forwards}
@keyframes apfxBloom{from{transform:scale(.25);opacity:.85}to{transform:scale(1.25);opacity:0}}
/* header: soft halo behind the logo + a slow light sweep across the brand */
html[data-apfx] .apfx-halo{display:block;position:absolute;z-index:-1;left:-9px;top:50%;width:56px;height:56px;margin-top:-28px;border-radius:50%;background:radial-gradient(circle,var(--apfx-halo,rgba(255,210,120,.55)),transparent 68%);animation:apfxHalo 5.5s ease-in-out infinite}
@keyframes apfxHalo{0%,100%{opacity:.35;transform:scale(.86)}50%{opacity:.9;transform:scale(1.06)}}
html[data-apfx] .apfx-hs{display:block;position:absolute;inset:-2px -4px;overflow:hidden;border-radius:12px;z-index:1}
.apfx-hs i{position:absolute;top:-30%;bottom:-30%;left:0;width:34%;background:linear-gradient(100deg,transparent,var(--apfx-sweep,rgba(255,255,255,.55)),transparent);mix-blend-mode:var(--apfx-blend,soft-light);transform:translateX(-120%) skewX(-18deg);animation:apfxSweep 8s ease-in-out 1.5s infinite}
@keyframes apfxSweep{0%,62%{transform:translateX(-140%) skewX(-18deg)}100%{transform:translateX(420%) skewX(-18deg)}}
/* compose card: a gentle breathing glow on its edge */
html[data-apfx] .apfx-glow{display:block;position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1.5px var(--apfx-glow,var(--acc)),inset 0 0 22px -8px var(--apfx-glow,var(--acc));opacity:0;animation:apfxBreathe 6s ease-in-out infinite}
@keyframes apfxBreathe{0%,100%{opacity:.08}50%{opacity:.55}}
/* prayer + testimony cards: fade-rise on scroll in, one soft sheen as they arrive (desktop) */
html[data-apfx] .apfx-pre{opacity:0;translate:0 10px}
html[data-apfx] .apfx-pre.apfx-up{opacity:1;translate:0 0;transition:opacity .5s ease,translate .55s cubic-bezier(.2,.8,.2,1)}
html[data-apfx] .apfx-sh{display:block;position:absolute;inset:0;overflow:hidden;border-radius:inherit;z-index:0}
.apfx-sh::before{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;background:linear-gradient(100deg,transparent,var(--apfx-sheen,rgba(255,255,255,.4)),transparent);transform:translateX(-130%);opacity:0}
html[data-apfx] .apfx-vis>.apfx-sh::before{animation:apfxSheen 1.4s ease-out .2s 1 both}
@keyframes apfxSheen{0%{transform:translateX(-130%);opacity:1}100%{transform:translateX(320%);opacity:0}}
html.apfx-lite .apfx-sh{display:none!important}
/* map pins: the disc breathes softly (the v32 rings stay as they are) */
html[data-apfx] .pin i::after{content:"";position:absolute;inset:-4px;border-radius:inherit;background:radial-gradient(circle,color-mix(in srgb,var(--k,var(--acc2)) 55%,transparent),transparent 70%);animation:apfxPin 3.2s ease-in-out infinite;pointer-events:none}
html[data-apfx] .pin.kemo i::after{z-index:-1}
@keyframes apfxPin{0%,100%{transform:scale(.8);opacity:.25}50%{transform:scale(1.35);opacity:.7}}
html.apfx-lite[data-apfx] .pin i::after{animation-duration:4.5s}
/* paused while the tab is hidden */
html.apfx-hid .apfx-sky i,html.apfx-hid .apfx-halo,html.apfx-hid .apfx-hs i,html.apfx-hid .apfx-glow,html.apfx-hid .pin i::after,html.ap-hidden .apfx-sky i{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.apfx-sky,.apfx-fx,.apfx-hs,.apfx-halo,.apfx-glow,.apfx-sh{display:none!important}.apfx-pre{opacity:1!important;translate:none!important}}

/* ===== v33b · living logo: light rays behind the cross, a shimmer across the cross then the wordmark,
   a sparkle at the cross centre, themed glints and a one-time intro. Absolute layers only (no layout
   or size change), never over the wordmark text except the existing soft sweep, lighter on phones,
   paused when hidden, off under reduced motion (data-apfx is never set then). ===== */
.apfx-lr,.apfx-lg{pointer-events:none;display:none}
html[data-apfx] .top .logo{position:relative}
html[data-apfx] .top .brand{--lg-c:15px;--lg-t:13s}
@media (max-width:420px){html[data-apfx] .top .brand{--lg-c:13px}}
html.apfx-lite[data-apfx] .top .brand{--lg-t:15s}
/* rays + intro bloom: behind the mark, centred on it */
html[data-apfx] .apfx-lr{display:block;position:absolute;z-index:-1;left:calc(var(--lg-c) - 40px);top:50%;width:80px;height:80px;margin-top:-40px}
.apfx-lr i{position:absolute;inset:0;border-radius:50%;background:repeating-conic-gradient(from 0deg,var(--lg-ray,rgba(255,204,102,.55)) 0deg 5deg,transparent 5deg 30deg);-webkit-mask:radial-gradient(circle,transparent 26%,#000 34%,rgba(0,0,0,.5) 50%,transparent 68%);mask:radial-gradient(circle,transparent 26%,#000 34%,rgba(0,0,0,.5) 50%,transparent 68%);opacity:.5;animation:apfxLgRay 6.5s ease-in-out infinite,apfxLgSpin 90s linear infinite;will-change:transform,opacity}
.apfx-lr b{position:absolute;inset:14px;border-radius:50%;background:radial-gradient(circle,var(--lg-bloom,rgba(255,224,150,.9)),transparent 65%);opacity:0;animation:apfxLgIn 1.9s cubic-bezier(.2,.7,.2,1) .15s 1 both}
@keyframes apfxLgRay{0%,100%{opacity:.28;scale:.9}50%{opacity:.75;scale:1.04}}
@keyframes apfxLgSpin{to{rotate:360deg}}
@keyframes apfxLgIn{0%{opacity:0;transform:scale(.3)}35%{opacity:1}100%{opacity:0;transform:scale(1.7)}}
html.apfx-lite .apfx-lr i{animation:apfxLgRay 7s ease-in-out infinite}
/* over-the-mark layer */
html[data-apfx] .apfx-lg{display:block;position:absolute;inset:0;z-index:2;visibility:visible}
.apfx-lgsh{position:absolute;inset:0;overflow:hidden;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.56 30.00H278.44Q289.00 30.00 289.00 40.56V117.79H369.44Q380.00 117.79 380.00 128.35V173.23Q380.00 183.79 369.44 183.79H289.00V422.08Q289.00 432.64 278.44 432.64H233.56Q223.00 432.64 223.00 422.08V183.79H142.56Q132.00 183.79 132.00 173.23V128.35Q132.00 117.79 142.56 117.79H223.00V40.56Q223.00 30.00 233.56 30.00Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.56 30.00H278.44Q289.00 30.00 289.00 40.56V117.79H369.44Q380.00 117.79 380.00 128.35V173.23Q380.00 183.79 369.44 183.79H289.00V422.08Q289.00 432.64 278.44 432.64H233.56Q223.00 432.64 223.00 422.08V183.79H142.56Q132.00 183.79 132.00 173.23V128.35Q132.00 117.79 142.56 117.79H223.00V40.56Q223.00 30.00 233.56 30.00Z'/%3E%3C/svg%3E") center/100% 100% no-repeat}
.apfx-lgsh::before{content:"";position:absolute;top:-20%;bottom:-20%;left:0;width:45%;background:linear-gradient(100deg,transparent,var(--lg-shim,rgba(255,250,225,.95)),transparent);transform:translateX(-160%) skewX(-16deg);animation:apfxLgShim var(--lg-t) ease-in-out .8s infinite}
@keyframes apfxLgShim{0%{transform:translateX(-160%) skewX(-16deg)}7%,100%{transform:translateX(330%) skewX(-16deg)}}
.apfx-lgsp{position:absolute;left:50%;top:29.5%;width:15px;height:15px;margin:-7.5px 0 0 -7.5px;opacity:0;animation:apfxLgSpark var(--lg-t) ease-out .8s infinite}
.apfx-lgsp::before,.apfx-lgsp::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 42%,var(--lg-spark,#fff8dc) 50%,transparent 58%),linear-gradient(0deg,transparent 42%,var(--lg-spark,#fff8dc) 50%,transparent 58%);-webkit-mask:radial-gradient(circle,#000 18%,transparent 70%);mask:radial-gradient(circle,#000 18%,transparent 70%)}
.apfx-lgsp::after{inset:4px;border-radius:50%;background:radial-gradient(circle,var(--lg-spark,#fff8dc),transparent 70%);-webkit-mask:none;mask:none}
@keyframes apfxLgSpark{0%,3%{opacity:0;transform:scale(.2) rotate(-30deg)}7%{opacity:1;transform:scale(1.15) rotate(0deg)}11%{opacity:.85;transform:scale(.9) rotate(15deg)}16%,100%{opacity:0;transform:scale(.2) rotate(40deg)}}
/* themed glints around the mark (5; 2 on phones) */
.apfx-lgg{position:absolute;inset:0}
.apfx-lgg i{position:absolute;width:5px;height:5px;margin:-2.5px;border-radius:50%;background:var(--lg-glint,#ffe7a6);box-shadow:0 0 4px var(--lg-glint,#ffe7a6);opacity:0;animation:apfxLgGlint 5.5s ease-in-out infinite}
.apfx-lgg i:nth-child(1){left:-6%;top:12%;animation-delay:1.1s}
.apfx-lgg i:nth-child(2){left:104%;top:6%;animation-delay:2.9s}
.apfx-lgg i:nth-child(3){left:108%;top:72%;animation-delay:4.2s}
.apfx-lgg i:nth-child(4){left:-10%;top:80%;animation-delay:.4s}
.apfx-lgg i:nth-child(5){left:52%;top:-14%;animation-delay:3.6s}
html.apfx-lite .apfx-lgg i:nth-child(n+3){display:none}
@keyframes apfxLgGlint{0%,100%{opacity:0;transform:scale(.3)}45%{opacity:.95;transform:scale(1)}60%{opacity:.6;transform:scale(.8)}}
/* wordmark sweep now follows the cross shimmer on the same slow cycle */
html[data-apfx] .apfx-hs i{animation:apfxSweep2 var(--lg-t) ease-in-out .8s infinite}
@keyframes apfxSweep2{0%,5%{transform:translateX(-140%) skewX(-18deg)}22%,100%{transform:translateX(420%) skewX(-18deg)}}
html.apfx-hid .apfx-lr i,html.apfx-hid .apfx-lr b,html.apfx-hid .apfx-lgsh::before,html.apfx-hid .apfx-lgsp,html.apfx-hid .apfx-lgg i,html.ap-hidden .apfx-lr i,html.ap-hidden .apfx-lgsh::before,html.ap-hidden .apfx-lgsp,html.ap-hidden .apfx-lgg i{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.apfx-lr,.apfx-lg{display:none!important}}
/* Arcade's mark is a CSS pixel cross on the .logo box; shimmer follows that cross, sparkle on its centre */
:root:not(#_b)[data-apfx=arcade] .logo>.apfx-lg{visibility:visible}
html[data-apfx=arcade] .apfx-lgsh{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14' shape-rendering='crispEdges'%3E%3Cpath d='M5 1h2v3h3v2H7v7H5V6H2V4h3z'/%3E%3C/svg%3E") center/80% auto no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 14' shape-rendering='crispEdges'%3E%3Cpath d='M5 1h2v3h3v2H7v7H5V6H2V4h3z'/%3E%3C/svg%3E") center/80% auto no-repeat}
html[data-apfx=arcade] .apfx-lgsp{top:33%}
