:root{--paper:#fff;--ink:#171a21;--muted:#626a78;--blue:#245dff;--blue-hover:#1749d6;--line:#d4dae4;--soft:#f5f7fb;--ice:#f0f5ff;--max:1424px;--gutter:clamp(24px,3.65vw,72px);--ease:cubic-bezier(.22,1,.36,1);font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}

.enhanced .project-animation.js-only{display:block;width:100%;margin-bottom:23px;background:var(--soft);border:1px solid #e7ecf5;border-radius:6px;overflow:hidden}
.project-animation canvas{display:block;width:100%;height:auto;aspect-ratio:440/184}
.project-animation-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px 6px;color:var(--muted);font:11px ui-monospace,monospace}
.animation-toggle{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:8px;border:0;border-radius:4px;background:transparent;font:inherit;color:var(--blue)}
.animation-toggle:hover{background:#e5edff}
.animation-toggle:focus-visible{outline-offset:-3px}
.animation-icon{display:block;width:9px;height:11px;border-left:9px solid currentColor;border-top:5.5px solid transparent;border-bottom:5.5px solid transparent}
.animation-toggle[aria-pressed="true"] .animation-icon{border:0;border-inline:3px solid currentColor}
.architecture-animation canvas{aspect-ratio:400/610}
.cispa-animation canvas{aspect-ratio:440/250}
.scene-modes{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:4px;padding:10px 12px;border-bottom:1px solid #e7ecf5}
.scene-modes button{min-height:40px;padding:8px 10px;border:1px solid transparent;border-radius:4px;background:transparent;font-size:12px;color:var(--muted)}
.scene-modes button[aria-pressed="true"]{border-color:#b9ccff;background:#e5edff;color:var(--blue)}
.scene-modes button:hover{color:var(--blue)}
.scene-modes button:focus-visible{outline-offset:-2px}
.featured-project.forecasting-feature{grid-template-columns:1fr 1fr;padding:30px;gap:48px}
body:not(.enhanced) .featured-project.forecasting-feature{display:block}
.forecasting-feature .architecture-animation{max-width:400px;justify-self:center;margin:0;background:#f9fbff}
.featured-label{font:12px ui-monospace,monospace;letter-spacing:.09em;color:var(--blue);margin-bottom:18px}
.feature-copy .architecture-explainer{font-size:16px!important;line-height:1.6;margin-top:20px}
.project-card .delaunay-visual{position:relative;z-index:1;width:100%;padding:16px;margin-bottom:23px;border:1px solid #e7ecf5;border-radius:6px;background:var(--soft)}
.delaunay-visual .feature-canvas-wrap canvas{max-height:260px}
@media(max-width:900px){.featured-project.forecasting-feature{grid-template-columns:1fr;gap:28px}.forecasting-feature .architecture-animation{max-width:400px}.forecasting-feature .feature-copy{width:100%}}
@media(max-width:680px){.featured-project.forecasting-feature{padding:20px 16px 26px;gap:24px}.architecture-animation .project-animation-footer{padding-inline:8px;flex-wrap:wrap;gap:0;font-size:10px}.architecture-animation .project-animation-footer>span{flex:1}.featured-label{font-size:11px;margin-bottom:14px}.project-card .delaunay-visual{padding:12px}}
@media(max-width:360px){.header-inner{gap:8px}.site-header .wordmark{font-size:28px}.header-inner .header-actions{gap:8px}}
@media print{.enhanced .project-animation.js-only{display:none!important}.featured-project.forecasting-feature{display:block!important}}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:116px}body{margin:0;min-width:280px}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:default}a{color:inherit;text-decoration:none}button{color:inherit}h1,h2,h3,p,ul{margin:0}h1,h2,h3{font-weight:700}h2{font-size:clamp(40px,4.5vw,68px);line-height:1.05;letter-spacing:-.05em}h3{letter-spacing:-.035em}p,li{font-size:18px;line-height:1.55}p{color:var(--muted)}button:focus-visible,a:focus-visible,summary:focus-visible,canvas:focus-visible{outline:3px solid var(--blue);outline-offset:5px}input{accent-color:var(--blue)}::selection{background:#dbe5ff;color:#173494}[hidden]{display:none!important}.container{width:calc(100% - var(--gutter)*2);max-width:var(--max);margin-inline:auto}.section{padding-block:104px}.section-index{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:13px;font-weight:500;letter-spacing:.09em;margin-bottom:24px;color:#475166}.section-lead{font-size:21px;line-height:1.5;max-width:480px}.button{display:inline-flex;justify-content:center;align-items:center;min-height:54px;padding:14px 25px;font-size:17px;line-height:1.25;font-weight:600;border:1px solid transparent;border-radius:5px;transition:background .2s,color .2s,border-color .2s,transform .25s var(--ease);text-align:center}.button:hover{transform:translateY(-2px)}.button-primary{background:var(--blue);color:white}.button-primary:hover{background:var(--blue-hover)}.button-outline{background:transparent;border-color:#bac3d2}.button-outline:hover{border-color:var(--blue);color:var(--blue)}.button-dark{background:var(--ink);color:white}.button-dark:hover{background:var(--blue)}.button-light-outline{background:transparent;color:white;border-color:#7e8694}.button-light-outline:hover{border-color:white;background:#292f3a}.text-link{color:var(--blue);text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:1px}.text-link:hover{text-decoration-thickness:2px}.text-button{border:0;background:none;padding:10px 0;display:inline-flex;gap:20px;align-items:center;font-size:16px;font-weight:600}.text-button:hover{color:var(--blue)}.plus{font-size:24px;font-weight:400;line-height:1;transition:transform .3s}.text-button:hover .plus{transform:rotate(90deg)}.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}.skip-link{position:fixed;left:20px;top:-100px;z-index:1000;background:var(--blue);color:white;padding:14px 20px}.skip-link:focus{top:12px}.js-only{display:none}.enhanced .js-only{display:inline-flex}.enhanced .fallback-details{display:none}.noscript-notice{padding:16px var(--gutter);font-size:14px;background:var(--soft)}

.site-header{height:88px;position:sticky;top:0;z-index:20;background:rgba(255,255,255,.96);border-bottom:1px solid var(--line);backdrop-filter:blur(15px)}.header-inner{height:100%;display:flex;align-items:center;justify-content:space-between;gap:28px}.wordmark{font-size:39px;font-weight:800;letter-spacing:-.065em;line-height:1}.wordmark span{color:var(--blue)}#main-nav{display:flex;align-items:center;gap:46px}#main-nav a{font-size:17px;position:relative;padding:12px 0}#main-nav a:after{content:'';position:absolute;bottom:5px;height:2px;left:0;width:100%;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform .25s var(--ease)}#main-nav a:hover:after,#main-nav a[aria-current="location"]:after{transform:scaleX(1)}.header-actions{display:flex;align-items:center;gap:32px}.language-switch{gap:6px;align-items:center;font-size:16px;color:var(--muted)}.language-switch button{border:0;background:none;min-height:44px;min-width:32px;padding:6px 2px;color:var(--muted)}.language-switch button[aria-pressed="true"]{color:var(--blue);font-weight:700}.header-contact{min-height:48px;padding:12px 23px;font-weight:500}.menu-toggle,.enhanced .menu-toggle{display:none}

.hero-grid{display:grid;grid-template-columns:1.25fr 1fr;align-items:center;gap:30px;padding:57px 0 42px}.hero h1{font-size:clamp(84px,8.05vw,124px);line-height:.95;letter-spacing:-.064em}.hero h1 span{color:var(--blue)}.hero-tagline{font-size:clamp(32px,3.65vw,56px);line-height:1.07;font-weight:700;letter-spacing:-.043em;color:var(--blue);margin-top:24px}.hero-intro{font-size:clamp(18px,1.57vw,24px);line-height:1.43;max-width:740px;margin-top:24px}.hero-actions{display:flex;flex-wrap:wrap;gap:20px;margin-top:30px}.hero-actions .button{min-height:60px;padding-inline:34px}.availability{font-size:16px;margin-top:12px}.hero-visual{min-width:0;align-self:stretch;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:12px}.hero-visual canvas{display:block;width:100%;aspect-ratio:1;height:auto;touch-action:pan-y;cursor:grab}.hero-visual canvas:active{cursor:grabbing}.mesh-controls{gap:12px;align-items:center}.mini-button{border:1px solid #bac3d2;border-radius:4px;background:white;min-height:40px;padding:8px 20px;font-size:14px;transition:all .2s}.mini-button[aria-pressed="true"]{background:var(--blue);color:white;border-color:var(--blue)}.mini-button:hover{border-color:var(--blue)}.academic-rail{border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1.1fr 1fr;padding:22px 0 26px}.academic-rail a{display:flex;flex-direction:column;align-items:center;gap:7px;padding:3px 20px;text-align:center}.academic-rail a+a{border-left:1px solid var(--line)}.academic-rail strong{font-size:23px;letter-spacing:-.03em}.academic-rail span{font-size:16px;color:var(--muted)}.academic-rail a:hover strong{color:var(--blue)}

.projects-section{padding-top:84px;background:linear-gradient(var(--soft) 0px,#fff 300px)}.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:70px;margin-bottom:42px}.section-heading .section-lead{max-width:420px;padding-bottom:4px}.project-toolbar{width:100%;border-bottom:1px solid var(--line);margin-bottom:26px}.filters{display:flex;gap:30px;flex-wrap:wrap}.filters button{position:relative;padding:16px 12px 18px;border:0;background:none;color:#454d5a;font-size:16px}.filters button:after{content:'';position:absolute;bottom:-1px;left:0;width:100%;height:3px;background:var(--blue);transform:scaleX(0);transition:transform .25s var(--ease)}.filters button[aria-pressed="true"]{color:var(--blue);font-weight:700}.filters button[aria-pressed="true"]:after{transform:scaleX(1)}.filters button:hover{color:var(--blue)}.featured-project{display:grid;grid-template-columns:.96fr 1.04fr;gap:46px;background:var(--soft);border-radius:7px;padding:30px 36px 30px 20px;margin-bottom:10px;align-items:center}.feature-visual{display:grid;grid-template-columns:minmax(0,1fr) 144px;align-items:center;min-width:0;gap:12px}.feature-canvas-wrap{position:relative;min-width:0}.feature-canvas-wrap canvas{display:block;width:100%;aspect-ratio:1;height:auto;touch-action:pan-y;cursor:grab}.canvas-caption{display:block;text-align:center;color:#6b7380;font-family:ui-monospace,monospace;font-size:12px}.enhanced .feature-controls{display:flex;flex-direction:column;gap:26px}.feature-controls fieldset{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.feature-controls legend{font-size:14px;font-weight:600;margin-bottom:14px}.feature-controls label{display:flex;align-items:center;gap:8px;font-size:14px;line-height:1.35}.feature-controls input{width:16px;height:16px;margin:0;flex-shrink:0}.rotation-check{padding-top:20px;border-top:1px solid var(--line)}.feature-copy h3{font-size:clamp(28px,2.5vw,36px);line-height:1.12;margin:10px 0 18px}.feature-copy>p:not(.project-context){font-size:20px}.project-context{font-size:14px;line-height:1.4;color:#5b6574}.tags{list-style:none;display:flex;flex-wrap:wrap;gap:8px;padding:0;margin:20px 0 24px}.tags li{font-size:13px;line-height:1.3;border:1px solid var(--line);border-radius:5px;padding:7px 10px}.feature-copy .button{min-height:44px;font-size:15px;padding:11px 20px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:54px}.project-card{position:relative;padding:28px 0 24px;border-bottom:1px solid var(--line);min-width:0;display:flex;flex-direction:column;align-items:flex-start}.project-card h3{font-size:26px;line-height:1.2;margin:9px 0 11px}.project-card>p:not(.project-context){font-size:18px;line-height:1.55}.project-card .text-button{margin-top:18px}.project-card .text-button:after{position:absolute;inset:0;content:''}.project-card:hover h3{color:var(--blue)}.project-card:has(.text-button:hover){border-bottom-color:var(--blue)}.more-projects{justify-content:space-between;align-items:center;gap:25px;width:100%;padding-top:25px}.more-projects p{font-size:16px}.more-projects .button{min-height:44px;white-space:nowrap;font-size:15px;padding:11px 20px}.open-source{display:grid;grid-template-columns:260px 1fr;gap:45px;padding:30px;background:var(--soft);border-radius:6px;margin-top:40px}.open-source h3{font-size:23px;margin-bottom:8px}.open-source p{font-size:16px;margin-bottom:12px}.open-source .text-link{font-size:14px}.repo-list{min-width:0}.github-profile{display:inline-block;color:var(--blue);font-weight:600;font-size:16px;margin-bottom:12px}.repo-row{display:grid;grid-template-columns:1fr 1.5fr auto;gap:20px;align-items:start;border-top:1px solid var(--line);padding:13px 0;font-size:14px;line-height:1.45}.repo-row strong{font-weight:600;color:var(--blue);overflow-wrap:anywhere}.repo-row>span{color:var(--muted)}.repo-row .repo-action{color:var(--blue);white-space:nowrap}.repo-row:hover strong,.repo-row:hover .repo-action{text-decoration:underline;text-underline-offset:4px}

.experience-layout{display:grid;grid-template-columns:.8fr 1.2fr;gap:75px}.experience-heading .section-lead{margin-top:26px}.experience-heading h2{font-size:clamp(42px,4.25vw,64px)}.experience-item{border-top:1px solid var(--line);padding:25px 0 36px}.experience-title{display:flex;gap:20px;align-items:start;justify-content:space-between}.experience-title h3{font-size:30px;line-height:1.15}.date{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.6;letter-spacing:.03em;white-space:nowrap;padding-top:6px}.role{font-size:23px;line-height:1.4;color:var(--blue);font-weight:600;margin:8px 0 15px}.bullet-list{padding-left:20px;margin:16px 0 22px}.bullet-list li{font-size:17px;line-height:1.6;padding-left:4px;margin:5px 0}.bullet-list li::marker{color:var(--blue)}details summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:24px;border:1px solid #b7c0cf;border-radius:4px;font-size:14px;min-height:42px;padding:8px 15px;font-weight:600}details summary::-webkit-details-marker{display:none}details[open] summary .plus{transform:rotate(45deg)}details[open] .bullet-list{padding:18px 18px 18px 38px;background:var(--soft);border-left:2px solid var(--blue)}.skills{border-top:1px solid var(--line);margin-top:50px;padding-top:34px}.skills h2{font-size:clamp(36px,3.5vw,54px);max-width:890px;margin-bottom:32px}.skill-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:50px}.skill-grid>div{border-top:1px solid var(--line);padding-top:18px}.skill-grid h3{font-size:23px;margin-bottom:12px}.skill-grid p{font-size:17px}

.education-section{padding-top:35px;padding-bottom:65px}.education-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:58px;margin-top:40px}.education-item{border-top:4px solid var(--blue);padding-top:17px}.education-item h3{font-size:38px;color:var(--blue);line-height:1.15}.education-degree{color:var(--ink);font-size:20px;margin:8px 0 16px}.education-item>p:not(.education-degree){font-size:20px;max-width:610px}.gpa{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:16px;line-height:1.7;color:var(--ink);margin-top:20px}.prep-line{border-top:1px solid var(--line);padding-top:24px;margin-top:35px;font-size:15px}.singapore{background:var(--ice);padding:70px 0}.singapore-grid{display:grid;grid-template-columns:1fr 1fr;gap:58px;align-items:start}.singapore-word{font-size:clamp(58px,7.2vw,112px);font-weight:700;letter-spacing:-.065em;line-height:1;color:var(--blue)}.nus-name{font-size:18px;font-weight:600;color:var(--ink);margin-top:20px}.singapore-left>p:not(.singapore-word):not(.nus-name){font-size:16px;margin-top:7px}.singapore-copy h2{font-size:clamp(32px,2.9vw,44px);letter-spacing:-.035em;line-height:1.13;margin-bottom:22px}.singapore-copy>p{font-size:18px}.singapore-copy .gpa{font-size:16px}.course-list{margin-top:10px;font-size:16px!important;line-height:1.65}.nus-projects{border-top:1px solid #cfdaf0;padding-top:20px;margin-top:26px;display:flex;flex-direction:column;align-items:flex-start;gap:12px}.nus-projects h3{font-size:16px;letter-spacing:0;font-weight:600}.nus-projects a{font-size:17px}.singapore-coordinate{display:flex;align-items:center;gap:18px;max-width:450px;margin-top:66px;font-family:ui-monospace,monospace;font-size:12px;letter-spacing:.1em;color:var(--blue)}.route-line{height:1px;background:#a9bfff;position:relative;flex:1}.route-line:before,.route-line:after{content:'';position:absolute;width:6px;height:6px;top:-2.5px;border-radius:50%;background:var(--blue)}.route-line:before{left:0}.route-line:after{right:0}.route-line i{position:absolute;top:-3px;height:7px;width:7px;left:0;border-radius:50%;background:var(--blue);animation:journey 8s ease-in-out infinite}@keyframes journey{0%,20%{left:0}70%,100%{left:calc(100% - 7px)}}

.contact-section{background:var(--ink);color:white;padding:65px 0 28px}.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:58px}.contact-grid h2{font-size:clamp(40px,4.2vw,64px)}.contact-grid p{color:#c3c8d1;font-size:17px;margin-top:20px;max-width:540px}.contact-actions{padding-top:6px}.contact-actions .footer-label{font-size:14px;margin:0 0 10px;color:#c3c8d1}.email-link{font-size:clamp(18px,1.85vw,28px);letter-spacing:-.02em;display:block;overflow-wrap:anywhere;width:fit-content}.email-link:hover{text-decoration:underline;text-underline-offset:7px}.contact-actions .button{min-height:42px;font-size:14px;padding:9px 18px;margin-top:20px}.contact-actions #copy-status{font-size:14px;min-height:20px;margin:7px 0 22px;max-width:100%}.social-links{display:flex;gap:30px;align-items:center}.social-links a{font-size:20px;color:#83a5ff;text-decoration:underline;text-underline-offset:5px}.social-links a:hover{color:white}.footer-bottom{display:flex;justify-content:space-between;align-items:center;gap:24px;border-top:1px solid #505662;padding-top:23px;margin-top:46px}.footer-bottom a,.footer-bottom p{font-size:13px;color:#cbd0d9}.footer-bottom a:hover{color:white}

dialog{border:0;border-radius:12px;box-shadow:0 30px 100px #0004;max-width:800px;width:calc(100% - 40px);max-height:calc(100dvh - 64px);padding:0;color:var(--ink);background:white;overscroll-behavior:contain}dialog::backdrop{background:rgba(18,25,42,.52);backdrop-filter:blur(5px)}.dialog-top{position:sticky;top:0;background:white;border-bottom:1px solid var(--line);padding:15px 32px;display:flex;align-items:center;justify-content:space-between;z-index:1}.dialog-top>span{font-size:13px;font-family:ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.dialog-close{display:flex;gap:18px;align-items:center;background:none;border:0;padding:5px;font-size:14px;min-height:38px}.dialog-close span{font-size:27px;font-weight:400}.dialog-close:hover{color:var(--blue)}#dialog-content{padding:30px 38px 40px}#dialog-content h2{font-size:40px;line-height:1.12;letter-spacing:-.04em;margin-top:12px}.detail-section{margin-top:26px}.detail-section h3{font-size:17px;letter-spacing:0;margin-bottom:10px;color:var(--blue)}.detail-section p,.detail-section li{font-size:17px}.detail-takeaway{padding:22px;background:var(--ice);border-radius:5px;margin-bottom:28px}.not-found{padding-top:90px}.not-found h1{font-size:clamp(50px,8vw,110px);line-height:1;letter-spacing:-.06em;margin:90px 0 30px}.not-found p{margin-bottom:30px}.reveal{opacity:1;transform:none}.motion-enabled .reveal.pending-reveal{opacity:0;transform:translateY(20px)}.motion-enabled .reveal{transition:opacity .65s var(--ease),transform .65s var(--ease)}

@media(min-width:1600px){.hero-grid{padding-block:70px 50px}.hero-visual canvas{max-width:640px}.hero-tagline{font-size:56px}}
@media(max-width:1200px){#main-nav{gap:25px}.header-actions{gap:22px}.hero-grid{grid-template-columns:1.1fr 1fr;gap:24px}.hero h1{font-size:8.2vw}.hero-tagline{font-size:3.5vw}.hero-intro{font-size:19px}.hero-actions{gap:12px}.hero-actions .button{padding-inline:24px;min-height:54px;font-size:16px}.academic-rail strong{font-size:20px}.academic-rail span{font-size:14px}.section-heading{gap:35px}.section-heading .section-lead{max-width:350px;font-size:19px}.featured-project{gap:24px;padding:24px}.feature-visual{grid-template-columns:minmax(0,1fr) 116px;gap:0}.feature-controls label{font-size:13px}.feature-copy>p:not(.project-context){font-size:18px}.experience-layout{gap:44px;grid-template-columns:.8fr 1.2fr}.experience-title{flex-direction:column;gap:3px}.experience-title .date{order:-1}.experience-title h3{font-size:28px}.open-source{grid-template-columns:200px 1fr;gap:30px}.repo-row{grid-template-columns:1fr 1.5fr}.repo-action{display:none}.education-item h3{font-size:34px}.education-item>p:not(.education-degree){font-size:18px}.singapore-grid{gap:40px}.contact-grid{gap:40px}}
@media(max-width:900px){:root{--gutter:30px}.site-header{height:78px}.wordmark{font-size:32px}#main-nav{gap:20px}#main-nav a{font-size:15px}.header-actions{gap:16px}.header-contact{padding-inline:15px;font-size:15px;min-height:44px}.hero-grid{padding-top:50px;gap:8px}.hero h1{font-size:9vw}.hero-tagline{font-size:3.8vw}.hero-intro{font-size:18px}.hero-visual{align-self:center}.hero-actions .button{min-height:46px;padding:12px 17px;font-size:14px}.hero-actions{gap:10px;margin-top:24px}.availability{font-size:14px}.academic-rail a{padding-inline:10px}.academic-rail strong{font-size:17px}.academic-rail span{font-size:13px}.section{padding-block:74px}.section-heading{display:block}.section-heading .section-lead{margin-top:25px;max-width:530px}.featured-project{grid-template-columns:1fr;gap:28px;padding:30px}.feature-visual{max-width:540px;margin:auto;grid-template-columns:1fr 145px;width:100%}.feature-canvas-wrap canvas{max-height:310px}.feature-copy h3{font-size:32px}.feature-copy>p:not(.project-context){font-size:20px}.project-grid{column-gap:30px}.project-card h3{font-size:24px}.more-projects{align-items:flex-start}.open-source{grid-template-columns:1fr;gap:20px}.open-source>div:first-child{display:grid;grid-template-columns:1fr auto;column-gap:20px}.open-source>div:first-child>p{grid-column:1}.open-source>div:first-child>a{grid-column:2;grid-row:1}.experience-layout{grid-template-columns:1fr;gap:32px}.experience-heading h2{font-size:50px}.experience-title{flex-direction:row;align-items:center}.experience-title .date{order:0}.experience-list{margin-top:8px}.skills{margin-top:30px}.skill-grid{gap:25px}.skill-grid h3{font-size:21px}.skill-grid p{font-size:16px}.education-section{padding-top:10px}.education-grid{gap:32px}.education-item h3{font-size:31px}.education-degree{font-size:17px}.education-item>p:not(.education-degree){font-size:17px}.singapore-grid{grid-template-columns:1fr;gap:44px}.singapore-word{font-size:90px}.singapore-coordinate{margin-top:30px;max-width:100%}.singapore-copy h2{font-size:40px}.contact-grid{grid-template-columns:1fr;gap:35px}.contact-grid h2{font-size:54px}.email-link{font-size:26px}.footer-bottom{align-items:flex-start}.footer-bottom p{text-align:right;line-height:1.6}}
@media(max-width:680px){:root{--gutter:23px}html{scroll-padding-top:95px}.site-header{height:72px}.header-inner{gap:15px}.wordmark{font-size:31px}.header-actions{gap:14px}.header-contact{display:none}.language-switch{font-size:13px;gap:2px}.language-switch button{min-width:27px;font-size:13px}.enhanced .menu-toggle{display:flex;align-items:center;gap:9px;border:0;background:none;font-size:13px;padding:10px 0 10px 5px;min-height:44px}.menu-lines{display:block;width:18px;height:10px;border-top:1.5px solid var(--ink);border-bottom:1.5px solid var(--ink);transition:transform .25s}.menu-toggle[aria-expanded="true"] .menu-lines{transform:rotate(-45deg)}#main-nav{position:absolute;left:0;right:0;top:71px;display:flex;flex-direction:column;align-items:stretch;gap:0;background:white;padding:8px var(--gutter) 20px;border-bottom:1px solid var(--line);box-shadow:0 16px 22px #1111}.enhanced #main-nav{display:none}.enhanced #main-nav.menu-open{display:flex}#main-nav a{padding:15px 0;font-size:18px}#main-nav a:after{bottom:7px;width:30px}body:not(.enhanced) .hero{padding-top:180px}.hero-grid{grid-template-columns:1fr;padding:38px 0 27px;gap:24px}.hero h1{font-size:clamp(59px,16.2vw,96px);line-height:.97;letter-spacing:-.061em}.hero-tagline{font-size:clamp(23px,6.3vw,37px);line-height:1.13;margin-top:20px;letter-spacing:-.035em}.hero-intro{font-size:17px;line-height:1.55;margin-top:19px;max-width:550px}.hero-actions{gap:10px;margin-top:24px}.hero-actions .button{min-height:48px;padding-inline:17px;font-size:14px}.availability{font-size:13px;margin-top:13px}.hero-visual{width:100%;max-width:390px;justify-self:center;gap:0;position:relative;margin-top:0}.hero-visual canvas{max-height:320px;aspect-ratio:1.1}.mesh-controls{gap:10px}.mini-button{min-height:38px;font-size:13px;padding:8px 17px}.academic-rail{padding:7px 0 13px;grid-template-columns:1fr}.academic-rail a{align-items:flex-start;text-align:left;padding:15px 0;gap:4px}.academic-rail a+a{border-left:0;border-top:1px solid var(--line)}.academic-rail strong{font-size:19px}.academic-rail span{font-size:14px}.section{padding-block:60px}h2{font-size:38px;line-height:1.08;letter-spacing:-.045em}.section-index{font-size:12px;margin-bottom:18px}.section-heading{margin-bottom:22px}.section-heading .section-lead{font-size:17px;margin-top:22px}.filters{gap:7px;justify-content:space-between;width:100%}.filters button{padding:15px 3px;font-size:13px;min-height:46px}.project-toolbar{margin-bottom:22px}.featured-project{padding:20px 17px 26px;gap:20px}.feature-visual{grid-template-columns:minmax(0,1fr) 105px;gap:0}.feature-controls label{font-size:12px;gap:6px}.feature-controls legend{font-size:13px;margin-bottom:12px}.feature-controls input{width:14px;height:14px}.feature-controls fieldset{gap:11px}.enhanced .feature-controls{gap:15px}.rotation-check{padding-top:14px}.feature-canvas-wrap canvas{aspect-ratio:1;max-height:220px}.canvas-caption{font-size:10px}.feature-copy h3{font-size:28px;margin-top:9px;margin-bottom:14px}.feature-copy>p:not(.project-context){font-size:17px}.project-context{font-size:13px}.tags{margin:18px 0 21px;gap:6px}.tags li{font-size:12px;padding:6px 8px}.feature-copy .button{font-size:14px;min-height:44px}.project-grid{grid-template-columns:1fr;gap:0}.project-card{padding-block:25px 21px}.project-card h3{font-size:25px}.project-card>p:not(.project-context){font-size:16px}.project-card .text-button{font-size:14px;margin-top:13px;min-height:44px}.more-projects{flex-direction:column;align-items:flex-start;gap:18px}.more-projects p{font-size:14px}.open-source{margin-top:30px;padding:23px 18px;gap:14px}.open-source>div:first-child{display:block}.open-source h3{font-size:23px}.open-source p{font-size:15px}.github-profile{font-size:14px;margin-top:8px}.repo-row{grid-template-columns:1fr;gap:5px;padding:16px 0}.repo-row strong{font-size:15px}.repo-row>span{font-size:14px}.repo-row .repo-action{display:block;margin-top:4px;font-size:13px}.experience-layout{gap:28px}.experience-heading h2{font-size:40px}.experience-heading .section-lead{font-size:18px;margin-top:22px}.experience-item{padding-top:22px;padding-bottom:29px}.experience-title{flex-direction:column;align-items:flex-start;gap:9px}.experience-title .date{order:-1;padding-top:0;font-size:12px}.experience-title h3{font-size:28px}.role{font-size:20px;margin:7px 0 14px}.experience-item>p:not(.role){font-size:16px}.bullet-list li{font-size:16px;line-height:1.6}.bullet-list{margin-block:16px 21px}.skills{padding-top:27px;margin-top:20px}.skills h2{font-size:34px;margin-bottom:28px}.skill-grid{grid-template-columns:1fr;gap:25px}.skill-grid>div{padding-top:15px}.skill-grid h3{font-size:23px;margin-bottom:10px}.skill-grid p{font-size:16px}.education-section{padding-top:5px;padding-bottom:45px}.education-grid{grid-template-columns:1fr;gap:32px;margin-top:30px}.education-item h3{font-size:32px}.education-degree{font-size:17px}.education-item>p:not(.education-degree){font-size:17px}.gpa{font-size:14px}.prep-line{font-size:14px;line-height:1.7;margin-top:30px}.singapore{padding:45px 0}.singapore-grid{gap:35px}.singapore-word{font-size:clamp(49px,14vw,86px)}.nus-name{font-size:16px;margin-top:18px}.singapore-left>p:not(.singapore-word):not(.nus-name){font-size:14px}.singapore-coordinate{font-size:10px;gap:14px;margin-top:30px}.singapore-copy h2{font-size:32px;line-height:1.15}.singapore-copy>p{font-size:16px}.course-list{font-size:15px!important}.nus-projects a{font-size:16px}.contact-section{padding-top:46px;padding-bottom:24px}.contact-grid{gap:28px}.contact-grid h2{font-size:40px}.contact-grid p{font-size:16px}.email-link{font-size:18px;line-height:1.5}.contact-actions .footer-label{font-size:13px}.social-links a{font-size:18px}.footer-bottom{flex-direction:column;gap:12px;margin-top:32px;padding-top:23px}.footer-bottom p{text-align:left;font-size:12px}.footer-bottom a{font-size:13px}dialog{width:calc(100% - 22px);max-height:calc(100dvh - 24px);border-radius:8px}.dialog-top{padding:12px 20px}#dialog-content{padding:23px 24px 30px}#dialog-content h2{font-size:29px}.detail-section p,.detail-section li{font-size:16px}.detail-takeaway{padding:17px}.not-found{padding-top:45px}.not-found h1{font-size:54px;margin-top:65px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.motion-enabled .reveal.pending-reveal{opacity:1;transform:none}.button:hover{transform:none}}
@media print{.site-header,.hero-visual,.feature-visual,.js-only,.project-toolbar,.more-projects,dialog,.singapore-coordinate{display:none!important}.container{width:100%;max-width:none}.section{padding:24px 0}.hero-grid{display:block;padding:0}.hero h1{font-size:48px}.hero-tagline{font-size:26px}.hero-intro{font-size:16px}.academic-rail{margin-top:24px}.academic-rail strong{font-size:15px}.academic-rail span{font-size:12px}.featured-project{display:block;background:white;padding:0}.project-card{break-inside:avoid}.project-card[hidden]{display:flex!important}.experience-layout,.contact-grid,.singapore-grid{display:block}.experience-item{break-inside:avoid}.education-section{padding-top:20px}.singapore{background:white;padding-block:24px}.singapore-word{font-size:45px}.singapore-left{margin-bottom:20px}.contact-section{background:white;color:var(--ink);padding:24px 0}.contact-section p,.contact-section a{color:var(--ink)}.contact-grid h2{font-size:30px}h2{font-size:32px}.skills h2{font-size:30px}.reveal,.motion-enabled .reveal.pending-reveal{opacity:1;transform:none}.footer-bottom{margin-top:22px}.email-link{font-size:18px}a[href^="mailto:"]{text-decoration:none}}

/* Small-screen controls keep a readable minimum size. */
body:has(dialog[open]){overflow:hidden}
@media(max-width:680px){.canvas-caption,.singapore-coordinate{font-size:12px}.feature-controls label,.feature-controls legend{font-size:14px}.filters button,.language-switch,.language-switch button{font-size:14px}}

.hero-artwork{position:relative;width:100%;aspect-ratio:1;display:grid;place-items:center}
.hero-artwork canvas{opacity:.42}
.hero-portrait-link{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;width:clamp(230px,26vw,380px);max-width:74%;border-radius:50%}
.hero-portrait{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:cover;border:6px solid white;border-radius:50%;box-shadow:0 12px 36px #171a2114;transition:box-shadow .2s}
.hero-portrait-link:hover .hero-portrait{box-shadow:0 12px 40px #245dff33}
.portrait-link-label{position:absolute;left:50%;bottom:-12px;transform:translateX(-50%);display:flex;align-items:center;gap:12px;padding:9px 18px;background:var(--blue);color:white;border:3px solid white;border-radius:30px;font-size:14px;font-weight:600;white-space:nowrap}
.organization-logo{display:block;object-fit:contain;width:148px;height:88px;flex-shrink:0}
.logo-centralesupelec{object-fit:cover}
.logo-mva{width:176px}
.logo-nus{width:176px;height:110px}
.logo-sfr{width:56px;height:56px}
.logo-bnp{width:156px;height:98px}
.academic-rail a{justify-content:center}
.academic-rail .organization-logo{width:144px;height:76px}
.academic-rail .logo-mva{width:220px}
.education-item>.logo-mva{width:260px;height:88px}
.singapore-left>.organization-logo{width:224px;height:139px;margin-bottom:24px}
.education-item>.organization-logo{margin-bottom:18px}
.experience-brand{display:flex;align-items:center;gap:24px;margin-bottom:12px}
.experience-brand .experience-title{flex:1;min-width:0}
.project-affiliation{display:flex;align-items:center;gap:14px;min-height:64px;width:100%}
.project-affiliation .organization-logo{width:80px;height:64px}
.project-affiliation .logo-nus{width:104px;height:64px}
.project-visual{display:flex;align-items:center;width:100%;height:320px;margin-bottom:20px;border:1px solid #e7ecf5;border-radius:8px;background:var(--soft);overflow:hidden}
.enhanced .project-visual .project-animation.js-only{display:flex;flex-direction:column;justify-content:center;height:100%;margin:0;border:0;border-radius:0}
.project-visual .project-animation canvas{flex:1;min-height:0;height:0;aspect-ratio:auto}
.project-visual .project-animation-footer,.project-visual .scene-modes{flex-shrink:0}
.project-card .project-visual .delaunay-visual{height:100%;margin:0;border:0;border-radius:0}
.project-visual .feature-canvas-wrap canvas{max-height:250px}
body:not(.enhanced) .project-visual:not(:has(.delaunay-visual)){display:none}
.contact-actions a[download]{margin-right:12px}
@media(max-width:900px){.experience-brand{align-items:flex-start}.experience-brand .experience-title{flex-direction:column;align-items:flex-start}.experience-brand .date{order:-1}.logo-bnp{width:132px;height:83px}}
@media(max-width:680px){.hero-visual{grid-row:1}.hero-copy{grid-row:2}.hero-artwork{max-width:300px}.hero-artwork canvas{max-height:none;aspect-ratio:1}.hero-portrait-link{width:220px}.hero-portrait{border-width:5px}.hero-visual .mesh-controls{margin-top:12px}.hero-grid{gap:30px;padding-top:26px}.portrait-link-label{font-size:13px;padding:7px 15px}.experience-brand{flex-direction:column;gap:14px}.experience-brand .organization-logo{margin-bottom:0}.project-visual{height:280px}.project-visual .feature-canvas-wrap canvas{max-height:220px}.academic-rail a{align-items:flex-start}.academic-rail .organization-logo{width:128px;height:74px;margin:0 0 4px}.education-item>.organization-logo{width:160px;height:96px;margin-bottom:12px}}
@media print{.hero-visual{display:block!important;width:160px;margin:0 0 20px}.hero-artwork{width:160px}.hero-artwork canvas,.portrait-link-label,.hero-visual .mesh-controls,.project-visual{display:none!important}.hero-portrait-link{width:160px;max-width:100%}}
@media(max-width:680px){.academic-rail .logo-mva{width:220px;height:84px}.education-item>.logo-mva{width:240px;height:96px}}
