/* Website palette and type hierarchy. Original project media retain their colors. */
:root{color-scheme:dark;--paper:#000;--ink:#fff;--muted:#b3b3b3;--line:#292929;--font:Inter,-apple-system,BlinkMacSystemFont,"Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;--text:16px;--subheading:24px;--heading:32px;--glass:rgba(0,0,0,.5);--glass-blur:blur(24px) saturate(112%);--cover-background:rgba(245,248,255,.9);--cover-lettering:#42444b}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:90px;background:var(--paper)}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font);font-size:var(--text);-webkit-font-smoothing:antialiased;overflow-anchor:none;isolation:isolate}
main,section,footer{background:var(--paper)}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:var(--paper)}
button,a{-webkit-tap-highlight-color:transparent}
button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--ink);outline-offset:5px}
img{display:block;max-width:100%}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
h1,h2{font-size:var(--heading)}
h3{font-size:var(--subheading)}
.eyebrow{font-size:var(--text);letter-spacing:1.7px;color:var(--muted)}

/* Shared header: monochrome states, without an underline. */
.header{height:82px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 5%;border-bottom:1px solid var(--line);background:var(--glass);position:sticky;top:0;z-index:20}
.brand{font-size:var(--subheading);font-weight:700;letter-spacing:-1px;display:flex;align-items:center;gap:8px;white-space:nowrap;color:var(--ink)}
.brand span{font-weight:400;color:var(--muted)}
.header nav{display:flex;gap:8px;align-items:center;font-size:var(--text)}
.header .nav-link{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:9px 17px;border:1px solid transparent;border-radius:5px;color:var(--muted);background:transparent;transition:border-color .2s ease}
.header .nav-link:hover{color:var(--ink);border-color:var(--line)}
.header .nav-link[aria-current="page"]{color:var(--ink);font-weight:600;border-color:var(--line)}
.header .nav-link[aria-current="page"]:hover{border-color:var(--muted)}

