
    @font-face{font-family:Lato;font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/lato-regular.woff2") format("woff2")}@font-face{font-family:Lato;font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/lato-bold.woff2") format("woff2")}@font-face{font-family:Lato;font-style:italic;font-weight:700;font-display:swap;src:url("../fonts/lato-bold-italic.woff2") format("woff2")}@font-face{font-family:Lato;font-style:italic;font-weight:400;font-display:swap;src:url("../fonts/lato-italic.woff2") format("woff2")}
    :root{--blue:#1772d0;--navy:#162a3a;--muted:#5f7180;--line:#e2e7eb;--paper:#fff;--bg:#fff}
    *{box-sizing:border-box}html{color-scheme:light;overflow-x:hidden}body{margin:0;overflow-x:hidden;background:var(--bg);color:#1d2d3a;font-family:Lato,Verdana,Helvetica,"PingFang SC","Microsoft YaHei",sans-serif;font-size:14px}
    a{color:var(--blue);text-decoration:none}a:hover{color:#f09228;text-decoration:none}
    .page{width:min(860px,calc(100% - 96px));margin:0 auto;padding:28px 0 72px;opacity:1;transform:none;transition:opacity .32s ease,transform .32s ease}
    .site-toolbar{display:flex;justify-content:flex-end;align-items:center;padding:0 16px 8px}.language-switch{display:inline-flex;align-items:center;gap:6px;color:#9aa7b0;font-size:12px}.language-switch button{appearance:none;padding:2px 0;border:0;border-bottom:1px solid transparent;background:none;color:#81909b;font:inherit;line-height:1.3;cursor:pointer}.language-switch button:hover,.language-switch button:focus-visible{color:var(--blue)}.language-switch button.is-active{border-bottom-color:#536b7c;color:#314e64;font-weight:700}.language-switch span{color:#ccd4d9}
    .profile-section{display:grid;grid-template-columns:minmax(0,63fr) minmax(180px,37fr);gap:28px;align-items:center;padding:2px 16px 34px;border-bottom:1px solid var(--line)}.profile-copy{padding:12px 0}.profile-copy :is(h1,h2){margin:0 0 20px;text-align:center;color:#172b3a;font-size:32px;font-weight:400;letter-spacing:-.025em}.profile-copy p{margin:0 0 12px;color:#344d60;font-size:14px;line-height:1.62}.profile-links{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:5px;margin-top:17px;font-size:14px}.profile-links span{color:#9aa7b0}.profile-cv{margin-top:17px;text-align:center;font-size:14px;line-height:1.5}.profile-cv+.profile-links{margin-top:8px}.profile-website{margin-top:6px;text-align:center;color:#344d60;font-size:14px;line-height:1.5}.profile-views{margin-top:2px;text-align:center;color:#7a8a96;font-size:12px;line-height:1.5}.profile-views[hidden]{display:none}.contact-link{appearance:none;padding:0;border:0;background:none;color:var(--blue);font:inherit;cursor:pointer}.contact-link:hover,.contact-link:focus-visible{color:#f09228}.profile-photo-placeholder{display:grid;width:min(100%,220px);aspect-ratio:1;place-items:center;justify-self:center;border:1px dashed #cbd4da;background:#f7f8f9;color:#7c8d99;text-align:center}.profile-photo-placeholder strong{display:block;font-size:14px;font-weight:700}.profile-photo-placeholder small{display:block;margin-top:3px;font-size:10px;letter-spacing:.08em;text-transform:uppercase}.works-head{padding:27px 16px 7px}.works-head h2{margin:0 0 6px;color:#1d2d3a;font-size:22px;font-weight:400}.works-head p{margin:0;color:var(--muted);font-size:14px}.work-category-nav{display:flex;align-items:center;gap:4px;width:max-content;max-width:calc(100% - 32px);margin:10px 16px 8px;overflow-x:auto;scrollbar-width:none}.work-category-nav::-webkit-scrollbar{display:none}.work-category-tab{position:relative;display:inline-flex;flex:0 0 auto;align-items:center;gap:8px;min-height:38px;padding:8px 13px;border:0;border-radius:10px;background:transparent;color:#556371;font:inherit;font-size:13px;line-height:1;cursor:pointer;transition:background-color .16s ease,color .16s ease}.work-category-tab:hover,.work-category-tab:focus-visible{background:#f5f6f7;color:#1d2d3a}.work-category-tab.is-active{background:#f1f3f5;color:#1d2d3a;font-weight:700}.work-category-tab.is-active::after{content:"";position:absolute;left:50%;bottom:-2px;width:20px;height:2px;border-radius:2px;background:#23384a;transform:translateX(-50%)}.work-tab-icon{position:relative;display:inline-block;width:15px;height:15px;flex:0 0 15px;color:currentColor}.work-tab-icon.paper{border:1.4px solid currentColor;border-radius:2px}.work-tab-icon.paper::before{content:"";position:absolute;left:3px;right:3px;top:4px;height:1px;background:currentColor;box-shadow:0 3px 0 currentColor,0 6px 0 currentColor}.work-tab-icon.competition::before{content:"";position:absolute;left:3px;top:1px;width:7px;height:7px;border:1.4px solid currentColor;border-top:0;border-radius:0 0 6px 6px}.work-tab-icon.competition::after{content:"";position:absolute;left:6.5px;top:9px;width:1.5px;height:4px;background:currentColor;box-shadow:-3px 4px 0 1px currentColor}.work-tab-icon.side::before{content:"";position:absolute;left:2px;top:2px;width:4px;height:4px;border-radius:1px;background:currentColor;box-shadow:7px 0 0 currentColor,0 7px 0 currentColor,7px 7px 0 currentColor}.print-only-copy{display:none}.contact-dialog{width:min(430px,calc(100% - 36px));max-height:88vh;padding:0;border:1px solid #d5dde2;border-radius:4px;background:#fff;box-shadow:0 18px 50px rgba(16,31,43,.24)}.contact-dialog::backdrop{background:rgba(13,28,40,.4)}.contact-dialog-card{padding:18px}.contact-dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:13px}.contact-dialog-head h2{margin:0;color:#213747;font-size:20px;font-weight:700}.contact-dialog-head p{margin:4px 0 0;color:#70818d;font-size:12px}.contact-dialog-close{width:32px;height:32px;padding:0;border:1px solid #d5dde2;border-radius:50%;background:#fff;color:#344d60;font-size:20px;line-height:28px;cursor:pointer}.contact-qr{margin:0;text-align:center}.contact-qr img{display:block;width:100%;max-height:64vh;object-fit:contain;background:#fff}.contact-qr figcaption{margin-top:10px;color:#425b6e;font-size:13px;font-weight:700}
    .profile-photo{display:block;width:min(100%,220px);aspect-ratio:3/4;justify-self:center;border:1px solid #d9e0e5;background:#f7f8f9;object-fit:cover}
    .project-card{position:relative;display:grid;grid-template-columns:205px minmax(0,1fr);column-gap:24px;row-gap:10px;align-items:center;padding:18px 16px;background:var(--paper);border:0;border-top:1px solid var(--line);border-radius:0;box-shadow:none}
    .project-card[hidden]{display:none!important}
    .project-topline{grid-column:1/-1;display:flex;align-items:flex-start;justify-content:space-between;gap:10px 18px;flex-wrap:wrap}
    .cover-column{display:grid;gap:9px;align-self:center}.cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:6px;overflow:hidden;border:1px solid var(--line);border-radius:2px;background:#fff;cursor:zoom-in;box-shadow:none}
    .cover-trigger video{width:100%;height:100%;display:block;object-fit:contain;background:#fff;pointer-events:none}
    .project-logos{display:flex;flex:0 1 auto;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;margin-left:auto}.project-logos img{display:block;object-fit:contain}.project-logos .hust-mark{width:118px;height:32px}.project-logos .intel-mark{width:40px;height:38px}.project-logos .nuedc-mark{width:42px;height:38px}.project-logos .embedded-contest-mark{width:58px;height:42px}.project-logos .renesas-mark{width:84px;height:48px}.embedded-card .project-logos{gap:6px}
    .logo-tip{position:relative;z-index:8;display:inline-flex;align-items:center;justify-content:center;outline:none}.logo-tip::after{content:attr(data-label);position:absolute;left:50%;top:calc(100% + 6px);z-index:30;max-width:260px;padding:5px 8px;border:1px solid #cfd5da;background:#fff;color:#303b43;box-shadow:0 3px 9px rgba(22,42,58,.16);font-size:12px;font-weight:400;line-height:1.3;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,0)}.logo-tip:hover::after,.logo-tip:focus::after{opacity:1;visibility:visible}.spie-wordmark{display:inline-block;color:#ed1c24;font-family:Arial,sans-serif;font-size:18px;font-weight:900;letter-spacing:-.04em;line-height:1}.renesas-wordmark{display:inline-block;color:#542881;font-family:Arial,sans-serif;font-size:14px;font-weight:800;letter-spacing:.02em;line-height:1}
    .visual-tip{position:relative;z-index:7;outline:none}.visual-tip::after{content:attr(data-label);position:absolute;left:calc(100% + 8px);top:50%;z-index:40;padding:5px 8px;border:1px solid #cfd5da;background:#fff;color:#303b43;box-shadow:0 3px 9px rgba(22,42,58,.16);font-size:12px;font-weight:400;line-height:1.3;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-50%)}.visual-tip:hover,.visual-tip:focus,.visual-tip:focus-within{z-index:50}.visual-tip:hover::after,.visual-tip:focus::after,.visual-tip:focus-within::after{opacity:1;visibility:visible}
    .project-actions{display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap}.hardware-link{position:relative;display:block;width:100%;height:100%}.hardware-zoom{position:absolute;right:0;top:0;width:17px;height:17px;border:1px solid #ccd7df;border-radius:50%;background:#fff;color:#526b7d;font-size:10px;line-height:15px;text-align:center}
    .project-copy{align-self:start;margin-top:0}.project-copy.has-signature{position:relative;min-height:102px;padding-right:140px}.project-kicker,.vase-kicker{display:block;flex:1 1 360px;max-width:none;padding:0;border:0;border-radius:0;background:none;font-size:13px;font-weight:700;letter-spacing:.015em;line-height:1.35}.project-kicker{color:#60798d}.project-copy h2{margin:0;color:var(--blue);font-size:16px;font-weight:700;line-height:1.22;letter-spacing:0}.project-copy h2 .title-link{color:inherit;transition:color .16s ease}.project-copy h2 .title-link:hover,.project-copy h2 .title-link:focus-visible{color:#f09228}.project-meta,.vase-meta{margin:5px 0 8px;color:#314e64}.project-meta p,.vase-meta p{margin:0;font-weight:700;line-height:1.4}.project-meta p:first-child,.vase-meta p:first-child{font-size:14px}.project-meta p:last-child,.vase-meta p:last-child{font-size:13px}.project-bottom{max-width:720px}.project-copy .summary{max-width:700px;margin:0 0 9px;color:#364f63;font-size:14px;line-height:1.45}
    .signature-visuals{position:absolute;right:0;top:0;width:124px;display:grid;align-items:center;justify-items:stretch;gap:4px}.signature-visuals figure{min-width:0;margin:0}.signature-visuals img{display:block;width:100%;height:100%;object-fit:contain}.signature-hardware{grid-template-columns:1fr;grid-template-rows:auto auto;align-items:start;top:0}.signature-hardware figure{height:auto}.signature-hardware img{width:100%;height:auto}.intel-copy.has-signature{min-height:166px}.signature-stack{grid-template-rows:auto auto;align-items:start}.signature-stack figure{height:auto;overflow:visible}.signature-stack .photo img,.signature-stack .interface img{width:100%;height:auto;padding:0;object-fit:contain}.nuedc-copy.has-signature{min-height:172px}.signature-vase{right:18px;width:66px}.signature-vase figure{height:94px}.signature-photo{top:5px}.signature-photo figure{height:84px;overflow:visible}.signature-photo img{object-fit:contain}
    .links{display:flex;flex-wrap:wrap;gap:15px;font-size:14px;font-weight:700}
    .side-projects-head{margin-top:10px;border-top:1px solid var(--line)}.side-project-card{margin-top:0}.side-project-cover{appearance:none;display:block;width:100%;aspect-ratio:1;padding:6px;overflow:hidden;border:1px solid var(--line);border-radius:2px;background:#fff;cursor:zoom-in;box-shadow:none}.side-project-cover img{display:block;width:100%;height:100%;object-fit:contain;background:#fff;transition:transform .2s ease}.side-project-cover:hover img,.side-project-cover:focus-visible img{transform:scale(1.018)}.side-project-copy.has-signature{min-height:112px;padding-right:104px}.side-project-copy h2{color:#5845a5;font-size:20px}.signature-app{right:18px;width:70px}.signature-app figure{height:70px}.signature-app img{border-radius:16px}.side-project-feature-overlay{width:min(980px,78vw);background:rgba(249,251,255,.99)}.side-project-demo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.side-project-demo{display:grid;grid-template-rows:minmax(0,1fr) auto;min-width:0;margin:0;overflow:hidden;border:1px solid #d8e1e8;background:#fff}.side-project-demo img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;background:#071625}.side-project-demo figcaption{padding:9px 10px;border-top:1px solid #e6ebef;color:#405c72;font-size:12px;font-weight:700;line-height:1.4}.codex-tidy-card .side-project-copy h2{color:#1975c8}.codex-tidy-demo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.codex-tidy-demo:first-child{grid-column:1/-1}.codex-tidy-demo img{object-fit:contain;background:#f4f8fc}.alttab-demo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.alttab-demo:first-child{grid-column:1/-1}.alttab-demo img{object-fit:contain;background:#05070a}.alttab-card .side-project-copy h2{color:#245f9d}.mindmap-card .side-project-copy h2{color:#069fc0}.mindmap-demo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mindmap-demo:first-child{grid-column:1/-1}.mindmap-demo img{object-fit:contain;background:#f7fbfc}
    .vase-card{margin-top:10px;padding:24px 16px}.vase-logos{display:flex;flex:0 1 auto;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap;margin-left:auto}.vase-logos img{display:block;width:auto;max-width:56px;height:25px;object-fit:contain}.vase-logos .wide{max-width:72px}.vase-logos .seal{width:25px}.vase-cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:8px;overflow:hidden;border:1px solid var(--line);border-radius:3px;background:#fff;cursor:zoom-in;box-shadow:none}.vase-slide{position:absolute;inset:8px;display:grid;grid-template-rows:repeat(2,minmax(0,1fr));gap:6px;opacity:0;animation:vase-cycle 4.5s ease-in-out infinite both;will-change:opacity}.vase-slide img{display:block;width:100%;max-width:100%;height:100%;min-width:0;min-height:0;object-fit:contain;border:0;border-radius:0;background:#fff}.vase-slide:nth-child(1){animation-delay:-.18s}.vase-slide:nth-child(2){animation-delay:1.32s}.vase-slide:nth-child(3){animation-delay:2.82s}.vase-copy{align-self:start;margin-top:0;padding:0 0 3px}.vase-copy.has-signature{padding-right:164px}.vase-kicker{color:#58747a}.vase-copy h2{margin:0 0 1px;color:#177276;font-size:24px;font-weight:700;line-height:1.15;letter-spacing:0}.vase-subtitle{margin:0;color:#667987;font-size:14px;font-weight:400}.vase-meta{color:#314e64}.vase-summary{max-width:720px;margin:0 0 13px;color:#364f63;font-size:14px;line-height:1.55}
    .nuedc-card{margin-top:10px}.nuedc-cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:8px;overflow:hidden;border:1px solid var(--line);border-radius:3px;background:#fff;cursor:zoom-in;box-shadow:none}.nuedc-cover-grid{display:grid;width:100%;height:100%;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:55% 45%;gap:5px}.nuedc-cover-grid figure{position:relative;min-width:0;min-height:0;margin:0;overflow:hidden;background:#f4f6f7}.nuedc-cover-grid figure:first-child{grid-column:1/-1}.nuedc-cover-grid img{display:block;width:100%;height:100%;object-fit:cover}.nuedc-cover-grid .diagram img{padding:6px;object-fit:contain;background:#fff}.nuedc-copy h2{color:#195e9b}.nuedc-note{margin:0 0 13px;padding-left:10px;border-left:2px solid #dca72d;color:#536777;font-size:13px;line-height:1.55}.nuedc-feature-overlay{width:min(1000px,78vw);background:rgba(252,252,251,.99)}.nuedc-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.nuedc-figure{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0;margin:0;overflow:hidden;border:1px solid #dce3e7;border-radius:3px;background:#fff}.nuedc-figure.wide{grid-column:span 2}.nuedc-figure img{display:block;width:100%;height:152px;padding:7px;object-fit:contain;background:#fff}.nuedc-figure.photo img{padding:0;object-fit:cover}.nuedc-figure figcaption{padding:7px 9px 8px;border-top:1px solid #e8ecef;color:#31546e;font-size:11px;font-weight:700;line-height:1.35}.nuedc-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-top:10px;background:#e1e6e9;border:1px solid #e1e6e9}.nuedc-metrics span{padding:8px 9px;background:#fff;color:#5a6d7c;font-size:10px;line-height:1.3}.nuedc-metrics strong{display:block;margin-bottom:2px;color:#174d75;font-size:14px}
    @keyframes vase-cycle{0%{opacity:0}4%,29.33%{opacity:1}33.33%,100%{opacity:0}}
    .vase-slide,.nuedc-cover-slide{animation:cover-cycle 7.5s ease-in-out infinite both;will-change:opacity}.vase-slide:nth-child(1),.nuedc-cover-slide:nth-child(1){animation-delay:-.1s}.vase-slide:nth-child(2),.nuedc-cover-slide:nth-child(2){animation-delay:2.4s}.vase-slide:nth-child(3),.nuedc-cover-slide:nth-child(3){animation-delay:4.9s}.nuedc-cover-slide{position:absolute;inset:8px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:55% 45%;gap:5px;opacity:0}.nuedc-cover-slide figure{position:relative;min-width:0;min-height:0;margin:0;overflow:hidden;background:#fff}.nuedc-cover-slide figure:first-child{grid-column:1/-1}.nuedc-cover-slide img{display:block;width:100%;height:100%;padding:3px;object-fit:contain;background:#fff}.nuedc-cover-slide .diagram img,.nuedc-cover-slide .portrait img{padding:5px;object-fit:contain;background:#fff}@keyframes cover-cycle{0%{opacity:0}3%,30.33%{opacity:1}33.33%,100%{opacity:0}}
    .eecs-card{margin-top:10px}.eecs-cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:8px;overflow:hidden;border:1px solid var(--line);border-radius:3px;background:#fff;cursor:zoom-in;box-shadow:none}.eecs-slide{position:absolute;inset:8px;display:grid;gap:6px;opacity:0;animation:cover-cycle 7.5s ease-in-out infinite both;will-change:opacity}.eecs-slide:nth-child(1){animation-delay:-.1s}.eecs-slide:nth-child(2){animation-delay:2.4s}.eecs-slide:nth-child(3){animation-delay:4.9s}.eecs-slide.double{grid-template-rows:repeat(2,minmax(0,1fr))}.eecs-slide img{display:block;width:100%;height:100%;min-width:0;min-height:0;padding:4px;object-fit:contain;background:#fff}.eecs-copy h2{color:#9e312e;font-size:21px}.eecs-subtitle{margin:4px 0 0;color:#667987;font-size:13px;line-height:1.4}.eecs-feature-overlay{width:min(940px,76vw);background:rgba(252,251,250,.99)}.eecs-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.eecs-figure{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0;margin:0;overflow:hidden;border:1px solid #e1dfdc;background:#fff}.eecs-figure img{display:block;width:100%;height:225px;padding:8px;object-fit:contain;background:#fff}.eecs-figure.wide{grid-column:1/-1}.eecs-figure.wide img{height:auto;aspect-ratio:16/9;max-height:none;object-fit:contain}.eecs-figure figcaption{padding:8px 9px 9px;border-top:1px solid #ece9e6;color:#654745;font-size:12px;font-weight:700;line-height:1.35}.eecs-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-top:10px;background:#e4e0de;border:1px solid #e4e0de}.eecs-metrics span{padding:8px 9px;background:#fff;color:#6d625d;font-size:10px;line-height:1.3}.eecs-metrics strong{display:block;margin-bottom:2px;color:#9e312e;font-size:14px}
    .embedded-card{margin-top:10px}.embedded-cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:8px;overflow:hidden;border:1px solid var(--line);border-radius:3px;background:#fff;cursor:zoom-in;box-shadow:none}.embedded-cover-slide{position:absolute;inset:8px;display:grid;gap:5px;opacity:0;animation:cover-cycle 7.5s ease-in-out infinite both;will-change:opacity}.embedded-cover-slide:nth-child(1){animation-delay:-.1s}.embedded-cover-slide:nth-child(2){animation-delay:2.4s}.embedded-cover-slide:nth-child(3){animation-delay:4.9s}.embedded-cover-slide.single{grid-template-columns:1fr}.embedded-cover-slide.pair{grid-template-rows:repeat(2,minmax(0,1fr))}.embedded-cover-slide.data{grid-template-columns:42% 58%;grid-template-rows:repeat(2,minmax(0,1fr))}.embedded-cover-slide img{display:block;width:100%;height:100%;min-width:0;min-height:0;object-fit:contain;background:#fff}.embedded-cover-slide.single img,.embedded-cover-slide.pair img{object-fit:cover}.embedded-cover-slide.data img:first-child{grid-row:1/-1}.embedded-copy h2{color:#613b88;font-size:21px}.embedded-feature-overlay{width:min(1000px,78vw);background:rgba(252,251,253,.99)}.embedded-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.embedded-figure{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0;margin:0;overflow:hidden;border:1px solid #e2dce8;background:#fff}.embedded-figure.wide{grid-column:span 2}.embedded-figure img{display:block;width:100%;height:160px;padding:7px;object-fit:contain;background:#fff}.embedded-figure.photo img{padding:0;object-fit:cover}.embedded-figure.finals-showcase img{height:auto;aspect-ratio:1600/1026;object-fit:contain}.embedded-figure.portrait img{object-fit:contain;background:#111}.embedded-figure figcaption{padding:8px 9px 9px;border-top:1px solid #eee8f1;color:#553c69;font-size:11px;font-weight:700;line-height:1.35}.embedded-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-top:10px;background:#e6e0ea;border:1px solid #e6e0ea}.embedded-metrics span{padding:8px 9px;background:#fff;color:#696070;font-size:10px;line-height:1.3}.embedded-metrics strong{display:block;margin-bottom:2px;color:#613b88;font-size:14px}
    html:not(.carousels-running) .vase-slide,html:not(.carousels-running) .nuedc-cover-slide,html:not(.carousels-running) .eecs-slide,html:not(.carousels-running) .embedded-cover-slide{animation:none;opacity:0}html:not(.carousels-running) .vase-slide:first-child,html:not(.carousels-running) .nuedc-cover-slide:first-child,html:not(.carousels-running) .eecs-slide:first-child,html:not(.carousels-running) .embedded-cover-slide:first-child{opacity:1}html.carousels-running .vase-slide,html.carousels-running .nuedc-cover-slide,html.carousels-running .eecs-slide,html.carousels-running .embedded-cover-slide{animation-duration:6s;animation-delay:0s;animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both}html.carousels-running .vase-slide:nth-child(1),html.carousels-running .nuedc-cover-slide:nth-child(1),html.carousels-running .eecs-slide:nth-child(1),html.carousels-running .embedded-cover-slide:nth-child(1){animation-name:cover-first}html.carousels-running .vase-slide:nth-child(2),html.carousels-running .nuedc-cover-slide:nth-child(2),html.carousels-running .eecs-slide:nth-child(2),html.carousels-running .embedded-cover-slide:nth-child(2){animation-name:cover-second}html.carousels-running .vase-slide:nth-child(3),html.carousels-running .nuedc-cover-slide:nth-child(3),html.carousels-running .eecs-slide:nth-child(3),html.carousels-running .embedded-cover-slide:nth-child(3){animation-name:cover-third}@keyframes cover-first{0%,48%,100%{opacity:1}51%,97%{opacity:0}}@keyframes cover-second{0%,48%,76%,100%{opacity:0}51%,73%{opacity:1}}@keyframes cover-third{0%,73%,100%{opacity:0}76%,97%{opacity:1}}
    .overlay-backdrop{position:fixed;inset:0;z-index:90;background:rgba(4,18,31,.34);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s}.overlay-active{overflow:hidden}.overlay-active .overlay-backdrop{opacity:1;visibility:visible;pointer-events:auto;cursor:zoom-out}.feature-overlay{position:fixed;right:3.5vw;top:50%;z-index:100;width:min(920px,74vw);max-height:86vh;overflow:auto;padding:15px;border:1px solid #d8e1e8;border-radius:8px;background:rgba(249,251,253,.98);backdrop-filter:blur(14px);box-shadow:0 18px 50px rgba(0,0,0,.24);opacity:0;visibility:hidden;pointer-events:none;transform:translate(-280px,-50%) scale(.34);transform-origin:left center;transition:opacity .22s ease,transform .52s cubic-bezier(.16,1,.3,1),visibility .52s;will-change:transform,opacity}
    .project-card.is-open .feature-overlay{opacity:1;visibility:visible;pointer-events:auto;transform:translate(0,-50%) scale(1)}
    .overlay-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:6px 5px 15px}.overlay-head h3{margin:0;color:var(--navy);font-size:25px;line-height:1.15}.overlay-head h3 span{display:block;margin-top:4px;color:#7890a4;font-size:12px;letter-spacing:.04em}.close{width:38px;height:38px;border:1px solid #c9dcea;border-radius:50%;background:#fff;color:#24455f;font-size:23px;cursor:pointer}
    .feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.feature{position:relative;overflow:hidden;aspect-ratio:16/10;border-radius:3px;background:#071625;box-shadow:none}.feature video{width:100%;height:100%;display:block;object-fit:cover}.feature.flight video{object-fit:contain}.feature b{position:absolute;left:8px;bottom:8px;padding:5px 7px;border-radius:2px;background:rgba(4,18,31,.76);color:white;font-size:12px}
    .overlay-foot{display:flex;flex-wrap:wrap;gap:6px;padding:12px 2px 0}.overlay-foot span{padding:5px 7px;border:1px solid #d5e0e8;border-radius:2px;background:#fff;color:#315a79;font-size:11px;font-weight:700}.vase-feature-overlay{width:min(980px,76vw);background:rgba(250,252,252,.98)}.research-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.research-figure{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0;margin:0;overflow:hidden;border:1px solid #d9e2e5;border-radius:3px;background:#fff;box-shadow:none}.research-figure img{display:block;width:100%;height:170px;padding:7px;object-fit:contain;background:#fff}.research-figure figcaption{padding:8px 9px 9px;border-top:1px solid #e7eeee;color:#315a60;font-size:12px;font-weight:700;line-height:1.35}
    .vase-card,.nuedc-card,.eecs-card,.embedded-card{margin-top:0}.vase-card{padding:18px 16px}.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger{padding:6px;border-radius:2px}.vase-copy{padding-bottom:0}.vase-copy.has-signature{padding-right:140px}.vase-copy h2,.eecs-copy h2,.embedded-copy h2{font-size:16px;line-height:1.22}.vase-summary{margin-bottom:9px;font-size:14px;line-height:1.45}.eecs-subtitle{margin-top:2px;line-height:1.35}.embedded-card{border-bottom:1px solid var(--line)}
    .project-copy h2,.vase-copy h2,.eecs-copy h2,.embedded-copy h2{font-size:14px}
    :focus-visible{outline:3px solid rgba(8,120,213,.48);outline-offset:3px}
    @media(max-width:1050px){.feature-overlay{right:2vw;width:min(860px,82vw)}}
    @media(max-width:760px){.page{width:min(100% - 24px,1180px);padding-top:30px}.profile-section{grid-template-columns:1fr;padding-inline:18px}.profile-photo-placeholder{width:200px}.project-card{grid-template-columns:1fr;column-gap:0;row-gap:18px;padding:18px}.project-topline{grid-row:1}.project-logos,.vase-logos{width:100%;justify-content:flex-start;margin-left:0}.cover-column{grid-row:2;max-width:360px}.project-copy{grid-row:3;margin-top:0}.project-copy.has-signature{padding-right:0}.signature-visuals{position:static;margin:0 0 14px}.project-kicker,.vase-kicker{flex-basis:100%;max-width:100%}.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.side-project-cover{grid-row:2;max-width:360px}.vase-copy,.nuedc-copy,.eecs-copy,.embedded-copy,.side-project-copy{grid-row:3;margin-top:0;padding-top:0}.project-actions{align-items:flex-start}.feature-overlay{right:auto;left:50%;width:92vw;padding:11px;border-radius:8px;transform:translate(-50%,-50%) scale(.86);transform-origin:center}.project-card.is-open .feature-overlay{transform:translate(-50%,-50%) scale(1)}.feature-grid,.research-grid,.eecs-grid{grid-template-columns:repeat(2,1fr)}.nuedc-grid,.embedded-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.side-project-demo-grid{grid-template-columns:1fr}.feature{aspect-ratio:4/3}.research-figure img,.nuedc-figure img,.eecs-figure img,.embedded-figure img{height:145px}.overlay-head h3{font-size:20px}}
    @media(max-width:460px){.feature-grid,.research-grid,.nuedc-grid,.eecs-grid,.embedded-grid{grid-template-columns:1fr}.nuedc-figure.wide,.embedded-figure.wide{grid-column:auto}.nuedc-metrics,.eecs-metrics,.embedded-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.feature{aspect-ratio:16/9}.research-figure img,.nuedc-figure img,.eecs-figure img,.embedded-figure img{height:auto;max-height:220px}.logo-tip::after{left:0;transform:translate(0,-2px)}.logo-tip:hover::after,.logo-tip:focus::after{transform:translate(0,0)}}
    @media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.page,.cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.feature-overlay{transition:none}.vase-slide,.nuedc-cover-slide,.eecs-slide,.embedded-cover-slide{animation:none;opacity:0}.vase-slide:first-child,.nuedc-cover-slide:first-child,.eecs-slide:first-child,.embedded-cover-slide:first-child{opacity:1}}
    @page{size:A4 landscape;margin:10mm}
    @media print{
      *{animation:none!important;transition:none!important}
      html,body{overflow:visible!important;background:#fff!important}
      .portfolio-loader,.site-toolbar,.feature-overlay,.overlay-backdrop,.contact-dialog,.work-category-nav{display:none!important}
      .screen-only-copy{display:none!important}.print-only-copy{display:inline!important}
      .page{width:100%;margin:0;padding:0;opacity:1!important;transform:none!important}
      .profile-section,.project-card{break-inside:avoid-page;page-break-inside:avoid}.project-card[hidden]{display:grid!important}
      .works-head{break-before:page;page-break-before:always;break-after:avoid-page;page-break-after:avoid}
      .vase-slide,.nuedc-cover-slide,.eecs-slide,.embedded-cover-slide{animation:none!important;opacity:0!important}
      .vase-slide:first-child,.nuedc-cover-slide:first-child,.eecs-slide:first-child,.embedded-cover-slide:first-child{opacity:1!important}
      .cover-trigger{background:#fff url("../portfolio-cover/portfolio-cover-poster.jpg") center/contain no-repeat!important}
      .cover-trigger video{visibility:hidden!important}
      a{color:var(--blue)!important;text-decoration:none!important}
    }
    .kicker-lines{display:grid;gap:2px}.kicker-lines span{display:block}
    .lowcom-card{margin-top:0}.lowcom-card .project-topline{align-items:center}.lowcom-card .project-logos{gap:7px}.lowcom-card .project-logos .hust-mark{width:104px;height:30px}.lowcom-card .project-logos .innovation-mark{width:34px;height:30px}.lowcom-card .project-logos .mcsp-mark{width:96px;height:28px}.lowcom-cover-trigger{position:relative;display:block;width:100%;aspect-ratio:1;padding:6px;overflow:hidden;border:1px solid var(--line);border-radius:2px;background:transparent;cursor:zoom-in;box-shadow:none}.lowcom-cover-trigger img{display:block;width:100%;height:100%;object-fit:contain;background:transparent}.lowcom-copy h2{color:#2a5c99}.lowcom-copy.has-signature{min-height:138px;padding-right:160px}.signature-lowcom{right:0;top:0;width:145px}.signature-lowcom figure{height:82px;overflow:hidden;background:transparent}.signature-lowcom img{object-fit:contain;background:transparent}.lowcom-feature-overlay{width:min(1000px,78vw);background:rgba(252,253,254,.99)}.lowcom-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}.lowcom-figure{display:grid;grid-template-rows:minmax(0,1fr) auto;min-width:0;margin:0;overflow:hidden;border:1px solid #dce4e9;background:#fff}.lowcom-figure img{display:block;width:100%;height:auto;aspect-ratio:auto;object-fit:contain;background:#fff}.lowcom-figure figcaption{padding:7px 9px 8px;border-top:1px solid #e5ebef;color:#315a79;font-size:11px;font-weight:700;line-height:1.35}
    @media(max-width:760px){.lowcom-cover-trigger{grid-row:2;max-width:360px}.lowcom-copy{grid-row:3}.lowcom-card .project-logos{width:100%;justify-content:flex-start}.lowcom-feature-overlay{width:92vw}}
    @media(max-width:460px){.lowcom-grid{grid-template-columns:1fr}}
    @media(min-width:761px){
      .project-card{row-gap:4px;padding-top:14px;padding-bottom:14px}
      .vase-card{padding-top:14px;padding-bottom:14px}
      .project-topline{align-items:center}
      .project-logos,.vase-logos{gap:6px;flex-wrap:nowrap}
      .project-card .project-logos .logo-tip,.project-card .vase-logos .logo-tip{height:20px}
      .project-card .project-logos .logo-tip img,.project-card .vase-logos img{width:auto;height:20px;max-width:90px}
      .spie-wordmark{font-size:15px}
      .renesas-wordmark{font-size:12px}
      .cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover{height:164px;aspect-ratio:auto}
      .lowcom-cover-trigger{height:122px;align-self:start}
      .project-kicker,.vase-kicker{font-size:11px;line-height:1.3}
      .project-copy h2,.vase-copy h2,.eecs-copy h2,.embedded-copy h2{font-size:12px;line-height:1.2}
      .vase-subtitle{font-size:11px;line-height:1.3}
      .project-meta,.vase-meta{margin:4px 0 6px}
      .project-meta p,.vase-meta p{font-size:11px;line-height:1.3}
      .project-meta p:first-child,.vase-meta p:first-child{font-size:12px}
      .project-meta p:last-child,.vase-meta p:last-child{font-size:11px}
      .project-copy .summary,.vase-summary{margin-bottom:7px;font-size:12px;line-height:1.38}
      .links{gap:12px;font-size:12px}
      .eecs-subtitle{font-size:11px;line-height:1.3}
      .nuedc-note{margin-bottom:8px;font-size:11px;line-height:1.4}
      .signature-vase figure{height:75px}
      .signature-photo figure{height:67px}
      .signature-lowcom figure{height:82px}
      .intel-copy.has-signature{min-height:133px}
      .nuedc-copy.has-signature{min-height:138px}
      .lowcom-copy.has-signature{min-height:110px}
    }
    @media print{
      .profile-section{grid-template-columns:minmax(0,63fr) minmax(180px,37fr)!important;gap:28px!important;padding:2px 16px 34px!important}
      .project-card{grid-template-columns:205px minmax(0,1fr)!important;column-gap:24px!important;row-gap:4px!important;align-items:center!important;padding:14px 16px!important}
      .project-topline{grid-column:1/-1!important;grid-row:1!important;align-items:center!important}
      .project-logos,.vase-logos{width:auto!important;justify-content:flex-end!important;margin-left:auto!important;flex-wrap:nowrap!important}
      .cover-column,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover{grid-column:1!important;grid-row:2!important;width:100%!important;max-width:none!important}
      .cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover{height:164px!important;aspect-ratio:auto!important}
      .lowcom-cover-trigger{height:122px!important;align-self:start!important}
      .project-copy,.vase-copy,.nuedc-copy,.eecs-copy,.embedded-copy,.lowcom-copy,.side-project-copy{grid-column:2!important;grid-row:2!important;margin-top:0!important;padding-top:0!important}
      .project-copy.has-signature{padding-right:140px!important}
      .lowcom-copy.has-signature{padding-right:160px!important}
      .signature-visuals{position:absolute!important;margin:0!important}
      .project-kicker,.vase-kicker{flex-basis:auto!important;max-width:none!important}
    }
    .profile-website{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:6px 12px}.profile-website a{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.profile-website svg{flex:none}.profile-website a:focus-visible{outline:2px solid var(--blue);outline-offset:4px;border-radius:2px}

    .profile-icon-links{display:grid;grid-template-columns:repeat(9,32px);gap:5px;justify-content:center}
    .profile-contact-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:4px;border:0;border-radius:5px;background:transparent;color:#111;cursor:pointer;text-decoration:none}
    .profile-contact-icon .cv-mark{color:currentColor;font:900 20px/1 Georgia,"Times New Roman",serif;letter-spacing:-1px}
    .qq-symbol{display:block;width:24px;height:24px;overflow:hidden}
    .qq-symbol .profile-qq-logo{display:block;width:37px;height:37px;max-width:none;transform:translate(-6.5px,-6.5px)}
    .profile-contact-icon svg{display:block;width:23px;height:23px;fill:currentColor}
    .profile-contact-icon{transition:color .16s ease,background-color .16s ease,box-shadow .16s ease}
    .profile-contact-icon:hover,.profile-contact-icon:focus-visible{color:#126fc6;background:#e8f3ff;box-shadow:0 0 0 2px rgba(23,114,208,.18),0 3px 10px rgba(23,114,208,.25);text-decoration:none}
    .profile-contact-icon:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
    .profile-contact-icon *{pointer-events:none;cursor:inherit}
    :is(.cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover){position:relative;cursor:zoom-in;touch-action:manipulation}
    :is(.cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover) *{pointer-events:none;cursor:inherit}
    .cover-zoom-hint{position:absolute;right:7px;top:7px;z-index:5;display:grid;place-items:center;width:27px;height:27px;border:1px solid #cbd8e1;border-radius:50%;background:rgba(255,255,255,.94);color:#31546d;box-shadow:0 1px 5px rgba(22,42,58,.16)}
    .cover-zoom-hint svg{display:block;width:68%;height:68%;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
    .vase-slide,.eecs-slide{inset:auto;top:10px;left:10px;width:calc(100% - 20px);height:calc(100% - 20px);display:flex;flex-direction:column;gap:6px;min-width:0;min-height:0}
    .cover-image-panel{position:relative;display:block;flex:1 1 0;min-width:0;min-height:0;overflow:hidden}
    .vase-slide .cover-image-panel img,.eecs-slide .cover-image-panel img{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center}
    .cover-zoom-hint{transition:color .16s ease,border-color .16s ease,box-shadow .16s ease}
    :is(.cover-trigger,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.lowcom-cover-trigger,.side-project-cover):is(:hover,:focus-visible) .cover-zoom-hint{color:#1772d0;border-color:#1772d0;background:#fff;box-shadow:0 0 0 3px rgba(23,114,208,.14),0 2px 8px rgba(23,114,208,.2)}
    body :is(a,button,.overlay-backdrop),body :is(a,button) *{cursor:default}
    .contact-dialog-close,.close{display:grid;place-items:center;flex:0 0 auto;width:48px;height:48px;padding:0;font-size:28px;line-height:1;touch-action:manipulation}
    @media(max-width:760px),(pointer:coarse){
      .contact-dialog-close,.close{position:relative;border:0;background:transparent;font-size:0;outline:none;box-shadow:none}
      :is(.contact-dialog-close,.close)::before{content:"×";position:absolute;left:50%;top:50%;display:grid;place-items:center;width:36px;height:36px;border:0;background:transparent;font-size:22px;line-height:1;transform:translate(-50%,-50%) scale(.5);pointer-events:none}
    }
    html.portrait-phone :is(.contact-dialog-close,.close){width:calc(48px / var(--portrait-ui-scale));height:calc(48px / var(--portrait-ui-scale));position:relative;border:0;background:transparent;font-size:0;outline:none;box-shadow:none}
    html.portrait-phone :is(.contact-dialog-close,.close)::before{content:"×";position:absolute;left:50%;top:50%;display:grid;place-items:center;width:calc(36px / var(--portrait-ui-scale));height:calc(36px / var(--portrait-ui-scale));border:0;background:transparent;font-size:calc(22px / var(--portrait-ui-scale));line-height:1;transform:translate(-50%,-50%) scale(.5);pointer-events:none}
    html.portrait-phone .cover-zoom-hint{width:calc(18px / var(--portrait-ui-scale));height:calc(18px / var(--portrait-ui-scale))}
    .profile-contact-icon::after{content:attr(data-label);position:absolute;left:50%;top:calc(100% + 6px);z-index:45;width:max-content;max-width:calc(100vw - 32px);padding:5px 8px;border:1px solid #cfd5da;border-radius:2px;background:#fff;color:#303b43;box-shadow:0 3px 9px rgba(22,42,58,.16);font:400 12px/1.4 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transform:translateX(-50%)}
    .profile-contact-icon:hover::after,.profile-contact-icon:focus-visible::after{opacity:1;visibility:visible}
    .profile-contact-icon:first-child::after{left:0;transform:none}
    .profile-links .profile-origin-badge{position:absolute;right:-1px;bottom:0;padding:0 2px;border:1px solid #dce3e8;border-radius:2px;background:#fff;color:currentColor;font:700 7px/10px system-ui}
    @media(max-width:760px){.profile-icon-links{grid-template-columns:repeat(3,44px);gap:5px 12px}.profile-contact-icon{width:44px;height:44px}.profile-contact-icon:nth-child(3n+1)::after{left:0;right:auto;transform:none}.profile-contact-icon:nth-child(3n)::after{left:auto;right:0;transform:none}}
    :root{--contact-ui-scale:1}
    html.portrait-phone{--contact-ui-scale:var(--portrait-ui-scale)}
    html.contact-modal-open,html.contact-modal-open body{overflow:hidden}
    .contact-dialog{overflow:auto;overscroll-behavior:contain}
    .contact-link-preview[hidden],.contact-qr[hidden],.contact-preview-avatar[hidden],.contact-preview-mark[hidden],.contact-cv-preview[hidden]{display:none}
    .contact-preview-identity{display:flex;align-items:center;gap:16px;margin-bottom:18px}
    .contact-preview-avatar,.contact-preview-mark{display:grid;place-items:center;flex:none;width:64px;height:64px;border-radius:12px;object-fit:cover;background:#f4f7fa;color:#203647}
    .contact-preview-mark svg{width:32px;height:32px;fill:currentColor}
    .contact-preview-mark .cv-mark{font:900 24px/1 Georgia,serif}
    .contact-preview-name{display:block;font-size:18px;color:#213747;overflow-wrap:anywhere}
    .contact-preview-summary{margin:6px 0 0;color:#607483;font-size:14px;line-height:1.6}
    .contact-preview-url{display:block;margin:0 0 18px;padding:10px 12px;border-radius:7px;background:#f5f8fb;color:#607483;font-size:12px;line-height:1.5;overflow-wrap:anywhere}
    .contact-cv-preview{margin:0 0 18px;max-height:40vh;overflow:auto;overscroll-behavior:contain;border:1px solid #e2e7eb}
    .contact-cv-preview img{display:block;width:100%;height:auto}
    .contact-preview-actions{display:flex;justify-content:flex-end;gap:12px}
    .contact-preview-action{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 18px;border:1px solid #d5dde2;border-radius:8px;background:#fff;color:#344d60;font:inherit;font-size:14px}
    .contact-preview-action.primary{border-color:var(--blue);background:var(--blue);color:#fff}
    .contact-preview-action:focus-visible{outline:2px solid #344d60;outline-offset:3px}
    html.mobile-contact-ui .profile-contact-icon::after{display:none}
    html.mobile-contact-ui .profile-contact-icon:focus-visible{outline:none}
    html.portrait-phone .profile-icon-links{grid-template-columns:repeat(9,32px);gap:5px}
    html.portrait-phone .profile-contact-icon{width:32px;height:40px;padding:4px;border-radius:5px}
    html.mobile-contact-ui .contact-dialog{width:min(calc(430px / var(--contact-ui-scale)),calc(100vw - calc(32px / var(--contact-ui-scale))));max-height:calc(100dvh - calc(32px / var(--contact-ui-scale)));border-radius:calc(14px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-dialog-card{padding:calc(18px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-dialog-head{gap:calc(12px / var(--contact-ui-scale));margin-bottom:calc(14px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-dialog-head h2{font-size:calc(16px / var(--contact-ui-scale));line-height:1.3}
    html.mobile-contact-ui .contact-dialog-head p{margin-top:calc(4px / var(--contact-ui-scale));font-size:calc(11px / var(--contact-ui-scale));line-height:1.5}
    html.mobile-contact-ui .contact-qr img{max-height:calc(100dvh - calc(170px / var(--contact-ui-scale)))}
    html.mobile-contact-ui .contact-qr figcaption{margin-top:calc(10px / var(--contact-ui-scale));font-size:calc(13px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-identity{gap:calc(10px / var(--contact-ui-scale));margin-bottom:calc(14px / var(--contact-ui-scale))}
    html.mobile-contact-ui :is(.contact-preview-avatar,.contact-preview-mark){width:calc(40px / var(--contact-ui-scale));height:calc(40px / var(--contact-ui-scale));border-radius:calc(8px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-mark svg{width:calc(22px / var(--contact-ui-scale));height:calc(22px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-mark .cv-mark{font-size:calc(18px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-name{font-size:calc(14px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-summary{margin-top:calc(4px / var(--contact-ui-scale));font-size:calc(12px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-url{margin-bottom:calc(14px / var(--contact-ui-scale));padding:calc(8px / var(--contact-ui-scale)) calc(10px / var(--contact-ui-scale));border-radius:calc(7px / var(--contact-ui-scale));font-size:calc(11px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-actions{gap:calc(12px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-preview-action{min-height:calc(44px / var(--contact-ui-scale));padding:calc(10px / var(--contact-ui-scale)) calc(16px / var(--contact-ui-scale));border-radius:calc(8px / var(--contact-ui-scale));font-size:calc(13px / var(--contact-ui-scale))}
    html.mobile-contact-ui .contact-cv-preview{margin-bottom:calc(18px / var(--contact-ui-scale))}
  
.profile-name-latin{display:block;margin-top:7px;font-size:18px;color:#607483;letter-spacing:0}
.profile-copy h2{margin:0 0 20px;text-align:center;color:#172b3a;font-size:32px;font-weight:400;letter-spacing:-.025em}
.works-head h1{margin:0 0 10px;font-size:26px;font-weight:700;line-height:1.4;overflow-wrap:anywhere}
.language-switch a{padding:4px 0;color:#81909b;border-bottom:1px solid transparent}
.language-switch a.is-active{color:#314e64;font-weight:700;border-bottom-color:#536b7c}
.work-category-nav{flex-wrap:wrap;width:auto;overflow:visible;max-width:none;gap:4px}
.work-category-tab{white-space:nowrap}
.site-toolbar{gap:18px;padding-bottom:14px;margin-bottom:24px;border-bottom:1px solid var(--line)}
.site-toolbar .work-category-nav{margin:0;max-width:none;justify-content:flex-end}
.site-toolbar .language-switch{flex-shrink:0}
body{overflow-x:clip}
.site-toolbar{position:sticky;top:0;z-index:20;background:#fff;padding-top:10px}
.project-card,.works-head{scroll-margin-top:80px}
.nav-label-compact{display:none}
.profile-mobile-summary{display:none}
.profile-section[data-profile-page="about"] .profile-mobile-summary{display:block}
.profile-biography{display:contents}
.project-copy h2{overflow-wrap:anywhere}
.site-footer{margin:28px 16px 0;padding-top:18px;border-top:1px solid var(--line);color:#607483;line-height:1.8}
.site-footer a{margin-right:14px}
.biography{margin:0 16px;padding:12px 0 8px;max-width:720px;color:#344d60;font-size:15px;line-height:1.85}
.biography p{margin:0 0 18px}.biography h2{margin:24px 0 10px;color:#213747;font-size:18px}
.biography ul{padding-left:20px}.biography li{margin:9px 0}.biography .author-links{display:flex;flex-wrap:wrap;gap:10px 20px}
.biography .return-all-work{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:8px 18px;box-sizing:border-box;border:1px solid transparent;border-radius:6px;background:#1a66b4;color:#fff;font-size:15px;font-weight:700;line-height:1.3;text-decoration:none;touch-action:manipulation}
.biography .return-all-work:hover{background:#124e93;color:#fff;text-decoration:none}
.biography .return-all-work:focus-visible{outline:3px solid #2983e4;outline-offset:3px}
.return-all-work .return-arrow{font-size:1.25em;line-height:1}
#all-work{scroll-margin-top:80px}
html.portrait-phone .biography .return-all-work{gap:calc(9px / var(--portrait-ui-scale));min-height:calc(44px / var(--portrait-ui-scale));padding:calc(8px / var(--portrait-ui-scale)) calc(18px / var(--portrait-ui-scale));font-size:calc(14px / var(--portrait-ui-scale));border-radius:calc(6px / var(--portrait-ui-scale))}
@media(prefers-color-scheme:dark){.biography .return-all-work{background:#2066aa;border-color:#7ca9d4;color:#fff}.biography .return-all-work:hover{background:#18558e}}
.skip-link{position:absolute;left:12px;top:-70px;padding:10px;background:#fff;z-index:1100}
.skip-link:focus{top:12px}
.feature-overlay{overflow-y:auto;max-height:85vh}
@media(max-width:760px){
 .page{width:calc(100% - 24px);padding:16px 0 40px}
 .profile-section{padding:0 8px 24px;gap:18px}
 .profile-copy{padding:0}.profile-copy :is(h1,h2){font-size:30px;margin-bottom:18px}
 .profile-copy p{font-size:15px;line-height:1.75}
 .profile-photo{width:132px;aspect-ratio:3/4;grid-row:1}
 .profile-links,.profile-website{font-size:14px;line-height:1.8;gap:7px}
 .works-head{padding:24px 8px 10px}.works-head h2{font-size:22px}
 .works-head p{font-size:14px;line-height:1.65}
 .work-category-nav{margin:8px 8px 14px}
 .project-card,.vase-card{padding:20px 8px;row-gap:14px}
 .cover-column,.vase-cover-trigger,.nuedc-cover-trigger,.eecs-cover-trigger,.embedded-cover-trigger,.side-project-cover,.lowcom-cover-trigger{max-width:none;width:100%;height:210px;aspect-ratio:auto}
 .project-copy h2,.vase-copy h2,.eecs-copy h2,.embedded-copy h2{font-size:18px;line-height:1.45}
 .project-copy .summary,.vase-summary{font-size:15px;line-height:1.75}
 .project-meta p,.vase-meta p{line-height:1.6}
 .project-kicker,.vase-kicker{font-size:13px;line-height:1.6}
 .signature-visuals{float:right;margin:0 0 8px 12px}
 .feature-overlay{width:calc(100vw - 24px)}
 .feature-grid,.research-grid,.nuedc-grid,.eecs-grid,.embedded-grid,.side-project-demo-grid,.codex-tidy-demo-grid,.alttab-demo-grid,.mindmap-demo-grid{grid-template-columns:1fr}
 .site-footer{margin-inline:8px;font-size:13px}
}
html[lang="en"] .profile-copy p{font-size:12px;line-height:1.55;margin-bottom:10px}
.profile-icon-links{grid-template-columns:repeat(9,32px);gap:5px;min-height:40px}
.profile-contact-icon{width:32px;height:32px;padding:4px}
.profile-contact-icon svg{width:23px;height:23px}
.profile-contact-icon .cv-mark{font-size:20px}
html.portrait-phone .profile-icon-links{grid-template-columns:repeat(9,32px);gap:5px}
html.portrait-phone .profile-contact-icon{width:32px;height:40px;padding:4px}
html.portrait-phone .site-toolbar{width:78vw;max-width:100%;margin-left:auto;margin-right:0;padding-inline:0;flex-wrap:nowrap;gap:calc(4px / var(--portrait-ui-scale));padding-bottom:calc(8px / var(--portrait-ui-scale));margin-bottom:calc(14px / var(--portrait-ui-scale))}
html.portrait-phone .site-toolbar .work-category-nav{flex:1;flex-wrap:nowrap;min-width:0;max-width:100%;justify-content:space-between;gap:calc(1px / var(--portrait-ui-scale))}
html.portrait-phone .site-toolbar .work-category-tab{justify-content:center;text-align:center;gap:0;min-width:calc(28px / var(--portrait-ui-scale));min-height:calc(20px / var(--portrait-ui-scale));padding:calc(4px / var(--portrait-ui-scale)) calc(2px / var(--portrait-ui-scale));font-size:calc(9px / var(--portrait-ui-scale));border-radius:calc(5px / var(--portrait-ui-scale))}
html.portrait-phone .site-toolbar .work-category-tab.is-active::after{width:calc(12px / var(--portrait-ui-scale));height:calc(1px / var(--portrait-ui-scale));bottom:calc(-1px / var(--portrait-ui-scale))}
html.portrait-phone .site-toolbar .language-switch{gap:calc(2px / var(--portrait-ui-scale));font-size:calc(9px / var(--portrait-ui-scale))}
html.portrait-phone .site-toolbar .language-switch a{display:inline-flex;align-items:center;justify-content:center;min-width:calc(20px / var(--portrait-ui-scale));min-height:calc(20px / var(--portrait-ui-scale));padding:calc(3px / var(--portrait-ui-scale)) calc(1px / var(--portrait-ui-scale))}
html.portrait-phone .nav-label-wide{display:none}
html.portrait-phone .nav-label-compact{display:inline}
html.portrait-phone .profile-section{grid-template-columns:180px minmax(0,1fr);column-gap:28px;row-gap:4px;align-items:start}
html.portrait-phone .profile-copy{display:contents}
html.portrait-phone .profile-copy :is(h1,h2){grid-column:2;grid-row:1;text-align:left;margin:0;font-size:32px}
html.portrait-phone .profile-mobile-summary{display:block;grid-column:2;grid-row:2;margin-top:8px}
html.portrait-phone .profile-mobile-summary p{font-size:14px;line-height:1.65;margin:0}
html.portrait-phone .profile-mobile-summary p:last-child{margin-top:12px}
html.portrait-phone .profile-icon-links{grid-column:2;grid-row:3;justify-content:start;margin:8px 0 0}
html.portrait-phone .profile-views{grid-column:2;grid-row:4;text-align:left;margin:0}
html.portrait-phone .profile-photo{grid-column:1;grid-row:1 / 5;width:180px;justify-self:start;align-self:start}
html.portrait-phone .profile-biography{display:block;grid-column:1 / -1;grid-row:5;padding-top:32px}
html.portrait-phone .profile-biography p{font-size:14px;line-height:1.7;margin:0 0 16px}
.paper-copy h2{color:#202428;font-size:16px;line-height:1.4;font-weight:600}
.paper-title{display:flex;align-items:center;gap:8px}
.paper-title .title-link{flex:1;min-width:0}
.paper-authors{margin:7px 0 5px;color:#282e33;font-size:14px;line-height:1.65}
.paper-author{white-space:nowrap}
.paper-author-self .paper-author-name{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
.paper-authors sup{margin-left:1px;font-size:.72em;line-height:0}
.paper-authors a{color:inherit;text-decoration:none}
.paper-authors a:hover,.paper-authors a:focus-visible{color:var(--blue);text-decoration:underline;text-underline-offset:3px}
.paper-venue{margin:0 0 5px;color:#30383e;font-size:14px;line-height:1.5}
.vase-card .paper-venue{color:#a42632;font-weight:700}
.eecs-card .paper-venue{color:#315b98;font-weight:700}
.paper-venue em{font-weight:700;font-style:italic}
.paper-author-note{margin:0 0 10px;color:#687985;font-size:11px;line-height:1.6}
.paper-copy .summary,.paper-copy .vase-summary{font-size:13px;line-height:1.55;margin-bottom:12px}
/* Paper lists put the work first; institutional marks only render on details. */
article[data-work-category="paper"]{grid-template-columns:minmax(0,30%) minmax(0,1fr)!important;column-gap:24px!important;row-gap:0!important;padding:20px 16px!important;border-top:1px solid #edf0f2;align-items:center!important}
article[data-work-category="paper"] .paper-copy{grid-column:2!important;grid-row:1!important;align-self:center;margin:0!important;padding:0!important}
article[data-work-category="paper"] .paper-preview{grid-column:1!important;grid-row:1!important;align-self:center;width:100%!important;max-width:none!important;height:auto!important;aspect-ratio:auto!important;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}
.paper-preview-image{display:block;width:100%;height:auto;object-fit:contain}
.paper-preview-video{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:contain;background:#fff;pointer-events:none}
.paper-preview-stack{display:grid;gap:8px}
/* Let desktop CN thumbnails define the row height without cropping scientific figures. */
@media(min-width:761px){
 html[data-origin="cn"]:not(.portrait-phone) .page{width:min(1120px,calc(100% - 64px))}
 html[data-origin="cn"]:not(.portrait-phone) article[data-work-category="paper"]{grid-template-columns:minmax(0,34%) minmax(0,1fr)!important;align-items:stretch!important}
 html[data-origin="cn"]:not(.portrait-phone) article[data-work-category="paper"] .paper-preview{align-self:stretch;display:flex;align-items:center;justify-content:center}
 html[data-origin="cn"]:not(.portrait-phone) .paper-preview-stack{width:100%}
 html[data-origin="cn"]:not(.portrait-phone) .paper-preview-video{height:100%;min-height:100%;object-fit:contain}
}
article[data-work-category="paper"] .cover-zoom-hint{right:3px;top:3px;width:27px;height:27px;border:0;border-radius:2px;background:rgba(255,255,255,.8);color:#657783;box-shadow:none;opacity:.65}
article[data-work-category="paper"] .paper-preview:is(:hover,:focus-visible) .cover-zoom-hint{color:var(--blue);border:0;background:#fff;box-shadow:none;opacity:1}
.paper-authors{font-weight:400}
.paper-author-self .paper-author-name{font-weight:600}
.paper-links{gap:6px;font-size:11px;font-weight:400;line-height:1.4}
.paper-links .paper-resource{display:inline-flex;align-items:stretch;min-width:0;min-height:0;padding:0;border:0;border-radius:0;background:transparent;color:#fff;text-decoration:none;box-shadow:none;white-space:nowrap;transition:opacity .15s ease}
.paper-resource .resource-label,.paper-resource .resource-value{display:inline-flex;align-items:center;gap:4px;padding:3px 6px;background:#555;color:#fff}
.paper-resource .resource-value{background:#315b98;font-weight:700}
.paper-resource.resource-arxiv .resource-value{background:#b31b1b}
.paper-resource.resource-code .resource-value{background:#22863a}
.paper-resource.resource-website .resource-value{background:#ffddbc;color:#303030}
.paper-resource.resource-cite .resource-value{background:#675780}
.paper-resource .resource-icon{width:12px;height:12px;flex:0 0 12px}
.paper-links .paper-resource:hover{background:transparent;color:#fff;opacity:.85}
.paper-links .paper-resource:focus-visible{outline:2px solid var(--blue);outline-offset:3px;background:transparent;color:#fff}
.paper-affiliations{grid-column:1 / -1;grid-row:2;margin-top:20px;padding-top:14px;border-top:1px solid #edf0f2}
.paper-affiliations h3{margin:0 0 10px;color:#607483;font-size:12px;line-height:1.5;font-weight:400}
.paper-affiliations :is(.vase-logos,.project-logos){width:auto!important;justify-content:flex-start!important;margin-left:0!important;gap:14px;flex-wrap:wrap!important}
.paper-affiliations .vase-logos img,.paper-affiliations .vase-logos img.wide{width:100px;max-width:100px;height:28px;object-fit:contain}
.citation-dialog{width:min(620px,calc(100% - 36px))}
.citation-text{display:block;width:100%;height:260px;max-height:45vh;padding:12px;border:1px solid #d5dde2;border-radius:4px;background:#f7f9fb;color:#263b4b;font:12px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace;resize:vertical;white-space:pre-wrap;overflow-wrap:anywhere}
.citation-status{min-height:20px;margin:8px 0;color:#607483;font-size:12px}
html.mobile-contact-ui .citation-text{height:calc(250px / var(--contact-ui-scale));padding:calc(10px / var(--contact-ui-scale));font-size:calc(12px / var(--contact-ui-scale))}
html.mobile-contact-ui .citation-status{min-height:calc(20px / var(--contact-ui-scale));margin:calc(8px / var(--contact-ui-scale)) 0;font-size:calc(12px / var(--contact-ui-scale))}
@media(max-width:760px){html:not(.portrait-phone) article[data-work-category="paper"]{grid-template-columns:1fr!important;row-gap:14px!important}html:not(.portrait-phone) article[data-work-category="paper"] .paper-copy{grid-column:1!important;grid-row:2!important}html:not(.portrait-phone) .paper-affiliations{grid-row:3}}
html.portrait-phone article[data-work-category="paper"]{-webkit-text-size-adjust:100%;text-size-adjust:100%}
html.portrait-phone .paper-copy h2{font-size:12px;line-height:1.3}
html.portrait-phone article[data-work-category="paper"] .cover-zoom-hint{width:calc(18px / var(--portrait-ui-scale));height:calc(18px / var(--portrait-ui-scale))}
html.portrait-phone .paper-authors,html.portrait-phone .paper-venue{font-size:11px;line-height:1.4}
html.portrait-phone .paper-authors{margin:5px 0 4px}
html.portrait-phone .paper-copy .summary,html.portrait-phone .paper-copy .vase-summary{font-size:12px;line-height:1.4;margin-bottom:9px}
/* Competitions and personal projects share the publication text and preview layout. */
.work-list-card{grid-template-columns:minmax(0,30%) minmax(0,1fr)!important;column-gap:24px!important;row-gap:0!important;padding:20px 16px!important;align-items:center!important;border-top:1px solid #edf0f2}
.work-list-card .work-preview{grid-column:1!important;grid-row:1!important;align-self:stretch!important;display:flex;align-items:center;justify-content:center;width:100%!important;max-width:none!important;height:auto!important;aspect-ratio:auto!important;padding:0!important;border:0!important;border-radius:0;background:transparent;box-shadow:none}
.work-preview>img,.work-preview>video{display:block;width:100%;height:auto;max-width:100%;object-fit:contain;background:transparent;transform:none!important}
.work-preview>video{pointer-events:none}
.work-list-card .work-copy{grid-column:2!important;grid-row:1!important;align-self:center!important;min-width:0;min-height:0!important;padding:0!important;margin:0!important}
.work-copy h2{margin:0;color:#202428!important;font-size:16px!important;line-height:1.4!important;font-weight:600!important}
.work-copy .project-meta{margin:7px 0 5px;color:#282e33;font-size:14px;line-height:1.65}
.work-copy .project-meta p{font-size:14px!important;line-height:1.65;font-weight:400}
.work-list-card[data-work-category="competition"] .project-meta p:first-child{color:#a35b19;font-weight:700}
.work-copy .project-kicker{margin:0 0 5px;color:#315b98;font-size:14px;line-height:1.5;font-weight:700;letter-spacing:0}
.work-copy .summary{max-width:none;margin:0 0 12px;font-size:13px!important;line-height:1.55!important}
.work-copy .project-bottom{max-width:none}
.work-copy .nuedc-note{margin:0 0 12px;padding:0;border:0;color:#687985;font-size:12px;line-height:1.55}
.work-links{gap:6px;font-size:11px;font-weight:400;line-height:1.4}
.work-list-card .cover-zoom-hint{right:3px;top:3px;width:27px;height:27px;border:0;border-radius:2px;background:rgba(255,255,255,.8);color:#657783;box-shadow:none;opacity:.65}
.work-list-card .work-preview:is(:hover,:focus-visible) .cover-zoom-hint{color:var(--blue);border:0;background:#fff;box-shadow:none;opacity:1}
.work-detail-media{grid-column:1/-1;grid-row:2;display:flex;flex-wrap:wrap;align-items:center;gap:20px;margin-top:20px;padding-top:14px;border-top:1px solid #edf0f2}
.work-detail-media .project-logos{width:auto;justify-content:flex-start;margin:0;flex-wrap:wrap}
.work-detail-media .signature-visuals{position:static;float:none;width:124px;margin:0;gap:8px}
.work-detail-media .signature-visuals img{height:auto}
@media(min-width:761px){html[data-origin="cn"]:not(.portrait-phone) .work-list-card{grid-template-columns:minmax(0,34%) minmax(0,1fr)!important}}
@media(max-width:760px){
 html:not(.portrait-phone) .work-list-card{grid-template-columns:1fr!important;row-gap:14px!important}
 html:not(.portrait-phone) .work-list-card .work-copy{grid-column:1!important;grid-row:2!important}
 html:not(.portrait-phone) .work-detail-media{grid-row:3}
}
html.portrait-phone .work-copy h2{font-size:12px!important;line-height:1.3!important}
html.portrait-phone .work-copy .project-meta p,html.portrait-phone .work-copy .project-kicker{font-size:11px!important;line-height:1.4}
html.portrait-phone .work-copy .summary{font-size:12px!important;line-height:1.4!important;margin-bottom:9px}
html.portrait-phone .work-list-card .cover-zoom-hint{width:calc(18px / var(--portrait-ui-scale));height:calc(18px / var(--portrait-ui-scale))}

/* Work reading controls use the original canvas scale, never the user's zoom. */
.work-collection{--work-ui-scale:1;--work-nav-offset:0px;--work-bar-height:0px}
.page article[data-work-category],.side-projects-head,.paper-affiliations,.work-detail-media,.site-footer{border-top:0;box-shadow:inset 0 .8px 0 #333}
/* The right-aligned phone navigation keeps its layout and paints the whole strip. */
html.portrait-phone .site-toolbar::before{content:"";position:absolute;top:0;bottom:0;right:0;width:100vw;background:#fff;z-index:-1;pointer-events:none}
.work-readingbar{display:flex;align-items:center;justify-content:space-between;gap:12px}
.work-readingbar :is(h1,h2){margin-bottom:6px}
.work-view-controls,.work-view-hint{display:none}
html.work-mobile .work-collection{--wu:calc(1px / var(--work-ui-scale))}
html.work-mobile .work-collection>.works-head{display:contents}
html.work-mobile .work-readingbar{position:sticky;top:var(--work-nav-offset);z-index:19;flex-wrap:wrap;gap:calc(8 * var(--wu));padding:calc(4 * var(--wu)) calc(6 * var(--wu));border-bottom:0;background:#fff;box-shadow:inset 0 -.8px 0 #333}
html.work-mobile .work-readingbar :is(h1,h2){margin:0;color:#1d2d3a;font-size:calc(14 * var(--wu));line-height:1.35;font-weight:600}
html.work-mobile .work-view-controls{display:flex;flex:0 0 auto;gap:0;padding:0;margin:0;min-width:0;border:1px solid #91a2b0;border-radius:calc(6 * var(--wu));overflow:hidden;background:#fff}
.work-view-controls legend{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.work-view-option{position:relative;display:flex;cursor:pointer}
.work-view-option input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}
html.work-mobile .work-view-option>span{display:flex;align-items:center;justify-content:center;gap:calc(5 * var(--wu));min-width:calc(44 * var(--wu));min-height:calc(32 * var(--wu));padding:calc(4 * var(--wu)) calc(7 * var(--wu));font-size:calc(11 * var(--wu));line-height:1.25;color:#294052;background:#fff;white-space:nowrap}
.work-view-option+.work-view-option{border-left:1px solid #91a2b0}
.work-view-option input:checked+span{background:#e7eef4;color:#173e5a;font-weight:700}
.work-view-option input:focus-visible+span{outline:2px solid #1772d0;outline-offset:-3px}
html.work-mobile .work-view-option svg{width:calc(12 * var(--wu));height:calc(12 * var(--wu));flex-shrink:0}
html.work-mobile .work-collection>.works-head>.work-list-description{display:none}
html.work-mobile .work-view-hint{display:block;margin:calc(8 * var(--wu)) calc(6 * var(--wu)) calc(12 * var(--wu));color:#526777;font-size:calc(12 * var(--wu));line-height:1.5}
.work-view-hint[hidden]{display:none!important}
html.work-mobile .work-collection[data-work-view="overview"] :is(article[data-work-category="paper"],.work-list-card){grid-template-columns:minmax(0,30%) minmax(0,1fr)!important;row-gap:0!important}
html.work-mobile .work-collection[data-work-view="overview"] :is(.paper-preview,.work-preview){grid-column:1!important;grid-row:1!important}
html.work-mobile .work-collection[data-work-view="overview"] :is(.paper-copy,.work-copy){grid-column:2!important;grid-row:1!important}
html.work-mobile:not(.portrait-phone) .work-collection[data-work-view="overview"] :is(.paper-copy h2,.work-copy h2){font-size:12px!important;line-height:1.4!important}
html.work-mobile:not(.portrait-phone) .work-collection[data-work-view="overview"] :is(.paper-authors,.paper-venue,.project-meta p,.project-kicker){font-size:11px!important}
html.work-mobile:not(.portrait-phone) .work-collection[data-work-view="overview"] :is(.summary,.vase-summary){font-size:12px!important;line-height:1.5!important}
html.work-mobile .work-collection[data-work-view="large"] :is(article[data-work-category="paper"],.work-list-card){grid-template-columns:minmax(0,1fr)!important;column-gap:0!important;row-gap:calc(12 * var(--wu))!important;padding:calc(18 * var(--wu)) calc(8 * var(--wu))!important;align-items:start!important}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-preview,.work-preview){grid-column:1!important;grid-row:2!important;align-self:start!important;display:block!important;height:auto!important;min-height:0!important;width:100%!important}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-copy,.work-copy){display:contents}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-copy,.work-copy)>h2{grid-column:1;grid-row:1}
html.work-mobile .work-collection[data-work-view="large"] .work-reading-details{grid-column:1;grid-row:3;min-width:0}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-preview-image,.paper-preview-video,.work-preview>img,.work-preview>video){display:block;width:100%;height:auto!important;min-height:0!important;object-fit:contain}
html.work-mobile .work-collection[data-work-view="large"] .paper-preview-stack{gap:calc(8 * var(--wu))}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-copy h2,.work-copy h2){font-size:calc(15 * var(--wu))!important;line-height:1.4!important;margin:0}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-authors,.paper-venue,.project-meta p,.project-kicker){font-size:calc(12 * var(--wu))!important;line-height:1.55!important}
html.work-mobile .work-collection[data-work-view="large"] :is(.paper-authors,.project-meta){margin:calc(8 * var(--wu)) 0 calc(6 * var(--wu))}
html.work-mobile .work-collection[data-work-view="large"] :is(.summary,.vase-summary){font-size:calc(13 * var(--wu))!important;line-height:1.65!important;margin-bottom:calc(12 * var(--wu))!important}
html.work-mobile .work-collection[data-work-view="large"] .nuedc-note{font-size:calc(12 * var(--wu));line-height:1.5}
html.work-mobile .work-collection[data-work-view="large"] .paper-links{display:flex;flex-wrap:wrap;gap:calc(5 * var(--wu));font-size:calc(10.5 * var(--wu));line-height:1.4}
html.work-mobile .work-collection[data-work-view="large"] .paper-resource :is(.resource-label,.resource-value){gap:calc(3 * var(--wu));padding:calc(3 * var(--wu)) calc(5 * var(--wu));min-height:calc(24 * var(--wu))}
html.work-mobile .work-collection[data-work-view="large"] .paper-resource .resource-icon{width:calc(11 * var(--wu));height:calc(11 * var(--wu));flex-basis:calc(11 * var(--wu))}
html.work-mobile .work-collection[data-work-view="large"] .cover-zoom-hint{width:calc(24 * var(--wu));height:calc(24 * var(--wu))}
@media print{.work-view-controls,.work-view-hint{display:none!important}.work-readingbar{position:static!important}}
/* Preserve the compact publication typography for member/advisor lines. */
.work-list-card[data-work-category="competition"] .competition-team p.project-authors{color:#282e33;font-weight:400}
.competition-team .paper-author-name{color:inherit}
.team-symbol-note,.paper-symbol-note{margin:0;color:#687985;font-size:11px;line-height:1.5;font-weight:400}
.team-symbol-note{flex-basis:100%}
/* Enlarge the gallery close glyph by 50%; contact dialogs keep their own size. */
.feature-overlay .close{font-size:42px}
@media(max-width:760px),(pointer:coarse){
 .feature-overlay .close{font-size:0}
 .feature-overlay .close::before{font-size:33px}
}
html.portrait-phone .feature-overlay .close{font-size:0}
html.portrait-phone .feature-overlay .close::before{font-size:calc(33px / var(--portrait-ui-scale))}

/* Keep the event/date row and integrate the source-confirmed award into it. */
.work-list-card .competition-award{color:#945a2d;font-weight:600}
/* The plain double dagger shares equal-contribution marks' superscript size. */
.paper-authors sup.role-lead{font-family:Arial,sans-serif;font-size:.72em;vertical-align:super;line-height:0;font-weight:400}
/* Separate siblings keep playback independent from the original gallery button. */
.preview-media{position:relative;min-width:0;padding-top:0!important}
/* A reserved slim strip keeps the control clear of every poster's text. Its
   height stays fixed while playing so the image and scroll position do not move. */
:is(.work-preview,.paper-preview).preview-media,.gallery-preview-media{padding-bottom:26px!important}
/* Center the copy against the image area; the separate Play strip is excluded. */
.work-list-card .preview-media:not(.no-preview-control)+.work-copy{margin-bottom:26px!important}
html.portrait-phone .work-list-card .preview-media:not(.no-preview-control)+.work-copy{margin-bottom:calc(26px / var(--portrait-ui-scale))!important}
html.work-mobile .work-collection[data-work-view="large"] .preview-media+.work-copy{margin-bottom:0!important}
@media(max-width:760px){html:not(.work-mobile):not(.portrait-phone) .work-list-card .preview-media+.work-copy{margin-bottom:0!important}}
.preview-media>.preview-open{position:relative;display:block;appearance:none;width:100%;height:auto;aspect-ratio:var(--preview-ratio);padding:0;margin:0;border:0;border-radius:0;background:#fff;overflow:hidden;cursor:zoom-in;line-height:0;pointer-events:auto}
.preview-open>canvas{display:block;width:100%;height:auto;aspect-ratio:var(--preview-ratio);object-fit:contain;background:#fff;pointer-events:none}
.preview-open>.preview-poster{position:absolute!important;inset:0;width:100%!important;height:100%!important;object-fit:contain!important;background:#fff;pointer-events:none;z-index:1}
.preview-media[data-preview-state="playing"] .preview-poster{visibility:hidden}
.preview-open>.cover-zoom-hint{z-index:2}
.preview-media>.preview-play-control{position:absolute;z-index:3;left:0;bottom:1px;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:24px;padding:3px 6px;border:0;border-radius:4px;background:rgba(255,255,255,.5);color:rgba(32,60,78,.7);font:11px/1.2 var(--site-font);font-weight:400;box-shadow:none;cursor:pointer;pointer-events:auto}
.preview-play-control:hover{background:rgba(232,240,246,.65);color:#203c4e}
.preview-media[data-preview-state="loading"]>.preview-play-control{cursor:wait}
.preview-media[data-preview-state="playing"]>.preview-play-control{visibility:hidden;pointer-events:none}
.preview-play-control:focus-visible{outline:2px solid #1772d0;outline-offset:3px}
.preview-play-icon{font-family:Arial,sans-serif;font-size:14px;line-height:1;min-width:13px}
html.portrait-phone :is(.work-preview,.paper-preview).preview-media,html.portrait-phone .gallery-preview-media{padding-bottom:calc(26px / var(--portrait-ui-scale))!important}
html.portrait-phone .preview-media>.preview-play-control{bottom:calc(1px / var(--portrait-ui-scale));min-height:calc(24px / var(--portrait-ui-scale));padding:calc(3px / var(--portrait-ui-scale)) calc(6px / var(--portrait-ui-scale));gap:calc(4px / var(--portrait-ui-scale));font-size:calc(11px / var(--portrait-ui-scale));border-radius:calc(4px / var(--portrait-ui-scale))}
html.portrait-phone .preview-play-icon{font-size:calc(14px / var(--portrait-ui-scale));min-width:calc(13px / var(--portrait-ui-scale))}
:is(.paper-preview,.work-preview).preview-media.no-preview-control,
html.portrait-phone :is(.paper-preview,.work-preview).preview-media.no-preview-control{padding-bottom:0!important}
.gallery-preview-media{display:block;width:100%;margin:0 0 16px;grid-column:1/-1;background:#fff}
.gallery-preview-media>.preview-open{cursor:default;aspect-ratio:auto}
.gallery-preview-media>.preview-open>canvas{width:100%;height:auto;max-height:52vh;min-height:0;object-fit:contain}
.preview-original{margin:0 0 16px;font:13px/1.4 var(--site-font);color:var(--muted)}
.preview-original>summary{cursor:pointer;width:fit-content;padding:4px 0}
.preview-original>video{display:block;width:100%;max-height:52vh;margin-top:8px;background:#fff}
html.work-mobile .work-collection[data-work-view="large"] .preview-open>.preview-poster{height:100%!important}
/* Tablet galleries leave room around the dialog, independent of preview mode. */
@media(min-width:601px) and (max-width:1024px){
 html:not(.portrait-phone) .feature-overlay{width:84vw;right:8vw;max-height:76vh;max-height:76dvh}
}
@media print{.preview-play-control{display:none!important}.preview-poster{visibility:visible!important}}
/* The download bar overlays only the top image edge; it never adds a row. */
.preview-load-progress{--load-unit:1px;--load-progress:0%;position:absolute;z-index:4;top:0;left:0;right:0;height:calc(3 * var(--load-unit));display:none;overflow:hidden;border:0;border-radius:0;background:rgba(31,71,103,.16);pointer-events:none}
html.portrait-phone .preview-load-progress{--load-unit:calc(1px / var(--portrait-ui-scale))}
.preview-media:is([data-preview-buffer="waiting"],[data-preview-buffer="loading"])>.preview-load-progress{display:block}
.preview-load-fill{display:block;width:var(--load-progress);height:100%;background:#1772c9;transition:width .16s linear}
.preview-load-progress[data-indeterminate="true"]>.preview-load-fill{width:28%;animation:preview-load-travel 1.2s ease-in-out infinite}
@keyframes preview-load-travel{from{transform:translateX(-100%)}to{transform:translateX(360%)}}
@media(prefers-color-scheme:dark){.preview-load-progress{background:rgba(132,190,232,.25)}.preview-load-fill{background:#65b9f4}}
@media(prefers-reduced-motion:reduce){.preview-load-fill{transition:none}.preview-load-progress[data-indeterminate="true"]>.preview-load-fill{animation:none}}
@media print{.preview-load-progress{display:none!important}}
.gallery-preview-media{padding-bottom:0!important}
html.portrait-phone .gallery-preview-media{padding-bottom:0!important}
.preview-transport{--transport-unit:1px;display:flex;align-items:center;gap:calc(8 * var(--transport-unit));min-height:calc(34 * var(--transport-unit));padding:calc(4 * var(--transport-unit)) calc(7 * var(--transport-unit));background:rgba(31,44,54,.88);color:#fff;font:calc(11 * var(--transport-unit))/1.2 var(--site-font)}
html.portrait-phone .preview-transport{--transport-unit:calc(1px / var(--portrait-ui-scale))}
.preview-transport button{display:grid;place-items:center;flex:none;width:calc(28 * var(--transport-unit));height:calc(26 * var(--transport-unit));padding:0;border:0;border-radius:calc(3 * var(--transport-unit));background:transparent;color:inherit;font:calc(13 * var(--transport-unit))/1 Arial,sans-serif;cursor:pointer}
.preview-transport button:hover{background:rgba(255,255,255,.12)}
.preview-transport button:disabled{opacity:.5;cursor:wait}
.preview-transport input[type="range"]{min-width:0;flex:1;width:100%;height:calc(22 * var(--transport-unit));margin:0;accent-color:#80c1ef;cursor:pointer}
.preview-transport input:disabled{opacity:.4;cursor:wait}
.preview-transport [data-preview-time]{flex:none;font-variant-numeric:tabular-nums;white-space:nowrap}
.preview-transport :is(button,input):focus-visible{outline:calc(2 * var(--transport-unit)) solid #80c1ef;outline-offset:calc(2 * var(--transport-unit))}
/* Context menu is an overlay: no extra button row or thumbnail obstruction. */
.preview-download-menu{--menu-unit:1px;position:fixed;z-index:100000;min-width:calc(170 * var(--menu-unit));max-width:100vw;padding:calc(4 * var(--menu-unit));border:1px solid #cbd5df;border-radius:calc(7 * var(--menu-unit));background:#fff;color:#203c4e;box-shadow:0 calc(4 * var(--menu-unit)) calc(18 * var(--menu-unit)) rgba(0,0,0,.18);font:calc(14 * var(--menu-unit))/1.4 var(--site-font)}
.preview-download-menu[hidden]{display:none!important}
.preview-download-menu button{display:block;appearance:none;width:100%;min-height:calc(36 * var(--menu-unit));padding:calc(6 * var(--menu-unit)) calc(12 * var(--menu-unit));border:0;border-radius:calc(4 * var(--menu-unit));background:transparent;color:inherit;font:inherit;text-align:left;white-space:nowrap;cursor:pointer}
.preview-download-menu button:is(:hover,:focus-visible){outline:0;background:#eaf2fb}
.preview-download-menu button:disabled{opacity:.65;cursor:wait}
html.portrait-phone .preview-download-menu{--menu-unit:calc(1px / var(--portrait-ui-scale))}
@media(prefers-color-scheme:dark){.preview-download-menu{background:#192b39;border-color:#526c7e;color:#eff6fc}.preview-download-menu button:is(:hover,:focus-visible){background:#29465c}}
@media print{.preview-download-menu{display:none!important}}
/* A phone's 980px overview canvas must not keep desktop gallery columns or
   fixed picture heights. Natural ratios preserve diagrams and entire photos. */
.feature-overlay{--gallery-unit:1px}
.feature-overlay{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;isolation:isolate}
.feature-overlay img[data-src]{visibility:hidden}
.feature-overlay>.overlay-head{position:sticky;top:0;z-index:5;background:var(--gallery-header-bg,#f9fbfd);padding-bottom:8px;border-bottom:1px solid #c9d1d7;margin-bottom:10px}
html.gallery-locked{overflow:hidden!important;overscroll-behavior:none;scrollbar-gutter:stable}
@media(prefers-color-scheme:dark){
 .feature-overlay{--gallery-header-bg:#202020}
 .feature-overlay>.overlay-head h3{color:#e7edf2}
 .feature-overlay>.overlay-head h3 span{color:#b4c3cf}
 .feature-overlay>.overlay-head{border-bottom-color:#505b64}
 .feature-overlay>.overlay-head .close{color:#e7edf2;background:#2c3339;border-color:#657581}
}
/* Center the overview/certificate gallery with desktop/tablet margins.
   Phone galleries keep their existing width and natural image ratios. */
@media(min-width:601px){
 html:not(.portrait-phone) .lowcom-feature-overlay{width:min(1000px,78vw,calc((76dvh - 130px) * 1.333333 + 32px));left:50%;right:auto}
 html:not(.portrait-phone) .lowcom-card.is-open .lowcom-feature-overlay{transform:translate(-50%,-50%) scale(1)}
}
html.portrait-phone .feature-overlay{--gallery-unit:calc(1px / var(--portrait-ui-scale));width:92vw;right:4vw;left:auto;padding:calc(8 * var(--gallery-unit));max-height:82vh;max-height:82dvh}
html.portrait-phone .project-card.is-open .feature-overlay{transform:translate(0,-50%) scale(1)}
html.portrait-phone .feature-overlay :is(.feature-grid,.research-grid,.nuedc-grid,.eecs-grid,.embedded-grid,.lowcom-grid,.side-project-demo-grid){grid-template-columns:minmax(0,1fr);gap:calc(10 * var(--gallery-unit))}
html.portrait-phone .feature-overlay figure{display:block;grid-column:1/-1!important;grid-row:auto;min-width:0;align-self:start}
html.portrait-phone .feature-overlay figure img{display:block;width:100%;height:auto!important;min-height:0;max-height:none!important;aspect-ratio:auto!important;padding:0!important;object-fit:contain!important}
html.portrait-phone .feature-overlay .overlay-head h3{font-size:calc(15 * var(--gallery-unit));line-height:1.3}
html.portrait-phone .feature-overlay>.overlay-head{padding:calc(4 * var(--gallery-unit)) 0 calc(5 * var(--gallery-unit));margin-bottom:calc(8 * var(--gallery-unit));gap:calc(6 * var(--gallery-unit))}
html.portrait-phone .feature-overlay .overlay-head h3 span{font-size:calc(11 * var(--gallery-unit))}
html.portrait-phone .feature-overlay figcaption{font-size:calc(11 * var(--gallery-unit));line-height:1.4;padding:calc(5 * var(--gallery-unit)) calc(6 * var(--gallery-unit))}
html.portrait-phone .feature-overlay .preview-original{font-size:calc(11 * var(--gallery-unit))}
/* Small UI-dialog crops stay compact; full application screenshots use the
   available width. Restrict the whole figure, not a tiny image in a wide box. */
html.portrait-phone .feature-overlay .codex-tidy-demo:not(:first-child){width:min(100%,calc(220 * var(--gallery-unit)));justify-self:center}
@media(max-width:600px){
 html:not(.portrait-phone) .feature-overlay{width:92vw;right:4vw;left:auto;padding:8px;max-height:82vh;max-height:82dvh}
 html:not(.portrait-phone) .project-card.is-open .feature-overlay{transform:translate(0,-50%) scale(1)}
 html:not(.portrait-phone) .feature-overlay :is(.feature-grid,.research-grid,.nuedc-grid,.eecs-grid,.embedded-grid,.lowcom-grid,.side-project-demo-grid){grid-template-columns:minmax(0,1fr);gap:10px}
 html:not(.portrait-phone) .feature-overlay figure{display:block;grid-column:1/-1!important;grid-row:auto;min-width:0;align-self:start}
 html:not(.portrait-phone) .feature-overlay figure img{display:block;width:100%;height:auto!important;min-height:0;max-height:none!important;aspect-ratio:auto!important;padding:0!important;object-fit:contain!important}
 html:not(.portrait-phone) .feature-overlay .overlay-head h3{font-size:15px;line-height:1.3}
 html:not(.portrait-phone) .feature-overlay .overlay-head h3 span,html:not(.portrait-phone) .feature-overlay figcaption{font-size:11px;line-height:1.4}
 html:not(.portrait-phone) .feature-overlay .codex-tidy-demo:not(:first-child){width:min(100%,220px);justify-self:center}
}
/* Keep the work list wrapper neutral. Download feedback lives on image edges. */
.work-loading-region{position:relative}
/* Latin glyphs use Times New Roman; CJK glyphs fall through to Microsoft YaHei.
   System fallbacks cover devices that do not have these fonts installed. */
:root{--site-font:"Times New Roman",Times,"Microsoft YaHei","微软雅黑","Microsoft YaHei UI","PingFang SC","Noto Sans CJK SC",serif}
body,button,input,select,textarea{font-family:var(--site-font)}
.citation-text,.spie-wordmark,.renesas-wordmark,.profile-contact-icon::after,.profile-links .profile-origin-badge{font-family:var(--site-font)}
.profile-contact-icon .cv-mark,.contact-preview-mark .cv-mark{font-family:"Times New Roman",Times,serif}
