@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-cyrillic-ext-400-normal.0_q8wa_t-7-c7.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-ext-400-normal.1-h66gx1kjeux.woff)format("woff");unicode-range:U+460-52F,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(../media/ibm-plex-mono-cyrillic-400-normal.2dcg25_89g34d.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-400-normal.1r3eey-1tdqwh.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-vietnamese-400-normal.40ek894ady0so.woff2)format("woff2"),url(../media/ibm-plex-mono-vietnamese-400-normal.0blsyrk14nago.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-latin-ext-400-normal.1ih4rrmj883u6.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-ext-400-normal.0hj8bqnym411c.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-latin-400-normal.19gbeb610ur4n.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-400-normal.3nj-glub930lh.woff)format("woff");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 Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-cyrillic-ext-500-normal.2tfs-ajhr_27q.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-ext-500-normal.29wincfdhpbow.woff)format("woff");unicode-range:U+460-52F,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(../media/ibm-plex-mono-cyrillic-500-normal.30hm7mcic8nak.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-500-normal.1g2cl4geicio1.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-vietnamese-500-normal.400h8-n7y356b.woff2)format("woff2"),url(../media/ibm-plex-mono-vietnamese-500-normal.2w9-mj8vy__-b.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-latin-ext-500-normal.2yypdhrkbqnza.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-ext-500-normal.3-fgi0nn_mag-.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-latin-500-normal.25_05y-blbp24.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-500-normal.20ixcot5hpnm-.woff)format("woff");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}
.ex{--green:#245027;--green-2:#1b3d1e;--cream:#f7f1e4;--paper:#fffdf8;--ink:#1f2a20;--muted:#6b6a5e;--pink:#e5679b;--orange:#f26b2a;--teal:#23a598;--sky:#7cc7ee;--line:#24502729;--side:248px;--gap:14px;--pad:28px;grid-template-columns:var(--side) 1fr;background:var(--paper);color:var(--ink);font-family:Be Vietnam Pro,system-ui,sans-serif;font-size:14px;line-height:1.55;display:grid;position:fixed;inset:0}.ex *{box-sizing:border-box}:where(.ex) button{font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;padding:0}.ex a{color:inherit}.ex :focus-visible{outline:2px solid var(--pink);outline-offset:3px;border-radius:2px}.ex .mono{letter-spacing:.01em;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:12px}.ex h1,.ex h2{letter-spacing:-.02em;font-family:Be Vietnam Pro,system-ui,sans-serif}.ex-side{border-right:1px solid var(--line);background:var(--paper);flex-direction:column;padding:30px 22px 22px 26px;display:flex;overflow-y:auto}.ex-logo{color:var(--green);letter-spacing:-.03em;margin-bottom:34px;font-size:26px;font-weight:700;line-height:1}.ex-nav{margin:0;padding:0;list-style:none}.ex-nav li{margin:0}.ex-nav button,.ex-nav .folder{color:#2f3a30;padding:5px 0;transition:color .12s;display:block}.ex-nav .folder{color:var(--muted)}.ex-nav ul{border-left:1px solid var(--line);margin:0 0 6px;padding:0 0 0 12px;list-style:none}.ex-nav button:hover{color:var(--green)}.ex-nav button[aria-current=page]{color:var(--pink);font-weight:600}.ex-nav button[aria-current=page]:before{content:"";background:var(--pink);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin:0 7px 1px -13px;display:inline-block}.ex-nav ul button[aria-current=page]:before{margin-left:-16px}.ex-nav--meta{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.ex-foot{color:var(--muted);gap:3px;margin-top:auto;padding-top:24px;font-size:12px;display:grid}.ex-foot a{text-decoration:none}.ex-foot a:hover{color:var(--green);text-decoration:underline}.ex-mtop,.ex-sheet,.ex-info--mobile{display:none}.ex-main{flex-direction:column;min-width:0;display:flex;position:relative;overflow:hidden}.ex-main--resume,.ex-main--contact{background:var(--cream);padding:48px 40px 80px;display:block;overflow-y:auto}.ex-stripwrap{flex-direction:column;flex:1;min-height:0;display:flex}.ex-strip{gap:var(--gap);min-height:0;padding:var(--pad) var(--pad) 12px;scroll-snap-type:x proximity;scroll-padding-left:var(--pad);scrollbar-width:none;cursor:grab;overscroll-behavior-x:contain;-webkit-user-select:none;user-select:none;flex:1;align-items:stretch;display:flex;overflow:auto hidden}.ex-strip::-webkit-scrollbar{display:none}.ex-strip.dragging{cursor:grabbing;scroll-snap-type:none}.ex-strip:focus-visible{outline:none}.ex-strip>*{scroll-snap-align:start;flex:none}.ex-slide{height:100%;aspect-ratio:var(--ar);margin:0;position:relative}.ex-slide>button{cursor:inherit;background:var(--cream);display:block;position:absolute;inset:0}.ex-slide img{object-fit:cover;pointer-events:none}.ex-slide>button:after{content:"";box-shadow:inset 0 0 0 0 var(--pink);pointer-events:none;transition:box-shadow .15s;position:absolute;inset:0}.ex-slide>button:hover:after{box-shadow:inset 0 0 0 3px var(--pink)}.ex-slide--hero img{object-fit:contain}.ex-slide--hero{background:0 0}.ex-panel{flex-direction:column;justify-content:flex-start;width:420px;height:100%;padding:6px 28px 0 4px;display:flex;overflow-y:auto}.ex-panel h1{color:var(--green);margin:10px 0 18px;font-size:40px;font-weight:700;line-height:1.02}.ex-panel p{color:#39443a;max-width:46ch;margin:0 0 12px}.ex-panel .mono{color:var(--pink);margin:0}.ex-panel dl{border-top:1px solid var(--line);grid-template-columns:64px 1fr;gap:6px 12px;margin:14px 0 22px;padding-top:16px;font-size:13px;display:grid}.ex-panel dt{color:var(--muted);font-family:IBM Plex Mono,monospace;font-size:12px}.ex-panel dd{margin:0}.ex-panel .hint{color:var(--muted);margin-top:auto;padding-bottom:6px}.ex-panel .hint:before{content:"";background:var(--muted);vertical-align:middle;width:22px;height:1px;margin-right:8px;display:inline-block}.ex-panel--intro{justify-content:center;width:400px}.ex-panel--intro h1{font-size:34px}.ex-pending{border:1.5px dashed var(--line);justify-content:center;width:300px;padding:24px}.ex-btn{background:var(--green);border-radius:999px;width:max-content;padding:12px 20px;font-weight:600;text-decoration:none;display:inline-block;color:#fff!important}.ex-btn:hover{background:var(--pink)}.ex-link{text-underline-offset:4px;font-weight:600;text-decoration:underline;color:var(--green)!important}.ex-cta{align-items:center;gap:18px;margin-top:8px;display:flex}.ex-cover{aspect-ratio:.78;flex-direction:column;gap:4px;height:100%;display:flex}.ex-cover .img{background:var(--cream);flex:1;min-height:0;display:block;position:relative;overflow:hidden}.ex-cover .img img{object-fit:cover;transition:transform .5s}.ex-cover:hover .img img{transform:scale(1.03)}.ex-cover .mono{color:var(--pink);margin-top:8px}.ex-cover .t{color:var(--green);font-size:17px;font-weight:700}.ex-next{background:var(--green);width:320px;height:100%;color:var(--cream);flex-direction:column;justify-content:flex-end;gap:6px;padding:28px;display:flex;position:relative;overflow:hidden}.ex-next:hover{background:var(--pink)}.ex-next .img{opacity:.5;position:absolute;inset:0 0 42%}.ex-next .img img{object-fit:cover}.ex-next .mono,.ex-next .t{position:relative}.ex-next .t{letter-spacing:-.02em;font-size:30px;font-weight:700;line-height:1.05}.ex-progress{padding:6px var(--pad) 18px;color:var(--muted);align-items:center;gap:16px;font-family:IBM Plex Mono,monospace;font-size:12px;display:flex}.ex-progress .ct{font-variant-numeric:tabular-nums;min-width:64px;color:var(--ink)}.ex-progress .bar{background:var(--line);flex:1;height:2px;overflow:hidden}.ex-progress .bar i{background:var(--green);transform-origin:0;height:100%;transition:transform .2s;display:block}.ex-progress .dots{gap:6px;display:none}.ex-progress .dots i{background:#d4cdbd;border-radius:50%;width:6px;height:6px}.ex-progress .dots i.on{background:var(--pink)}.ex-progress .arw{gap:6px;display:flex}.ex-progress .arw button{border:1px solid var(--line);width:34px;height:34px;color:var(--green);text-align:center;border-radius:50%;place-items:center;font-size:15px;display:grid}.ex-progress .arw button:hover:not(:disabled){background:var(--green);color:#fff}.ex-progress .arw button:disabled{opacity:.3;cursor:default}.ex-doc{background:var(--paper);border-radius:14px;max-width:860px;margin:0 auto;overflow:hidden;box-shadow:0 30px 70px -36px #1f2a2073}.ex-doc .bar{background:var(--green);color:var(--cream);justify-content:space-between;align-items:center;padding:12px 20px;display:flex}.ex-doc .bar .ex-link{color:var(--cream)!important}.ex-doc .body{padding:48px 56px 56px}.ex-doc h1{color:var(--green);margin:0 0 6px;font-size:46px;font-weight:700;line-height:1}.ex-doc .role{margin:0;font-weight:500}.ex-doc .contact{color:var(--muted);flex-wrap:wrap;gap:4px 16px;margin:8px 0 0;display:flex}.ex-doc .lead{max-width:60ch;margin:18px 0 0;font-size:16px}.ex-doc h2{color:var(--pink);border-bottom:1px solid var(--line);margin:32px 0 10px;padding-bottom:6px;font-weight:500}.ex-doc .job{grid-template-columns:1fr auto;gap:2px 16px;margin-bottom:16px;display:grid}.ex-doc .job strong{font-size:15px}.ex-doc .job .when{color:var(--muted)}.ex-doc .job ul{color:#39443a;grid-column:1/-1;margin:6px 0 0;padding-left:18px}.ex-doc .two{grid-template-columns:1fr 1fr;gap:0 40px;display:grid}.ex-doc .tags{flex-wrap:wrap;gap:6px;display:flex}.ex-doc .tags span{background:var(--cream);border-radius:999px;padding:3px 11px}.ex-doc--contact{max-width:620px}.ex-doc--contact ul{margin:28px 0;padding:0;list-style:none}.ex-doc--contact li{border-top:1px solid var(--line);justify-content:space-between;gap:12px;padding:13px 0;display:flex}.ex-doc--contact li .mono{color:var(--muted)}.ex-doc--contact li a{font-weight:600}.ex-view{z-index:60;color:var(--cream);touch-action:pan-y;background:#142216f5;position:fixed;inset:0}.ex-view .top{z-index:2;justify-content:space-between;align-items:center;padding:14px 18px;display:flex;position:absolute;top:0;left:0;right:0}.ex-view .top b{color:var(--pink);margin-left:10px;font-weight:500}.ex-view .top button{text-align:center;width:38px;height:38px;color:var(--cream);border:1px solid #f7f1e44d;border-radius:50%}.ex-view .img{position:absolute;inset:64px 72px 32px}.ex-view .img img{object-fit:contain}.ex-view .nav{width:46px;height:46px;color:var(--cream);text-align:center;z-index:2;border:1px solid #f7f1e44d;border-radius:50%;position:absolute;top:50%;transform:translateY(-50%)}.ex-view .nav:hover{background:var(--pink);border-color:var(--pink)}.ex-view .prev{left:14px}.ex-view .next{right:14px}@media (max-width:900px){.ex{min-height:100vh;display:block;position:static}.ex-side{display:none}.ex-mtop{z-index:30;background:var(--paper);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:14px 18px;display:flex;position:sticky;top:0}.ex-mtop .ex-logo{margin:0;font-size:24px}.ex-menu-btn{border:1px solid var(--green)!important;color:var(--green)!important;border-radius:999px!important;padding:6px 14px!important;font-family:IBM Plex Mono,monospace!important;font-size:13px!important}.ex-sheet{z-index:29;background:var(--green);color:var(--cream);flex-direction:column;padding:24px 22px 32px;display:flex;position:fixed;inset:57px 0 0;overflow-y:auto}.ex-sheet .ex-nav button,.ex-sheet .ex-nav .folder{color:var(--cream);letter-spacing:-.01em;padding:6px 0;font-size:22px;font-weight:600}.ex-sheet .ex-nav .folder{opacity:.7;font-family:IBM Plex Mono,monospace;font-size:15px;font-weight:500}.ex-sheet .ex-nav ul{border-color:#f7f1e440}.ex-sheet .ex-nav ul button{font-size:19px}.ex-sheet .ex-nav button[aria-current=page]{color:var(--pink)}.ex-sheet .ex-nav--meta{border-color:#f7f1e440}.ex-sheet .ex-foot{color:#f7f1e4cc;font-size:14px}.ex-main{display:block;overflow:visible}.ex-info--mobile{padding:22px 18px 6px;display:block}.ex-info--mobile h1{color:var(--green);margin:6px 0 12px;font-size:32px;font-weight:700;line-height:1.05}.ex-info--mobile .mono{color:var(--pink);margin:0}.ex-info--mobile p{color:#39443a;margin:0 0 10px}.ex-strip .ex-info{display:none}.ex-strip{--pad:18px;scroll-snap-type:x mandatory;cursor:auto;align-items:center;gap:10px;height:auto;padding:12px 18px 8px}.ex-slide{height:auto;width:min(86vw, calc(64vh * var(--ar)));aspect-ratio:var(--ar)}.ex-slide--hero{width:calc(100vw - 36px)}.ex-panel--intro{width:84vw;height:auto;padding:8px 4px}.ex-panel--intro h1{font-size:28px}.ex-cover{width:70vw;height:auto}.ex-cover .img{aspect-ratio:.85;flex:none}.ex-next{aspect-ratio:.8;width:70vw;height:auto}.ex-pending{width:80vw;height:auto}.ex-progress{justify-content:center;padding:6px 18px 26px}.ex-progress .bar,.ex-progress .arw{display:none}.ex-progress .dots{display:flex}.ex-progress .ct{min-width:0}.ex-main--resume,.ex-main--contact{padding:18px 12px 40px}.ex-doc .body{padding:28px 22px 34px}.ex-doc h1{font-size:36px}.ex-doc .two{grid-template-columns:1fr}.ex-view .img{inset:60px 6px 24px}.ex-view .nav{display:none}}@media (prefers-reduced-motion:reduce){.ex *{transition:none!important}}@media print{@page{margin:12mm}.ex{display:block;position:static}.ex-side,.ex-mtop,.ex-sheet,.ex-doc .bar{display:none!important}.ex-main--resume{background:0 0;padding:0;overflow:visible}.ex-doc{box-shadow:none;border-radius:0}.ex-doc .body{padding:0}}.ex{--gap:0px}.ex-strip .ex-panel{margin-right:28px}.ex-strip .ex-cover{margin-right:14px}.ex-strip .ex-next,.ex-strip .ex-pending{margin-left:28px}.ex-slide>button{background:0 0}.ex-mhome{display:none}@media (max-width:900px){.ex-donly{display:none!important}.ex-strip{align-items:flex-start}.ex-mhome{padding:18px 18px 0;display:block}.ex-mhome .hero{width:100%;margin-bottom:18px;position:relative}.ex-mhome .hero img{object-fit:contain}.ex-mhome .mono{color:var(--pink);margin:0}.ex-mhome h1{color:var(--green);margin:6px 0 10px;font-size:28px;font-weight:700;line-height:1.08}.ex-mhome p{color:#39443a;margin:0 0 12px}.ex-mhome .pick{margin-top:26px}.ex-main--home .ex-strip{padding-top:8px}}.ex-slide>button:after{display:none}@media (max-width:900px){.ex-strip{align-items:stretch;gap:0;height:64vh;padding:12px 0 8px;scroll-padding-left:0}.ex-strip>*{scroll-snap-align:center}.ex-slide{width:auto;height:100%;aspect-ratio:var(--ar)}.ex-main--home .ex-strip{height:62vh;padding-left:18px}.ex-main--home .ex-strip .ex-cover{aspect-ratio:.72;width:auto;height:100%;margin-right:10px}.ex-main--home .ex-strip .ex-cover .img{aspect-ratio:auto;flex:1}.ex-strip .ex-next{aspect-ratio:auto;width:70vw;height:100%;margin-left:0}.ex-strip .ex-pending{margin-left:18px}}
