:root{--bg:#130b0e;--text:#f3eef6;--dim:#b8a9b6;--line:rgba(255,255,255,.22);--grad:linear-gradient(90deg,#b061d6,#e0489a);--ease:cubic-bezier(.16,1,.3,1)}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font-family:'Space Grotesk',system-ui,sans-serif;font-weight:300;line-height:1.6;overflow-x:hidden}
a{color:inherit;text-decoration:none}
:focus-visible{outline:1px solid #e0489a;outline-offset:3px}
::selection{background:#c04fb0;color:#fff}

.blob{position:fixed;z-index:-1;right:-18vw;bottom:-28vh;width:78vw;height:92vh;border-radius:50%;filter:blur(70px);pointer-events:none;
 background:radial-gradient(ellipse at 72% 28%,#a98bd0 0,#a050b0 30%,#a02e9c 52%,#c2185b 80%,transparent 100%);animation:drift 18s ease-in-out infinite alternate}
.page ~ .blob,.blob{opacity:.9}
body:not(.home) .blob{opacity:.45;width:60vw}
@keyframes drift{to{transform:translate(-4vw,-3vh) scale(1.06) rotate(-4deg)}}

.gem{display:block;width:18px;height:18px;transform:rotate(45deg);background:linear-gradient(135deg,#eee,#555);margin:0 0 1.2rem 6px}
.top .gem{width:12px;height:12px;margin:0 .7rem 0 0;display:inline-block}

/* hero */
.hero{min-height:100vh;padding:clamp(4rem,12vh,7rem) clamp(1.5rem,8vw,5rem);max-width:760px}
.hero h1{font-size:clamp(2.8rem,8vw,3.8rem);font-weight:300;letter-spacing:.14em;line-height:1.1;margin:0 0 1rem}
.hero p{max-width:40ch;margin:0 0 2.4rem;font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:#e6d9c4}
.menu{display:grid;grid-template-columns:repeat(2,minmax(0,200px));gap:1rem 2.6rem}
.menu a,.btn{display:flex;justify-content:space-between;align-items:center;padding:.5rem .65rem .5rem .6rem;border:1px solid var(--line);border-top-color:rgba(255,255,255,.12);font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;transition:background .3s,border-color .3s,padding .3s var(--ease)}
.menu a{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;position:relative}
.menu a::after{content:'›';color:#e0489a;-webkit-text-fill-color:#e0489a}
.menu a:hover{border-color:#e0489a;padding-left:1rem;background-color:rgba(224,72,154,.08)}

/* subpages */
.top{position:fixed;inset:0 0 auto 0;z-index:20;display:flex;justify-content:space-between;align-items:center;padding:1.3rem clamp(1.5rem,6vw,4rem);background:linear-gradient(var(--bg),transparent)}
.brand{font-size:.85rem;letter-spacing:.3em;display:flex;align-items:center}
.top nav{display:flex;gap:1.6rem}
.top nav a{font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);padding-bottom:3px;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}
.top nav a:hover,.top nav a.on{color:var(--text);border-color:#e0489a}
.page{max-width:980px;margin:0 auto;padding:7rem clamp(1.5rem,6vw,3rem) 5rem}
.page h1{font-size:clamp(2.2rem,6vw,3.2rem);font-weight:300;letter-spacing:.14em;text-transform:uppercase;margin:0 0 1.5rem}
.sub{font-size:.75rem;font-weight:400;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);margin:3rem 0 1rem}
.lead{font-size:1.15rem;color:var(--text);max-width:46ch}
.page p{color:var(--dim);max-width:62ch}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:3rem}
.stats{display:flex;gap:2rem;margin-top:2rem;font-size:.75rem;color:var(--dim)}
.stats b{display:block;font-size:2rem;font-weight:300;color:var(--text)}
.skills{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem}
.skills h2{font-size:.68rem;font-weight:400;letter-spacing:.2em;text-transform:uppercase;margin:0 0 .5rem;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.skills ul{list-style:none;margin:0;padding:0 0 0 .8rem;border-left:1px solid var(--line);font-size:.9rem;color:var(--dim)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:1rem}
.card{position:relative;display:block;text-align:left;font:inherit;color:inherit;padding:1.1rem 1.2rem;background:rgba(19,11,14,.55);backdrop-filter:blur(8px);border:1px solid var(--line);border-top-color:rgba(255,255,255,.1);cursor:default;transition:border-color .3s,transform .4s var(--ease),background .3s}
.card h3{margin:0 0 .3rem;font-size:1.05rem;font-weight:400;word-break:break-word}
.card small{display:block;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin-bottom:.4rem}
.card p{font-size:.88rem;margin:.4rem 0 .9rem}
.card>a{font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:#e0489a}
a.card,button.card,.copy{cursor:pointer}
a.card:hover,button.card:hover,.card:has(>a):hover{border-color:#e0489a;transform:translateY(-3px)}
.now{border-left:2px solid #e0489a}
.flag{position:absolute;top:.9rem;right:1rem;font-size:.6rem;letter-spacing:.15em;text-transform:uppercase;color:var(--dim)}
.copied{border-color:#e0489a}.copied .flag{color:#e0489a}
footer{margin-top:4rem;font-size:.75rem;color:var(--dim)}footer a{text-decoration:underline}

/* motion: entrance sequence, scroll reveal, page curtain */
.rise{animation:rise .9s var(--ease) both;animation-delay:calc(var(--i,0)*.12s + .35s)}
@keyframes rise{from{opacity:0;transform:translateY(24px)}}
.reveal{opacity:0;transform:translateY(26px);transition:opacity .7s var(--ease),transform .7s var(--ease),border-color .3s,background .3s}
.reveal.in{opacity:1;transform:none}
.curtain{position:fixed;inset:0;z-index:100;background:linear-gradient(110deg,#130b0e 55%,#5a1a4f);pointer-events:none;transform:translateX(100%);animation:out .75s var(--ease) both}
@keyframes out{from{transform:translateX(0)}to{transform:translateX(101%)}}
.curtain.go{animation:in .45s cubic-bezier(.7,0,.84,0) forwards;pointer-events:all}
@keyframes in{from{transform:translateX(-101%)}to{transform:translateX(0)}}

@media(max-width:720px){.cols,.skills{grid-template-columns:1fr}.top nav{gap:1rem}.brand{font-size:.75rem}.menu{grid-template-columns:1fr;max-width:220px}.stats{gap:1.2rem}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.reveal{opacity:1;transform:none}.curtain{display:none}}
