@font-face{font-family:EB Garamond Variable;src:url(/eb-garamond/eb-garamond-latin-wght-normal.woff2)format("woff2-variations");font-weight:400 800;font-style:normal;font-display:swap;unicode-range:U+1-FF,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:EB Garamond Variable;src:url(/eb-garamond/eb-garamond-vietnamese-wght-normal.woff2)format("woff2-variations");font-weight:400 800;font-style:normal;font-display:swap;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:EB Garamond Variable;src:url(/eb-garamond/eb-garamond-latin-wght-italic.woff2)format("woff2-variations");font-weight:400 800;font-style:italic;font-display:swap;unicode-range:U+1-FF,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:EB Garamond Variable;src:url(/eb-garamond/eb-garamond-vietnamese-wght-italic.woff2)format("woff2-variations");font-weight:400 800;font-style:italic;font-display:swap;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}[data-soft-nav-outlet]:focus:not(:focus-visible),[data-soft-nav-outlet][data-soft-nav-programmatic-focus]:focus{outline:none}.soft-nav-focus-target{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:fixed;overflow:hidden}.skip-link,.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{font-family:var(--ascii-font)}.skip-link:focus{z-index:10;clip:auto;background:var(--portfolio-paper);width:auto;height:auto;color:var(--portfolio-ink);outline:1px solid var(--ascii-ring);margin:.5rem;padding:.5rem .75rem;overflow:visible}#page-content:focus{outline:none}:root{--portfolio-ink:#111;--portfolio-muted:#777;--portfolio-paper:#fff;--portfolio-fill:#1111110d;--portfolio-fill-hover:#1111111a;--vortex-background:#fff;--vortex-field-rgb:145, 145, 139;--vortex-mark-rgb:17, 17, 17}:root.dark{--portfolio-ink:#e9e6dd;--portfolio-muted:#8f8c83;--portfolio-paper:#11110f;--portfolio-fill:#e9e6dd0d;--portfolio-fill-hover:#e9e6dd1a;--vortex-background:#11110f;--vortex-field-rgb:99, 99, 93;--vortex-mark-rgb:233, 230, 221}.portfolio-page{--portfolio-ink:#e9e6dd;--portfolio-muted:#8f8c83;--portfolio-paper:#11110f;--portfolio-fill:#e9e6dd0d;--portfolio-fill-hover:#e9e6dd1a;--vortex-background:#11110f;--vortex-field-rgb:99, 99, 93;--vortex-mark-rgb:233, 230, 221;--ascii-font:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--ascii-primary:var(--portfolio-ink);--ascii-muted:var(--portfolio-muted);--ascii-ring:var(--portfolio-ink);--ascii-fill:var(--portfolio-fill);--ascii-fill-hover:var(--portfolio-fill-hover);--ascii-radius:0;--ascii-motion:.15s;background:var(--portfolio-paper);min-height:100svh;color:var(--portfolio-ink);font-synthesis:none;font-family:EB Garamond Variable,Palatino,Palatino Linotype,Palatino LT STD,Book Antiqua,Georgia,serif;font-size:15px;overflow-x:hidden}.landing-page-body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#11110f}.portfolio-shell{width:min(76%,1050px);margin:0 auto;padding:3.5rem 0 6rem}.portfolio-content{min-width:0;max-width:52rem}.portfolio-language{margin-bottom:2rem}.lang-toggle{border-radius:var(--ascii-radius);min-height:0;color:var(--ascii-muted);font-family:var(--ascii-font);letter-spacing:.08em;font-size:.85rem;line-height:inherit;vertical-align:baseline;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color var(--ascii-motion) ease, background-color var(--ascii-motion) ease, outline-color var(--ascii-motion) ease, outline-offset var(--ascii-motion) ease;background:0 0;border:0;align-items:baseline;gap:.5rem;padding:.35rem;text-decoration:none;display:inline-flex}.lang-toggle:before,.lang-toggle:after{color:var(--ascii-primary)}.lang-toggle:before{content:"[";margin-right:.35rem}.lang-toggle:after{content:"]";margin-left:.35rem}.lang-toggle .lang-current{color:var(--ascii-primary)}.lang-toggle .lang-slash{color:var(--ascii-muted)}.lang-toggle:hover{color:var(--ascii-primary);background:var(--ascii-fill-hover)}.lang-toggle:focus-visible{outline:1px solid var(--ascii-ring);outline-offset:3px}.portfolio-intro h1,.portfolio-seo-title{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.portfolio-bio{max-width:44rem;margin:3.45rem 0 0;font-size:1.4rem;line-height:1.55}.portfolio-footer{margin-top:5.5rem}.portfolio-button-group{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.vortex-button-group{z-index:1;background:var(--vortex-background);width:max-content;max-width:calc(100% - 2rem);box-shadow:0 0 0 .2rem var(--vortex-background), 0 0 .8rem .2rem var(--vortex-background);filter:blur(.2px);-webkit-backdrop-filter:blur(.45rem);opacity:.86;text-shadow:0 0 .7rem var(--vortex-background);justify-content:center;padding:.35rem;position:absolute;top:65%;left:50%;transform:translate(-50%)}.entries{max-width:44rem;margin-top:3.4rem}.entries h2{margin:0 0 1.4rem;font-size:2.2rem;font-style:italic;font-weight:400;line-height:1}.entry-list{width:100%;margin:0;padding:0;list-style:none}.entry-list a{color:var(--portfolio-ink);transition:color var(--ascii-motion) ease;align-items:baseline;gap:1.2rem;padding:.4rem 0;text-decoration:none;display:flex}.entry-list a:hover{color:var(--portfolio-ink)}.entry-list a:hover span{text-underline-offset:.1em;text-decoration:underline;text-decoration-thickness:.05em}.entry-list time{min-width:7.5rem;color:var(--portfolio-muted);flex-shrink:0;font-size:1.1rem}.entry-list span{font-size:1.4rem}.ascii-button{border-radius:var(--ascii-radius);min-height:0;color:var(--ascii-muted);font-family:var(--ascii-font);font-size:.95rem;line-height:inherit;vertical-align:baseline;letter-spacing:.02em;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color var(--ascii-motion) ease, background-color var(--ascii-motion) ease, outline-color var(--ascii-motion) ease, outline-offset var(--ascii-motion) ease;background:0 0;border:0;align-items:baseline;padding:.35rem;text-decoration:none;display:inline-flex}.ascii-button:before,.ascii-button:after{color:var(--ascii-primary)}.ascii-button:before{content:"[";margin-right:.35rem}.ascii-button:after{content:"]";margin-left:.35rem}.ascii-button:hover{color:var(--ascii-primary);background:var(--ascii-fill-hover)}.ascii-button:focus-visible{outline:1px solid var(--ascii-ring);outline-offset:3px}.contact-content{max-width:42rem}.contact-panel{display:none}.portfolio-page.contact-page .contact-panel{display:block}.portfolio-page.contact-page .portfolio-footer{display:none}.portfolio-page.contact-page .contact-panel .portfolio-footer{display:block}:root.contact-open .entries,:root.contact-open .portfolio-footer{display:none}:root.contact-open .contact-panel{display:block}.contact-panel h2{margin:0 0 1rem;font-size:clamp(2rem,5vw,3.5rem);font-weight:400}.contact-back{margin-bottom:2rem}.contact-content h1{margin:0 0 1rem;font-size:clamp(2rem,5vw,3.5rem);font-weight:400}.contact-intro,.contact-direct{max-width:36rem;color:var(--portfolio-muted);font-size:1.15rem}.contact-email{color:var(--portfolio-ink);font-family:var(--ascii-font);text-underline-offset:.2em;font-size:.9em;text-decoration:underline;text-decoration-thickness:1px}.contact-email:hover{color:var(--portfolio-muted)}.contact-success{max-width:36rem;color:var(--portfolio-muted);font-size:1.15rem}.contact-error{max-width:36rem;color:var(--portfolio-ink);font-size:1.15rem}.contact-subscribe{max-width:32rem;font-family:var(--ascii-font);gap:1.25rem;margin:2.5rem 0;display:grid}.contact-subscribe label{color:var(--portfolio-muted);gap:.4rem;font-size:.95rem;display:grid}.contact-subscribe input:not([type=hidden]){box-sizing:border-box;border:1px solid var(--ascii-border);border-radius:var(--ascii-radius);background:var(--ascii-fill);width:100%;color:var(--portfolio-ink);font:inherit;padding:.7rem .8rem}.contact-subscribe input:focus-visible{outline:1px solid var(--ascii-ring);outline-offset:2px}.subscribe-button{box-sizing:border-box;justify-content:center;align-items:center;width:100%;min-height:3rem;padding:.7rem 1rem;line-height:1}.subscribe-button--signal{background:var(--ascii-primary);color:var(--portfolio-paper);box-shadow:0 0 0 1px var(--ascii-primary), 0 0 1rem var(--ascii-fill-hover)}.subscribe-button--signal:before,.subscribe-button--signal:after{color:var(--portfolio-paper)}.subscribe-button--signal:hover{background:var(--ascii-muted);color:var(--portfolio-paper)}.ascii-vortex{background:var(--vortex-background,#11110f);width:100%;margin:0;position:relative;overflow:hidden}.ascii-vortex canvas{background:0 0;width:100%;height:clamp(34rem,78svh,58rem);display:block}@media (width<=1100px){.portfolio-shell{width:min(88%,1050px)}}@media (width<=640px){.portfolio-shell{width:auto;margin:0;padding:2rem 1.5rem 3rem}.portfolio-bio{margin-top:2.75rem;font-size:1.25rem}.entry-list a{gap:.6rem}.entry-list time{min-width:6.25rem}.ascii-vortex{width:100%}.ascii-vortex canvas{height:min(70svh,38rem)}}@media (prefers-reduced-motion:no-preference){.portfolio-bio{animation:.52s ease-out 80ms both portfolio-rise}}@keyframes portfolio-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}*{box-sizing:border-box}html{background:var(--portfolio-paper,#fff);min-width:320px}html,body{min-height:100%;margin:0}body{min-width:320px}
