:root{--bg:#0b100d;--surface:#101712;--border:#1e2a22;--text:#c4cdc6;--heading:#e8f2ea;--accent:#3df08a;--accent-ink:#05110a;--muted:#84928a;--selection:#3df08a47;--grid:#3df08a14;--grid-axis:#3df08a33;--glow:#3df08a8c;--ease-out:cubic-bezier(.16, 1, .3, 1);--serif:"IBM Plex Serif", Georgia, serif;--sans:"IBM Plex Sans", system-ui, sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:light){:root{--bg:#f1f5f1;--surface:#fafcfa;--border:#d3ddd5;--text:#2e3731;--heading:#121a15;--accent:#0b7a3b;--accent-ink:#fafcfa;--muted:#5e6b63;--selection:#0b7a3b33;--grid:#0b7a3b17;--grid-axis:#0b7a3b38;--glow:#0b7a3b4d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font:16px/1.6 var(--sans);color:var(--text);background:var(--bg);scrollbar-color:var(--border) var(--bg);-webkit-text-size-adjust:100%}body{min-height:100svh}::selection{background:var(--selection);color:var(--heading)}a{color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}strong{color:var(--heading);font-weight:600}.portfolio{z-index:1;max-width:880px;margin:0 auto;padding:0 1.5rem 3rem;position:relative}.lang-switch{justify-content:flex-end;gap:.2rem;padding-top:1.25rem;display:flex}.lang-switch button{min-height:2rem;color:var(--muted);font:500 .82rem/1 var(--sans);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:.25rem .7rem;transition:color .15s,border-color .15s}.lang-switch button:hover{color:var(--heading)}.lang-switch button[aria-pressed=true]{color:var(--heading);border-color:var(--border)}.hero{align-items:center;gap:2.5rem;padding:3.5rem 0 1.75rem;display:flex}.avatar{cursor:zoom-in;box-shadow:0 0 0 1px var(--border), 0 12px 32px -12px #00000073;background:0 0;border:0;border-radius:50%;flex-shrink:0;padding:0}.avatar img{object-fit:cover;border-radius:50%;width:150px;height:150px;display:block}.hero h1{font:600 clamp(2.4rem, 6vw, 3.5rem)/1.05 var(--serif);color:var(--heading);letter-spacing:-.015em;text-wrap:balance}.tagline{color:var(--text);margin-top:.55rem;font-size:1.08rem}.status{color:var(--muted);margin-top:.35rem}.typed-line{min-height:1.75em;display:block}.typed{font:italic 500 1.16em/1.5 var(--serif);color:var(--accent)}.caret{background:var(--accent);vertical-align:-.2em;width:2px;height:1.15em;margin-left:3px;animation:1.05s step-end infinite blink;display:inline-block}.caret.is-busy{animation:none}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.hero-links{flex-wrap:wrap;gap:.55rem;margin-top:1.5rem;display:flex}.btn{border:1px solid var(--border);min-height:2.5rem;color:var(--text);font:500 .9rem/1 var(--sans);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:.45rem;padding:.45rem .95rem;text-decoration:none;transition:border-color .15s,color .15s,background-color .15s,transform .12s;display:inline-flex}.btn svg{flex-shrink:0;width:1.05rem;height:1.05rem}.btn:hover{border-color:var(--muted);color:var(--heading)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover{background:var(--heading);border-color:var(--heading);color:var(--bg)}.btn-icon{justify-content:center;width:2.5rem;padding:0}.photo-dialog{text-align:center;background:0 0;border:0;max-width:min(480px,92vw);margin:auto;padding:0}.photo-dialog::backdrop{background:#0a0a09d1}.photo-dialog[open]{animation:dialog-in .32s var(--ease-out)}.photo-dialog[open]::backdrop{animation:.25s fade-in}.scope{height:96px;margin-bottom:.5rem;position:relative;overflow:hidden}.scope-screen{background-image:linear-gradient(to right, var(--grid) 1px, transparent 1px), linear-gradient(to bottom, var(--grid) 1px, transparent 1px);background-position:50%;background-size:48px 24px;animation:.8s .2s both fade-in;position:absolute;inset:0;-webkit-mask-image:linear-gradient(90deg,#0000,#000 10% 90%,#0000);mask-image:linear-gradient(90deg,#0000,#000 10% 90%,#0000)}.scope-screen:before{content:"";background:var(--grid-axis);height:1px;position:absolute;top:50%;left:0;right:0}.scope canvas{width:100%;height:100%;position:absolute;inset:0}.matrix-rain{z-index:0;pointer-events:none;opacity:.55;width:100%;height:100%;position:fixed;inset:0;-webkit-mask-image:linear-gradient(90deg,#000 calc(50% - 600px),#00000024 calc(50% - 450px) calc(50% + 450px),#000 calc(50% + 600px));mask-image:linear-gradient(90deg,#000 calc(50% - 600px),#00000024 calc(50% - 450px) calc(50% + 450px),#000 calc(50% + 600px))}.photo-dialog img{object-fit:contain;border-radius:6px;width:100%;height:auto;max-height:82vh;display:block}.photo-dialog form{margin-top:.8rem}.photo-dialog .btn{color:#f1ede4;border-color:#f1ede459}.section{grid-template-columns:11rem minmax(0,1fr);gap:2rem;padding:2.6rem 0;display:grid;position:relative}.section:before,.section:after{content:"";height:1px;position:absolute;top:0;left:0;right:0}.section:before{background:var(--border)}.section:after{background:linear-gradient(to right, var(--accent) 70%, transparent);box-shadow:0 0 8px var(--glow);transform-origin:0;opacity:0;transform:scaleX(0)}.reveal-ready .section:after{opacity:1}.reveal-ready .section.is-visible:after{opacity:0;transition:transform .9s var(--ease-out), opacity .7s ease .8s;transform:scaleX(1)}.reveal-ready .section>h2,.reveal-ready .section>.section-body{transition:opacity .7s var(--ease-out), transform .8s var(--ease-out)}.reveal-ready .section:not(.is-visible)>h2,.reveal-ready .section:not(.is-visible)>.section-body{opacity:0;transform:translateY(14px)}.reveal-ready .section.is-visible>.section-body{transition-delay:.12s}.section h2{font:600 1.2rem/1.3 var(--serif);color:var(--heading);text-wrap:balance}.section-body{max-width:62ch}.section-body>p+p{margin-top:.9rem}.muted{color:var(--muted)}.facts,.focus,.skills{gap:1rem 2rem;display:grid}.facts{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:1.6rem;font-size:.94rem}.facts dt,.skills dt{color:var(--muted);font-size:.8rem}.facts dd{color:var(--heading);overflow-wrap:anywhere}.facts a{color:inherit}.focus{gap:1.1rem;margin-top:1.2rem}.focus dt,.skills dd{color:var(--heading);font-weight:500}.focus dd{color:var(--muted);font-size:.92rem}.skills dd{font-weight:400}.timeline{list-style:none}.timeline>li{grid-template-columns:6.5rem minmax(0,1fr);gap:1rem;display:grid}.timeline>li+li{margin-top:1.8rem}.when{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:.15rem;font-size:.85rem}.timeline h3,.projects h3{color:var(--heading);font-size:1.02rem;font-weight:600;line-height:1.4}.timeline p{margin-top:.15rem;font-size:.94rem}.institution{color:var(--muted);align-items:center;gap:.6rem;display:flex}.institution .logo{background:#fff;border-radius:4px;flex:none;width:auto;height:2.4rem;padding:2px}.badge{border:1px solid var(--border);color:var(--muted);vertical-align:2px;white-space:nowrap;border-radius:4px;margin-left:.45rem;padding:.05rem .45rem;font-size:.74rem;font-weight:500;display:inline-block}.courses{margin-top:1rem}.courses summary{cursor:pointer;width:fit-content;color:var(--accent);font-size:.9rem;font-weight:500}.courses table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;margin-top:.6rem;font-size:.9rem}.courses th{border-bottom:1px solid var(--border);text-align:left;color:var(--muted);padding:.4rem 0;font-size:.76rem;font-weight:500}.courses td{border-bottom:1px solid var(--border);padding:.42rem 0}.courses tr:last-child td{border-bottom:0}.courses th:not(:first-child),.courses td:not(:first-child){text-align:right;width:5.5rem}.courses td:last-child{color:var(--heading);font-weight:600}.courses tr.top td:last-child{color:var(--accent)}.courses tr.pending td{color:var(--muted);font-weight:400}.projects{gap:1.6rem;list-style:none;display:grid}.projects h3{justify-content:space-between;gap:1rem;display:flex}.projects p{margin-top:.25rem;font-size:.94rem}.projects .tags{color:var(--muted);font-size:.85rem}.badges{flex-wrap:wrap;gap:1.6rem 2rem;list-style:none;display:flex}.badges li{flex-direction:column;gap:.5rem;width:9.5rem;font-size:.85rem;line-height:1.4;display:flex}.badges img{width:100%;height:auto;display:block}.footer{border-top:1px solid var(--border);color:var(--muted);margin-top:.5rem;padding-top:2rem;font-size:.85rem}.footer a{color:var(--text)}@media (width<=680px){.portfolio{padding:0 1rem 2.5rem}.hero{flex-direction:column;align-items:flex-start;gap:1.4rem;padding:1.5rem 0 1.25rem}.avatar img{width:112px;height:112px}.scope{height:72px;margin-inline:-1rem}.typed{font-size:1.1em}.section{grid-template-columns:minmax(0,1fr);gap:1rem;padding:2rem 0}.facts{grid-template-columns:minmax(0,1fr)}.timeline>li{grid-template-columns:minmax(0,1fr);gap:.1rem}}.lang-switch{animation:.6s .9s both fade-in}.avatar{animation:avatar-in .8s var(--ease-out) both}.hero h1{animation:wipe-in .9s var(--ease-out) .12s both}.tagline{animation:rise-in .6s var(--ease-out) .45s both}.status{animation:rise-in .6s var(--ease-out) .6s both}.hero-links{animation:rise-in .6s var(--ease-out) .75s both}.btn:active{transform:scale(.97)}@keyframes fade-in{0%{opacity:0}}@keyframes rise-in{0%{opacity:0;transform:translateY(10px)}}@keyframes avatar-in{0%{opacity:0;filter:blur(8px);transform:scale(.9)}}@keyframes wipe-in{0%{clip-path:inset(-15% 100% -25% 0)}to{clip-path:inset(-15% -5% -25% 0)}}@keyframes blink{50%{opacity:0}}@keyframes dialog-in{0%{opacity:0;transform:scale(.96)}}::view-transition-old(root){animation-duration:.26s}::view-transition-new(root){animation-duration:.26s}@media (prefers-reduced-motion:reduce){.lang-switch,.avatar,.hero h1,.tagline,.status,.hero-links,.scope-screen{animation:.3s both fade-in}.photo-dialog[open],.photo-dialog[open]::backdrop{animation:.2s fade-in}.btn:active{transform:none}}.cert{flex-direction:column;gap:.5rem;max-width:18rem;text-decoration:none;display:inline-flex}.cert img{border:1px solid var(--border,#8080804d);border-radius:6px;width:100%;height:auto;transition:transform .2s,box-shadow .2s;box-shadow:0 2px 10px #0000001f}.cert:hover img{transform:translateY(-2px);box-shadow:0 6px 18px #0003}@media (prefers-reduced-motion:reduce){.cert img{transition:none}}
