:root{
  --night:#070F22; --navy:#0B1630; --panel:#0F1D3D; --panel2:#13254D;
  --gold:#E9B949; --gold-hi:#FFD77A; --sky:#7CC4F0;
  --text:#EAF0FA; --soft:#B7C4DC; --muted:#9FB0CC;
  --line:rgba(234,240,250,.12);
  --disp:'Big Shoulders Display',Impact,sans-serif;
  --body:'Instrument Sans',system-ui,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--night);color:var(--text);font-family:var(--body);overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:var(--gold)}a:hover{color:var(--gold-hi)}
img{max-width:100%}
.mono{font-family:var(--mono)}
.disp{font-family:var(--disp)}
.wrap{max-width:1200px;margin:0 auto}
.rich b,.rich strong{color:var(--text);font-weight:600}
.rich p,.rich div{margin:0}

@keyframes rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes radar{0%{transform:scale(.6);opacity:.7}100%{transform:scale(1.35);opacity:0}}
@keyframes sweep{to{transform:rotate(360deg)}}
@keyframes fly{0%{transform:translateX(-12vw)}50%{transform:translateX(50vw) translateY(-10px)}100%{transform:translateX(112vw)}}
@keyframes blink{0%,100%{opacity:.18}50%{opacity:1;box-shadow:0 0 14px var(--gold)}}
@keyframes drift{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes shine{0%{transform:translateX(-120%) skewX(-20deg)}100%{transform:translateX(260%) skewX(-20deg)}}
@keyframes starpulse{0%,100%{opacity:.25}50%{opacity:.9}}

.rise{animation:rise .9s cubic-bezier(.2,.8,.2,1) both}
.d1{animation-delay:.1s}.d2{animation-delay:.25s}.d3{animation-delay:.4s}.d4{animation-delay:.55s}.d5{animation-delay:.7s}
.reveal{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.2,.8,.2,1),transform .8s cubic-bezier(.2,.8,.2,1)}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.reveal{opacity:1;transform:none}}

/* nav */
.nav{position:sticky;top:0;z-index:20;background:rgba(7,15,34,.8);backdrop-filter:blur(12px);border-bottom:1px solid rgba(234,240,250,.08)}
.nav-in{max-width:1200px;margin:0 auto;padding:14px 24px;display:flex;align-items:center;justify-content:space-between;gap:20px}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--text)}
.brand-mark{width:44px;height:44px;border-radius:12px;background:var(--gold);color:var(--navy);display:flex;align-items:center;justify-content:center;font:900 22px var(--disp)}
.navlinks{display:flex;gap:26px;flex-wrap:wrap}
.navlink{color:var(--soft);text-decoration:none;font-size:14px;padding:10px 4px;position:relative}
.navlink::after{content:'';position:absolute;left:0;bottom:4px;height:2px;width:0;background:var(--gold);transition:width .3s}
.navlink:hover{color:var(--text)}.navlink:hover::after{width:100%}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 22px;border-radius:999px;font:600 15px var(--body);text-decoration:none;transition:transform .25s,box-shadow .25s,background .25s;position:relative;overflow:hidden;border:0;cursor:pointer}
.btn:hover{transform:translateY(-3px)}
.btn-gold{background:var(--gold);color:var(--navy)}
.btn-gold:hover{color:var(--navy);box-shadow:0 12px 30px -8px rgba(233,185,73,.7)}
.btn-gold.shine::after{content:'';position:absolute;top:0;left:0;width:40%;height:100%;background:rgba(255,255,255,.45);animation:shine 3.2s ease-in-out infinite}
.btn-ghost{border:1px solid rgba(234,240,250,.3);color:var(--text);background:transparent}
.btn-ghost:hover{color:var(--text);background:rgba(234,240,250,.08)}

