@font-face{font-family:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;font-stretch:75% 100%;src:url(/assets/instrument-sans-latin-ext-standard-normal-C5E2Gvlv.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;font-stretch:75% 100%;src:url(/assets/instrument-sans-latin-standard-normal-BVScPF0l.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Caveat Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/caveat-cyrillic-ext-wght-normal-DiMfzA-V.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Caveat Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/caveat-cyrillic-wght-normal-D5lnP6kL.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Caveat Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/caveat-latin-ext-wght-normal-Byk3UhVp.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Caveat Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/caveat-latin-wght-normal-C1hSzPvX.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@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");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2) format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2) format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2) format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--bg: #ffffff;--surface: #f1f5f9;--surface-2: #f8fafc;--line: #e2e8f0;--line-strong: #cbd5e1;--fg: #0f172a;--fg-2: #475569;--fg-3: #5b6a80;--accent: #2563eb;--accent-soft: color-mix(in srgb, #2563eb 10%, transparent);--live: #0e7490;--hatch: #e2e8f0;--shadow: 0 1px 2px rgb(15 23 42 / .04), 0 12px 32px -12px rgb(15 23 42 / .16);--btn-bg: #0f172a;--btn-fg: #f8fafc;--shine: #0f172a;--font-sans: "Instrument Sans Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-hand: "Caveat Variable", "Segoe Print", cursive;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-md: .9375rem;--text-base: 1rem;--text-lg: 1.0625rem;--text-xl: clamp(1.125rem, 1.05rem + .3vw, 1.25rem);--text-2xl: clamp(1.375rem, 1.25rem + .5vw, 1.625rem);--text-display: clamp(2rem, 1.6rem + 1.6vw, 2.75rem);--frame: 800px;--gutter: 16px;--cell: clamp(20px, 3vw, 32px);--section-y: clamp(36px, 5vw, 56px);--header-h: 56px;--radius: 8px;--radius-lg: 12px;--ease-out: cubic-bezier(.2, .7, .1, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--dur: .2s}:root[data-theme=dark]{color-scheme:dark;--bg: #0a0a0a;--surface: #161616;--surface-2: #101010;--line: #262626;--line-strong: #3a3a3a;--fg: #ededed;--fg-2: #a3a3a3;--fg-3: #8c8c8c;--accent: #7da2ff;--accent-soft: color-mix(in srgb, #7da2ff 14%, transparent);--live: #22d3ee;--hatch: #262626;--shadow: 0 1px 2px rgb(0 0 0 / .3), 0 16px 40px -16px rgb(0 0 0 / .7);--btn-bg: #ededed;--btn-fg: #0a0a0a;--shine: #ffffff}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--bg: #0a0a0a;--surface: #161616;--surface-2: #101010;--line: #262626;--line-strong: #3a3a3a;--fg: #ededed;--fg-2: #a3a3a3;--fg-3: #8c8c8c;--accent: #7da2ff;--live: #22d3ee;--hatch: #262626;--btn-bg: #ededed;--btn-fg: #0a0a0a;--shine: #ffffff}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 12px)}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--text-base);line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}body.is-locked{overflow:hidden}h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}h1,h2,h3,h4{font-weight:500;line-height:1.15;letter-spacing:-.02em;text-wrap:balance}p{text-wrap:pretty}ul,ol{margin:0;padding:0}img,video,svg{display:block;max-width:100%}img,video{height:auto}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.22em}main:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}::selection{background:color-mix(in srgb,var(--accent) 22%,transparent)}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip-link{position:fixed;top:8px;left:8px;z-index:100;padding:8px 12px;border-radius:var(--radius);background:var(--btn-bg);color:var(--btn-fg);font-size:var(--text-sm);text-decoration:none;transform:translateY(-160%)}.skip-link:focus{transform:none}.frame{width:calc(100% - 2 * var(--gutter));max-width:var(--frame);margin-inline:auto;border-inline:1px solid var(--line)}@media(max-width:640px){.frame{width:100%;border-inline:0}}.cell{padding:var(--cell)}.hatch{height:32px;border-block:1px solid var(--line);background-image:repeating-linear-gradient(-45deg,var(--hatch) 0 1px,transparent 1px 7px)}.hatch>.frame{height:100%}.section-title{display:flex;align-items:baseline;gap:6px;padding:20px var(--cell);border-bottom:1px solid var(--line);font-size:var(--text-2xl);font-weight:500;letter-spacing:-.025em;line-height:1.2}.section-title sup{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;letter-spacing:0;color:var(--fg-3);top:-1em}.mono{font-family:var(--font-mono);font-size:var(--text-sm);letter-spacing:0}.label{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;letter-spacing:.02em;line-height:1.5;color:var(--fg-3)}.muted{color:var(--fg-2)}.btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--fg);font-size:var(--text-sm);font-weight:500;line-height:1;text-decoration:none;white-space:nowrap;transition:background-color var(--dur) var(--ease-out),border-color var(--dur) var(--ease-out)}.btn:hover{border-color:var(--line-strong);background:var(--line)}.btn--primary{border-color:var(--btn-bg);background:var(--btn-bg);color:var(--btn-fg)}.btn--primary:hover{border-color:var(--btn-bg);background:color-mix(in srgb,var(--btn-bg) 85%,var(--bg))}.btn svg{width:16px;height:16px;transition:transform var(--dur) var(--ease-out)}.btn:hover .icon-down{transform:translateY(2px)}.btn:hover .icon-right{transform:translate(2px)}.link{display:inline-flex;align-items:center;gap:4px;padding:0;border:0;background:none;color:var(--fg);font-size:var(--text-sm);font-weight:500;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:.3em;transition:text-decoration-color var(--dur) var(--ease-out);cursor:pointer}.link:hover{text-decoration-color:currentColor}.link svg{width:14px;height:14px}.icon{width:16px;height:16px;flex-shrink:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.reveal-ready [data-reveal]:not(.is-in){opacity:0}.reveal-ready [data-reveal].is-in{animation:reveal-rise .7s var(--ease-out) both;animation-delay:var(--reveal-delay, 0ms)}@keyframes reveal-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:no-preference){.hero__main>*{animation:reveal-rise .8s var(--ease-out) both}.hero__main>:nth-child(2){animation-delay:80ms}.hero__main>:nth-child(3){animation-delay:.16s}.hero__main>:nth-child(4){animation-delay:.24s}.hatch:hover{animation:hatch-slide 1.2s linear infinite}}@keyframes hatch-slide{to{background-position:20px 0}}.site-header{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 92%,transparent);-webkit-backdrop-filter:saturate(1.4) blur(8px);backdrop-filter:saturate(1.4) blur(8px);border-bottom:1px solid var(--line)}.site-header__inner{display:flex;align-items:center;justify-content:space-between;gap:12px;height:var(--header-h);padding-inline:var(--cell)}.brand{display:inline-flex;align-items:center;gap:10px;font-size:var(--text-md);font-weight:500;letter-spacing:-.01em;text-decoration:none;white-space:nowrap}.brand__mark{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;background:var(--btn-bg);color:var(--btn-fg);font-size:.75rem;font-weight:600;letter-spacing:-.01em}.brand__name{display:none}@media(min-width:760px){.brand__name{display:inline}}.site-header__nav{display:flex;align-items:center;gap:4px}.nav{display:flex;list-style:none}.nav a{display:block;padding:6px 8px;border-radius:6px;color:var(--fg-2);font-size:var(--text-sm);font-weight:500;text-decoration:none;transition:color var(--dur) var(--ease-out),background-color var(--dur) var(--ease-out)}.nav a:hover{color:var(--fg);background:var(--surface)}.site-header__sep{width:1px;height:16px;margin-inline:4px;background:var(--line)}@media(max-width:400px){.nav a{padding-inline:6px}.site-header__sep{display:none}}.icon-button,.cv-menu__button{display:inline-grid;place-items:center;height:32px;min-width:32px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--fg-2);transition:color var(--dur) var(--ease-out),background-color var(--dur) var(--ease-out)}.icon-button:hover,.cv-menu__button:hover,.cv-menu__button[aria-expanded=true]{color:var(--fg);background:var(--surface)}.theme-toggle__moon,:root[data-theme=dark] .theme-toggle__sun{display:none}:root[data-theme=dark] .theme-toggle__moon{display:block}.cv-menu{position:relative}.cv-menu__button{display:inline-flex;gap:2px;padding:0 6px 0 8px;font-size:var(--text-sm);font-weight:500}.cv-menu__chevron{width:14px;height:14px;transition:transform var(--dur) var(--ease-out)}.cv-menu__button[aria-expanded=true] .cv-menu__chevron{transform:rotate(180deg)}.cv-menu__list{position:absolute;right:0;top:calc(100% + 8px);width:min(264px,calc(100vw - 32px));padding:4px;list-style:none;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg);box-shadow:var(--shadow)}.cv-menu__list a{display:flex;align-items:flex-start;gap:10px;padding:10px;border-radius:var(--radius);text-decoration:none}.cv-menu__list a .icon{margin-top:2px;color:var(--fg-3)}.cv-menu__list a:hover,.cv-menu__list a:focus-visible{background:var(--surface)}.cv-menu__title{display:block;font-size:var(--text-sm);font-weight:500}.cv-menu__detail{display:block;font-size:var(--text-xs);color:var(--fg-3)}.review-badge{position:fixed;left:16px;bottom:16px;z-index:50;display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:var(--bg);box-shadow:var(--shadow);font-family:var(--font-mono);font-size:.6875rem;color:var(--fg-2)}.review-badge__dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}.nav a{white-space:nowrap}@media(max-width:480px){.site-header__inner{gap:8px}.nav a{padding-inline:5px;font-size:.8125rem}.cv-menu__button{padding-inline:5px 3px;font-size:.8125rem}.review-badge{left:12px;bottom:12px;font-size:.625rem}.review-badge__long{display:none}}@media(max-width:360px){.site-header__inner{gap:4px;padding-inline:12px}.nav a{padding-inline:4px}}a.cv-menu__button{text-decoration:none}.banner{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.banner__svg{display:block;width:100%;height:100%;overflow:visible}.banner__guides path{fill:none;stroke:var(--line);stroke-width:1}.banner__side,.banner__top{fill:var(--bg);stroke:var(--line-strong);stroke-width:.06;stroke-linejoin:round}.banner__top-hatch{fill:url(#iso-hatch);stroke:none}.banner__hatch-line{stroke:var(--line)}@media(prefers-reduced-motion:no-preference){.banner__shape{animation:banner-rise .9s var(--ease-out) both;animation-delay:calc(var(--i) * .14s + .1s)}.banner__guides path{stroke-dasharray:2400;stroke-dashoffset:2400;animation:banner-guides 1.6s var(--ease-out) forwards}}@keyframes banner-rise{0%{opacity:0;transform:translateY(.8px)}to{opacity:1;transform:none}}@keyframes banner-guides{to{stroke-dashoffset:0}}.scribble{display:inline-flex;gap:4px;font-family:var(--font-hand);font-size:1.25rem;font-weight:400;line-height:1.15;letter-spacing:0;color:var(--fg-3)}.scribble--before{flex-direction:column;align-items:flex-start}.scribble--after{align-items:flex-end}.scribble__text{display:block;max-width:26ch;text-wrap:balance}.scribble__arrow{width:32px;height:32px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}@media(prefers-reduced-motion:no-preference){.scribble__arrow path{stroke-dasharray:60;stroke-dashoffset:60;animation:scribble-draw .9s var(--ease-out) forwards;animation-delay:1.4s}.scribble__arrow path+path{animation-delay:1.9s}}@keyframes scribble-draw{to{stroke-dashoffset:0}}.farewell{position:relative;display:grid;place-items:center;min-height:220px;padding:28px 24px 64px}.farewell__button{display:grid;place-items:center;width:168px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--fg);cursor:pointer;transition:transform .4s var(--ease-spring)}.farewell__button:hover{transform:rotate(4deg) scale(1.03)}.farewell__button:active{transform:scale(.96)}.farewell__svg{width:100%;overflow:visible}.farewell__draw,.farewell__cheek,.farewell__lines{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.farewell__cheek{stroke:var(--accent);opacity:.7}.farewell__lines{stroke-width:1.5;opacity:0}.farewell__hand{transform-box:fill-box;transform-origin:30% 100%}.farewell__note{position:absolute;bottom:14px;left:calc(50% - 4px)}.farewell__note .scribble{transform:rotate(-4deg);white-space:nowrap}@media(prefers-reduced-motion:no-preference){.farewell:not(.is-static) .farewell__draw{stroke-dasharray:1;stroke-dashoffset:1}.farewell:not(.is-static) .farewell__cheek{opacity:0}.farewell.is-seen:not(.is-static) .farewell__draw{animation:farewell-draw .9s var(--ease-out) forwards}.farewell.is-seen .farewell__eye{animation-delay:.5s!important}.farewell.is-seen .farewell__cheek{animation:farewell-fade .4s var(--ease-out) 1s forwards}.farewell.is-seen .farewell__hand{animation:farewell-wave 1.1s var(--ease-out) .7s both}.farewell.is-seen .farewell__lines{animation:farewell-lines 1.1s var(--ease-out) .7s both}}@keyframes farewell-draw{to{stroke-dashoffset:0}}@keyframes farewell-fade{to{opacity:.7}}@keyframes farewell-wave{0%,to{transform:rotate(0)}15%,55%{transform:rotate(-18deg)}35%,75%{transform:rotate(12deg)}}@keyframes farewell-lines{0%,to{opacity:0}20%,80%{opacity:1}}.farewell__stroke{stroke-width:1.1}.farewell__hand{transform-origin:20% 95%}.farewell__button{width:190px}.smiley{position:relative;display:grid;place-items:center}.smiley__button{display:grid;place-items:center;width:var(--smiley-size, 148px);height:var(--smiley-size, 148px);padding:0;border:0;border-radius:50%;background:transparent;color:var(--fg);cursor:pointer;transition:transform .4s var(--ease-spring)}.smiley__button:hover{transform:rotate(-6deg) scale(1.03)}.smiley__button:active{transform:scale(.96)}.smiley__svg{width:100%;height:100%;overflow:visible}.smiley__face,.smiley__smile{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:0}.smiley__eye{fill:currentColor;transform-box:fill-box;transform-origin:center;transition:transform .12s ease-in}.smiley__eye.is-closed{transform:scaleY(.12)}.smiley__mouth{transform-box:fill-box;transform-origin:center top;transition:transform .45s var(--ease-spring),opacity .16s var(--ease-out)}.smiley__button:hover .smiley__mouth,.smiley__button:focus-visible .smiley__mouth{transform:scale(1.12,1.45)}.smiley__svg{transition:transform .5s var(--ease-spring)}.smiley__brows path,.smiley__hmm{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.smiley__brows,.smiley__hmm{opacity:0;transition:opacity .2s var(--ease-out),transform .42s var(--ease-spring)}.smiley__brows{transform:translateY(6px)}[data-face=curious] .smiley__svg{transform:rotate(-10deg)}[data-face=curious] .smiley__brows,[data-face=curious] .smiley__hmm{opacity:1;transform:none}[data-face=curious] .smiley__mouth{opacity:0}[data-face=curious] .smiley__eye:first-child{transform:scale(1.2)}[data-face=curious] .smiley__eye:last-child{transform:scaleY(.55)}.smiley__glasses,.smiley__o{opacity:0;transition:opacity .2s var(--ease-out),transform .38s var(--ease-spring)}.smiley__glasses{fill:currentColor;transform:translateY(-14px)}.smiley__glasses-bridge{fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round}.smiley__o{fill:none;stroke:currentColor;stroke-width:2;transform-box:fill-box;transform-origin:center;transform:scale(.3)}[data-face=cool] .smiley__glasses,[data-face=wow] .smiley__o{opacity:1;transform:none}[data-face=wow] .smiley__mouth{opacity:0}[data-face=wow] .smiley__eye{transform:scale(1.25)}[data-face=cool] .smiley__mouth{transform:scale(.9,.8) translateY(-1px)}.smiley__burst line{stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-dasharray:10;stroke-dashoffset:10;opacity:0}@media(prefers-reduced-motion:no-preference){.smiley__burst line{animation:spark .56s var(--ease-out) both}}@keyframes spark{0%{opacity:1;stroke-dashoffset:10;translate:0 6px}60%{opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-10;translate:0 -6px}}.smiley__bubble{position:absolute;bottom:calc(100% + 6px);left:50%;translate:-50% 0;padding:4px 10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);box-shadow:var(--shadow);font-family:var(--font-mono);font-size:var(--text-xs);width:max-content;max-width:220px;text-align:center;line-height:1.4;color:var(--fg);opacity:0;pointer-events:none}.smiley__bubble.is-on{opacity:1}@media(prefers-reduced-motion:no-preference){.smiley__button:not(.is-static) .smiley__face{animation:smiley-draw 1.1s var(--ease-out) both}.smiley__button:not(.is-static) .smiley__eye ellipse{animation:smiley-pop .42s var(--ease-spring) both;animation-delay:.85s;transform-box:fill-box;transform-origin:center}.smiley__button:not(.is-static) .smiley__eye--right ellipse{animation-delay:.95s}.smiley__button:not(.is-static) .smiley__smile{animation:smiley-draw .65s var(--ease-out) both;animation-delay:1.15s}.smiley__bubble.is-on{animation:bubble-in .36s var(--ease-spring) both}}@keyframes smiley-draw{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}@keyframes smiley-pop{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes bubble-in{0%{opacity:0;transform:translateY(6px) scale(.9)}to{opacity:1;transform:none}}.smiley__happy-eyes path,.smiley__sparkles path,.smiley__blush{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.smiley__blush{stroke:var(--accent)}.smiley__happy-eyes,.smiley__sparkles,.smiley__blush{opacity:0;transition:opacity .2s var(--ease-out)}[data-face=love] .smiley__happy-eyes,[data-face=love] .smiley__blush{opacity:1}[data-face=love] .smiley__eye{opacity:0}[data-face=love] .smiley__mouth{transform:scale(1.12,1.45)}.smiley__heart{fill:var(--accent);opacity:0}.smiley__kawaii-eyes,.smiley__cheeks,.smiley__kawaii-mouth,.smiley__stars{opacity:0;transition:opacity .18s var(--ease-out),transform .38s var(--ease-spring)}.smiley__kawaii-eyes{fill:currentColor;transform-box:fill-box;transform-origin:center;transform:scale(.6)}.smiley__shine{fill:var(--bg)}.smiley__cheeks{fill:var(--accent)}.smiley__kawaii-mouth{fill:currentColor;stroke:currentColor;stroke-width:2;stroke-linejoin:round}.smiley__stars{fill:var(--accent)}[data-face=excited] .smiley__kawaii-eyes,[data-face=excited] .smiley__kawaii-mouth,[data-face=excited] .smiley__stars{opacity:1;transform:none}[data-face=excited] .smiley__cheeks{opacity:.35}[data-face=excited] .smiley__eye,[data-face=excited] .smiley__mouth,[data-face=squint] .smiley__eye,[data-face=sleep] .smiley__eye,[data-face=squint] .smiley__mouth,[data-face=sleep] .smiley__mouth{opacity:0}.smiley__sleep-eyes path,.smiley__squint-eyes path,.smiley__small-mouth{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.smiley__sleep-eyes,.smiley__squint-eyes,.smiley__small-mouth{opacity:0;transition:opacity .2s var(--ease-out)}[data-face=sleep] .smiley__sleep-eyes,[data-face=squint] .smiley__squint-eyes,[data-face=sleep] .smiley__small-mouth,[data-face=squint] .smiley__small-mouth{opacity:1}[data-face=sleep] .smiley__svg{transform:rotate(8deg) translateY(2px)}.smiley__zzz{position:absolute;top:-4px;left:calc(50% + 44px);display:flex;gap:2px;align-items:flex-end;font-family:var(--font-hand);font-size:1.25rem;line-height:1;color:var(--fg-3);pointer-events:none}.smiley__zzz span:nth-child(2){font-size:1.5rem;transform:translateY(-8px)}.smiley__zzz span:nth-child(3){font-size:1.75rem;transform:translateY(-18px)}@media(prefers-reduced-motion:no-preference){[data-face=sleep] .smiley__svg{animation:smiley-breathe 3.2s ease-in-out infinite}.smiley__zzz span{animation:zzz-float 2.4s ease-in-out infinite}.smiley__zzz span:nth-child(2){animation-delay:.4s}.smiley__zzz span:nth-child(3){animation-delay:.8s}.smiley__heart{animation:heart-float 1.6s var(--ease-out) forwards}[data-face=excited] .smiley__stars path{transform-box:fill-box;transform-origin:center;animation:twinkle .9s ease-in-out infinite alternate}[data-face=excited] .smiley__stars path:nth-child(2){animation-delay:.3s}[data-face=excited] .smiley__stars path:nth-child(3){animation-delay:.6s}[data-face=excited] .smiley__svg{animation:bounce .6s var(--ease-spring)}}@media(prefers-reduced-motion:reduce){[data-face=love] .smiley__heart{opacity:1}}@keyframes smiley-breathe{0%,to{transform:rotate(8deg) translateY(2px) scale(1)}50%{transform:rotate(8deg) translateY(2px) scale(1.03)}}@keyframes zzz-float{0%,to{opacity:.35;translate:0 0}50%{opacity:1;translate:3px -4px}}@keyframes heart-float{0%{opacity:0;transform:translate(88px,22px) scale(.4)}25%{opacity:1;transform:translate(88px,14px) scale(1.15)}to{opacity:0;transform:translate(96px,-18px) scale(.9)}}@keyframes twinkle{0%{opacity:.35;transform:scale(.7) rotate(0)}to{opacity:1;transform:scale(1.1) rotate(20deg)}}@keyframes bounce{0%{transform:translateY(0)}40%{transform:translateY(-6px)}to{transform:translateY(0)}}.viewer{width:min(1280px,100vw - 32px);max-width:none;height:calc(100dvh - 32px);max-height:none;margin:auto;padding:0;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--bg);color:var(--fg);box-shadow:var(--shadow);overflow:hidden}.viewer::backdrop{background:#0f172a80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.viewer__panel{display:grid;grid-template-rows:auto minmax(0,1fr);height:100%}.viewer__bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 12px 10px 16px;border-bottom:1px solid var(--line)}.viewer__title{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;letter-spacing:0;color:var(--fg-3)}.viewer__actions{display:flex;flex-shrink:0;gap:6px}.viewer__button{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--fg);font-size:var(--text-sm);font-weight:500}.viewer__button:hover,.viewer__button[aria-pressed=true]{background:var(--line)}.viewer__key{display:none;padding:0 4px;border:1px solid var(--line-strong);border-radius:4px;font-family:var(--font-mono);font-size:.6875rem;color:var(--fg-3)}@media(hover:hover){.viewer__key{display:inline}}.viewer__scroll{overflow:auto;overscroll-behavior:contain;padding:16px;background:var(--surface-2)}.viewer__scroll:focus-visible{outline-offset:-4px}.viewer__scroll img{width:100%;max-width:1200px;margin-inline:auto;border:1px solid var(--line);border-radius:4px}.viewer__scroll.is-actual img{width:auto;max-width:none}.viewer__scroll.is-narrow img{width:min(100%,390px)}.fig{display:grid;gap:10px;min-width:0}.fig__frame{position:relative;display:block;width:100%;padding:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface-2)}.fig__frame img,.fig__frame video{width:100%}.fig__zoom{cursor:zoom-in}.fig__zoom-hint{position:absolute;right:10px;bottom:10px;display:grid;place-items:center;width:30px;height:30px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--fg-2);opacity:0;transition:opacity var(--dur) var(--ease-out)}.fig__zoom-hint svg{width:14px;height:14px}.fig__zoom:hover .fig__zoom-hint,.fig__zoom:focus-visible .fig__zoom-hint{opacity:1}@media(hover:none){.fig__zoom-hint{opacity:.9}}.fig__caption{display:grid;gap:4px;max-width:68ch;font-size:var(--text-sm);line-height:1.5;color:var(--fg-2)}.fig__meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px}.fig__full{justify-self:start;margin-top:4px}.origin{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-3)}.origin:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--live)}.origin--figma:before,.origin--diseno:before{border-radius:1px;background:var(--accent);transform:rotate(45deg)}.fig__video{background:#000}.fig__playback{position:absolute;right:10px;bottom:10px;display:grid;place-items:center;width:30px;height:30px;border:1px solid rgb(255 255 255 / .2);border-radius:6px;background:#0f172a99;color:#f8fafc;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:.75;transition:opacity var(--dur) var(--ease-out)}.fig__video:hover .fig__playback,.fig__playback:focus-visible,.fig__playback.is-paused{opacity:1}.fig__playback svg{width:12px;height:12px}.fig__pause{width:10px;height:10px;border-inline:3px solid currentColor}.fig__overview{padding:clamp(10px,2vw,20px);background-color:var(--surface-2);background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:14px 14px}.fig__overview img{background:transparent!important;border-radius:3px}.phones__stage{display:grid;justify-items:center;gap:20px;padding-block:32px 20px;background-color:var(--surface-2);background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:14px 14px;touch-action:pan-y}.phone{position:relative;z-index:1;width:256px;max-width:100%;padding:8px;border-radius:40px;background:#0f172a;box-shadow:inset 0 0 0 1px #334155,var(--shadow)}.phone__island{position:absolute;z-index:2;left:50%;top:16px;width:72px;height:20px;translate:-50% 0;border-radius:999px;background:#0f172a}.phone__screen{position:relative;aspect-ratio:9 / 19.5;border-radius:32px;overflow:hidden;background:#fff}.phone__screen:before{content:"";position:absolute;inset:0 0 auto;height:38px;background:#fff;z-index:1}.phone__screen img{position:absolute;top:38px;right:0;bottom:0;left:0;width:100%;height:calc(100% - 38px);object-fit:cover;object-position:top;opacity:0;transition:opacity .24s var(--ease-out)}.phone__screen img[data-on]{opacity:1}.phone--ghost{display:none}@media(min-width:720px){.phone--ghost{display:block;position:absolute;top:32px;z-index:0;opacity:.35;scale:.82;pointer-events:none}.phone--ghost .phone__screen img{opacity:1}.phone--left{left:calc(50% - 332.8px)}.phone--right{left:calc(50% + 76.8px)}}.phones__controls{position:relative;z-index:1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:min(100%,380px);padding-inline:12px}.phones__status{display:grid;gap:2px;min-height:2.8em;text-align:center;font-size:var(--text-sm);line-height:1.35;color:var(--fg-2)}.phones__button{display:grid;place-items:center;width:36px;height:36px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);color:var(--fg)}.phones__button:hover{background:var(--surface)}.explorer__list{list-style:none;counter-reset:row}.explorer__row{position:relative;display:grid;grid-template-columns:72px minmax(0,1fr);grid-template-areas:"thumb body" "thumb meta";column-gap:14px;row-gap:2px;align-items:center;padding:10px var(--cell);transition:background-color var(--dur) var(--ease-out)}.explorer__row+.explorer__row{border-top:1px solid var(--line)}.explorer__thumb{grid-area:thumb;display:block;aspect-ratio:16 / 10;border:1px solid var(--line);border-radius:5px;overflow:hidden;background:var(--surface)}.explorer__thumb img{width:100%;height:100%;object-fit:cover;object-position:top}.explorer__index{display:none}.explorer__body{grid-area:body;align-self:end;min-width:0}.explorer__title{font-size:var(--text-md);font-weight:500;line-height:1.35;letter-spacing:-.01em}.explorer__link{text-decoration:none}.explorer__link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.explorer__link:focus-visible{outline:none}.explorer__row:has(.explorer__link:focus-visible){outline:2px solid var(--accent);outline-offset:-2px;border-radius:4px}.explorer__teaser{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.explorer__meta{grid-area:meta;align-self:start;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-3)}.explorer__arrow{display:none}.explorer__row:hover{background:var(--surface-2)}.explorer__zone{display:none}@media(hover:hover)and (pointer:fine)and (min-width:960px){.explorer{display:grid;grid-template-columns:minmax(0,1fr) 340px}.explorer__list{border-right:1px solid var(--line)}.explorer__row{grid-template-columns:28px minmax(0,1fr) auto 16px;grid-template-areas:none;column-gap:14px;padding-block:13px}.explorer__thumb{display:none}.explorer__index,.explorer__body,.explorer__meta,.explorer__arrow{grid-area:auto;align-self:center}.explorer__index{display:block;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-3);transition:color var(--dur) var(--ease-out)}.explorer__title{transition:transform .32s var(--ease-out)}.explorer__arrow{display:block;color:var(--fg-3);opacity:0;transform:translate(-6px,6px);transition:opacity var(--dur) var(--ease-out),transform .32s var(--ease-spring)}.explorer__row[data-active]{background:var(--surface-2)}.explorer__row[data-active] .explorer__index{color:var(--accent)}.explorer__row[data-active] .explorer__title{transform:translate(4px)}.explorer__row[data-active] .explorer__arrow{opacity:1;transform:none;color:var(--fg)}.explorer__zone{display:block;position:relative;padding:16px;pointer-events:none;background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:14px 14px}.explorer__preview{position:absolute;inset:16px 16px auto;will-change:transform}.explorer__frame{position:relative;aspect-ratio:16 / 10;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface);box-shadow:var(--shadow)}.explorer__caption{display:grid;gap:4px;margin-top:12px}.explorer__caption-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px}.explorer__caption-name{font-size:var(--text-sm);font-weight:500}.explorer__caption-text{font-size:var(--text-sm);line-height:1.5;color:var(--fg-2)}.explorer__caption-tools{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-3)}.explorer__layer{position:absolute;top:0;right:0;bottom:0;left:0}.explorer__layer[data-state=idle]{visibility:hidden}.explorer__layer[data-state=previous]{z-index:1}.explorer__layer[data-state=active]{z-index:2}.explorer__strip{position:absolute;left:0;right:0;top:calc(var(--i) * 100% / var(--n));height:calc(100% / var(--n) + 1px);overflow:hidden}.explorer__strip img{position:absolute;left:0;top:calc(var(--i) * -100%);width:100%;height:calc(var(--n) * 100%);max-width:none;object-fit:cover;object-position:top}}@media(hover:hover)and (pointer:fine)and (min-width:960px)and (prefers-reduced-motion:no-preference){.explorer__layer[data-state=active] .explorer__strip{animation:strip-in .52s var(--ease-out) both;animation-delay:calc(var(--i) * 34ms)}.explorer__layer[data-state=active] .explorer__strip:nth-child(2n){animation-name:strip-in-reverse}.explorer__caption{animation:caption-in .42s var(--ease-out) both}}@keyframes strip-in{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}@keyframes strip-in-reverse{0%{clip-path:inset(0 0 0 100%)}to{clip-path:inset(0 0 0 0)}}@keyframes caption-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.projects,.about,.contact{scroll-margin-top:var(--header-h)}.projects:focus,.about:focus,.contact:focus{outline:none}.projects__intro p{max-width:64ch}.projects__intro{padding-block:16px;border-bottom:1px solid var(--line);font-size:var(--text-md);color:var(--fg-2)}.about__text{display:grid;gap:12px;max-width:68ch;font-size:var(--text-md);color:var(--fg-2)}.about__text p:first-child{font-size:var(--text-lg);color:var(--fg)}.about__note{font-size:var(--text-sm);color:var(--fg-3)}.subhead{padding:10px var(--cell);border-block:1px solid var(--line);font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;letter-spacing:.02em;color:var(--fg-3)}.capabilities{display:grid;list-style:none}.capability{display:grid;gap:6px;align-content:start;padding:var(--cell);border-bottom:1px solid var(--line)}.capability:last-child{border-bottom:0}.capability__title{font-size:var(--text-lg);font-weight:500;letter-spacing:-.015em}.capability__text{font-size:var(--text-md);color:var(--fg-2)}.capability__tools{margin-top:4px;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.7;color:var(--fg-3)}@media(min-width:720px){.capabilities{grid-template-columns:1fr 1fr}.capability:nth-child(odd){border-right:1px solid var(--line)}.capability:nth-last-child(-n+2){border-bottom:0}}.xp-list{list-style:none}.xp-list>li+li{border-top:1px solid var(--line)}.xp__summary{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 16px;padding:14px calc(var(--cell) + 36px) 14px var(--cell);cursor:pointer;list-style:none;transition:background-color var(--dur) var(--ease-out)}.xp__summary:hover{background:var(--surface-2)}.xp__summary::-webkit-details-marker{display:none}.xp__head{display:flex;flex-wrap:wrap;gap:0 8px;align-items:baseline}.xp__role{font-weight:500}.xp__company{color:var(--fg-2)}.xp__period{align-self:center;white-space:nowrap}.xp__line{grid-column:1 / -1;font-size:var(--text-sm);color:var(--fg-2)}.xp__toggle{position:absolute;right:var(--cell);top:50%;width:24px;height:24px;translate:0 -50%;border:1px solid var(--line);border-radius:6px}.xp__toggle:before,.xp__toggle:after{content:"";position:absolute;left:50%;top:50%;width:10px;height:1.5px;background:var(--fg-2);translate:-50% -50%;transition:transform var(--dur) var(--ease-out)}.xp__toggle:after{transform:rotate(90deg)}.xp[open] .xp__toggle:after{transform:rotate(0)}.xp__details{display:grid;gap:4px;padding:0 var(--cell) 16px;list-style:none;font-size:var(--text-sm);color:var(--fg-2)}.xp__details li{position:relative;padding-left:16px}.xp__details li:before{content:"";position:absolute;left:2px;top:.7em;width:5px;height:1px;background:var(--fg-3)}@media(max-width:560px){.xp__summary{grid-template-columns:1fr}.xp__period{grid-row:2}}.formation{display:grid}.formation__cell{display:grid;align-content:start;gap:10px;padding:var(--cell);list-style:none}.formation__cell li{display:grid}.formation__title{font-weight:500}.formation__meta{font-size:var(--text-sm);color:var(--fg-3)}.formation__compact{display:grid;gap:2px;list-style:none;font-size:var(--text-sm);color:var(--fg-2)}@media(min-width:720px){.formation{grid-template-columns:1fr 1fr}.formation__cell+.formation__cell{border-left:1px solid var(--line)}}@media(max-width:719px){.formation__cell+.formation__cell{border-top:1px solid var(--line)}}.contact__main{display:grid;gap:12px;justify-items:start;padding-block:32px}.contact__lead{max-width:44ch;font-size:var(--text-lg);color:var(--fg-2)}.contact__email{display:inline-flex;align-items:center;gap:8px;max-width:100%;font-size:var(--text-xl);font-weight:500;letter-spacing:-.025em;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:.2em;overflow-wrap:anywhere;transition:text-decoration-color var(--dur) var(--ease-out)}.contact__email:hover{text-decoration-color:currentColor}.contact__email .icon{width:20px;height:20px;color:var(--fg-3)}.cv-grid{display:grid;list-style:none;border-top:1px solid var(--line)}.cv-card{display:flex;align-items:center;gap:12px;padding:14px var(--cell);text-decoration:none;transition:background-color var(--dur) var(--ease-out)}.cv-card:hover{background:var(--surface-2)}.cv-card__icon{display:grid;place-items:center;width:32px;height:32px;flex-shrink:0;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--fg-2)}.cv-card__title{display:block;font-weight:500}.cv-card__detail{display:block;font-size:var(--text-sm);color:var(--fg-3)}@media(min-width:720px){.cv-grid{grid-template-columns:1fr 1fr}.cv-grid li+li{border-left:1px solid var(--line)}}@media(max-width:719px){.cv-grid li+li{border-top:1px solid var(--line)}}.contact__social{display:flex;gap:16px;list-style:none;border-top:1px solid var(--line)}.site-footer{border-top:1px solid var(--line)}.site-footer__inner{display:flex;justify-content:space-between;gap:16px;padding:20px var(--cell) 28px;font-size:var(--text-sm);color:var(--fg-3)}.site-footer__inner a{color:var(--fg-2);text-decoration:none}.site-footer__inner a:hover{color:var(--fg)}.projects__intro{display:grid;gap:12px;align-items:end}.projects__spoiler{font-size:1.125rem}.projects__spoiler .scribble__text{max-width:34ch}.projects__more{display:flex;justify-content:center;padding:20px var(--cell);border-top:1px solid var(--line)}.stack__grid{display:grid}.stack__group{display:grid;gap:14px;align-content:start;padding:var(--section-y) var(--cell);border-bottom:1px solid var(--line)}.stack__items{display:flex;flex-wrap:wrap;gap:8px;list-style:none}.chip{display:inline-flex;align-items:center;height:30px;padding:0 11px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);font-size:var(--text-sm);color:var(--fg);transition:transform .26s var(--ease-spring),border-color var(--dur) var(--ease-out),background-color var(--dur) var(--ease-out)}.chip:hover{transform:translateY(-2px);border-color:var(--line-strong);background:var(--surface)}@media(min-width:720px){.stack__grid{grid-template-columns:1fr 1fr}.stack__group:nth-child(odd){border-right:1px solid var(--line)}.stack__group:nth-last-child(-n+2){border-bottom:0}}@media(max-width:719px){.stack__group:last-child{border-bottom:0}}.about__text{gap:16px;padding-block:var(--section-y)}.capability{gap:8px;padding:var(--section-y) var(--cell)}.projects__intro{padding-block:24px}.projects__more{padding:var(--section-y) var(--cell)}.subhead{padding-block:14px}.xp__summary{padding-block:20px}.formation__cell,.contact__main{padding-block:var(--section-y)}.cv-card{padding-block:20px}.contact__grid{display:grid}.contact__grid .farewell{border-top:1px solid var(--line);background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:14px 14px}@media(min-width:720px){.contact__grid{grid-template-columns:minmax(0,1fr) 300px}.contact__grid .farewell{border-top:0;border-left:1px solid var(--line)}}.bleed-top,.bleed-bottom{position:relative}.bleed-top:before,.bleed-bottom:after{content:"";position:absolute;left:50%;width:100vw;height:1px;translate:-50% 0;background:var(--line);pointer-events:none}.bleed-top:before{top:-1px}.bleed-bottom:after{bottom:-1px}.cover{position:relative}.cover__space{position:relative;z-index:1;height:clamp(140px,26vw,280px)}.cover__fig{position:absolute;right:var(--cell);bottom:10px;font-size:var(--text-sm);color:var(--fg-3)}.profile{position:relative;z-index:1;display:grid;grid-template-columns:112px minmax(0,1fr)}.profile__avatar{position:relative;display:grid;place-items:center;border-right:1px solid var(--line);--smiley-size: 104px}.profile__avatar .smiley__face{fill:var(--surface)}.profile__id{display:grid;align-content:end;min-width:0}.profile__name-row{display:flex;align-items:center;gap:8px;padding:0 var(--cell) 6px;border-bottom:1px solid var(--line)}.profile__name{font-size:clamp(1.625rem,1.4rem + 1vw,2rem);font-weight:500;letter-spacing:-.03em;line-height:1.2}.profile__badge{width:20px;height:20px;flex-shrink:0}.profile__badge path:first-child{fill:var(--fg)}.profile__badge-check{fill:none;stroke:var(--bg);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.profile__wave{display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--fg-3);transition:color var(--dur) var(--ease-out),transform .4s var(--ease-spring)}.profile__wave .icon{width:18px;height:18px}.profile__wave:hover{color:var(--fg);transform:rotate(-14deg)}.profile__tagline{padding:8px var(--cell) 10px;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--fg-3);min-height:2.9em}.typewriter__caret{display:inline-block;width:7px;height:1.05em;margin-left:2px;vertical-align:-.18em;background:var(--fg-3)}@media(prefers-reduced-motion:no-preference){.typewriter__caret{animation:caret 1s steps(1) infinite}}@keyframes caret{50%{opacity:0}}.profile__note{position:absolute;right:calc(100% + 14px);top:42%;display:none}.profile__note .scribble{transform:rotate(-6deg);white-space:nowrap}@media(min-width:640px){.profile{grid-template-columns:168px minmax(0,1fr)}.profile__avatar{padding:4px 0;--smiley-size: 156px}}@media(min-width:1100px){.profile__note{display:block}}.social{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:16px var(--cell);border-bottom:1px solid var(--line)}.social__icons{display:flex;gap:8px;list-style:none}.icon-link{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface-2);color:var(--fg);transition:transform .26s var(--ease-spring),border-color var(--dur) var(--ease-out)}.icon-link:hover{transform:translateY(-2px);border-color:var(--line-strong)}.icon-link .icon{width:18px;height:18px}.social__actions{display:flex;flex-wrap:wrap;gap:8px}.social__note{position:absolute;right:calc(100% + 12px);top:-14px;display:none}.social__note .scribble{transform:rotate(-4deg);white-space:nowrap}@media(min-width:1100px){.social__note{display:block}}.facts{display:grid}.facts__col{display:grid;gap:12px;align-content:start;padding:20px var(--cell);list-style:none}.facts__item{display:flex;align-items:center;gap:12px;min-width:0;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--fg)}.facts__item a{text-decoration:none;overflow-wrap:anywhere}.facts__item a:hover{text-decoration:underline}.facts__icon{display:grid;place-items:center;width:28px;height:28px;flex-shrink:0;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--fg-3)}@media(min-width:720px){.facts{grid-template-columns:1fr 1fr}.facts__col+.facts__col{border-left:1px dashed var(--line)}}@media(max-width:719px){.facts__col+.facts__col{padding-top:0}}.social__actions{gap:20px}.cta-link{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:var(--text-sm);font-weight:500;text-decoration:none;color:var(--fg)}.cta-link .icon{width:15px;height:15px;color:var(--fg-3);transition:transform .32s var(--ease-spring),color var(--dur) var(--ease-out)}.cta-link:hover .icon{color:var(--fg);transform:translate(2px,2px)}.cta-link:hover .icon-up-right,.cta-link:last-child:hover .icon{transform:translate(2px,-2px)}.shimmer{position:relative;color:var(--fg);background-image:linear-gradient(100deg,var(--fg-2) 38%,var(--shine) 50%,var(--fg-2) 62%);background-size:250% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.shimmer:after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:1px;background:currentColor;-webkit-text-fill-color:initial;background:var(--line-strong);transform-origin:left;transition:background-color var(--dur) var(--ease-out)}.cta-link:hover .shimmer:after{background:var(--fg)}@media(prefers-reduced-motion:no-preference){.shimmer{animation:shimmer 3.2s ease-in-out infinite}.cta-link:last-child .shimmer{animation-delay:1.6s}}@keyframes shimmer{0%{background-position:100% 0}45%,to{background-position:0% 0}}.projects>.frame{position:relative}.projects__aside{padding:0 var(--cell) 16px}.projects__aside .scribble{flex-direction:column;align-items:flex-start;gap:2px;transform:none}.projects__aside .scribble__text{max-width:30ch}@media(min-width:1100px){.projects__aside{position:absolute;left:calc(100% + 18px);top:150px;width:min(230px,calc((100vw - var(--frame)) / 2 - 32px));padding:0}.projects__aside .scribble{transform:rotate(-3deg)}.projects__aside .scribble__arrow{margin-left:-6px}}@media(hover:hover)and (pointer:fine)and (min-width:960px){.explorer__title{white-space:nowrap}.explorer__meta{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}}@media(hover:hover)and (pointer:fine)and (min-width:960px){.explorer__row{grid-template-columns:28px auto minmax(0,1fr) 16px}}@media(max-width:1099px){.projects__aside{display:flex;justify-content:flex-end}.projects__aside .scribble{align-items:flex-end;text-align:right}.projects__aside .scribble__arrow{transform:scaleX(-1)}}.cv-grid:has(>li:only-child){grid-template-columns:1fr}.ed{position:relative}.ed--hipotesis{padding-left:12px;border-left:2px dashed var(--line-strong)}.ed--pendiente{color:var(--fg-3);font-size:var(--text-sm);font-style:italic}.ed-tag{display:inline-block;margin-right:6px;padding:1px 6px;border:1px solid var(--line);border-radius:4px;background:var(--surface-2);font-family:var(--font-mono);font-size:.6875rem;font-style:normal;font-weight:400;letter-spacing:0;line-height:1.6;color:var(--fg-3);vertical-align:.1em}.ed-tag:before{content:"";display:inline-block;width:5px;height:5px;margin-right:5px;border-radius:50%;background:var(--accent);vertical-align:.15em}.ed-inline--pendiente{color:var(--fg-3);border-bottom:1px dashed var(--line-strong)}.ed-inline--hipotesis{border-bottom:1px dashed var(--line-strong)}.case-crumbs{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:12px var(--cell);border-bottom:1px solid var(--line)}.case-hero{display:grid;gap:10px;padding-block:clamp(36px,6vw,64px) clamp(24px,4vw,40px)}.case-hero__title{font-size:clamp(1.875rem,1.5rem + 1.6vw,2.5rem);font-weight:500;line-height:1.1;letter-spacing:-.035em}.case-hero__subtitle{font-size:var(--text-lg);color:var(--fg-3)}.case-hero__teaser{max-width:56ch;margin-top:8px;font-size:var(--text-lg);color:var(--fg-2)}.case-facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));border-top:1px solid var(--line)}.case-facts__item{display:grid;gap:2px;align-content:start;padding:12px var(--cell);border-bottom:1px solid var(--line);box-shadow:1px 0 0 var(--line)}.case-facts__item dd{font-size:var(--text-sm);font-weight:500}.case-cover{display:grid;gap:10px;background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:14px 14px}.case-cover__frame{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}.case-cover__frame img{width:100%}.case-toc{display:grid;gap:8px;border-bottom:1px solid var(--line)}.case-toc ol{display:flex;flex-wrap:wrap;gap:6px;list-style:none}.case-toc a{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);font-size:var(--text-sm);font-weight:500;text-decoration:none;transition:background-color var(--dur) var(--ease-out)}.case-toc a:hover{background:var(--surface)}.cs{scroll-margin-top:var(--header-h)}.cs+.cs,.case-toc+.cs{border-top:0}.cs .section-title{border-top:1px solid var(--line);margin-top:40px}.case-toc+.cs .section-title{margin-top:0;border-top:0}.cs__index{margin-right:6px;font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;letter-spacing:0;color:var(--fg-3);align-self:center}.cs__body{display:grid;gap:12px;max-width:72ch;font-size:var(--text-md);color:var(--fg-2)}.cs__lead{font-size:var(--text-lg);line-height:1.6;color:var(--fg)}.cs__note{font-size:var(--text-sm);color:var(--fg-3);border-bottom:1px solid var(--line)}.cs__list{display:grid;gap:4px;padding-left:1.1em}.cs__list li::marker{color:var(--fg-3)}.cs__figure{border-top:1px solid var(--line)}.cs__body+.cs__figure{padding-top:0;border-top:0}.cs__rows>div{display:grid;gap:4px;padding:12px var(--cell);font-size:var(--text-md);color:var(--fg-2)}.cs__rows>div+div{border-top:1px solid var(--line)}@media(min-width:720px){.cs__rows>div{grid-template-columns:11rem minmax(0,1fr);column-gap:16px}.cs__rows dt{padding-top:3px}}.decision+.decision,.decision+.details{border-top:1px solid var(--line)}.decision__head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:16px var(--cell) 12px}.decision__title{flex-basis:100%;order:2;font-size:var(--text-lg);font-weight:500;letter-spacing:-.02em}.decision__head .label{order:0}.decision__head .ed-tag{order:1}.decision__flow{display:grid;border-block:1px solid var(--line)}.decision__flow>div{display:grid;gap:4px;align-content:start;padding:12px var(--cell);font-size:var(--text-sm);line-height:1.55;color:var(--fg-2)}.decision__flow>div:nth-child(2) dd{color:var(--fg)}.decision__flow.is-hypothesis{background:var(--surface-2)}@media(min-width:720px){.decision__flow{grid-template-columns:repeat(3,minmax(0,1fr))}.decision__flow>div+div{border-left:1px solid var(--line)}}@media(max-width:719px){.decision__flow>div+div{border-top:1px solid var(--line)}}.decision__media .fig--video .fig__frame{margin-inline:auto}.details{display:grid;gap:12px;border-top:1px solid var(--line)}.details__grid{display:grid;gap:24px 16px}@media(min-width:720px){.details__grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}}.case-questions{margin-top:40px;border-top:1px dashed var(--line-strong);background:var(--surface-2)}.case-questions ol{display:grid;gap:4px;margin-top:8px;padding-left:1.2em;font-size:var(--text-sm);color:var(--fg-2)}.next-case__inner{position:relative;display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:16px;align-items:center;transition:background-color var(--dur) var(--ease-out)}.next-case__inner:hover{background:var(--surface-2)}.next-case__thumb{aspect-ratio:16 / 10;border:1px solid var(--line);border-radius:6px;overflow:hidden}.next-case__thumb img{width:100%;height:100%;object-fit:cover;object-position:top}.next-case__text{display:grid;gap:2px;min-width:0}.next-case__link{font-size:var(--text-lg);font-weight:500;letter-spacing:-.02em;text-decoration:none}.next-case__link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.next-case__link:focus-visible{outline:none}.next-case__inner:has(.next-case__link:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.next-case__teaser{font-size:var(--text-sm);color:var(--fg-2)}.next-case__arrow{color:var(--fg-3);transition:transform var(--dur) var(--ease-out)}.next-case__inner:hover .next-case__arrow{transform:translate(3px);color:var(--fg)}@media(max-width:559px){.next-case__inner{grid-template-columns:88px minmax(0,1fr)}.next-case__arrow{display:none}}.decision__media .fig,.details__grid .fig{max-width:640px}.decision__media .fig__zoom img,.details__grid .fig__zoom img{max-height:480px;object-fit:cover;object-position:top}.case-cover__frame{max-width:800px}.projects-page__head{display:grid;gap:10px;padding-block:clamp(36px,6vw,64px) clamp(24px,4vw,40px)}.projects-page__title{font-size:clamp(1.875rem,1.5rem + 1.6vw,2.5rem);font-weight:500;line-height:1.1;letter-spacing:-.035em}.projects-page__lead{max-width:56ch;font-size:var(--text-lg);color:var(--fg-2)}.pgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));list-style:none}.pcard{position:relative;grid-column:span 12;display:grid;grid-template-rows:1fr auto;border-bottom:1px solid var(--line)}@media(min-width:760px){.pcard{grid-column:span var(--span)}.pcard+.pcard{box-shadow:-1px 0 0 var(--line)}}.pcard__media{position:relative;display:grid;align-content:center;padding:var(--cell);overflow:hidden}@media(min-width:760px){.pcard--full{grid-template-columns:minmax(0,7fr) minmax(0,5fr);grid-template-rows:auto;align-items:center}.pcard--full .pcard__body{padding:var(--cell) var(--cell) var(--cell) 0}}.pcard__body{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start;padding:0 var(--cell) var(--cell)}.pcard__body .label{padding-top:3px}.pcard__text{display:grid;gap:2px}.pcard__title{font-size:var(--text-lg);font-weight:500;letter-spacing:-.015em}.pcard__link{text-decoration:none}.pcard__link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}.pcard__link:focus-visible{outline:none}.pcard:has(.pcard__link:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.pcard__teaser{max-width:52ch;font-size:var(--text-sm);line-height:1.5;color:var(--fg-2)}.pcard__meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:4px;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-3)}.pcard__arrow{margin-top:3px;color:var(--fg-3);transition:transform .32s var(--ease-spring),color var(--dur) var(--ease-out)}.pcard:hover .pcard__arrow{transform:translate(3px,-3px);color:var(--fg)}.pcard img{width:100%}.pcard__browser{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface-2);box-shadow:var(--shadow);transition:transform .5s var(--ease-out)}.pcard__chrome{display:flex;gap:5px;padding:8px 10px;border-bottom:1px solid var(--line)}.pcard__chrome i{width:8px;height:8px;border-radius:50%;background:var(--line-strong)}.pcard__browser img{aspect-ratio:16 / 9;object-fit:cover;object-position:top}.pcard:hover .pcard__browser{transform:translateY(-4px)}.pcard__dots{display:grid;place-items:center;aspect-ratio:4 / 3;padding:10%;border-radius:var(--radius);background-color:var(--surface-2);background-image:radial-gradient(var(--line-strong) 1px,transparent 1px);background-size:14px 14px}.pcard__dots img{border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);transition:transform .6s var(--ease-spring)}.pcard:hover .pcard__dots img{transform:scale(1.04) rotate(-1deg)}.pcard__tall{container-type:size;aspect-ratio:4 / 5;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface-2)}.pcard__tall img{height:auto;transform:translateY(0);transition:transform 3.2s cubic-bezier(.45,0,.2,1)}.pcard:hover .pcard__tall img{transform:translateY(calc(-100% + 100cqh))}.pcard__stack{position:relative;aspect-ratio:4 / 3}.pcard__stack img{position:absolute;width:78%;aspect-ratio:16 / 10;object-fit:cover;object-position:top;border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);transition:transform .6s var(--ease-spring)}.pcard__back{right:0;top:0;opacity:.9}.pcard__front{left:0;bottom:0}.pcard:hover .pcard__back{transform:translate(4%,-4%) rotate(2deg)}.pcard:hover .pcard__front{transform:translate(-3%,3%) rotate(-2deg)}@media(prefers-reduced-motion:reduce){.pcard:hover .pcard__tall img{transform:none}}
