@font-face{font-family:Manrope;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/manrope-latin-variable.woff2) format("woff2")}@font-face{font-family:DM Sans;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/dm-sans-latin-variable.woff2) format("woff2")}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/dm-mono-latin-400.woff2) format("woff2")}@font-face{font-family:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/dm-mono-latin-500.woff2) format("woff2")}:root,:root[data-theme=dark]{color-scheme:dark;--primary: #555;--bg: #111211;--surface: #191a19;--surface-2: #202120;--text: #eeeae3;--muted: #95958f;--faint: #858780;--line: #30322f;--line-strong: #444640;--header: rgba(25, 26, 25, .9);--soft-shadow: rgba(0, 0, 0, .26);--portrait: #353634;--focus: #b5b8a9;--footer-text: #898b84;--contribution-1: #454d42;--contribution-2: #65705c;--contribution-3: #8a9b78;--contribution-4: #b4c4a1;--availability-blue: #4f8dff;--availability-ring: rgba(79, 141, 255, .16);--availability-glow: rgba(79, 141, 255, .5);--spotify-green: #1ed760;--github-pulse: #8e9b79;--on-dark: #eeeae3;--on-dark-strong: #fff;--viewer-muted: #ccc;--viewer-backdrop: rgba(12, 13, 12, .78);--viewer-control-bg: rgba(20, 20, 20, .55);--viewer-control-border: rgba(255, 255, 255, .3);--project-visual-bg: #292b29;--project-visual-text: #f5f5ef;--project-clixy-bg: #282b28;--project-clixy-highlight: #666c60;--project-athlete-bg: #202220;--project-athlete-highlight: #50534d;--project-overlay-border: rgba(255, 255, 255, .16);--project-overlay-bg: rgba(18, 19, 18, .6);--project-overlay-shadow: rgba(0, 0, 0, .25);--project-chip-border: rgba(255, 255, 255, .22);--github-chart-filter: brightness(.56) saturate(1.25)}:root[data-theme=light]{color-scheme:light;--bg: #f2f1ed;--surface: #faf9f5;--surface-2: #eae9e3;--text: #20211e;--muted: #666962;--faint: var(--muted);--line: #d8d9d1;--line-strong: #b8bbb0;--header: rgba(250, 249, 245, .92);--soft-shadow: rgba(38, 39, 34, .1);--portrait: #c6c7c0;--focus: #4a4c46;--footer-text: #62655e;--contribution-1: #cbd4bf;--contribution-2: #99ad87;--contribution-3: #6e865b;--contribution-4: #435b35;--github-chart-filter: none}*,*:before,*:after{box-sizing:border-box}html{scroll-padding-top:7rem}html.is-ready{scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--bg);color:var(--text);font-family:DM Sans,sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;transition:background-color .25s,color .25s}.theme-switching body{transition:none}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-old(root){z-index:0}::view-transition-new(root){z-index:1}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:-1;opacity:.13;background-image:radial-gradient(var(--line-strong) .6px,transparent .6px);background-size:22px 22px;-webkit-mask-image:linear-gradient(180deg,black,transparent 70%);mask-image:linear-gradient(180deg,black,transparent 70%)}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible{outline:2px solid var(--focus);outline-offset:4px}button{font:inherit}img{display:block;max-width:100%}h1,h2,h3,p{margin-top:0}.page-shell{width:min(100% - 80px,1232px);margin-inline:auto}.skip-link{position:fixed;top:-5rem;left:1rem;padding:.55rem .8rem;background:var(--text);color:var(--bg);z-index:50}.skip-link:focus{top:1rem}.site-header{position:relative;z-index:20;padding-top:1.7rem}.site-header__inner{min-height:3.7rem;display:flex;align-items:center;justify-content:space-between;gap:1.5rem}.availability,.header-tools{font:11px DM Mono,monospace;color:var(--muted);letter-spacing:.025em}.availability{display:flex;align-items:center;gap:.65rem}.availability__dot{width:7px;height:7px;border-radius:50%;background:var(--availability-blue);box-shadow:0 0 0 4px var(--availability-ring),0 0 16px var(--availability-glow)}.header-tools{display:flex;align-items:center;justify-content:flex-end;gap:.7rem;white-space:nowrap}.header-tools__location a{color:inherit;transition:color .2s}.header-tools__location a:hover{color:var(--text)}.header-tools__location .time{margin-left:.65rem}.header-tools__action{display:flex;align-items:center;gap:.55rem}.header-tools__separator{color:var(--faint)}.site-nav{position:fixed;top:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.1rem;padding:.35rem;background:var(--header);border:1px solid var(--line-strong);border-radius:999px;box-shadow:0 12px 35px var(--soft-shadow);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);z-index:30;white-space:nowrap;transition:box-shadow .2s,border-color .2s}.site-nav.is-scrolled{box-shadow:0 17px 45px var(--soft-shadow)}.site-nav a{padding:.55rem .82rem;border-radius:999px;font:11px DM Mono,monospace;color:var(--muted);transition:color .2s,background-color .2s}.site-nav a:hover,.site-nav a.is-active{color:var(--text);background:var(--surface-2)}.theme-toggle{display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--text);cursor:pointer;transition:background-color .2s,color .2s}.theme-toggle:hover{background:var(--surface-2)}.theme-toggle svg{width:18px;height:18px}.eyebrow,.section-heading__number,.section__index{color:var(--muted);font:11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.14em}.hero{min-height:min(780px,100dvh);padding-top:clamp(5rem,11vh,8.5rem);display:flex;flex-direction:column}.hero__eyebrow{display:flex;align-items:center;gap:.8rem;margin-bottom:2rem}.eyebrow__line{width:24px;height:1px;background:var(--muted)}.hero__grid{display:grid;grid-template-columns:minmax(260px,.79fr) minmax(0,1.21fr);align-items:center;gap:clamp(3.5rem,8vw,8rem)}.hero__portrait{position:relative;width:min(100%,288px);justify-self:center;aspect-ratio:1/1.15;overflow:hidden;background:var(--portrait);border-radius:20px}.hero__portrait img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;filter:grayscale(1);-o-object-position:center top;object-position:center top}.hero__content{padding-block:2rem}.hero__intro{margin-bottom:.55rem;color:var(--muted);font:12px DM Mono,monospace}.hero h1{margin-bottom:1.2rem;font:800 clamp(3.7rem,5.7vw,6.7rem)/1.03 "Manrope",sans-serif;letter-spacing:-.075em}.hero__role{margin-bottom:1.4rem;font:500 clamp(.75rem,1vw,.9rem) "DM Mono",monospace;letter-spacing:-.03em}.hero__summary{max-width:470px;margin-bottom:1.8rem;color:var(--muted);font-size:clamp(1.05rem,1.35vw,1.25rem);line-height:1.7}.hero__links{display:flex;flex-wrap:wrap;-moz-column-gap:1.4rem;column-gap:1.4rem;row-gap:.5rem;max-width:600px;margin-bottom:3rem}.hero__links a,.section-heading__link{border-bottom:1px solid var(--line-strong);padding-bottom:.13rem;font:11px DM Mono,monospace;color:var(--text);transition:border-color .2s,color .2s}.hero__links a[hidden]{display:none}.hero__links a:hover,.section-heading__link:hover{border-color:var(--text)}.spotify{position:relative;width:min(100%,460px);padding:1rem 1.1rem;border:1px solid var(--line-strong);border-radius:16px;background:var(--surface);box-shadow:0 16px 40px var(--soft-shadow)}.spotify__top,.spotify__brand,.spotify__track{display:flex;align-items:center}.spotify__top{justify-content:space-between;gap:1rem;padding-bottom:.85rem;border-bottom:1px solid var(--line)}.spotify__brand{gap:.8rem;min-width:0;color:var(--muted);font:11px DM Mono,monospace;white-space:nowrap}.spotify__brand>span{padding-left:.8rem;border-left:1px solid var(--line-strong)}.spotify__logo{width:25px;height:25px;flex:none;color:var(--spotify-green)}.spotify__playlist{color:var(--muted);font:11px DM Mono,monospace;text-decoration:underline;text-underline-offset:4px;white-space:nowrap;transition:color .2s}.spotify__playlist:hover{color:var(--text)}.spotify__track{display:grid;grid-template-columns:78px minmax(0,1fr) auto;gap:1rem;padding-top:.95rem}.spotify__art{display:grid;min-height:78px;flex:0 0 78px;place-items:center;overflow:hidden;border-radius:8px;background:var(--surface-2)}.spotify__art img{width:78px;height:78px;-o-object-fit:cover;object-fit:cover}.spotify__details{display:flex;flex:1 1 0;flex-direction:column;min-width:0}.spotify__details strong,.spotify__details>span{display:block;width:100%;min-width:0;max-width:100%}.spotify__details strong{overflow:hidden;color:var(--text);font:700 1.2rem/1.25 Manrope,sans-serif;letter-spacing:-.04em;text-overflow:ellipsis;white-space:nowrap}.spotify__details>span{display:block;overflow:hidden;margin-top:.25rem;color:var(--muted);font:12px DM Sans,sans-serif;text-overflow:ellipsis;white-space:nowrap}.spotify__track-link{display:none}.spotify__controls{display:flex;align-items:center;gap:.25rem;margin-left:0}.spotify__control,.spotify__play{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;padding:0;border:1px solid transparent;border-radius:50%;background:transparent;color:var(--muted);cursor:pointer;transition:border-color .2s,background-color .2s,color .2s,transform .2s}.spotify__play{flex-basis:46px;width:46px;height:46px;border-color:var(--line-strong);color:var(--text)}.spotify__control:hover,.spotify__play:hover{border-color:var(--line-strong);background:var(--surface-2);color:var(--text)}.spotify__control:disabled,.spotify__play:disabled{cursor:not-allowed;opacity:.35}.spotify__control:focus-visible,.spotify__play:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.spotify__control svg{width:17px;height:17px}.spotify__play svg{width:21px;height:21px}.spotify__play svg[hidden]{display:none!important}.spotify__art.is-changing,.spotify__details.is-changing{animation:spotify-track-in .34s ease both}.spotify__embed{position:absolute;left:0;width:100%;height:80px;overflow:hidden;opacity:0;pointer-events:none}.site-nav a:active,.theme-toggle:active,.hero__links a:active,.section-heading__link:active,.project__details>a:active,.contact__email:active{transform:translateY(1px)}.hero__bottom{margin-top:auto;padding:3.2rem 0 2rem;display:flex;justify-content:space-between;border-bottom:1px solid var(--line);color:var(--faint);font:11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.12em}.section{padding-top:clamp(6rem,11vw,10rem)}.hello{display:grid;grid-template-columns:1fr 3fr;gap:2rem;padding-bottom:clamp(6rem,11vw,10rem);border-bottom:1px solid var(--line)}.section__index{padding-top:.6rem}.hello__body{position:relative;max-width:780px}.hello__ghost{position:absolute;z-index:-1;top:-5rem;right:0;color:var(--surface-2);font:800 clamp(7rem,18vw,16rem)/1 "Manrope",sans-serif;letter-spacing:-.1em;opacity:.55;-webkit-user-select:none;-moz-user-select:none;user-select:none}.hello h2,.contact h2{position:relative;margin-bottom:2.3rem;font:700 clamp(3.3rem,6vw,6rem)/1.13 "Manrope",sans-serif;letter-spacing:-.075em}.hello h2 em,.contact h2 em{color:var(--muted);font-weight:500;font-style:normal}.hello p{max-width:570px;color:var(--muted);font-size:clamp(1.05rem,1.55vw,1.35rem);line-height:1.8}.hello__signature{display:block;margin:2.5rem 0 0 45%;font:italic 1.8rem Georgia,serif;transform:rotate(-6deg)}.hello__signature span{color:var(--muted)}.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:2rem;margin-bottom:2.8rem}.section-heading h2{margin:.85rem 0 0;font:700 clamp(2.8rem,5vw,5rem)/1.05 "Manrope",sans-serif;letter-spacing:-.075em}.heading-dot{color:var(--primary)}.section-heading p{margin:0 0 .4rem;color:var(--muted);font-size:14px}.section-heading__link{margin-bottom:.35rem}.projects-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem}.project{min-width:0}.project__visual{height:clamp(260px,31vw,400px);display:flex;flex-direction:column;justify-content:space-between;padding:1.5rem;overflow:hidden;background:var(--project-visual-bg);color:var(--project-visual-text)}.project--clixy .project__visual{background:radial-gradient(circle at 72% 65%,var(--project-clixy-highlight),transparent 45%),var(--project-clixy-bg)}.project--athlete .project__visual{background:radial-gradient(circle at 65% 42%,var(--project-athlete-highlight),transparent 48%),var(--project-athlete-bg)}.project__visual-top,.project__visual-bottom{display:flex;justify-content:space-between;font:11px DM Mono,monospace;letter-spacing:.12em}.project__visual-top{font-size:13px;font-weight:500}.project__visual-center{align-self:center;display:flex;flex-direction:column;gap:1.7rem;width:72%;padding:2rem;border:1px solid var(--project-overlay-border);background:var(--project-overlay-bg);box-shadow:0 28px 70px var(--project-overlay-shadow);font:600 clamp(1.2rem,2.3vw,2.2rem)/1.2 "Manrope",sans-serif;letter-spacing:-.05em}.project__mock-link{align-self:flex-start;padding:.4rem .7rem;border:1px solid var(--project-chip-border);border-radius:999px;font:11px DM Mono,monospace;letter-spacing:0}.project__meta{display:flex;justify-content:space-between;gap:1rem;margin:1.2rem 0 1.1rem;color:var(--faint);font:11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em}.project__details{display:flex;justify-content:space-between;align-items:flex-start;gap:1.4rem}.project__details h3{margin-bottom:.4rem;font:700 1.6rem Manrope,sans-serif;letter-spacing:-.05em}.project__details p{max-width:400px;margin-bottom:.8rem;color:var(--muted);font-size:14px}.project__details>a{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border:1px solid var(--line-strong);border-radius:50%;transition:background-color .2s,transform .2s}.project__details>a:hover{background:var(--primary);color:var(--on-dark-strong);transform:translate(2px,-2px)}.project__tags{color:var(--faint);font:11px DM Mono,monospace}.project__tags span{padding-inline:.1rem}.experience-list{border-top:1px solid var(--line-strong)}.experience-item{display:grid;grid-template-columns:170px 1fr 110px;gap:2rem;align-items:start;padding:2rem 0;border-bottom:1px solid var(--line)}.experience-list:not([data-expanded=true])>.experience-item:nth-child(n+4),.experience-item[hidden]{display:none}.experience-item__date,.experience-item__place{color:var(--muted);font:11px DM Mono,monospace;padding-top:.3rem}.experience-item__place{text-align:right}.experience-item h3{margin-bottom:.5rem;font:600 clamp(1.1rem,1.8vw,1.45rem) "Manrope",sans-serif;letter-spacing:-.04em}.experience-item h3 span{color:var(--muted)}.experience-item p{max-width:600px;margin-bottom:0;color:var(--muted);font-size:14px}.experience-toggle{display:inline-flex;align-items:center;gap:.8rem;margin-top:1.5rem;padding:.55rem 0;border:0;border-bottom:1px solid var(--line-strong);background:transparent;color:var(--text);font:11px DM Mono,monospace;cursor:pointer;transition:border-color .2s,color .2s}.experience-toggle[hidden]{display:none}.experience-toggle:hover{border-color:var(--text)}.experience-toggle__icon{display:inline-block;transition:transform .3s ease}.experience-toggle[aria-expanded=true] .experience-toggle__icon{transform:rotate(180deg)}.stack-grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line)}.stack-group{padding:2rem 2rem 2.5rem 0}.stack-group+.stack-group{padding-left:2rem;border-left:1px solid var(--line)}.stack-group>span{color:var(--faint);font:11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.1em}.stack-group h3{margin:1.5rem 0 .8rem;font:600 1.3rem Manrope,sans-serif;letter-spacing:-.05em}.stack-group p{margin-bottom:0;color:var(--muted);font-size:14px;line-height:1.85}.github-panel{padding:1.7rem;border:1px solid var(--line);background:var(--surface)}.github-panel__top,.github-panel__bottom{display:flex;align-items:center;justify-content:space-between;gap:1rem;font:11px DM Mono,monospace;color:var(--faint)}.github-panel__top>span:first-child{color:var(--text);text-transform:uppercase;letter-spacing:.08em}.github-panel__pulse{display:inline-block;width:6px;height:6px;margin-right:.5rem;border-radius:50%;background:var(--github-pulse)}.github-panel__bottom>span:first-child{display:flex;align-items:center;gap:4px}.github-panel__bottom i{display:inline-block;width:8px;height:8px;border-radius:2px;background:var(--surface-2)}.github-panel__bottom i:first-of-type{margin-left:.4rem}.github-panel__bottom i:last-of-type{margin-right:.4rem}.contact{padding-bottom:clamp(6rem,11vw,10rem);margin-top:clamp(6rem,11vw,10rem);border-top:1px solid var(--line)}.contact h2{margin:1.2rem 0 1.7rem}.contact p{color:var(--muted);font-size:17px}.contact__email{display:inline-flex;align-items:center;gap:.8rem;max-width:100%;margin-top:2.5rem;padding-bottom:.7rem;border-bottom:1px solid var(--line-strong);font:500 clamp(1.1rem,2.2vw,1.8rem) "Manrope",sans-serif;letter-spacing:-.04em;overflow-wrap:anywhere}.contact__email:hover{border-color:var(--text)}.site-footer{display:flex;justify-content:space-between;gap:2rem;padding-top:1.8rem;padding-bottom:2.2rem;border-top:1px solid var(--line);color:var(--footer-text);font:11px DM Mono,monospace}.site-footer a:hover{color:var(--text)}.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease;transition-delay:var(--reveal-delay, 0ms)}.reveal.is-visible{opacity:1;transform:none}@media (max-width: 900px){.page-shell{width:min(100% - 48px,1232px)}.site-header__inner{display:flex;justify-content:space-between}.site-nav{top:5.5rem}.hero{padding-top:8.5rem}.hero__grid{gap:3rem}.hero h1{font-size:clamp(3.2rem,6vw,5rem)}.experience-item{grid-template-columns:135px 1fr}.experience-item__place{display:none}}@media (max-width: 620px){.page-shell{width:min(100% - 36px,1232px)}.site-header{padding-top:.8rem}.site-header__inner{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;min-height:2.4rem}.availability{min-width:0;gap:.45rem;font-size:11px;white-space:nowrap}.availability>span:last-child{overflow:hidden;text-overflow:ellipsis}.header-tools{display:contents}.header-tools__location{grid-column:2;justify-self:center;font-size:11px}.header-tools__location .time{margin-left:.35rem}.header-tools__action{grid-column:3;justify-self:end;gap:.3rem}.header-tools__separator{display:none}.site-nav{top:3.75rem;max-width:calc(100% - 20px);overflow-x:auto;scrollbar-width:none}.site-nav::-webkit-scrollbar{display:none}.site-nav a{padding:.48rem .4rem;font-size:11px}.hero{min-height:auto;padding-top:7rem}.hero__eyebrow{margin-bottom:1.3rem}.hero__grid{grid-template-columns:1fr;gap:2rem}.hero__portrait{width:min(100%,240px);aspect-ratio:1/1.15}.hero__content{padding-block:0}.hero h1{font-size:clamp(3.4rem,12vw,5rem)}.hero__summary{margin-bottom:1.4rem}.hero__links{margin-bottom:2rem}.spotify{padding:.75rem}.spotify__brand{gap:.6rem;font-size:11px}.spotify__brand>span{padding-left:.6rem}.spotify__playlist{font-size:11px}.spotify__track{grid-template-columns:52px minmax(0,1fr) auto;gap:.5rem;padding-top:.75rem}.spotify__art{width:52px;min-width:52px;min-height:52px;flex-basis:52px}.spotify__art img{width:52px;height:52px}.spotify__details strong{font:700 .95rem/1.15 Manrope,sans-serif}.spotify__details>span{margin-top:.1rem;font-size:11px}.spotify__controls{flex:0 0 auto;width:auto;margin-left:0;gap:0;padding-top:0}.spotify__control{flex-basis:30px;width:30px;height:30px}.spotify__play{flex-basis:38px;width:38px;height:38px}.hero__bottom{padding-top:4rem}.hello{display:block}.section__index{margin-bottom:2rem}.hello__ghost{top:0;font-size:30vw}.hello h2,.contact h2{font-size:clamp(3rem,11vw,4.5rem)}.hello__signature{margin-left:30%}.section-heading{align-items:start;flex-direction:column;gap:.7rem;margin-bottom:2rem}.section-heading h2{font-size:clamp(2.7rem,10vw,4rem)}.projects-grid,.stack-grid{grid-template-columns:1fr}.projects-grid{gap:3.3rem}.project__visual{height:clamp(260px,75vw,380px)}.project__visual-center{width:83%;padding:1.5rem;font-size:clamp(1.3rem,6vw,2rem)}.experience-item{grid-template-columns:1fr;gap:.8rem;padding:1.6rem 0}.stack-group,.stack-group+.stack-group{padding:1.5rem 0;border-left:0}.stack-group+.stack-group{border-top:1px solid var(--line)}.stack-group h3{margin:.7rem 0 .4rem}.github-panel{padding:1.2rem}.github-panel__bottom>span:last-child{display:none}.github-panel__top{flex-wrap:wrap;row-gap:.5rem}.site-footer{flex-wrap:wrap;gap:.8rem}}@media (max-width: 380px){.spotify__track{grid-template-columns:48px minmax(0,1fr) auto;gap:.4rem}.spotify__art{width:48px;min-width:48px;min-height:48px;flex-basis:48px}.spotify__art img{width:48px;height:48px}.spotify__details strong{font-size:.9rem}.spotify__control{flex-basis:28px;width:28px;height:28px}.spotify__play{flex-basis:36px;width:36px;height:36px}}@media (prefers-reduced-motion: reduce){html,html.is-ready{scroll-behavior:auto}.reveal,.reveal.is-visible{opacity:1;transform:none;transition:none}*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important}.spotify__art.is-changing,.spotify__details.is-changing{animation:none}}@keyframes spotify-track-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}[hidden]{display:none!important}.hero{position:relative;isolation:isolate}.hero__landscape{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;z-index:-1;pointer-events:none;color:var(--muted);-webkit-mask-image:linear-gradient(transparent,#000 18%,#000 85%,transparent);mask-image:linear-gradient(transparent,#000 18%,#000 85%,transparent)}.hero__landscape svg{width:100%;height:100%;min-height:650px;fill:none;stroke:currentColor;stroke-width:1}.landscape__sky{opacity:.18}.landscape__planet{stroke-width:1.4}.landscape__orbit{opacity:.5;stroke-dasharray:3 9}.landscape__guides{opacity:.5}.landscape__ridge{opacity:.32}.landscape__ridge--front{opacity:.42}.landscape__terrain{fill:url(#land-fade);stroke:none}.landscape__contours{opacity:.14}.landscape__draw{stroke-dasharray:1;animation:landscape-draw 2.4s cubic-bezier(.22,1,.36,1) both}.hero__landscape svg{animation:landscape-drift 16s ease-in-out infinite alternate;animation-play-state:paused}.hero.is-ambient .hero__landscape svg{animation-play-state:running}.hero__portrait{width:min(100%,288px)}.hero__portrait img{height:auto;min-height:100%}.hero__portrait,.hero__content>*{animation:home-enter .6s cubic-bezier(.22,1,.36,1) both}.site-nav{animation:nav-enter .9s cubic-bezier(.22,1,.36,1) .1s both}.availability,.header-tools__location,.header-tools__action{animation:header-enter .65s cubic-bezier(.22,1,.36,1) both}.availability{animation-delay:60ms}.header-tools__location{animation-delay:.14s}.header-tools__action{animation-delay:.22s}@keyframes header-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@keyframes nav-enter{0%{opacity:0;transform:translate(-50%,-6px)}to{opacity:1;transform:translate(-50%)}}.hero__content>:nth-child(1){animation-delay:70ms}.hero__content>:nth-child(2){animation-delay:.14s}.hero__content>:nth-child(3){animation-delay:.21s}.hero__content>:nth-child(4){animation-delay:.28s}.hero__content>:nth-child(5){animation-delay:.35s}.theme-toggle{position:relative}.theme-toggle svg{position:absolute;transition:opacity .3s,transform .45s cubic-bezier(.22,1,.36,1)}:root[data-theme=dark] .theme-toggle__moon,:root[data-theme=light] .theme-toggle__sun{opacity:0;transform:rotate(-80deg) scale(.45)}:root[data-theme=dark] .theme-toggle__sun,:root[data-theme=light] .theme-toggle__moon{opacity:1;transform:rotate(0) scale(1)}.section{position:relative;isolation:isolate}.section:before{content:"";position:absolute;right:0;top:2rem;width:clamp(120px,16vw,190px);height:clamp(120px,16vw,190px);border:1px solid var(--muted);border-left-color:transparent;border-bottom-color:transparent;border-radius:50%;opacity:.55;pointer-events:none;z-index:-1}.section:nth-of-type(2n):before{border-radius:0;width:clamp(96px,12vw,144px);height:72px;background:radial-gradient(var(--muted) 1px,transparent 1px) 0 0/12px 12px;border:0;opacity:.55}.section:after{content:"";position:absolute;right:12px;top:3.5rem;width:clamp(80px,10vw,130px);height:40px;border-top:1px solid var(--muted);border-right:1px solid var(--muted);opacity:.35;pointer-events:none;z-index:-1}.section:nth-of-type(2n):after{width:44px;height:1px;right:0;top:7.5rem;border-right:0}.stack-group:nth-child(4){padding-left:0;border-left:0}.stack-group:nth-child(n+4){border-top:1px solid var(--line)}@keyframes home-enter{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes landscape-draw{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}@keyframes landscape-drift{to{transform:translate3d(0,-7px,0)}}@media (max-width: 760px){.hero__portrait{width:min(100%,240px)}.hero__landscape{opacity:.75}.hero__landscape svg{min-height:0}.stack-group:nth-child(4){padding-left:0}}@media (prefers-reduced-motion: reduce){.hero__portrait,.hero__content>*,.site-nav,.availability,.header-tools__location,.header-tools__action,.landscape__draw,.hero__landscape svg{animation:none}.theme-toggle svg{transition:none}}.contribution-total{color:var(--muted);font:12px/1.6 DM Mono,monospace;margin:1.4rem 0}.contribution-scroll{min-height:166px;overflow-x:auto;padding:6px 6px 12px;margin:-6px -6px 1rem;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}.contribution-grid{display:grid;grid-template-columns:repeat(var(--weeks),minmax(12px,1fr));grid-template-rows:repeat(7,auto);grid-auto-flow:column;gap:4px;width:100%;min-width:calc(var(--weeks) * 16px - 4px)}.contribution-day{width:100%;aspect-ratio:1;min-height:12px;border:1px solid var(--line);border-radius:2px;padding:0;background:var(--surface-2);cursor:pointer;transition:transform .15s}.contribution-day:hover{transform:scale(1.3)}.contribution-day[data-level="1"],.github-panel__bottom i:nth-of-type(2){background:var(--contribution-1)}.contribution-day[data-level="2"],.github-panel__bottom i:nth-of-type(3){background:var(--contribution-2)}.contribution-day[data-level="3"],.github-panel__bottom i:nth-of-type(4){background:var(--contribution-3)}.contribution-day[data-level="4"],.github-panel__bottom i:nth-of-type(5){background:var(--contribution-4)}.contribution-months{display:grid;grid-template-columns:repeat(var(--weeks),minmax(12px,1fr));gap:4px;margin-bottom:8px;width:100%;min-width:calc(var(--weeks) * 16px - 4px);color:var(--muted);font:9px DM Mono,monospace}.contribution-tooltip{width:-moz-max-content;width:max-content;position:fixed;z-index:40;max-width:calc(100vw - 16px);padding:.55rem .75rem;border:1px solid var(--line-strong);border-radius:5px;background:var(--surface);color:var(--text);box-shadow:0 4px 20px var(--soft-shadow);font:11px/1.5 DM Mono,monospace}@media (max-width: 760px){.landscape__planet{transform:translate(365px,-160px)}.landscape__sky>circle:nth-of-type(2){transform:translate(-360px,-30px)}.landscape__sky>ellipse{display:none}}.language-toggle{border:1px solid var(--line-strong);color:var(--text);background:transparent;border-radius:999px;padding:.35rem .65rem;cursor:pointer;font:11px DM Mono,monospace}.photo-teaser{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:4rem;padding-block:clamp(4.5rem,8vw,7rem);margin-top:clamp(6rem,11vw,10rem);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.photo-teaser__copy h2{font:700 clamp(2.4rem,4.5vw,4.5rem)/1.08 "Manrope",sans-serif;letter-spacing:-.055em;margin:1.5rem 0}.photo-teaser__copy p,.photos-intro p{color:var(--muted)}.photo-teaser__images{height:290px;position:relative;display:block}.photo-teaser__images img{position:absolute;-o-object-fit:cover;object-fit:cover;box-shadow:0 12px 35px var(--soft-shadow);transition:transform .35s cubic-bezier(.22,1,.36,1)}.photo-teaser__images:hover img:nth-child(2),.photo-teaser__images:focus-visible img:nth-child(2){transform:translateY(-4px)}.photo-teaser__images img:nth-child(1){width:56%;height:50%;left:0;bottom:4%;z-index:2}.photo-teaser__images img:nth-child(2){width:34%;height:84%;left:41%;top:0}.photo-teaser__images img:nth-child(3){width:36%;height:55%;right:0;bottom:2%;z-index:2}.photos-header{display:flex;align-items:center;gap:2rem;padding-top:2rem;color:var(--muted);font:11px DM Mono,monospace}.photos-header__brand{color:var(--text);border-right:1px solid var(--line);padding-right:2rem}.photos-header__tools{display:flex;align-items:center;gap:.7rem;margin-left:auto}@media (prefers-reduced-motion: no-preference){.photos-header>*{animation:photos-fade-in .65s cubic-bezier(.22,1,.36,1) both}.photos-header>:nth-child(2){animation-delay:.1s}.photos-header__tools{animation-delay:.18s}.photos-intro{animation:photos-fade-in .7s cubic-bezier(.22,1,.36,1) .12s both}@keyframes photos-fade-in{0%{opacity:0}to{opacity:1}}}.photos-main{padding-top:clamp(5rem,9vw,9rem);padding-bottom:8rem}.photos-intro h1{font:800 clamp(4rem,8vw,7rem)/1 "Manrope",sans-serif;letter-spacing:-.065em;margin:1rem 0}.photos-intro p{margin-bottom:3rem}.photos-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem 1.25rem;align-items:start}.photos-grid figure{margin:0}@media (prefers-reduced-motion: no-preference){.photos-reveal-pending .photos-grid figure:not(.is-visible){opacity:0}}.photos-grid figure.reveal{transform:none;transition-property:opacity}.photos-reveal-pending .photos-grid figure:focus-within,.photos-grid figure.reveal:focus-within{opacity:1}.photos-grid figure:nth-child(2),.photos-grid figure:nth-child(4),.photos-grid figure:nth-child(5),.photos-grid figure:nth-child(7){grid-column:span 2}.photos-grid button{display:block;width:100%;height:clamp(15rem,27vw,23rem);border:0;background:var(--surface);padding:0;cursor:zoom-in;overflow:hidden}.photos-grid img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .45s ease}.photos-grid button[data-photo="7"] img{-o-object-position:center bottom;object-position:center bottom}.photos-grid button:hover img{transform:scale(1.025)}.photos-grid figcaption{display:flex;gap:1rem;margin-top:.7rem;color:var(--muted);font:11px DM Mono,monospace}.photo-viewing{overflow:hidden}.photo-dialog{position:fixed;top:0;right:0;bottom:0;left:0;margin:0;width:100%;max-width:none;height:100%;max-height:none;padding:2rem;border:0;color:var(--on-dark);background:transparent;overflow:hidden}.photo-dialog[open]{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:1rem}.photo-dialog::backdrop{background:var(--viewer-backdrop);-webkit-backdrop-filter:blur(9px);backdrop-filter:blur(9px)}.photo-dialog[open]{animation:photo-dialog-enter .6s cubic-bezier(.22,1,.36,1) both}.photo-dialog[open]::backdrop{animation:photo-backdrop-enter .6s ease both}.photo-dialog[open] figure{animation:photo-viewer-enter .6s cubic-bezier(.22,1,.36,1) both}.photo-dialog[open].is-closing{animation:photo-dialog-exit .45s ease both}.photo-dialog[open].is-closing::backdrop{animation:photo-backdrop-exit .45s ease both}@keyframes photo-dialog-enter{0%{opacity:0}to{opacity:1}}@keyframes photo-dialog-exit{0%{opacity:1}to{opacity:0}}@keyframes photo-backdrop-enter{0%{opacity:0}to{opacity:1}}@keyframes photo-backdrop-exit{0%{opacity:1}to{opacity:0}}@keyframes photo-viewer-enter{0%{transform:scale(.98)}to{transform:scale(1)}}.photo-dialog figure{margin:0;min-width:0;text-align:center}.photo-dialog figure img{max-height:calc(100vh - 8rem);max-width:100%;width:auto;margin:auto;-o-object-fit:contain;object-fit:contain}.photo-dialog figcaption{margin-top:.8rem;color:var(--viewer-muted);font:11px DM Mono,monospace}.photo-dialog button{background:var(--viewer-control-bg);color:var(--on-dark-strong);border:1px solid var(--viewer-control-border);border-radius:50%;width:2.7rem;height:2.7rem;cursor:pointer;font-size:1.3rem}.photo-dialog [data-photo-close]{position:absolute;top:1.5rem;right:1.5rem}@media (max-width: 620px){.photo-teaser{grid-template-columns:1fr;gap:1.5rem}.photo-teaser__images{height:220px}.photos-grid{grid-template-columns:repeat(2,1fr)}.photos-grid button,.photos-grid img{height:auto}.photos-grid figure{grid-column:span 2}.photos-header{gap:.8rem}.photos-header__brand{padding-right:.8rem}.photo-dialog{padding:1rem .5rem;gap:.2rem}.photo-dialog button{width:2.2rem;height:2.2rem}}@media (prefers-reduced-motion: reduce){.photos-grid img,.photo-teaser__images img{transition:none}.photo-dialog[open],.photo-dialog[open]::backdrop,.photo-dialog[open] figure{animation:none}}
