/* Ambient motion stays decorative, subtle and independent of layout. */
.ambient-boundary{position:relative}
.ambient-line{position:absolute;left:0;right:0;bottom:-6px;height:14px;overflow:hidden;pointer-events:none;z-index:1}
.ambient-line.at-top{bottom:auto;top:-6px}
/* A long signal travels along a quiet rail, linking the page sections. */
.ambient-line::before{content:'';position:absolute;top:6px;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,#526bd52e 25%,#3c90ce40 60%,transparent)}
.ambient-line::after{content:'';position:absolute;top:6px;left:0;width:32%;height:1px;border-radius:50%;background:linear-gradient(90deg,transparent,#7554db88 24%,#4459dc 58%,#1688ca 78%,#8cdff0 88%,transparent);box-shadow:none;opacity:0;transform:translateX(-105%);animation:edx-trace 15s linear infinite;animation-delay:var(--ambient-delay,0s);animation-play-state:paused}
html[data-theme=dark] .ambient-line::before{background:linear-gradient(90deg,transparent,#79b9f54d 30%,#79b9f533 70%,transparent)}
html[data-theme=dark] .ambient-line::after{background:linear-gradient(90deg,transparent,#657cfb88 24%,#7cafff 58%,#67dcf5 78%,#def8ff 88%,transparent);box-shadow:none}
.ambient-visible>.ambient-line::after{animation-play-state:running}
.contact-invite{position:relative;isolation:isolate}
.ambient-glow{position:absolute;inset:0;overflow:hidden;border-radius:inherit;pointer-events:none;z-index:-1}
.ambient-glow::before{content:'';position:absolute;inset:-25%;background:radial-gradient(ellipse at 25% 35%,#6d64e533,transparent 55%),radial-gradient(ellipse at 75% 65%,#27aaca2b,transparent 55%);animation:edx-drift 21s ease-in-out infinite alternate;animation-play-state:paused}
.ambient-visible>.ambient-glow::before{animation-play-state:running}
/* Overscan keeps the gradient edges outside the clipped section throughout the drift. */
.connected-section::before{inset:-20%;background:radial-gradient(ellipse at 15% 65%,#3d5f9c70,transparent 60%),radial-gradient(ellipse at 85% 20%,#19677940,transparent 55%);animation:edx-drift 23s ease-in-out infinite alternate;animation-play-state:paused}
.connected-section.ambient-visible::before{animation-play-state:running}
.effects-toggle{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;text-decoration:underline;text-decoration-color:#7c9ac24d;text-underline-offset:4px}
@keyframes edx-trace{0%{transform:translateX(-105%);opacity:0}8%{opacity:.62}88%{opacity:.62}100%{transform:translateX(325%);opacity:0}}
@keyframes edx-drift{from{transform:translate3d(-9%,-3%,0) scale(1);opacity:.75}to{transform:translate3d(9%,3%,0) scale(1.12);opacity:1}}
html[data-effects=paused] .ambient-line::after,html[data-effects=paused] .ambient-glow::before,html[data-effects=paused] .connected-section::before,html[data-page-hidden] .ambient-line::after,html[data-page-hidden] .ambient-glow::before,html[data-page-hidden] .connected-section::before{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.ambient-line{display:none}.ambient-glow::before,.connected-section::before{animation:none!important}.effects-toggle{display:none}}
@media(forced-colors:active){.ambient-line,.ambient-glow{display:none}}

/* Section rails span the viewport, including sections inside a content wrapper. */
main .ambient-boundary{border-top:0!important;border-bottom:0!important}
.ambient-boundary>.ambient-line{left:50%;right:auto;width:var(--page-inline-width,100%);transform:translateX(-50%);mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent)}
html[data-theme=dark] main :is(.value-section,.industries-section)::after,
html[data-theme=dark] main :is(.project-guide,.about)::before{display:none}

/* Crossfade a tint instead of snapping between non-interpolable gradients. */
.industry-grid .industry-link{isolation:isolate;transition:border-color .45s ease,box-shadow .45s ease,color .35s ease}
.industry-grid .industry-link::after{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(110deg,#8ca9f32b,#58afda18);opacity:0;z-index:-1;pointer-events:none;transition:opacity .45s cubic-bezier(.22,1,.36,1)}
html[data-theme=dark] .industry-grid .industry-link::after{background:linear-gradient(110deg,#729fe52e,#4c9cc71c)}
.industry-grid .industry-link>.icon{transition:transform .45s cubic-bezier(.22,1,.36,1),color .35s ease}
@media(hover:hover) and (pointer:fine){
 .industry-grid .industry-link:hover::after{opacity:1}
 .industry-grid .industry-link:not(.selected):hover>.icon{transform:translateX(3px)}
}
.industry-grid .industry-link:focus-visible::after{opacity:1}
@media(prefers-reduced-motion:reduce){.industry-grid .industry-link,.industry-grid .industry-link::after,.industry-grid .industry-link>.icon{transition:none}}
html[data-theme=light] .industry-grid .industry-link:not(.selected):hover{background:linear-gradient(145deg,#fff,#f6f9ff)}
html[data-theme=dark] .industry-grid .industry-link:not(.selected):hover{background:linear-gradient(145deg,#192b45,#142138)}

/* The footer shares the same full-width rail; suppress its old inset rule. */
.footer-bottom.ambient-boundary{border-top:0}
html[data-theme=dark] .footer-bottom.ambient-boundary::before{display:none}

/* Shorter rails need shorter cycles to retain a natural perceived speed. */
@media(min-width:541px) and (max-width:1100px){
 .ambient-line::after{animation-duration:11s}
 .ambient-glow::before{animation-duration:19s}
 .connected-section::before{animation-duration:21s}
}
@media(max-width:540px){
 .ambient-line::after{animation-duration:7s}
 .ambient-glow::before{animation-duration:16s}
 .connected-section::before{animation-duration:18s}
}
