@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-vietnamese-400-normal-B7xT_GF5.woff2) format("woff2"),url(/assets/space-grotesk-vietnamese-400-normal-BIWiOVfw.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-ext-400-normal-CfP_5XZW.woff2) format("woff2"),url(/assets/space-grotesk-latin-ext-400-normal-DRPE3kg4.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2) format("woff2"),url(/assets/space-grotesk-latin-400-normal-BnQMeOim.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-vietnamese-500-normal-BmEvtly_.woff2) format("woff2"),url(/assets/space-grotesk-vietnamese-500-normal-BTqKIpxg.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-ext-500-normal-DUe3BAxM.woff2) format("woff2"),url(/assets/space-grotesk-latin-ext-500-normal-3dgZTiw9.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2) format("woff2"),url(/assets/space-grotesk-latin-500-normal-CNSSEhBt.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-vietnamese-600-normal-DUi7WF5p.woff2) format("woff2"),url(/assets/space-grotesk-vietnamese-600-normal-D6zpsUhD.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-ext-600-normal-DxxdqCpr.woff2) format("woff2"),url(/assets/space-grotesk-latin-ext-600-normal-VcznFIpX.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2) format("woff2"),url(/assets/space-grotesk-latin-600-normal-BflQw4A9.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-vietnamese-700-normal-DMty7AZE.woff2) format("woff2"),url(/assets/space-grotesk-vietnamese-700-normal-Duxec5Rn.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-ext-700-normal-BQnZhY3m.woff2) format("woff2"),url(/assets/space-grotesk-latin-ext-700-normal-HVCqSBdx.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:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2) format("woff2"),url(/assets/space-grotesk-latin-700-normal-CwsQ-cCU.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.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 Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2) format("woff2"),url(/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2) format("woff2"),url(/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2) format("woff2"),url(/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2) format("woff2"),url(/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.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: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{--paper: #fafaf7;--paper-2: #f2f2ed;--ink: #15171c;--ink-2: #565a63;--ink-3: #696c73;--line: #e4e4dd;--line-2: #d6d6ce;--cobalt: #2440c7;--cobalt-2: #4a63e0;--accent-text: #2440c7;--wash: rgba(36, 64, 199, .06);--emerald: #147a56;--display: "Space Grotesk", sans-serif;--body: "IBM Plex Sans", sans-serif;--mono: "IBM Plex Mono", monospace;--maxw: 1080px}[data-theme=dark]{--paper: #15171c;--paper-2: #1e2028;--ink: #eaeaed;--ink-2: #a0a4ad;--ink-3: #8e929c;--line: #2a2d35;--line-2: #363940;--cobalt: #4a63e0;--cobalt-2: #6b82f0;--accent-text: #8b9cf4;--wash: rgba(74, 99, 224, .12);--emerald: #2bc48a}[data-theme=dark] .topbar{background:#15171cd1}[data-theme=dark] .record,[data-theme=dark] .proj,[data-theme=dark] .oss,[data-theme=dark] .lang,[data-theme=dark] .edu,[data-theme=dark] .chip,[data-theme=dark] .links a,[data-theme=dark] .exp .tags span,[data-theme=dark] .certs .row span{background:var(--paper-2)}[data-theme=dark] .stat{border-left-color:#15171c24}[data-theme=dark] .stat .l{color:#15171c9e}[data-theme=dark] ::selection{background:var(--cobalt);color:#fff}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}::selection{background:var(--cobalt);color:#fff}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}.mono{font-family:var(--mono);font-weight:500;letter-spacing:.02em}.eyebrow{font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-text)}.topbar{position:sticky;top:0;z-index:50;background:#fafaf7d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.topbar .wrap{display:flex;align-items:center;justify-content:space-between;height:60px}section[id]{scroll-margin-top:72px}.topnav{display:flex;align-items:center;gap:22px}.topnav a{font-family:var(--mono);font-size:13px;color:var(--ink-2);text-decoration:none;letter-spacing:.03em}.topnav a:hover{color:var(--accent-text)}@media(max-width:860px){.topnav{display:none}}.topbar-right{display:flex;align-items:center;gap:14px}.monogram{font-family:var(--display);font-weight:700;font-size:18px;letter-spacing:.02em;display:flex;align-items:center;gap:10px}.monogram .dot{width:9px;height:9px;border-radius:2px;background:var(--cobalt);display:inline-block}.status{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:12px;color:var(--ink-2)}.pulse{width:8px;height:8px;border-radius:50%;background:var(--emerald);position:relative}.pulse:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:50%;border:1.5px solid var(--emerald);opacity:.4;animation:ring 2.4s ease-out infinite}@keyframes ring{0%{transform:scale(.6);opacity:.5}to{transform:scale(1.5);opacity:0}}.status .loc{color:var(--ink-3)}@media(max-width:640px){.status .loc,.status{display:none}.topbar-right{gap:8px}}.lang-toggle{display:flex;border:1px solid var(--line-2);border-radius:6px;overflow:hidden}.lang-toggle button{font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.06em;padding:6px 10px;border:none;background:transparent;color:var(--ink-3);cursor:pointer;transition:all .15s ease}.lang-toggle button+button{border-left:1px solid var(--line-2)}.lang-toggle button.active{background:var(--cobalt);color:#fff}.lang-toggle button:focus-visible{outline:2px solid var(--cobalt);outline-offset:-2px}.dark-toggle{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--line-2);border-radius:6px;background:transparent;color:var(--ink-2);cursor:pointer;transition:all .15s ease}.dark-toggle:hover{border-color:var(--accent-text);color:var(--accent-text)}.download-cv-topbar{font-family:var(--mono);font-size:12px;font-weight:500;display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:1px solid var(--line-2);border-radius:6px;background:transparent;color:var(--ink-2);cursor:pointer;transition:all .15s ease}.download-cv-topbar:hover{border-color:var(--accent-text);color:var(--accent-text)}.download-cv-topbar:disabled{opacity:.5;cursor:wait}@media(max-width:760px){.download-cv-topbar{display:none}}.links-btn{font-family:var(--mono);font-size:14px;text-decoration:none;color:var(--ink);border:1px solid var(--line-2);border-radius:8px;padding:13px 20px;background:#fff;display:inline-flex;align-items:center;gap:9px;transition:all .15s ease;cursor:pointer}.links-btn:hover{border-color:var(--accent-text);color:var(--accent-text);transform:translateY(-1px)}[data-theme=dark] .links-btn{background:var(--paper-2);color:var(--ink)}.hero{padding:84px 0 64px;border-bottom:1px solid var(--line)}.hero-grid{display:grid;grid-template-columns:1.55fr 1fr;gap:54px;align-items:center}@media(max-width:860px){.hero-grid{grid-template-columns:1fr;gap:38px}}.hero h1{font-family:var(--display);font-weight:600;font-size:clamp(40px,7vw,72px);line-height:1.02;letter-spacing:-.02em;margin:18px 0 0}.hero .lede{font-size:clamp(18px,2.4vw,23px);line-height:1.4;color:var(--ink);margin-top:22px;max-width:30ch;font-weight:500}.hero .lede b{color:var(--accent-text);font-weight:600}.hero p.sub{color:var(--ink-2);margin-top:18px;max-width:46ch;font-size:15.5px}.cta-row{display:flex;flex-wrap:wrap;gap:14px;margin-top:30px;align-items:center}.btn{font-family:var(--mono);font-weight:500;font-size:14px;background:var(--ink);color:var(--paper);border:1px solid var(--ink);padding:13px 22px;border-radius:7px;text-decoration:none;display:inline-flex;align-items:center;gap:9px;transition:transform .15s ease,background .15s ease}.btn:hover{background:var(--cobalt);border-color:var(--accent-text);transform:translateY(-1px)}.btn svg{width:15px;height:15px}.chip{font-family:var(--mono);font-size:13px;color:var(--ink-2);border:1px solid var(--line-2);border-radius:7px;padding:11px 16px;display:inline-flex;align-items:center;gap:8px;background:#fff}.chip .g{width:7px;height:7px;border-radius:50%;background:var(--emerald)}.record{border:1px solid var(--line-2);border-radius:12px;background:#fff;box-shadow:0 1px #00000005,0 18px 40px -28px #14172859;overflow:hidden}.record .rhead{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--paper-2);font-family:var(--mono);font-size:11.5px;color:var(--ink-3);letter-spacing:.08em;text-transform:uppercase}.record .rhead .dots{display:flex;gap:6px}.record .rhead .dots i{width:9px;height:9px;border-radius:50%;background:var(--line-2);display:inline-block}.record .rbody{padding:6px 0}.rrow{display:grid;grid-template-columns:96px 1fr;gap:10px;padding:9px 16px;align-items:start}.rrow+.rrow{border-top:1px dashed var(--line)}.rrow .k{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);letter-spacing:.05em;text-transform:uppercase;padding-top:2px}.rrow .v{font-size:14px;font-weight:500}.rrow .v small{display:block;color:var(--ink-2);font-weight:400;font-size:12.5px}.tagrow{display:flex;flex-wrap:wrap;gap:5px}.tagrow span{font-family:var(--mono);font-size:11px;background:var(--wash);color:var(--accent-text);padding:3px 8px;border-radius:5px}.strip{background:var(--ink);color:var(--paper)}.strip .wrap{display:grid;grid-template-columns:repeat(4,1fr);gap:0}@media(max-width:720px){.strip .wrap{grid-template-columns:repeat(2,1fr)}}.stat{padding:34px 22px 30px;border-left:1px solid rgba(255,255,255,.1)}.stat:first-child{border-left:none;padding-left:28px}@media(max-width:720px){.stat:nth-child(odd){border-left:none}.stat{padding-left:28px}}.stat .n{font-family:var(--display);font-weight:600;font-size:clamp(30px,4.4vw,42px);letter-spacing:-.02em;line-height:1}.stat .n em{color:var(--cobalt-2);font-style:normal}.stat .l{font-family:var(--mono);font-size:12px;color:#ffffff8c;margin-top:11px;letter-spacing:.04em}.block{padding:72px 0;border-bottom:1px solid var(--line)}.block-head{display:flex;align-items:baseline;gap:18px;margin-bottom:38px;flex-wrap:wrap}.block-head h2{font-family:var(--display);font-weight:600;font-size:clamp(26px,3.4vw,34px);letter-spacing:-.01em}.block-head .idx{font-family:var(--mono);font-size:13px;color:var(--ink-3)}.block-head .hint{font-family:var(--mono);font-size:12.5px;color:var(--ink-3);margin-left:auto}.exp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}@media(max-width:720px){.exp-grid{grid-template-columns:1fr}}.exp{background:var(--paper);padding:24px 24px 26px}.exp h3{font-family:var(--mono);font-size:12.5px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);margin-bottom:14px;display:flex;align-items:center;gap:9px}.exp h3 .bar{width:18px;height:2px;background:var(--cobalt)}.exp .tags{display:flex;flex-wrap:wrap;gap:7px}.exp .tags span{font-size:13.5px;font-weight:500;background:#fff;border:1px solid var(--line-2);padding:5px 11px;border-radius:6px}.askcv{margin-top:46px;border:1px solid var(--line-2);border-radius:13px;background:#fff;padding:26px 28px 28px;display:flex;flex-direction:column;gap:14px}[data-theme=dark] .askcv{background:var(--paper-2)}.askcv h3{font-family:var(--mono);font-size:12.5px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text)}.askcv-note{font-size:14.5px;color:var(--ink-2);max-width:62ch}.askcv-note a{color:var(--accent-text);text-decoration:underline;text-underline-offset:2px}.askcv-chips{display:flex;flex-wrap:wrap;gap:8px}.askcv-chips .chip{font-family:var(--body);font-size:13.5px;color:var(--ink-2);background:var(--paper);border:1px solid var(--line-2);border-radius:999px;padding:7px 14px;cursor:pointer}.askcv-chips .chip:hover{border-color:var(--cobalt);color:var(--ink)}.askcv-chips .chip:focus-visible{outline:2px solid var(--cobalt);outline-offset:1px}.askcv-error{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}.askcv-retry{font-family:var(--body);font-size:14.5px;color:var(--accent-text);background:none;border:none;padding:0;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.askcv-retry:focus-visible{outline:2px solid var(--cobalt);outline-offset:1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.askcv-thread{display:flex;flex-direction:column;gap:10px;padding:4px 0}.askcv-msg{font-size:14.5px;line-height:1.55;max-width:56ch;padding:10px 14px;border-radius:10px}.askcv-msg.user{align-self:flex-end;background:var(--wash);color:var(--ink)}.askcv-msg.assistant{align-self:flex-start;background:var(--paper-2);color:var(--ink-2);border:1px solid var(--line)}[data-theme=dark] .askcv-msg.assistant{background:var(--paper)}.askcv-form{display:flex;gap:10px;flex-wrap:wrap}.askcv-form input{flex:1;min-width:220px;font-family:var(--body);font-size:16px;color:var(--ink);background:var(--paper);border:1px solid var(--line-2);border-radius:8px;padding:11px 13px}.askcv-form input:focus-visible{outline:2px solid var(--cobalt);outline-offset:-1px}.askcv-form .btn{border:none;cursor:pointer}.askcv-form .btn:disabled{opacity:.6;cursor:wait}.oss-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}@media(max-width:720px){.oss-grid{grid-template-columns:1fr}}.oss{display:flex;flex-direction:column;gap:12px;border:1px solid var(--line-2);border-radius:13px;background:#fff;padding:22px 24px;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.oss:hover{border-color:var(--accent-text);box-shadow:0 22px 50px -34px #2440c780;transform:translateY(-2px)}.oss h3{font-family:var(--display);font-size:17px;font-weight:600;letter-spacing:-.01em}.oss p{font-size:14.5px;color:var(--ink-2);line-height:1.55;flex:1}.oss .tags{display:flex;flex-wrap:wrap;gap:7px}.oss .tags span{font-family:var(--mono);font-size:11.5px;color:var(--ink-2);border:1px solid var(--line-2);padding:3px 9px;border-radius:6px}.oss-links{display:flex;gap:18px}.oss-links a{font-family:var(--mono);font-size:12.5px;color:var(--accent-text);text-decoration:none}.oss-links a:hover{text-decoration:underline}.work{display:flex;flex-direction:column;gap:20px}.proj{border:1px solid var(--line-2);border-radius:13px;background:#fff;overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.proj:hover{border-color:var(--accent-text);box-shadow:0 22px 50px -34px #2440c780;transform:translateY(-2px)}.proj-top{display:flex;align-items:center;gap:14px;padding:16px 22px;border-bottom:1px solid var(--line);background:var(--paper-2)}.proj-top .pid{font-family:var(--mono);font-size:13px;font-weight:500;color:var(--accent-text)}.proj-top .domain{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);border:1px solid var(--line-2);padding:3px 9px;border-radius:20px;background:var(--paper)}.proj-top .dur{font-family:var(--mono);font-size:12px;color:var(--ink-3);margin-left:auto}.proj-body{padding:24px 22px 22px}.proj-body h3{font-family:var(--display);font-weight:600;font-size:22px;letter-spacing:-.01em}.proj-role{font-family:var(--mono);font-size:12.5px;color:var(--ink-2);margin-top:5px}.proj-desc{color:var(--ink-2);font-size:15px;margin-top:15px;max-width:74ch}.impact{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}.impact .m{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:13px;background:#147a5614;color:var(--emerald);padding:7px 12px;border-radius:7px;font-weight:500}.impact .m.neutral{background:var(--wash);color:var(--accent-text)}.impact .m svg{width:13px;height:13px}.proj-foot{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:20px;padding-top:18px;border-top:1px dashed var(--line)}.stack{display:flex;flex-wrap:wrap;gap:6px}.stack span{font-family:var(--mono);font-size:11.5px;color:var(--ink-2);background:var(--paper-2);padding:4px 9px;border-radius:5px;border:1px solid var(--line)}.ref{font-family:var(--mono);font-size:12px;color:var(--ink-3);margin-left:auto;display:flex;align-items:center;gap:7px}.ai{background:var(--paper-2)}.ai-grid{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}@media(max-width:760px){.ai-grid{grid-template-columns:1fr;gap:26px}}.ai h2{font-family:var(--display);font-weight:600;font-size:clamp(26px,3.6vw,36px);letter-spacing:-.01em;line-height:1.1}.ai h2 span{color:var(--accent-text)}.ai p{color:var(--ink-2);margin-top:16px;font-size:16px;max-width:46ch}.ai-list{display:flex;flex-direction:column;gap:12px}.ai-item{display:flex;gap:14px;align-items:flex-start;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:16px 18px}.ai-item .ic{flex-shrink:0;width:34px;height:34px;border-radius:8px;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:13px}.ai-item h4{font-size:15px;font-weight:600}.ai-item p{margin-top:3px;font-size:13.5px;color:var(--ink-2);max-width:none}.lang-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}@media(max-width:720px){.lang-grid{grid-template-columns:repeat(2,1fr)}}.lang{border:1px solid var(--line-2);border-radius:11px;padding:20px;background:#fff}.lang .nm{font-family:var(--display);font-weight:600;font-size:18px}.lang .lv{font-family:var(--mono);font-size:12px;color:var(--ink-2);margin-top:6px}.lang .meter{height:4px;border-radius:3px;background:var(--line);margin-top:14px;overflow:hidden}.lang .meter i{display:block;height:100%;background:var(--cobalt);border-radius:3px}.edu-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}@media(max-width:720px){.edu-grid{grid-template-columns:1fr}}.edu{border:1px solid var(--line-2);border-radius:12px;background:#fff;padding:22px 22px 20px;position:relative}.edu .yr{font-family:var(--mono);font-size:12px;color:var(--accent-text);letter-spacing:.04em}.edu h3{font-family:var(--display);font-weight:600;font-size:19px;letter-spacing:-.01em;margin-top:8px}.edu .inst{font-family:var(--mono);font-size:12.5px;color:var(--ink-2);margin-top:6px}.edu .note{color:var(--ink-2);font-size:14px;margin-top:12px}.certs{margin-top:24px;border:1px solid var(--line);border-radius:12px;background:var(--paper-2);padding:20px 22px}.certs .lbl{font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin-bottom:14px}.certs .row{display:flex;flex-wrap:wrap;gap:9px}.certs .row span{font-family:var(--mono);font-size:13px;background:#fff;border:1px solid var(--line-2);padding:7px 13px;border-radius:7px;display:inline-flex;align-items:center;gap:8px}.certs .row span:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--emerald)}.contact{padding:84px 0 90px}.contact .wrap{text-align:center}.contact h2{font-family:var(--display);font-weight:600;font-size:clamp(30px,5vw,52px);letter-spacing:-.02em;line-height:1.05}.contact p{color:var(--ink-2);margin:18px auto 0;max-width:48ch;font-size:17px}.contact-form{margin:54px auto 0;max-width:560px;text-align:left;display:flex;flex-direction:column;gap:16px}.contact-form h3{font-family:var(--mono);font-size:12.5px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);text-align:center}.contact-form .hp{display:none}.contact-form label{display:flex;flex-direction:column;gap:6px;font-family:var(--mono);font-size:12px;letter-spacing:.04em;color:var(--ink-2)}.contact-form .form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:560px){.contact-form .form-row{grid-template-columns:1fr}}.contact-form input,.contact-form textarea{font-family:var(--body);font-size:16px;color:var(--ink);background:#fff;border:1px solid var(--line-2);border-radius:8px;padding:11px 13px;resize:vertical}[data-theme=dark] .contact-form input,[data-theme=dark] .contact-form textarea{background:var(--paper-2)}.contact-form input:focus-visible,.contact-form textarea:focus-visible{outline:2px solid var(--cobalt);outline-offset:-1px}.contact-form .form-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.contact-form .btn{border:none;cursor:pointer}.contact-form .btn:disabled{opacity:.6;cursor:wait}.form-status{font-size:14.5px;margin:0}.form-status.success{color:var(--emerald);margin-top:54px;font-size:16px}.form-status.error{color:#b3261e}[data-theme=dark] .form-status.error{color:#f2938c}.links{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:34px}.links a{font-family:var(--mono);font-size:14px;text-decoration:none;color:var(--ink);border:1px solid var(--line-2);border-radius:8px;padding:13px 20px;background:#fff;display:inline-flex;align-items:center;gap:9px;transition:all .15s ease}.links a:hover{border-color:var(--accent-text);color:var(--accent-text);transform:translateY(-1px)}.links a.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}.links a.primary:hover{background:var(--cobalt);border-color:var(--accent-text);color:#fff}footer{border-top:1px solid var(--line);padding:26px 0}footer .wrap{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;font-family:var(--mono);font-size:12px;color:var(--ink-3)}.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.reveal.in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.pulse:after{animation:none}html{scroll-behavior:auto}.proj,.btn,.dark-toggle,.lang-toggle button,.links a,.links-btn,.download-cv-topbar{transition:none}}a:focus-visible,.btn:focus-visible,button:focus-visible{outline:2px solid var(--cobalt);outline-offset:3px;border-radius:6px}@media(max-width:400px){.wrap{padding:0 16px}.hero{padding:56px 0 40px}.hero h1{font-size:34px}.record .rrow{grid-template-columns:1fr}.record .rrow .k{padding-top:0}.lang-grid{grid-template-columns:1fr 1fr}.impact{gap:6px}.impact .m{font-size:11.5px;padding:5px 8px}.proj-top{flex-wrap:wrap;gap:8px}.proj-top .dur{margin-left:0}}@media print{.topbar,.cta-row,.pulse,.download-cv,.download-cv-topbar,.lang-toggle,.dark-toggle{display:none!important}body{background:#fff!important;color:#000!important;font-size:12pt}.strip{background:#222!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}.proj:hover{transform:none;box-shadow:none}.reveal{opacity:1!important;transform:none!important;transition:none!important}.proj{break-inside:avoid;box-shadow:none}.block{border-bottom:1px solid #ccc}.links-btn{display:none!important}a{color:inherit}}
