/* X-BNG motion system — layered on top of site.css / brand-visuals.css.
   All ambient animation is defined inside prefers-reduced-motion: no-preference
   and pauses under body.motion-paused (the on-page "Pause motion" control). */

/* ---------- shared fixes ---------- */
.solution-row>*{min-width:0}
.solution-image{width:100%;max-width:100%} /* fixes pre-existing mobile overflow: picture sized itself from the image's intrinsic aspect ratio */

h1 .line,h1 .line-inner,h2 .line,h2 .line-inner,.banner-copy h2 .line,.banner-copy h2 .line-inner{color:inherit;display:block}
.line{overflow:hidden;padding-bottom:.09em;margin-bottom:-.09em}
.line-inner{display:inline-block;will-change:transform}
.page-hero.has-art h1 .line-inner>span,.page-hero h1 .line-inner>span{display:inline}
.banner-copy h2 .line-inner>span{display:inline}

/* ---------- scroll progress ---------- */
.scroll-progress{will-change:transform;position:fixed;top:0;left:0;right:0;height:3px;z-index:120;pointer-events:none;background:transparent}
.scroll-progress i{display:block;height:100%;background:linear-gradient(90deg,var(--lime),#c7ef62);transform-origin:left;transform:scaleX(var(--scroll,0));box-shadow:0 0 12px #93c90088}

/* ---------- header behaviour ---------- */
.site-header{transition:box-shadow .25s,transform .45s var(--ease),background .3s}
.site-header.header-hidden{transform:translateY(-110%)}
.site-header.scrolled{background:#fffffff2}

/* ---------- banner carousel: cinematic layer ---------- */
.banner-slide{isolation:isolate}
.banner-image{will-change:transform;transform:translate3d(calc(var(--px,0)*14px),calc(var(--py,0)*10px),0) }
.banner-ghost{position:absolute;z-index:-1;right:max(30px,calc((100vw - 1280px)/2 - 40px));bottom:4%;font-family:var(--display);font-weight:700;font-size:clamp(11rem,26vw,24rem);line-height:.8;letter-spacing:-.05em;color:transparent;-webkit-text-stroke:1.5px #12143822;pointer-events:none;user-select:none}
.banner-dark .banner-ghost{-webkit-text-stroke-color:#ffffff2b}
.banner-net{position:absolute;z-index:-1;right:2%;top:6%;width:min(46vw,560px);height:auto;color:#6f9a06;opacity:0;pointer-events:none;transform:translate3d(calc(var(--px,0)*-12px),calc(var(--py,0)*-8px),0)}
.banner-dark .banner-net{color:#b5dc5c}
.banner-slide.is-active .banner-net{opacity:.5}
.net-ring{fill:none;stroke:currentColor;stroke-width:1;opacity:.45}
.net-dot{fill:currentColor}
.banner-stage{position:relative}
.banner-stage::after{content:'';position:absolute;inset:0;z-index:5;pointer-events:none;background:linear-gradient(105deg,transparent 36%,#c7ef62e0 45%,var(--lime) 51%,var(--ink) 57%,transparent 66%);opacity:0;transform:translateX(-100%)}
.banner-scrollcue{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:6;width:30px;height:50px;border:1.5px solid #12143866;border-radius:16px;display:grid;justify-content:center;padding-top:9px}
.banner-scrollcue i{width:4px;height:9px;border-radius:3px;background:var(--green)}
.banner-slide.banner-dark.is-active~.banner-scrollcue{border-color:#ffffff77}
.banner-slide.banner-dark.is-active~.banner-scrollcue i{background:var(--lime)}
.banner-count{display:none;align-items:baseline;gap:7px;font-family:var(--display);font-size:.8rem;color:#737c8e;padding-right:26px;border-right:1px solid #e6e9ee;margin-right:6px}
.banner-count b{font-size:1.35rem;font-weight:600;color:#121438;min-width:1.7em}
.banner-count em{font-style:normal;color:#93c900}
.rail-glow{position:absolute;left:0;top:-1px;height:1px;width:100%;background:linear-gradient(90deg,transparent,#93c90099,transparent);pointer-events:none}
@media(min-width:1051px){.banner-count{display:flex}}
.banner-progress{height:3px;border-radius:2px}
.banner-progress::after{content:'';position:absolute;top:50%;width:7px;height:7px;margin-top:-3.5px;border-radius:50%;background:var(--lime);box-shadow:0 0 8px #93c900cc;left:0;opacity:0}
.carousel-playing .banner-selector.is-current .banner-progress::after{opacity:1;animation:bannerDot var(--banner-duration) linear both}
@media(max-width:900px){.banner-ghost{font-size:9.5rem;right:12px;bottom:2%}.banner-net{width:70vw;right:-14%;top:2%;opacity:.3}.banner-scrollcue{display:none}}

/* ---------- inner page heroes ---------- */
.crumbs{display:flex;align-items:center;gap:11px;font-size:.78rem;color:var(--muted);margin-bottom:26px}
.crumbs a{border-bottom:1px solid transparent;transition:color .2s,border-color .2s}
.crumbs a:hover{color:var(--ink);border-bottom-color:var(--lime)}
.crumbs span[aria-hidden]{color:#b6bcc9}
.crumbs [aria-current]{color:var(--ink);font-weight:500}
.hero-beam{position:absolute;left:0;bottom:-1px;height:2px;width:100%;z-index:2;background:linear-gradient(90deg,var(--lime) 0%,#c7ef62 30%,transparent 60%);transform-origin:left;transform:scaleX(0)}
.hero-backdrop{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.hero-grid{position:absolute;inset:-1px;background-image:linear-gradient(#12143809 1px,transparent 1px),linear-gradient(90deg,#12143809 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(80% 90% at 70% 20%,#000 30%,transparent 75%)}
.hero-orb{position:absolute;width:520px;height:520px;right:-140px;top:-180px;border-radius:50%;border:1px solid #93c90055}
.hero-orb::before,.hero-orb::after{content:'';position:absolute;border:1px solid #93c90033;border-radius:50%}
.hero-orb::before{inset:60px}.hero-orb::after{inset:120px}
.hero-orb.orb-b{width:240px;height:240px;right:auto;left:-90px;top:auto;bottom:-120px;border-color:#12143814}
.page-hero-art{will-change:transform;transform:translate3d(calc(var(--px,0)*10px),calc(var(--py,0)*7px),0)}

/* ---------- reveal system ---------- */
.will-reveal{opacity:0;transform:translateY(26px);transition:opacity .85s var(--ease),transform .85s var(--ease),filter .85s var(--ease)}
.will-reveal.is-visible{opacity:1;transform:none;filter:none}
[data-stagger]>*{transition-delay:calc(var(--i,0)*90ms)}
.reveal-left.will-reveal{transform:translateX(-34px)}
.reveal-right.will-reveal{transform:translateX(34px)}
.reveal-left.will-reveal.is-visible,.reveal-right.will-reveal.is-visible{transform:none}

/* ---------- marquee strip ---------- */
.connection-strip{overflow:hidden}
.marquee{position:relative;padding-block:24px;mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
.marquee-track{display:flex;width:max-content;gap:0}
.marquee-group{display:inline-flex;align-items:center;white-space:nowrap;font-family:var(--display);font-size:1.05rem;font-weight:500;letter-spacing:-.015em;color:var(--ink);padding-right:.6em}
.marquee-group b{color:var(--green);font-weight:400;margin:0 .85em}

/* ---------- stats band ---------- */
.stats-band{background:var(--ink);color:#eef0f7;overflow:hidden;position:relative}
.stats-band::before{content:'';position:absolute;inset:0;background:radial-gradient(60% 130% at 85% 0%,#93c90014,transparent 60%)}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:36px;padding-block:64px;position:relative}
.stat{border-left:1px solid #ffffff1c;padding-left:26px}
.stat-value{display:block;font-family:var(--display);font-weight:600;font-size:clamp(3rem,5vw,4.6rem);line-height:1;letter-spacing:-.04em;color:var(--lime)}
.stat p{margin-top:12px;font-size:.9rem;color:#b9bfd2;line-height:1.6;max-width:220px}
@media(max-width:900px){.stats-grid{grid-template-columns:1fr 1fr;gap:34px 22px;padding-block:50px}}
@media(max-width:480px){.stats-grid{grid-template-columns:1fr}}

/* ---------- image curtain reveals ---------- */
.platform-image-band,.xims-scene>picture,.integration-art>picture,.solution-image,.about-art>picture,.contact-illustration{position:relative}
.platform-image-band::after,.xims-scene>picture::after,.integration-art>picture::after,.solution-image::after,.about-art>picture::after,.contact-illustration::after{content:'';position:absolute;inset:0;z-index:2;background:linear-gradient(100deg,var(--ink) 55%,var(--lime) 55.4%);transform:scaleX(1);transform-origin:right;transition:transform 1s cubic-bezier(.65,.05,.25,1) .15s;pointer-events:none}
.is-visible .platform-image-band::after,.platform-image-band.is-visible::after,.is-visible.xims-scene>picture::after,.is-visible .integration-art>picture::after,.integration-art.is-visible>picture::after,.is-visible .solution-image::after,.is-visible .about-art>picture::after,.about-art.is-visible>picture::after,.is-visible .contact-illustration::after{transform:scaleX(0)}

/* ---------- cards, buttons, micro-interactions ---------- */
.button{position:relative;overflow:hidden}
.button::after{content:'';position:absolute;top:0;bottom:0;left:-70%;width:45%;background:linear-gradient(100deg,transparent,#ffffff4d,transparent);transform:skewX(-18deg);transition:left .6s ease;pointer-events:none}
.button:hover::after{left:125%}
.light.button::after{background:linear-gradient(100deg,transparent,#ffffff88,transparent)}
.tilt{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--lift,0px));transition:transform .35s var(--ease),box-shadow .35s,border-color .25s}
.showcase-card.tilt::before{content:'';position:absolute;inset:0;border-radius:inherit;padding:1px;background:linear-gradient(135deg,#93c900,transparent 40%,transparent 65%,#93c900aa);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .4s;pointer-events:none;z-index:2}
.showcase-card.tilt:hover::before{opacity:1}
.showcase-card:hover{box-shadow:0 30px 70px #12143826}
.capability-card{overflow:hidden}
.capability-card::after{content:'';position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(90deg,var(--lime),#c7ef62);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease)}
.capability-card{position:relative}
.capability-card:hover::after{transform:scaleX(1)}
.capability-card:hover .cap-top .icon{color:var(--green);transform:translateY(-3px) scale(1.08)}
.cap-top .icon{transition:transform .35s var(--ease),color .3s}
.value-block>.icon{transition:transform .4s var(--ease),color .3s}
.value-block:hover>.icon{transform:translateY(-4px) rotate(-4deg);color:var(--green)}
.operator-list a{transition:padding-left .35s var(--ease),background .3s}
.operator-list a:hover{padding-left:14px;background:linear-gradient(90deg,#f3f7e8,transparent 70%)}
.journey li{transition:transform .4s var(--ease)}
.journey li:hover{transform:translateY(-5px)}
.step-number{transition:background .3s,color .3s,border-color .3s,box-shadow .4s}
.journey li:hover .step-number{background:var(--lime);border-color:var(--lime);color:var(--ink);box-shadow:0 0 0 7px #93c90022}
.faq-list details>p{animation:none}
.faq-list details[open]>p{animation:faqIn .45s var(--ease) both}
.faq-list summary span .icon{transition:transform .35s var(--ease)}
.faq-list details[open] summary span .icon{transform:rotate(135deg)}
.tab-panel.panel-in{animation:panelIn .5s var(--ease) both}
.footer{position:relative;overflow:hidden}
.footer-watermark{position:absolute;right:-1.5rem;bottom:-4rem;font-family:var(--display);font-weight:700;font-size:clamp(10rem,22vw,20rem);line-height:1;letter-spacing:-.06em;color:#ffffff05;pointer-events:none;user-select:none}
.enquiry-form .field input:focus-visible,.enquiry-form .field select:focus-visible,.enquiry-form .field textarea:focus-visible{box-shadow:0 0 0 4px #93c90033;transition:box-shadow .25s}

/* card re-entry after capability filtering */
.card-in{animation:cardIn .5s var(--ease) both}

/* ---------- keyframes & ambient motion (motion-safe only) ---------- */
@media (prefers-reduced-motion: no-preference){
 body:not(.motion-paused) .marquee-track{animation:marquee 26s linear infinite}
 .marquee:hover .marquee-track{animation-play-state:paused}
 body:not(.motion-paused) .banner-slide.is-active .banner-image img{animation:kenburns 9s ease-out both}
 body:not(.motion-paused) .banner-slide:nth-child(2).is-active .banner-image img{animation-name:kenburnsB}
 body:not(.motion-paused) .banner-slide:nth-child(3).is-active .banner-image img{animation-name:kenburnsC}
 body:not(.motion-paused) .net-flow{stroke-dasharray:5 9;animation:netFlow 2.6s linear infinite}
 body:not(.motion-paused) .net-flow.f1{animation-duration:3.4s}
 body:not(.motion-paused) .net-flow.f2{animation-duration:4.3s;animation-direction:reverse}
 body:not(.motion-paused) .net-ring{animation:netPulse 3.2s ease-in-out infinite}
 body:not(.motion-paused) .net-node.n1 .net-ring{animation-delay:.7s}
 body:not(.motion-paused) .net-node.n2 .net-ring{animation-delay:1.5s}
 body:not(.motion-paused) .net-node.n3 .net-ring{animation-delay:2.2s}
 body:not(.motion-paused) .banner-scrollcue i{animation:cueDrop 1.9s ease-in-out infinite}
 body:not(.motion-paused) .hero-orb{animation:orbSpin 46s linear infinite}
 body:not(.motion-paused) .hero-orb.orb-b{animation-duration:70s;animation-direction:reverse}
 body:not(.motion-paused) .closing-orbit{animation:orbSpin 60s linear infinite}
 body:not(.motion-paused) .stats-band::before{animation:statGlow 7s ease-in-out infinite alternate}

 /* page-hero load choreography */
 .hero-enter .crumbs,.hero-enter .eyebrow,.hero-enter .lede,.hero-enter .button,.hero-enter .button-row{animation:heroFade .8s var(--ease) both}
 .hero-enter .crumbs{animation-delay:.05s}
 .hero-enter .eyebrow{animation-delay:.15s}
 .hero-enter h1 .line-inner{transform:translateY(112%);animation:lineRise .9s var(--ease) both}
 .hero-enter h1 .line:nth-child(1) .line-inner{animation-delay:.22s}
 .hero-enter h1 .line:nth-child(2) .line-inner{animation-delay:.34s}
 .hero-enter h1 .line:nth-child(3) .line-inner{animation-delay:.46s}
 .hero-enter .lede{animation-delay:.5s}
 .hero-enter .button,.hero-enter .button-row{animation-delay:.62s}
 .hero-beam{animation:beamGrow 1.1s var(--ease) .55s both}

 /* banner copy choreography — replaces the transition approach */
 .carousel-ready .banner-slide .banner-copy>*{transition:none!important}
 .carousel-ready .banner-slide:not(.is-active) .banner-copy>*{opacity:0}
 .carousel-ready .banner-slide.is-active .banner-copy .eyebrow{animation:heroFade .7s var(--ease) .25s both}
 .carousel-ready .banner-slide.is-active .banner-copy h2{opacity:1}
 .carousel-ready .banner-slide:not(.is-active) .banner-copy h2 .line-inner{transform:translateY(112%)}
 .carousel-ready .banner-slide.is-active .banner-copy h2 .line-inner{transform:translateY(112%);animation:lineRise .95s var(--ease) both}
 .carousel-ready .banner-slide.is-active .banner-copy h2 .line:nth-child(1) .line-inner{animation-delay:.3s}
 .carousel-ready .banner-slide.is-active .banner-copy h2 .line:nth-child(2) .line-inner{animation-delay:.42s}
 .carousel-ready .banner-slide.is-active .banner-copy>p:not(.eyebrow):not(.banner-exclusive){animation:heroFade .75s var(--ease) .55s both}
 .carousel-ready .banner-slide.is-active .banner-copy .button-row{animation:heroFade .75s var(--ease) .68s both}
 .carousel-ready .banner-slide.is-active .banner-copy .banner-exclusive{animation:heroFade .75s var(--ease) .8s both}
 .carousel-ready .banner-slide.is-active .banner-ghost{animation:ghostIn 1.1s var(--ease) .35s both}
 .carousel-ready .banner-slide.is-active .banner-net{animation:netIn 1.2s ease .6s both}
 .banner-stage.is-switching::after{animation:stageWipe .85s cubic-bezier(.7,.05,.3,.95) both}
 .banner-bottom-label{animation:heroFade 1s ease .9s both}
}

@media (prefers-reduced-motion: reduce){
 .hero-enter h1 .line-inner,.carousel-ready .banner-slide .banner-copy h2 .line-inner{transform:none!important}
 .carousel-ready .banner-slide:not(.is-active) .banner-copy>*{opacity:0}
 .carousel-ready .banner-slide.is-active .banner-copy>*{opacity:1}
 .hero-beam{transform:scaleX(1)}
 .will-reveal{opacity:1;transform:none;filter:none}
 .banner-scrollcue i{animation:none}
}
body.motion-paused .banner-image img,body.motion-paused .banner-ghost,body.motion-paused .banner-net,body.motion-paused .marquee-track,body.motion-paused .hero-orb,body.motion-paused .closing-orbit,body.motion-paused .net-flow,body.motion-paused .net-ring,body.motion-paused .banner-scrollcue i,body.motion-paused .stats-band::before{animation-play-state:paused!important}
body.motion-paused .banner-stage.is-switching::after{animation:none}

@keyframes marquee{to{transform:translateX(-50%)}}
@keyframes kenburns{from{transform:scale(1.14) translate(2%,1%)}to{transform:scale(1)}}
@keyframes kenburnsB{from{transform:scale(1.14) translate(-2%,-1%)}to{transform:scale(1)}}
@keyframes kenburnsC{from{transform:scale(1.02)}to{transform:scale(1.14)}}
@keyframes netFlow{to{stroke-dashoffset:-28}}
@keyframes netPulse{0%,100%{transform:scale(.55);opacity:.15}50%{transform:scale(1);opacity:.5}}
@keyframes cueDrop{0%{transform:translateY(0);opacity:1}70%{transform:translateY(16px);opacity:0}100%{transform:translateY(0);opacity:0}}
@keyframes orbSpin{to{transform:rotate(360deg)}}
@keyframes statGlow{from{opacity:.5}to{opacity:1}}
@keyframes heroFade{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes lineRise{from{transform:translateY(112%)}to{transform:translateY(0)}}
@keyframes beamGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes netIn{from{opacity:0}to{opacity:.5}}
@keyframes ghostIn{from{opacity:0;transform:translateY(40px) scale(.92)}to{opacity:1;transform:none}}
@keyframes stageWipe{0%{opacity:1;transform:translateX(-100%)}100%{opacity:1;transform:translateX(100%)}}
@keyframes faqIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@keyframes panelIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes cardIn{from{opacity:0;transform:translateY(18px) scale(.97)}to{opacity:1;transform:none}}
@keyframes bannerDot{from{left:0}to{left:calc(100% - 7px)}}

/* ============ Hero live control-plane scenes & terminal ============ */
.banner-scene{position:absolute;z-index:2;top:calc(50% - 14px);transform:translateY(-50%);right:max(48px,calc((100vw - 1280px)/2));width:min(400px,30vw);padding:16px 20px 10px;border-radius:22px;border:1px solid rgba(18,20,56,.15);background:rgba(250,251,253,.92);box-shadow:0 30px 70px -34px rgba(18,20,56,.45);color:var(--ink)}
.banner-dark .banner-scene{border-color:rgba(255,255,255,.22);background:rgba(16,18,47,.88);color:#eef1fa;box-shadow:0 30px 70px -30px rgba(0,0,0,.6)}
.scene-head{display:flex;align-items:center;gap:10px;font-family:var(--display);font-size:.72rem;font-weight:600;letter-spacing:.15em}
.scene-head .sc-tag{margin-left:auto;font-size:.58rem;letter-spacing:.18em;opacity:.5;font-weight:500}
.sc-dot{width:8px;height:8px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 4px rgba(147,201,0,.18)}
.banner-scene{contain:paint}
.banner-scene svg{display:block;width:100%;height:auto;margin-top:8px}
.sc-node{fill:none;stroke:currentColor;stroke-width:1.4;opacity:.8}
.sc-chip{opacity:.55}
.sc-fill{fill:currentColor;opacity:.05;stroke:none}
.sc-core{opacity:.1}
.sc-wire{fill:none;stroke:currentColor;stroke-width:1.2;stroke-dasharray:2 6;stroke-linecap:round;opacity:.38}
.sc-solid{stroke-dasharray:none;opacity:.28}
.sc-comet{fill:none;stroke:var(--lime);stroke-width:2.6;stroke-linecap:round;stroke-dasharray:16 84;stroke-dashoffset:58;opacity:.9}
.sc-label{font:600 11px var(--display);letter-spacing:.1em;fill:currentColor;opacity:.82}
.sc-big{font-size:15px;letter-spacing:.06em}
.sc-sub{font:500 8.5px var(--body);letter-spacing:.16em;fill:currentColor;opacity:.5}
.sc-pin{fill:currentColor;opacity:.35}
.sc-pulse{fill:var(--lime);transform-box:fill-box;transform-origin:center}
.sc-home{opacity:.6}
@media(max-width:1179px),(max-height:620px){.banner-scene{display:none}}

.banner-term{position:absolute;z-index:2;left:max(48px,calc((100vw - 1280px)/2));bottom:24px;display:inline-flex;align-items:center;gap:9px;padding:10px 18px;border-radius:999px;border:1px solid rgba(18,20,56,.16);background:rgba(255,255,255,.92);font-family:var(--display);font-size:.75rem;font-weight:500;letter-spacing:.08em;color:#3a4258}
.banner-term .term-prompt{color:var(--green);font-weight:700}
.banner-term .term-caret{width:8px;height:13px;background:var(--lime);opacity:.85}
.banner-term.term-dark{border-color:rgba(255,255,255,.25);background:rgba(16,18,47,.9);color:#dfe4f2}
.banner-term.term-dark .term-prompt{color:#b5dc5c}
@media(max-width:759px){.banner-term{display:none}}

@media(prefers-reduced-motion:no-preference){
body:not(.motion-paused) .sc-comet{stroke-dashoffset:100;animation:cometFlow 4.6s linear infinite;opacity:0;animation-fill-mode:both}
body:not(.motion-paused) .sc-pulse{animation:scPulse 3.4s ease-in-out infinite}
body:not(.motion-paused) .sc-dot{animation:scPulse 2.2s ease-in-out infinite}
body:not(.motion-paused) .carousel-ready .banner-slide.is-active .banner-scene{animation:sceneIn .85s cubic-bezier(.2,.7,.2,1) .55s both}
body:not(.motion-paused) .banner-term .term-caret{animation:caretBlink 1.05s steps(1) infinite}
}
@keyframes cometFlow{0%{opacity:0}6%{opacity:.95}94%{opacity:.95}100%{stroke-dashoffset:0;opacity:0}}
@keyframes scPulse{0%,100%{transform:scale(.7);opacity:.45}50%{transform:scale(1.15);opacity:1}}
@keyframes sceneIn{from{opacity:0;transform:translateY(-50%) translateX(28px)}to{opacity:1;transform:translateY(-50%) translateX(0)}}
@keyframes caretBlink{50%{opacity:0}}

/* ============ Generative hero backgrounds (slides 1 & 3) ============ */
.banner-art{position:absolute;inset:0;z-index:-3;overflow:hidden;contain:strict}
.banner-art svg{width:100%;height:100%;display:block}
.art-tower{fill:#fff;fill-opacity:.6;stroke:#121438;stroke-opacity:.24;stroke-width:1.5}
.art-tower:nth-of-type(even){fill:#0b086b;fill-opacity:.05}
.art-win{fill:var(--lime);opacity:.75}
.art-ground{stroke:#121438;stroke-opacity:.14;stroke-width:1.4}
.art-wire{fill:none;stroke-linecap:round;stroke:#121438;stroke-opacity:.2;stroke-width:1.6;stroke-dasharray:2 8}
.aw-2{stroke:#536f00;stroke-opacity:.3}
.art-comet{fill:none;stroke:var(--lime);stroke-width:3.2;stroke-linecap:round;stroke-dasharray:6 94;stroke-dashoffset:60;opacity:.9}
.art-pulse{fill:var(--lime);transform-box:fill-box;transform-origin:center}
.art-plus{stroke:#121438;stroke-opacity:.16;stroke-width:1.6;stroke-linecap:round}
.art-ring-line{fill:none;stroke:#121438;stroke-opacity:.08;stroke-width:1.3}
.art-ring-dash{fill:none;stroke:#536f00;stroke-opacity:.4;stroke-width:1.4;stroke-dasharray:3 12;stroke-linecap:round}
.art-ring{transform-box:fill-box;transform-origin:center}
.art-orbit{fill:var(--navy);opacity:.5}
.art-core{fill:none;stroke:var(--lime);stroke-width:2;opacity:.8}
@media(prefers-reduced-motion:no-preference){
body:not(.motion-paused) .art-comet{stroke-dashoffset:100;animation:cometFlow 11s linear infinite}
body:not(.motion-paused) .art-pulse{animation:scPulse 3.8s ease-in-out infinite}
body:not(.motion-paused) .art-ring{animation:artSpin 110s linear infinite}
}
@keyframes artSpin{to{transform:rotate(360deg)}}

/* ============ Performance guards ============ */
.banner-slide:not(.is-active) :is(.sc-comet,.sc-pulse,.sc-dot,.art-comet,.art-pulse,.art-ring,.banner-image img){animation-play-state:paused!important}
.hero-idle .banner-stage *,.hero-idle .banner-term .term-caret{animation-play-state:paused!important}
.footer-keywords{margin-top:14px;font-size:.72rem;letter-spacing:.06em;line-height:1.7;color:#8b93ad;max-width:340px}
