/* Solas Live motion: load stagger, scroll reveals, scoreboard rows, rack LEDs, logo page transition.
   Nothing is hidden unless motion.js has added .sl-reveal, so the page is complete without JavaScript. */

.sl-reveal{opacity:0;transform:translateY(18px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0ms);will-change:opacity,transform}
tr.sl-reveal{transform:translateX(-14px)}
.sl-reveal.is-in{opacity:1;transform:none}

/* Keep the hero hidden from first paint until motion.js takes over (3s failsafe in the head script) */
html.sl-motion:not(.sl-ready) .hero-inner > *,html.sl-motion:not(.sl-ready) .hero-caption,html.sl-motion:not(.sl-ready) .sl-hero > .e-con-inner > *{opacity:0}

/* Rack LEDs boot when their unit comes in */
@keyframes sl-led{0%{opacity:.1;box-shadow:none}35%{opacity:1}50%{opacity:.25;box-shadow:none}70%,100%{opacity:1}}
.sl-reveal.is-in .u::before,.sl-reveal.is-in .sl-unit-id .elementor-heading-title::before{animation:sl-led .9s calc(var(--d,0ms) + .25s) both}

/* Header drops in on first paint */
@keyframes sl-drop{from{transform:translateY(-100%);opacity:0}to{transform:none;opacity:1}}
html.sl-motion header.top{animation:sl-drop .6s cubic-bezier(.2,.7,.2,1) both}

/* Page transition overlay */
.sl-loader{position:fixed;inset:0;z-index:99999;display:grid;place-items:center;background:var(--bg);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .35s ease,visibility 0s linear .35s}
.sl-loader.is-on,html.sl-entering .sl-loader{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .22s ease}
html.sl-entering.sl-entered .sl-loader{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .45s ease .05s,visibility 0s linear .5s}
.sl-loader-inner{display:grid;justify-items:center;gap:14px}
.sl-loader-mark{width:84px;height:84px;overflow:visible}
.sl-loader-word{font:900 1.35rem/1 var(--font-display);letter-spacing:.08em;color:var(--fg)}
.sl-loader-word span{font-weight:500;color:var(--gold);margin-left:.25em}

.sl-loader .s-body{stroke:url(#solas-gold)}
.sl-loader .s-track{stroke:var(--bg)}
.sl-loader .s-link{stroke:url(#solas-gold)}
.sl-loader .s-node{fill:var(--bg);stroke:url(#solas-gold);transform-box:fill-box;transform-origin:center}
.sl-loader .s-dot{fill:url(#solas-gold);transform-box:fill-box;transform-origin:center}

@keyframes sl-draw{to{stroke-dashoffset:0}}
@keyframes sl-pop{from{transform:scale(0)}60%{transform:scale(1.35)}to{transform:scale(1)}}
@keyframes sl-glow{0%,100%{filter:drop-shadow(0 0 0 rgba(226,177,60,0))}50%{filter:drop-shadow(0 0 7px rgba(226,177,60,.9))}}
@keyframes sl-word{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* Leaving a page: the S draws itself, the link lights node by node */
.sl-loader.is-on .s-body,.sl-loader.is-on .s-track,.sl-loader.is-on .s-link{stroke-dasharray:1;stroke-dashoffset:1;animation:sl-draw .6s cubic-bezier(.6,0,.2,1) forwards}
.sl-loader.is-on .s-track{animation-delay:.18s}
.sl-loader.is-on .s-link{animation-delay:.12s;animation-duration:.45s}
.sl-loader.is-on .s-node{animation:sl-pop .35s cubic-bezier(.2,.7,.2,1) both}
.sl-loader.is-on .n1{animation-delay:.2s}
.sl-loader.is-on .n2{animation-delay:.28s}
.sl-loader.is-on .n3{animation-delay:.36s}
.sl-loader.is-on .n4{animation-delay:.44s}
.sl-loader.is-on .s-dot{animation:sl-pop .35s .5s both}
.sl-loader.is-on .sl-loader-word{animation:sl-word .4s .25s both}

/* Arriving: the full mark, with the light pulsing until the page is ready */
html.sl-entering .s-dot{animation:sl-glow 1s ease-in-out infinite}

@media (prefers-reduced-motion:reduce){
  .sl-reveal{opacity:1!important;transform:none!important;transition:none!important}
  .sl-loader{display:none!important}
  html.sl-motion header.top{animation:none}
}