/* Flowing blue aurora, with violet and teal accents, stays behind the portfolio. */
#home,#aboutView{position:relative;z-index:1;background:transparent}
.ambient-light{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;user-select:none;contain:strict;background:#000}
.aurora-canvas,.aurora-fallback{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.aurora-canvas{display:block;visibility:hidden}
.aurora-fallback{background:radial-gradient(ellipse 29vmin 23vmin at 50% 48%,rgba(6,46,153,.455),transparent),radial-gradient(ellipse 22vmin 18vmin at 43% 52%,rgba(61,11,102,.245),transparent),radial-gradient(ellipse 19vmin 16vmin at 58% 44%,rgba(3,84,54,.21),transparent)}
.has-aurora .aurora-canvas{visibility:visible}
.has-aurora .aurora-fallback{display:none}
#home .works{position:relative;z-index:1;background:transparent}

/* Five project banners. */
.works{--project-space:clamp(40px,4vw,64px);padding:var(--project-space) clamp(24px,5vw,112px) 72px;margin:0 auto}
.project-grid{display:flex;flex-direction:column;gap:var(--project-space)}
.project-panel{scroll-margin-top:100px;container:project-banner / inline-size}
.work-banner{--banner-border:1px solid var(--line);display:grid;grid-template-columns:minmax(320px,34%) minmax(0,1fr);min-height:0;background:transparent;border:var(--banner-border);border-radius:8px;overflow:hidden;position:relative;isolation:isolate}
.banner-copy{padding:40px clamp(26px,3vw,54px);background:var(--glass);display:flex;flex-direction:column;justify-content:center;align-items:flex-start;min-width:0;border-right:var(--banner-border);cursor:text;-webkit-user-select:text;user-select:text}
.banner-copy h2{font-size:var(--heading);font-weight:500;letter-spacing:-.8px;line-height:1.35;margin:0 0 28px;color:var(--ink);overflow-wrap:break-word}
.banner-copy p{font-size:var(--text);line-height:1.95;color:var(--muted);max-width:370px;margin:0;text-wrap:pretty}
.banner-copy .banner-period{font-size:var(--text);line-height:1.5;color:var(--muted);letter-spacing:.04em;margin:-10px 0 20px;font-variant-numeric:tabular-nums}
.banner-media{display:block;position:relative;width:100%;min-width:0;min-height:0;aspect-ratio:1470 / 680;align-self:center;background:var(--cover-background);overflow:hidden;cursor:pointer}
.project-art{display:block;width:100%;height:100%;overflow:hidden}
.banner-media>.supplied-cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:var(--cover-focus,50% 50%);transform-origin:center;transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.banner-media:hover>.supplied-cover{transform:scale(1.02)}
.banner-media:focus-visible{outline-offset:-5px}
.banner-cta{position:absolute;right:26px;bottom:22px;display:flex;align-items:center;gap:12px;padding:8px 12px;z-index:2;color:var(--ink);background:var(--paper);font-size:14px;line-height:1.5;font-weight:500;border-radius:3px}
.banner-cta>span{font-size:var(--text);line-height:1;transition:transform .25s}
.banner-media:hover .banner-cta>span{transform:translate(2px,-2px)}
.panel-findn{--cover-focus:50% 46%}
.panel-atomic{--cover-focus:50% 44%}
.panel-fluid{--cover-focus:50% 40%}
.panel-fluid .supplied-cover{filter:saturate(.86) contrast(.94)}
.panel-tos,.panel-marketing{--cover-focus:50% 50%}
/* Match the cover backdrop while preserving the original three panels. */
.panel-tos .banner-media{container-type:inline-size}
.personalization-cover{position:absolute;inset:0;display:flex;justify-content:space-evenly;align-items:center;padding:4cqw 0;background:transparent}
.personalization-frame{flex:0 0 auto;width:auto;height:100%;aspect-ratio:var(--panel-ratio);min-width:0;min-height:0;overflow:hidden;border-radius:1.5cqw}
.personalization-art{display:block;width:100%;height:100%;overflow:hidden;transform-origin:center;transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.banner-media:hover .personalization-art{transform:scale(1.02)}

/* About: complete resume content, with clear reading sections. */
#aboutView{min-height:calc(100svh - 82px)}
.about{padding:64px clamp(24px,5vw,112px) 80px;max-width:1600px;margin:0 auto;background:transparent}
.about p,.about li{font-size:var(--text);line-height:1.95;color:var(--muted)}
.about-lead{display:grid;grid-template-columns:minmax(230px,28%) minmax(0,1fr);gap:64px;align-items:start;margin-bottom:64px}
.about-person{display:flex;align-items:center;gap:16px}
.about-person img{flex:none;width:96px;height:96px;border-radius:50%;object-fit:cover}
.about-person>div{min-width:0}
.about-person strong{font-size:var(--subheading);font-weight:500;display:block;color:var(--ink);line-height:1.4}
.about-person span{display:block;color:var(--muted);font-size:var(--text);line-height:1.8;margin-top:10px}
.about-intro p{margin:0 0 18px}
.about-intro p:last-child{margin-bottom:0}
.about-section{background:transparent;padding:44px 0 0;margin-top:44px;border-top:1px solid var(--line)}
.about-section>h2{font-size:var(--subheading);font-weight:500;line-height:1.4;margin:0 0 36px;color:var(--ink)}
.career-entry{display:grid;grid-template-columns:minmax(230px,28%) minmax(0,1fr);gap:64px;padding-bottom:44px}
.career-entry+.career-entry{padding-top:44px;border-top:1px solid var(--line)}
.career-entry:last-child{padding-bottom:0}
.career-meta h3{font-size:var(--subheading);font-weight:500;line-height:1.4;margin:0 0 12px;color:var(--ink)}
.career-meta p{margin:0 0 12px}
.career-meta time{font-variant-numeric:tabular-nums;white-space:nowrap}
.career-content{min-width:0}
.career-content .team-scope{margin:0 0 28px}
.career-topic+.career-topic{margin-top:24px}
.career-topic h4{font-size:var(--text);font-weight:500;line-height:1.6;color:var(--ink);margin:0 0 8px}
.career-topic p{margin:0}
.education-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:36px 64px}
.education-entry{min-width:0}
.education-entry .education-period{margin:0 0 10px;font-variant-numeric:tabular-nums}
.education-entry h3{font-size:var(--subheading);font-weight:500;line-height:1.4;margin:0 0 12px;color:var(--ink)}
.education-entry p{margin:0 0 4px}
.awards-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 64px;list-style:none;padding:0;margin:0}
.awards-list li{display:flex;align-items:baseline;gap:22px;padding:12px 0}
.awards-list time{flex:none;color:var(--ink);font-variant-numeric:tabular-nums}
.scholarships{margin:24px 0 0}
.patents-list{padding-left:20px;margin:0}
.patents-list li+li{margin-top:12px}
@media(max-width:1050px){.about-lead,.career-entry{grid-template-columns:minmax(200px,30%) minmax(0,1fr);gap:36px}.about-person{flex-direction:column;align-items:flex-start}.education-grid,.awards-list{column-gap:36px}}
@media(max-width:700px){.about{padding:38px 20px 50px}.about-lead,.career-entry{grid-template-columns:1fr;gap:26px}.about-lead{margin-bottom:38px}.about-person{flex-direction:row;align-items:center}.about-section{margin-top:36px;padding-top:32px}.about-section>h2{margin-bottom:28px}.career-entry{padding-bottom:32px}.career-entry+.career-entry{padding-top:32px}.career-meta p:last-child{margin-bottom:0}.education-grid,.awards-list{grid-template-columns:1fr}.education-grid{gap:28px}.awards-list li{padding:10px 0}}
footer{position:relative;z-index:1;padding:65px 6% 25px;background:transparent}
footer>div{display:flex;justify-content:space-between;gap:20px;padding-top:25px;font-size:var(--text);color:var(--muted)}
footer a:hover{color:var(--ink)}

/* Project introduction and original PPT viewer. */
.detail-top{padding:32px 5%}
.back-button{background:var(--paper);padding:0;color:var(--muted);font-size:var(--text)}
.back-button:hover{color:var(--ink)}
.detail-summary{max-width:1120px;margin-top:28px}
.detail-intro{font-size:var(--text);line-height:1.9;color:var(--muted);margin:0}
.ppt-viewer{margin:0 5% 64px}
.ppt-frame{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--paper)}
.ppt-track{position:relative;display:block;width:100%;aspect-ratio:16 / 9;overflow:hidden;touch-action:pan-y pinch-zoom;cursor:grab;-webkit-user-select:none;user-select:none}
.ppt-track::-webkit-scrollbar{display:none}
.ppt-track:focus-visible{outline:2px solid var(--muted);outline-offset:-3px}
.ppt-track.is-dragging{cursor:grabbing}
.ppt-slide{position:absolute;inset:0;width:100%;height:100%;min-width:0;margin:0;overflow:hidden}
/* White backplates belong to the original slides and video, not website surfaces. */
.ppt-canvas{position:absolute;inset:0;background:#fff;overflow:hidden}
.ppt-layer{position:absolute;display:block;max-width:none;object-fit:fill}
img.ppt-layer{pointer-events:none;-webkit-user-drag:none}
video.ppt-layer{cursor:default;background:#fff}
.ppt-controls{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-top:16px}
.ppt-pagination{display:flex;align-items:center;gap:12px}
.ppt-pagination button{display:grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--line);border-radius:5px;background:var(--paper);color:var(--ink);font-size:var(--subheading);transition:border-color .2s ease}
.ppt-pagination button:enabled:hover{border-color:var(--muted)}
.ppt-pagination button:disabled{color:var(--muted);cursor:default}
.ppt-counter{min-width:80px;text-align:center;font-size:var(--text);font-variant-numeric:tabular-nums;color:var(--muted)}
.next-project{background:var(--paper);padding:50px 5%;display:flex;justify-content:space-between;align-items:center;gap:24px;width:100%;text-align:left;border-top:1px solid var(--line)}
.next-project h2{font-size:var(--heading);font-weight:500;line-height:1.4;margin:15px 0 0;color:var(--ink)}
.next-project>span{font-size:var(--heading);color:var(--muted);transition:transform .25s ease}
.next-project:hover>span{color:var(--ink);transform:translate(3px,-3px)}

/* Responsive geometry preserves the type hierarchy across viewports. */
@media(max-width:1050px){.work-banner{grid-template-columns:minmax(256px,38%) minmax(0,1fr)}.banner-copy{padding:30px 24px}.banner-copy h2{margin-bottom:23px}.banner-copy p{line-height:1.85}.banner-cta{right:18px;bottom:18px}}
@media(max-width:850px){.header{height:72px}}
@media(max-width:700px){.works{--project-space:32px;padding:var(--project-space) 20px 48px}.work-banner{grid-template-columns:1fr}.banner-copy{padding:32px 28px 30px;border-right:0;border-bottom:var(--banner-border)}.banner-copy h2{margin-bottom:16px}.banner-copy p{max-width:none;line-height:1.85}.banner-copy .banner-period{margin:-3px 0 16px}.banner-cta{right:16px;bottom:15px}.next-project h2{font-size:var(--subheading)}}
@media(max-width:580px){.header{padding:0 6%;gap:8px}.brand{font-size:var(--text);gap:6px;letter-spacing:-.5px}.header nav{gap:4px}.header .nav-link{padding:9px 11px;min-height:40px}footer{padding:45px 6% 25px}footer>div{flex-wrap:wrap}.detail-top{padding:25px 6% 32px}.ppt-viewer{margin:0 6% 40px}.ppt-controls{justify-content:space-between;padding-top:12px}.ppt-pagination{gap:8px}.next-project{padding:32px 6%}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}.banner-media:hover>.supplied-cover,.banner-media:hover .personalization-art{transform:none}}

