/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-style:solid}}}.static{position:static}.container{width:100%}.contents{display:contents}.flex{display:flex}.grid{display:grid}.resize{resize:both}.border{border-style:var(--tw-border-style);border-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}:root{--bg:#faf9f5;--panel:#f0efe8;--text:#141413;--muted:#6b6963;--accent:#d97757;--accent-blue:#6a9bcc;--accent-green:#788c5d;--border:#e8e6dc;--border-hover:#b0aea5;--card-bg:#fff;--card-border:#e8e6dc;--header-h:68px}*{box-sizing:border-box}body,html{background:var(--bg);color:var(--text);scroll-behavior:smooth;margin:0;padding:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji}#ripple-overlay{z-index:0;pointer-events:none;--rx:60%;--ry:20%;background:radial-gradient(800px 800px at var(--rx)var(--ry),#d977570f,#d9775700 70%);position:fixed;inset:0}a{color:inherit;text-decoration:none}.container{width:min(1200px,92vw);margin:0 auto}header.site-header{z-index:100;backdrop-filter:blur(10px);border-bottom:1px solid var(--border);background:linear-gradient(#faf9f5eb,#faf9f5cc 60%,#faf9f500);transition:background .2s,border-color .2s,box-shadow .2s;position:fixed;top:0;left:0;right:0}header.site-header.scrolled{backdrop-filter:blur(12px);border-bottom-color:var(--border-hover);background:#faf9f5f2;box-shadow:0 4px 16px #0000000f}.nav-bar{justify-content:space-between;padding:12px 0}.nav-bar,.nav-left{align-items:center;display:flex}.nav-left{flex-wrap:wrap;gap:18px}.nav-right{align-items:center;gap:14px;display:flex}.nav-links .nav-link{color:var(--muted);letter-spacing:.06em;align-items:center;gap:8px;font-size:13px;line-height:1;display:inline-flex}.nav-links .nav-link:hover{color:var(--accent)}.icon-link{color:var(--muted);display:inline-flex}.icon-link:hover{color:var(--accent)}.icon-link{position:relative}.icon-link:after{content:attr(aria-label);background:var(--text);color:var(--bg);border:1px solid var(--border);white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;z-index:60;border-radius:8px;padding:6px 8px;font-size:12px;line-height:1;transition:opacity .18s,transform .18s,visibility .18s;position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%)translateY(6px);box-shadow:0 4px 12px #0000001a}.icon-link:hover:after{opacity:1;visibility:visible;transform:translate(-50%)translateY(0)}.social-link{color:var(--muted);opacity:.9}.social-link:hover{color:var(--accent);opacity:1}.btn{border:1px solid var(--border);color:var(--text);background:var(--card-bg);border-radius:999px;padding:8px 14px}.btn-primary,.btn:hover{border-color:var(--accent);color:var(--accent)}.btn-primary{box-shadow:inset 0 0 0 2px #d977571a}main{z-index:1;padding-top:var(--header-h);position:relative;overflow-x:hidden}.section{scroll-margin-top:var(--header-h);padding-block:clamp(2.5rem,5vh,4rem)}.section+.section{border-top:1px solid var(--border);margin-block-start:0}section.section:nth-of-type(odd){background:linear-gradient(#f0efe84d,#f0efe81a)}section.section:nth-of-type(2n){background:0 0}.reveal{opacity:0;transition:all .6s;transform:translateY(18px)}.reveal.show{opacity:1;transform:translateY(0)}.hero,.hero-stack{text-align:center;place-items:center;display:grid}.hero-stack{gap:12px}.hero-grid{grid-template-columns:1.2fr 1fr;align-items:center;gap:36px;display:grid}.content-grid{grid-template-columns:2fr 1fr;gap:36px;display:grid}@media (max-width:900px){.hero-grid{text-align:center;grid-template-columns:1fr}.hero-left{place-items:center;display:grid}.content-grid{grid-template-columns:1fr}}@media (max-width:600px){:root{--header-h:56px}.nav-left{gap:12px}.nav-right{gap:10px}.nav-links .nav-link{font-size:12px}}.hero-cta{flex-wrap:wrap;gap:12px;margin-top:18px;display:flex}.hero-right{place-items:center;display:grid;position:relative}.avatar-circle{aspect-ratio:1;border:2px solid var(--accent);border-radius:50%;width:min(420px,72vw)}@supports (color:color-mix(in lab,red,red)){.avatar-circle{border:2px solid color-mix(in oklab,var(--accent)50%,transparent)}}.avatar-circle{position:relative;overflow:hidden;box-shadow:inset 0 0 0 6px #d977570f,0 10px 30px #00000014,0 0 15px 5px #d9775714}.hero-right:after,.hero-right:before{content:"";pointer-events:none;z-index:0;border:2px solid #d977571f;border-radius:50%;width:clamp(300px,36vw,560px);height:clamp(300px,36vw,560px);animation:ripple-pulse 4s ease-out infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.6)}.hero-right:after{opacity:.9;animation-delay:2s}@keyframes ripple-pulse{0%{opacity:.3;transform:translate(-50%,-50%)scale(.6)}70%{opacity:.06}to{opacity:0;transform:translate(-50%,-50%)scale(1.6)}}.hero-title{color:var(--muted);letter-spacing:.02em;font-size:clamp(22px,4vw,28px)}.hero-name{background:linear-gradient(90deg,var(--accent),var(--accent-blue));color:#0000;-webkit-background-clip:text;background-clip:text;margin-top:10px;font-size:clamp(36px,7vw,58px);font-weight:700}.hero-nav{flex-wrap:wrap;gap:20px;display:flex;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.hero-nav a{color:var(--muted)}.hero-nav a:hover,.section-title{color:var(--text)}.section-title{align-items:center;gap:10px;margin-bottom:18px;font-size:clamp(26px,4vw,32px);display:flex}.section-ico{color:var(--accent);flex-shrink:0}.about-name{background:0 0;-webkit-background-clip:initial;background-clip:initial;color:var(--text);font-size:clamp(28px,5.5vw,44px);font-weight:800;line-height:1.08}.about-titles{color:var(--muted);margin-top:8px;font-size:clamp(16px,2.7vw,18px)}.about-summary{color:var(--muted);width:100%;max-width:none;margin-top:18px;font-family:Lora,Georgia,serif;font-size:clamp(16px,2.2vw,18px);line-height:1.75}.about-card{grid-column:1/2}.about-card,.skills-card{align-self:start}.skills-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}@media (min-width:600px){.skills-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1000px){.skills-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.skill-ico{aspect-ratio:1;border:1px solid var(--border);background:var(--bg);color:var(--text);letter-spacing:.02em;border-radius:12px;place-items:center;font-weight:600;display:grid;position:relative}.skill-ico .lbl{opacity:.9;font-size:14px}.skill-ico:hover{border-color:var(--accent)}.skill-ico:after{content:attr(aria-label);background:var(--text);color:var(--bg);border:1px solid var(--border);white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;z-index:5;border-radius:8px;padding:6px 8px;font-size:12px;line-height:1;transition:opacity .18s,transform .18s,visibility .18s;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)translateY(6px);box-shadow:0 4px 12px #0000001a}.skill-ico:hover:after{opacity:1;visibility:visible;transform:translate(-50%)translateY(0)}.skill-ico.pytorch{box-shadow:inset 0 0 0 2px #ef44441f}.skill-ico.sklearn{box-shadow:inset 0 0 0 2px #f59e0b1f}.skill-ico.scipy{box-shadow:inset 0 0 0 2px #3b82f61f}.skill-ico.pandas{box-shadow:inset 0 0 0 2px #6366f11f}.skill-ico.numpy{box-shadow:inset 0 0 0 2px #3b82f61f}.skill-ico.fea{box-shadow:inset 0 0 0 2px #14b8a61f}.skill-ico.python{box-shadow:inset 0 0 0 2px #eab3081f}.skill-ico.open3d{box-shadow:inset 0 0 0 2px #0284c71f}.skill-ico.trimesh{box-shadow:inset 0 0 0 2px #a855f71f}.grid-two{grid-template-columns:1fr;gap:28px;display:grid}@media (min-width:900px){.grid-two{grid-template-columns:1fr 1fr}}.card{border:1px solid var(--card-border);border-radius:16px;padding:18px;box-shadow:0 1px 3px #0000000a}.card,.pop-card{background:var(--card-bg)}.pop-card{transition:border-color .2s,box-shadow .25s,transform .2s,background .25s;position:relative;overflow:hidden}.pop-card:after{content:"";opacity:0;pointer-events:none;background:radial-gradient(600px 200px at 20% 0,#d977570f,#d9775700);transition:opacity .25s;position:absolute;inset:-20% -30% -30% -20%}.pop-card:hover{background:var(--card-bg);border-color:#d9775759;box-shadow:0 8px 24px #0000000f,inset 0 0 0 2px #d9775714}.pop-card:hover:after{opacity:1}.box-title{color:var(--text);align-items:center;gap:10px;margin-bottom:12px;font-size:clamp(18px,3.2vw,22px);font-weight:700;display:inline-flex}.box-title .ico{color:var(--accent);opacity:.95}.list{gap:10px;display:grid}.muted,footer{color:var(--muted)}footer{text-align:center;padding:24px 0 40px}.featured-projects{position:relative}.fp-list{gap:18px;display:grid}.fp-item{border:1px solid var(--card-border);background:var(--card-bg);border-radius:16px;grid-template-columns:1fr min(42%,520px);gap:22px;padding:18px;transition:border-color .2s,background .2s,transform .2s,box-shadow .2s;display:grid;position:relative;overflow:hidden;box-shadow:0 1px 3px #0000000a}.fp-item:hover{border-color:#d9775759;box-shadow:0 8px 24px #0000000f}.fp-content{z-index:2;position:relative}.fp-accent{background:linear-gradient(90deg,var(--accent),var(--accent-blue),transparent 78%);opacity:.9;height:2px;position:absolute;inset:0 0 auto}.fp-meta{align-items:center;gap:10px;margin-bottom:6px;display:flex}.fp-category{letter-spacing:.08em;margin-bottom:8px;font-size:12px}.badge,.fp-category{color:var(--accent);text-transform:uppercase}.badge{letter-spacing:.06em;background:#d977571a;border:1px solid #d977574d;border-radius:999px;padding:4px 8px;font-size:11px}.fp-title{margin:4px 0 8px;font-size:clamp(20px,3.6vw,26px);font-weight:700}.fp-tagline{color:var(--text);margin-bottom:10px;font-size:15px}.fp-desc{line-height:1.7}.fp-tags{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.chip{color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:6px 10px;font-size:12px}.chip-tech{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.chip:hover{border-color:var(--accent)}.fp-link{color:var(--accent);margin-top:16px;font-size:14px;display:inline-flex}.fp-link:hover{color:var(--text)}.fp-preview{border:1px solid var(--border);background:conic-gradient(from 0deg,#d977570f,#6a9bcc0f,#788c5d0f),radial-gradient(220px 160px at 60% 40%,#d977571a,#d9775700 60%),radial-gradient(260px 200px at 40% 60%,#6a9bcc1a,#6a9bcc00 60%),var(--panel);border-radius:12px;position:relative;overflow:hidden}.fp-item:hover .fp-preview{box-shadow:0 6px 16px #0000000f,inset 0 0 0 2px #d977571a}.fp-preview:after{content:"";mix-blend-mode:multiply;opacity:0;background:radial-gradient(1200px 160px at 10% 10%,#d977570f,#d9775700);transition:opacity .25s;position:absolute;inset:0}.fp-item:hover .fp-preview:after{opacity:1}@media (max-width:900px){.fp-item{grid-template-columns:1fr}}.nav-links .nav-link{border-radius:8px;padding:6px 8px;position:relative}.nav-links .nav-link:after{content:"";opacity:0;pointer-events:none;background:radial-gradient(120px 120px at 50% 100%,#d977571a,#d9775700);border-radius:8px;transition:opacity .25s;position:absolute;inset:0}.nav-links .nav-link:hover:after{opacity:1}.we-role{margin-bottom:36px}.we-role:last-child{margin-bottom:0}.we-role-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;padding-bottom:12px;display:flex}.we-company{color:var(--text);font-size:clamp(18px,3vw,22px);font-weight:700}.we-title{margin-top:2px;font-size:14px}.we-meta{text-align:right;white-space:nowrap;flex-direction:column;gap:2px;font-size:13px;display:flex}.we-project.fp-item{grid-template-columns:1fr}.we-video{border-radius:12px;min-height:200px;overflow:hidden}@media (max-width:600px){.we-role-header{flex-direction:column}.we-meta{text-align:left}}.edu-grid{gap:16px;display:grid}@media (min-width:600px){.edu-grid{grid-template-columns:1fr 1fr}}.edu-card{border:1px solid var(--card-border);background:var(--card-bg);border-radius:16px;padding:20px;transition:border-color .2s;box-shadow:0 1px 3px #0000000a}.edu-card:hover{border-color:#d9775759}.edu-school{color:var(--text);font-size:18px;font-weight:700}.edu-degree{color:var(--muted);margin-top:4px;font-size:14px}.edu-meta{color:var(--muted);justify-content:space-between;margin-top:8px;font-size:13px;display:flex}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}