:root{--bg:#eceae4;--card-bg:#f6f4ef;--text-heading:#1c1b19;--text-body:#4a4843;--text-muted:#6b6860;--pill-border:#b8b4ab;color:var(--text-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:system-ui,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.5}*,:before,:after{box-sizing:border-box}body{background:var(--bg);margin:0}#root{min-height:100svh}h1,h2,p{margin:0}button{font-family:inherit}.viewport{--page-margin:clamp(1.5rem, 6vw, 4rem);--content-max:72rem;--page-width:min(var(--content-max), 100vw - 2 * var(--page-margin));--page-left:max(var(--page-margin), (100vw - var(--page-width)) / 2);--section-scroll-offset:clamp(3rem, 12vh, 6rem);width:100%;min-height:100svh}.page{width:var(--page-width);grid-template-columns:1fr 2fr;min-height:100svh;margin:0 auto;display:grid}.sidebar{box-sizing:border-box;flex-direction:column;grid-column:1;align-self:start;gap:.75rem;height:100svh;padding:2.5rem 2rem 2.5rem 0;display:flex;position:sticky;top:0}.profile-avatar{--avatar-size:10rem;width:var(--avatar-size);height:var(--avatar-size);border-radius:50%;flex-shrink:0;overflow:hidden}.profile-avatar-image{width:100%;height:100%;display:block}.name{color:var(--text-heading);letter-spacing:-.02em;margin:.5rem 0 0;font-size:2.25rem;font-weight:600}.email{color:var(--text-body);font-size:.9rem;text-decoration:none}.email:hover{color:var(--text-heading);text-decoration:underline}.description{color:var(--text-body);margin:.25rem 0 1rem;font-size:.9rem;line-height:1.5}.nav{border-top:1px solid var(--pill-border);margin-top:.5rem;padding-top:1.25rem}.nav-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin:0 0 .65rem;padding:0 .85rem;font-size:.7rem;font-weight:600}.nav ul{flex-direction:column;gap:.2rem;margin:0;padding:0;list-style:none;display:flex}.nav-link{width:100%;font:inherit;color:var(--text-body);cursor:pointer;text-align:left;background:0 0;border:none;border-left:2px solid #0000;border-radius:8px;padding:.6rem .85rem;font-size:.95rem;transition:background .2s,color .2s,border-color .2s;display:block}.nav-link:hover{color:var(--text-heading);background:#1c1b190d}.nav-link.active{border-left-color:var(--text-heading);color:var(--text-heading);background:#1c1b1912;font-weight:600}.content{top:0;right:0;left:calc(var(--page-left) + var(--page-width) / 3);box-sizing:border-box;grid-column:2;height:100svh;position:fixed;overflow-y:auto}.content-inner{max-width:calc(var(--page-width) * 2 / 3);padding:calc(2.5rem + var(--section-scroll-offset)) 0 2.5rem 3rem;box-sizing:border-box}.section{min-height:85svh;scroll-margin-top:var(--section-scroll-offset);padding-bottom:3rem}.section--compact{min-height:auto;padding-bottom:3.5rem}.section h2{color:var(--text-heading);letter-spacing:-.02em;margin:0 0 1rem;font-size:1.75rem;font-weight:600}.section p{max-width:42rem;color:var(--text-body);margin:0;line-height:1.6}.section p+p{margin-top:1rem}.section a{color:var(--text-heading);text-decoration:none}.section a:hover{text-decoration:underline}.section a.inline-link{color:#2563eb;text-underline-offset:.15em;text-decoration:underline}.section a.inline-link:hover{color:#1d4ed8}.content-card{background:var(--card-bg);box-sizing:border-box;border-radius:18px;max-width:42rem;padding:1.5rem 1.75rem;box-shadow:0 2px 8px #1c1b190f,0 8px 24px #1c1b1914}.project-list{flex-direction:column;gap:2.5rem;margin:0;padding:0;list-style:none;display:flex}.project-header{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.5rem;display:flex}.project-name{color:var(--text-heading);margin:0;font-size:1.15rem;font-weight:600}.project-date{color:var(--text-muted);white-space:nowrap;font-size:.85rem}.project-links{gap:1rem;margin-bottom:.75rem;display:flex}.project-links a{color:var(--text-heading);text-underline-offset:2px;font-size:.9rem;text-decoration:underline}.project-links a:hover{color:var(--text-body)}.project-image-dropdown{margin-bottom:.75rem}.project-preview-panel{grid-template-rows:0fr;transition:grid-template-rows .35s;display:grid}.project-preview-panel.open{grid-template-rows:1fr}.project-preview-panel-inner{opacity:0;min-height:0;transition:opacity .35s,transform .35s;overflow:hidden;transform:translateY(-.5rem)}.project-preview-panel.open .project-preview-panel-inner{opacity:1;transform:translateY(0)}.project-image-toggle{font:inherit;color:var(--text-body);cursor:pointer;background:0 0;border:none;align-items:center;gap:.4rem;margin:0 0 .75rem;padding:0;font-size:.9rem;transition:color .15s;display:inline-flex}.project-image-toggle:hover{color:var(--text-heading)}.project-image-chevron{border-top:5px solid;border-left:4px solid #0000;border-right:4px solid #0000;width:0;height:0;transition:transform .2s}.project-image-chevron.open{transform:rotate(180deg)}.preview-carousel{margin-bottom:1rem}.preview-carousel-viewport{background:var(--card-bg);border-radius:14px;overflow:hidden}.preview-media-frame{background:var(--card-bg);border-radius:14px;width:100%;overflow:hidden}.preview-media-frame--dark,.preview-carousel-viewport--dark{background:#16171d}.preview-carousel-track{transition:transform .3s;display:flex}.preview-carousel-slide{flex:0 0 100%;min-width:0}.preview-carousel-controls{justify-content:center;align-items:center;gap:1rem;margin-top:.75rem;display:flex}.preview-carousel-btn{border:1px solid var(--pill-border);background:var(--card-bg);width:2rem;height:2rem;color:var(--text-heading);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:1rem;line-height:1;transition:color .15s,border-color .15s;display:flex}.preview-carousel-btn:hover:not(:disabled){border-color:var(--text-muted)}.preview-carousel-btn:disabled{opacity:.35;cursor:default}.preview-carousel-count{color:var(--text-muted);text-align:center;min-width:2.5rem;font-size:.8rem}.project-preview-image,.project-preview-video{width:100%;height:auto;display:block}.preview-media-frame--fixed .project-preview-image,.preview-media-frame--fixed .project-preview-video{object-fit:cover;object-position:center;height:100%}.preview-media-frame--fixed .project-preview-image{transform:scale(1.04)}.project-preview-video{pointer-events:none}.preview-media-frame--fixed .project-preview-video{transform:scale(1.08)}.project-preview-video::-webkit-media-controls{display:none!important}.section .project-description{max-width:42rem;color:var(--text-body);margin:0 0 .75rem;line-height:1.6}.section .project-description:last-of-type{margin-bottom:1rem}.project-tools{flex-wrap:wrap;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.tool-pill{color:var(--text-body);border:1px solid var(--pill-border);border-radius:999px;padding:.25rem .65rem;font-size:.8rem;line-height:1.4}.section .thesis-intro{max-width:42rem;color:var(--text-body);margin:0 0 1.5rem;line-height:1.6}.thesis-figure{margin:0 0 1.5rem}.thesis-figure img{width:100%;height:auto;display:block}.thesis-links{flex-direction:column;gap:.5rem;margin-bottom:1.5rem;display:flex}.thesis-links a{color:var(--text-heading);font-size:.95rem}.thesis-links a:hover{text-decoration:underline}.thesis-label{color:var(--text-heading);margin:0 0 .75rem;font-size:1.1rem;font-weight:600}.thesis-description{max-width:42rem}
