:root{--paper: #1a1b26;--panel: #24283b;--ink: #c0caf5;--ink-2: #9aa2c4;--dim: #565f89;--line: rgba(192,202,245,.13);--line-2: rgba(192,202,245,.07);--teal: #7dcfff;--orange: #ff9e64;--sans: "IBM Plex Sans", system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace;--maxw: 1180px;--gut: clamp(1.25rem, 4vw, 3.5rem)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:17px;line-height:1.55;-webkit-font-smoothing:antialiased;overflow-x:hidden}::selection{background:var(--teal);color:#1a1b26}a{color:inherit;text-decoration:none}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gut)}.mono{font-family:var(--mono)}.lab{font-family:var(--mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}.lab .t{color:var(--teal)}.lab .o{color:var(--orange)}.topbar{display:flex;justify-content:space-between;align-items:center;padding:1.3rem var(--gut);border-bottom:1px solid var(--line)}.topbar .name{font-weight:600;letter-spacing:-.01em}.topbar .st{font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.topbar .st .d{color:var(--teal)}.hero{display:grid;grid-template-columns:1fr 1.05fr;gap:clamp(1.5rem,4vw,3.5rem);align-items:center;padding:clamp(2.5rem,6vw,5rem) 0}@media(max-width:880px){.hero{grid-template-columns:1fr}}.hero h1{font-family:var(--sans);font-weight:600;font-size:clamp(2.4rem,5.6vw,4rem);line-height:1.02;letter-spacing:-.03em;margin:1.1rem 0 1.3rem}.hero h1 .teal{color:var(--teal)}.hero h1 .or{color:var(--orange)}.hero .sub{font-size:clamp(1.05rem,1.6vw,1.25rem);color:var(--ink-2);max-width:40ch}.hero .cta{margin-top:2rem;display:flex;gap:1rem;flex-wrap:wrap}.btn{font-family:var(--mono);font-size:.76rem;letter-spacing:.08em;text-transform:uppercase;padding:.75rem 1.15rem;border:1px solid var(--line);transition:all .2s}.btn:hover{border-color:var(--teal);color:var(--teal)}.btn--p{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn--p:hover{background:var(--teal);border-color:var(--teal);color:#1a1b26}.figure{border:1px solid var(--line);background:var(--panel);position:relative;overflow:hidden}.figure canvas{display:block}.figure .cap{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:.6rem .9rem;font-family:var(--mono);font-size:.68rem;letter-spacing:.04em;color:var(--dim)}.figure .cap .t{color:var(--teal)}section.block{padding:clamp(2.8rem,6vw,5rem) 0;border-top:1px solid var(--line)}.sec-label{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:2rem}.sec-label h2{font-weight:600;font-size:clamp(1.4rem,3vw,2rem);letter-spacing:-.02em}.now{display:grid;grid-template-columns:.4fr 1fr;gap:clamp(1.5rem,4vw,3rem)}@media(max-width:720px){.now{grid-template-columns:1fr;gap:1rem}}.now p{font-size:clamp(1.1rem,1.8vw,1.4rem);line-height:1.45}.now p .teal{color:var(--teal);font-weight:500}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);font-weight:500;padding:0 0 .8rem;border-bottom:1px solid var(--line)}.tbl td{padding:1.1rem 1rem 1.1rem 0;border-bottom:1px solid var(--line-2);vertical-align:top}.tbl tr{transition:background .2s}.tbl tbody tr:hover{background:#7dcfff0d}.tbl .n{font-family:var(--mono);color:var(--teal);font-size:.85rem;width:3rem}.tbl .ti{font-weight:600;font-size:1.18rem;letter-spacing:-.01em}.tbl .ds{color:var(--ink-2);font-size:.96rem;max-width:52ch;margin-top:.25rem}.tbl .tg{font-family:var(--mono);font-size:.72rem;color:var(--dim);white-space:nowrap;text-align:right}.entry{display:grid;grid-template-columns:4rem 1fr auto;gap:1.4rem;align-items:baseline;padding:.95rem 0;border-bottom:1px solid var(--line-2);transition:padding-left .2s}.entry:hover{padding-left:.6rem}.entry .yr{font-family:var(--mono);font-size:.78rem;color:var(--dim)}.entry .ti{font-weight:500;font-size:1.1rem}.entry .ti .ven{color:var(--dim);font-weight:400;margin-left:.6ch;font-size:.92rem}.entry .go{font-family:var(--mono);font-size:.72rem;color:var(--teal);opacity:0}.entry:hover .go{opacity:1}.contact .mail{font-weight:600;font-size:clamp(1.8rem,5vw,3.4rem);letter-spacing:-.02em;color:var(--ink);border-bottom:3px solid var(--teal)}.contact .links{display:flex;gap:2rem;flex-wrap:wrap;margin-top:2rem;font-family:var(--mono);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}.contact .links a:hover{color:var(--teal)}footer{border-top:1px solid var(--line);padding:2rem 0 3rem;font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}.topbar a.name{color:var(--ink);font-weight:600;letter-spacing:-.01em}.topbar .nav{display:flex;gap:1.5rem;align-items:baseline;font-family:var(--mono);font-size:.75rem;letter-spacing:.04em;text-transform:uppercase}.topbar .nav a{color:var(--ink-2);transition:color .2s;position:relative;padding-bottom:2px}.topbar .nav a:hover{color:var(--teal)}.topbar .nav a[aria-current=page]{color:var(--ink)}.topbar .nav a[aria-current=page]:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--teal)}.topbar .nav a.term{color:var(--orange)}.topbar .nav a.mode-switch--console{view-transition-name:console-switch}@media(max-width:640px){.topbar{flex-direction:column;gap:.8rem;align-items:flex-start}.topbar .nav{flex-wrap:wrap;gap:1.1rem}}.page{max-width:var(--maxw);margin:0 auto;padding:clamp(2.4rem,6vw,4.5rem) var(--gut) 4.5rem}.page-head{margin-bottom:clamp(1.8rem,4vw,3rem)}.page-head .lab{margin-bottom:1rem}.page-head h1{font-weight:600;font-size:clamp(2rem,5.4vw,3.6rem);letter-spacing:-.03em;line-height:1.02}.page-head .sub{color:var(--ink-2);font-size:clamp(1.05rem,1.7vw,1.3rem);max-width:60ch;margin-top:1.1rem;line-height:1.5}.proj{border-top:1px solid var(--line);padding:clamp(1.5rem,3vw,2.2rem) 0;display:grid;grid-template-columns:4rem 1fr;gap:clamp(1rem,3vw,2.2rem)}@media(max-width:720px){.proj{grid-template-columns:1fr;gap:.5rem}}.proj .pn{font-family:var(--mono);color:var(--teal);font-size:.82rem;padding-top:.35rem}.proj h2{font-weight:600;font-size:clamp(1.3rem,2.8vw,1.85rem);letter-spacing:-.02em;margin-bottom:.45rem}.proj .meta{font-family:var(--mono);font-size:.7rem;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);margin-bottom:.9rem}.proj p{color:var(--ink-2);max-width:66ch;margin-bottom:.6rem;line-height:1.55}.proj .pts{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}.proj .pts li{font-family:var(--mono);font-size:.68rem;color:var(--dim);border:1px solid var(--line);padding:.25rem .6rem}.proj .outlinks{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1rem}.proj .outlinks a{font-family:var(--mono);font-size:.7rem;color:var(--teal);border-bottom:1px solid rgba(125,207,255,.35)}.proj .outlinks a:hover{color:var(--ink);border-color:var(--ink)}.archive-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line)}@media(max-width:760px){.archive-grid{grid-template-columns:1fr}}.archive-card{background:var(--paper);padding:clamp(1.1rem,3vw,1.45rem);min-height:11rem;display:flex;flex-direction:column;gap:.75rem}.archive-card h2,.archive-card h3{font-size:clamp(1.1rem,2.2vw,1.45rem);letter-spacing:-.02em;line-height:1.15}.archive-card p{color:var(--ink-2);font-size:.95rem;line-height:1.5}.archive-card .lab{margin-top:auto;color:var(--teal)}.archive-list{border-top:1px solid var(--line)}.archive-item{display:grid;grid-template-columns:minmax(10rem,.32fr) 1fr;gap:clamp(1rem,3vw,2rem);padding:1.05rem 0;border-bottom:1px solid var(--line-2)}@media(max-width:720px){.archive-item{grid-template-columns:1fr;gap:.35rem}}.archive-item .meta{font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}.archive-item h3{font-size:clamp(1.05rem,2vw,1.25rem);line-height:1.2;letter-spacing:-.01em}.archive-item a:hover h3{color:var(--teal)}.archive-item p{color:var(--ink-2);font-size:.94rem;margin-top:.35rem;max-width:70ch}.doc-body{max-width:78ch;color:var(--ink-2)}.doc-body p{margin:0 0 1rem}.doc-body strong{color:var(--ink)}.doc-actions{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:1.6rem}.resume-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;flex-wrap:wrap;margin-bottom:2rem}.resume-head .links{display:flex;gap:1rem;flex-wrap:wrap;font-family:var(--mono);font-size:.76rem;letter-spacing:.06em;text-transform:uppercase;color:var(--teal)}.tl{border-top:1px solid var(--line)}.tl .row{display:grid;grid-template-columns:9.5rem 1fr;gap:clamp(1rem,3vw,2rem);padding:1.3rem 0;border-bottom:1px solid var(--line-2)}@media(max-width:680px){.tl .row{grid-template-columns:1fr;gap:.3rem}}.tl .yr{font-family:var(--mono);font-size:.76rem;color:var(--dim);padding-top:.15rem}.tl h3{font-weight:600;font-size:1.12rem;display:inline}.tl .org{color:var(--ink-2)}.tl .role{color:var(--teal);font-size:.82rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.05em;margin-top:.15rem}.tl p{color:var(--ink-2);font-size:.94rem;margin-top:.45rem;max-width:64ch;line-height:1.5}.skills{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin-top:1.4rem}@media(max-width:680px){.skills{grid-template-columns:1fr}}.skills .sk{background:var(--paper);padding:1.2rem 1.3rem}.skills .sk h4{font-family:var(--mono);font-size:.68rem;text-transform:uppercase;letter-spacing:.1em;color:var(--teal);margin-bottom:.5rem}.skills .sk p{color:var(--ink-2);font-size:.9rem;line-height:1.5}.edu .row{display:grid;grid-template-columns:9.5rem 1fr;gap:clamp(1rem,3vw,2rem);padding:1rem 0;border-bottom:1px solid var(--line-2)}@media(max-width:680px){.edu .row{grid-template-columns:1fr;gap:.2rem}}.edu .deg{font-weight:600}.edu .deg .where{color:var(--ink-2);font-weight:400}.cta-row{display:flex;gap:1rem;flex-wrap:wrap;margin-top:clamp(2rem,5vw,3rem)}.backlink{display:inline-block;margin-top:2.5rem;font-family:var(--mono);font-size:.76rem;color:var(--teal)}.figure .graph{width:100%;height:440px;touch-action:none}.figure .legend{display:flex;flex-wrap:wrap;gap:.9rem;padding:.55rem .9rem;border-top:1px solid var(--line);font-family:var(--mono);font-size:.64rem;text-transform:uppercase;letter-spacing:.05em;color:var(--dim)}.figure .legend span{display:inline-flex;align-items:center;gap:.45ch}.figure .legend i{width:7px;height:7px;border-radius:50%;display:inline-block}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-cyrillic-ext-400-normal.g30qAdWV.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-sans-cyrillic-400-normal.DZqxrq2p.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-sans-greek-400-normal._efipK4i.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-sans-vietnamese-400-normal.DG4YqDda.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-sans-latin-ext-400-normal.C5H60-Va.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2) format("woff2"),url(/_astro/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:700;src:url(/_astro/ibm-plex-sans-cyrillic-ext-700-normal.BmRLXWpJ.woff2) format("woff2"),url(/_astro/ibm-plex-sans-cyrillic-ext-700-normal.DCQwxkRk.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:700;src:url(/_astro/ibm-plex-sans-cyrillic-700-normal.D_uavGvn.woff2) format("woff2"),url(/_astro/ibm-plex-sans-cyrillic-700-normal.RFb1v-CK.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:700;src:url(/_astro/ibm-plex-sans-greek-700-normal.wyJ6jzdA.woff2) format("woff2"),url(/_astro/ibm-plex-sans-greek-700-normal.CkZN0sRy.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:700;src:url(/_astro/ibm-plex-sans-vietnamese-700-normal.CkEo6LDy.woff2) format("woff2"),url(/_astro/ibm-plex-sans-vietnamese-700-normal.BV5B8Are.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:700;src:url(/_astro/ibm-plex-sans-latin-ext-700-normal.aMgXseD4.woff2) format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-700-normal.DZH6Xh-4.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:700;src:url(/_astro/ibm-plex-sans-latin-700-normal.Bxkt5Cjx.woff2) format("woff2"),url(/_astro/ibm-plex-sans-latin-700-normal.Bth3BMcD.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}
