:root{--bg: #ffffff;--text: #1d1d1f;--text-secondary: #6e6e73;--text-tertiary: #86868b;--line: #e8e8ed;--surface-hover: #f5f5f7;--accent: #fa5320;--accent-soft: #fc9c7f;--icon-filter: grayscale(1) saturate(0);--icon-filter-hover: none;--page-gradient: none;--surface-sunk: #f5f5f7;--surface-code: #f5f5f7;--surface-raised: #f5f5f7;--surface-card: #f5f5f7;--surface-scrim: rgba(255, 255, 255, .78);--code-text: #09090b;--button-primary-hover: #27272a;--selection: rgba(9, 9, 11, .12);--shadow-panel: 0 1.5rem 5rem rgba(9, 9, 11, .12);--shadow-media: 0 .875rem 2.5rem rgba(9, 9, 11, .08);--hatch: rgba(9, 9, 11, .14);--sponsored-border: rgba(180, 83, 9, .24);--sponsored-bg: #fffbeb;--sponsored-text: #92400e;--line-strong: #d2d2d7;--frame: 42rem;--font-body: "Geist", sans-serif;--font-heading: "Geist", sans-serif;--font-accent: "DM Serif Display", serif;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0b0b0c;--text: #f5f5f7;--text-secondary: #a1a1a6;--text-tertiary: #86868b;--line: rgba(255, 255, 255, .12);--line-strong: rgba(255, 255, 255, .24);--surface-hover: #161618;--accent: #ff7448;--accent-soft: #fc9c7f;--icon-filter: grayscale(1) saturate(0) invert(1);--icon-filter-hover: grayscale(1) saturate(0) invert(1);--page-gradient: none;--surface-sunk: #161618;--surface-code: #161618;--surface-raised: #161618;--surface-card: #161618;--surface-scrim: rgba(11, 11, 13, .82);--code-text: #e4e4e7;--button-primary-hover: #d4d4d8;--selection: rgba(244, 244, 245, .18);--shadow-panel: 0 1.5rem 5rem rgba(0, 0, 0, .6);--shadow-media: 0 .875rem 2.5rem rgba(0, 0, 0, .5);--hatch: rgba(244, 244, 245, .16);--sponsored-border: rgba(250, 204, 21, .28);--sponsored-bg: rgba(250, 204, 21, .1);--sponsored-text: #fcd34d;color-scheme:dark}}:root[data-theme=dark]{--bg: #0b0b0c;--text: #f4f4f5;--text-secondary: #b4b4bd;--text-tertiary: #9b9ba6;--line: rgba(244, 244, 245, .12);--line-strong: rgba(255, 255, 255, .24);--surface-hover: rgba(244, 244, 245, .08);--accent: #ff7448;--accent-soft: #fc9c7f;--icon-filter: grayscale(1) saturate(0) invert(1);--icon-filter-hover: grayscale(1) saturate(0) invert(1);--page-gradient: none;--surface-sunk: #161618;--surface-code: #1c1c20;--surface-raised: #141417;--surface-card: #161618;--surface-scrim: rgba(11, 11, 13, .82);--code-text: #e4e4e7;--button-primary-hover: #d4d4d8;--selection: rgba(244, 244, 245, .18);--shadow-panel: 0 1.5rem 5rem rgba(0, 0, 0, .6);--shadow-media: 0 .875rem 2.5rem rgba(0, 0, 0, .5);--hatch: rgba(244, 244, 245, .16);--sponsored-border: rgba(250, 204, 21, .28);--sponsored-bg: rgba(250, 204, 21, .1);--sponsored-text: #fcd34d;color-scheme:dark}*{box-sizing:border-box}html,body{min-height:100%;margin:0}html{background:var(--bg)}body{background:var(--page-gradient);color:var(--text);font-family:var(--font-body, "Geist", sans-serif);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body.menu-open,body.search-open{overflow:hidden}main{display:block;min-height:calc(100vh - 3.5rem)}img{display:block;max-width:100%}a{color:inherit;text-decoration:none}.inline-link{color:var(--text);font-weight:500;text-decoration:underline;text-decoration-color:var(--line-strong);text-decoration-thickness:1px;text-underline-offset:.22em;transition:text-decoration-color .16s ease}.inline-link:hover,.inline-link:focus-visible{text-decoration-color:currentColor;outline:none}.out-link{display:inline-flex;align-items:center;gap:.25rem;color:var(--text-secondary);font-size:.875rem;line-height:1.4;font-weight:500;letter-spacing:-.01em;transition:color .16s ease}.out-link span{text-decoration:underline;text-decoration-color:var(--line-strong);text-decoration-thickness:1px;text-underline-offset:.22em;transition:text-decoration-color .16s ease}.out-link svg{transition:transform .16s ease}.out-link:hover,.out-link:focus-visible{color:var(--text);outline:none}.out-link:hover span,.out-link:focus-visible span{text-decoration-color:currentColor}.out-link:hover svg,.out-link:focus-visible svg{transform:translate(1px,-1px)}button{font:inherit}svg{display:block}::selection{background:var(--selection)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body:has(.post-page){--frame: 46.875rem}.site-header{position:sticky;top:0;z-index:20}.site-header:before{content:"";position:absolute;inset:0;z-index:-1;background:color-mix(in srgb,var(--bg) 84%,transparent);-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px)}.topbar{display:flex;align-items:center;gap:.25rem;width:min(100%,var(--frame));height:3.5rem;margin:0 auto;padding:0 .5rem 0 1rem;background:transparent}.topbar-brand{display:inline-flex;align-items:center;gap:.5rem;color:var(--text);font-size:.9375rem;line-height:1.4;font-weight:600;letter-spacing:-.01em}.topbar-emoji{margin-left:-.125rem;font-size:.9375rem;line-height:1}.topbar-avatar{width:1.5rem;height:1.5rem;border-radius:999px;object-fit:cover}.topbar-brand:hover,.topbar-brand:focus-visible{color:var(--text);outline:none}.menu-button{display:inline-flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;padding:0;border:0;border-radius:999px;background:transparent;color:var(--text);cursor:pointer;transition:background-color .16s ease;order:3}.menu-button:hover,.menu-button:focus-visible{background:var(--surface-hover);outline:none}.menu-button-close,.menu-button.is-open .menu-button-open{display:none}.menu-button.is-open .menu-button-close{display:block}.topbar-nav{display:none;align-items:center;gap:.125rem;padding:.1875rem;border-radius:999px;background:var(--surface-card)}.topbar-nav-link{padding:.3125rem .875rem;border-radius:999px;color:var(--text-secondary);font-size:.875rem;line-height:1.4;font-weight:500;letter-spacing:-.01em;transition:background-color .16s ease,color .16s ease}.topbar-nav-link:hover,.topbar-nav-link:focus-visible{color:var(--text);outline:none}.topbar-nav-link.is-active{background:var(--bg);color:var(--text)}.topbar-actions{display:flex;align-items:center;gap:.125rem;margin-left:auto}@media(min-width:48rem){.topbar{display:grid;grid-template-columns:1fr auto 1fr}.topbar-brand{justify-self:start}.topbar-actions{justify-self:end}.menu-button{display:none}.topbar-nav{display:flex}}.search-button{display:inline-flex;align-items:center;justify-content:center;flex:none;width:2.75rem;height:2.75rem;padding:0;border:0;border-radius:999px;background:transparent;color:var(--text);cursor:pointer;transition:background-color .16s ease}.search-button:hover,.search-button:focus-visible{background:var(--surface-hover);outline:none}.theme-button{display:inline-flex;align-items:center;justify-content:center;flex:none;width:2.75rem;height:2.75rem;padding:0;border:0;border-radius:999px;background:transparent;color:var(--text);cursor:pointer;transition:background-color .16s ease}.theme-button:hover,.theme-button:focus-visible{background:var(--surface-hover);outline:none}.theme-button-dark{display:none}:root[data-theme=dark] .theme-button-light{display:none}:root[data-theme=dark] .theme-button-dark{display:block}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-button-light{display:none}:root:not([data-theme=light]) .theme-button-dark{display:block}:root[data-theme=light] .theme-button-light{display:block}:root[data-theme=light] .theme-button-dark{display:none}}.menu-overlay{position:fixed;inset:2.75rem 0 0;z-index:19;background:transparent}.menu-overlay[hidden]{display:none}.menu-nav{height:100%;overflow-y:auto;padding:1.5rem}.menu-list{display:flex;flex-direction:column;gap:.25rem}.menu-link{padding:.5rem 0;font-family:var(--font-heading, "Geist", sans-serif);font-size:1.25rem;font-weight:600;color:var(--text-tertiary);letter-spacing:-.01em}.menu-link:hover,.menu-link.is-active{color:var(--text)}.search-dialog{position:fixed;inset:0;z-index:40;display:grid;place-items:start center;padding:max(4.5rem,14vh) 1rem 1rem;background:color-mix(in srgb,var(--bg) 55%,transparent);-webkit-backdrop-filter:saturate(160%) blur(18px);backdrop-filter:saturate(160%) blur(18px)}.search-dialog[hidden]{display:none}.search-panel{width:min(100%,36rem);overflow:hidden;border:1px solid var(--line);border-radius:1rem;background:var(--bg);box-shadow:0 1rem 3rem #09090b1a}.search-field{display:flex;align-items:center;gap:.625rem;padding:0 .75rem 0 1rem;border-bottom:1px solid var(--line)}.search-field-icon{flex:none;color:var(--text-tertiary)}.search-input{flex:1;min-width:0;padding:1rem 0;border:0;background:transparent;color:var(--text);font-size:1rem;line-height:1.4;font-weight:500;letter-spacing:-.01em;outline:none;-webkit-appearance:none;appearance:none}.search-input::-webkit-search-cancel-button{display:none}.search-input::placeholder{color:var(--text-tertiary)}.search-close{flex:none;padding:.1875rem .4375rem;border:1px solid var(--line);border-radius:.375rem;background:transparent;color:var(--text-tertiary);font-family:inherit;font-size:.6875rem;line-height:1.4;cursor:pointer;transition:border-color .16s ease,color .16s ease}.search-close:hover,.search-close:focus-visible{border-color:var(--line-strong);color:var(--text);outline:none}.search-status{margin:0;padding:.875rem 1rem .5rem;color:var(--text-tertiary);font-size:.8125rem;line-height:1.5}.search-results{display:flex;flex-direction:column;max-height:min(24rem,50vh);margin:0;padding:0 .375rem .375rem;overflow-y:auto;list-style:none}.search-results:empty{display:none}.search-result-link{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:.5rem .625rem;border-radius:.5rem}.search-result-link:hover,.search-result-link:focus-visible,.search-result-item.is-active .search-result-link{background:var(--surface-hover);outline:none}.search-foot{display:none;gap:1rem;padding:.625rem 1rem;border-top:1px solid var(--line);color:var(--text-tertiary);font-size:.75rem;line-height:1.4}@media(min-width:48rem){.search-foot{display:flex}}.search-hint{display:inline-flex;align-items:center;gap:.25rem}.search-foot kbd{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .25rem;border:1px solid var(--line);border-radius:.3125rem;background:transparent;color:var(--text-secondary);font-family:inherit;font-size:.6875rem;line-height:1}.search-shortcut{display:none;align-items:center;gap:.125rem;margin-left:.375rem;color:var(--text-tertiary);font-size:.8125rem}@media(min-width:48rem){.search-shortcut{display:inline-flex}}.search-result-title{min-width:0;overflow:hidden;color:var(--text);font-size:.9375rem;line-height:1.45;font-weight:500;letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap}.search-result-meta{flex:none;color:var(--text-tertiary);font-size:.75rem;line-height:1.4;font-variant-numeric:tabular-nums}.page-frame{width:min(100%,var(--frame));margin:0 auto;padding:4rem 0 6rem;display:flex;flex-direction:column;gap:3.75rem;line-height:1.6}.home-page{width:min(100%,var(--frame));gap:3.5rem;padding-top:3.5rem}.content-section,.social-list{padding:0 1rem}.content-section{display:flex;flex-direction:column;gap:1rem}.profile-section{gap:1rem}.home-hero{gap:1.125rem}.avatar{width:3.75rem;height:3.75rem;margin-bottom:2rem;border-radius:999px;object-fit:cover;user-select:none}.home-hero .avatar{width:5.25rem;height:5.25rem;margin-bottom:1rem}.profile-title,.post-title{margin:0;font-family:var(--font-heading, "Geist", sans-serif);font-size:1.5rem;line-height:2rem;font-weight:700;letter-spacing:0}.home-title{max-width:20ch;font-size:clamp(2.125rem,5.5vw,4.25rem);line-height:1.06;letter-spacing:-.04em;text-wrap:balance}.home-title em,.profile-title em,.post-title em,.section-title em,.post-content h2 em,.post-content h3 em{font-family:var(--font-accent, "DM Serif Display", serif);font-style:italic;font-weight:400;color:var(--accent)}.mac-word{white-space:nowrap}.apple-mark{display:inline-block;width:.82em;height:.82em;margin-right:.1em;vertical-align:-.05em}.profile-lead{margin:0;max-width:43rem;color:var(--text-secondary);font-size:1.25rem;line-height:1.48;font-weight:500;letter-spacing:-.015em;text-wrap:pretty}.social-list{display:flex;gap:.5rem;align-items:center;margin:0;list-style:none}.social-link{display:inline-flex;align-items:center;justify-content:center;width:3rem;height:3rem;border-radius:999px;color:var(--text);transition:background-color .16s ease,color .16s ease}.social-icon{width:1.75rem;height:1.75rem;object-fit:contain;filter:var(--icon-filter);opacity:.56;transition:filter .16s ease,opacity .16s ease,transform .16s ease}.social-link:hover,.social-link:focus-visible{background:var(--surface-hover);outline:none}.social-link:hover .social-icon,.social-link:focus-visible .social-icon{filter:var(--icon-filter-hover);opacity:1}.section-head{display:flex;flex-direction:column;gap:.25rem}.section-head-row{flex-direction:row;align-items:center;justify-content:space-between;gap:1rem}.section-title{margin:0;color:var(--text);font-family:var(--font-heading, "Geist", sans-serif);font-size:1.25rem;line-height:1.4;font-weight:600;letter-spacing:-.02em}.section-copy{max-width:34rem;margin:0;color:var(--text-tertiary);font-size:1rem;line-height:1.6;font-weight:500;letter-spacing:-.01em;text-wrap:pretty}.section-link,.section-label,.back-link{display:inline-flex;align-items:center;align-self:flex-start;gap:0;color:var(--text-tertiary);font-family:var(--font-heading, "Geist", sans-serif);font-size:1rem;line-height:1.6;font-weight:600;letter-spacing:-.01em}.section-label{cursor:default;user-select:none;color:var(--text-tertiary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.8125rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase}.now-updated,.stat-source{font-variant-numeric:tabular-nums}.entry-arrow,.section-link:hover svg{color:inherit}.contact-link:hover,.contact-link:focus-visible{color:var(--accent)}.section-link:hover,.section-link:focus-visible,.back-link:hover,.back-link:focus-visible{color:var(--text);outline:none}.entry-list{display:flex;flex-direction:column;gap:1rem;margin:0;padding:0;list-style:none}.entry-item{display:flex}.entry-link{display:inline-flex;flex:1;flex-direction:column;align-items:flex-start;gap:0}.entry-title-wrap{display:flex;align-items:center;gap:.5rem}.entry-title,.entry-detail{font-size:1.25rem;line-height:1.6}.entry-title{color:var(--text);font-family:var(--font-heading, "Geist", sans-serif);font-weight:500;text-underline-offset:1px;letter-spacing:-.01em}.writing-preview .entry-title{font-size:1.125rem}.entry-detail{color:var(--text-tertiary)}.entry-link:hover .entry-title,.entry-link:focus-visible .entry-title{text-decoration:underline}.entry-link:focus-visible{outline:none}.product-section,.writing-preview,.contact-section{gap:1.25rem}.product-grid{display:grid;grid-template-columns:1fr;gap:.875rem;margin:0;padding:0;list-style:none}@media(min-width:40rem){.product-grid{grid-template-columns:1fr 1fr;gap:1rem}}.product-card{display:flex;height:100%;flex-direction:column;gap:.3rem;padding:1.375rem;border:1px solid var(--line);border-radius:1.125rem;background:var(--surface-card);transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}.product-card:hover,.product-card:focus-visible{transform:translateY(-3px);border-color:color-mix(in srgb,var(--accent) 32%,var(--line));box-shadow:var(--shadow-media);outline:none}.product-card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.75rem}.product-card-name{color:var(--text);font-family:var(--font-heading, "Geist", sans-serif);font-size:1.125rem;line-height:1.45;font-weight:600;letter-spacing:-.01em}.product-card-detail{color:var(--text-tertiary);font-size:.9375rem;line-height:1.55}.building-row{display:flex;flex-direction:column;gap:.75rem;margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid var(--line)}.building-label{color:var(--text-tertiary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;letter-spacing:.18em;text-transform:uppercase}.building-list{display:grid;grid-template-columns:1fr;gap:.625rem;margin:0;padding:0;list-style:none}@media(min-width:40rem){.building-list{grid-template-columns:1fr 1fr;gap:1rem}}.building-item{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:baseline;gap:.5rem}.building-icon{width:1.25rem;height:1.25rem;align-self:center;border-radius:.3rem;object-fit:contain;filter:var(--icon-filter);opacity:.62}.building-name{color:var(--text);font-size:.9375rem;font-weight:600;letter-spacing:-.01em}.building-detail{color:var(--text-tertiary);font-size:.875rem;line-height:1.5}.lead-in{margin:0;color:var(--text-secondary);font-size:.9375rem;line-height:1.55;letter-spacing:-.005em;text-wrap:pretty}.lead-in b,.tile-caption b{color:var(--text);font-weight:600}.tile-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem .75rem;margin:0;padding:0;list-style:none}@media(min-width:40rem){.tile-grid{gap:1.75rem 1.25rem}}.app-tile{display:flex;flex-direction:column;gap:.25rem;color:inherit;text-decoration:none}.app-tile-panel{--g0: #8e8e93;--g1: #636366;display:flex;align-items:center;justify-content:center;gap:1rem;aspect-ratio:16 / 10;margin-bottom:.625rem;border-radius:1rem;background:linear-gradient(135deg,color-mix(in srgb,var(--g0) 16%,var(--bg)),color-mix(in srgb,var(--g1) 16%,var(--bg)))}.app-tile-icon{--bleed: 1;width:4.5rem;height:4.5rem;object-fit:contain;filter:drop-shadow(0 .625rem 1.125rem rgb(0 0 0 / .14));transform:scale(calc(1 / var(--bleed)));transition:transform .26s cubic-bezier(.2,.8,.2,1)}.app-tile-icon-small{width:3.5rem;height:3.5rem}a.app-tile:hover .app-tile-icon,a.app-tile:focus-visible .app-tile-icon{transform:scale(calc(1.07 / var(--bleed)))}a.app-tile:focus-visible{outline:none}a.app-tile:focus-visible .app-tile-panel{outline:2px solid var(--text);outline-offset:2px}.tile-caption{color:var(--text-secondary);font-size:.9375rem;line-height:1.5;letter-spacing:-.005em;text-wrap:pretty}.tile-meta{color:var(--text-tertiary);font-size:.75rem;line-height:1.4}@media(max-width:39.99rem){.app-tile-panel{aspect-ratio:1;gap:.5rem}.app-tile-icon{width:3.5rem;height:3.5rem}.app-tile-icon-small{width:2.5rem;height:2.5rem}.tile-caption{font-size:.875rem}}@media(prefers-reduced-motion:reduce){.app-tile-icon{transition:none}}.project-group{display:flex;flex-direction:column;gap:.625rem;margin-top:1.5rem}.project-list{display:grid;grid-template-columns:1fr;gap:.125rem 1.25rem;margin:0;padding:0;list-style:none}@media(min-width:40rem){.project-list{grid-template-columns:1fr 1fr}}.project-row{display:flex;align-items:center;gap:.75rem;margin:0 -.5rem;padding:.5rem;border-radius:.75rem;color:inherit;text-decoration:none;transition:background-color .16s ease}.project-row:hover,.project-row:focus-visible{background:var(--surface-hover);outline:none}.project-row-icon{flex:none;width:2rem;height:2rem;object-fit:contain}.prose-line{margin:0;max-width:40rem;color:var(--text-secondary);font-size:1rem;line-height:1.6}.product-tag-inline{display:inline-flex;align-items:center;margin-left:.5rem;padding:.1rem .45rem;border:1px solid color-mix(in srgb,var(--accent) 28%,transparent);border-radius:999px;color:var(--accent);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.6875rem;font-style:normal;font-weight:600;letter-spacing:.08em;text-transform:uppercase;vertical-align:middle}.product-card:hover .product-icon,.product-card:focus-visible .product-icon{filter:var(--icon-filter-hover);opacity:1}.product-icon-wrap{display:inline-flex;align-items:center;justify-content:center;width:3.5rem;height:3.5rem}.product-icon{width:2.4rem;height:2.4rem;object-fit:contain;border-radius:.5rem;filter:var(--icon-filter);opacity:.62;transition:filter .16s ease,opacity .16s ease,transform .16s ease}.entry-arrow{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;margin-top:.125rem;border:1px solid var(--line);border-radius:999px;color:var(--text-tertiary);transition:background-color .16s ease,color .16s ease,transform .16s ease}.product-link:hover .entry-arrow,.product-link:focus-visible .entry-arrow{background:var(--text);color:var(--bg);transform:translate(1px,-1px)}.writing-link{gap:.125rem;padding:.25rem 0}.writing-link .entry-detail{max-width:36rem;font-size:1rem;line-height:1.55}.contact-link{display:inline-flex;align-items:center;align-self:flex-start;gap:.5rem;color:var(--text);font-family:var(--font-heading, "Geist", sans-serif);font-size:1.125rem;line-height:1.4;font-weight:700;letter-spacing:-.01em;text-underline-offset:2px}.contact-link:hover,.contact-link:focus-visible{text-decoration:underline;outline:none}.archive-page,.reading-page{padding-top:4rem}.archive-page{gap:2.75rem}.archive-intro{gap:0}.archive-intro .profile-title{font-size:1.875rem;line-height:1.2;font-weight:700;letter-spacing:-.015em}.archive-groups{gap:2.5rem}.archive-year-group{display:flex;flex-direction:column;gap:.875rem}.archive-year{margin:0;color:var(--text-tertiary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.8125rem;line-height:1.4;font-weight:600;letter-spacing:.18em;font-variant-numeric:tabular-nums}.archive-year-list{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none}.archive-year-item{display:flex}.archive-year-link{display:inline-flex;align-items:flex-start;color:var(--text);font-family:var(--font-body, "Geist", sans-serif);font-size:1.125rem;line-height:1.6;font-weight:600;letter-spacing:-.01em;text-underline-offset:2px}.archive-year-link:hover,.archive-year-link:focus-visible{text-decoration:underline;outline:none}.post-page{gap:0;padding-top:2.75rem;padding-bottom:0}.post-shell{gap:2.5rem;padding-bottom:3rem}.post-header{display:flex;flex-direction:column;gap:0}.post-date{margin:0 0 .5rem;color:var(--text-tertiary);font-size:1rem;line-height:1.6}.post-author{display:inline-flex;align-items:center;align-self:flex-start;gap:.625rem;margin-top:.875rem}.post-author-avatar{flex:none;width:2rem;height:2rem;border-radius:999px;object-fit:cover}.post-author-name{color:var(--text);font-size:1rem;line-height:1.5;font-weight:500}.reading-page .post-title{font-size:1.875rem;line-height:1.2;font-weight:700;letter-spacing:-.015em}.post-content{color:var(--text);font-family:var(--font-body, "Geist", sans-serif);font-size:1.125rem;line-height:1.7}.post-content p,.post-content ul,.post-content ol,.post-content li{color:var(--text)}.post-content>*:first-child{margin-top:0}.post-content>*:last-child{margin-bottom:0}.post-content p,.post-content ul,.post-content ol,.post-content pre,.post-content blockquote,.post-content table,.post-content figure,.post-content hr,.post-content video,.post-content .gist{margin:0 0 1.5rem}.post-content ul,.post-content ol{padding-left:1.4em;list-style-position:outside}.post-content ul{list-style-type:disc}.post-content ol{list-style-type:decimal}.post-content ul ul{list-style-type:circle}.post-content ul ul ul{list-style-type:square}.post-content ol ol{list-style-type:lower-alpha}.post-content ol ol ol{list-style-type:lower-roman}.post-content li::marker{color:var(--text-tertiary);font-size:.8em;font-weight:500}.post-content li+li{margin-top:.4rem}.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin:2.25rem 0 1rem;color:var(--text);font-family:var(--font-heading, "Geist", sans-serif);font-weight:600;line-height:1.2;letter-spacing:-.02em}.post-content h2{font-size:1.625rem}.post-content h3{font-size:1.25rem}.post-content a{color:var(--text);font-weight:500;text-decoration:underline;text-decoration-thickness:from-font;text-underline-offset:2px}.post-content strong{color:var(--text)}.post-content code{padding:.1rem .35rem;border-radius:.35rem;background:var(--surface-code);color:var(--text);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.875em}.post-content pre{overflow-x:auto;padding:1rem 1.25rem;border-radius:.75rem;background:var(--surface-sunk);color:var(--code-text);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:1rem}.post-content .astro-code,.post-content .astro-code span{color:var(--shiki-light);background-color:var(--shiki-light-bg)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .post-content .astro-code,:root:not([data-theme=light]) .post-content .astro-code span{color:var(--shiki-dark);background-color:var(--shiki-dark-bg)}}:root[data-theme=dark] .post-content .astro-code,:root[data-theme=dark] .post-content .astro-code span{color:var(--shiki-dark);background-color:var(--shiki-dark-bg)}.post-content pre code{padding:0;background:transparent}.post-content hr{border:0;border-top:1px solid var(--line)}.post-content blockquote{padding-left:1rem;border-left:2px solid var(--line);color:var(--text)}.post-content img{border-radius:1rem;border:1px solid var(--line)}.post-content video{width:100%;border:1px solid var(--line);border-radius:1rem;background:var(--surface-sunk);box-shadow:var(--shadow-media)}.post-content table{width:100%;border-collapse:collapse;font-family:var(--font-body, "Geist", sans-serif);font-size:1rem}.post-content th,.post-content td{padding:.75rem 0;text-align:left;border-bottom:1px solid var(--line)}.post-content .alert{padding:1rem 1.125rem;border:1px solid var(--line);border-radius:1rem;background:var(--surface-raised)}.post-content .gist,.post-content .gist .gist-file,.post-content .gist .gist-data,.post-content .gist .gist-meta{max-width:100%}.post-content .gist{overflow:auto;border-radius:.75rem}.post-tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:2.5rem}.site-footer{margin-top:5rem;border-top:1px solid var(--line);background:var(--bg)}.footer-frame{width:min(100%,56rem);margin:0 auto;padding:2.75rem 1rem 2.5rem}.footer-grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem 2.5rem}@media(min-width:40rem){.footer-grid{grid-template-columns:1.6fr 1fr 1fr 1fr}}.footer-identity{grid-column:1 / -1}@media(min-width:40rem){.footer-identity{grid-column:auto}}.footer-name{margin:0;color:var(--text);font-size:.9375rem;font-weight:600;letter-spacing:-.01em}.footer-statement{margin:.5rem 0 0;max-width:30ch;color:var(--text-secondary);font-size:.8125rem;line-height:1.6}.footer-email{display:inline-block;margin-top:.875rem;color:var(--text);font-size:.8125rem;font-weight:500;text-decoration:none}.footer-email:hover{text-decoration:underline;text-underline-offset:.2em}.footer-col-title{margin:0 0 .625rem;color:var(--text);font-size:.8125rem;font-weight:600}.footer-col-list{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none}.footer-link{display:inline-flex;align-items:center;gap:.4rem;color:var(--text-secondary);font-size:.8125rem;text-decoration:none;transition:color .16s ease}.footer-link:hover,.footer-link:focus-visible{color:var(--text);outline:none}.footer-link-icon{width:1rem;height:1rem;border-radius:.25rem;object-fit:contain}.footer-bottom{display:flex;flex-direction:column;gap:.5rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--line);color:var(--text-secondary);font-size:.8125rem}@media(min-width:40rem){.footer-bottom{flex-direction:row;align-items:center;justify-content:space-between}}.footer-bottom p{margin:0}.footer-bottom a{color:var(--text);text-decoration:none}.footer-bottom a:hover{text-decoration:underline;text-underline-offset:.2em}.post-tools{display:flex;flex-direction:column;align-items:flex-start;gap:1.75rem;margin:1.25rem 0 1rem}.post-tools .dev-apps{align-self:stretch;margin-top:0}.quick-answer{margin:.5rem 0 -1rem;padding:1.25rem 1.5rem;border-radius:1.25rem;background:var(--surface-card)}.quick-answer-label{display:inline-flex;align-items:center;gap:.375rem;margin:0;color:var(--text);font-size:.8125rem;font-weight:600;line-height:1.4}.quick-answer-text{margin:.625rem 0 0;color:var(--text);font-size:1.0625rem;line-height:1.6;text-wrap:pretty}.quick-answer-text code{font-size:.9em}.ask-ai{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem .5rem;color:var(--text-tertiary);font-size:.75rem;line-height:1.4}.ask-ai-label{margin-right:.125rem;font-size:.625rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase}.ask-ai-links{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem .5rem}.ask-ai-link{display:inline-flex;align-items:center;gap:.25rem;color:var(--text-tertiary);text-decoration:none;transition:color .15s ease}.ask-ai-link:hover{color:var(--text)}.ask-ai-link svg{flex:none;opacity:.8}.ask-ai-rule{width:1px;height:.75rem;margin:0 .125rem;background:var(--line)}.dev-apps{margin-top:1rem}.dev-apps-label{margin:0 0 .75rem;color:var(--text-tertiary);font-size:.625rem;font-weight:600;letter-spacing:.12em;line-height:1.4;text-transform:uppercase}.dev-apps-list{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:.75rem 1.25rem;margin:0;padding:0;list-style:none}@media(max-width:39.99rem){.dev-apps-list{grid-template-columns:minmax(0,1fr)}}.dev-app{display:flex;align-items:center;gap:.75rem;min-width:0;color:inherit;text-decoration:none}.dev-app:hover .dev-app-name,.dev-app:focus-visible .dev-app-name{text-decoration:underline;text-underline-offset:.2em}.dev-app-icon{flex:none;width:2.25rem;height:2.25rem;border-radius:.5rem}.dev-app-text{display:flex;min-width:0;flex-direction:column;gap:.0625rem}.dev-app-name{color:var(--text);font-size:.9375rem;font-weight:600;line-height:1.35}.dev-app-pitch{color:var(--text-secondary);font-size:.8125rem;line-height:1.35}.footer-legal{margin:0;padding-top:.75rem;border-top:1px solid var(--line);color:var(--text-tertiary);font-size:.8125rem;line-height:1.6}.post-date-sep{margin:0 .5rem;color:var(--text-tertiary);opacity:.6}.post-updated{color:var(--text-tertiary)}.post-author-meta{display:flex;flex-direction:column;gap:.05rem;min-width:0}.post-author-role{color:var(--text-tertiary);font-size:.8125rem;line-height:1.4}a.post-author:hover .post-author-name,a.post-author:focus-visible .post-author-name{text-decoration:underline;text-underline-offset:.25em}.now-updated{margin:0;color:var(--text-tertiary);font-size:.875rem;line-height:1.5}.now-focus-list{display:flex;flex-direction:column;gap:.625rem;margin:0;padding:0;list-style:none}.now-focus-item{position:relative;padding-left:1.125rem;color:var(--text-secondary);line-height:1.6}.now-focus-item:before{content:"";position:absolute;top:.7em;left:0;width:.375rem;height:.375rem;border-radius:999px;background:var(--text-tertiary)}.stat-block{display:flex;flex-direction:column;gap:.875rem;padding:1.25rem 0;border-top:1px solid var(--line)}.stat-product{color:var(--text);font-size:1.05rem;line-height:1.45;font-weight:600;letter-spacing:-.01em}.stat-product:hover{text-decoration:underline;text-underline-offset:.25rem}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(7rem,1fr));gap:1rem;margin:0}.stat-cell{display:flex;flex-direction:column;gap:.125rem}.stat-value{margin:0;font-family:var(--font-heading, "Geist", sans-serif);font-size:1.5rem;line-height:1.2;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.stat-label{margin:0;color:var(--text-tertiary);font-size:.875rem;line-height:1.4}.stat-source{margin:0;color:var(--text-tertiary);font-size:.8125rem;line-height:1.5;font-style:italic}.timeline{display:flex;flex-direction:column;gap:0;margin:0;padding:0;list-style:none}.timeline-item{display:grid;grid-template-columns:6.5rem 1fr;gap:1rem;padding:1rem 0;border-top:1px solid var(--line)}.timeline-date{padding-top:.15rem;color:var(--text-tertiary);font-size:.8125rem;line-height:1.5;font-variant-numeric:tabular-nums}.timeline-link{display:flex;flex-direction:column;gap:.25rem;min-width:0}.timeline-title{color:var(--text);font-size:1.05rem;line-height:1.45;font-weight:600;letter-spacing:-.01em}.timeline-link:hover .timeline-title{text-decoration:underline;text-underline-offset:.25rem}.timeline-detail{color:var(--text-tertiary);font-size:.9375rem;line-height:1.55}@media(max-width:30rem){.timeline-item{grid-template-columns:1fr;gap:.25rem}}.notfound-title{max-width:18ch;font-size:clamp(1.875rem,4.5vw,3rem);line-height:1.08;letter-spacing:-.035em}.notfound-asked{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.5rem 0 0}.notfound-asked-label{color:var(--text-tertiary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.75rem;letter-spacing:.18em;text-transform:uppercase}.notfound-path{overflow-wrap:anywhere;padding:.2rem .5rem;border:1px solid var(--line);border-radius:.4rem;background:var(--surface-code);color:var(--accent);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.875rem}.inline-kbd{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .25rem;border:1px solid var(--line);border-radius:.3rem;background:var(--surface-raised);color:var(--text-secondary);font-family:inherit;font-size:.75rem;line-height:1}.topic-chips{display:flex;flex-wrap:wrap;gap:.5rem}.topic-chip{display:inline-flex;align-items:center;gap:.375rem;min-height:2rem;padding:.25rem .75rem;border:1px solid var(--line);border-radius:999px;background:transparent;color:var(--text-tertiary);font-size:.875rem;line-height:1.4;font-weight:500;letter-spacing:-.01em;cursor:pointer;transition:background-color .16s ease,color .16s ease,border-color .16s ease}.topic-chip:hover,.topic-chip:focus-visible{background:var(--surface-hover);color:var(--text);outline:none}.topic-chip.is-active{border-color:transparent;background:var(--text);color:var(--bg)}.topic-count{opacity:.6;font-variant-numeric:tabular-nums}.topic-chip.is-active .topic-count{opacity:.7}.archive-empty{margin:0;color:var(--text-tertiary)}.archive-year-item[hidden],.archive-year-group[hidden]{display:none}.archive-year-link{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.archive-year-date{flex:none;color:var(--text-tertiary);font-size:.8125rem;line-height:1.4;font-variant-numeric:tabular-nums}.start-here{gap:.75rem}.post-tag{display:inline-flex;align-items:center;min-height:1.875rem;padding:.25rem .625rem;border:1px solid var(--line);border-radius:999px;background:var(--surface-raised);color:var(--text-tertiary);font-size:.875rem;line-height:1.4;font-weight:500;letter-spacing:-.01em}.post-tag-sponsored{border-color:var(--sponsored-border);background:var(--sponsored-bg);color:var(--sponsored-text)}.post-divider{height:.5rem;margin:0 1rem;background:linear-gradient(-45deg,transparent 48%,var(--hatch) 48%,var(--hatch) 52%,transparent 52%);background-size:4px 4px}.post-related{gap:1rem;padding-top:3rem;padding-bottom:4rem}.post-related-accent{width:1.25rem;height:.25rem;border-radius:999px;background:var(--accent)}.post-related-title{margin:0;color:var(--accent);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.8125rem;line-height:1.6;font-weight:600;letter-spacing:.18em;text-transform:uppercase}.post-related-list{display:flex;flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none}.post-related-item{display:flex}.post-related-link{display:inline-flex;flex:1;align-items:center;color:var(--text);font-size:1.125rem;line-height:1.6;font-weight:500;letter-spacing:-.01em;text-underline-offset:2px}.post-related-link:hover,.post-related-link:focus-visible{text-decoration:underline;outline:none}@media(min-width:40rem){.page-frame{padding-top:8rem}.home-page{gap:4rem;padding-top:6.5rem}.profile-lead{font-size:1.375rem;line-height:1.5}.archive-page,.reading-page{padding-top:5rem}.post-page{padding-top:3rem}.archive-intro .profile-title,.reading-page .post-title{font-size:2.25rem}.entry-list{gap:.375rem}.entry-link.entry-link-detail{flex-direction:row;align-items:center;gap:.5rem}.post-related-list{gap:.375rem}}@media(min-width:64rem){.archive-intro .profile-title,.reading-page .post-title{font-size:2.5rem}}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.18s}@media(prefers-reduced-motion:no-preference){.js .page-frame:not(.reading-page)>*{opacity:0;transform:translateY(16px);transition:opacity .52s cubic-bezier(.2,.6,.2,1),transform .52s cubic-bezier(.2,.6,.2,1)}.js .page-frame:not(.reading-page)>.is-visible{opacity:1;transform:none}.theme-button.theme-anim .theme-button-light>svg,.theme-button.theme-anim .theme-button-dark>svg{animation:theme-pop .28s cubic-bezier(.2,.6,.2,1)}}@keyframes theme-pop{0%{transform:rotate(-90deg) scale(.5);opacity:0}to{transform:none;opacity:1}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:0ms!important;animation-duration:0ms!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}.page-frame:not(.post-page){gap:3rem;padding-top:2.5rem}.profile-section,.home-hero,.archive-intro{gap:.875rem}.avatar,.home-hero .avatar{width:3.5rem;height:3.5rem;margin-bottom:.5rem}.profile-title,.home-title,.archive-intro .profile-title{max-width:none;font-size:1.625rem;line-height:1.2;font-weight:700;letter-spacing:-.03em}.profile-lead{max-width:34rem;color:var(--text-secondary);font-size:1rem;line-height:1.6;font-weight:400;letter-spacing:-.005em}.home-hero .social-list{gap:.25rem;margin-left:-.5rem;padding:0}.home-hero .social-link{width:2.25rem;height:2.25rem}.home-hero .social-icon{width:1.125rem;height:1.125rem}.section-title{font-size:1.0625rem}.page-frame:not(.post-page) .content-section{gap:.75rem}.post-related-accent{display:none}.post-related-title{color:var(--text-tertiary);font-family:var(--font-body, "Geist", sans-serif);font-size:.8125rem;font-weight:500;letter-spacing:0;text-transform:none}.post-related-link{font-size:.9375rem;line-height:1.5}.section-head{gap:.25rem}.home-page .product-section{gap:1rem}.home-page .product-section>.lead-in:last-child{margin-top:1.25rem}.section-copy,.prose-line{max-width:36rem;color:var(--text-secondary);font-size:.9375rem;line-height:1.6;font-weight:400;letter-spacing:-.005em}.now-focus-list{gap:.75rem;max-width:36rem}.now-focus-item{padding-left:0;color:var(--text-secondary);font-size:.9375rem;line-height:1.6}.now-focus-item:before{content:none}.now-focus-item b{color:var(--text);font-weight:600}.now-updated{font-size:.75rem}.project-row-text{display:flex;flex-direction:column;min-width:0}span.project-row:hover{background:none}.entry-list{gap:.5rem}.entry-title,.writing-preview .entry-title{font-size:.9375rem;line-height:1.5}.entry-detail,.writing-link .entry-detail{font-size:.8125rem;line-height:1.5}.writing-link .entry-detail{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.archive-groups{gap:2rem}.archive-year-group{gap:.5rem}.archive-year{font-family:var(--font-body, "Geist", sans-serif);font-size:.8125rem;font-weight:500;letter-spacing:0}.archive-year-list{gap:.375rem}.archive-year-link{flex:1;min-width:0;font-size:.9375rem;line-height:1.5;font-weight:500}.archive-year-date{font-size:.75rem}.topic-chip{min-height:1.75rem;padding:.1875rem .6875rem;font-size:.8125rem}.stat-block{gap:.75rem;padding:1.125rem 0}.stat-product{font-size:.9375rem}.stat-value{font-size:1.25rem;font-weight:600}.stat-label{font-size:.8125rem}.stat-source{font-size:.75rem;font-style:normal}.timeline-item{padding:.875rem 0}.timeline-date{font-size:.75rem}.timeline-title{font-size:.9375rem;font-weight:500}.timeline-detail{color:var(--text-secondary);font-size:.8125rem}.contact-link{font-size:.9375rem;font-weight:600}@media(min-width:48rem){.page-frame:not(.post-page){gap:3.5rem;padding-top:4rem}.profile-title,.home-title,.archive-intro .profile-title{font-size:2rem}.profile-lead{font-size:1.0625rem}}


.footer-inline-link{color:var(--text);font-weight:500;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:.2em}
.footer-inline-link:hover{text-decoration-color:currentColor}
.ask-ai-sep{color:var(--text-tertiary)}
.app-tile-icon-soon{width:3.25rem;height:3.25rem;opacity:.72}
.menu-overlay{background:var(--bg)}
