@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Figtree Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./figtree-latin-ext-wght-normal.DCwSJGxG.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Figtree Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./figtree-latin-wght-normal.D_ZTVpCC.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Red Hat Display Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./red-hat-display-latin-ext-wght-normal.Do32GAgg.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Red Hat Display Variable;font-style:normal;font-display:swap;font-weight:300 900;src:url(./red-hat-display-latin-wght-normal.BX-N26TK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-cyrillic-ext-wght-normal.EocZY2iu.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--bg:#f8f9fc;--surface:#fff;--text:#1a202e;--muted:#4f5869;--border:#d3d8e4;--accent:#295cc2;--accent-soft:#e5ecfa;--chip:#e7ebf3;--tab-ink:#1a202e;--tab-bar:#f4f6fa;--tab-bar-fill:62%;--tab-active-ring:transparent;--tab-active:#1a202e;--tab-active-ink:#fff;--shimmer:#f4f6fa;--photo-tint:#7d8aa3;--map-space:#eef2f9;--map-water:#b6c7e2;--map-land:#f8fafd;--band-home:#f8f9fc;--band-experience:#eef1f7;--band-projects:#e5eaf2;--band-plants:#dde3ee;--name:"Red Hat Display Variable", ui-sans-serif, system-ui, sans-serif;--display:"Bricolage Grotesque Variable", ui-sans-serif, system-ui, sans-serif;--sans:"Figtree Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--radius:10px}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0f121a;--surface:#262d3b;--text:#e7e9ef;--muted:#a2aab9;--border:#3b4354;--accent:#94b6f9;--accent-soft:#283653;--chip:#2f3746;--tab-ink:#eceef2;--tab-bar:#3b4456;--tab-bar-fill:85%;--tab-active-ring:transparent;--tab-active:#12161f;--tab-active-ink:#e7e9ef;--shimmer:#3f485a;--photo-tint:#56627a;--map-space:#121722;--map-water:#22304a;--map-land:#6d7fa3;--band-home:#0f121a;--band-experience:#151a23;--band-projects:#1b212c;--band-plants:#222835}}*,:before,:after{box-sizing:border-box}html{scrollbar-gutter:stable;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px);--bar-clearance:5.5rem;scroll-padding-top:calc(var(--bar-clearance) + var(--safe-top))}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:1.0625rem;line-height:1.65}a{color:var(--accent);text-underline-offset:.2em;text-decoration:none}a:hover{text-decoration:underline}.bio-text a,.role-item li a,.gallery-intro a{text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in srgb, currentColor 55%, transparent);text-decoration-color:color-mix(in srgb, currentColor 55%, transparent)}.bio-text a:hover,.role-item li a:hover,.gallery-intro a:hover{text-decoration-color:currentColor}a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}h1,h2,h3{font-family:var(--display);letter-spacing:-.015em;text-wrap:balance;font-weight:700;line-height:1.2}p,li{text-wrap:pretty}.ext-icon{vertical-align:-.02em;opacity:.75;width:.78em;height:.78em;margin-left:.28em;transition:transform .12s,opacity .12s;display:inline-block}a:hover .ext-icon{opacity:1;transform:translate(1px,-1px)}h3 .ext-icon{vertical-align:.05em;width:.6em;height:.6em;margin-left:.3em}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.shell{max-width:76rem;padding:0 max(1.25rem, var(--safe-right)) var(--safe-bottom) max(1.25rem, var(--safe-left));flex-direction:column;min-height:100dvh;margin:0 auto;display:flex}main{overflow-wrap:break-word;flex:1;padding:0}.hero{flex-direction:column;justify-content:center;padding:2.5rem 0 5rem;display:flex}@media (width>=60rem) and (height>=36rem){.hero{min-height:calc(100svh - 4.2rem)}.section{min-height:100svh}}.bento{gap:.9rem;margin:2.25rem 0 0;display:grid}.widget{background:var(--surface);border:1px solid var(--border);border-radius:14px;min-width:0;padding:1.35rem 1.5rem;box-shadow:0 1px 2px #0000000a}.widget-label{color:var(--muted);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;margin:0 0 .6rem;font-size:.75rem;font-weight:600}.bento{grid-template-columns:repeat(2,minmax(0,1fr))}.bento .bio,.widget-plant,.widget-currently{grid-column:1/-1}@media (width<=61.99rem){.bento .widget-globe,.bento .widget-cats,.bento .widget-plant{display:none}}@media (width>=40rem) and (width<=61.99rem){.widget-currently .currently{grid-template-columns:repeat(3,minmax(0,1fr))}.widget-currently .currently.odd li:last-child{grid-column:auto}}@media (width>=62rem){.bento{grid-template-rows:auto 9rem;grid-template-columns:9rem minmax(0,1.47fr) 3.3rem 9rem minmax(0,1fr)}.bento .bio{grid-area:1/1/auto/3;padding-top:1.1rem}.widget-currently{grid-area:1/3/auto/6}.widget-globe{aspect-ratio:auto;grid-area:2/1}.widget-plant{grid-area:2/2/auto/4}.widget-cats{aspect-ratio:1;grid-area:2/4}.bento>*{overflow:hidden}}.widget-globe{clip-path:inset(0 round 14px);background:var(--map-space);padding:0;position:relative;overflow:hidden}.widget-globe>.map{opacity:0;transition:opacity .6s;position:absolute;inset:0}.widget-globe>.map.ready{opacity:1}.map-dot{width:10px;height:10px;box-shadow:0 0 0 2px color-mix(in srgb, var(--surface) 80%, transparent);background:#ff7a1a;border-radius:50%}.map-dot:after{content:"";background:#ff7a1a;border-radius:50%;animation:1.8s ease-out infinite map-pulse;position:absolute;inset:0}@keyframes map-pulse{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(3.2)}}.globe-time{background:color-mix(in srgb, var(--surface) 55%, transparent);-webkit-backdrop-filter:blur(8px)saturate(1.3);backdrop-filter:blur(8px)saturate(1.3);border:1px solid color-mix(in srgb, var(--border) 70%, transparent);font-family:var(--display);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;border-radius:calc(14px - .4rem);align-items:baseline;gap:.3rem;margin:0;padding:.2rem .5rem;font-size:.82rem;font-weight:700;line-height:1.2;display:flex;position:absolute;top:.4rem;right:.4rem}.globe-zone{color:var(--muted);font-family:var(--mono);font-size:.62rem;font-weight:500}.globe-time-placeholder{color:var(--muted)}.widget-globe>.map{cursor:grab;touch-action:pan-y}.widget-globe>.map.spinning{cursor:grabbing}@media (width<=61.99rem){.globe-time{font-size:1.15rem}}.bento .widget-cats{z-index:1;padding:0;position:relative;overflow:visible}.cats-empty{border-radius:inherit;height:100%;color:var(--muted);background:repeating-linear-gradient(135deg, transparent 0 12px, color-mix(in srgb, var(--chip) 60%, transparent) 12px 24px);flex-direction:column;justify-content:center;padding:.9rem 1rem;font-size:.9rem;display:flex}.cats-empty p{margin:0}.cats-track{border-radius:inherit;clip-path:inset(0 round 13px);position:absolute;inset:0;overflow:hidden}.cat-slide{opacity:0;margin:0;transition:opacity .8s;position:absolute;inset:0}.cat-slide.current{opacity:1}.cat-slide img{object-fit:cover;width:100%;height:100%;display:block}.cats-arrow{z-index:1;background:var(--tab-active);border:0;border:1px solid color-mix(in srgb, var(--border) 80%, transparent);width:1.75rem;height:1.75rem;color:var(--tab-active-ink);cursor:pointer;opacity:0;border-radius:999px;place-items:center;margin-top:-.875rem;padding:0;transition:opacity .2s,background-color .2s;display:grid;position:absolute;top:50%;box-shadow:0 2px 8px #0000004d}.cats-prev{left:calc(-.875rem - 1px)}.cats-next{right:calc(-.875rem - 1px)}.widget-cats:hover .cats-arrow{opacity:1}.widget-cats:has(:focus-visible) .cats-arrow{opacity:1}.cats-arrow:hover{filter:brightness(1.25)}.cats-arrow:focus-visible{outline:2px solid var(--text);outline-offset:2px}.widget-plant{grid-template-columns:minmax(0,1fr) 9rem;min-height:9rem;padding:0;display:grid;overflow:hidden}.plant-photo{background:linear-gradient(100deg, var(--chip) 35%, var(--shimmer) 50%, var(--chip) 65%) 0 0 / 250% 100% var(--chip);order:2;animation:1.6s ease-in-out infinite shimmer;position:relative}.plant-photo.loaded{animation:none}.plant-photo img{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .6s;position:absolute;inset:0}.plant-photo:after{content:"";background:var(--photo-tint);mix-blend-mode:color;opacity:1;pointer-events:none;transition:opacity .45s;position:absolute;inset:0}.widget-plant:hover .plant-photo:after,.widget-plant:focus-within .plant-photo:after{opacity:0}.plant-photo.loaded img{opacity:1}.plant-body{flex-direction:column;justify-content:center;gap:.3rem;min-width:0;padding:.65rem 1.1rem;display:flex}.plant-body p,.plant-body .widget-label{margin:0}.plant-name{line-height:1.25}.plant-sci{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.plant-common{font-family:var(--display);color:var(--text);font-size:1.15rem;font-weight:700;display:block}.plant-sci{color:var(--muted);font-size:.95rem}.plant-meta .tag{background:var(--chip);border:1px solid var(--border);color:var(--text);font-family:var(--mono);white-space:nowrap;border-radius:6px;padding:.1rem .5rem;font-size:.72rem;line-height:1.6;display:inline-block}.plant-photo{display:block}.plant-badge{z-index:1;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;background:#00000073;border-radius:8px;place-items:center;width:1.7rem;height:1.7rem;transition:background-color .2s;display:grid;position:absolute;top:.45rem;right:.45rem}.widget-plant:hover .plant-badge,.plant-photo:focus-visible .plant-badge{background:#000000b3}.plant-photo:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}.plant-credit{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--muted);font-size:.75rem;overflow:hidden}.plant-skeleton span{background:var(--chip);border-radius:4px;height:.8rem;margin:.45rem 0;display:block}.plant-skeleton span:first-child{width:55%;height:1.1rem}.plant-skeleton span:nth-child(2){width:75%}.plant-skeleton span:nth-child(3){width:40%}@media (width<=40rem){.widget-plant{grid-template-columns:minmax(0,1fr) 6.5rem}}.widget-currently{flex-direction:column;padding:1.1rem 1.2rem 1.2rem;display:flex}.currently{flex:1;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:1fr;gap:.5rem;margin:.2rem 0 0;padding:0;list-style:none;display:grid}.currently.odd li:last-child{grid-column:1/-1}.currently li{background:color-mix(in srgb, var(--chip) 55%, transparent);border:1px solid color-mix(in srgb, var(--border) 70%, transparent);border-radius:10px;grid-template-columns:2rem minmax(0,1fr);align-items:center;gap:.7rem;min-width:0;padding:.55rem .75rem .55rem .55rem;font-size:.95rem;line-height:1.3;display:grid}.currently-icon{background:var(--surface);border:1px solid color-mix(in srgb, var(--border) 70%, transparent);width:2rem;height:2rem;color:var(--muted);border-radius:8px;place-items:center;display:grid}.currently-text{min-width:0}.currently-label{color:var(--muted);margin-bottom:.05rem;font-size:.74rem;line-height:1.2;display:block}.currently-detail{color:var(--muted);font-size:.8rem;display:block}.currently a,.plant-body .cta{text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, currentColor 55%, transparent);text-decoration-color:color-mix(in srgb, currentColor 55%, transparent)}@media (prefers-reduced-motion:reduce){.map,.cat-slide,.cats-arrow,.plant-photo img,.plant-photo:after{transition:none}.plant-photo{animation:none}.map-dot:after{opacity:0;animation:none}}.hero{position:relative}.scroll-cue{width:2.75rem;height:2.75rem;color:var(--muted);opacity:0;border-radius:999px;place-items:center;margin-left:-1.375rem;animation:.7s 2.5s forwards cue-in,1.8s ease-in-out 3.2s infinite cue-bob;display:grid;position:absolute;bottom:1.25rem;left:50%}.scroll-cue:hover{color:var(--text);background:color-mix(in srgb, var(--chip) 70%, transparent)}.scroll-cue:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:2px}@keyframes cue-in{to{opacity:1}}@keyframes cue-bob{0%,to{transform:translateY(0)}50%{transform:translateY(7px)}}@media (prefers-reduced-motion:reduce){.scroll-cue{opacity:1;animation:none}}.hero,.section{--band:var(--band-home);background:var(--band);box-shadow:0 0 0 100vmax var(--band);clip-path:inset(0 -100vmax);scroll-margin-top:calc(-1 * var(--bar-clearance))}.section{padding:5.5rem 0 4.5rem;position:relative}#home{scroll-margin-top:100vh}#experience{--band:var(--band-experience)}#projects{--band:var(--band-projects)}#plants{--band:var(--band-plants)}.section-title{letter-spacing:-.02em;margin:0 0 1.75rem;font-size:clamp(1.9rem,1.3rem + 2vw,2.75rem)}.section-row .section-title{margin:0}.name{color:var(--text);font-family:var(--name);letter-spacing:-.01em;margin:0;font-size:clamp(2.75rem,1.4rem + 5vw,6rem);font-weight:900;line-height:1}.role{color:var(--text);margin:.6rem 0 0;font-size:clamp(1.1rem,.85rem + 1.1vw,1.75rem);font-weight:600}.role .place{white-space:nowrap;color:var(--muted);font-weight:400}.tabs-sentinel{height:calc(1.25rem + var(--safe-top))}.tabs-dock{top:var(--safe-top);z-index:20;margin:0 calc(-1 * max(1.25rem, var(--safe-right))) 0 calc(-1 * max(1.25rem, var(--safe-left)));pointer-events:none;justify-content:center;display:flex;position:sticky}@supports (-webkit-touch-callout:none){.tabs-dock{margin:0 calc(50% - 50vw)}}.tabs{--pill-r:1.55rem;--spring:cubic-bezier(.34, 1.4, .5, 1);pointer-events:auto;border-radius:var(--pill-r);flex-wrap:wrap;justify-content:center;gap:.25rem;padding:calc(.3rem + 1px);display:flex;position:relative}.tabs:before{content:"";z-index:-1;pointer-events:none;background:color-mix(in srgb, var(--tab-bar) var(--tab-bar-fill), transparent);-webkit-backdrop-filter:blur(10px)saturate(1.7);backdrop-filter:blur(10px)saturate(1.7);border:1px solid color-mix(in srgb, var(--border) 70%, transparent);border-radius:inherit;transition:border-radius .3s,box-shadow .3s;position:absolute;inset:0}@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.tabs:before{background:var(--tab-bar)}}.tabs.docked{border-radius:0 0 var(--pill-r) var(--pill-r)}.tabs-edge-colour{display:none}.tabs.docked .tabs-edge-colour{top:0;left:var(--pill-r);right:var(--pill-r);background-color:color-mix(in srgb, var(--tab-bar) var(--tab-bar-fill), var(--bg));opacity:0;height:.3rem;display:block;position:absolute}@supports (-webkit-touch-callout:none){.tabs.docked:before{background:color-mix(in srgb, var(--tab-bar) var(--tab-bar-fill), var(--bg));-webkit-backdrop-filter:none;backdrop-filter:none}}.tabs.docked:before{top:calc(-1 * var(--safe-top) - 2rem);border-top:0;box-shadow:0 10px 28px -12px #00000073}.tabs a{z-index:1;color:var(--tab-ink);transition:color .3s ease .1s, background-color .2s ease, transform .25s var(--spring);border-radius:999px;justify-items:center;padding:.4rem 1rem;font-size:.95rem;font-weight:600;display:inline-grid;position:relative}.tabs a:after{content:attr(data-label);visibility:hidden;pointer-events:none;height:0;font-weight:800;overflow:hidden}.tabs a:hover{color:var(--text);background:color-mix(in srgb, var(--surface) 45%, transparent);text-decoration:none;transform:translateY(-1px)}.tabs a:active{transition-duration:80ms;transform:scale(.94)}.tabs a[aria-current=true]{background-color:var(--tab-active);color:var(--tab-active-ink);box-shadow:0 0 0 1px var(--tab-active-ring), 0 1px 2px #00000014;font-weight:800}@media (forced-colors:active){.tabs a[aria-current=true]{outline-offset:-2px;outline:2px solid highlight}}.tabs a:focus-visible{outline:2px solid var(--text);outline-offset:2px;box-shadow:0 0 0 2px var(--bg), 0 0 0 6px var(--bg)}.tabs-indicator{width:var(--w,0);height:var(--h,0);transform:translate(var(--x,0), var(--y,0));background:var(--tab-active);box-shadow:0 0 0 1px var(--tab-active-ring), 0 1px 3px #00000040;opacity:0;border-radius:999px;transition:transform .4s cubic-bezier(.3,1.06,.4,1),width .4s cubic-bezier(.3,1.06,.4,1),opacity .2s;position:absolute;top:0;left:0}.tabs-indicator.instant{transition:opacity .2s}.tabs.indicator-ready .tabs-indicator{opacity:1}.tabs.indicator-ready a[aria-current=true]{box-shadow:none;background-color:#0000}.tabs a[aria-current=true]:hover{color:var(--tab-active-ink)}.tabs.indicator-ready a[aria-current=true]:hover{background-color:#0000}.site-footer{--band:var(--band-plants);background:var(--band);box-shadow:0 0 0 100vmax var(--band);clip-path:inset(0 -100vmax);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;padding:1rem 0 2.5rem;font-size:.875rem;display:flex}.site-footer .links{gap:1.25rem;display:flex}.bio-text{font-size:1.1rem;line-height:1.45}.bio-text p{margin:0}.bio-text p+p:before{content:"";background:var(--border);border-radius:2px;width:2.5rem;height:2px;margin:.75rem 0;display:block}.icon-button{vertical-align:middle;border:1.5px solid var(--border);width:2.1rem;height:2.1rem;color:var(--muted);background:0 0;border-radius:10px;place-items:center;margin-left:.4rem;transition:color .15s,border-color .15s,background-color .15s,transform .15s;display:inline-grid}.icon-button:hover{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, transparent);transform:translateY(-1px)}.icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.socials{vertical-align:middle;gap:.4rem;margin-left:.4rem;display:inline-flex}.socials .icon-button{margin-left:0}@media (width<=34rem){.socials{margin:.75rem 0 0;display:flex}}.has-tip{position:relative}.tooltip{display:none}@media (hover:hover) and (pointer:fine) and (width>=40rem){.tooltip{background:var(--surface);color:var(--text);border:1px solid var(--border);font-family:var(--sans);white-space:nowrap;pointer-events:none;opacity:0;border-radius:8px;padding:.32rem .7rem;font-size:.85rem;font-weight:600;line-height:1.3;transition:opacity .15s,transform .18s;display:block;position:absolute;top:50%;left:calc(100% + .75rem);transform:translate(-4px,-50%);box-shadow:0 6px 20px -10px #00000059}.tooltip:before{content:"";background:var(--surface);border-left:1px solid var(--border);border-bottom:1px solid var(--border);width:8px;height:8px;position:absolute;top:50%;left:-5px;transform:translateY(-50%)rotate(45deg)}.has-tip:hover .tooltip,.has-tip:focus-visible .tooltip{opacity:1;pointer-events:auto;transform:translateY(-50%)}.tooltip:after{content:"";width:.8rem;position:absolute;top:0;bottom:0;right:100%}.has-tip.tip-dismissed .tooltip{opacity:0;pointer-events:none}}@media (prefers-reduced-motion:reduce){.tooltip{transition:none}}.exp-grid{gap:1rem 3.5rem;display:grid}.exp-main{max-width:48rem}@media (width>=62rem){.exp-grid{grid-template-columns:minmax(0,48rem) minmax(16rem,1fr)}.exp-side .section-label:first-child{margin-top:0}.exp-side .skills{grid-template-columns:1fr;gap:.35rem}.exp-side .skills dd{margin-bottom:.9rem}}.edu{padding-top:.25rem}.edu h4{letter-spacing:-.01em;text-wrap:balance;margin:0;font-size:1.15rem;font-weight:700}.edu .dates{margin:.2rem 0 .6rem}.edu-credentials{color:var(--muted);margin:0;padding:0;font-size:.975rem;line-height:1.5;list-style:none}.edu-credentials li+li{margin-top:.15rem}.measure{max-width:48rem}.section-label{color:var(--muted);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;margin:0 0 1rem;font-size:.78rem;font-weight:600}.section-label:not(:first-child){margin-top:3rem}.section-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem 1rem;margin-bottom:1.5rem;display:flex}.section-row .section-label{margin:0}.cta{white-space:nowrap;font-size:.925rem;font-weight:500}.chips{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.chips li{font-family:var(--mono);color:var(--text);border-radius:6px;padding:.15rem .6rem;font-size:.78rem;line-height:1.6}.tech{--tint:22%;--edge:55%;background:color-mix(in srgb, var(--tech,#8791a5) var(--tint), var(--surface));border:1px solid color-mix(in srgb, var(--tech,#8791a5) var(--edge), transparent)}@media (prefers-color-scheme:dark){.tech{--tint:34%;--edge:60%}}.tech-typescript{--tech:#3178c6}.tech-javascript{--tech:#f7df1e}.tech-go{--tech:#00add8}.tech-postgresql{--tech:#4169e1}.tech-mysql{--tech:#00758f}.tech-graphql{--tech:#e10098}.tech-svelte{--tech:#ff3e00}.tech-vue{--tech:#42b883}.tech-node-js{--tech:#5fa04e}.tech-nuxt{--tech:#00dc82}.tech-sequelize{--tech:#52b0e7}.tech-postgis{--tech:#4a7ab6}.tech-gis{--tech:#2e9e5b}.tech-arcgis{--tech:#007ac2}.tech-ai-assisted-workflows{--tech:#8b5cf6}.tech-git{--tech:#f05032}.tech-ci-cd{--tech:#2088ff}.tech-docker{--tech:#2496ed}.tech-ffmpeg{--tech:#007808}.tech-react{--tech:#58c4dc}.tech-python{--tech:#3776ab}.tech-rust{--tech:#ce422b}.tech-zig{--tech:#f7a41d}.tech-maplibre{--tech:#295daa}.tech-aws{--tech:#f90}.tech-highcharts{--tech:#8087e8}.tech-esri{--tech:#0079c1}.badge{background:var(--accent-soft);color:var(--accent);white-space:nowrap;border-radius:999px;padding:.1rem .55rem;font-size:.75rem;font-weight:600}.projects{grid-template-columns:repeat(auto-fit,minmax(min(100%,26rem),1fr));gap:1.75rem;margin:0;padding:0;list-style:none;display:grid}.card-aminote{--brand:#85ff2c;--brand-deep:#45b000;--button-text:#0d210b}.card-warlock{--brand:#a04eca;--brand-deep:#7b2fa3;--button-text:#fff}.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;flex-direction:column;display:flex;overflow:hidden;box-shadow:0 1px 2px #0000000a;container-type:inline-size}.card-media{aspect-ratio:16/9;background:radial-gradient(120% 90% at 50% 0%, #ffffff47, transparent 60%), var(--brand);border-bottom:1px solid var(--border);justify-content:center;align-items:center;padding:.5rem;display:flex}.card-media img{object-fit:contain;object-position:center;width:100%;height:100%;display:block}.card-body{flex-direction:column;flex:1;padding:1.4rem 1.5rem 1.5rem;display:flex}.card-head{align-items:flex-start;gap:.9rem;display:flex}.card-icon{background:var(--brand);object-fit:contain;border-radius:11px;flex:none;width:44px;height:44px;padding:5px}.card-icon.pixel{image-rendering:pixelated}.card-title{flex-wrap:wrap;align-items:center;gap:.35rem .65rem;display:flex}.card-title h3{letter-spacing:-.02em;margin:0;font-size:1.5rem}.card-title h3 a{color:var(--text)}.card .tagline{color:var(--muted);margin:.1rem 0 0;font-size:.95rem}.card .blurb{margin:1rem 0 1.25rem}.card .badge{background:var(--brand);color:var(--button-text)}.card-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.9rem 1rem;margin-top:auto;display:flex}@container (width<=30rem){.card-foot{flex-direction:column;align-items:flex-start}}.button{--tint:18%;--tint-hover:30%;--bg-l:.95;--bg-c:.3;--bg-l-hover:.89;--bg-c-hover:.6;--edge-l:.74;--edge-l-hover:.62;background:color-mix(in srgb, var(--brand) var(--tint), var(--surface));background:oklch(from var(--brand) var(--bg-l) calc(c * var(--bg-c)) h);border:1px solid color-mix(in srgb, var(--brand) 55%, transparent);border-color:oklch(from var(--brand) var(--edge-l) c h);color:var(--text);white-space:nowrap;border-radius:8px;align-items:center;padding:.5rem .95rem;font-size:.925rem;font-weight:600;transition:background-color .15s,border-color .15s,transform .12s;display:inline-flex}@media (prefers-color-scheme:dark){.button{--tint:26%;--tint-hover:32%;--bg-l:.34;--bg-c:.4;--bg-l-hover:.4;--bg-c-hover:.65;--edge-l:.6;--edge-l-hover:.78}}.button:hover{background:color-mix(in srgb, var(--brand) var(--tint-hover), var(--surface));background:oklch(from var(--brand) var(--bg-l-hover) calc(c * var(--bg-c-hover)) h);border-color:var(--brand);border-color:oklch(from var(--brand) var(--edge-l-hover) calc(c * 1.15) h);text-decoration:none;transform:translateY(-1px)}.button:focus-visible{outline-color:var(--text)}@media (prefers-reduced-motion:reduce){.tabs:before,.tabs a,.tabs-indicator,.button,.ext-icon{transition:none}.button:hover,a:hover .ext-icon,.tabs a:hover,.tabs a:active,.icon-button:hover{transform:none}}.roles{--node:.85rem;--rail:2.1rem;padding:0 0 0 var(--rail);margin:0;list-style:none;position:relative}.roles:before{content:"";left:calc(var(--node) / 2 - 1px);background:linear-gradient(var(--border) 85%, transparent);border-radius:2px;width:2px;position:absolute;top:1.1rem;bottom:.5rem}.role-item{padding:0 0 2rem;position:relative}.role-item:last-child{padding-bottom:0}.role-item:before{content:"";left:calc(-1 * var(--rail));width:var(--node);height:var(--node);background:var(--band);border:2px solid var(--muted);box-sizing:border-box;border-radius:50%;position:absolute;top:.55rem}.role-item.current:before{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 22%, transparent)}.role-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.25rem 1rem;display:flex}.role-head h3{letter-spacing:-.02em;margin:0;font-size:1.5rem;font-weight:700}.dates{color:var(--muted);font-family:var(--mono);white-space:nowrap;font-size:.82rem}.role-company{color:var(--muted);font-family:var(--display);letter-spacing:-.005em;margin:.2rem 0 .9rem;font-size:1.1rem;font-weight:500}.role-item ul{margin:0;padding-left:1.1rem;list-style:outside}.role-item li{margin-bottom:.5rem;padding-left:.25rem}.role-item li::marker{color:var(--muted)}.skills{grid-template-columns:max-content 1fr;gap:.9rem 1.5rem;margin:0;display:grid}.skills dt{color:var(--muted);padding-top:.1rem;font-size:.9rem}.skills dd{margin:0}.gallery-intro{max-width:44rem;margin:0 0 1.75rem;font-size:.98rem;line-height:1.55}.gallery-wrap{--gw:100cqw;container-type:inline-size}.gallery{--cols:2;--gap:.6rem;--row:calc((var(--gw) - (var(--cols) - 1) * var(--gap)) / var(--cols) * .92);grid-template-columns:repeat(var(--cols), minmax(0, 1fr));grid-auto-rows:var(--row);gap:var(--gap);grid-auto-flow:dense;margin:0;padding:0;list-style:none;display:grid}.tile{border-radius:12px;min-width:0;position:relative}.w2{grid-column-end:span 2}.h2{grid-row-end:span 2}.tile a{border-radius:inherit;background:linear-gradient(100deg, var(--chip) 35%, var(--shimmer) 50%, var(--chip) 65%) 0 0 / 250% 100% var(--chip);width:100%;height:100%;animation:1.6s ease-in-out infinite shimmer;display:block;overflow:hidden}.tile.is-loaded a{animation:none}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.gallery.fade-ready .tile:not(.is-loaded) img{opacity:0}.gallery.fade-ready .tile.is-loaded img{transition:opacity .6s,filter .2s}.tile a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.tile img{-webkit-user-drag:none;-webkit-user-select:none;user-select:none;object-fit:cover;object-position:var(--fx,50%) var(--fy,50%);width:100%;height:100%;transition:filter .2s;display:block}.tile-caption{color:#fff;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0000008c;border-radius:8px;max-width:calc(100% - 1rem);padding:.2rem .55rem;font-size:.75rem;font-weight:600;line-height:1.5;position:absolute;bottom:.5rem;left:.5rem}.fx-0{--fx:0%}.fx-10{--fx:10%}.fx-20{--fx:20%}.fx-30{--fx:30%}.fx-40{--fx:40%}.fx-50{--fx:50%}.fx-60{--fx:60%}.fx-70{--fx:70%}.fx-80{--fx:80%}.fx-90{--fx:90%}.fx-100{--fx:100%}.fy-0{--fy:0%}.fy-10{--fy:10%}.fy-20{--fy:20%}.fy-30{--fy:30%}.fy-40{--fy:40%}.fy-50{--fy:50%}.fy-60{--fy:60%}.fy-70{--fy:70%}.fy-80{--fy:80%}.fy-90{--fy:90%}.fy-100{--fy:100%}@media (width>=40rem){.gallery{--cols:4;--gap:.75rem;grid-auto-flow:row}.c1{grid-column-start:1}.c2{grid-column-start:2}.c3{grid-column-start:3}.c4{grid-column-start:4}.r1{grid-row-start:1}.r2{grid-row-start:2}.r3{grid-row-start:3}.r4{grid-row-start:4}.r5{grid-row-start:5}.r6{grid-row-start:6}.r7{grid-row-start:7}.r8{grid-row-start:8}.r9{grid-row-start:9}.r10{grid-row-start:10}.r11{grid-row-start:11}.r12{grid-row-start:12}}@media (hover:hover) and (pointer:fine){.tile:hover img{filter:brightness(1.18)saturate(1.12)}.tile-caption{opacity:0;transition:opacity .2s,transform .2s;transform:translateY(4px)}.tile:hover .tile-caption{opacity:1;transform:none}.tile:has(a:focus-visible) .tile-caption{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.tile img,.gallery.fade-ready .tile.is-loaded img,.tile-caption{transition:none}.tile a{animation:none}}.pswp{--pswp-bg:#0b0c0e}.pswp .pswp__top-bar{top:var(--safe-top);padding:0 var(--safe-right) 0 var(--safe-left);box-sizing:border-box}.pswp__caption{left:50%;bottom:calc(1.25rem + var(--safe-bottom));color:#fff;max-width:calc(100% - 2rem);font-family:var(--sans);white-space:nowrap;text-overflow:ellipsis;pointer-events:none;background:#0000008c;border-radius:999px;padding:.3rem .8rem;font-size:.9rem;font-weight:600;position:absolute;overflow:hidden;transform:translate(-50%)}.pswp__caption:empty{display:none}.error{padding:3rem 0}.error-code{color:var(--muted);font-family:var(--mono);margin:0;font-size:.85rem}.error h1{margin:.25rem 0 .5rem;font-size:2.25rem}@media (width<=34rem){.tabs a{padding:.35rem .75rem;font-size:.875rem}.card-media{padding:.25rem}.card-body{padding:1.15rem 1.1rem 1.25rem}.skills{grid-template-columns:1fr;gap:.35rem}.skills dd{margin-bottom:.75rem}}@media print{:root{--bg:#fff;--surface:#fff;--text:#000;--muted:#444;--border:#ccc;--accent:#000;--chip:#fff}.tabs,.site-footer,.ext-icon,.icon-button,.cta,.button,.card-media{display:none}.shell{max-width:none;min-height:0}.chips li{padding:0}.chips li:not(:last-child):after{content:","}.tech,.button{background:0 0;border:0}}
