/* Luxury overlays */
.overlay{position:fixed;inset:0;pointer-events:none;z-index:150}
.overlay--grain{opacity:var(--grain-op);mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 1.2s steps(6) infinite}
@keyframes grain{0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}}
.overlay--vignette{background:radial-gradient(120% 120% at 50% 50%,transparent 55%,rgba(0,0,0,var(--vig)))}
.overlay--sweep{background:linear-gradient(115deg,transparent 40%,color-mix(in srgb,var(--gold) 9%,transparent) 50%,transparent 60%);background-size:250% 100%;background-position:150% 0;animation:sweep 11s var(--ease) infinite;mix-blend-mode:soft-light}
@keyframes sweep{0%,55%{background-position:150% 0}100%{background-position:-50% 0}}

/* Progress */
.progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:160;background:transparent}
.progress span{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:left;background:linear-gradient(90deg,var(--gold),var(--gold-2))}

/* Loader */
.loader{position:fixed;inset:0;z-index:400;background:var(--bg);display:grid;place-items:center;transition:transform 1s var(--ease) .2s,opacity .3s 1.1s}
.loader__mark{font:500 4.5rem var(--font-display);color:var(--accent);animation:pulse 1.4s var(--ease) infinite alternate}
.loader__mark i{font-style:italic;color:var(--text)}
@keyframes pulse{from{opacity:.35;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
body.is-ready .loader{transform:translateY(-100%);opacity:0;pointer-events:none}
body:not(.is-ready){overflow:hidden}

/* Cursor */
.cursor{position:fixed;left:0;top:0;z-index:500;pointer-events:none;display:none}
.cursor__dot,.cursor__ring{position:fixed;left:0;top:0;border-radius:50%;pointer-events:none}
.cursor__dot{width:6px;height:6px;margin:-3px 0 0 -3px;background:var(--gold)}
.cursor__ring{width:38px;height:38px;margin:-19px 0 0 -19px;border:1px solid var(--gold);transition:width .4s var(--ease),height .4s var(--ease),margin .4s var(--ease),background .3s,opacity .3s}
.cursor.is-hover .cursor__ring{width:68px;height:68px;margin:-34px 0 0 -34px;background:color-mix(in srgb,var(--gold) 14%,transparent)}
@media (hover:hover) and (pointer:fine){
  .cursor{display:block}
  body.has-cursor,body.has-cursor a,body.has-cursor button{cursor:none}
}

/* Reveals */
.reveal{opacity:0;transform:translateY(40px);transition:opacity 1.1s var(--ease),transform 1.1s var(--ease);transition-delay:var(--d,0s)}
.reveal.in{opacity:1;transform:none}
.reveal-img{opacity:0;transform:translateY(50px) scale(.97);transition:opacity 1.2s var(--ease),transform 1.4s var(--ease);transition-delay:var(--d,0s)}
.reveal-img.in{opacity:1;transform:none}
.split .ch{display:inline-block;transform:translateY(110%) rotate(6deg);transition:transform 1.1s var(--ease);transition-delay:calc(var(--i)*55ms + .5s)}
body.is-ready .split .ch{transform:none}
.split{display:inline-block}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .reveal,.reveal-img{opacity:1;transform:none}
  .split .ch{transform:none}
  .overlay--grain,.overlay--sweep{display:none}
}
