:root{--bg:#232326;--bg2:#2f2f33;--text:#f5f5f5;--muted:#a9a9b0;--light:#d9d9dd;--line:#46464c;--ease:cubic-bezier(.16,1,.3,1)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:linear-gradient(180deg,var(--bg),var(--bg2) 60%,var(--bg));color:var(--text);font-family:"Fira Code","JetBrains Mono","Consolas",monospace;font-size:14px;line-height:1.75;min-height:100vh;overflow-x:hidden}
::selection{background:#fff;color:var(--bg)}
a{color:var(--text);text-underline-offset:4px;transition:color .5s var(--ease),opacity .5s var(--ease)}
.c{color:var(--muted);font-style:normal}
.kw{color:#fff;font-weight:600}.fn{color:var(--light)}.key{color:var(--muted)}.str{color:#fff}
em{color:#fff;font-style:normal;border-bottom:1px dashed var(--muted)}
.tiny{font-size:12px;margin-top:16px}

/* loader */
.loader{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:100;transition:opacity 1s var(--ease),visibility 1s,transform 1s var(--ease)}
.loader-inner{display:flex;flex-direction:column;align-items:center;gap:14px}
.loader-logo{font-size:44px;font-weight:bold;animation:pulse 1.6s var(--ease) infinite}
.loader-text{color:var(--muted);font-size:12px}
.loader-bar{width:180px;height:2px;background:var(--line);overflow:hidden}
.loader-bar i{display:block;height:100%;width:100%;background:#fff;transform:translateX(-100%);animation:load 1.3s var(--ease) forwards}
@keyframes load{to{transform:none}}
@keyframes pulse{50%{transform:scale(1.08);opacity:.65}}
.ready .loader{opacity:0;visibility:hidden;transform:scale(1.04)}

.progress{position:fixed;top:0;left:0;height:2px;width:100%;background:#fff;transform-origin:0 50%;transform:scaleX(0);z-index:30}
.glow{position:fixed;top:0;left:0;width:520px;height:520px;margin:-260px 0 0 -260px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.07),transparent 65%);pointer-events:none;z-index:0;will-change:transform}

/* nav */
nav{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:18px 8vw;background:rgba(35,35,38,.75);backdrop-filter:blur(10px);z-index:20;transition:transform .9s var(--ease),background .6s var(--ease)}
nav.hide{transform:translateY(-110%)}
.logo{font-weight:bold;font-size:18px;text-decoration:none;color:#fff;display:inline-block;transition:transform .6s var(--ease)}
.logo .br{color:var(--muted);display:inline-block;transition:transform .6s var(--ease)}
.logo:hover{transform:scale(1.08)}
.logo:hover .br:first-child{transform:translateX(-5px)}
.logo:hover .br:last-child{transform:translateX(5px)}
.links a{position:relative;color:var(--muted);text-decoration:none;margin-left:26px;font-size:13px}
.links a:hover{color:#fff}
.links a::after{content:"";position:absolute;left:0;bottom:-3px;height:1px;width:100%;background:#fff;transform:scaleX(0);transform-origin:100% 50%;transition:transform .7s var(--ease)}
.links a:hover::after{transform:scaleX(1);transform-origin:0 50%}

main,footer{position:relative;z-index:1}
section{padding:100px 8vw 40px;max-width:1200px;margin:auto}

/* hero */
.hero{display:flex;align-items:center;justify-content:space-between;gap:50px;padding-top:150px;flex-wrap:wrap}
.hero h1{font-size:26px;font-weight:500;color:#fff;line-height:1.5}
.hero p{margin:0}
.ind{padding-left:30px;color:var(--light)}
.log{margin-top:30px!important;color:var(--muted)}
.line{opacity:0;transform:translateY(24px);filter:blur(8px);transition:opacity 1.3s var(--ease),transform 1.3s var(--ease),filter 1.3s var(--ease)}
.go .line{opacity:1;transform:none;filter:none}
.l1{transition-delay:.05s}.l2{transition-delay:.18s}.l3{transition-delay:.31s}.l4{transition-delay:.44s}.l5{transition-delay:.57s}.l6{transition-delay:.7s}.l7{transition-delay:.83s}.l8{transition-delay:.96s}
.photo-wrap{position:relative}
.photo{display:block;width:340px;height:340px;border-radius:50%;object-fit:cover;object-position:40% 42%;border:4px solid var(--light);will-change:transform;transition:box-shadow .8s var(--ease),filter .8s var(--ease)}
.photo:hover{box-shadow:0 0 0 10px rgba(255,255,255,.1),0 30px 70px rgba(0,0,0,.5);filter:brightness(1.07)}
.badge{position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);background:var(--bg);border:1px solid var(--line);padding:3px 14px;border-radius:20px;font-size:11px;color:var(--light);white-space:nowrap}
.badge i{display:inline-block;width:7px;height:7px;border-radius:50%;background:#fff;margin:0 4px 1px;animation:blink 1.6s ease-in-out infinite}
.caret{color:var(--muted);animation:blink 1.1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}

/* sections */
h2{position:relative;color:var(--light);font-size:18px;font-weight:500;margin-bottom:22px;padding-bottom:10px;border-bottom:1px solid var(--line)}
h2::after{content:"";position:absolute;left:0;bottom:-1px;height:1px;width:90px;background:#fff;transform:scaleX(0);transform-origin:0 50%;transition:transform 1.6s .3s var(--ease)}
.in>h2::after,.in h2::after{transform:scaleX(1)}
.two{display:grid;grid-template-columns:2fr 1fr;gap:56px}
p{color:var(--light);margin-bottom:14px}
.job{margin-bottom:18px;transition:transform .7s var(--ease),opacity 1.2s var(--ease),filter 1.2s var(--ease)}
.job b{display:block;color:#fff}.job span{color:var(--muted);font-size:12px}
.job.in:hover{transform:translateX(8px)}
.chips{display:flex;flex-wrap:wrap;gap:12px}
.chip{padding:5px 16px;border:1px solid var(--line);border-radius:30px;color:var(--light);font-size:13px;opacity:0;transform:translateY(16px) scale(.96);transition:opacity 1s var(--ease),transform 1s var(--ease),background .5s var(--ease),color .5s var(--ease),border-color .5s var(--ease);transition-delay:calc(var(--i)*70ms)}
.in .chip{opacity:1;transform:none}
.in .chip:hover{background:var(--light);color:var(--bg);border-color:var(--light);transform:translateY(-4px);transition-delay:0s}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:28px}
.card{position:relative;padding:26px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.02);transition:transform .9s var(--ease),opacity 1.2s var(--ease),filter 1.2s var(--ease),border-color .6s var(--ease),background .6s var(--ease),box-shadow .8s var(--ease)}
.card.in:hover{transform:translateY(-10px);border-color:var(--muted);background:rgba(255,255,255,.05);box-shadow:0 26px 50px rgba(0,0,0,.35)}
.card .idx{position:absolute;top:14px;right:20px;color:var(--line);font-size:30px;font-weight:bold;transition:color .6s var(--ease)}
.card:hover .idx{color:var(--muted)}
.card h3{color:#fff;font-size:17px;margin-bottom:8px}
.tech{color:var(--muted);font-size:12px}
.btn{display:inline-block;margin-top:14px;padding:4px 14px;background:var(--light);color:var(--bg);font-size:12px;text-decoration:none;border-radius:4px;transition:transform .6s var(--ease),background .5s var(--ease)}
.btn:hover{background:#fff;transform:translateX(6px)}
footer{text-align:center;padding:60px 0 40px;color:var(--muted);font-size:12px}
footer p{color:var(--muted);margin-bottom:6px}

/* reveal */
.reveal{opacity:0;transform:translateY(50px);filter:blur(6px);transition:opacity 1.4s var(--ease),transform 1.4s var(--ease),filter 1.4s var(--ease)}
.reveal.in{opacity:1;transform:none;filter:none}

@media(max-width:800px){.two,.grid{grid-template-columns:1fr}.photo{width:240px;height:240px}.links a{margin-left:14px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}.reveal,.line,.chip{opacity:1!important;transform:none!important;filter:none!important}}

/* ---- skill bars ---- */
.bars{display:grid;grid-template-columns:1fr 1fr;gap:22px 56px}
.bar-head{display:flex;justify-content:space-between;font-size:13px;color:var(--light);margin-bottom:8px}
.pct{color:var(--muted)}
.track{height:6px;background:var(--line);border-radius:6px;overflow:hidden}
.track i{display:block;height:100%;width:calc(var(--v)*1%);background:linear-gradient(90deg,var(--muted),#fff);border-radius:6px;transform:scaleX(0);transform-origin:0 50%;transition:transform 1.8s cubic-bezier(.16,1,.3,1);transition-delay:calc(.3s + var(--i)*.1s)}
.in .track i{transform:scaleX(1)}
.bar{transition:transform .7s cubic-bezier(.16,1,.3,1)}
.bar:hover{transform:translateX(6px)}
@media(max-width:800px){.bars{grid-template-columns:1fr}}

/* ---- parallax ---- */
.bg-layers{position:fixed;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.sym,.ring{position:absolute;will-change:transform}
.sym{font-weight:bold;color:rgba(255,255,255,.045)}
.ring{border:1px solid rgba(255,255,255,.07);border-radius:50%}
[data-speed]{will-change:transform}

/* ---- big name ---- */
.eyebrow{color:var(--muted);font-size:15px;margin-bottom:4px;opacity:0;animation:rise 1s .2s cubic-bezier(.16,1,.3,1) forwards}
.name{font-size:clamp(52px,9vw,104px);line-height:1;font-weight:700;letter-spacing:-2px;color:#fff;margin-bottom:18px}
.name span{display:inline-block;opacity:0;transform:translateY(40px);filter:blur(10px);animation:rise 1.2s cubic-bezier(.16,1,.3,1) forwards}
.name span:nth-child(1){animation-delay:.3s}
.name span:nth-child(2){animation-delay:.5s;background:linear-gradient(90deg,#fff,var(--muted));-webkit-background-clip:text;background-clip:text;color:transparent}
.tagline{font-size:16px;color:var(--light);max-width:520px;margin-bottom:32px;opacity:0;animation:rise 1s .8s cubic-bezier(.16,1,.3,1) forwards}
@keyframes rise{to{opacity:1;transform:none;filter:none}}
.code{font-size:18px!important;color:var(--muted)!important}
.hero-text .ind{font-size:14px}
.photo{width:320px;height:320px}

/* ---- creative skill bars ---- */
.bar{padding:14px 16px;border:1px solid transparent;border-radius:10px;transition:transform .7s cubic-bezier(.16,1,.3,1),border-color .6s,background .6s,box-shadow .6s}
.bar:hover{transform:translateY(-3px);border-color:var(--line);background:rgba(255,255,255,.03);box-shadow:0 14px 30px rgba(0,0,0,.25)}
.bar-head span:first-child{font-weight:500;color:#fff}
.pct{font-variant-numeric:tabular-nums;color:var(--light)}
.track{position:relative;height:10px;border-radius:10px;background:rgba(255,255,255,.07);overflow:visible}
.track::after{content:"";position:absolute;inset:0;border-radius:10px;background:repeating-linear-gradient(90deg,transparent 0 calc(10% - 2px),rgba(35,35,38,.9) calc(10% - 2px) 10%);pointer-events:none}
.track i{position:relative;overflow:visible;background:linear-gradient(90deg,#6f6f77,#d9d9dd 70%,#fff);box-shadow:0 0 14px rgba(255,255,255,.25)}
.track i::before{content:"";position:absolute;inset:0;border-radius:10px;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.65) 50%,transparent 70%);background-size:220% 100%;animation:shimmer 3s linear infinite}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-100% 0}}
.track i b{position:absolute;right:-5px;top:50%;width:14px;height:14px;margin-top:-7px;border-radius:50%;background:#fff;box-shadow:0 0 0 4px rgba(255,255,255,.15),0 0 18px rgba(255,255,255,.7);animation:dot 2.2s ease-in-out infinite;opacity:0;transition:opacity .6s 1.6s}
.in .track i b{opacity:1}
@keyframes dot{50%{box-shadow:0 0 0 8px rgba(255,255,255,.05),0 0 26px rgba(255,255,255,.9)}}

/* ---- professional background ---- */
.sym,.ring{display:none}
.grid-bg{position:absolute;inset:-20% 0;background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);background-size:64px 64px;-webkit-mask-image:radial-gradient(ellipse at 50% 40%,#000 25%,transparent 75%);mask-image:radial-gradient(ellipse at 50% 40%,#000 25%,transparent 75%)}
.orb{position:absolute;border-radius:50%;filter:blur(90px);will-change:transform}
.o1{width:520px;height:520px;top:5%;right:-120px;background:rgba(210,210,220,.10)}
.o2{width:620px;height:620px;top:55%;left:-200px;background:rgba(160,160,175,.10)}
.o3{width:420px;height:420px;top:105%;right:10%;background:rgba(230,230,235,.07)}

/* ---- connect cards ---- */
.connect{display:flex;flex-direction:column;gap:12px;margin:22px 0 30px;max-width:560px}
.connect>.c{margin-bottom:4px}
.conn{display:flex;align-items:center;gap:16px;padding:14px 18px;border:1px solid var(--line);border-radius:10px;text-decoration:none;color:var(--light);background:rgba(255,255,255,.02);position:relative;overflow:hidden;opacity:0;transform:translateX(-30px);transition:opacity 1s cubic-bezier(.16,1,.3,1),transform 1s cubic-bezier(.16,1,.3,1),border-color .6s,background .6s,box-shadow .6s;transition-delay:calc(.2s + var(--i)*.1s)}
.in .conn{opacity:1;transform:none}
.conn::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.1),transparent);transform:translateX(-101%);transition:transform .8s cubic-bezier(.16,1,.3,1)}
.conn:hover::before{transform:none}
.in .conn:hover{transform:translateX(10px);border-color:var(--muted);box-shadow:0 14px 30px rgba(0,0,0,.3);transition-delay:0s}
.conn>*{position:relative}
.ic{width:42px;height:42px;display:grid;place-items:center;border-radius:50%;border:1px solid var(--line);flex:none;transition:background .5s,color .5s,transform .7s cubic-bezier(.16,1,.3,1)}
.ic svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.conn:hover .ic{background:#fff;color:var(--bg);transform:rotate(-8deg) scale(1.08)}
.txt{display:flex;flex-direction:column;flex:1;line-height:1.4}
.txt .key{font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:var(--muted)}
.txt .val{font-size:14px;color:#fff}
.go{font-size:18px;color:var(--muted);transition:transform .6s cubic-bezier(.16,1,.3,1),color .5s}
.conn:hover .go{transform:translateX(6px);color:#fff}

/* ---- darker theme ---- */
:root{--bg:#121214;--bg2:#19191c;--line:#2e2e33;--muted:#8d8d95}
body{background:linear-gradient(180deg,#121214,#19191c 55%,#121214)}
nav{background:rgba(18,18,20,.8)}
.track::after{background:repeating-linear-gradient(90deg,transparent 0 calc(10% - 2px),rgba(18,18,20,.95) calc(10% - 2px) 10%)}
.track{background:rgba(255,255,255,.06)}
.o1{background:rgba(200,200,215,.06)}.o2{background:rgba(160,160,175,.06)}.o3{background:rgba(220,220,230,.045)}
.grid-bg{background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px)}
.card,.bar:hover{background:rgba(255,255,255,.025)}

/* ---- simplified hero ---- */
.role-line{font-size:18px;color:#fff;margin:0 0 10px;opacity:0;animation:rise 1s .7s cubic-bezier(.16,1,.3,1) forwards}
.prompt{color:var(--muted)}
.tagline{margin-bottom:28px}
.cta{display:flex;gap:14px;flex-wrap:wrap;opacity:0;animation:rise 1s 1s cubic-bezier(.16,1,.3,1) forwards}
.btn.big{margin-top:0;padding:10px 22px;font-size:13px;font-weight:600}
.btn.ghost{margin-top:0;padding:9px 22px;font-size:13px;background:transparent;color:#fff;border:1px solid var(--muted)}
.btn.ghost:hover{background:#fff;color:var(--bg);transform:translateX(0) translateY(-2px)}
.photo{width:340px;height:340px;object-position:center top;border-width:3px}

/* ---- compact contact ---- */
.connect{flex-direction:row;flex-wrap:wrap;gap:10px;margin:18px 0 26px;max-width:none;align-items:center}
.connect>.c{flex-basis:100%;margin:0 0 4px}
.conn{padding:8px 16px 8px 8px;gap:10px;border-radius:40px}
.conn .go,.txt .val{display:none}
.ic{width:30px;height:30px}
.ic svg{width:15px;height:15px}
.txt .key{font-size:12px;letter-spacing:.5px;text-transform:capitalize;color:var(--light)}
.in .conn:hover{transform:translateY(-4px)}
.conn:hover .txt .key{color:#fff}

/* ---- pop-out cutout photo (grayscale -> color on hover) ---- */
.photo-wrap{--s:340px;position:relative;width:var(--s);height:calc(var(--s)*1.2);cursor:pointer}
.photo-wrap::before{content:"";position:absolute;left:0;bottom:0;width:var(--s);height:var(--s);border-radius:50%;background:radial-gradient(circle at 50% 30%,#3a3a40,#1c1c20 75%);border:3px solid var(--light);transition:background .9s var(--ease),border-color .9s var(--ease),box-shadow .9s var(--ease)}
.photo-wrap:hover::before{background:radial-gradient(circle at 50% 30%,#5a5a64,#26262b 75%);border-color:#fff;box-shadow:0 0 0 10px rgba(255,255,255,.07),0 30px 70px rgba(0,0,0,.6)}
.photo-wrap .photo{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:0;object-fit:cover;object-position:center bottom;filter:grayscale(1) contrast(1.05);transition:filter 1s var(--ease),transform .2s linear;
  -webkit-mask-image:linear-gradient(#000,#000),radial-gradient(circle calc(var(--s)/2 - 1px) at 50% calc(var(--s)*.7),#000 99%,transparent 100%);
  -webkit-mask-size:100% calc(var(--s)*.7),100% 100%;-webkit-mask-repeat:no-repeat;
  mask-image:linear-gradient(#000,#000),radial-gradient(circle calc(var(--s)/2 - 1px) at 50% calc(var(--s)*.7),#000 99%,transparent 100%);
  mask-size:100% calc(var(--s)*.7),100% 100%;mask-repeat:no-repeat}
.photo-wrap:hover .photo{filter:grayscale(0) contrast(1);box-shadow:none}
@media(max-width:800px){.photo-wrap{--s:250px}}

/* ---- spacing & equal cards ---- */
.role-line{margin-bottom:26px}
.grid{align-items:stretch}
.card{display:flex;flex-direction:column;height:100%}
.card .tech{margin-top:auto;padding-top:6px}
.card .btn{align-self:flex-start}

/* ---- CV Navbar & Contact Highlight ---- */
.nav-cv {
  padding: 4px 12px;
  border: 1px solid var(--muted);
  border-radius: 20px;
  color: #fff !important;
  font-size: 12px !important;
  margin-left: 20px;
  background: rgba(255, 255, 255, 0.05);
  transition: all 0.4s var(--ease) !important;
}
.nav-cv::after { display: none !important; }
.nav-cv:hover {
  background: #fff !important;
  color: var(--bg) !important;
  border-color: #fff;
  transform: translateY(-2px);
  box-shadow: 0 4px 15px rgba(255, 255, 255, 0.2);
}
.cv-highlight {
  border-color: rgba(255, 255, 255, 0.4) !important;
  background: rgba(255, 255, 255, 0.08) !important;
}
.cv-highlight .txt .key {
  color: #fff !important;
  font-weight: 600;
}
.cv-highlight .ic {
  background: #fff;
  color: var(--bg);
}

.credit{font-size:12px;color:var(--muted)}
.credit a{color:var(--light);text-decoration:none;border-bottom:1px solid var(--line);transition:color .5s,border-color .5s}
.credit a:hover{color:#fff;border-color:#fff}
footer{border-top:1px solid var(--line);max-width:1200px;margin:60px auto 0;padding:28px 8vw 36px}

/* ---- hero layout fix & footer links ---- */
.hero{flex-wrap:nowrap;gap:60px}
.hero-text{flex:1 1 auto;min-width:0}
.photo-wrap{flex:0 0 auto}
.name{font-size:clamp(44px,6.2vw,92px)}
.name span{white-space:nowrap}
footer a.flink,.credit a{color:var(--light);text-decoration:none;border-bottom:1px solid var(--line);transition:color .5s,border-color .5s}
footer a.flink:hover{color:#fff;border-color:#fff}
@media(max-width:800px){.hero{flex-wrap:wrap;gap:40px}.name{font-size:clamp(40px,12vw,64px)}}

/* ---- mobile-friendly header ---- */
nav{gap:16px}
.logo{flex:none}
.links{display:flex;align-items:center;min-width:0}
@media(max-width:800px){
  nav{padding:12px 5vw}
  .links{overflow-x:auto;white-space:nowrap;scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:2px}
  .links::-webkit-scrollbar{display:none}
  .links a{margin-left:14px;font-size:12px;flex:none}
  .nav-cv{margin-left:14px!important;padding:3px 10px!important}
  .hero{padding-top:110px}
}
@media(max-width:480px){
  nav{padding:10px 4vw;gap:10px}
  .logo{font-size:16px}
  .links a{margin-left:11px;font-size:11.5px}
  .nav-cv{margin-left:11px!important;font-size:11px!important}
}

.chips{gap:14px}.chip{padding:8px 20px;font-size:13.5px;background:rgba(255,255,255,.03)}

/* ---- aesthetic stack ---- */
.stack-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:22px}
.stack-card{position:relative;padding:22px 24px 24px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(160deg,rgba(255,255,255,.045),rgba(255,255,255,.012));overflow:hidden;opacity:0;transform:translateY(34px);transition:opacity 1.2s cubic-bezier(.16,1,.3,1),transform 1.2s cubic-bezier(.16,1,.3,1),border-color .6s,box-shadow .8s;transition-delay:calc(var(--g)*.12s)}
.in .stack-card{opacity:1;transform:none}
.stack-card::before{content:"";position:absolute;top:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,#fff,transparent);transform:scaleX(0);transform-origin:0 50%;transition:transform 1.4s .4s cubic-bezier(.16,1,.3,1)}
.in .stack-card::before{transform:scaleX(.55)}
.in .stack-card:hover{transform:translateY(-8px);border-color:var(--muted);box-shadow:0 24px 50px rgba(0,0,0,.4);transition-delay:0s}
.in .stack-card:hover::before{transform:scaleX(1)}
.sc-head{display:flex;flex-direction:column;gap:2px;margin-bottom:16px}
.sc-file{font-size:11px;color:var(--muted);letter-spacing:.5px}
.sc-file::before{content:"// ";color:var(--line)}
.sc-title{font-size:16px;font-weight:600;color:#fff}
.sc-tags{display:flex;flex-wrap:wrap;gap:8px}
.tag{padding:4px 13px;border:1px solid var(--line);border-radius:30px;font-size:12.5px;color:var(--light);background:rgba(255,255,255,.03);opacity:0;transform:translateY(10px);transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1),background .4s,color .4s,border-color .4s;transition-delay:calc(var(--g)*.12s + .35s + var(--i)*.06s)}
.in .tag{opacity:1;transform:none}
.in .tag:hover{background:var(--light);color:var(--bg);border-color:var(--light);transform:translateY(-3px);transition-delay:0s}

/* ---- minimal skill list ---- */
.skill-list{border-top:1px solid var(--line)}
.skill-row{position:relative;display:grid;grid-template-columns:260px 1fr;align-items:center;gap:24px;padding:26px 6px;border-bottom:1px solid var(--line);opacity:0;transform:translateY(24px);transition:opacity 1.2s cubic-bezier(.16,1,.3,1),transform 1.2s cubic-bezier(.16,1,.3,1),background .7s cubic-bezier(.16,1,.3,1),padding .7s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--g)*.1s)}
.in .skill-row{opacity:1;transform:none}
.skill-row::after{content:"";position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:#fff;transform:scaleX(0);transform-origin:0 50%;transition:transform 1s cubic-bezier(.16,1,.3,1)}
.in .skill-row:hover{background:linear-gradient(90deg,rgba(255,255,255,.05),transparent 70%);padding-left:20px;transition-delay:0s}
.skill-row:hover::after{transform:scaleX(1)}
.sk-label{display:flex;align-items:baseline;gap:16px}
.sk-num{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.sk-name{font-size:17px;font-weight:600;color:#fff;letter-spacing:.2px}
.sk-items{display:flex;flex-wrap:wrap;gap:6px 0;font-size:14px;color:var(--light)}
.sk-items span{position:relative;padding-right:18px;margin-right:18px;transition:color .5s}
.sk-items span::after{content:"";position:absolute;right:0;top:50%;width:4px;height:4px;margin-top:-2px;border-radius:50%;background:var(--muted);opacity:.6}
.sk-items span:last-child{padding-right:0;margin-right:0}
.sk-items span:last-child::after{display:none}
.skill-row:hover .sk-items span{color:#fff}
@media(max-width:700px){.skill-row{grid-template-columns:1fr;gap:10px;padding:20px 4px}.in .skill-row:hover{padding-left:10px}}
