:root{--bg:#0b1018;--bg-soft:#111827;--surface:rgba(255, 255, 255, 0.045);--surface-strong:rgba(255, 255, 255, 0.08);--border:rgba(255, 255, 255, 0.1);--text:#eef1f6;--text-muted:#9aa5b5;--accent:#e05a5a;--accent-soft:#f0876b;--accent-glow:rgba(224, 90, 90, 0.35);--radius:18px;--radius-sm:12px;--shadow:0 24px 60px -20px rgba(0, 0, 0, 0.65);--font:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;color-scheme:dark}*,::after,::before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;min-height:100dvh;font-family:var(--font);font-size:clamp(.95rem, .9rem + .25vw, 1.05rem);line-height:1.6;color:var(--text);background:var(--bg);overflow-x:hidden;-webkit-font-smoothing:antialiased}body::after,body::before{content:"";position:fixed;z-index:-2;width:60vmax;height:60vmax;border-radius:50%;filter:blur(90px);opacity:.22;pointer-events:none}body::before{top:-25vmax;left:-15vmax;background:radial-gradient(circle at center,var(--accent),transparent 65%);animation:26s ease-in-out infinite alternate drift-a}body::after{bottom:-30vmax;right:-20vmax;background:radial-gradient(circle at center,#3b5bdb,transparent 65%);animation:32s ease-in-out infinite alternate drift-b}@keyframes drift-a{to{transform:translate(8vmax,6vmax) scale(1.15)}}@keyframes drift-b{to{transform:translate(-6vmax,-8vmax) scale(1.1)}}#fx{position:fixed;inset:0;z-index:-1;pointer-events:none}.skip-link{position:absolute;top:-100%;left:1rem;z-index:100;padding:.6rem 1rem;background:var(--accent);color:#fff;border-radius:0 0 var(--radius-sm) var(--radius-sm);text-decoration:none;transition:top .2s}.skip-link:focus{top:0}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}:focus-visible{outline:2px solid var(--accent-soft);outline-offset:3px;border-radius:4px}.scene{display:grid;place-items:center;min-height:100dvh;padding:clamp(1rem,4vw,3rem);perspective:1200px}.card{width:min(100%,30rem);background:linear-gradient(160deg,var(--surface-strong),var(--surface));border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:clamp(1.4rem,4vw,2.2rem);transform-style:preserve-3d;transition:transform .15s ease-out;will-change:transform}.card-head{display:flex;align-items:center;gap:1.1rem;margin-bottom:1.4rem}.avatar{flex:0 0 auto;width:clamp(4.2rem,18vw,5.4rem);height:clamp(4.2rem,18vw,5.4rem);padding:3px;border-radius:50%;background:conic-gradient(from 180deg,var(--accent),var(--accent-soft),#3b5bdb,var(--accent));animation:12s linear infinite spin-slow}.avatar img{display:block;width:100%;height:100%;object-fit:cover;border-radius:50%;border:2px solid var(--bg);animation:12s linear infinite reverse spin-slow}@keyframes spin-slow{to{transform:rotate(360deg)}}.card-head h1{margin:0 0 .2rem;font-size:clamp(1.35rem, 5vw, 1.7rem);font-weight:700;letter-spacing:-.02em;background:linear-gradient(90deg,var(--text),var(--accent-soft));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.role{margin:0;font-size:.92rem;color:var(--text-muted);min-height:1.5em}.xp-badge{display:inline-block;margin:.5rem 0 0;padding:.15rem .7rem;border:1px solid var(--accent);border-radius:999px;font-size:.72rem;font-weight:600;color:var(--accent-soft);background:rgba(224,90,90,.08)}.role .caret{display:inline-block;width:1px;margin-left:5px;background:var(--accent-soft);animation:1s steps(2) infinite blink;height:1em;vertical-align:text-bottom}@keyframes blink{50%{opacity:0}}.card .col-b,.card .col-b section+section,.card section+section{margin-top:1.5rem}.card h2{margin:0 0 .7rem;font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.14em;color:var(--text-muted);animation:.5s cubic-bezier(.22,1,.36,1) .25s backwards in-up}.contact-list{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.contact-list li{display:flex;align-items:center;gap:.75rem;padding:.65rem .85rem;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius-sm);transition:background .2s,transform .2s,border-color .2s;animation:.6s cubic-bezier(.34,1.56,.64,1) backwards in-left}.contact-list li:hover{background:var(--surface-strong);transform:translateX(4px);border-left-color:var(--accent-soft)}.contact-list .c-icon{flex:0 0 auto;width:1.15rem;height:1.15rem;color:var(--accent-soft)}.contact-list .c-label{flex:0 0 auto;font-size:.78rem;color:var(--text-muted);min-width:3.4rem}.contact-list .c-value{flex:1 1 auto;font-weight:600;font-size:.92rem;overflow-wrap:anywhere}.contact-list a{color:inherit;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s,color .2s}.contact-list a:hover{color:var(--accent-soft);border-bottom-color:var(--accent-soft)}.copy-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:1.9rem;height:1.9rem;padding:0;border:1px solid var(--border);border-radius:8px;background:0 0;color:var(--text-muted);cursor:pointer;transition:color .2s,border-color .2s,background .2s}.copy-btn:hover{color:var(--text);border-color:var(--accent-soft);background:var(--surface-strong)}.copy-btn svg{width:.9rem;height:.9rem}.copy-btn.copied{color:#6fdd8b;border-color:#6fdd8b}.tech-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem}.tech-grid li{padding:.55rem .75rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);transition:border-color .25s,box-shadow .25s,transform .25s;animation:.6s cubic-bezier(.34,1.56,.64,1) backwards in-right}.tech-grid li:hover{border-color:var(--accent);box-shadow:0 0 18px -6px var(--accent-glow);transform:translateY(-2px)}.tech-grid .t-name{display:block;font-size:.85rem;font-weight:600}.tech-grid .t-tag{display:block;margin-top:.15rem;text-align:right;font-size:.68rem;font-weight:400;color:var(--text-muted)}.tech-note{margin:.6rem 0 0;font-size:.75rem;color:var(--text-muted)}.h-tag{display:inline-block;margin-left:.4rem;padding:.05rem .5rem;border:1px solid var(--border);border-radius:999px;font-size:.65rem;letter-spacing:.05em;text-transform:lowercase;color:var(--text-muted);vertical-align:middle}article>ul{list-style:none;margin:0 0 .9rem;padding:0;display:grid;gap:.5rem}article>ul li{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;padding:.65rem .85rem;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius-sm);font-size:.92rem}article>ul li span{color:var(--text-muted);font-size:.82rem}article>ul li strong{font-weight:600;text-align:right;overflow-wrap:anywhere}article>h2:first-child{font-size:1.15rem;text-transform:none;letter-spacing:0;color:var(--text)}article p{margin:0 0 .9rem;color:var(--text-muted)}article a{color:var(--accent-soft);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s}article a:hover{border-bottom-color:var(--accent-soft)}.btn-back{display:inline-block;margin-top:.4rem;padding:.5rem 1.1rem;border:1px solid var(--accent);border-radius:999px;color:var(--text);font-size:.85rem;font-weight:600;text-decoration:none;transition:background .2s,box-shadow .2s}.btn-back:hover{background:var(--accent);box-shadow:0 0 22px -6px var(--accent-glow);border-bottom:1px solid var(--accent)}.card-foot{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-top:1.6rem;padding-top:1.1rem;border-top:1px solid var(--border)}.btn-vcard{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1.1rem;border:1px solid var(--accent);border-radius:999px;color:var(--text);font-size:.85rem;font-weight:600;text-decoration:none;transition:background .2s,box-shadow .2s,transform .2s}.btn-vcard:focus-visible,.btn-vcard:hover{background:var(--accent);color:#fff;box-shadow:0 6px 22px -6px var(--accent-glow);transform:translateY(-2px)}.btn-vcard svg{width:1rem;height:1rem}.foot-links{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.btn-ghost{display:inline-flex;align-items:center;padding:.5rem 1.1rem;border:1px solid var(--border);border-radius:999px;color:var(--text-muted);font-size:.85rem;font-weight:600;text-decoration:none;transition:color .2s,border-color .2s,transform .2s}.btn-ghost:focus-visible,.btn-ghost:hover{color:var(--text);border-color:var(--accent-soft);transform:translateY(-2px)}.copyright{margin:0;font-size:.75rem;color:var(--text-muted)}@keyframes card-in{from{opacity:0;transform:scale(.94) translateY(24px)}}@keyframes in-left{from{opacity:0;transform:perspective(600px) translateX(-70px) rotateY(18deg) scale(.92);filter:blur(5px)}}@keyframes in-right{from{opacity:0;transform:perspective(600px) translateX(70px) rotateY(-18deg) scale(.92);filter:blur(5px)}}@keyframes in-up{from{opacity:0;transform:translateY(28px) scale(.96);filter:blur(3px)}}@keyframes in-down{from{opacity:0;transform:translateY(-32px) scale(.94);filter:blur(4px)}}.card{animation:.5s cubic-bezier(.22,1,.36,1) backwards card-in}.card-head{animation:.65s cubic-bezier(.34,1.56,.64,1) .15s backwards in-down}.contact-list li:first-child{animation-delay:.35s}.contact-list li:nth-child(2){animation-delay:.43s}.contact-list li:nth-child(3){animation-delay:.51s}.contact-list li:nth-child(4){animation-delay:.59s}section[aria-labelledby=h-dev] .tech-grid li:nth-child(odd){animation-name:in-left}.tech-grid li:first-child{animation-delay:.3s}.tech-grid li:nth-child(2){animation-delay:.37s}.tech-grid li:nth-child(3){animation-delay:.44s}.tech-grid li:nth-child(4){animation-delay:.51s}.tech-grid li:nth-child(5){animation-delay:.58s}.tech-grid li:nth-child(6){animation-delay:.65s}.tech-grid li:nth-child(7){animation-delay:.72s}.tech-grid li:nth-child(8){animation-delay:.79s}.tech-grid li:nth-child(n+9){animation-delay:.86s}section[aria-labelledby=h-iot] .tech-grid li:first-child{animation-delay:.72s}section[aria-labelledby=h-iot] .tech-grid li:nth-child(2){animation-delay:.79s}.tech-note{animation:.5s cubic-bezier(.22,1,.36,1) .9s backwards in-up}.card-foot{animation:.6s cubic-bezier(.34,1.56,.64,1) .95s backwards in-up}.card article>:not(section):not(.col-b){animation:.55s cubic-bezier(.22,1,.36,1) backwards in-up}.card article>:not(section):not(.col-b):first-child{animation-delay:.2s}.card article>:not(section):not(.col-b):nth-child(2){animation-delay:.32s}.card article>:not(section):not(.col-b):nth-child(n+3){animation-delay:.44s}@media (min-width:64rem){.card:has(#h-dev){width:min(100%,66rem);display:grid;grid-template-columns:minmax(15rem,0.9fr) 1.1fr 1fr;grid-template-rows:auto 1fr auto;grid-template-areas:"head    dev colb" "contact dev colb" "foot    foot foot";column-gap:2.4rem;align-items:start}.card:has(#h-dev) article{display:contents}.card:has(#h-dev) .card-head{grid-area:head;flex-direction:column;text-align:center;margin-bottom:0}.card:has(#h-dev) section[aria-labelledby=h-contact]{grid-area:contact;margin-top:4.3rem}.card:has(#h-dev) section[aria-labelledby=h-dev]{grid-area:dev;margin-top:0}.card:has(#h-dev) .col-b{grid-area:colb;margin-top:0}.card:has(#h-dev) .col-b section[aria-labelledby=h-iot]{margin-top:7.15rem}.card:has(#h-dev) .contact-list li{display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:"icon label btn" "value value value";align-items:center;row-gap:0;padding:.48rem .75rem}.card:has(#h-dev) .contact-list .c-icon{grid-area:icon;width:1rem;height:1rem}.card:has(#h-dev) .contact-list .c-label{grid-area:label;min-width:0}.card:has(#h-dev) .contact-list .copy-btn{grid-area:btn;width:1.25rem;height:1.25rem;border:0}.card:has(#h-dev) .contact-list .copy-btn svg{width:.8rem;height:.8rem}.card:has(#h-dev) .contact-list .c-value{grid-area:value;text-align:right}.card:has(#h-dev) .card-foot{grid-area:foot}.card:has(#h-dev) .tech-grid{grid-template-columns:1fr}}@media (max-width:26rem){.card-head{flex-direction:column;text-align:center}.tech-grid{grid-template-columns:1fr}.card-foot{flex-direction:column}}@keyframes fade-in{from{opacity:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.card,.card article>*,.card article>:not(section):not(.col-b),.card h2,.card-foot,.card-head,.contact-list li,.tech-grid li,.tech-note{animation-name:fade-in;animation-duration:.5s;animation-timing-function:ease}section[aria-labelledby=h-dev] .tech-grid li:nth-child(odd){animation-name:fade-in}}@media print{#fx,body::after,body::before{display:none}body{background:#fff;color:#000}.card{box-shadow:none;border:1px solid #ccc}}