:root{--blue:#0071e3;--blue-hover:#0077ed;--ink:#1d1d1f;--muted:#6e6e73;--pale:#f5f5f7;--line:#d2d2d7;--white:#fff}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);background:var(--white);font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}.site-nav{height:52px;padding:0 max(6vw,1.5rem);display:flex;align-items:center;justify-content:space-between;background:hsla(0,0%,100%,.88);border-bottom:1px solid rgba(0,0,0,.08);-webkit-backdrop-filter:saturate(180%) blur(18px);backdrop-filter:saturate(180%) blur(18px);position:-webkit-sticky;position:sticky;top:0;z-index:10}.wordmark{font-size:1.06rem;font-weight:650;letter-spacing:-.035em}.nav-links{display:flex;align-items:center;gap:2rem;font-size:.76rem}.nav-links a{color:#424245;transition:opacity .2s ease}.nav-links a:hover{opacity:.65}.nav-cta{padding:.38rem .82rem;background:var(--blue);border-radius:999px;color:var(--white);font-size:.74rem;font-weight:500;transition:background .2s ease}.nav-cta:hover{background:var(--blue-hover)}.nav-cta:focus-visible,a:focus-visible{outline:3px solid rgba(0,113,227,.35);outline-offset:3px}.hero{background:var(--pale);min-height:min(720px,calc(100svh - 52px));display:grid;place-items:center;padding:8rem 1.5rem;text-align:center}.hero-inner{max-width:1000px}.feature-overline,.hero-label,.section-kicker{color:var(--muted);font-size:.96rem;font-weight:500;letter-spacing:-.01em;margin:0 0 1rem}.hero h1{font-size:clamp(3.65rem,8.4vw,8.6rem);letter-spacing:-.075em;line-height:.98;margin:0;font-weight:700}.hero-copy{color:#424245;font-size:clamp(1.05rem,1.6vw,1.35rem);line-height:1.55;margin:2.1rem auto 0;max-width:38rem}.hero-actions{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:2rem}.button,.hero-actions{justify-content:center}.button{display:inline-flex;align-items:center;gap:.45rem;padding:.78rem 1.18rem;border-radius:999px;font-size:.93rem;font-weight:500;transition:background .2s ease,opacity .2s ease}.button-primary{background:var(--blue);color:var(--white)}.button-primary:hover{background:var(--blue-hover)}.button-secondary{background:transparent;color:var(--blue)}.article-link:hover,.button-secondary:hover,.inline-link:hover{opacity:.68}.button-light{background:var(--white);color:var(--ink)}.button-light:hover{opacity:.8}.intro-section{max-width:1000px;margin:0 auto;padding:7.4rem 1.5rem;display:grid;grid-template-columns:1fr 1fr;grid-gap:4rem;gap:4rem;font-size:clamp(1.55rem,2.8vw,2.6rem);font-weight:600;line-height:1.22;letter-spacing:-.045em}.intro-section p{margin:0}.intro-section p:last-child{color:var(--muted)}.content-section{padding:7.5rem max(6vw,1.5rem)}.writing-section{background:var(--pale)}.section-header{max-width:1200px;margin:0 auto 3.2rem;display:flex;align-items:flex-end;justify-content:space-between;gap:2rem}.about-copy h2,.section-header h2{font-size:clamp(2.5rem,5vw,4.5rem);letter-spacing:-.06em;line-height:1;margin:0;font-weight:700}.inline-link{color:var(--blue);font-size:.96rem;font-weight:500;white-space:nowrap;transition:opacity .2s ease}.article-grid{max-width:1200px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1.25rem;gap:1.25rem}.article-card{min-height:340px;padding:clamp(1.6rem,3vw,2.5rem);flex-direction:column;background:var(--white);border-radius:1.25rem;box-shadow:0 4px 12px rgba(0,0,0,.08)}.article-card,.article-topline{display:flex;justify-content:space-between}.article-topline{color:var(--muted);font-size:.77rem}.article-card h3{font-size:clamp(1.35rem,2vw,1.72rem);letter-spacing:-.04em;line-height:1.18;margin:1.5rem 0 .75rem}.article-card p{margin:0;color:#515154;font-size:.95rem;line-height:1.6}.article-link{color:var(--blue);font-size:.88rem;font-weight:500;transition:opacity .2s ease}.projects-section{max-width:1390px;margin:0 auto}.github-feature{background:var(--ink);border-radius:1.6rem;color:var(--white);min-height:380px;padding:clamp(2rem,6vw,5rem);display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start}.feature-overline{color:#a1a1a6}.github-feature h3{font-size:clamp(2.1rem,4.4vw,4.5rem);letter-spacing:-.06em;line-height:1.03;max-width:760px;margin:0}.github-feature p:not(.feature-overline){color:#d2d2d7;font-size:1.08rem;margin:1rem 0 0}.archive-row{border-bottom:1px solid var(--line);padding:2rem .15rem;display:flex;align-items:center;justify-content:space-between;gap:2rem}.archive-row strong{font-size:1.06rem}.archive-row p{color:var(--muted);margin:.4rem 0 0;font-size:.92rem}.about-section{background:var(--pale);padding:7.5rem max(6vw,1.5rem);display:grid;grid-template-columns:minmax(0,1.45fr) minmax(230px,.55fr);grid-gap:clamp(3rem,10vw,10rem);gap:clamp(3rem,10vw,10rem)}.about-copy{max-width:760px}.about-copy>p:not(.section-kicker){color:#424245;font-size:1.12rem;line-height:1.65;max-width:35rem;margin:2rem 0}.contact-detail{display:grid;align-content:end;grid-gap:.6rem;gap:.6rem;font-size:.95rem}.contact-detail span{color:var(--muted);font-size:.78rem;margin-top:1rem}.contact-detail a{color:var(--blue);overflow-wrap:anywhere}footer{min-height:160px;padding:2rem max(6vw,1.5rem);display:flex;align-items:center;justify-content:space-between;gap:1rem;font-size:.82rem}footer p{color:var(--muted);margin:0}footer>a:last-child{color:var(--blue)}@media (max-width:720px){.site-nav{padding:0 1.25rem}.nav-links{display:none}.hero{min-height:610px;padding:5.5rem 1.25rem}.hero h1{font-size:clamp(3.35rem,15vw,5rem)}.hero-copy br{display:none}.intro-section{grid-template-columns:1fr;gap:1.7rem;padding:5rem 1.5rem}.about-section,.content-section{padding:5.25rem 1.25rem}.section-header{align-items:flex-start;flex-direction:column;margin-bottom:2.2rem}.article-grid{grid-template-columns:1fr}.article-card{min-height:270px}.github-feature{min-height:350px;border-radius:1.25rem}.archive-row{align-items:flex-start;flex-direction:column}.about-section{grid-template-columns:1fr;gap:2rem}footer{align-items:flex-start;flex-direction:column;justify-content:center}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;transition-duration:.01ms!important}}