
.lg-b{animation:lgB 1.1s cubic-bezier(.2,.75,.1,1) .15s both}
.lg-o{animation:lgO 1.1s cubic-bezier(.2,.75,.1,1) .15s both}
.lg-l{animation:lgL 1s cubic-bezier(.2,.75,.1,1) both;animation-delay:var(--d)}
@keyframes lgB{from{transform:translate(-260px,-150px);opacity:0}60%{opacity:1}to{transform:none;opacity:1}}
@keyframes lgO{from{transform:translate(-260px,150px);opacity:0}60%{opacity:1}to{transform:none;opacity:1}}
@keyframes lgL{from{transform:translateY(340px)}to{transform:none}}

/* ---- Loader: vises første gang per økt, eller med ?loader ---- */
.loader{display:none}
.preload .loader{display:block;position:fixed;inset:0;z-index:200}
.preload body{overflow:hidden}
.loader .curtain{position:absolute;left:0;right:0;height:50.5%;background:#0a0d10;transition:transform 1.1s cubic-bezier(.77,0,.18,1) .15s}
.loader .curtain.top{top:0}.loader .curtain.bottom{bottom:0}
.loader .stage{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;padding:0 24px;text-align:center;transition:opacity .5s,transform .8s cubic-bezier(.5,0,.2,1)}
.loader-logo{width:min(78vw,640px);height:auto;overflow:visible}
.loader.done .stage{opacity:0;transform:scale(1.06)}
.loader.done .curtain.top{transform:translateY(-101%)}
.loader.done .curtain.bottom{transform:translateY(101%)}
/* Hero-introen venter til gardinen åpner seg */
.preload .hero,.preload .hero *{animation-play-state:paused!important}
@media (prefers-reduced-motion:reduce){.preload .loader{display:none}.preload body{overflow:auto}}
