:root{--bg:#fff;--fg:#111;--mute:#6f6f6f;--line:#dcdcdc;--soft1:#e6e9e1;--soft2:#ebe6e2;--soft3:#e2e6ea;--serif:"DM Serif Display","Playfair Display",Georgia,serif;--sans:"Inter Tight","Helvetica Neue",Arial,sans-serif;color-scheme:light;box-sizing:border-box;padding-top:env(safe-area-inset-top,0);padding-bottom:env(safe-area-inset-bottom,0)}:root[data-mode=dark]{color-scheme:dark;--bg:#0e0e0e;--fg:#f4f4f2;--mute:#9a9a97;--line:#2a2a2a;--soft1:#1b1e19;--soft2:#201d1a;--soft3:#181b1f}*,:after,:before{box-sizing:inherit}html{scroll-behavior:smooth;scroll-padding-top:calc(env(safe-area-inset-top,0px) + 64px)}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--sans);font-weight:300;font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit}:focus-visible{outline:2px solid var(--fg);outline-offset:4px}.wrap{padding:0 clamp(20px,5vw,64px);max-width:1400px;margin:0 auto}header{position:fixed;top:0;left:0;right:0;z-index:10;padding-top:env(safe-area-inset-top,0);background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}header .wrap{display:flex;justify-content:space-between;align-items:center;height:56px}.logo{font-family:var(--serif);font-size:22px;text-decoration:none}.logo,nav{font-weight:400}nav{display:flex;gap:clamp(14px,3vw,36px);font-size:14px}nav a{text-decoration:none;color:var(--mute);transition:color .2s}nav a:hover{color:var(--fg)}.right{display:flex;align-items:center;gap:clamp(14px,3vw,36px)}#mode{background:none;border:1px solid var(--fg);color:var(--fg);font:400 13px var(--sans);padding:6px 14px;border-radius:99px;cursor:pointer}#mode:hover{background:var(--fg);color:var(--bg)}@media(max-width:520px){nav a:first-child{display:none}}.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:flex-end;padding-top:96px;padding-bottom:clamp(28px,5vw,56px)}.hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(52px,18vw,260px);line-height:1;letter-spacing:-.015em;margin:0;white-space:nowrap}.hero h1 span{display:block;overflow:hidden;padding:.04em 0 .1em}.hero h1 span i{display:block;font-style:normal;transform:translateY(105%);animation:up 1.1s cubic-bezier(.2,.7,.1,1) forwards}.hero h1 span:nth-child(2) i{animation-delay:.12s}.hero h1 .ghost{visibility:hidden;font-weight:400}@keyframes up{to{transform:none}}.hero-main{position:relative;display:grid;grid-template-columns:1fr;align-items:end}.hero-main>*{grid-area:1/1}.photo{justify-self:end;width:min(100vw,560px);aspect-ratio:4/5;background:var(--soft3);overflow:hidden;margin-right:calc(-1 * clamp(20px,5vw,64px))}.photo img{width:100%;height:100%;object-fit:cover;object-position:50% 18%;display:block;transform:scale(1.06);animation:settle 1.6s cubic-bezier(.2,.7,.1,1) forwards}@keyframes settle{to{transform:scale(1)}}.hero h1{position:relative;z-index:2;align-self:end;color:#fff;mix-blend-mode:difference;pointer-events:none;font-size:clamp(60px,21vw,230px);padding-bottom:.02em}@media(max-width:759px){.photo{width:calc(100% + 2*clamp(20px,5vw,64px));margin-left:calc(-1 * clamp(20px,5vw,64px));margin-right:calc(-1 * clamp(20px,5vw,64px));justify-self:stretch;grid-area:1/1}.hero h1{grid-area:2/1;margin-top:-.62em;font-size:clamp(60px,23vw,230px)}}@media(min-width:760px) and (max-width:1100px){.hero-main .photo{width:52vw}.hero{min-height:auto;padding-top:110px}}@media(min-width:760px){.photo{width:min(40vw,540px);margin-right:0}.hero h1{font-size:clamp(80px,13.5vw,230px)}}.hero-foot{display:grid;grid-template-columns:1fr;grid-gap:20px;gap:20px;margin-top:clamp(28px,5vw,56px);padding-top:20px;border-top:1px solid var(--fg)}.hero-foot p{margin:0;max-width:34ch;font-size:clamp(17px,2vw,20px)}.hero-foot .meta{color:var(--mute);font-size:15px}@media(min-width:760px){.hero-foot{grid-template-columns:1.4fr 1fr 1fr;align-items:start}}section{padding:clamp(64px,10vw,140px) 0}h2{font-family:var(--serif);font-weight:400;font-size:clamp(32px,5vw,60px);line-height:1.05;letter-spacing:-.01em;margin:0 0 clamp(28px,5vw,56px)}.about{background:var(--bg)}.about .wrap{display:grid;grid-gap:28px;gap:28px}.about p{margin:0;font-family:var(--serif);font-size:clamp(30px,8vw,128px);line-height:1.05;width:100%;letter-spacing:-.015em;font-weight:400;max-width:none}.about .sub{font-size:16px;color:var(--mute);max-width:46ch;line-height:1.6}.grid{display:grid;grid-gap:clamp(12px,2vw,24px);gap:clamp(12px,2vw,24px);grid-template-columns:1fr}@media(min-width:700px){.grid{grid-template-columns:1fr 1fr}}.tile{display:flex;flex-direction:column;justify-content:space-between;min-height:clamp(240px,42vw,520px);padding:clamp(20px,3vw,36px);text-decoration:none}.tile:first-child{background:var(--soft2)}.tile:nth-child(2){background:var(--soft3)}.tile:nth-child(3){background:var(--soft1)}.tile:nth-child(4){background:var(--soft2)}.tile .tag{font-size:14px;color:var(--mute)}.tile h3{font-family:var(--serif);font-weight:400;font-size:clamp(34px,4.6vw,64px);line-height:1;margin:0 0 14px;letter-spacing:-.01em}.tile p{margin:0 0 14px;max-width:38ch;font-size:16px}.tile .stack{font-size:14px;color:var(--mute)}.tile .stack+*{display:flex;width:max-content;margin-top:18px}.cta{font-size:15px;font-weight:400;color:var(--fg);text-decoration:none;border-bottom:1px solid;padding-bottom:2px;cursor:pointer}.cta:after{content:"↗";margin-left:.4em}.status{font-size:13px;border:1px solid var(--fg);border-radius:99px;padding:5px 14px;font-weight:400}.more{margin-top:clamp(28px,5vw,56px);padding-top:28px;border-top:1px solid var(--line);display:grid;grid-gap:8px 32px;gap:8px 32px}.more+.more{margin-top:28px}.more h3{line-height:1.2;font-family:var(--serif);font-weight:400;font-size:clamp(24px,3vw,36px);margin:0}.more p{margin:0;color:var(--mute);font-size:16px;max-width:46ch}.more a{width:max-content;font-size:15px;font-weight:400;border-bottom:1px solid;text-decoration:none;padding-bottom:2px}@media(min-width:800px){.more{grid-template-columns:1.2fr 1.4fr auto;align-items:center}}.row{display:grid;grid-gap:6px 32px;gap:6px 32px;padding:26px 0;border-top:1px solid var(--line)}.row:last-child{border-bottom:1px solid var(--line)}.row h3{margin:0;font-size:clamp(20px,2.4vw,26px);font-weight:400}.row .when{color:var(--mute);font-size:15px}.row p{margin:0;font-size:16px;max-width:60ch;color:var(--mute)}@media(min-width:800px){.row{grid-template-columns:1fr 2fr 1fr;align-items:baseline}.row .when{text-align:right}}.skills{display:flex;flex-wrap:wrap;gap:10px}.skills span{border:1px solid var(--fg);padding:8px 18px;border-radius:99px;font-size:15px;font-weight:400}.langs{margin-top:32px;color:var(--mute)}.contact{background:var(--fg);color:var(--bg)}.contact h2{font-size:clamp(44px,10vw,150px);line-height:.95;margin-bottom:32px}.contact a.mail{font-size:clamp(18px,3vw,32px);text-decoration:none;border-bottom:1px solid;padding-bottom:4px;word-break:break-all}.contact .where{margin-top:48px;opacity:.65;font-size:15px}footer{padding:20px 0;font-size:13px;color:var(--mute)}.hint,.say-hi{display:none}@media(max-width:699px){body{font-size:16px}section{padding:52px 0}.about p{font-size:clamp(32px,11vw,56px)}header .wrap{height:52px}#mode{padding:8px 16px;min-height:36px}.hero{padding-top:76px;padding-bottom:96px}.hero-foot{grid-template-columns:1fr 1fr;gap:16px;margin-top:28px}.hero-foot p{grid-column:1/-1;max-width:none;font-size:19px;line-height:1.4}.hero-foot .meta,.hint{font-size:14px}.hint{display:block;margin:-20px 0 18px;color:var(--mute)}.grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin:0 calc(-1 * clamp(20px,5vw,64px));padding:0 clamp(20px,5vw,64px);scroll-padding:0 clamp(20px,5vw,64px);scrollbar-width:none;-webkit-overflow-scrolling:touch}.grid::-webkit-scrollbar{display:none}.tile{flex:0 0 80%;scroll-snap-align:start;min-height:380px;padding:22px}.tile h3{font-size:44px}.skills span{font-size:14px;padding:7px 14px}.row{padding:20px 0}.contact h2{font-size:22vw}.say-hi{display:flex;align-items:center;position:fixed;left:50%;transform:translateX(-50%);bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:9;background:var(--fg);color:var(--bg);text-decoration:none;font-weight:400;font-size:15px;padding:13px 28px;border-radius:99px;box-shadow:0 6px 24px rgba(0,0,0,.18);transition:opacity .25s}.say-hi.off{opacity:0;pointer-events:none}footer{padding-bottom:84px}}@media(prefers-reduced-motion:reduce){.hero h1 span i,.photo img{animation:none;transform:none}html{scroll-behavior:auto}}