:root{--tr-ease:cubic-bezier(.16,1,.3,1);--tr-ease-io:cubic-bezier(.77,0,.18,1)}

/* grain */
.tr-grain{position:fixed;inset:-50%;width:200%;height:200%;pointer-events:none;z-index:9990;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:tr-grain 8s steps(10) infinite}
@keyframes tr-grain{0%,100%{transform:translate(0,0)}20%{transform:translate(-5%,4%)}40%{transform:translate(4%,-6%)}60%{transform:translate(-3%,2%)}80%{transform:translate(5%,5%)}}

/* preloader */
.tr-loader{position:fixed;inset:0;z-index:9999;background:#fff;display:flex;flex-direction:column;justify-content:space-between;padding:4vw;transition:transform 1.1s var(--tr-ease-io)}
.tr-loader.done{transform:translateY(-100%)}
.tr-loader__top{display:flex;justify-content:space-between;font-family:'Geist Mono',monospace;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#5E5E5B}
.tr-loader__count{font-family:'Geist',sans-serif;font-size:clamp(90px,18vw,260px);font-weight:600;letter-spacing:-.06em;line-height:.8;color:#000;display:flex;align-items:flex-end;gap:.05em}
.tr-loader__count span{color:#FF5B1F;font-size:.35em;line-height:1;padding-bottom:.12em}
.tr-loader__bar{position:absolute;left:0;bottom:0;height:3px;background:#FF5B1F;width:0;transition:width .2s linear}

/* cursor */
.tr-cursor,.tr-cursor-ring{position:fixed;top:0;left:0;pointer-events:none;z-index:9995;border-radius:50%;transform:translate(-50%,-50%);display:none}
.tr-has-cursor .tr-cursor,.tr-has-cursor .tr-cursor-ring{display:flex}
.tr-cursor{width:7px;height:7px;background:#FF5B1F}
.tr-cursor-ring{width:38px;height:38px;border:1px solid rgba(0,0,0,.25);align-items:center;justify-content:center;transition:width .35s var(--tr-ease),height .35s var(--tr-ease),background .35s,border-color .35s}
.tr-cursor-ring span{font-family:'Geist Mono',monospace;font-size:10px;letter-spacing:.1em;color:#fff;opacity:0;transition:opacity .2s}
.tr-cursor-ring.hover{width:64px;height:64px;border-color:#FF5B1F;background:rgba(255,91,31,.10)}
.tr-cursor-ring.view{width:96px;height:96px;background:#FF5B1F;border-color:#FF5B1F}
.tr-cursor-ring.view span{opacity:1}
.tr-has-cursor body,.tr-has-cursor a,.tr-has-cursor button{cursor:none}

/* header */
.elementor-location-header .glass-nav{-webkit-backdrop-filter:blur(18px) saturate(1.6);backdrop-filter:blur(18px) saturate(1.6)}
.elementor-location-header .glass-nav.tr-hide{transform:translateY(-140%)}
html.tr-js:not(.tr-ready) .elementor-location-header .glass-nav{transform:translateY(-140%)}

/* reveal + split */
html.tr-js .reveal{opacity:0;transform:translateY(40px);transition:opacity 1.1s var(--tr-ease),transform 1.1s var(--tr-ease)}
html.tr-js .reveal.in{opacity:1;transform:none}
.split .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.08em}
html.tr-js .split .w>span{display:inline-block;transform:translateY(105%);transition:transform 1.1s var(--tr-ease)}
html.tr-js .split.in .w>span{transform:none}
html.tr-js .display.split .w>span{transform:translateY(110%) rotate(4deg);transform-origin:left bottom;transition-duration:1.4s}
html.tr-js.tr-ready .display.split .w>span,html.tr-js .display.split.in .w>span{transform:none}

/* manifesto */
.manifesto .mw{opacity:.13;transition:opacity .4s}
.manifesto .mw.on{opacity:1}
.manifesto .mw.or.on{color:#FF5B1F}

/* spotlight */
.card::before,.spotlight::before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;transition:opacity .5s;pointer-events:none;
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),rgba(255,91,31,.11),transparent 45%)}
.card:hover::before,.spotlight:hover::before{opacity:1}
.card{position:relative;isolation:isolate}

/* dot fields */
.tr-field{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.dot-field>*:not(.tr-field),.dot-field-dark>*:not(.tr-field){position:relative;z-index:2}

/* typing prompt */
.typing-prompt .tr-pr{color:#FF5B1F}
.typing-prompt .tr-typed::after{content:"▍";color:#FF5B1F;animation:tr-blink 1s steps(1) infinite;margin-left:1px}
@keyframes tr-blink{50%{opacity:0}}
.typing-prompt .tr-gen{margin-top:16px;display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.typing-prompt .tr-gen i{height:46px;border-radius:9px;background:#fff;border:1px solid rgba(17,17,17,.09);transform-origin:bottom;transform:scaleY(.2);opacity:0;transition:transform .8s var(--tr-ease),opacity .6s}
.typing-prompt .tr-gen i:nth-child(1){grid-column:span 4;height:20px}
.typing-prompt .tr-gen i:nth-child(2){grid-column:span 2;height:70px;background:linear-gradient(135deg,#FF5B1F,#FF8A3D);border:0}
.typing-prompt .tr-gen.on i{transform:none;opacity:1}
.typing-prompt .tr-gen.on i:nth-child(2){transition-delay:.1s}.typing-prompt .tr-gen.on i:nth-child(3){transition-delay:.2s}.typing-prompt .tr-gen.on i:nth-child(4){transition-delay:.3s}.typing-prompt .tr-gen.on i:nth-child(5){transition-delay:.4s}.typing-prompt .tr-gen.on i:nth-child(6){transition-delay:.5s}

/* marquee */
.marquee-track{display:flex;gap:64px;width:max-content;animation:tr-marq 38s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee-track .marquee-item::after{content:"✦";color:#FF5B1F;font-size:.6em;margin-left:64px}
@keyframes tr-marq{to{transform:translateX(-50%)}}

/* horizontal scroll */
@media (min-width:1025px){
  .h-scroll .h-sticky{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;flex-direction:column;justify-content:center}
  .h-scroll .h-track{will-change:transform;padding-left:4vw;flex-wrap:nowrap}
}
@media (max-width:1024px){.h-scroll .h-track{flex-direction:column}}

/* status ping */
.status-ping{width:8px;height:8px;border-radius:50%;background:#1DB954;position:relative;flex:none}
.status-ping::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid #1DB954;opacity:0;animation:tr-ping 2s var(--tr-ease) infinite}
@keyframes tr-ping{0%{transform:scale(.5);opacity:.8}100%{transform:scale(1.8);opacity:0}}

@media (prefers-reduced-motion:reduce){
  .tr-grain,.marquee-track{animation:none}
  html.tr-js .reveal,html.tr-js .split .w>span{opacity:1;transform:none}
}