/* The same viewer enters the browser viewport, keeping page and media state. */
.ppt-tools{display:flex;align-items:center;gap:24px;min-width:0}
.ppt-fullscreen{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:9px 12px;border:1px solid var(--line);border-radius:5px;color:var(--muted);font-size:var(--text);white-space:nowrap;transition:color .2s ease,border-color .2s ease}
.ppt-fullscreen:hover{color:var(--ink);border-color:var(--muted)}
.ppt-fullscreen svg{width:18px;height:18px;flex:none}
.immersive-shell{position:fixed;inset:0;width:100%;height:100vh;height:100dvh;max-width:none;max-height:none;padding:0;margin:0;border:0;background:var(--paper);color:var(--ink);overflow:hidden;overscroll-behavior:contain}
.immersive-shell:not([open]){display:none}
.immersive-shell[open]{display:block}
.immersive-shell::backdrop{background:#000}
.ppt-viewer.is-immersive{display:grid;grid-template-rows:minmax(0,1fr) auto;width:100%;height:100%;margin:0;padding:max(8px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));background:#000}
.is-immersive .ppt-frame{display:grid;place-items:center;min-width:0;min-height:0;border:0;border-radius:0;container-type:size}
.is-immersive .ppt-track{width:min(100cqw,177.777778cqh);height:auto;max-width:100%;aspect-ratio:16 / 9;flex:none}
.is-immersive .ppt-controls{padding:10px 8px 0;gap:12px}
@media(max-width:700px){.ppt-tools{gap:12px}.ppt-fullscreen{gap:7px;padding:9px 10px}.is-immersive .ppt-controls{padding-left:0;padding-right:0}.is-immersive .ppt-pagination{gap:8px}}
@media(max-width:380px){.ppt-fullscreen{padding:9px 8px}.ppt-counter{min-width:64px}.ppt-controls{gap:8px}}

/* Desktop page gutters: twice the previous side spacing. Immersive viewing stays edge-to-edge. */
@media(min-width:1051px){
 .header,.detail-top,.next-project{padding-inline:10%}
 .works,.about{padding-inline:clamp(48px,10vw,224px)}
 .ppt-viewer:not(.is-immersive){margin-inline:10%}
 footer{padding-inline:12%}
}

/* Let the image set each wide card's height; compact copy before changing layout. */
@container project-banner (max-width:1440px){
 .banner-copy{padding:24px}
 .banner-copy h2{font-size:var(--subheading);line-height:1.35;margin:0 0 12px;letter-spacing:-.4px}
 .banner-copy p{font-size:14px;line-height:1.65;max-width:none}
 .banner-copy .banner-period{font-size:14px;line-height:1.5;margin:0 0 12px}
}
@container project-banner (max-width:900px){
 .work-banner{grid-template-columns:1fr}
 .banner-copy{padding:28px;border-right:0;border-bottom:var(--banner-border)}
}
@media(max-width:1050px){
 .work-banner{grid-template-columns:1fr}
 .banner-copy{border-right:0;border-bottom:var(--banner-border)}
}

/* One frosted layer per surface keeps text and project images crisp. */
.work-banner,.header{-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur)}
@media(max-width:700px){:root{--glass-blur:blur(14px) saturate(112%)}}
