@font-face{font-family:Anybody Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:50% 150%;src:url(/assets/anybody-vietnamese-wdth-normal-9GtAklmW.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Anybody Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:50% 150%;src:url(/assets/anybody-latin-ext-wdth-normal-BaQ5u-C4.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Anybody Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:50% 150%;src:url(/assets/anybody-latin-wdth-normal-CHqbGEEr.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(data:font/woff2;base64,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)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-vietnamese-wght-normal-CHiFlh_0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/assets/martian-mono-cyrillic-ext-wdth-normal-BFx_pHPN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/assets/martian-mono-cyrillic-wdth-normal-Dgr-UBxV.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/assets/martian-mono-latin-ext-wdth-normal-DeTdBbNh.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/assets/martian-mono-latin-wdth-normal-1TqSgyfh.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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 Sans Arabic;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-arabic-500-normal-DPXcppbm.woff)format("woff")}:root{--paper:#f1f3f8;--sheet:#fff;--ink:#121845;--ink-soft:#4b5280;--rule:#d6daea;--grid-dot:#c4c9de;--relation:#3542f5;--now:#f4b000;--on-ink:#f1f3f8;--tint:color-mix(in oklab, var(--relation) 8%, var(--sheet));--font-display:"Anybody Variable", "Arial Black", sans-serif;--font-body:"Hanken Grotesk Variable", "IBM Plex Sans Arabic", system-ui, sans-serif;--font-mono:"Martian Mono Variable", "IBM Plex Sans Arabic", ui-monospace, monospace;--text-xs:.6875rem;--text-sm:.8125rem;--text-base:1.0625rem;--text-lg:1.25rem;--text-h2:clamp(1.75rem, 1.2rem + 2.6vw, 3.25rem);--text-name:clamp(3.4rem, 1.2rem + 8.4vw, 8.25rem);--gutter:clamp(1rem, .5rem + 2.4vw, 2.5rem);--max:76rem;--section-space:clamp(4.5rem, 3.25rem + 4.5vw, 7.5rem);--radius-sm:6px;--radius:10px;--header-h:4rem;--ease-out:cubic-bezier(.22, 1, .36, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--paper:#0b0e24;--sheet:#131838;--ink:#e4e7ff;--ink-soft:#9ba2d0;--rule:#262c57;--grid-dot:#2b3163;--relation:#8d96ff;--now:#ffc233;--on-ink:#0b0e24;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 1rem)}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:var(--text-base);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;line-height:1.6;transition:background-color .3s,color .3s}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}ul,ol{padding:0;list-style:none}a{color:inherit}img,svg{max-width:100%;display:block}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--relation);outline-offset:3px;border-radius:4px}::selection{background:var(--relation);color:var(--sheet)}.container{width:100%;max-width:calc(var(--max) + var(--gutter) * 2);padding-inline:var(--gutter);margin-inline:auto}.section{padding-top:var(--section-space)}.section-body{padding-top:1.5rem;position:relative}.section-body:before{content:"";top:0;left:var(--gutter);right:var(--gutter);border-top:1px solid var(--rule);position:absolute}.mono{font-family:var(--font-mono);font-variation-settings:"wdth" 87.5;font-size:var(--text-sm);letter-spacing:0}.h2{font-family:var(--font-display);font-size:var(--text-h2);font-variation-settings:"wdth" 118;letter-spacing:-.015em;text-wrap:balance;overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;font-weight:760;line-height:1.02}.link{color:var(--relation);text-underline-offset:.22em;text-decoration-line:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in oklab, var(--relation) 40%, transparent);text-decoration-color:color-mix(in oklab, var(--relation) 40%, transparent);transition:text-decoration-color .2s}.link:hover{text-decoration-color:currentColor}.out:after{content:"↗";font-family:var(--font-body);transition:transform .2s var(--ease-out);margin-left:.2em;display:inline-block}.out:hover:after{transform:translate(2px,-2px)}.button{border:1px solid var(--ink);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:.5rem;min-height:2.875rem;padding:0 1.25rem;font-size:.975rem;font-weight:600;text-decoration:none;transition:background-color .2s,color .2s,border-color .2s;display:inline-flex}.button--solid{background:var(--ink);color:var(--on-ink)}.button--solid:hover{background:var(--relation);border-color:var(--relation);color:#fff}.button--line{color:var(--ink);background:0 0}.button--line:hover{border-color:var(--relation);color:var(--relation)}.now-tag{background:var(--now);color:#1c1400;font-family:var(--font-mono);font-variation-settings:"wdth" 87.5;font-size:var(--text-xs);border-radius:999px;align-items:center;gap:.35rem;padding:.1rem .5rem;font-weight:600;line-height:1.6;display:inline-flex}.records{border-top:1px solid var(--rule)}.record{border-bottom:1px solid var(--rule);grid-template-columns:minmax(10rem,15rem) minmax(0,1fr);gap:.75rem 2rem;padding-block:clamp(1.5rem,1rem + 1.5vw,2.25rem);display:grid}.record .when{align-content:start;gap:.3rem;padding-top:.3rem;display:grid}.record .soft{color:var(--ink-soft)}.record .role{font-size:var(--text-lg);font-weight:650;line-height:1.3}.record .org{color:var(--ink-soft);align-items:center;gap:.65rem;margin-top:.6rem;font-weight:500;display:flex}.record .summary{text-wrap:pretty;max-width:62ch;margin-top:1rem}@media (width<=40rem){.record{grid-template-columns:minmax(0,1fr)}.record .when{flex-wrap:wrap;gap:.25rem .75rem;padding-top:0;display:flex}}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.reveal{transition:opacity .7s var(--ease-out), transform .7s var(--ease-out)}.reveal:not(.is-visible){opacity:0;transform:translateY(14px)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.reveal:not(.is-visible){opacity:1;transform:none}}.toggle[data-v-430ed2d0]{border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--sheet);cursor:pointer;place-items:center;width:2.5rem;height:2.5rem;transition:border-color .2s;display:inline-grid}.toggle[data-v-430ed2d0]:hover{border-color:var(--ink-soft)}.toggle svg[data-v-430ed2d0]{transition:transform .5s var(--ease-out)}:root[data-theme=dark] .toggle svg[data-v-430ed2d0]{transform:rotate(180deg)}.header[data-v-17e20c27]{z-index:50;background:var(--paper);border-bottom:1px solid #0000;transition:border-color .25s,background-color .3s;position:sticky;top:0}.header.is-scrolled[data-v-17e20c27],.header.is-open[data-v-17e20c27]{border-bottom-color:var(--rule)}.bar[data-v-17e20c27]{height:var(--header-h);align-items:center;gap:1.5rem;display:flex}.brand[data-v-17e20c27]{white-space:nowrap;align-items:center;gap:.55rem;font-weight:600;text-decoration:none;display:inline-flex}.brand-key[data-v-17e20c27]{background:var(--ink);width:.7rem;height:.7rem;box-shadow:3px 3px 0 var(--relation);border-radius:2px}.nav[data-v-17e20c27]{gap:.25rem;margin-left:auto;display:flex}.nav a[data-v-17e20c27]{color:var(--ink-soft);padding:.5rem .75rem;font-size:.95rem;font-weight:500;text-decoration:none;transition:color .2s;position:relative}.nav a[data-v-17e20c27]:hover,.nav a[aria-current][data-v-17e20c27]{color:var(--ink)}.nav a[data-v-17e20c27]:after{content:"";background:var(--relation);transform-origin:0;height:2px;transition:transform .3s var(--ease-out);position:absolute;bottom:.2rem;left:.75rem;right:.75rem;transform:scaleX(0)}.nav a[aria-current][data-v-17e20c27]:after{transform:scaleX(1)}.tools[data-v-17e20c27]{align-items:center;gap:.5rem;display:flex}.menu-button[data-v-17e20c27]{border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--sheet);cursor:pointer;min-height:2.5rem;padding:0 .875rem;display:none}@media (width<=52rem){.tools[data-v-17e20c27]{margin-left:auto}.menu-button[data-v-17e20c27]{align-items:center;display:inline-flex}.nav[data-v-17e20c27]{padding:.5rem var(--gutter) 1rem;background:var(--paper);border-bottom:1px solid var(--rule);visibility:hidden;opacity:0;transition:opacity .2s ease, transform .25s var(--ease-out), visibility 0s linear .25s;flex-direction:column;gap:0;margin:0;position:absolute;top:100%;left:0;right:0;transform:translateY(-6px)}.is-open .nav[data-v-17e20c27]{visibility:visible;opacity:1;transition:opacity .2s ease, transform .25s var(--ease-out);transform:none}.nav a[data-v-17e20c27]{border-bottom:1px solid var(--rule);padding:.85rem 0;font-size:1.05rem}.nav a[data-v-17e20c27]:last-child{border-bottom:0}.nav a[data-v-17e20c27]:after{display:none}.nav a[aria-current][data-v-17e20c27]{color:var(--relation)}}.canvas[data-v-85c79a9c]{border:1px solid var(--rule);border-radius:var(--radius);background-color:var(--paper);background-image:radial-gradient(var(--grid-dot) 1px, transparent 1.3px);background-position:11px 11px;background-size:22px 22px;grid-template-rows:1fr 1fr;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-areas:"experience root projects certifications""education root skills certifications";gap:2.25rem 5.25rem;padding:2.25rem 2.25rem 4.5rem;display:grid;position:relative}.area-experience[data-v-85c79a9c]{grid-area:experience;align-self:end}.area-education[data-v-85c79a9c]{grid-area:education;align-self:start}.area-projects[data-v-85c79a9c]{grid-area:projects;align-self:end}.area-skills[data-v-85c79a9c]{grid-area:skills;align-self:start}.area-certifications[data-v-85c79a9c]{grid-area:certifications;align-self:center}.entity--root[data-v-85c79a9c]{grid-area:root;align-self:center}.entity[data-v-85c79a9c]{z-index:1;border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--sheet);min-width:0;color:var(--ink);box-shadow:0 1px 0 var(--rule);transition:border-color .2s ease, opacity .3s ease, transform .3s var(--ease-out);animation:box-in-85c79a9c .6s var(--ease-out) backwards;animation-delay:calc(.1s + var(--i) * 70ms);text-decoration:none;display:block;position:relative}a.entity[data-v-85c79a9c]:hover,a.entity[data-v-85c79a9c]:focus-visible,a.entity.is-active[data-v-85c79a9c]{border-color:var(--relation)}a.entity[data-v-85c79a9c]:focus-visible{outline-offset:4px}.has-hover a.entity[data-v-85c79a9c]:not(.is-active){opacity:.55}.entity-head[data-v-85c79a9c]{border-bottom:1px solid var(--rule);background:var(--tint);border-radius:var(--radius-sm) var(--radius-sm) 0 0;font-size:var(--text-xs);justify-content:space-between;align-items:baseline;gap:.75rem;padding:.55rem .75rem;display:flex}.entity-name[data-v-85c79a9c]{align-items:center;gap:.45rem;font-weight:600;transition:color .2s;display:inline-flex}a.entity:hover .entity-name[data-v-85c79a9c],a.entity.is-active .entity-name[data-v-85c79a9c]{color:var(--relation)}.entity-count[data-v-85c79a9c]{color:var(--ink-soft);white-space:nowrap}.entity-rows[data-v-85c79a9c]{padding:.35rem 0}.entity-row[data-v-85c79a9c]{justify-content:space-between;align-items:baseline;gap:.75rem;padding:.22rem .75rem;font-size:.84rem;line-height:1.45;display:flex}.row-label[data-v-85c79a9c]{white-space:nowrap;align-items:baseline;gap:.4rem;min-width:0;display:inline-flex;overflow:hidden}.row-label bdi[data-v-85c79a9c]{text-overflow:ellipsis;overflow:hidden}.row-value[data-v-85c79a9c]{text-overflow:ellipsis;white-space:nowrap;max-width:55%;color:var(--ink-soft);font-size:var(--text-xs);flex-shrink:0;overflow:hidden}.entity-more[data-v-85c79a9c]{color:var(--ink-soft);font-size:var(--text-xs)}.now-dot[data-v-85c79a9c]{background:var(--now);width:.45rem;height:.45rem;box-shadow:0 0 0 2px color-mix(in oklab, var(--now) 30%, transparent);border-radius:50%;flex-shrink:0;transform:translateY(-.05rem)}.entity--root[data-v-85c79a9c]{border-color:var(--ink);box-shadow:4px 4px 0 var(--relation)}.entity--root .entity-head[data-v-85c79a9c]{background:var(--ink);color:var(--on-ink);border-bottom-color:var(--ink);font-size:var(--text-sm)}.pk[data-v-85c79a9c]{background:var(--on-ink);width:.55rem;height:.55rem;box-shadow:2px 2px 0 var(--relation);border-radius:1px}.entity--root .entity-rows[data-v-85c79a9c]{padding:.5rem 0}.entity--root .entity-row[data-v-85c79a9c]{font-size:.9rem}.field[data-v-85c79a9c]{color:var(--ink-soft);font-size:var(--text-xs)}.entity--root dd[data-v-85c79a9c]{text-align:right;font-weight:500}.wires[data-v-85c79a9c]{pointer-events:none;width:100%;max-width:none;height:100%;position:absolute;inset:0;overflow:visible}.wire path[data-v-85c79a9c]{fill:none;stroke:var(--relation);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;transition:opacity .3s,stroke-width .2s}.wire-line[data-v-85c79a9c]{stroke-dasharray:1;stroke-dashoffset:1px;animation:draw-85c79a9c .9s var(--ease-out) forwards;animation-delay:calc(.45s + var(--i) * .11s)}.wire-ends[data-v-85c79a9c]{opacity:0;animation:.4s forwards fade-in-85c79a9c;animation-delay:calc(1.1s + var(--i) * .11s)}.has-hover .wire:not(.is-active) path[data-v-85c79a9c]{opacity:.2}.wire.is-active path[data-v-85c79a9c]{stroke-width:2.25px}.wire-label[data-v-85c79a9c]{z-index:1;color:var(--relation);white-space:nowrap;pointer-events:none;opacity:0;animation:.4s forwards fade-in-85c79a9c;animation-delay:calc(1.1s + var(--i) * .11s);padding:0 .3rem;font-size:.625rem;line-height:1.5;transition:opacity .3s;position:absolute;translate:-50% calc(-100% - 2px)}.wire-label.is-vertical[data-v-85c79a9c]{background:var(--paper);border-radius:4px;translate:-50% -50%}.has-hover .wire-label[data-v-85c79a9c]:not(.is-active){opacity:.25;animation:none}.titleblock[data-v-85c79a9c]{z-index:1;border:1px solid var(--rule);background:var(--sheet);border-radius:4px;grid-template-columns:repeat(4,auto);font-size:.625rem;line-height:1.3;display:grid;position:absolute;bottom:1rem;right:1rem}.titleblock div[data-v-85c79a9c]{border-left:1px solid var(--rule);padding:.4rem .65rem}.titleblock div[data-v-85c79a9c]:first-child{border-left:0}.titleblock dt[data-v-85c79a9c]{color:var(--ink-soft)}.titleblock dd[data-v-85c79a9c]{font-weight:600}@keyframes box-in-85c79a9c{0%{opacity:0;transform:translateY(10px)}}@keyframes draw-85c79a9c{to{stroke-dashoffset:0}}@keyframes fade-in-85c79a9c{to{opacity:1}}@media (width<=68rem){.canvas[data-v-85c79a9c]{grid-template:"experience root projects""skills root certifications""education root."/minmax(0,1fr) minmax(0,1.2fr) minmax(0,1fr);gap:1.5rem 3.75rem;padding:2rem 1.5rem 5rem}.area-experience[data-v-85c79a9c],.area-education[data-v-85c79a9c],.area-projects[data-v-85c79a9c],.area-skills[data-v-85c79a9c],.area-certifications[data-v-85c79a9c]{align-self:center}}@media (width<=44rem){.canvas[data-v-85c79a9c]{flex-direction:column;gap:.875rem;padding:1rem 1rem 1.25rem;display:flex}.entity[data-v-85c79a9c],.entity--root[data-v-85c79a9c],[class*=area-][data-v-85c79a9c]{align-self:stretch}a.entity[data-v-85c79a9c]{margin-left:2.25rem}.entity--root[data-v-85c79a9c]{margin-bottom:.5rem}.titleblock[data-v-85c79a9c]{grid-template-columns:repeat(2,auto);margin-top:.5rem;position:static}.titleblock div[data-v-85c79a9c]:nth-child(3){border-left:0}.titleblock div[data-v-85c79a9c]:nth-child(n+3){border-top:1px solid var(--rule)}}.hero[data-v-b48df739]{padding-block:clamp(2.5rem,1.5rem + 4vw,4.5rem) 0}.intro[data-v-b48df739]{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:end;gap:2rem clamp(2rem,5vw,5rem);margin-bottom:clamp(2rem,1.25rem + 3vw,3.5rem);display:grid}.eyebrow[data-v-b48df739]{color:var(--ink-soft);margin-bottom:1.25rem}.name[data-v-b48df739]{font-family:var(--font-display);font-size:var(--text-name);font-variation-settings:"wdth" 124;letter-spacing:-.025em;animation:name-in-b48df739 .8s var(--ease-out) backwards;font-weight:800;line-height:.86}.name span[data-v-b48df739]{display:block}.lede[data-v-b48df739]{animation:name-in-b48df739 .8s var(--ease-out) .1s backwards;gap:1.5rem;padding-bottom:.4rem;display:grid}.lede-text[data-v-b48df739]{text-wrap:pretty;max-width:44ch;font-size:1.125rem;line-height:1.6}.actions[data-v-b48df739]{flex-wrap:wrap;gap:.75rem;display:flex}.socials[data-v-b48df739]{flex-wrap:wrap;gap:.5rem 1.25rem;display:flex}@keyframes name-in-b48df739{0%{opacity:0;transform:translateY(16px)}}@media (width<=56rem){.intro[data-v-b48df739]{grid-template-columns:minmax(0,1fr)}}.section-header[data-v-1eb40169]{grid-template-columns:minmax(0,1fr);gap:1rem;max-width:50rem;margin-bottom:clamp(2.25rem,1.5rem + 2.5vw,3.5rem);display:grid}.table[data-v-1eb40169]{align-items:center;gap:.6rem;font-weight:600;display:flex}.glyph[data-v-1eb40169]{border:1.5px solid;border-top-width:3.5px;border-radius:2px;width:.8rem;height:.65rem}.rows[data-v-1eb40169]{border-left:1px solid var(--rule);color:var(--ink-soft);padding-left:.6rem;font-weight:400}.intro[data-v-1eb40169]{max-width:46ch;color:var(--ink-soft);font-size:1.125rem}.grid[data-v-69c720ad]{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);align-items:start;gap:2.5rem clamp(2rem,6vw,6rem);display:grid}.focus[data-v-69c720ad]{gap:1.25rem;display:grid}.focus li[data-v-69c720ad]{font-size:var(--text-lg);text-wrap:pretty;padding-left:1.75rem;line-height:1.45;position:relative}.focus li[data-v-69c720ad]:before{content:"";background:var(--relation);width:.9rem;height:1.5px;position:absolute;top:.62em;left:0}.stack[data-v-69c720ad]{border-collapse:separate;border-spacing:0;border:1px solid var(--rule);border-radius:var(--radius);background:var(--sheet);width:100%;overflow:hidden}.stack tr+tr[data-v-69c720ad]>*{border-top:1px solid var(--rule)}.stack th[data-v-69c720ad]{border-right:1px solid var(--rule);background:var(--tint);width:8.5rem;color:var(--ink-soft);text-align:left;vertical-align:top;text-transform:lowercase;padding:1rem 1.1rem;font-weight:500}.stack td[data-v-69c720ad]{padding:.75rem 1rem}.chips[data-v-69c720ad]{flex-wrap:wrap;gap:.4rem;display:flex}.chips li[data-v-69c720ad]{border:1px solid var(--rule);white-space:nowrap;border-radius:999px;padding:.2rem .65rem;font-size:.95rem;font-weight:500}.proficiency[data-v-69c720ad]{margin-top:clamp(3rem,2rem + 3vw,4.5rem)}.sub[data-v-69c720ad]{color:var(--ink-soft);margin-bottom:1.25rem;font-weight:500}.meters[data-v-69c720ad]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem clamp(2rem,6vw,6rem);display:grid}.meter[data-v-69c720ad]{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label value""bar bar";align-items:baseline;gap:.5rem 1rem;display:grid}.meter-label[data-v-69c720ad]{grid-area:label;font-weight:500}.meter-value[data-v-69c720ad]{color:var(--ink-soft);grid-area:value}.segments[data-v-69c720ad]{grid-area:bar;grid-template-columns:repeat(10,1fr);gap:3px;display:grid}.segment[data-v-69c720ad]{background:var(--rule);border-radius:1px;height:.5rem}.segment.is-on[data-v-69c720ad]{background:var(--ink)}.is-visible .segment.is-on[data-v-69c720ad]{animation:fill-69c720ad .4s var(--ease-out) backwards;animation-delay:calc(var(--n) * 45ms + .15s)}@keyframes fill-69c720ad{0%{background:var(--rule)}}@media (width<=52rem){.grid[data-v-69c720ad],.meters[data-v-69c720ad]{grid-template-columns:minmax(0,1fr)}}@media (width<=30rem){.stack th[data-v-69c720ad]{width:6.25rem;padding:.9rem .75rem}.stack td[data-v-69c720ad]{padding:.65rem .75rem}}.mark[data-v-578268a0]{border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--sheet);flex-shrink:0;place-items:center;width:2.25rem;height:2.25rem;display:inline-grid;overflow:hidden}.mark img[data-v-578268a0]{object-fit:contain;width:100%;height:100%}.mark .mono[data-v-578268a0]{letter-spacing:.02em;font-size:.625rem;font-weight:600}.courses[data-v-6c1107da]{grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem 2rem;margin-top:1.25rem;display:grid}.courses li[data-v-6c1107da]{padding-left:1.1rem;line-height:1.45;position:relative}.courses li[data-v-6c1107da]:before{content:"";border:1.5px solid var(--ink-soft);border-radius:1px;width:.4rem;height:.4rem;position:absolute;top:.55em;left:0}@media (width<=40rem){.courses[data-v-6c1107da]{grid-template-columns:minmax(0,1fr)}}.timeline[data-v-f9be8245]{--lane-h:2.6rem;border:1px solid var(--rule);border-radius:var(--radius);background:var(--sheet);margin-bottom:clamp(1.5rem,1rem + 2vw,2.5rem);padding:1.25rem 1.25rem .75rem}.plot[data-v-f9be8245]{height:calc(var(--lanes) * var(--lane-h) + .75rem);position:relative}.tick[data-v-f9be8245]{border-left:1px dashed var(--rule);position:absolute;top:0;bottom:0}.bar[data-v-f9be8245]{top:calc(var(--lane) * var(--lane-h));height:calc(var(--lane-h) - .6rem);cursor:pointer;text-align:left;background:0 0;border:0;min-width:6px;padding:0;transition:opacity .25s;position:absolute}.bar[data-v-f9be8245]:after{content:"";background:var(--ink-soft);transform-origin:0;border-radius:2px;height:.5rem;transition:background-color .2s;position:absolute;bottom:0;left:0;right:0}.bar.is-current[data-v-f9be8245]:after{background:var(--relation)}.bar.is-current[data-v-f9be8245]:before{content:"";z-index:1;background:var(--now);width:.6rem;height:.6rem;box-shadow:0 0 0 2px var(--sheet);border-radius:50%;position:absolute;bottom:-.05rem;right:-.3rem}.bar[data-v-f9be8245]:hover:after,.bar.is-active[data-v-f9be8245]:after{background:var(--relation)}.bar.is-dim[data-v-f9be8245]{opacity:.4}.bar-label[data-v-f9be8245]{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:var(--text-xs);color:var(--ink);position:absolute;top:0;left:0;overflow:hidden}.is-visible .bar[data-v-f9be8245]:after{animation:grow-f9be8245 .8s var(--ease-out) backwards;animation-delay:calc(.1s + var(--i) * 80ms)}.now[data-v-f9be8245]{background:var(--now);color:#1c1400;border-radius:3px;padding:0 .3rem;font-size:.5625rem;font-weight:600;position:absolute;bottom:-.2rem;translate:-50% 100%}.axis[data-v-f9be8245]{height:1.5rem;color:var(--ink-soft);font-size:var(--text-xs);margin-top:.4rem;position:relative}.axis span[data-v-f9be8245]{padding-left:.3rem;position:absolute;top:.35rem}@keyframes grow-f9be8245{0%{transform:scaleX(0)}}@media (width<=40rem){.timeline[data-v-f9be8245]{padding-inline:.75rem}.axis span[data-v-f9be8245]{font-size:.5625rem}.axis span[data-v-f9be8245]:nth-child(2n),.now[data-v-f9be8245]{display:none}}.record[data-v-b9c08f6e]{transition:background-color .25s;position:relative}.record[data-v-b9c08f6e]:before{content:"";left:calc(var(--gutter) * -1);background:var(--relation);width:3px;transition:transform .3s var(--ease-out);position:absolute;top:-1px;bottom:-1px;transform:scaleY(0)}.record.is-active[data-v-b9c08f6e]:before{transform:scaleY(1)}.role[data-v-b9c08f6e]{flex-wrap:wrap;align-items:center;gap:.4rem .75rem;display:flex}.grid[data-v-12d94f2c]{grid-template-columns:repeat(auto-fill,minmax(min(100%,21rem),1fr));gap:1rem;display:grid}.card[data-v-12d94f2c]{border:1px solid var(--rule);border-radius:var(--radius);background:var(--sheet);flex-direction:column;gap:.75rem;padding:1.5rem 1.5rem 1.35rem;transition:border-color .2s;display:flex}.card[data-v-12d94f2c]:hover{border-color:color-mix(in oklab, var(--ink-soft) 55%, var(--rule))}.kind[data-v-12d94f2c]{color:var(--ink-soft);font-size:var(--text-xs)}.name[data-v-12d94f2c]{font-size:var(--text-lg);font-weight:650;line-height:1.3}.name bdi[data-v-12d94f2c]{unicode-bidi:plaintext}.description[data-v-12d94f2c]{color:var(--ink-soft);text-wrap:pretty}.links[data-v-12d94f2c]{flex-wrap:wrap;gap:.4rem 1.25rem;margin-top:auto;padding-top:.75rem;font-size:.95rem;font-weight:600;display:flex}.note[data-v-12d94f2c]{border:1px dashed var(--rule);border-radius:var(--radius);max-width:62ch;color:var(--ink-soft);text-wrap:pretty;margin-top:1rem;padding:1.25rem 1.5rem}.list[data-v-69ab6643]{border-top:1px solid var(--rule)}.item[data-v-69ab6643]{border-bottom:1px solid var(--rule);grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:.75rem clamp(2rem,5vw,5rem);padding-block:1.5rem;display:grid}.head[data-v-69ab6643]{align-content:start;gap:.4rem;display:grid}.name[data-v-69ab6643]{font-size:var(--text-lg);font-weight:650;line-height:1.3}.issuer[data-v-69ab6643]{color:var(--ink-soft);font-size:var(--text-xs)}.description[data-v-69ab6643]{max-width:60ch;color:var(--ink-soft);text-wrap:pretty}@media (width<=44rem){.item[data-v-69ab6643]{grid-template-columns:minmax(0,1fr)}}.contact[data-v-413aec79]{padding-bottom:clamp(4rem,3rem + 4vw,7rem)}.table[data-v-413aec79]{align-items:center;gap:.6rem;margin-bottom:1rem;font-weight:600;display:flex}.dot[data-v-413aec79]{background:var(--relation);border-radius:50%;width:.55rem;height:.55rem}.title[data-v-413aec79]{max-width:18ch}.intro[data-v-413aec79]{color:var(--ink-soft);margin-top:1rem;font-size:1.125rem}.email-row[data-v-413aec79]{border-block:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;margin-top:clamp(2rem,1.5rem + 2vw,3rem);padding-block:clamp(1.25rem,1rem + 1vw,2rem);display:flex}.email[data-v-413aec79]{min-width:0;font-family:var(--font-display);font-variation-settings:"wdth" 112;letter-spacing:-.02em;color:var(--relation);overflow-wrap:anywhere;transition:background-size .4s var(--ease-out);background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:0% 2px;font-size:clamp(1.5rem,.6rem + 4vw,3.75rem);font-weight:700;line-height:1.1;text-decoration:none}.email[data-v-413aec79]:hover{background-size:100% 2px}.copy[data-v-413aec79]{justify-content:center;min-width:8.5rem;margin-left:auto}.details[data-v-413aec79]{grid-template-columns:auto auto minmax(0,1fr);gap:1.5rem clamp(2rem,6vw,5rem);margin-top:2rem;display:grid}.details dt[data-v-413aec79]{color:var(--ink-soft);font-size:var(--text-xs);margin-bottom:.35rem}.details dd[data-v-413aec79]{font-weight:500}.socials[data-v-413aec79]{flex-wrap:wrap;gap:.35rem 1.25rem;display:flex}@media (width<=44rem){.details[data-v-413aec79]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.details>div[data-v-413aec79]:last-child{grid-column:1/-1}.copy[data-v-413aec79]{margin-left:0}}.footer[data-v-1e5f5302]{border-top:1px solid var(--rule);color:var(--ink-soft)}.bar[data-v-1e5f5302]{font-size:var(--text-xs);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;padding-block:1.5rem;display:flex}.top[data-v-1e5f5302]{text-decoration:none}.top[data-v-1e5f5302]:hover{color:var(--relation)}.skip[data-v-afc0d1ee]{z-index:100;border-radius:var(--radius-sm);background:var(--ink);color:var(--on-ink);padding:.5rem .875rem;font-weight:600;text-decoration:none;position:fixed;top:.75rem;left:.75rem;transform:translateY(-200%)}.skip[data-v-afc0d1ee]:focus-visible{transform:none}
