@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff) format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-latin-700-normal-7sUh57Bg.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-700-normal-CNHXzs6v.woff) format("woff")}@font-face{font-family:"Press Start 2P";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/press-start-2p-latin-400-normal-_wFEWmAB.woff2) format("woff2"),url(/assets/press-start-2p-latin-400-normal-KLytu4cr.woff) format("woff")}:root{--white: #ffffff;--gray: #888888;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--font-sans: var(--font-mono);--font-pixel: "Press Start 2P", monospace;--max-width: 1120px;--header-height: 64px;--ease: cubic-bezier(.22, 1, .36, 1);--section-title-size: clamp(1.75rem, 3vw, 2.25rem);--section-title-weight: 600;--section-title-tracking: -.02em;--green-programming: #1d7340}[data-theme=dark]{--bg: #0a0a0c;--bg-elevated: #121216;--bg-soft: #18181c;--text: var(--white);--text-muted: #c4c4c4;--line: rgba(255, 255, 255, .12);--line-strong: rgba(255, 255, 255, .22);--grid: rgba(255, 255, 255, .035);--header-bg: rgba(10, 10, 12, .82);--shadow: 0 24px 80px rgba(0, 0, 0, .45);--overlay: rgba(5, 5, 8, .72);--switch-track: #2a2a32;--switch-thumb: var(--white);--accent: var(--white);--accent-soft: var(--gray);--green-programming: #22a84f}[data-theme=light]{--bg: #f5f5f5;--bg-elevated: #ffffff;--bg-soft: #ececec;--text: #111111;--text-muted: var(--gray);--line: rgba(0, 0, 0, .1);--line-strong: rgba(0, 0, 0, .18);--grid: rgba(0, 0, 0, .04);--header-bg: rgba(245, 245, 245, .88);--shadow: 0 24px 60px rgba(0, 0, 0, .1);--overlay: rgba(245, 245, 245, .8);--switch-track: #d4d4d4;--switch-thumb: #111111;--accent: #111111;--accent-soft: var(--gray)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;overflow-y:scroll;scrollbar-gutter:stable;scrollbar-width:auto;scrollbar-color:var(--text-muted) var(--bg-soft)}*{scrollbar-width:auto;scrollbar-color:var(--text-muted) var(--bg-soft)}*::-webkit-scrollbar{width:12px;height:12px}*::-webkit-scrollbar-track{background:var(--bg-soft);border-radius:0}*::-webkit-scrollbar-thumb{background:var(--text-muted);border:2px solid var(--bg-soft);border-radius:0}*::-webkit-scrollbar-thumb:hover{background:var(--text)}*::-webkit-scrollbar-corner{background:var(--bg-soft);border-radius:0}*::-webkit-scrollbar-button{display:none;width:0;height:0}[id]{scroll-margin-top:calc(var(--header-height) + 1.25rem)}body{margin:0;min-height:100vh;font-family:var(--font-mono);font-size:1rem;line-height:1.6;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:24px 24px;mask-image:radial-gradient(ellipse at center,black 35%,transparent 80%)}#root{position:relative;z-index:1;min-height:100vh}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:3px}a:hover{color:var(--accent-soft)}img{max-width:100%;display:block}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:1rem;top:0;z-index:100;padding:.65rem 1rem;background:var(--bg-elevated, #121216);color:var(--text, #fff);border:1px solid var(--line-strong, rgba(255, 255, 255, .22));text-decoration:none;transform:translateY(-120%);transition:transform .16s ease}.skip-link:focus{transform:translateY(.75rem);outline:2px solid var(--accent, #fff);outline-offset:2px}.ficha-loading{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:color-mix(in srgb,var(--bg, #0a0a0c) 88%,transparent)}.shell{width:min(100% - 2rem,var(--max-width));margin-inline:auto}.section{padding:clamp(2.5rem,5vw,4.5rem) 0}.portfolio-layout .site-header{transform:none;pointer-events:auto}.portfolio-page{padding-top:var(--header-height);min-height:100vh}.section-kicker{display:block;margin:0 0 .75rem;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--text-muted);text-transform:uppercase}.section-title{margin:0 0 .75rem;font-family:var(--font-mono);font-size:var(--section-title-size);font-weight:var(--section-title-weight);letter-spacing:var(--section-title-tracking);line-height:1.15;color:var(--green-programming)}[data-theme=dark] .section-title{text-shadow:0 0 8px rgba(34,168,79,.22)}.section-lead{margin:0;max-width:40rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.92rem;line-height:1.55}.btn{display:inline-flex;align-items:center;gap:.55rem;padding:.7rem 1rem;border:1px solid var(--line-strong);background:var(--bg-elevated);color:var(--text);font-family:var(--font-mono);font-size:.85rem;text-decoration:none;transition:border-color .18s var(--ease),color .18s var(--ease),background .18s var(--ease)}.btn:hover{color:var(--text);border-color:var(--accent)}.btn-primary{border-color:var(--text);background:var(--text);color:var(--bg)}.btn-primary:hover{color:var(--bg);border-color:var(--accent-soft);background:var(--accent-soft)}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.listing-behind{pointer-events:none}.site-header{position:fixed;top:0;left:0;right:0;z-index:40;height:var(--header-height);border-bottom:1px solid var(--line);background:var(--header-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transform:translateY(-100%);transition:transform .22s var(--ease);pointer-events:none}.site-header.is-visible{transform:translateY(0);pointer-events:auto}.site-header__inner{height:100%;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-right:7.5rem}.brand{font-family:var(--font-pixel);font-size:clamp(1.05rem,2.8vw,1.35rem);letter-spacing:.06em;line-height:1;text-decoration:none;color:var(--text);white-space:nowrap}.brand:hover{color:var(--text-muted)}.nav-desktop{display:none;align-items:center;gap:1.25rem}.nav-desktop a{font-family:var(--font-mono);font-size:.82rem;text-decoration:none;color:var(--text-muted);transition:color .12s var(--ease)}.nav-desktop a:hover{color:var(--text)}.nav-desktop a:active{color:var(--text-muted)}.nav-desktop a.is-selected{color:var(--text)}.site-toolbar{position:fixed;top:0;right:0;z-index:50;height:var(--header-height);display:flex;align-items:center;gap:.45rem;padding-right:1rem;pointer-events:auto}.header-menu{position:relative}.icon-box{width:40px;height:40px;display:inline-grid;place-items:center;border:1px solid var(--line);background:var(--bg-elevated);color:var(--text);cursor:pointer;transition:border-color .14s var(--ease),color .14s var(--ease),background .14s var(--ease)}.icon-box:hover{border-color:var(--line-strong);color:var(--text)}.icon-box[aria-expanded=true]{border-color:var(--text)}.icon-box__flag{width:22px;height:16px;display:block;object-fit:cover;border:1px solid var(--line)}.icon-box__gear{display:block;width:18px;height:18px;background-color:currentColor;-webkit-mask:url(/assets/gear.svg) center / contain no-repeat;mask:url(/assets/gear.svg) center / contain no-repeat}.prefs-menu__flag{width:22px;height:16px;display:block;object-fit:cover;flex-shrink:0;border:1px solid var(--line)}.prefs-menu{position:absolute;top:calc(100% + .45rem);right:0;z-index:50;width:min(280px,calc(100vw - 2rem));padding:.75rem;border:1px solid var(--line-strong);background:var(--bg-elevated);box-shadow:var(--shadow);display:grid;gap:.55rem}.prefs-menu__title{margin:0;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}.prefs-menu__row{display:grid;grid-template-columns:1fr auto;gap:.75rem;align-items:center;padding:.45rem .2rem;border-top:1px solid var(--line);cursor:pointer}.prefs-menu__copy{display:grid;gap:.15rem;min-width:0}.prefs-menu__row-label{font-family:var(--font-mono);font-size:.78rem;color:var(--text)}.prefs-menu__hint{font-family:var(--font-mono);font-size:.65rem;color:var(--text-muted);line-height:1.35}.prefs-menu__switch{appearance:none;width:40px;height:22px;margin:0;border:1px solid var(--line-strong);background:var(--switch-track);position:relative;cursor:pointer;flex-shrink:0}.prefs-menu__switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:var(--switch-thumb);transition:transform .16s var(--ease)}.prefs-menu__switch:checked:after{transform:translate(18px)}.prefs-menu__switch:focus-visible{outline:2px solid var(--text);outline-offset:2px}.prefs-menu__block{display:grid;gap:.55rem;padding:.45rem .2rem;border-top:1px solid var(--line)}.prefs-menu__sizes{display:grid;grid-template-columns:repeat(3,1fr);gap:.35rem}.prefs-menu__size{min-height:36px;border:1px solid var(--line);background:var(--bg);color:var(--text-muted);font-family:var(--font-mono);font-weight:600;line-height:1;cursor:pointer;transition:border-color .14s var(--ease),color .14s var(--ease),background .14s var(--ease)}.prefs-menu__size--normal{font-size:.85rem}.prefs-menu__size--large{font-size:1.05rem}.prefs-menu__size--xlarge{font-size:1.3rem}.prefs-menu__size:hover,.prefs-menu__size.is-active{border-color:var(--line-strong);color:var(--text)}.prefs-menu__size.is-active{background:var(--bg-elevated);border-color:var(--text)}.prefs-menu__size:focus-visible{outline:2px solid var(--text);outline-offset:2px}.prefs-menu__lang{display:flex;align-items:center;gap:.55rem;width:100%;padding:.55rem .35rem;border:0;border-top:1px solid var(--line);background:transparent;color:var(--text-muted);font-family:var(--font-mono);font-size:.82rem;cursor:pointer;text-align:left}.prefs-menu__lang:hover,.prefs-menu__lang.is-active{color:var(--text)}.prefs-menu--lang{width:min(200px,calc(100vw - 2rem))}.menu-toggle{width:40px;height:40px;display:inline-grid;place-items:center;border:1px solid var(--line);background:var(--bg-elevated)}.menu-toggle span,.menu-toggle span:before,.menu-toggle span:after{display:block;width:16px;height:2px;background:var(--text);position:relative}.menu-toggle span:before,.menu-toggle span:after{content:"";position:absolute;left:0}.menu-toggle span:before{top:-5px}.menu-toggle span:after{top:5px}.nav-mobile{display:none;position:fixed;top:var(--header-height);left:0;right:0;z-index:39;border-bottom:1px solid var(--line);background:var(--bg-elevated)}.nav-mobile.is-open{display:block}.nav-mobile a{display:block;padding:.9rem 1rem;font-family:var(--font-mono);font-size:.9rem;text-decoration:none;border-top:1px solid var(--line);color:var(--text-muted);transition:color .12s var(--ease),background .12s var(--ease)}.nav-mobile a:hover{background:var(--bg-soft);color:var(--text)}.nav-mobile a:active{color:var(--text-muted)}.nav-mobile a.is-selected{color:var(--text)}html[data-a11y-type=large]{font-size:112.5%}html[data-a11y-type=xlarge]{font-size:131.25%}html[data-a11y-contrast=high]{--line: rgba(255, 255, 255, .28);--line-strong: rgba(255, 255, 255, .5);--text-muted: #bdbdbd}html[data-theme=light][data-a11y-contrast=high]{--line: rgba(0, 0, 0, .28);--line-strong: rgba(0, 0, 0, .55);--text-muted: #444}html[data-a11y-motion=reduce] *,html[data-a11y-motion=reduce] *:before,html[data-a11y-motion=reduce] *:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.hero{position:relative;display:grid;padding:clamp(1.75rem,4vw,2.75rem) 0 clamp(1.25rem,3vw,2rem)}.hero__monitor{position:relative;margin:0;width:100%}.hero__monitor-chrome{display:block;width:100%;height:auto}.hero__monitor picture{display:block;width:100%}.hero__monitor-screen{--crt-scale: 1;position:absolute;left:10.59%;top:11.4%;width:78.69%;height:60.13%;display:flex;overflow:hidden;font-family:var(--font-mono);background:repeating-linear-gradient(to bottom,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 1px,transparent 1px,transparent 3px);text-shadow:0 0 6px rgba(61,255,122,.35)}@media (min-width: 600px) and (max-width: 767.98px){.hero__monitor-screen{--crt-scale: 1.2}}@media (min-width: 768px) and (max-width: 1023.98px){.hero__monitor-screen{--crt-scale: 1.4}}@media (min-width: 1024px){.hero__monitor-screen{left:8.66%;top:9.86%;width:50.66%;height:50.36%}}.hero__monitor-screen-body{flex:1;min-width:0;min-height:0;overflow:auto;padding:.55rem .55rem .55rem .7rem;scrollbar-width:none;-ms-overflow-style:none}.hero__monitor-screen-body::-webkit-scrollbar{display:none;width:0;height:0}.crt-scroll{flex:0 0 14px;width:14px;display:flex;flex-direction:column;background:#031a0c;border-left:1px solid #0a2a12;border-radius:0;z-index:2}.crt-scroll__btn{flex:0 0 14px;width:14px;height:14px;padding:0;border:0;border-bottom:1px solid #0a2a12;border-radius:0;background-color:#124a28;background-repeat:no-repeat;background-position:center;background-size:7px 7px;box-shadow:inset 1px 1px #1a5c32;cursor:pointer}.crt-scroll__btn--down{border-bottom:0;border-top:1px solid #0a2a12}.crt-scroll__btn--up{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%233dff7a' d='M4 1.2 7.2 6.5H.8z'/%3E%3C/svg%3E")}.crt-scroll__btn--down{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%233dff7a' d='M4 6.8.8 1.5h6.4z'/%3E%3C/svg%3E")}.crt-scroll__btn:hover{background-color:#1a5c32}.crt-scroll__btn:active{background-color:#248a48;box-shadow:inset 1px 1px #041a0c}.crt-scroll__track{flex:1;position:relative;min-height:0;background:#031a0c;border-radius:0;cursor:pointer}.crt-scroll__thumb{position:absolute;left:1px;right:1px;top:0;min-height:18px;background:#1a5c32;border:1px solid #0a2a12;border-radius:0;box-shadow:inset 1px 1px #2fcf66,inset -1px -1px #041a0c;cursor:grab;touch-action:none}.crt-scroll__thumb:hover{background:#248a48}.crt-scroll__thumb:active{background:#3dff7a;cursor:grabbing}.hero__monitor-line{margin:0 0 calc(.5rem * var(--crt-scale));font-size:calc(clamp(.62rem,1.15vw,.8rem) * var(--crt-scale));line-height:1.45;color:#2fcf66}.hero__monitor-line--dim{color:#1a8f45;margin-bottom:calc(.4rem * var(--crt-scale));font-size:calc(clamp(.55rem,1vw,.68rem) * var(--crt-scale))}.hero__monitor-line--lead{color:#6dff9a}.hero__monitor-brand{margin:0 0 calc(.65rem * var(--crt-scale));font-family:var(--font-pixel);font-size:calc(clamp(1.05rem,2.8vw,1.65rem) * var(--crt-scale));line-height:1.3;letter-spacing:.06em;color:#7dffb0;text-shadow:0 0 10px rgba(61,255,122,.45)}.hero__monitor-break{height:calc(1.5em * var(--crt-scale))}.hero__monitor-menu{display:grid;grid-template-columns:1fr 1fr;gap:calc(.75rem * var(--crt-scale)) calc(1rem * var(--crt-scale));margin-top:0}.hero__monitor-col{display:grid;gap:calc(.5rem * var(--crt-scale));align-content:start}.hero__monitor-col a{color:#3dff7a;font-size:calc(clamp(.92rem,1.65vw,1.18rem) * var(--crt-scale));line-height:1.35;text-decoration:underline;text-underline-offset:.2em}.hero__monitor-col a.hero__monitor-cta{font-size:calc(clamp(1.05rem,1.9vw,1.35rem) * var(--crt-scale));font-weight:600;line-height:1.3}.hero__monitor-col a:hover{color:#9dffc0}.hero__monitor-cursor{display:inline-block;width:.55em;height:1em;margin-top:calc(.35rem * var(--crt-scale));background:#3dff7a;box-shadow:0 0 8px #3dff7a8c;animation:hero-blink 1.6s linear infinite}@keyframes hero-blink{0%,45%{opacity:1}55%,to{opacity:0}}html[data-a11y-motion=reduce] .hero__monitor-cursor{animation:hero-blink 1.6s linear infinite!important;animation-duration:1.6s!important;animation-iteration-count:infinite!important}@media (prefers-reduced-motion: reduce){.hero__monitor-cursor{animation:hero-blink 1.6s linear infinite!important;animation-duration:1.6s!important;animation-iteration-count:infinite!important}}.projects__header{margin-bottom:2rem}.project-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin:1.5rem 0 0}.project-filters button{padding:.4rem .65rem;border:1px solid var(--line);font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted);background:transparent;transition:color .16s var(--ease),border-color .16s var(--ease),background .16s var(--ease)}.project-filters button:hover{color:var(--text);border-color:var(--text-muted)}.project-filters button:active{color:var(--text-muted)}.project-filters button.is-active{color:var(--text);border-color:var(--text)}.project-grid{list-style:none;margin:0;padding:0;display:grid;gap:1.25rem;grid-template-columns:1fr}.project-card{height:100%}.project-card__link{display:grid;grid-template-rows:auto 1fr;height:100%;text-decoration:none;color:inherit;border:1px solid var(--line);background:var(--bg-elevated);overflow:hidden;transition:border-color .18s var(--ease),transform .18s var(--ease)}.project-card__link:hover{color:inherit;border-color:var(--text-muted);transform:translateY(-2px)}.project-card__media{aspect-ratio:16 / 10;background:var(--bg-soft);overflow:hidden;border-bottom:1px solid var(--line)}.project-card__media img{width:100%;height:100%;object-fit:cover;object-position:top;transition:transform .32s var(--ease),filter .32s var(--ease);filter:grayscale(.35)}.project-card__media--contain img{object-fit:contain;object-position:center}.project-card__link:hover .project-card__media img{transform:scale(1.03);filter:grayscale(0)}.project-card__body{display:grid;gap:.75rem;padding:1.15rem 1.2rem 1.35rem;align-content:start}.project-card__title{margin:0;font-size:1.15rem;font-weight:600;letter-spacing:-.02em;line-height:1.25}.project-card__client{margin:0;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.project-card__tags{display:flex;flex-wrap:wrap;gap:.35rem}.tag{font-family:var(--font-mono);font-size:.7rem;color:var(--text-muted);border:1px solid var(--line);padding:.12rem .38rem}.project-card__summary{margin:0;color:var(--text-muted);font-size:.92rem;line-height:1.5}.contact__grid{display:grid;gap:1rem;margin-top:1.75rem}.contact__item{display:grid;gap:.25rem;padding:1rem;border:1px solid var(--line);background:var(--bg-elevated);text-decoration:none;transition:border-color .18s var(--ease)}.contact__item:hover{color:inherit;border-color:var(--text-muted)}.contact__item span{font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted)}.contact__item strong{font-size:1rem;font-weight:600}.profile__role{margin:0 0 1.25rem;font-family:var(--font-mono);font-size:.92rem;color:var(--text-muted)}.profile__bio{display:grid;gap:1rem;max-width:46rem;margin-bottom:1.5rem}.profile__bio p{margin:0;color:var(--text-muted);font-family:var(--font-mono);font-size:.92rem;line-height:1.55}.profile__block{margin-top:2.75rem}.profile__heading{margin:0 0 1.15rem;font-family:var(--font-mono);font-size:clamp(1.55rem,2.8vw,1.95rem);font-weight:600;letter-spacing:-.02em;color:var(--green-programming)}[data-theme=dark] .profile__heading{text-shadow:0 0 8px rgba(34,168,79,.22)}.profile__jobs,.profile__edu{list-style:none;margin:0;padding:0;display:grid;gap:0;border-top:1px solid var(--line)}.profile__job,.profile__edu-item{padding:1.25rem 0;border-bottom:1px solid var(--line)}.profile__job-top,.profile__edu-top{display:flex;flex-wrap:wrap;gap:.35rem 1rem;justify-content:space-between;align-items:baseline;margin-bottom:.35rem}.profile__job-role,.profile__edu-title{margin:0;font-family:var(--font-mono);font-size:.95rem;font-weight:600;color:var(--text)}.profile__job-dates,.profile__edu-meta{font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted);white-space:nowrap}.profile__job-company{margin:0 0 .15rem;font-family:var(--font-mono);font-size:.85rem;color:var(--text)}.profile__job-place,.profile__edu-detail{margin:0 0 .65rem;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.profile__job-summary{margin:0 0 .75rem;max-width:42rem;font-family:var(--font-mono);font-size:.85rem;line-height:1.5;color:var(--text-muted)}.profile__job-highlights{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:.4rem .55rem}.profile__job-highlights li{font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted);border:1px solid var(--line);padding:.25rem .45rem}.profile__skills-lead{margin:0 0 1.25rem;color:var(--text-muted);font-family:var(--font-mono);font-size:.85rem}.skills__grid{display:grid;gap:2rem}.skills__group-title{margin:0 0 1rem;font-family:var(--font-mono);font-size:.95rem;font-weight:600;color:var(--text)}.skills__list{list-style:none;margin:0;padding:0;display:grid;gap:.85rem}.skill__meta{display:flex;justify-content:space-between;gap:.75rem;margin-bottom:.35rem;font-family:var(--font-mono);font-size:.78rem}.skill__name{color:var(--text)}.skill__level{color:var(--text-muted);font-variant-numeric:tabular-nums}.skill__track{height:8px;border:1px solid #fff;background:var(--bg-soft);border-radius:0;overflow:hidden}.skill__fill{display:block;height:100%;background:var(--green-programming);border-radius:0;box-sizing:border-box;border-right:1px solid #fff}.site-footer{border-top:1px solid var(--line);padding:1.5rem 0 2rem}.site-footer__inner{display:flex;flex-wrap:wrap;gap:.75rem 1.5rem;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.site-footer__links{display:flex;gap:1rem}.site-footer__links a{text-decoration:none}.site-footer__links a:hover{color:var(--text)}.project-overlay{position:fixed;inset:0;z-index:50;display:grid;place-items:stretch;background:var(--overlay);backdrop-filter:blur(8px);padding:1rem;overflow:hidden;overscroll-behavior:none}.project-panel{width:100%;margin:0 auto;height:calc(100svh - 2rem);max-height:calc(100svh - 2rem);display:flex;flex-direction:column;overflow:hidden;background:var(--bg-elevated);border:1px solid var(--line-strong);box-shadow:var(--shadow)}.project-panel__bar{flex:0 0 auto;z-index:1;display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 1rem;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg-elevated) 92%,transparent);backdrop-filter:blur(8px)}.project-panel__bar span{font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.project-panel__close{width:36px;height:36px;border:1px solid var(--line);font-family:var(--font-mono);font-size:1rem;line-height:1}.project-panel__close:hover{border-color:var(--text-muted);color:var(--text)}.project-panel__body{--body-pad: 1.25rem;--scroll-w: 0px;display:grid;gap:1.25rem;padding:var(--body-pad);padding-right:calc(var(--body-pad) + var(--scroll-w));flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-width:none;-ms-overflow-style:none}.project-panel__body::-webkit-scrollbar{width:0;height:0;display:none}.project-panel__hero{display:grid;grid-template-columns:minmax(72px,22%) minmax(0,1fr);gap:.85rem 1rem;align-items:start}.project-panel__media{border:1px solid var(--line);overflow:hidden;background:var(--bg-soft);aspect-ratio:1 / 1;width:100%;max-width:none}.project-panel__media img{width:100%;height:100%;object-fit:contain;display:block}.project-panel__intro{display:grid;gap:.75rem;align-content:start;min-width:0}.project-panel__meta{margin:0;font-family:var(--font-mono);font-size:.78rem;color:var(--text-muted)}.project-panel__content{display:grid;gap:1rem}.project-panel__title{margin:0;font-family:var(--font-mono);font-size:clamp(1.25rem,4vw,2.1rem);font-weight:600;letter-spacing:-.02em;line-height:.9}.project-panel__desc{margin:0;color:var(--text-muted);font-family:var(--font-mono);font-size:.92rem;line-height:1.55}.project-panel__content>.project-panel__desc+.project-panel__desc{margin-top:-.4rem}.project-panel__meta-block{display:grid;gap:.35rem}.project-panel__meta-label{font-family:var(--font-mono);font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}.project-panel__pending,.project-panel__gap-note{margin:0;padding:.65rem .85rem;border:1px solid var(--line-strong);background:var(--bg-soft);font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted)}.project-panel__gap-note{border-style:dashed}.project-panel hr.ficha-divider{border:0;border-top:1px solid #fff;margin:0;padding:1.1rem 0 0}.project-tabs{margin-left:calc(-1 * var(--body-pad));margin-right:calc(-1 * var(--body-pad) - var(--scroll-w));padding:.15rem var(--body-pad) 0;padding-right:calc(var(--body-pad) + var(--scroll-w));border-bottom:1px solid var(--text)}.project-tabs__list{position:relative;isolation:isolate;display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:.35rem;align-items:end;border-bottom:0}.project-tabs__tab{appearance:none;position:relative;z-index:1;margin:0;padding:.55rem .25rem .65rem;border:1px solid #555;border-bottom:1px solid transparent;background:#2a2a30;color:#a0a0a0;font-family:var(--font-mono);font-size:.72rem;font-weight:600;cursor:pointer;text-align:left}.project-tabs__tab:hover{color:#c4c4c4;border-color:#666;border-bottom-color:transparent;background:#323238}.project-tabs__tab[aria-selected=true]{z-index:5;color:var(--text);background:var(--bg-elevated);border:1px solid var(--text);border-bottom:1px solid transparent;padding-top:.75rem;padding-bottom:.7rem;margin-bottom:-1px}.project-tabs__num{display:block;font-size:.6rem;opacity:.55;margin-bottom:.12rem}.project-tabs__tab[aria-selected=true] .project-tabs__num{opacity:.85}.project-tabs__pane{display:grid;gap:1rem;padding-top:.35rem}.project-tabs__media{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;background:transparent}.project-tabs__media figure{margin:0;aspect-ratio:1;overflow:hidden;background:var(--bg-soft);border:1px solid var(--line)}.project-tabs__media img{width:100%;height:100%;object-fit:contain;display:block}img.logo-on-white{background:#fff;padding:1rem;box-sizing:border-box}.project-panel__cta{flex:0 0 auto;z-index:2;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding:.85rem 1.25rem;border-top:1px solid var(--line);background:color-mix(in srgb,var(--bg-elevated) 96%,transparent);backdrop-filter:blur(8px)}.cta-tabs{margin-left:auto;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem;opacity:0;pointer-events:none;transition:opacity .22s var(--ease)}.cta-tabs.is-visible{opacity:1;pointer-events:auto}.cta-tabs__btn{appearance:none;margin:0;padding:.45rem .55rem;border:1px solid var(--line);background:transparent;color:var(--text-muted);font-family:var(--font-mono);font-size:.68rem;cursor:pointer}.cta-tabs__btn[aria-selected=true]{border-color:var(--line-strong);color:var(--text);background:var(--bg-soft)}.cta-tabs__num{opacity:.7}@media (prefers-reduced-motion: reduce){.cta-tabs{transition:none}}.project-panel__gallery{display:grid;gap:.75rem;grid-template-columns:1fr}.project-panel__gallery img{border:1px solid var(--line);width:100%;height:auto;object-fit:contain}.project-missing{padding:3rem 1.25rem;text-align:center}@media (min-width: 640px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.35rem}}@media (min-width: 768px){.nav-desktop{display:flex}.menu-toggle{display:none}.nav-mobile{display:none!important}.contact__grid{grid-template-columns:repeat(2,1fr)}.skills__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem 2.5rem}.project-panel__body{--body-pad: 1.75rem;padding:var(--body-pad);padding-right:calc(var(--body-pad) + var(--scroll-w))}.project-panel__hero{grid-template-columns:minmax(120px,20%) minmax(0,1fr);gap:1.25rem;align-items:start}.project-panel__media{max-width:none;width:100%;aspect-ratio:1 / 1}.project-tabs__tab{font-size:.78rem;padding:.7rem .4rem .75rem}.project-tabs__tab[aria-selected=true]{padding-top:.9rem}.project-panel__gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.project-tabs__media{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1024px){.project-panel{width:80%;max-width:80vw}.project-grid{gap:1.5rem}.skills__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
