html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.inset-0{top:0;right:0;bottom:0;left:0}.mr-2{margin-right:.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-center{align-items:center}.justify-center{justify-content:center}.gap-10{gap:2.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-10{padding-bottom:2.5rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.opacity-0{opacity:0}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Helvetica Neue,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }:root{--background-color: white;--text-color: black;--link-color: black;--underline-color: black;--shadow-color: rgba(0, 0, 0, .3);--blur-size:calc(1vw + 1vh);--circle-size: 50vw;--inner-size: calc(.5*var(--circle-size));--circle-color: #fab178;--inner-color: #f5abb8;--segment-track: rgba(118, 118, 128, .12);--segment-thumb: white;--content-gutter: 20px}.dark-mode{--background-color: black;--text-color: white;--link-color: white;--underline-color: white;--shadow-color: rgba(252, 252, 252, .3);--segment-track: rgba(118, 118, 128, .24);--segment-thumb: #636366}body{background-color:var(--background-color);color:var(--text-color);transition:.5s ease,color .5s ease}.center-container{display:flex;justify-content:center;align-items:center;height:100vh}.app-wrapper{display:flex;flex-direction:column;min-height:100vh;overflow-x:clip}.content-wrapper{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:20px var(--content-gutter);flex-grow:1}.dark-mode-toggle{background:none;border:none;cursor:pointer;color:var(--text-color);opacity:.7}.navbar{display:flex;justify-content:space-between;align-items:center;width:100%;position:fixed;top:0;left:0;right:0;padding:1vw 2.5vw;z-index:1000}.navbar:before{content:"";position:absolute;top:0;left:0;right:0;height:calc(100% + 32px);background:linear-gradient(to bottom,var(--background-color) 55%,transparent);pointer-events:none;z-index:-1}.navbar-items{display:flex;gap:30px}@media (max-width: 640px){.navbar{padding:10px 20px}.navbar-items{padding-right:0}}.navbar-logo{height:22px;width:auto;opacity:.8}.navbar-link{position:relative;text-decoration:none;color:var(--link-color);opacity:.8}.navbar-link:after{content:"";position:absolute;width:0;height:2px;display:block;margin-top:5px;right:0;background:var(--underline-color);transition:width .3s ease,right .3s ease;opacity:.7}.navbar-link:hover:after{width:100%;right:0}.pulsating-circle{width:var(--circle-size);height:var(--circle-size);max-width:280px;max-height:280px;border-radius:50%;background:radial-gradient(circle,var(--circle-color) 30%,transparent 70%);animation:pulsate 7s infinite;position:relative}.pulsating-circle:before{content:"";border-radius:50%;background:radial-gradient(circle,var(--circle-color) 30%,transparent 70%);filter:blur(var(--blur-size));opacity:.5;z-index:-1}.pulsating-circle:after{content:"";border-radius:50%;background:radial-gradient(circle,var(--circle-color) 30%,transparent 70%);filter:blur(calc(var(--blur-size) * 2));opacity:.3;z-index:-2}.inner-circle{width:var(--inner-size);height:var(--inner-size);max-width:150px;max-height:150px;border-radius:50%;background:radial-gradient(circle,var(--inner-color) 40%,transparent 60%);position:absolute;transform:translate(-50%,-50%);top:25%;left:25%;animation:pulsate 7s infinite}.inner-circle:before{content:"";position:absolute;border-radius:50%;background:radial-gradient(circle,var(--inner-color) 40%,transparent 60%);filter:blur(var(--blur-size));opacity:.5;z-index:-1}.inner-circle:after{content:"";position:absolute;border-radius:50%;background:radial-gradient(circle,var(--inner-color) 40%,transparent 60%);filter:blur(calc(var(--blur-size) * 1.2));opacity:.3;z-index:-2}.pulsating-text{position:absolute;color:var(--text-color);font-size:clamp(11px,1vw,14px);font-weight:500;letter-spacing:.25em;text-transform:uppercase;text-align:center;transform:translateY(-300%);z-index:1;opacity:.6}.alternating-text{position:absolute;color:var(--text-color);font-family:Helvetica Neue,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-size:clamp(36px,5vw,96px);letter-spacing:.05em;text-align:center;transform:translateY(50%);z-index:1;opacity:0;animation:floatUp 2s ease-out forwards}@keyframes floatUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(20%);opacity:1}}@keyframes pulsate{0%{transform:scale(2);opacity:1}50%{transform:scale(1.7);opacity:.7}to{transform:scale(2);opacity:1}}.full-bleed{position:relative;width:100vw;margin-inline:calc(50% - 50vw)}.hero-dissolve .center-container{--p: var(--hero-progress, 0);opacity:calc(1 - var(--p) * .9);transform:translateY(calc(var(--p) * 18vh)) scale(calc(1 - var(--p) * .06));filter:blur(calc(var(--p) * 10px));will-change:opacity,transform,filter}.about-panel{margin-block:20vh;display:flex;justify-content:center;align-items:center}.about-container{position:relative;isolation:isolate;max-width:750px;padding:10vh 5vw}.about-container:before{content:"";position:absolute;z-index:-1;top:50%;left:50%;width:100vw;height:calc(100% + 40vh);transform:translate(-50%,-50%);pointer-events:none;background-image:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--circle-color) 30%,transparent) 35%,color-mix(in srgb,var(--inner-color) 26%,transparent) 65%,transparent)}@font-face{font-family:Charlene;src:url(/github-portfolio/assets/fonts/Charlene-Regular.otf) format("opentype");font-display:swap}.building-popup{position:fixed;right:24px;bottom:24px;z-index:950;animation:buildingPopupIn .8s cubic-bezier(.22,1,.36,1) 1.5s backwards}@keyframes buildingPopupIn{0%{opacity:0;transform:translateY(24px)}}.building{position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:calc(100vw - 48px);padding:22px 28px 20px;border-radius:18px;background:var(--background-color);box-shadow:0 12px 40px var(--shadow-color),0 0 0 1px color-mix(in srgb,var(--text-color) 6%,transparent);transform-origin:bottom right;transition:opacity .35s ease,transform .45s cubic-bezier(.22,1,.36,1),visibility .45s}.building-close{position:absolute;top:10px;right:10px;display:flex;padding:4px;border:none;background:none;color:var(--text-color);opacity:.4;cursor:pointer;transition:opacity .2s ease}.building-close:hover{opacity:.9}.building-tab{position:absolute;right:0;bottom:0;padding:8px 16px;border:none;border-radius:999px;background:var(--background-color);box-shadow:0 6px 20px var(--shadow-color),0 0 0 1px color-mix(in srgb,var(--text-color) 6%,transparent);color:var(--text-color);font-family:Charlene,cursive;font-size:22px;line-height:1;white-space:nowrap;cursor:pointer;opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .35s ease,transform .45s cubic-bezier(.22,1,.36,1),visibility .45s}.building-popup.collapsed .building{opacity:0;visibility:hidden;transform:scale(.85) translateY(12px)}.building-popup.collapsed .building-tab{opacity:1;visibility:visible;transform:none}.building-inline{display:none}@media (max-width: 640px){.building-popup{display:none}.building.building-inline{display:flex;width:-moz-fit-content;width:fit-content;max-width:100%;margin:0 auto 5vh;padding:0;background:none;box-shadow:none}.building-inline .building-title{font-size:30px}}@media (prefers-reduced-motion: reduce){.building-popup{animation:none}}.building-title{color:var(--text-color);font-family:Charlene,cursive;font-size:36px;line-height:1;opacity:.9}.building-name{color:var(--text-color);font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:300;font-size:15px;text-align:center}a.building-name:hover{text-decoration:underline}.building-track{display:grid;gap:3px;align-self:stretch;margin-top:8px}.building-tick{height:14px;border-radius:1px;background:color-mix(in srgb,color-mix(in srgb,var(--inner-color) var(--mix),color-mix(in srgb,var(--circle-color) 85%,#e0602a)) calc(var(--lit) * 100%),color-mix(in srgb,var(--text-color) 7%,transparent));box-shadow:inset 0 1px 1px #0000001f,0 0 calc(var(--lit) * 6px) color-mix(in srgb,var(--circle-color) calc(var(--lit) * 60%),transparent);transition:background .6s ease,box-shadow .6s ease}.about-text{color:var(--text-color);font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:300;font-size:clamp(16px,1.6vw,20px);line-height:1.7;text-align:center}.about-link{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--circle-color) 80%,#e0602a);text-decoration-thickness:1.5px;text-underline-offset:4px;transition:text-decoration-color .3s ease}.about-link:hover{text-decoration-color:var(--text-color)}.project-cell.project-highlight{position:relative}.project-cell.project-highlight:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:20px;pointer-events:none;animation:projectGlow 2.4s ease-out forwards}@keyframes projectGlow{0%,30%{box-shadow:0 0 0 3px color-mix(in srgb,var(--circle-color) 80%,transparent),0 0 40px color-mix(in srgb,var(--circle-color) 60%,transparent)}to{box-shadow:0 0 0 3px transparent,0 0 40px transparent}}.project-container{padding:5vw;padding-inline:calc(var(--content-gutter) + 5vw)}.project-big-title{font-weight:700;text-align:center;padding-bottom:5vh;font-size:clamp(24px,5vw,48px)}.project-tile{aspect-ratio:16 / 9;border-radius:20px;position:relative;overflow:hidden;transition:transform .3s;box-shadow:0 4px 8px #0000001a}.project-tile:hover{transform:scale(1.05)}.project-credit{margin-top:10px;font-size:11px;opacity:.55}.project-image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;position:relative;z-index:1}.project-gif{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s ease}.project-gif.loaded{opacity:1}.project-overlay{cursor:pointer;background:var(--background-color);transition:opacity .3s;opacity:0;z-index:2;display:flex;padding:16px 20px;overflow:hidden}.project-card-inner{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:safe center;gap:10px;overflow:hidden}.project-title{position:relative;z-index:3;color:var(--text-color);text-align:left;font-style:italic;font-size:14px;line-height:1.3;flex-shrink:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.project-description{position:relative;z-index:3;color:var(--text-color);text-align:left;font-weight:400;font-size:13px;line-height:1.55;display:grid;grid-template-rows:0fr;margin-top:-10px;opacity:0;transition:grid-template-rows .35s ease,margin-top .35s ease,opacity .3s ease}.project-description-inner{overflow:hidden;min-height:0}.project-description.visible{grid-template-rows:1fr;margin-top:0;opacity:1}.project-overlay.expanded .project-card-inner{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--segment-track) transparent}.project-overlay.expanded .project-title{display:block;-webkit-line-clamp:unset}.project-overlay.expanded .project-card-inner::-webkit-scrollbar{width:6px}.project-overlay.expanded .project-card-inner::-webkit-scrollbar-thumb{background:var(--segment-track);border-radius:999px}.project-footer{display:flex;align-items:center;width:100%;flex-shrink:0}.project-links{display:flex;gap:8px;flex-shrink:0}.project-link-icon{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;font-size:16px;color:var(--text-color);border:1px solid var(--segment-track);opacity:.75;transition:opacity .2s ease,background .2s ease,color .2s ease}.project-link-icon:hover{opacity:1;background:var(--text-color);color:var(--background-color)}.read-more-button{color:var(--text-color);border:none;margin-left:auto;cursor:pointer;font-weight:400;font-size:12px;opacity:.7;flex-shrink:0}.read-more-button:hover{opacity:1}.divider{width:100%;border:0;border-top:1px solid var(--text-color);opacity:.3;flex-shrink:0}.project-tags{display:flex;flex-wrap:wrap;gap:6px;flex-shrink:0}.tag{background-color:var(--tag-background-color, #e0e0e0);color:var(--tag-text-color, #333);padding:2px 8px;border-radius:999px;font-size:11px;font-weight:400}.project-tile:hover .project-overlay{opacity:.9}.project-tags-wrapper{width:100%;flex-shrink:0}.tag-row{position:relative;width:100%;flex-wrap:nowrap;overflow:hidden}.tag-row .tag{white-space:nowrap;flex-shrink:0}.tag-more{font-weight:600;cursor:default}.tag-dropdown{position:fixed;z-index:2000;display:flex;flex-direction:column;align-items:center;gap:6px;max-width:240px;padding:10px;border-radius:12px;background:var(--background-color);border:1px solid var(--segment-track);box-shadow:0 8px 24px -8px #00000040;transform:translate(-50%);animation:tagDropdownIn .15s ease-out}.tag-dropdown .tag{white-space:nowrap}@keyframes tagDropdownIn{0%{opacity:0;transform:translate(-50%,-4px)}to{opacity:1;transform:translate(-50%)}}.tag-row-measure{position:absolute;top:0;left:0;display:flex;gap:6px;visibility:hidden;pointer-events:none;white-space:nowrap}.project-tile.pinned .project-overlay{opacity:.9}.project-overlay.always-visible{opacity:1}.project-tile.touch{cursor:pointer}.project-tile.touch:hover{transform:none}.project-tile.touch .project-overlay{pointer-events:none}.project-tile.touch:hover .project-overlay:not(.always-visible){opacity:0}.sheet-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3000;--sheet-bg: rgba(255, 255, 255, .82);--sheet-fg: #000}.dark-mode .sheet-layer{--sheet-bg: rgba(0, 0, 0, .78);--sheet-fg: #fff}.sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--sheet-bg);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.sheet{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;overflow-y:auto;overscroll-behavior:contain;color:var(--sheet-fg)}.sheet-close{position:fixed;top:18px;right:18px;z-index:1;display:flex;padding:6px;border:none;background:none;color:var(--sheet-fg);font-size:22px;opacity:.8;cursor:pointer}.sheet-content{width:100%;max-width:460px;margin:auto;padding:80px 32px 64px}.sheet-image{display:block;width:100%;aspect-ratio:16 / 9;-o-object-fit:cover;object-fit:cover;border-radius:12px;transform-origin:0 0}.sheet-content{transform-origin:0 0}.sheet-text{display:flex;flex-direction:column;gap:14px}.sheet-image+.sheet-text{margin-top:28px}.sheet-title{font-size:18px;font-weight:500;line-height:1.35;letter-spacing:-.005em}.sheet-tags{font-size:11px;letter-spacing:.04em;line-height:1.8;opacity:.55}.sheet-description{margin-top:6px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:300;font-size:14px;line-height:1.75;opacity:.88}.sheet-links{display:flex;flex-wrap:wrap;gap:20px;margin-top:10px}.sheet-link{display:inline-flex;align-items:center;gap:6px;color:inherit;font-size:13px;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--sheet-fg) 35%,transparent);text-underline-offset:4px}.sheet-credit{font-size:10px;letter-spacing:.03em;opacity:.45}.project-tile.no-media{border:1px solid var(--segment-track);box-shadow:none}@media (prefers-color-scheme: dark){.project-title,.project-description,.tag{color:var(--title-color-dark)}}html{scroll-behavior:smooth}.side-menu{display:none}@media (min-width: 768px){.side-menu{display:block;position:fixed;top:50%;left:2.5vw;transform:translateY(-50%);width:120px;height:120px;z-index:1000}:root{--content-gutter:calc(2.5vw + 100px)}}.side-menu-dial{position:relative;height:100%;perspective:300px;transform-style:preserve-3d}.side-menu-notch{position:absolute;left:0;top:50%;width:14px;height:1px;background:var(--underline-color);opacity:.7}.side-menu-link{position:absolute;left:22px;top:50%;font-style:italic;color:var(--link-color);white-space:nowrap;transform-origin:left center;backface-visibility:hidden}.side-menu-link:hover{opacity:.9!important}.contact-container{margin-top:10vh;min-height:60vh;padding:5vw;padding-inline:calc(var(--content-gutter) + 5vw);display:flex;flex-direction:column;align-items:center}.contact-links{display:flex;gap:30px;font-size:.875rem;line-height:1.25rem;font-weight:500}.contact-link{display:inline-flex;align-items:center;gap:8px}.contact-link:after{top:auto;bottom:-6px;left:auto;right:0;margin-top:0}.contact-link svg{width:14px;height:14px;flex-shrink:0}.contact-link:hover:after{width:calc(100% - 22px)}.segmented-control{position:relative;display:inline-flex;padding:2px;border-radius:9px;background:var(--segment-track);max-width:100%;overflow-x:auto;scrollbar-width:none;scroll-snap-type:x proximity;overscroll-behavior-x:contain}.segmented-control::-webkit-scrollbar{display:none}.segmented-control.more-right{-webkit-mask-image:linear-gradient(to right,black calc(100% - 32px),transparent);mask-image:linear-gradient(to right,black calc(100% - 32px),transparent)}.segmented-control.more-left{-webkit-mask-image:linear-gradient(to right,transparent,black 32px);mask-image:linear-gradient(to right,transparent,black 32px)}.segmented-control.more-left.more-right{-webkit-mask-image:linear-gradient(to right,transparent,black 32px,black calc(100% - 32px),transparent);mask-image:linear-gradient(to right,transparent,black 32px,black calc(100% - 32px),transparent)}.segmented-thumb{position:absolute;top:2px;bottom:2px;border-radius:7px;background:var(--segment-thumb);box-shadow:0 3px 8px #0000001f,0 3px 1px #0000000a;transition:left .3s ease,width .3s ease}.segmented-option{position:relative;z-index:1;flex-shrink:0;scroll-snap-align:center;padding:6px 18px;font-size:13px;font-weight:500;color:var(--text-color);opacity:.6;white-space:nowrap;transition:opacity .2s ease}.segmented-option.active{opacity:1;font-weight:600}@media (max-width: 480px){.segmented-option{padding:6px 7px;font-size:12px}.project-container{padding-inline:var(--content-gutter)}}.pubs{max-width:860px;margin:0 auto}.pub{display:grid;grid-template-columns:110px 1fr;gap:20px;padding:24px 0;border-bottom:1px solid var(--segment-track);animation:researchFadeIn .4s ease-out both}.pub:last-child{border-bottom:none}.pub-badge-column{padding-top:3px}.pub-badge{display:inline-block;width:100%;text-align:center;padding:4px 0;border-radius:6px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#7a3b12;background:rgba(250,177,120,.3)}.pub-badge-survey,.pub-badge-presentation{color:#8a2c43;background:rgba(245,171,184,.35)}.pub-badge-project{color:var(--text-color);background:var(--segment-track)}.dark-mode .pub-badge{color:#fab178;background:rgba(250,177,120,.15)}.dark-mode .pub-badge-survey,.dark-mode .pub-badge-presentation{color:#f5abb8;background:rgba(245,171,184,.15)}.dark-mode .pub-badge-project{color:var(--text-color);background:var(--segment-track)}.pub-title{font-size:16px;font-weight:600;line-height:1.45}.pub-authors{font-size:14px;margin-top:4px;opacity:.75}.pub-self{font-weight:600;text-decoration:underline;text-underline-offset:3px}.pub-venue{font-size:14px;margin-top:2px;opacity:.6}.pub-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.pub-button{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;padding:3px 12px;border-radius:999px;border:1px solid var(--text-color);opacity:.55;transition:opacity .2s ease,background .2s ease,color .2s ease}.pub-button:hover{opacity:.9}.pub-button.active{opacity:.9;background:var(--text-color);color:var(--background-color)}.pub-abstract{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s ease}.pub-abstract.open{grid-template-rows:1fr}.pub-abstract-inner{overflow:hidden}.pub-abstract-text{margin-top:14px;padding:14px 18px;border-left:2px solid var(--circle-color);border-radius:0 8px 8px 0;background:var(--segment-track);font-size:14px;line-height:1.65}.pub-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.pub-tag{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--segment-track);opacity:.7}@media (max-width: 767px){.pub{grid-template-columns:1fr;gap:10px}.pub-badge{width:auto;padding:4px 10px}}@keyframes researchFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.filter-hidden{display:none}.project-cell{animation:tileIn .35s ease-out}@keyframes tileIn{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.hover\:opacity-100:hover{opacity:1}@media (min-width: 1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