/* hero */
.hero{position:relative;padding:88px 24px 120px}
.hero-glow{position:absolute;inset:0;background:radial-gradient(1100px 600px at 75% 30%,rgba(30,62,122,.55),transparent 70%);pointer-events:none}
.star{position:absolute;width:2px;height:2px;border-radius:50%;background:var(--text);animation:starpulse 4s ease-in-out infinite}
.hero-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:56px;align-items:center;position:relative}
.badge{display:inline-flex;align-self:flex-start;align-items:center;gap:10px;padding:8px 14px;border:1px solid rgba(124,196,240,.35);border-radius:999px;font:12px var(--mono);letter-spacing:.14em;color:var(--sky)}
.badge i{width:8px;height:8px;border-radius:50%;background:#5BE38F;box-shadow:0 0 10px #5BE38F}
.hero h1{margin:0;font:900 clamp(56px,8vw,112px)/.9 var(--disp);text-transform:uppercase}
.hero h1 span{color:var(--gold)}
.roles{display:flex;align-items:center;gap:14px;font-size:22px;flex-wrap:wrap}
.roles-win{display:inline-block;height:34px;overflow:hidden}
.roles-track{display:flex;flex-direction:column;transition:transform .6s cubic-bezier(.7,0,.2,1)}
.roles-track span{height:34px;line-height:34px;font-weight:600;white-space:nowrap}
.hero-text{margin:0;max-width:540px;font-size:17px;line-height:1.7;color:var(--soft)}
.photo-wrap{position:relative;width:min(380px,78vw);aspect-ratio:1/1;margin:0 auto}
.ring{position:absolute;inset:-34px;border-radius:50%;border:1px solid rgba(124,196,240,.45);animation:radar 3.6s ease-out infinite}
.ring.r2{animation-delay:1.2s}.ring.r3{animation-delay:2.4s}
.sweep{position:absolute;inset:-60px;border-radius:50%;background:conic-gradient(from 0deg,rgba(233,185,73,.28),rgba(233,185,73,0) 18%,transparent);animation:sweep 6s linear infinite;pointer-events:none}
.photo{position:absolute;inset:0;border-radius:50%;overflow:hidden;border:3px solid var(--gold);box-shadow:0 30px 80px -20px rgba(0,0,0,.8),0 0 0 10px rgba(233,185,73,.08);transition:transform .2s ease-out}
.photo img{width:100%;height:100%;object-fit:cover;object-position:50% 18%;display:block}
.hud{position:absolute;border-radius:14px;padding:12px 16px;font:12px/1.5 var(--mono);animation:drift 5s ease-in-out infinite}
.hud b{display:block;font-size:18px}
.hud-l{left:-28px;bottom:34px;background:var(--panel);border:1px solid rgba(124,196,240,.4)}
.hud-l small{color:var(--sky);letter-spacing:.12em}
.hud-r{right:-22px;top:30px;background:var(--gold);color:var(--navy);font-weight:600;animation-delay:1.5s}
.flight{position:absolute;left:0;right:0;bottom:18px;height:80px;pointer-events:none;overflow:hidden}
.plane{position:absolute;left:0;top:12px;animation:fly 16s linear infinite}
.trail{position:absolute;right:100%;top:50%;width:220px;height:2px;background:linear-gradient(90deg,transparent,rgba(234,240,250,.55));transform:translateY(-50%)}
.lights{display:flex;justify-content:center;gap:28px;padding:8px 24px 0;flex-wrap:wrap}
.light{width:10px;height:10px;border-radius:50%;background:var(--gold);animation:blink 2.4s ease-in-out infinite}

/* sections */
section{padding:96px 24px}
.alt{background:var(--navy)}
.eyebrow{font:13px var(--mono);letter-spacing:.16em;color:var(--gold)}
.h2{margin:0;font:900 clamp(44px,5vw,68px)/.95 var(--disp);text-transform:uppercase;white-space:pre-line}
.sec-head{display:flex;flex-direction:column;gap:14px}
.data{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.data div{border:1px solid var(--line);border-radius:20px;padding:26px;display:flex;flex-direction:column;gap:8px}
.data small{font:12px var(--mono);letter-spacing:.14em;color:var(--sky)}
.data strong{font:800 40px/1.05 var(--disp)}
.profile{display:flex;flex-wrap:wrap;gap:56px}
.profile-l{flex:1 1 300px}
.profile-r{flex:999 1 460px;min-width:0;display:flex;flex-direction:column;gap:20px;font-size:18px;line-height:1.75;color:var(--soft)}
.chips{display:flex;gap:10px;flex-wrap:wrap}
.chip{font:13px var(--mono);padding:8px 14px;border-radius:999px;background:rgba(124,196,240,.1);color:var(--sky)}
.chip:last-child{background:rgba(233,185,73,.12);color:var(--gold)}

.tabs{display:flex;gap:10px;flex-wrap:wrap}
.tab{min-height:46px;padding:0 20px;border-radius:999px;border:1px solid rgba(234,240,250,.2);background:transparent;color:var(--soft);font:600 14px var(--body);cursor:pointer;transition:all .25s}
.tab:hover{border-color:var(--gold);color:var(--text)}
.tab.on{background:var(--gold);border-color:var(--gold);color:var(--navy)}
.timeline{position:relative;padding-left:36px;display:flex;flex-direction:column;gap:22px}
.timeline::before{content:'';position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:repeating-linear-gradient(to bottom,rgba(234,240,250,.35) 0 10px,transparent 10px 20px)}
.tl{position:relative;animation:rise .6s cubic-bezier(.2,.8,.2,1) both}
.tl::before{content:'';position:absolute;left:-36px;top:26px;width:20px;height:20px;border-radius:50%;background:var(--navy);border:3px solid var(--gold)}
.tl-card{background:var(--panel);border:1px solid rgba(234,240,250,.1);border-radius:20px;padding:24px 26px;display:flex;flex-wrap:wrap;gap:8px 24px;justify-content:space-between}
.tl-main{flex:1 1 320px;display:flex;flex-direction:column;gap:8px}
.tl-title{font-size:20px;font-weight:600}
.tl-org{font-size:15px;color:var(--sky)}
.tl-desc{font-size:15px;line-height:1.65;color:var(--muted)}
.tl-when{font:13px var(--mono);color:var(--gold);white-space:nowrap}

.skills{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.skill{width:100%;text-align:left;cursor:pointer;background:var(--panel);border:1px solid rgba(124,196,240,.18);border-radius:18px;padding:22px;color:var(--text);font-family:var(--body);transition:transform .3s,border-color .3s,background .3s}
.skill:hover{transform:translateY(-4px);border-color:var(--sky)}
.skill.open{background:var(--panel2);border-color:var(--gold)}
.skill-row{display:flex;align-items:center;gap:16px}
.skill-code{width:44px;height:44px;flex:none;border-radius:12px;background:rgba(124,196,240,.12);color:var(--sky);display:flex;align-items:center;justify-content:center;font:600 13px var(--mono)}
.skill-name{flex:1;font-size:18px;font-weight:600}
.chev{transition:transform .3s}
.skill.open .chev{transform:rotate(45deg)}
.skill-detail{display:none;margin-top:14px;padding-top:14px;border-top:1px solid var(--line);font-size:15px;line-height:1.65;color:var(--soft)}
.skill.open .skill-detail{display:block;animation:rise .4s both}

.projects{display:flex;flex-direction:column;gap:24px}
.proj{position:relative;display:flex;flex-wrap:wrap;gap:36px;align-items:center;text-decoration:none;color:var(--text);background:linear-gradient(135deg,var(--panel),var(--panel2));border:1px solid rgba(233,185,73,.35);border-radius:28px;padding:36px;overflow:hidden;transition:transform .4s,box-shadow .4s,border-color .4s}
.proj:hover{color:var(--text);transform:translateY(-6px);border-color:var(--gold);box-shadow:0 30px 60px -24px rgba(233,185,73,.45)}
.proj-logo{width:160px;height:160px;object-fit:contain;transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.proj:hover .proj-logo{transform:rotate(-8deg) scale(1.06)}
.proj-body{flex:1 1 320px;display:flex;flex-direction:column;gap:14px}
.proj-label{font:12px var(--mono);letter-spacing:.14em;color:var(--sky)}
.proj-name{font:900 clamp(36px,4vw,54px)/1 var(--disp);text-transform:uppercase}
.proj-desc{font-size:16px;line-height:1.7;color:var(--soft);max-width:560px}
.proj .arrow{transition:transform .3s}
.proj:hover .arrow{transform:translate(4px,-4px)}

.contact{text-align:center;display:flex;flex-direction:column;align-items:center;gap:22px;max-width:900px;margin:0 auto}
.contact .h2{font-size:clamp(48px,7vw,96px)}
.contact-text{margin:0;font-size:18px;color:var(--soft);max-width:560px;line-height:1.7}
.contact-btns{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;padding-top:8px}
footer{border-top:1px solid rgba(234,240,250,.08);padding:28px 24px}
.foot{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.admin-pill{position:fixed;right:18px;bottom:18px;z-index:30}

@media (max-width:900px){
  .hero-grid{grid-template-columns:minmax(0,1fr);gap:72px}
  .data{grid-template-columns:minmax(0,1fr)}
  .navlinks{display:none}
}
@media (max-width:640px){
  .skills{grid-template-columns:minmax(0,1fr)}
  .proj{padding:24px}
  .nav-cta{display:none}
}

/* ============ SCROLL EXPERIENCE ============ */
/* varian animasi muncul */
.reveal[data-anim="left"]{transform:translateX(-60px)}
.reveal[data-anim="right"]{transform:translateX(60px)}
.reveal[data-anim="zoom"]{transform:scale(.88);filter:blur(8px)}
.reveal[data-anim="tilt"]{transform:perspective(1200px) rotateX(24deg) translateY(60px);transform-origin:50% 100%}
.reveal[data-anim="wipe"]{transform:none;clip-path:inset(0 100% 0 0)}
.reveal{transition:opacity .9s cubic-bezier(.2,.8,.2,1),transform 1s cubic-bezier(.2,.8,.2,1),filter .9s,clip-path 1.1s cubic-bezier(.7,0,.2,1);transition-delay:calc(var(--i,0) * 90ms)}
.reveal.in{opacity:1;transform:none;filter:none;clip-path:inset(0 0 0 0)}

/* judul dipecah per huruf */
.split .w{display:inline-block;white-space:nowrap}
.split .ch{display:inline-block;opacity:0;transform:translateY(.7em) rotateX(-80deg);transform-origin:50% 100%;transition:opacity .6s,transform .8s cubic-bezier(.2,.8,.2,1);transition-delay:calc(var(--c) * 28ms)}
.split.in .ch{opacity:1;transform:none}

/* angka besar di belakang judul */
.ghost-num{position:absolute;right:-10px;top:-70px;font:900 clamp(140px,22vw,300px)/1 var(--disp);color:transparent;-webkit-text-stroke:1px rgba(124,196,240,.14);pointer-events:none;user-select:none;will-change:transform}
section{position:relative}
section>.wrap,section>.contact{position:relative;z-index:1}

/* altimeter: progres scroll */
.alti{position:fixed;right:22px;top:50%;transform:translateY(-50%);z-index:25;display:flex;align-items:center;gap:12px;pointer-events:none}
.alti-rail{position:relative;width:2px;height:240px;background:rgba(234,240,250,.12);border-radius:2px}
.alti-fill{position:absolute;left:0;top:0;width:100%;height:100%;background:linear-gradient(var(--sky),var(--gold));transform-origin:top;transform:scaleY(0);border-radius:2px}
.alti-plane{position:absolute;left:50%;top:0;width:26px;height:26px;margin:-13px 0 0 -13px;color:var(--gold);filter:drop-shadow(0 0 8px rgba(233,185,73,.7))}
.alti-tick{position:absolute;left:-4px;width:10px;height:2px;background:rgba(234,240,250,.3);transition:background .3s,width .3s}
.alti-tick.on{background:var(--gold);width:14px}
.alti-label{font:600 11px var(--mono);letter-spacing:.14em;color:var(--sky);writing-mode:vertical-rl;transform:rotate(180deg);min-height:120px;text-align:center}
.topbar{position:fixed;left:0;top:0;height:3px;width:100%;z-index:30;background:linear-gradient(90deg,var(--sky),var(--gold));transform-origin:left;transform:scaleX(0);display:none}
@media (max-width:900px){.alti{display:none}.topbar{display:block}}

/* awan saat menembus dari hero */
.clouds{position:relative;height:0;z-index:2;pointer-events:none}
.cloud{position:absolute;border-radius:50%;background:radial-gradient(closest-side,rgba(183,196,220,.16),transparent);filter:blur(6px);will-change:transform}

/* garis waktu yang tergambar saat scroll */
.timeline::after{content:'';position:absolute;left:9px;top:6px;width:2px;height:calc(100% - 12px);background:linear-gradient(var(--gold),var(--sky));transform-origin:top;transform:scaleY(var(--draw,0));box-shadow:0 0 12px rgba(233,185,73,.6)}
.tl.lit::before{background:var(--gold);box-shadow:0 0 0 6px rgba(233,185,73,.18),0 0 18px var(--gold);transition:background .4s,box-shadow .4s}

/* pita teks bergerak sesuai scroll */
.ribbon{overflow:hidden;border-block:1px solid var(--line);padding:22px 0;background:var(--navy)}
.ribbon-track{display:flex;gap:48px;white-space:nowrap;font:900 clamp(34px,5vw,64px)/1 var(--disp);text-transform:uppercase;will-change:transform}
.ribbon-track span{color:transparent;-webkit-text-stroke:1px rgba(234,240,250,.4)}
.ribbon-track span:nth-child(even){color:var(--gold);-webkit-text-stroke:0}

/* sorotan mengikuti kursor di kartu proyek */
.proj::before{content:'';position:absolute;inset:0;background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),rgba(233,185,73,.16),transparent 60%);opacity:0;transition:opacity .3s;pointer-events:none}
.proj:hover::before{opacity:1}

@media (prefers-reduced-motion:reduce){.split .ch{opacity:1;transform:none}.reveal{clip-path:none!important;filter:none!important}}
.reveal.in:hover{transition-delay:0s}
.skill.reveal.in:hover{transform:translateY(-4px)}
.proj.reveal.in:hover{transform:translateY(-6px)}
html,body{overflow-x:clip}
#stars{position:absolute;inset:0;pointer-events:none}
.clouds{overflow:visible;width:100%}
