/* Shared motion layer — Jamin Cassidy portfolio */
.m-progress{position:fixed;top:0;left:0;height:2px;width:100%;background:var(--accent,#4E7A5C);transform-origin:0 50%;transform:scaleX(0);z-index:9998;pointer-events:none}
.m-word{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.12em;margin-bottom:-.12em}
.m-word>span{display:inline-block;transform:translateY(110%);transition:transform 1s var(--ease,cubic-bezier(.16,1,.3,1));transition-delay:calc(var(--i,0)*45ms)}
.m-split.in .m-word>span,.in .m-split .m-word>span{transform:none}
.m-clip{clip-path:inset(0 0 100% 0);transition:clip-path 1.2s var(--ease,cubic-bezier(.16,1,.3,1))}
.m-clip.in{clip-path:inset(0 0 0 0)}
.m-clip img,.m-clip video{transform:scale(1.12);transition:transform 1.6s var(--ease,cubic-bezier(.16,1,.3,1))}
.m-clip.in img,.m-clip.in video{transform:scale(1)}
.m-mag{transition:transform .5s var(--ease,cubic-bezier(.16,1,.3,1));will-change:transform}
.m-line{position:relative}
.m-line::after{content:'';position:absolute;left:0;bottom:-6px;height:1px;width:100%;background:currentColor;opacity:.35;transform:scaleX(0);transform-origin:0 50%;transition:transform 1s var(--ease,cubic-bezier(.16,1,.3,1))}
.in .m-line::after,.m-line.in::after{transform:scaleX(1)}
/* page transition veil */
.m-veil{position:fixed;inset:0;background:var(--s0,#F0EDE6);z-index:9997;pointer-events:none;opacity:0;transition:opacity .35s ease}
.m-veil.on{opacity:1}
/* splash (home, once per session) */
.m-splash{position:fixed;inset:0;z-index:99999;background:var(--s5,#16201A);display:flex;align-items:center;justify-content:center;transition:transform 1s var(--ease,cubic-bezier(.16,1,.3,1)),opacity .4s ease .7s}
.m-splash svg{width:84px;height:auto;overflow:visible}
.m-splash path{fill:none;stroke:#F0EDE6;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:m-draw 1.5s cubic-bezier(.65,0,.35,1) forwards}
.m-splash path.c{stroke:#7FB08E;animation-delay:.25s}
.m-splash.fill path{fill:#F0EDE6;transition:fill .5s ease}
.m-splash.fill path.c{fill:#4E7A5C}
.m-splash.out{transform:translateY(-100%);opacity:0}
@keyframes m-draw{to{stroke-dashoffset:0}}
/* VP motion stage */
.vp-motion{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,5vw,72px);align-items:center;background:#00313C;color:#F6F8F9;border-radius:6px;padding:clamp(28px,5vw,64px);margin:40px 0 8px;overflow:hidden;position:relative}
.vp-motion h3{font-family:var(--serif);font-weight:400;font-size:clamp(24px,3vw,38px);line-height:1.15;margin:8px 0 14px}
.vp-motion p{color:#A4BDBA;line-height:1.65;font-size:16px;max-width:46ch}
.vp-motion .vp-k{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#7092B4}
.vp-motion ul{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}
.vp-motion li{font-size:12px;letter-spacing:.06em;border:1px solid rgba(164,189,186,.35);color:#A4BDBA;padding:5px 11px;border-radius:99px}
.vp-phone{justify-self:center;width:min(100%,300px);aspect-ratio:9/16;border-radius:30px;padding:9px;background:#0b1f26;box-shadow:0 30px 70px rgba(0,0,0,.45),inset 0 0 0 1px rgba(255,255,255,.08);position:relative}
.vp-phone video{width:100%;height:100%;object-fit:cover;border-radius:22px;display:block;background:#fff}
.vp-toggle{position:absolute;right:18px;bottom:18px;width:34px;height:34px;border-radius:50%;background:rgba(0,49,60,.78);color:#fff;font-size:12px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.3);cursor:pointer}
@media(max-width:760px){.vp-motion{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){
 .m-word>span{transform:none!important;transition:none!important}
 .m-clip{clip-path:none!important;transition:none!important}
 .m-clip img,.m-clip video{transform:none!important}
 .m-progress,.m-splash,.m-veil{display:none!important}
 .m-line::after{transform:scaleX(1);transition:none}
}
