*,*:after,*:before{box-sizing:border-box}:root{font-size:12px;--color-text: #fff;--color-bg: #fff;--color-link: #fff;--color-link-hover: #fff;--page-padding: 1.5rem;--ui-font: "IBM Plex Mono", "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ui-tracking: .08em}body{margin:0;color:var(--color-text);background-color:var(--color-bg);font-family:var(--ui-font);text-transform:uppercase;letter-spacing:var(--ui-tracking);font-size:.82rem;line-height:1.2;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:color .52s ease}body.frame-text-dark{--color-text: #121212;--color-link: #121212;--color-link-hover: #121212}@media(scripting:enabled){.loading:before,.loading:after{content:"";position:fixed;z-index:10000}.loading:before{top:0;left:0;width:100%;height:100%;background:var(--color-bg)}.loading:after{top:50%;left:50%;width:100px;height:1px;margin:0 0 0 -50px;background:var(--color-link);animation:loaderAnim 1.5s ease-in-out infinite alternate forwards}}@keyframes loaderAnim{0%{transform:scaleX(0);transform-origin:0% 50%}50%{transform:scaleX(1);transform-origin:0% 50%}50.1%{transform:scaleX(1);transform-origin:100% 50%}to{transform:scaleX(0);transform-origin:100% 50%}}a{text-decoration:none;color:var(--color-link);outline:none;cursor:pointer;transition:color .52s ease}a:hover{text-decoration:underline;color:var(--color-link-hover)}a:focus{outline:none;background:#d3d3d3}a:focus:not(:focus-visible){background:transparent}a:focus:focus-visible{outline:2px solid red;background:transparent}.frame,.frame span,.frame p,.frame h1{transition:color .52s ease}.frame{padding:3rem var(--page-padding) 0;display:grid;z-index:1000;position:relative;grid-row-gap:1rem;grid-column-gap:2rem;pointer-events:none;justify-items:start;grid-template-columns:auto auto auto 1fr;grid-template-areas:"title title title title" "back archive github ..." "credit credit credit credit" "tags tags tags tags" "sponsor sponsor sponsor sponsor"}.frame #cdawrap{justify-self:start;grid-area:sponsor}.frame a,.frame button{pointer-events:auto}.frame .frame__title{grid-area:title;font-size:inherit;font-weight:600;margin:0}.frame .frame__back{grid-area:back;justify-self:start}.frame .frame__archive{grid-area:archive;justify-self:start}.frame .frame__github{grid-area:github}.frame .frame__tags{grid-area:tags;display:flex;flex-wrap:wrap;gap:1rem}.frame .frame__demos{grid-area:demos;display:flex;flex-wrap:wrap;gap:1rem}.frame .frame__credit{grid-area:credit;margin:0;opacity:.78;font-size:.78rem;font-weight:500;letter-spacing:var(--ui-tracking);line-height:1.2;text-align:right}.frame .frame__credit p{margin-bottom:0}@media screen and (min-width:53em){.frame{padding:var(--page-padding);height:100%;position:fixed;top:0;left:0;width:100%;grid-template-columns:auto auto auto auto 1fr;grid-template-rows:auto auto;align-content:space-between;grid-template-areas:"title back github archive sponsor" "tags tags tags credit credit"}.frame .frame__tags{align-self:end}.frame .frame__credit,.frame #cdawrap{justify-self:end;text-align:right;max-width:300px}}.content{padding:var(--page-padding);display:flex;flex-direction:column;width:100vw;position:relative;pointer-events:none}@media screen and (min-width:53em){.content{min-height:100vh;justify-content:center;align-items:center}}.webgl{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:auto;touch-action:none;z-index:0}.debug-pane{position:fixed;right:1rem;top:4rem;z-index:2000}.fps-stats{position:fixed!important;left:max(1.5rem,env(safe-area-inset-left))!important;top:max(3.5rem,env(safe-area-inset-top))!important;right:auto!important;bottom:auto!important;z-index:2000!important;pointer-events:none}@media(max-width:53em){.debug-pane{top:auto;right:max(1.2rem,env(safe-area-inset-right));bottom:max(.75rem,env(safe-area-inset-bottom))}}.velocity-visualizer{position:fixed;left:max(1.52rem,env(safe-area-inset-left));bottom:max(4.75rem,env(safe-area-inset-bottom));z-index:2000;width:220px;padding:.5rem .625rem;border:1px solid rgba(255,255,255,.2);background:#040a12cc;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;font-family:var(--ui-font);text-transform:uppercase;letter-spacing:var(--ui-tracking);pointer-events:none}.velocity-visualizer__label,.velocity-visualizer__value{margin:0;font-size:10px}.velocity-visualizer__value{margin-top:.25rem}.velocity-visualizer__track{position:relative;margin-top:.5rem;width:100%;height:6px;background:#ffffff1f}.velocity-visualizer__fill{position:absolute;top:0;left:50%;width:0;height:100%;background:#7fffd4}.plane-label-overlay{position:fixed;inset:0;z-index:80;pointer-events:none;transition:opacity .26s ease;color:#f4f4f4eb}.plane-label-overlay__left{position:absolute;left:clamp(2.5rem,8vw,12rem);top:50%;transform:none;display:grid;gap:.75rem}.plane-label-overlay__index{margin:0;font-size:9px;opacity:1}.plane-label-overlay__chip{width:18px;height:18px;border-radius:50%;display:inline-block;box-shadow:0 0 0 1px #ffffff24}.plane-label-overlay__right{position:absolute;right:clamp(2.5rem,7vw,10rem);top:50%;transform:none}.plane-label-card{width:min(28vw,360px);display:grid;grid-template-columns:1fr;align-items:start;pointer-events:none;opacity:1;color:inherit;font-family:var(--ui-font);text-transform:uppercase;letter-spacing:var(--ui-tracking);line-height:1.15}.plane-label-card__word{margin:0;font-size:clamp(9px,.78vw,11px);white-space:nowrap}.plane-label-card__specs{margin:0;display:grid;gap:.25rem}.plane-label-card__row{margin:0;display:grid;grid-template-columns:3.5rem 1fr;align-items:baseline;gap:.8rem}.plane-label-card__row dt,.plane-label-card__row dd{margin:0}.plane-label-card__row dt{font-size:9px;opacity:1}.plane-label-card__value{font-size:clamp(9px,.72vw,11px);opacity:1}@media(max-width:53em){.plane-label-overlay{inset:auto 0 max(6.25rem,env(safe-area-inset-bottom)) 0;display:grid;grid-template-columns:auto auto;justify-content:space-between;align-items:start;column-gap:1.5rem;row-gap:.55rem;padding:0 max(1rem,env(safe-area-inset-right)) 0 max(1rem,env(safe-area-inset-left))}.plane-label-overlay__left{position:static;transform:none;gap:.5rem;grid-column:1;grid-row:2}.plane-label-overlay__right{position:static;transform:none;grid-column:2;grid-row:2}.plane-label-card{width:auto;max-width:min(58vw,270px)}.plane-label-card__word{font-size:10px}.plane-label-card__row{grid-template-columns:2.8rem 1fr;gap:.6rem}.plane-label-card__value{font-size:9px}}@font-face{font-family:GH Display Sans;src:url(../fonts/gh-display-sans-heavy-full.woff2) format("woff2");font-style:normal;font-weight:900;font-display:swap}@font-face{font-family:GH Display Sans;src:url(../fonts/gh-display-sans-heavy.woff2?v=438bcf6923d4) format("woff2");font-style:normal;font-weight:900;font-display:swap;unicode-range:U+20,U+21,U+22,U+23,U+24,U+25,U+26,U+27,U+28,U+29,U+2A,U+2B,U+2C,U+2D,U+2E,U+2F,U+30,U+31,U+32,U+33,U+34,U+35,U+36,U+37,U+38,U+39,U+3A,U+3B,U+3C,U+3D,U+3E,U+3F,U+40,U+41,U+42,U+43,U+44,U+45,U+46,U+47,U+48,U+49,U+4A,U+4B,U+4C,U+4D,U+4E,U+4F,U+50,U+51,U+52,U+53,U+54,U+55,U+56,U+57,U+58,U+59,U+5A,U+5B,U+5C,U+5D,U+5E,U+5F,U+60,U+61,U+62,U+63,U+64,U+65,U+66,U+67,U+68,U+69,U+6A,U+6B,U+6C,U+6D,U+6E,U+6F,U+70,U+71,U+72,U+73,U+74,U+75,U+76,U+77,U+78,U+79,U+7A,U+7B,U+7C,U+7D,U+7E,U+3001,U+3002,U+4E00,U+4E0A,U+4E0D,U+4E0E,U+4E13,U+4E1A,U+4E2A,U+4E2D,U+4E32,U+4E3A,U+4E8B,U+4E8E,U+4E92,U+4EA4,U+4EA7,U+4EBA,U+4ECE,U+4ED8,U+4EE3,U+4EE5,U+4EF6,U+4EF7,U+4F01,U+4F20,U+4F30,U+4F53,U+4F5C,U+4F8B,U+4F9B,U+4FDD,U+4FE1,U+4FEE,U+503C,U+505A,U+50CF,U+5165,U+516C,U+5177,U+5185,U+5199,U+51B3,U+51C6,U+51CF,U+51FA,U+5206,U+5207,U+521D,U+5224,U+5230,U+5236,U+524D,U+5267,U+526A,U+529B,U+529E,U+52A0,U+52A1,U+52A8,U+52A9,U+5305,U+5316,U+534F,U+5355,U+5356,U+5360,U+5382,U+5385,U+5386,U+539F,U+53C2,U+53CA,U+53CD,U+53D1,U+53D8,U+53EF,U+53F0,U+53F2,U+53F6,U+53F8,U+5408,U+540C,U+5411,U+544A,U+548C,U+54A8,U+54C1,U+5546,U+56DE,U+56E2,U+56F4,U+56FE,U+5730,U+573A,U+578B,U+57FA,U+586B,U+5883,U+5907,U+590D,U+5916,U+591A,U+5939,U+597D,U+5B8C,U+5B9A,U+5B9E,U+5BA1,U+5BA2,U+5BA4,U+5BB6,U+5BB9,U+5BC6,U+5C06,U+5C11,U+5C45,U+5C4F,U+5C55,U+5C5E,U+5DE5,U+5DF2,U+5E08,U+5E2E,U+5E38,U+5E73,U+5E74,U+5E76,U+5E7F,U+5EA6,U+5EFA,U+5F00,U+5F02,U+5F0F,U+5F52,U+5F55,U+5F71,U+5F97,U+5FC3,U+5FEB,U+5FF5,U+603B,U+606F,U+60F3,U+6162,U+6210,U+6216,U+6237,U+623F,U+624B,U+6279,U+627E,U+6280,U+628A,U+62A5,U+62CD,U+62E5,U+6301,U+6362,U+63A5,U+63A8,U+63D0,U+642D,U+6444,U+6539,U+6545,U+6548,U+6563,U+6574,U+6587,U+6599,U+65AD,U+65B0,U+65B9,U+65E9,U+65F6,U+6613,U+662F,U+6653,U+666F,U+66F4,U+6709,U+670D,U+671F,U+672C,U+672F,U+673A,U+6750,U+677F,U+6784,U+679C,U+67B6,U+67E5,U+6807,U+6837,U+6838,U+6848,U+6863,U+68B3,U+68C0,U+695A,U+697C,U+6982,U+6A21,U+6BD4,U+6C42,U+6C47,U+6C9F,U+6CD5,U+6CE8,U+6D41,U+6D4B,U+6D77,U+6D88,U+6DF1,U+6E05,U+6E90,U+6F0F,U+7247,U+7248,U+724C,U+73B0,U+73C0,U+7403,U+7406,U+7425,U+74F6,U+751F,U+7528,U+7531,U+7535,U+753B,U+754C,U+767E,U+7684,U+76D8,U+76EE,U+76F4,U+76F8,U+7701,U+770B,U+77E5,U+77ED,U+786E,U+793A,U+7A0B,U+7A0E,U+7A3F,U+7A7A,U+7AD6,U+7B49,U+7B51,U+7B54,U+7BA1,U+7C7B,U+7CBE,U+7CFB,U+7D20,U+7D22,U+7E41,U+7EAA,U+7EB3,U+7EBF,U+7ECF,U+7ED3,U+7ED5,U+7EDF,U+7F29,U+7F51,U+7F6E,U+7F72,U+7FFB,U+8054,U+8096,U+81EA,U+81F4,U+8272,U+8303,U+8349,U+8425,U+843D,U+884C,U+8854,U+8868,U+88AB,U+88C5,U+88F9,U+8981,U+89C1,U+89C2,U+89C6,U+89D2,U+89E3,U+8A00,U+8BA1,U+8BA8,U+8BA9,U+8BB0,U+8BBA,U+8BBE,U+8BC1,U+8BC4,U+8BC6,U+8BD1,U+8BE2,U+8BED,U+8D22,U+8D28,U+8D38,U+8D39,U+8D44,U+8D77,U+8DDF,U+8DE8,U+8DF5,U+8F6E,U+8F83,U+8F85,U+8F91,U+8FBE,U+8FD4,U+8FDB,U+8FF0,U+9009,U+9012,U+901A,U+9020,U+9057,U+90E8,U+90ED,U+9192,U+91CD,U+91CF,U+91D1,U+9500,U+955C,U+957F,U+95EE,U+95F4,U+961F,U+9645,U+96BE,U+96C6,U+9700,U+975E,U+9762,U+9879,U+987A,U+987E,U+9884,U+9891,U+9A8C}@font-face{font-family:GH Wordmark Sans;src:url(../fonts/gh-wordmark-sans.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap;unicode-range:U+5408,U+884C}:root{--content-font: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;--heading-font: "GH Display Sans", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif}body{background:var(--gallery-background, #fffaf0)}.brand-header,.brand-footer{position:fixed;z-index:100;left:0;right:0;padding-inline:clamp(22px,2.5vw,48px);display:flex;justify-content:space-between;align-items:center;pointer-events:none;color:var(--color-text);transition:color .52s ease}.brand-header{top:28px}.brand-signature{font:400 29px/1.12 "GH Wordmark Sans",var(--content-font);font-synthesis:none;letter-spacing:.04em;pointer-events:auto}.contact-trigger{display:grid;place-items:center;width:42px;height:42px;padding:0;border:1px solid color-mix(in srgb,currentColor 28%,transparent);border-radius:50%;background:transparent;color:inherit;pointer-events:auto;cursor:pointer}.contact-trigger:hover{background:color-mix(in srgb,currentColor 5%,transparent)}.contact-trigger:focus-visible,.entry-details:focus-visible{outline:2px solid currentColor;outline-offset:5px}.plane-label-overlay{inset:0;display:block;padding:0;font-family:var(--content-font);text-transform:none;letter-spacing:0}.gallery-entry{position:absolute;top:50%;transform:translateY(-50%);width:31vw;max-width:540px;pointer-events:auto;-webkit-user-select:text;user-select:text;color:var(--color-text);transition:color .52s ease}.gallery-entry[hidden]{display:none}.gallery-entry[data-side=right]{left:64%}.gallery-entry[data-side=left]{left:7.5%}.entry-title{margin:0;font:900 clamp(30px,4.05vw,72px)/1.24 var(--heading-font);letter-spacing:-.035em;white-space:nowrap;font-synthesis:none}.gallery-entry--brand .entry-title{margin-left:0;font-size:clamp(28px,3.8vw,68px);line-height:1.22}.entry-english{max-width:100%;margin:0 0 17px;font:500 clamp(10px,.7vw,12px)/1.6 Arial,Helvetica,sans-serif;letter-spacing:.14em;text-transform:uppercase;opacity:.66}.entry-description{max-width:480px;margin:28px 0 0;font-size:clamp(17px,1.2vw,21px);line-height:1.85;letter-spacing:.015em;opacity:.9;text-wrap:pretty}.entry-intro{max-width:480px;margin-top:30px}.intro-lead{margin:0;font-size:clamp(20px,1.45vw,26px);font-weight:500;line-height:1.55;letter-spacing:-.015em;text-wrap:pretty}.intro-details{position:relative;display:grid;grid-template-columns:.8fr 1.65fr;gap:28px;margin:30px 0 0;padding-top:26px;border-top:0}.intro-details:before{content:"";position:absolute;top:0;left:0;width:40px;height:4px;background:#000}.intro-row{min-width:0}.intro-row dt{font-size:11px;font-weight:500;line-height:1.7;letter-spacing:.15em;opacity:.65}.intro-row dd{margin:12px 0 0;font-size:clamp(15px,1.03vw,18px);font-weight:400;line-height:1.8;letter-spacing:0}.intro-row dd span{display:block}.entry-details{display:flex;align-items:center;justify-content:space-between;gap:30px;width:118px;margin-top:26px;padding:10px 0;border:0;border-bottom:1px solid color-mix(in srgb,currentColor 45%,transparent);background:none;color:inherit;font:13px/1.5 var(--content-font);letter-spacing:.04em;cursor:pointer}.entry-details span{font-size:17px;transition:transform .15s ease}.entry-details:hover span{transform:translate(2px,-2px)}.solution-details{display:grid;place-items:center;width:44px;height:44px;margin-top:26px;border:1px solid currentColor;color:inherit;background:transparent;text-decoration:none}.solution-details:hover{background:color-mix(in srgb,currentColor 4%,transparent)}.solution-details:focus-visible{outline:2px solid currentColor;outline-offset:5px}.solution-details svg{display:block;transition:transform .15s ease}.solution-details:hover svg{transform:translate(2px,-2px)}@media(prefers-reduced-motion:reduce){.solution-details svg{transition:none}}.entry-image-status{margin:20px 0 0;font-size:13px;line-height:1.5;font-weight:600}.entry-image-status[hidden]{display:none}.entry-link{display:inline-block;margin-top:20px;font-size:15px}.entry-link span{margin-left:10px}.brand-footer{bottom:24px;align-items:flex-end;gap:30px}.preview-notice{font:10px/1.5 var(--content-font);opacity:.55}.gallery-footnote{display:flex;gap:28px;align-items:center;margin-left:auto}.scroll-cue{display:inline-flex;align-items:center;gap:12px;font:11px/1.5 var(--content-font);letter-spacing:.08em}.scroll-cue-icon{display:block;flex:0 0 auto}.static-notice{display:none}@media(min-width:769px)and (max-width:1100px){.entry-english{font-size:9px;letter-spacing:.1em;margin-bottom:14px}.entry-description{font-size:15px;margin-top:22px}.entry-intro{margin-top:24px}.intro-details{grid-template-columns:1fr;gap:18px;margin-top:24px;padding-top:19px}.intro-row dd{font-size:14px}}@media(max-width:768px){.webgl{height:55svh;-webkit-mask-image:linear-gradient(to bottom,#000 88%,transparent);mask-image:linear-gradient(to bottom,#000 88%,transparent)}.brand-header{top:max(22px,env(safe-area-inset-top))}.brand-signature{font-size:27px}.gallery-entry,.gallery-entry[data-side=right],.gallery-entry[data-side=left]{top:56svh;left:22px;right:22px;width:auto;max-width:none;transform:none}.entry-title{font-size:clamp(28px,10vw,52px);line-height:1.22}.gallery-entry--brand .entry-title{margin-left:0;font-size:clamp(24px,10.1vw,50px);line-height:1.18}.entry-english{font-size:9.5px;margin-bottom:13px;letter-spacing:.1em;line-height:1.6}.entry-description{max-width:520px;margin-top:18px;font-size:15px;line-height:1.75;letter-spacing:0}.entry-intro{max-width:520px;margin-top:22px}.intro-lead{font-size:19px;line-height:1.45}.intro-details{grid-template-columns:.8fr 1.65fr;margin-top:20px;padding-top:19px;gap:20px}.intro-row dt{font-size:10px}.intro-row dd{margin-top:10px;font-size:13.5px;line-height:1.7}.entry-details{margin-top:16px;padding-block:8px}.solution-details{margin-top:16px}.entry-image-status{font-size:11px;margin-top:12px}.brand-footer{bottom:max(14px,env(safe-area-inset-bottom));gap:8px;align-items:center}.preview-notice{max-width:195px;font-size:9px}.gallery-footnote{text-align:right}.scroll-cue{display:none}}@media(max-width:768px)and (max-height:720px){.webgl{height:40svh}.gallery-entry,.gallery-entry[data-side=right],.gallery-entry[data-side=left]{top:41svh}}.static-gallery .webgl,.static-gallery .scroll-cue{display:none}.static-gallery .brand-header,.static-gallery .brand-footer{position:relative;top:auto;bottom:auto;padding-block:24px}.static-gallery .plane-label-overlay{position:relative;color:#2e2e2e}.static-gallery .gallery-entry,.static-gallery .gallery-entry[data-side]{position:relative;inset:auto;width:auto;max-width:680px;margin:60px auto;padding:0 24px;transform:none;color:#2e2e2e}.static-gallery .static-notice{display:block;margin:24px;font:13px/1.8 var(--content-font)}.static-gallery .content{display:none}.static-gallery{--color-text: #2e2e2e;--color-link: #2e2e2e;background:#fffaf0}@font-face{font-family:GH Resume Sans;src:url(../fonts/gh-resume-noto.woff2) format("woff2");font-style:normal;font-weight:100 900;font-display:swap}@font-face{font-family:GH Resume Latin;src:url(../fonts/gh-resume-inter.woff2) format("woff2");font-style:normal;font-weight:100 900;font-display:swap}.site-dialog{--dialog-ink: #192028;--dialog-body: #626872;--dialog-muted: #a1a6af;--dialog-line: #d7dce2;width:min(1242px,calc(100vw - 72px));max-width:none;max-height:calc(100dvh - 72px);margin:auto;padding:0;overflow:hidden;border:1px solid #ffffffa3;border-radius:10px;background:#fff;color:var(--dialog-ink);box-shadow:0 30px 100px #16202526;font:400 15px/1.6 "GH Resume Sans",var(--content-font);text-transform:none;letter-spacing:0;color-scheme:light}.site-dialog::backdrop{background:#17201c66;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.site-dialog[open]{animation:dialog-enter .18s ease-out}.site-dialog--contact{width:min(650px,calc(100vw - 72px))}.dialog-bar{display:flex;align-items:center;justify-content:space-between;gap:20px;height:58px;padding:0 22px;border-bottom:1px solid #19202810;background:#fff}.dialog-bar h2,.dialog-bar p{margin:0;font:400 11px/1.5 "GH Resume Sans",var(--content-font);letter-spacing:.1em;color:var(--dialog-body)}.dialog-bar span{margin-left:12px;font:10px/1.5 GH Resume Latin,sans-serif;letter-spacing:.12em;color:#949ba1}.dialog-close{display:grid;place-items:center;flex:0 0 32px;width:32px;height:32px;padding:0;border:1px solid var(--dialog-line);border-radius:50%;background:transparent;color:var(--dialog-ink);cursor:pointer}.dialog-close:hover{background:#19202806}.dialog-scroll{max-height:calc(100dvh - 132px);overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#bac2ca transparent}.site-dialog a{color:inherit;text-decoration:none}.site-dialog a:hover{text-decoration:underline;text-underline-offset:4px}.site-dialog :focus-visible{outline:2px solid #637c88;outline-offset:4px}.dialog-scroll:focus-visible{outline-offset:-3px}.dialog-open{overflow:hidden}.no-js [data-open-dialog]{display:none}.resume-sheet{container-type:inline-size;--r: calc(100cqw / 1240);position:relative;isolation:isolate;overflow:hidden;background:#fff;color:var(--dialog-body);font-family:GH Resume Sans,sans-serif;font-synthesis:none}.resume-ambient{position:absolute;z-index:-1;left:calc(-187.5 * var(--r));top:calc(-1438.5 * var(--r));width:calc(2951.5 * var(--r));height:calc(3480.5 * var(--r));background:url(../assets/resume/ambient.svg) 0 0 / 100% 100% no-repeat;pointer-events:none}.resume-hero{position:relative;height:calc(600 * var(--r))}.resume-hero:after,.resume-section:after{content:"";position:absolute;bottom:0;left:calc(57 * var(--r));right:calc(57 * var(--r));height:1px;background:var(--dialog-line)}.resume-captions{position:absolute;top:calc(62 * var(--r));left:calc(56 * var(--r));right:calc(41 * var(--r));display:flex;justify-content:space-between;font:400 calc(12 * var(--r))/calc(19 * var(--r)) "GH Resume Latin",sans-serif;letter-spacing:calc(1 * var(--r));white-space:pre}.resume-identity{position:absolute;left:calc(56 * var(--r));top:calc(150 * var(--r))}.resume-identity h2{margin:0;font-size:calc(72 * var(--r));font-weight:700;line-height:calc(83 * var(--r));letter-spacing:calc(-1 * var(--r));color:var(--dialog-ink)}.resume-identity p{margin:calc(2 * var(--r)) 0 0;font:400 calc(21 * var(--r))/calc(30 * var(--r)) "GH Resume Latin",sans-serif;letter-spacing:calc(8 * var(--r));color:var(--dialog-muted)}.resume-role{position:absolute;left:calc(56 * var(--r));top:calc(295 * var(--r));width:calc(660 * var(--r))}.resume-role p{margin:0}.resume-role p:first-child{font-size:calc(32 * var(--r));font-weight:700;line-height:calc(43 * var(--r));color:var(--dialog-ink)}.resume-role p:last-child{font-size:calc(19 * var(--r));line-height:calc(31 * var(--r));letter-spacing:calc(3.7 * var(--r))}.resume-short-rule{position:absolute;top:calc(400 * var(--r));left:calc(56 * var(--r));width:calc(22 * var(--r));height:1px;background:var(--dialog-body)}.resume-summary{position:absolute;left:calc(56 * var(--r));top:calc(435 * var(--r));width:calc(655 * var(--r));font-size:calc(15.7 * var(--r));line-height:calc(26 * var(--r));letter-spacing:calc(.35 * var(--r))}.resume-summary p{margin:0}.resume-summary strong{font-weight:700}.resume-metadata{position:absolute;left:calc(56 * var(--r));top:calc(539 * var(--r));display:flex;gap:calc(50 * var(--r));align-items:center}.resume-metadata>a,.resume-metadata>span{display:flex;gap:calc(12 * var(--r));align-items:center;white-space:nowrap;font-size:calc(15 * var(--r));line-height:calc(24 * var(--r))}.resume-metadata>a:first-child{gap:calc(17 * var(--r))}.resume-metadata img{display:block;flex:0 0 auto}.resume-portrait{position:absolute;top:calc(91 * var(--r));left:calc(700 * var(--r));width:calc(508 * var(--r));height:calc(508 * var(--r));object-fit:cover;z-index:-1}.resume-section{position:relative;padding-inline:calc(58 * var(--r))}.resume-section-heading{margin:0;font-weight:400}.resume-section-heading strong{display:block;font:600 calc(21 * var(--r))/calc(29 * var(--r)) "GH Resume Latin",sans-serif;letter-spacing:calc(1.4 * var(--r));color:var(--dialog-ink)}.resume-section-heading>span{display:block;margin-top:calc(2 * var(--r));font-size:calc(19.5 * var(--r));line-height:calc(28 * var(--r));letter-spacing:calc(3 * var(--r))}.resume-capabilities{height:calc(367 * var(--r));padding-top:calc(48 * var(--r))}.resume-capability-grid{display:grid;grid-template-columns:322fr 289fr 280fr 250fr;width:calc(1141 * var(--r));margin-top:calc(25 * var(--r))}.resume-capability{position:relative;width:calc(250 * var(--r))}.resume-capability:not(:last-child):after{content:"";position:absolute;top:calc(-2 * var(--r));left:calc(285 * var(--r));height:calc(188 * var(--r));width:1px;background:var(--dialog-line)}.resume-capability:nth-child(2):after{left:calc(256 * var(--r))}.resume-capability:nth-child(3):after{left:calc(250 * var(--r))}.resume-number{display:block;font:300 calc(23 * var(--r))/calc(31 * var(--r)) "GH Resume Latin",sans-serif;letter-spacing:calc(.3 * var(--r));color:var(--dialog-muted)}.resume-sheet h4{margin:0;font-size:calc(20 * var(--r));font-weight:500;line-height:calc(30 * var(--r));color:var(--dialog-ink)}.resume-capability h4{margin-top:calc(6 * var(--r))}.resume-capability>p{margin:calc(10 * var(--r)) 0 0;font-size:calc(15.5 * var(--r));line-height:calc(28 * var(--r));letter-spacing:calc(.3 * var(--r))}.resume-products{height:calc(276 * var(--r));padding-top:calc(35 * var(--r))}.resume-product-grid{display:grid;grid-template-columns:422fr 398fr 310fr;width:calc(1130 * var(--r));margin-top:calc(33 * var(--r))}.resume-product{width:calc(310 * var(--r));position:relative}.resume-product:not(:last-child):after{content:"";position:absolute;left:calc(386 * var(--r));top:calc(-3 * var(--r));width:1px;height:calc(114 * var(--r));background:var(--dialog-line)}.resume-product:nth-child(2):after{left:calc(356 * var(--r))}.resume-product>p{margin:calc(13 * var(--r)) 0 0;font-size:calc(15 * var(--r));line-height:calc(24 * var(--r))}.resume-product-arrow{position:absolute;top:calc(68 * var(--r));left:calc(315 * var(--r));font:300 calc(23 * var(--r))/calc(31 * var(--r)) "GH Resume Latin",sans-serif;color:var(--dialog-muted)}.resume-product:nth-child(2) .resume-product-arrow{left:calc(292 * var(--r))}.resume-product:nth-child(3) .resume-product-arrow{left:calc(282 * var(--r))}.resume-experience{min-height:calc(396 * var(--r));padding-top:calc(48 * var(--r));padding-bottom:calc(31 * var(--r))}.resume-job-row{display:grid;grid-template-columns:calc(246 * var(--r)) calc(875 * var(--r))}.resume-job{position:relative}.resume-job h4{font-weight:700}.resume-job-role{margin:0;font-size:calc(15 * var(--r));line-height:calc(24 * var(--r))}.resume-dates{position:absolute;top:calc(4 * var(--r));right:0;margin:0;font-size:calc(15 * var(--r));line-height:calc(24 * var(--r))}.resume-job ul{margin:calc(17 * var(--r)) 0 0;padding:0;list-style:none;font-size:calc(15.5 * var(--r));line-height:calc(28 * var(--r));letter-spacing:calc(.3 * var(--r))}.resume-job li{position:relative;padding-left:calc(24 * var(--r))}.resume-job li:before{content:"—";position:absolute;left:0;color:#949ba4}.resume-experience .resume-job-row+.resume-job-row{margin-top:calc(32 * var(--r));padding-top:calc(29 * var(--r));border-top:1px solid var(--dialog-line)}.resume-education{padding-top:calc(27 * var(--r));padding-bottom:calc(19 * var(--r))}.resume-education:after{display:none}.resume-footer{display:flex;justify-content:space-between;margin-top:calc(56 * var(--r));font:400 calc(9 * var(--r))/calc(16 * var(--r)) "GH Resume Latin",sans-serif;letter-spacing:calc(3 * var(--r));color:var(--dialog-muted)}.contact-sheet{position:relative;isolation:isolate;padding:40px 40px 28px;background:linear-gradient(125deg,#fff 45%,#edf3f7)}.contact-eyebrow{margin:0 0 16px;font:400 9px/1.6 GH Resume Latin,sans-serif;letter-spacing:.18em;color:var(--dialog-body)}.contact-sheet h2{margin:0;font-size:29px;line-height:1.4;letter-spacing:-.035em;font-weight:600}.contact-intro{margin:12px 0 0;font-size:14px;color:var(--dialog-body)}.contact-content{display:grid;grid-template-columns:minmax(0,1fr) 160px;gap:30px;align-items:center;margin-top:34px;padding-top:28px;border-top:1px solid var(--dialog-line)}.contact-addresses{display:grid;gap:22px}.contact-addresses>a{display:flex;gap:15px;align-items:center;font:400 15px/1.5 GH Resume Latin,GH Resume Sans,sans-serif}.contact-addresses>a>img{flex:0 0 auto}.contact-addresses small{display:block;margin-bottom:5px;font:400 10px/1.5 GH Resume Sans,sans-serif;color:var(--dialog-body);letter-spacing:.1em}.contact-arrow{margin-left:auto;font-size:15px;color:var(--dialog-body)}.contact-wechat{margin:0}.contact-wechat>img{display:block;border:1px solid #e1e5e7;padding:7px;background:#fff}.contact-wechat figcaption{margin-top:10px;font-size:10px;text-align:center;color:var(--dialog-body)}.contact-signature{display:flex;align-items:baseline;gap:14px;margin:38px 0 0;font:400 23px/1.2 GH Wordmark Sans,sans-serif}.contact-signature span{font:400 9px/1.5 GH Resume Latin,sans-serif;letter-spacing:.16em;color:var(--dialog-body)}@keyframes dialog-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.site-dialog[open]{animation:none}}@media(max-width:760px){.site-dialog,.site-dialog--contact{width:calc(100vw - 24px);max-height:calc(100dvh - 32px);border-radius:8px}.dialog-bar{height:52px;padding-inline:16px}.dialog-scroll{max-height:calc(100dvh - 86px)}.resume-hero{height:auto;padding:26px 24px 27px}.resume-captions{position:static;font-size:7px;line-height:12px;letter-spacing:.7px}.resume-identity{position:static;margin-top:30px}.resume-identity h2{font-size:36px;line-height:46px;letter-spacing:-.5px}.resume-identity p{margin-top:3px;font-size:11px;line-height:18px;letter-spacing:3px}.resume-portrait{width:150px;height:150px;left:auto;top:57px;right:8px}.resume-role{position:static;width:auto;margin-top:77px}.resume-role p:first-child{font-size:18px;line-height:28px}.resume-role p:last-child{margin-top:8px;font-size:12px;line-height:22px;letter-spacing:1px}.resume-short-rule{position:static;width:22px;margin-top:20px}.resume-summary{position:static;width:auto;margin-top:20px;font-size:13px;line-height:24px;letter-spacing:0}.resume-metadata{position:static;margin-top:22px;display:grid;grid-template-columns:auto 1fr;gap:14px 22px}.resume-metadata>a,.resume-metadata>span{font-size:12px;line-height:20px;gap:10px}.resume-metadata>a:first-child{grid-column:1/-1;gap:10px}.resume-section{padding:28px 24px;height:auto}.resume-hero:after,.resume-section:after{left:24px;right:24px}.resume-section-heading strong{font-size:15px;line-height:24px;letter-spacing:1px}.resume-section-heading>span{margin-top:0;font-size:13px;line-height:22px;letter-spacing:2px}.resume-capability-grid,.resume-product-grid{width:auto;margin-top:25px;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 22px}.resume-capability,.resume-product{width:auto}.resume-capability:after,.resume-product:after{display:none}.resume-number{font-size:18px;line-height:26px;letter-spacing:.3px}.resume-sheet h4{font-size:15px;line-height:24px}.resume-capability h4{margin-top:5px;min-height:48px}.resume-capability>p{margin-top:9px;font-size:12px;line-height:23px;letter-spacing:.1px}.resume-product-grid{grid-template-columns:1fr;gap:25px}.resume-product>p{margin-top:8px;padding-right:25px;font-size:13px;line-height:23px}.resume-product-arrow,.resume-product:nth-child(2) .resume-product-arrow,.resume-product:nth-child(3) .resume-product-arrow{left:auto;right:0;top:49px;font-size:20px;line-height:26px}.resume-job-row{display:grid;grid-template-columns:1fr;gap:25px}.resume-heading-spacer{display:none}.resume-dates{position:static;margin-top:10px;font-size:11px;line-height:20px}.resume-job-role{font-size:12px;line-height:22px}.resume-job ul{margin-top:15px;font-size:13px;line-height:24px;letter-spacing:0}.resume-job li{padding-left:18px;margin-top:6px}.resume-experience .resume-job-row+.resume-job-row{margin-top:25px;padding-top:25px}.resume-footer{margin-top:36px;font-size:6px;line-height:12px;letter-spacing:1px}.contact-sheet{padding:28px 24px 24px}.contact-sheet h2{font-size:25px}.contact-intro{font-size:12px}.contact-content{grid-template-columns:1fr;gap:28px;margin-top:25px;padding-top:24px}.contact-addresses>a{font-size:15px}.contact-wechat{justify-self:start}.contact-signature{margin-top:28px}}
