/* Animations for argine.lol (loaded after style.css). Everything here is switched off by prefers-reduced-motion. */

/* ===== Intro ===== */
#intro{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;overflow:hidden;pointer-events:auto;
  animation:introGone 0s linear 3.45s forwards}
#intro.skip{display:none}
.cur{position:absolute;left:0;width:100%;height:50.5%;background:#070505;z-index:0}
.cur-t{top:0;border-bottom:2px solid var(--hot);animation:curT .95s cubic-bezier(.77,0,.18,1) 2.45s forwards}
.cur-b{bottom:0;border-top:2px solid var(--hot);animation:curB .95s cubic-bezier(.77,0,.18,1) 2.45s forwards}
.intro-core{position:relative;z-index:1;display:grid;justify-items:center;gap:22px;animation:coreOut .4s ease 2.2s forwards}
.intro-stage{position:relative;display:grid;place-items:center;width:min(58vw,260px);aspect-ratio:1}
.intro-logo{width:78%;border-radius:22px;animation:logoIn 1.1s cubic-bezier(.2,.9,.2,1) .15s both,logoGlitch .55s steps(2) 1.45s both;box-shadow:0 0 70px rgba(255,0,0,.5)}
.ring{position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(from 0deg,transparent 0 55%,#ff0000 100%);
  -webkit-mask:radial-gradient(circle,transparent 66%,#000 67%);mask:radial-gradient(circle,transparent 66%,#000 67%);
  animation:spin 1.3s linear infinite,fadeIn .5s ease both}
.ring.r2{inset:7%;animation-direction:reverse;animation-duration:2s;opacity:.55}
.intro-name{font:800 clamp(16px,3.4vw,26px) Bricolage;text-transform:uppercase;color:#fff;letter-spacing:.3em;padding-left:.3em;animation:nameIn 1.2s cubic-bezier(.2,.8,.2,1) .5s both}
.intro-bar{width:min(54vw,240px);height:3px;background:var(--line);border-radius:3px;overflow:hidden}
.intro-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#ff0000,#ff7a7a);box-shadow:0 0 14px #f00;animation:fill 1.9s cubic-bezier(.6,0,.2,1) .25s forwards}
.intro-scan{position:absolute;left:0;width:100%;height:2px;background:linear-gradient(90deg,transparent,#ff0000,transparent);box-shadow:0 0 24px 4px rgba(255,0,0,.6);animation:scan 1.7s ease-in-out .3s both;z-index:2;pointer-events:none}
.intro-skip{position:absolute;bottom:22px;left:0;right:0;text-align:center;z-index:1;font:600 11px Pixelify;letter-spacing:3px;text-transform:uppercase;color:var(--muted);opacity:0;animation:fadeIn .6s ease .9s forwards,coreOut .3s ease 2.2s forwards}
@keyframes introGone{to{visibility:hidden;pointer-events:none}}
@keyframes curT{to{transform:translateY(-101%)}}
@keyframes curB{to{transform:translateY(101%)}}
@keyframes coreOut{to{opacity:0;transform:scale(1.18);filter:blur(6px)}}
@keyframes logoIn{from{opacity:0;transform:scale(.55) rotate(-8deg);filter:blur(14px)}to{opacity:1;transform:none;filter:none}}
@keyframes logoGlitch{
  0%{transform:translate(0)}20%{transform:translate(-6px,2px) skewX(6deg);filter:drop-shadow(6px 0 #ff0000) drop-shadow(-6px 0 #fff)}
  40%{transform:translate(5px,-2px) skewX(-6deg);filter:drop-shadow(-6px 0 #ff0000) drop-shadow(6px 0 #fff)}
  60%{transform:translate(-3px,0);filter:none}80%{transform:translate(4px,1px) skewX(3deg);filter:drop-shadow(4px 0 #ff0000)}100%{transform:none;filter:none}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes nameIn{from{opacity:0;letter-spacing:.9em;filter:blur(8px)}to{opacity:1;letter-spacing:.3em;filter:none}}
@keyframes fill{to{width:100%}}
@keyframes scan{from{top:-2%}to{top:102%}}

/* ===== Hero entrance (starts when the intro is done; --base becomes 0s if the intro is skipped) ===== */
body{--base:2.55s}
body.skipped{--base:0s}
.rise{animation:rise 1s cubic-bezier(.2,.8,.2,1) calc(var(--base) + var(--i,0) * .13s) both}
@keyframes rise{from{opacity:0;transform:translateY(34px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
.ch{display:inline-block;animation:chIn .9s cubic-bezier(.2,.8,.2,1) calc(var(--base) + var(--k) * .06s) both}
@keyframes chIn{from{opacity:0;transform:translateY(70%) rotateX(-80deg);filter:blur(10px)}to{opacity:1;transform:none;filter:none}}
h1{perspective:700px}
h1 .g{position:relative;display:inline-block;
  background:linear-gradient(100deg,#ff0000 0%,#ff0000 35%,#ffb3b3 50%,#ff0000 65%,#ff5a5a 100%);background-size:250% 100%;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:rise 1s cubic-bezier(.2,.8,.2,1) calc(var(--base) + .45s) both,shimmer 4.5s linear calc(var(--base) + 1.4s) infinite}
@keyframes shimmer{from{background-position:120% 0}to{background-position:-130% 0}}
h1 .g::before,h1 .g::after{content:attr(data-t);position:absolute;left:0;top:0;pointer-events:none;opacity:0;background:none;-webkit-text-fill-color:currentColor}
h1 .g::before{color:#ffffff}
h1 .g::after{color:#ff0000;mix-blend-mode:screen}
h1 .g.glitch::before{opacity:.9;animation:gl1 .42s steps(2) both}
h1 .g.glitch::after{opacity:.9;animation:gl2 .42s steps(2) both}
@keyframes gl1{0%{transform:translate(-5px,0);clip-path:inset(10% 0 60% 0)}25%{transform:translate(6px,-2px);clip-path:inset(55% 0 12% 0)}50%{transform:translate(-4px,2px);clip-path:inset(30% 0 40% 0)}75%{transform:translate(5px,0);clip-path:inset(70% 0 5% 0)}100%{transform:none;clip-path:inset(0 0 100% 0)}}
@keyframes gl2{0%{transform:translate(6px,0);clip-path:inset(60% 0 8% 0)}25%{transform:translate(-6px,2px);clip-path:inset(8% 0 62% 0)}50%{transform:translate(5px,-2px);clip-path:inset(42% 0 30% 0)}75%{transform:translate(-5px,0);clip-path:inset(15% 0 55% 0)}100%{transform:none;clip-path:inset(0 0 100% 0)}}

/* Logo: slow spinning light ring + mouse tilt (tilt is set by fx.js on .logo-stage) */
.logo-col{justify-self:end;width:100%;max-width:420px;perspective:900px;position:relative}
.logo-stage{position:relative;transform-style:preserve-3d;transition:transform .25s ease-out}
.logo-stage::before{content:"";position:absolute;inset:-14px;border-radius:40px;z-index:-1;filter:blur(2px);
  background:conic-gradient(from 0deg,transparent 0 40%,#ff0000 70%,transparent 100%);animation:spin 5s linear infinite}
.logo-stage::after{content:"";position:absolute;inset:-14px;border-radius:40px;z-index:-2;filter:blur(30px);background:rgba(255,0,0,.28);animation:pulse 3.2s ease-in-out infinite}
@keyframes pulse{50%{opacity:.35;transform:scale(1.06)}}
.hero-logo{justify-self:auto;position:relative}

/* ===== Page-wide effects ===== */
#glow{position:fixed;left:0;top:0;width:560px;height:560px;margin:-280px 0 0 -280px;border-radius:50%;pointer-events:none;z-index:0;
  background:radial-gradient(circle,rgba(255,0,0,.17),transparent 62%);will-change:transform}
#prog{position:fixed;top:0;left:0;height:3px;width:100%;transform-origin:left;transform:scaleX(0);z-index:60;background:linear-gradient(90deg,#ff0000,#ff6b6b);box-shadow:0 0 14px #f00}
nav{transition:background .3s,box-shadow .3s}
nav .nav{transition:height .3s}
nav.scrolled{background:rgba(7,5,5,.92);box-shadow:0 8px 30px rgba(0,0,0,.5)}
nav.scrolled .nav{height:50px}
.btn{position:relative;overflow:hidden}
.btn::after{content:"";position:absolute;top:0;left:-130%;width:55%;height:100%;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.38),transparent);transform:skewX(-20deg);transition:left .65s ease}
.btn:hover::after{left:150%}
.btn.hot{animation:btnPulse 2.8s ease-in-out infinite}
@keyframes btnPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,0,0,.55)}50%{box-shadow:0 0 0 12px rgba(255,0,0,0)}}
.btn.hot:hover{animation:none}
.marq:hover div{animation-play-state:paused}

/* ===== Scroll reveals ===== */
.reveal{transition:opacity .8s cubic-bezier(.2,.8,.2,1) var(--d,0s),transform .8s cubic-bezier(.2,.8,.2,1) var(--d,0s),filter .8s var(--d,0s)}
.reveal:not(.in){filter:blur(6px)}
.label.reveal{transform:none;filter:none;clip-path:inset(0 100% 0 0);transition:clip-path .9s steps(22) var(--d,0s),opacity .3s}
.label.reveal.in{clip-path:inset(0 0 0 0)}
h2.reveal::after{content:"";display:block;height:4px;width:0;margin-top:14px;background:var(--hot);box-shadow:0 0 14px rgba(255,0,0,.8);transition:width .9s cubic-bezier(.2,.8,.2,1) .35s}
h2.reveal.in::after{width:84px}
.join h2::after{display:none}
.banner.reveal{opacity:1;transform:none;filter:none;clip-path:inset(0 100% 0 0 round 22px);transition:clip-path 1.2s cubic-bezier(.77,0,.18,1)}
.banner.reveal.in{clip-path:inset(0 0 0 0 round 22px)}
.banner img{transform:scale(1.12);transition:transform 1.8s cubic-bezier(.2,.8,.2,1)}
.banner.in img{transform:scale(1)}

/* ===== Cards: tilt + moving light (tilt set by fx.js) ===== */
.val{position:relative;overflow:hidden;transform-style:preserve-3d}
.val::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(255,0,0,.22),transparent 60%)}
.val:hover::before{opacity:1}
.val .n{transition:-webkit-text-stroke-color .3s,transform .4s cubic-bezier(.2,.8,.2,1)}
.val:hover .n{-webkit-text-stroke-color:var(--hot);transform:translateX(8px)}
.soon{transition:border-color .3s,background .3s}
.soon:hover{border-color:var(--hot);background:rgba(255,0,0,.05)}

/* Join section: moving light */
.join::before{content:"";position:absolute;inset:-40%;pointer-events:none;
  background:conic-gradient(from 0deg,transparent 0 60%,rgba(255,255,255,.18) 80%,transparent 100%);animation:spin 9s linear infinite}
.join>*{position:relative}

@media(max-width:860px){
  #glow{display:none}
  .logo-stage::before{inset:-8px}
}
@media(prefers-reduced-motion:reduce){
  #intro,#glow,#prog{display:none}
  .rise,.ch,h1 .g{animation:none!important;opacity:1;transform:none;filter:none}
  .reveal,.reveal:not(.in){filter:none}
  .banner.reveal,.label.reveal{clip-path:none}
  .banner img{transform:none}
  h2.reveal::after{width:84px}
}

/* ===== Projects ===== */
.page-head{padding:56px 0 8px}
.page-head h1{font-size:clamp(44px,8vw,96px);margin:8px 0 14px}
.page-head .sub{margin:0 0 26px;max-width:620px}
.filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:30px}
.chipf{cursor:pointer;font:700 14px Bricolage;color:var(--muted);background:var(--panel);border:2px solid var(--line);border-radius:99px;padding:8px 16px;transition:.2s}
.chipf span{opacity:.6;margin-left:4px}
.chipf:hover{color:var(--text);border-color:#4a2222}
.chipf.on{background:var(--hot);border-color:var(--hot);color:#fff}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:18px}
.pcard{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:10px;border:2px solid var(--line);border-radius:22px;background:var(--panel);padding:26px;transition:border-color .25s,transform .25s}
.pcard[hidden]{display:none}
.pcard:hover{border-color:var(--hot);transform:translateY(-6px)}
.pcard::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s;background:radial-gradient(240px circle at 80% 0%,rgba(255,0,0,.22),transparent 65%)}
.pcard:hover::before{opacity:1}
.ptop{display:flex;justify-content:space-between;align-items:center;gap:10px}
.pic{width:50px;height:50px;border-radius:14px;display:grid;place-items:center;font:800 26px Bricolage;color:#fff;background:linear-gradient(135deg,#ff0000,#7a0000);box-shadow:0 0 24px rgba(255,0,0,.35)}
.st{font:700 12px Bricolage;border-radius:99px;padding:4px 12px;border:2px solid var(--line);white-space:nowrap}
.st.rel{color:#4be08a;border-color:#1f9d55;background:rgba(75,224,138,.08)}
.st.dev{color:#ffc83d;border-color:#c98a00;background:rgba(255,200,61,.07)}
.ptype{font:600 11px Pixelify;letter-spacing:2px;text-transform:uppercase;color:var(--cyan);margin-top:6px}
.pcard h3{font:800 26px/1.05 Bricolage;letter-spacing:-.03em}
.pcard p{color:var(--muted);font-size:15px;flex:1}
.tech{font-size:13px;color:#d9baba;border-top:1px solid var(--line);padding-top:12px;margin-top:4px}
.pact{margin-top:4px}
.pnone{color:var(--muted);padding:30px 0}
.pjoin{padding:70px 0 10px}
.pfeat{display:grid;gap:18px;grid-template-columns:repeat(3,1fr);margin-bottom:22px}
.pfeat .pcard p{font-size:14px}
.sec-cta{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;border:2px dashed var(--line);border-radius:18px;padding:22px 26px;color:var(--muted);font-size:14px;transition:border-color .3s,background .3s}
.sec-cta:hover{border-color:var(--hot);background:rgba(255,0,0,.05)}
.sec-cta b{font:800 20px Bricolage;color:var(--text);text-transform:uppercase}
@media(max-width:860px){.pfeat{grid-template-columns:1fr}}

/* Projects: nothing yet */
.empty-proj{display:grid;justify-items:center;text-align:center;gap:12px;border:2px dashed var(--line);border-radius:26px;padding:64px 24px;margin:10px 0 10px;background:rgba(255,0,0,.03)}
.empty-proj h3{font:800 clamp(26px,4vw,40px) Bricolage;text-transform:uppercase;letter-spacing:-.03em}
.empty-proj p{color:var(--muted);max-width:460px;margin-bottom:10px}
.ep-icon{display:flex;gap:8px;margin-bottom:8px}
.ep-icon i{width:18px;height:18px;border-radius:4px;background:var(--hot);opacity:.25;animation:epb 1.8s ease-in-out infinite}
.ep-icon i:nth-child(2){animation-delay:.25s}.ep-icon i:nth-child(3){animation-delay:.5s}
@keyframes epb{50%{opacity:1;transform:translateY(-8px);box-shadow:0 0 18px rgba(255,0,0,.7)}}
.pic.img{width:50px;height:50px;border-radius:14px;object-fit:cover;background:none;padding:0;box-shadow:0 0 24px rgba(255,0,0,.35)}
