/* Holdfast intro splash: full-screen overlay (created by holdfast-intro.js). Transform/opacity animations only.
   Animations reused from the approved previews (options A lock, B draw, C turn). */
.hfi{--a:#5d8bff;--b:#b9e1ff;--ink:#eef3ff;--muted:#8e9bb7;--spark:#dff1ff;--glow:#7fb4ff;
  position:fixed;inset:0;z-index:99999;display:grid;place-items:center;
  background:linear-gradient(160deg,#22314f 0%,#34476b 100%);
  animation:hfi-out .4s cubic-bezier(.4,0,.2,1) 1.6s both;cursor:pointer;will-change:opacity;
  -webkit-font-smoothing:antialiased}
.hfi.hfi-skip{animation:none;opacity:0;visibility:hidden;transition:opacity .25s linear}
.hfi svg.logo{width:min(84vw,440px);height:auto;display:block;overflow:visible}
.hfi .hA{fill:var(--a)} .hfi .hB{fill:var(--b)} .hfi .wm{fill:var(--ink)} .hfi .it{fill:var(--b)}
.hfi .tag{fill:var(--muted);font:500 12.5px system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
@keyframes hfi-out{to{opacity:0;visibility:hidden}}
@media (prefers-reduced-motion:reduce){.hfi{display:none}}

/* Option A: the grip locks */
.hfi-a .glow{opacity:0;transform-box:fill-box;transform-origin:center}
.hfi-a .g0{stop-color:var(--glow);stop-opacity:.42} .hfi-a .g1{stop-color:var(--glow);stop-opacity:0}
.hfi-a .spark{fill:var(--spark);opacity:0;transform-box:fill-box;transform-origin:center}
.hfi-a .hA{animation:hfi-dropA .5s cubic-bezier(.22,1,.36,1) .02s both}
.hfi-a .hB{animation:hfi-dropB .5s cubic-bezier(.22,1,.36,1) .02s both}
.hfi-a .glow{animation:hfi-glow .55s cubic-bezier(.2,.7,.2,1) .44s both}
.hfi-a .spark{animation:hfi-spark .38s ease-out .46s both}
.hfi-a .word{animation:hfi-slide .5s cubic-bezier(.22,1,.36,1) .5s both}
.hfi-a .tag{animation:hfi-fade .35s ease-out .72s both}
@keyframes hfi-dropA{from{transform:translateY(-44px);opacity:0}45%{opacity:1}to{transform:none;opacity:1}}
@keyframes hfi-dropB{from{transform:translateY(44px);opacity:0}45%{opacity:1}to{transform:none;opacity:1}}
@keyframes hfi-glow{from{opacity:0;transform:scale(.55)}30%{opacity:1}to{opacity:0;transform:scale(1.3)}}
@keyframes hfi-spark{from{opacity:0;transform:scaleY(.1)}35%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(1)}}
@keyframes hfi-slide{from{transform:translateX(-34px);opacity:0}to{transform:none;opacity:1}}
@keyframes hfi-fade{from{opacity:0}to{opacity:1}}

/* Option B: connected (traced, filled, name rises) */
.hfi-b .hA,.hfi-b .hB{stroke-width:1.6;stroke-linejoin:miter;stroke-dasharray:1;stroke-dashoffset:0;fill-opacity:1;stroke-opacity:0}
.hfi-b .hA{stroke:var(--a)} .hfi-b .hB{stroke:var(--b)}
.hfi-b .hA,.hfi-b .hB{animation:hfi-draw .6s cubic-bezier(.65,0,.35,1) .02s both,hfi-fillin .32s ease-out .5s both}
.hfi-b .wmg{transform-box:view-box;animation:hfi-rise .45s cubic-bezier(.22,1,.36,1) .6s both}
.hfi-b .tag{animation:hfi-fade .3s ease-out .78s both}
@keyframes hfi-draw{from{stroke-dashoffset:1;stroke-opacity:1;fill-opacity:0}to{stroke-dashoffset:0;stroke-opacity:1;fill-opacity:0}}
@keyframes hfi-fillin{from{fill-opacity:0;stroke-opacity:1}to{fill-opacity:1;stroke-opacity:0}}
@keyframes hfi-rise{from{transform:translateY(40px);opacity:0}to{transform:none}}

/* Option C: locked in (mark turns, light sweep) */
.hfi-c .mark{transform-box:view-box;transform-origin:50px 50px;animation:hfi-turn .6s cubic-bezier(.22,1,.36,1) .02s both}
.hfi-c .s0{stop-color:#fff;stop-opacity:0} .hfi-c .s1{stop-color:#fff;stop-opacity:.7}
.hfi-c .sweep{transform:translateX(470px);animation:hfi-sweep .52s cubic-bezier(.4,0,.35,1) .6s both}
.hfi-c .wmg{animation:hfi-fadeR .4s cubic-bezier(.22,1,.36,1) .3s both,hfi-lit .3s ease-out .78s forwards}
.hfi-c .tag{animation:hfi-fade .3s ease-out .75s both}
@keyframes hfi-turn{from{transform:rotate(-90deg) scale(.8);opacity:0}40%{opacity:1}to{transform:none;opacity:1}}
@keyframes hfi-fadeR{from{transform:translateX(10px);opacity:0}to{transform:none;opacity:.42}}
@keyframes hfi-lit{from{opacity:.42}to{opacity:1}}
@keyframes hfi-sweep{from{transform:translateX(0)}to{transform:translateX(470px)}}
