/*! PhotoSwipe main CSS by Dmytro Semenov | photoswipe.com */.pswp{--pswp-bg: #000;--pswp-placeholder-bg: #222;--pswp-root-z-index: 100000;--pswp-preloader-color: rgba(79, 79, 79, .4);--pswp-preloader-color-secondary: rgba(255, 255, 255, .9);--pswp-icon-color: #fff;--pswp-icon-color-secondary: #4f4f4f;--pswp-icon-stroke-color: #4f4f4f;--pswp-icon-stroke-width: 2px;--pswp-error-text-color: var(--pswp-icon-color)}.pswp{position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--pswp-root-z-index);display:none;touch-action:none;outline:0;opacity:.003;contain:layout style size;-webkit-tap-highlight-color:rgba(0,0,0,0)}.pswp:focus{outline:0}.pswp *{box-sizing:border-box}.pswp img{max-width:none}.pswp--open{display:block}.pswp,.pswp__bg{transform:translateZ(0);will-change:opacity}.pswp__bg{opacity:.005;background:var(--pswp-bg)}.pswp,.pswp__scroll-wrap{overflow:hidden}.pswp__scroll-wrap,.pswp__bg,.pswp__container,.pswp__item,.pswp__content,.pswp__img,.pswp__zoom-wrap{position:absolute;top:0;left:0;width:100%;height:100%}.pswp__img,.pswp__zoom-wrap{width:auto;height:auto}.pswp--click-to-zoom.pswp--zoom-allowed .pswp__img{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.pswp--click-to-zoom.pswp--zoomed-in .pswp__img:active{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img,.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img:active,.pswp__img{cursor:-webkit-zoom-out;cursor:-moz-zoom-out;cursor:zoom-out}.pswp__container,.pswp__img,.pswp__button,.pswp__counter{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pswp__item{z-index:1;overflow:hidden}.pswp__hidden{display:none!important}.pswp__content{pointer-events:none}.pswp__content>*{pointer-events:auto}.pswp__error-msg-container{display:grid}.pswp__error-msg{margin:auto;font-size:1em;line-height:1;color:var(--pswp-error-text-color)}.pswp .pswp__hide-on-close{opacity:.005;will-change:opacity;transition:opacity var(--pswp-transition-duration) cubic-bezier(.4,0,.22,1);z-index:10;pointer-events:none}.pswp--ui-visible .pswp__hide-on-close{opacity:1;pointer-events:auto}.pswp__button{position:relative;display:block;width:50px;height:60px;padding:0;margin:0;overflow:hidden;cursor:pointer;background:none;border:0;box-shadow:none;opacity:.85;-webkit-appearance:none;-webkit-touch-callout:none}.pswp__button:hover,.pswp__button:active,.pswp__button:focus{transition:none;padding:0;background:none;border:0;box-shadow:none;opacity:1}.pswp__button:disabled{opacity:.3;cursor:auto}.pswp__icn{fill:var(--pswp-icon-color);color:var(--pswp-icon-color-secondary)}.pswp__icn{position:absolute;top:14px;left:9px;width:32px;height:32px;overflow:hidden;pointer-events:none}.pswp__icn-shadow{stroke:var(--pswp-icon-stroke-color);stroke-width:var(--pswp-icon-stroke-width);fill:none}.pswp__icn:focus{outline:0}div.pswp__img--placeholder,.pswp__img--with-bg{background:var(--pswp-placeholder-bg)}.pswp__top-bar{position:absolute;left:0;top:0;width:100%;height:60px;display:flex;flex-direction:row;justify-content:flex-end;z-index:10;pointer-events:none!important}.pswp__top-bar>*{pointer-events:auto;will-change:opacity}.pswp__button--close{margin-right:6px}.pswp__button--arrow{position:absolute;width:75px;height:100px;top:50%;margin-top:-50px}.pswp__button--arrow:disabled{display:none;cursor:default}.pswp__button--arrow .pswp__icn{top:50%;margin-top:-30px;width:60px;height:60px;background:none;border-radius:0}.pswp--one-slide .pswp__button--arrow{display:none}.pswp--touch .pswp__button--arrow{visibility:hidden}.pswp--has_mouse .pswp__button--arrow{visibility:visible}.pswp__button--arrow--prev{right:auto;left:0}.pswp__button--arrow--next{right:0}.pswp__button--arrow--next .pswp__icn{left:auto;right:14px;transform:scaleX(-1)}.pswp__button--zoom{display:none}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__zoom-icn-bar-v{display:none}.pswp__preloader{position:relative;overflow:hidden;width:50px;height:60px;margin-right:auto}.pswp__preloader .pswp__icn{opacity:0;transition:opacity .2s linear;animation:pswp-clockwise .6s linear infinite}.pswp__preloader--active .pswp__icn{opacity:.85}@keyframes pswp-clockwise{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pswp__counter{height:30px;margin-top:15px;margin-inline-start:20px;font-size:14px;line-height:30px;color:var(--pswp-icon-color);text-shadow:1px 1px 3px var(--pswp-icon-color-secondary);opacity:.85}.pswp--one-slide .pswp__counter{display:none}*{box-sizing:border-box}html,body,#root{height:100%}img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}:root{--accent-blue: #1f3a8a;--accent-blue-hover: #34519f;--bg: #141414;--surface: #1a1a1a;--surface-strong: #262626;--border: #2c2c2c;--border-strong: #3a3a3a;--text-heading: #f2f2f2;--text-body: #e4e4e4;--text-secondary: #cfcfcf;--text-muted: #888;--text-faint: #555;--accent-text: #e28d3a;--accent-text-hover: #eca35c;--accent-fill: #e28d3a;--accent-fill-hover: #eca35c;--accent-fill-rgb: 226 141 58}:root[data-theme=light]{--bg: #fafafa;--surface: #f0f0f0;--surface-strong: #e4e4e4;--border: #dcdcdc;--border-strong: #c4c4c4;--text-heading: #141414;--text-body: #242424;--text-secondary: #444;--text-muted: #6b6b6b;--text-faint: #8a8a8a;--accent-text: #a85f1e;--accent-text-hover: #8f5019;--accent-fill: #d9a429;--accent-fill-hover: #c2921f;--accent-fill-rgb: 217 164 41}body{margin:0;background-color:var(--bg);color:var(--text-body);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.6;transition:background-color .15s ease,color .15s ease}a{color:var(--text-body);text-decoration:none;border-bottom:1px solid var(--text-faint)}a:hover{border-bottom-color:var(--text-body)}.site-header{width:100%;max-width:1080px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:28px 0;border-bottom:1px solid var(--border)}.site-title{font-size:1.05rem;font-weight:600;color:var(--text-heading);border-bottom:none}.site-header-right{display:flex;align-items:center;gap:24px}.site-nav{display:flex;flex-wrap:wrap;gap:24px}.site-nav-link{font-size:.9rem;color:var(--text-muted);border-bottom:none}.site-nav-link-active{color:var(--text-heading);font-weight:600}.theme-toggle{background:none;border:none;padding:0;cursor:pointer;flex-shrink:0}.theme-toggle-track{display:flex;align-items:center;width:44px;height:24px;border-radius:999px;padding:2px;background-color:var(--surface-strong);border:1px solid var(--border-strong);transition:background-color .2s ease}.theme-toggle-thumb{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:var(--accent-fill);color:#141414;font-size:11px;line-height:1;transform:translate(0);transition:transform .2s ease,background-color .2s ease}.theme-toggle-track-light .theme-toggle-thumb{transform:translate(20px)}@media (max-width: 600px){.site-header{flex-direction:column;align-items:flex-start;gap:12px;padding:20px 0}.site-header-right{width:100%;justify-content:space-between}.site-nav{gap:16px}}.page{min-height:100%;display:flex;flex-direction:column;align-items:center;padding:0 24px}@media (max-width: 480px){.page{padding:0 16px}}.main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;width:100%}.content{width:100%;max-width:1080px;padding:40px 0 64px}.hero{display:flex;align-items:stretch;gap:28px;margin-bottom:40px}.avatar{width:140px;flex-shrink:0;align-self:stretch;border-radius:14px;object-fit:cover;background-color:var(--surface-strong)}.avatar-fallback{display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-weight:600;font-size:1.1rem;letter-spacing:.02em}.hero-text{display:flex;flex-direction:column;justify-content:space-between;min-width:0}.name{font-size:1.75rem;font-weight:600;margin:0 0 16px;color:var(--text-heading)}.intro{color:var(--text-secondary);margin:0}@media (max-width: 600px){.hero{flex-direction:column;align-items:flex-start;gap:20px}.avatar{width:88px;height:88px;align-self:flex-start;border-radius:16px}.name{font-size:1.5rem}}.section-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.section-card,.section-card:hover{display:flex;flex-direction:column;padding:24px;border:1px solid var(--border);border-radius:12px;background-color:var(--surface)}.section-title{font-size:1.05rem;font-weight:600;color:var(--text-heading)}.section-subtitle{font-size:.875rem;color:var(--text-muted);margin-top:8px;flex:1}.section-arrow{align-self:flex-end;margin-top:16px;flex-shrink:0;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;background-color:var(--surface-strong);color:var(--text-body);border:1px solid var(--border-strong);font-size:1.1rem}.section-card:hover .section-arrow{background-color:var(--accent-fill);color:#141414;border-color:var(--accent-fill)}@media (max-width: 720px){.section-grid{grid-template-columns:1fr}}.back-link{display:inline-block;font-size:.9rem;color:var(--text-muted);border-bottom:1px solid var(--border-strong);margin-bottom:40px}.back-link:hover{color:var(--text-body);border-bottom-color:var(--text-body)}.page-title{font-size:1.75rem;font-weight:600;margin:0 0 16px;color:var(--text-heading)}.page-description{color:var(--text-secondary);margin-bottom:24px}.photo-intro p{margin:0 0 16px}.photo-intro p:last-child{margin-bottom:0}.coming-soon{color:var(--text-faint);font-style:italic}.section-heading{font-size:.85rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin:0 0 20px}.experience-section,.side-projects-section,.publications-section{margin-top:56px}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.project-card{display:flex;flex-direction:column;padding:20px;border:1px solid var(--border);border-radius:12px;background-color:var(--surface)}.project-card-title{font-size:1rem;font-weight:600;color:var(--text-heading);margin:0 0 8px}.project-card-blurb{font-size:.9rem;color:var(--text-secondary);flex:1;margin:0 0 16px}.project-card-cta{align-self:flex-start;color:var(--accent-text);font-size:.9rem;font-weight:600;border-bottom:none}.project-card-cta:hover{color:var(--accent-text-hover);border-bottom:none}.publication-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.publication-item{display:flex;flex-direction:column;gap:2px}.publication-title{color:var(--text-heading);font-weight:600}.publication-title:hover{color:var(--accent-text);border-bottom-color:var(--accent-text)}.publication-venue{font-size:.9rem;color:var(--text-muted)}.resume-cta{display:inline-flex;align-items:center;flex-shrink:0;padding:10px 20px;border-radius:999px;background-color:var(--accent-fill);color:#141414;font-weight:600;font-size:.9rem;border-bottom:none}.resume-cta:hover{background-color:var(--accent-fill-hover);border-bottom:none}.page-title-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:16px}.page-title-row .page-title{margin-bottom:0}.htimeline{-webkit-user-select:none;user-select:none}.htimeline-controls{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.htimeline-hint{font-size:.8rem;color:var(--text-faint);font-style:italic}.htimeline-legend{display:flex;align-items:center;gap:18px}.htimeline-legend-item{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--text-secondary)}.htimeline-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.htimeline-legend-dot-edu{background-color:var(--accent-blue)}.htimeline-legend-dot-work{background-color:var(--accent-fill)}.htimeline-nav{display:flex;gap:8px}.htimeline-nav button{width:32px;height:32px;border-radius:50%;background-color:var(--surface);border:1px solid var(--border);color:var(--text-body);cursor:pointer;font-size:1rem}.htimeline-nav button:disabled{opacity:.35;cursor:default}.htimeline-frame{position:relative}.htimeline-playhead{position:absolute;top:0;bottom:0;width:2px;background-color:var(--accent-fill);z-index:1;pointer-events:none}.htimeline-viewport{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;cursor:grab;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.htimeline-viewport:active{cursor:grabbing}.htimeline-viewport::-webkit-scrollbar{display:none}.htimeline-track{position:relative;height:226px}.htimeline-ruler-line{position:absolute;left:0;right:0;top:118px;height:1px;background-color:var(--border)}.htimeline-year{position:absolute;top:132px;transform:translate(-50%);font-size:.8rem;color:var(--text-muted);white-space:nowrap}.htimeline-tick{position:absolute;top:108px;width:1px;height:20px;background-color:var(--border-strong)}.htimeline-today-line{position:absolute;top:8px;bottom:8px;width:0;border-left:2px dashed var(--text-faint);z-index:1;pointer-events:none}.htimeline-today-label{position:absolute;top:0;transform:translate(6px);font-size:.7rem;font-style:italic;color:var(--text-muted);white-space:nowrap;pointer-events:none}.htimeline-marker{position:absolute;z-index:2;transform:translate(-50%,-50%);width:36px;height:36px;border-radius:50%;border:2px solid var(--border-strong);background-color:var(--bg);padding:3px;cursor:pointer}.htimeline-marker-edu{top:44px}.htimeline-marker-edu.htimeline-marker-active{border-color:var(--accent-blue);box-shadow:0 0 0 4px #1f3a8a59}.htimeline-marker-work{top:190px}.htimeline-marker-work.htimeline-marker-active{border-color:var(--accent-fill);box-shadow:0 0 0 4px rgb(var(--accent-fill-rgb) / .2)}.htimeline-marker .exp-logo{width:100%;height:100%;border-radius:50%}.htimeline-edu-bar{position:absolute;top:42px;height:4px;border-radius:2px;background-color:#1f3a8a8c;z-index:1}.htimeline-edu-endcap{position:absolute;top:34px;width:2px;height:20px;background-color:var(--accent-blue);z-index:1}.htimeline-detail{margin:28px auto 0;max-width:760px;text-align:center}.htimeline-detail-title{font-size:1.1rem;font-weight:600;color:var(--text-heading);margin:0 0 6px}.htimeline-detail-meta{font-size:.875rem;color:var(--text-muted);margin:0 0 18px}.htimeline-detail-body{height:210px;overflow-y:auto;display:flex;flex-direction:column;align-items:center}.htimeline-detail .exp-card-bullets{display:inline-flex;text-align:left}.htimeline-deepdive-row{height:66px;display:flex;align-items:flex-start;justify-content:center;padding-top:18px}.htimeline-deepdive-cta{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border:1px solid var(--accent-text);border-radius:999px;color:var(--accent-text);font-size:.85rem;font-weight:600}.htimeline-deepdive-cta:hover{background-color:var(--accent-fill);border-color:var(--accent-fill);color:#141414}.exp-logo{width:40px;height:40px;flex-shrink:0;border-radius:8px;object-fit:cover;background-color:var(--surface-strong)}.exp-logo-fallback{display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:600;color:var(--text-muted)}.exp-card-bullets{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:10px;color:var(--text-secondary)}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}.photo-grid-item{display:block;border:none;border-radius:8px;overflow:hidden;background-color:var(--surface);aspect-ratio:1 / 1}.photo-grid-item img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s ease}.photo-grid-item:hover img{transform:scale(1.05)}.blog-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-top:8px}@media (max-width: 700px){.blog-grid{grid-template-columns:1fr}}.blog-card{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:20px;padding:24px;background-color:var(--surface);transition:border-color .2s ease}.blog-card:hover{border-color:var(--border-strong)}.blog-card-date{font-size:.8rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em}.blog-card-title{font-size:1.15rem;font-weight:600;color:var(--text-heading);margin:10px 0 12px}.blog-card-excerpt{color:var(--text-secondary);font-size:.9rem;margin:0 0 20px;flex:1}.blog-card-cta{align-self:flex-start;font-size:.9rem;font-weight:600;color:var(--accent-text);border-bottom:none}.blog-card-cta:hover{color:var(--accent-text-hover);border-bottom:none}.blog-post-date{display:block;font-size:.8rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}.blog-post-body{color:var(--text-secondary);margin-top:32px}.blog-post-body p{margin:0 0 20px}.blog-post-body h2,.blog-post-body h3{color:var(--text-heading);font-weight:600;margin:36px 0 16px}.blog-post-body h2{font-size:1.3rem}.blog-post-body h3{font-size:1.1rem}.blog-post-body ul,.blog-post-body ol{margin:0 0 20px;padding-left:22px;display:flex;flex-direction:column;gap:8px}.blog-post-body li{padding-left:4px}.blog-post-body blockquote{margin:0 0 20px;padding:4px 20px;border-left:3px solid var(--accent-fill);color:var(--text-body);font-style:italic}.blog-post-body blockquote p{margin:0}.blog-post-body code{background-color:var(--surface);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-size:.85em}.blog-post-body pre{background-color:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px;overflow-x:auto;margin:0 0 20px}.blog-post-body pre code{background:none;border:none;padding:0}.blog-post-body img{max-width:100%;border-radius:12px;display:block;margin:0 0 20px}.blog-post-body a{color:var(--accent-text)}.blog-post-body table{width:100%;border-collapse:collapse;margin:0 0 24px;font-size:.9rem}.blog-post-body th,.blog-post-body td{text-align:left;padding:10px 14px;border:1px solid var(--border);vertical-align:top}.blog-post-body th{background-color:var(--surface);color:var(--text-heading);font-weight:600}.blog-post-body iframe{max-width:100%;border-radius:12px;margin:0 0 20px}.post-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;margin:0 0 32px}.post-gallery img{width:100%;height:180px;object-fit:cover;border-radius:10px;margin:0}.footer{width:100%;max-width:1080px;padding:24px 0 40px;text-align:center;color:var(--text-muted);font-size:.9rem;border-top:1px solid var(--accent-blue)}.footer a:hover{color:var(--accent-blue-hover);border-bottom-color:var(--accent-blue-hover)}.dot{color:var(--text-faint)}
