html{scroll-behavior:smooth}body{-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;margin:0}code{font-family:JetBrains Mono,source-code-pro,Menlo,Monaco,Consolas,monospace}.blog-page{padding-bottom:1rem}.blog-container{width:100%}.blog-breadcrumb{font-size:.9rem;padding-top:clamp(2rem,6vw,3rem)}.blog-breadcrumb__link{color:var(--text-muted)}.blog-breadcrumb__link:hover{color:var(--text);text-decoration:none}.blog-list-hero{padding:clamp(2.5rem,8vw,4rem) 0 .5rem}.blog-list-title{font-size:clamp(2rem,6vw,2.75rem);font-weight:800;letter-spacing:-.03em;line-height:1.15;margin-bottom:.75rem}.blog-list-lede{color:var(--text-soft);font-size:1.1rem;max-width:36em}.blog-topics{display:flex;flex-wrap:wrap;gap:.5rem;margin:2rem 0 1.25rem}.blog-topics__btn{background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-soft);cursor:pointer;font:inherit;font-size:.9rem;font-weight:500;min-height:36px;padding:.4rem .9rem}.blog-topics__btn:hover{border-color:var(--border-strong);color:var(--text)}.blog-topics__btn--active,.blog-topics__btn--active:hover{background:var(--text);border-color:var(--text);color:var(--bg)}.blog-list-grid{border-top:1px solid var(--border);list-style:none}.blog-list-grid__cell{border-bottom:1px solid var(--border)}.blog-list-card-link{color:inherit;display:block;padding:1.25rem 0}.blog-list-card-link:hover{text-decoration:none}.blog-list-card-link:hover .blog-list-card__title{color:var(--accent)}.blog-list-card__meta{color:var(--text-muted);display:flex;font-family:var(--font-mono);font-size:.75rem;gap:.4rem;margin-bottom:.35rem}.blog-list-card__title{font-size:1.1rem;font-weight:650;letter-spacing:-.01em;line-height:1.4;margin-bottom:.35rem}.blog-list-card__excerpt{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--text-soft);display:-webkit-box;font-size:.95rem;overflow:hidden}.blog-list-card__tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}.blog-list-card__tag{background:var(--surface-muted);border-radius:6px;color:var(--text-soft);font-size:.72rem;padding:.15rem .5rem}.blog-list-empty{color:var(--text-muted);padding:3rem 0}.blog-pagination{align-items:center;display:flex;flex-wrap:wrap;gap:.75rem;justify-content:space-between;margin-top:2rem}.blog-pagination__pages{display:flex;flex-wrap:wrap;gap:.35rem}.blog-pagination__btn{background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text-soft);cursor:pointer;font:inherit;font-size:.9rem;min-height:40px;min-width:40px;padding:.4rem .75rem}.blog-pagination__btn:hover:not(:disabled){border-color:var(--border-strong);color:var(--text)}.blog-pagination__btn--active,.blog-pagination__btn--active:hover{background:var(--text);border-color:var(--text);color:var(--bg)}.blog-pagination__btn:disabled{cursor:default;opacity:.4}.blog-article{padding-top:1.5rem}.blog-header{border-bottom:1px solid var(--border);margin-bottom:2rem;padding-bottom:1.5rem}.blog-meta{color:var(--text-muted);display:flex;font-family:var(--font-mono);font-size:.8rem;gap:.5rem;margin-bottom:.75rem}.blog-article__title,.blog-header__title{font-size:clamp(1.75rem,5.5vw,2.4rem);font-weight:800;letter-spacing:-.03em;line-height:1.2;margin-bottom:1rem}.blog-article__text{color:var(--text-soft);margin-bottom:1.5rem}.blog-tags{display:flex;flex-wrap:wrap;gap:.4rem}.blog-tag{background:var(--surface-muted);border-radius:6px;color:var(--text-soft);font-size:.75rem;padding:.2rem .55rem}.blog-loading{color:var(--text-muted);padding:2rem 0}.blog-content__body{color:var(--text-soft);font-size:1.075rem;line-height:1.75;overflow-wrap:break-word}.blog-content__body p,.blog-content__body pre,.blog-content__body ul{margin-bottom:1.25rem}.blog-content__body h1,.blog-content__body h2,.blog-content__body h3{color:var(--text);letter-spacing:-.02em;line-height:1.3;margin:2.25rem 0 .75rem}.blog-content__body h1{font-size:1.6rem}.blog-content__body h2{font-size:1.35rem}.blog-content__body h3{font-size:1.15rem}.blog-content__body strong{color:var(--text);font-weight:650}.blog-content__body a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.blog-content__body ul{padding-left:1.25rem}.blog-content__body li{margin-bottom:.35rem}.blog-content__body li::marker{color:var(--text-muted)}.blog-content__body img{border:1px solid var(--border);border-radius:var(--radius);height:auto;margin:.5rem 0;max-width:100%}.blog-content__body code{background:var(--surface-muted);border-radius:4px;color:var(--text);font-family:var(--font-mono);font-size:.85em;padding:.1em .35em}.blog-code{background:#1d1c1a;border-radius:10px;overflow-x:auto;padding:1rem 1.15rem}.blog-code code{background:none;color:#f1efe9;font-size:.85rem;line-height:1.6;padding:0;white-space:pre}.blog-content__body hr{border:0;border-top:1px solid var(--border);margin:2.25rem 0}.blog-reactions{border-top:1px solid var(--border);margin-top:3rem;padding:1.5rem 0;text-align:center}.blog-reactions__prompt{color:var(--text-muted);font-size:.9rem;margin-bottom:.85rem}.blog-reactions__buttons{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center}.blog-reactions__btn{align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:999px;color:var(--text-soft);cursor:pointer;display:inline-flex;font:inherit;font-size:.9rem;gap:.4rem;min-height:40px;padding:.4rem .9rem}.blog-reactions__btn:hover{border-color:var(--border-strong)}.blog-reactions__btn--active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.blog-reactions__count{font-family:var(--font-mono);font-size:.8rem}.blog-footer{border-top:1px solid var(--border);padding-top:1.5rem}.blog-nav{display:flex;gap:1rem;justify-content:space-between;margin-bottom:1.75rem}.blog-nav__link{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:inherit;display:flex;flex:1 1;flex-direction:column;gap:.25rem;max-width:48%;padding:1rem}.blog-nav__link:hover{border-color:var(--border-strong);text-decoration:none}.blog-nav__next{margin-left:auto;text-align:right}.blog-nav__label{color:var(--text-muted);font-size:.8rem}.blog-nav__title{line-height:1.4}.blog-btn,.blog-nav__title{font-size:.95rem;font-weight:600}.blog-btn{align-items:center;background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;color:var(--text);display:inline-flex;min-height:44px;padding:.6rem 1.1rem}.blog-btn:hover{border-color:var(--text-muted);text-decoration:none}.blog-btn--center{display:flex;margin:0 auto;width:fit-content}@media (max-width:560px){.blog-nav{flex-direction:column}.blog-nav__link{max-width:none}.blog-nav__next{text-align:left}.blog-pagination{justify-content:center}}.pp-page{padding-top:clamp(2rem,6vw,3rem)}.pp-container{position:relative;width:100%;z-index:1}.pp-breadcrumb{align-items:center;color:var(--text-muted);display:flex;font-size:.875rem;gap:.5rem;margin-bottom:2rem}.pp-breadcrumb__link{color:var(--accent);text-decoration:none;transition:color .2s}.pp-breadcrumb__link:hover{color:var(--accent);text-decoration:underline}.pp-article{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.pp-header{border-bottom:1px solid var(--border);padding:2rem 2.5rem}.pp-header__title{color:var(--text);font-size:2rem;font-weight:700;line-height:1.3;margin:0 0 .5rem}.pp-header__date{color:var(--text-muted);font-family:JetBrains Mono,ui-monospace,monospace;font-size:.875rem;margin:0}.pp-content{padding:2rem 2.5rem}.pp-section{margin-bottom:2rem}.pp-section:last-child{margin-bottom:0}.pp-section__title{border-bottom:1px solid var(--border);color:var(--text);font-size:1.25rem;font-weight:600;margin:0 0 .75rem;padding-bottom:.4rem}.pp-section__text{color:var(--text-soft);font-size:1rem;line-height:1.7;margin:0 0 .75rem}.pp-section__text:last-child{margin-bottom:0}.pp-link{color:var(--accent);text-decoration:none;transition:color .2s}.pp-link:hover{color:var(--accent);text-decoration:underline}.pp-info-block{background:var(--surface-muted);border:1px solid var(--border);border-radius:8px;margin:.75rem 0;padding:1rem 1.25rem}.pp-info-block__line{color:var(--text-soft);font-size:.95rem;line-height:1.6;margin:0 0 .25rem}.pp-info-block__line:last-child{margin-bottom:0}.pp-info-block__line strong{color:var(--text)}.pp-list{list-style:disc;margin:.5rem 0;padding-left:1.5rem}.pp-list__item{color:var(--text-soft);font-size:1rem;line-height:1.7;margin-bottom:.5rem}.pp-list__item::marker{color:var(--accent)}.pp-list__item strong{color:var(--text);font-weight:600}.pp-table-wrap{-webkit-overflow-scrolling:touch;margin:.75rem 0;overflow-x:auto}.pp-table{border:1px solid var(--border);border-collapse:collapse;border-radius:8px;font-size:.9rem;width:100%}.pp-table__th{background:var(--surface-muted);color:var(--text);font-size:.85rem;font-weight:600;padding:.75rem 1rem;text-align:left;white-space:nowrap}.pp-table__td,.pp-table__th{border-bottom:1px solid var(--border)}.pp-table__td{color:var(--text-soft);line-height:1.5;padding:.65rem 1rem;vertical-align:top}.pp-table tr:last-child .pp-table__td{border-bottom:none}@media (max-width:768px){.pp-header{padding:1.5rem}.pp-header__title{font-size:1.5rem}.pp-content{padding:1.5rem}.pp-section__title{font-size:1.1rem}.pp-list__item,.pp-section__text{font-size:.95rem}.pp-table{font-size:.8rem}.pp-table__td,.pp-table__th{padding:.5rem .75rem}}@media (max-width:480px){.pp-breadcrumb{font-size:.8rem;margin-bottom:1.5rem}.pp-header__title{font-size:1.35rem}.pp-table__td,.pp-table__th{padding:.4rem .5rem}}:root{--bg:#faf8f4;--surface:#fff;--surface-muted:#f3f0ea;--text:#1d1c1a;--text-soft:#4a4843;--text-muted:#77736b;--border:#e6e1d8;--border-strong:#d4cec2;--accent:#2b59c3;--accent-soft:#e8eefb;--live:#1f7a4d;--live-soft:#e3f3ea;--soon:#9a5b00;--soon-soft:#fbf0dc;--font-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;--column:720px;--gutter:clamp(1rem,5vw,1.5rem);--radius:12px}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{-webkit-font-smoothing:antialiased;background:#faf8f4;background:var(--bg);color:#1d1c1a;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-family:var(--font-sans);font-size:1rem;line-height:1.65}a{color:#2b59c3;color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}:focus-visible{border-radius:4px;outline:2px solid #2b59c3;outline:2px solid var(--accent);outline-offset:2px}::selection{background:#e8eefb;background:var(--accent-soft)}.site{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.site-main{flex:1 1;margin:0 auto;max-width:calc(720px + clamp(1rem, 5vw, 1.5rem)*2);max-width:calc(var(--column) + var(--gutter)*2);padding:0 clamp(1rem,5vw,1.5rem) 4rem;padding:0 var(--gutter) 4rem;width:100%}.site-nav{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:#faf8f4e6;border-bottom:1px solid #0000;padding-top:env(safe-area-inset-top,0);position:sticky;top:0;z-index:10}.site-nav__inner{align-items:center;display:flex;gap:1rem;justify-content:space-between;margin:0 auto;max-width:calc(720px + clamp(1rem, 5vw, 1.5rem)*2);max-width:calc(var(--column) + var(--gutter)*2);padding:1rem clamp(1rem,5vw,1.5rem);padding:1rem var(--gutter)}.site-nav__name{color:#1d1c1a;color:var(--text);font-weight:700;letter-spacing:-.01em}.site-nav__name:hover{color:#2b59c3;color:var(--accent);text-decoration:none}.site-nav__links{display:flex;gap:clamp(.85rem,4vw,1.5rem);list-style:none}.site-nav__link{color:#77736b;color:var(--text-muted);font-size:.95rem;font-weight:500}.site-nav__link:hover{text-decoration:none}.site-nav__link--active,.site-nav__link:hover{color:#1d1c1a;color:var(--text)}.site-footer{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.site-footer__inner{display:flex;flex-wrap:wrap;font-size:.9rem;gap:1rem;justify-content:space-between;margin:0 auto;max-width:calc(720px + clamp(1rem, 5vw, 1.5rem)*2);max-width:calc(var(--column) + var(--gutter)*2);padding:2rem clamp(1rem,5vw,1.5rem) calc(2rem + env(safe-area-inset-bottom, 0));padding:2rem var(--gutter) calc(2rem + env(safe-area-inset-bottom, 0))}.site-footer__links{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem}.site-footer__links a{color:#4a4843;color:var(--text-soft)}.site-footer__copy{color:#77736b;color:var(--text-muted)}.page-head+.block{margin-top:1.25rem}.button{align-items:center;background:#fff;background:var(--surface);border:1px solid #d4cec2;border:1px solid var(--border-strong);border-radius:10px;color:#1d1c1a;color:var(--text);display:inline-flex;font-size:.95rem;font-weight:600;min-height:44px;padding:.65rem 1.15rem;transition:border-color .15s,background .15s}.button:hover{border-color:#77736b;border-color:var(--text-muted);text-decoration:none}.button--primary{background:#1d1c1a;background:var(--text);border-color:#1d1c1a;border-color:var(--text);color:#faf8f4;color:var(--bg)}.button--primary:hover{background:#000;border-color:#000}.intro{padding:clamp(3rem,10vw,5.5rem) 0 1rem}.intro__title{font-size:clamp(2.25rem,7vw,3.25rem);font-weight:800;letter-spacing:-.035em;line-height:1.1;margin-bottom:1.25rem}.intro__lede{color:#4a4843;color:var(--text-soft);font-size:clamp(1.1rem,3vw,1.25rem);line-height:1.6;max-width:36em}.intro__actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}.page-head{padding:clamp(2.5rem,8vw,4rem) 0 .5rem}.page-head__title{font-size:clamp(2rem,6vw,2.75rem);font-weight:800;letter-spacing:-.03em;line-height:1.15;margin-bottom:.75rem}.page-head__lede{color:#4a4843;color:var(--text-soft);font-size:1.1rem;max-width:36em}.block{margin-top:clamp(2.75rem,7vw,3.75rem)}.block__head{align-items:baseline;display:flex;gap:1rem;justify-content:space-between}.block__title{color:#77736b;color:var(--text-muted);font-size:.8rem;font-weight:600;letter-spacing:.08em;margin-bottom:1rem;text-transform:uppercase}.block__more{font-size:.9rem;white-space:nowrap}.block__text,.prose p{color:#4a4843;color:var(--text-soft)}.prose p{font-size:1.05rem}.prose p+p{margin-top:1rem}.tags{display:flex;flex-wrap:wrap;gap:.4rem}.tag{background:#f3f0ea;background:var(--surface-muted);border-radius:6px;color:#4a4843;color:var(--text-soft);font-size:.75rem;padding:.2rem .55rem}.app-list{background:#fff;background:var(--surface);border:1px solid #e6e1d8;border:1px solid var(--border);border-radius:12px;border-radius:var(--radius);list-style:none}.app-list li+li{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.app-row{align-items:center;color:inherit;display:flex;gap:1rem;padding:1rem 1.15rem}.app-row:hover{background:#f3f0ea;background:var(--surface-muted);text-decoration:none}li:first-child .app-row{border-radius:12px 12px 0 0;border-radius:var(--radius) var(--radius) 0 0}li:last-child .app-row{border-radius:0 0 12px 12px;border-radius:0 0 var(--radius) var(--radius)}.app-row__text{display:flex;flex:1 1;flex-direction:column;min-width:0}.app-row__name{align-items:center;display:flex;font-weight:650;gap:.5rem}.app-row__tagline{font-size:.92rem}.app-row__arrow,.app-row__tagline{color:#77736b;color:var(--text-muted)}.app-cards{grid-gap:1rem;display:grid;gap:1rem}.app-card{background:#fff;background:var(--surface);border:1px solid #e6e1d8;border:1px solid var(--border);border-radius:12px;border-radius:var(--radius);display:flex;flex-direction:column;gap:.75rem;padding:clamp(1.15rem,4vw,1.5rem)}.app-card__head{align-items:center;display:flex;gap:.9rem}.app-card__name{font-size:1.2rem;font-weight:700;letter-spacing:-.01em;line-height:1.3}.app-card__meta{color:#77736b;color:var(--text-muted);font-size:.85rem}.app-card__tagline{font-weight:600}.app-card__text{color:#4a4843;color:var(--text-soft)}.app-card__links{display:flex;flex-wrap:wrap;font-size:.95rem;font-weight:600;gap:.5rem 1.25rem}.post-list{list-style:none}.post-list__item{align-items:baseline;border-bottom:1px solid #e6e1d8;border-bottom:1px solid var(--border);color:#1d1c1a;color:var(--text);display:flex;gap:1.5rem;justify-content:space-between;padding:.7rem 0}.post-list__item:hover{text-decoration:none}.post-list__item:hover .post-list__title{color:#2b59c3;color:var(--accent)}li:first-child .post-list__item{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.post-list__title{font-weight:500}.post-list__date{color:#77736b;color:var(--text-muted);flex-shrink:0;font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,monospace;font-family:var(--font-mono);font-size:.8rem}.oss-stats{grid-gap:.75rem;display:grid;gap:.75rem;grid-template-columns:repeat(3,1fr);list-style:none;margin-top:1.75rem}.oss-stats__item{background:#fff;background:var(--surface);border:1px solid #e6e1d8;border:1px solid var(--border);border-radius:12px;border-radius:var(--radius);display:flex;flex-direction:column;gap:.25rem;padding:1rem 1.1rem}.oss-stats__value{color:#2b59c3;color:var(--accent);font-size:1.85rem;font-weight:800;letter-spacing:-.03em;line-height:1}.oss-stats__label{color:#4a4843;color:var(--text-soft);font-size:.85rem;line-height:1.4}.oss-card__head{align-items:center;display:flex;gap:1rem;justify-content:space-between}.oss-card__head .app-card__name a{color:#1d1c1a;color:var(--text)}.oss-card__head .app-card__name a:hover,.oss-card__role{color:#2b59c3;color:var(--accent)}.oss-card__role{background:#e8eefb;background:var(--accent-soft);border-radius:999px;flex-shrink:0;font-size:.72rem;font-weight:600;padding:.3rem .55rem}.oss-card .app-card__meta{margin-top:-.5rem}.oss-card__highlights{color:#4a4843;color:var(--text-soft);display:flex;flex-direction:column;font-size:.95rem;gap:.45rem;list-style:none}.oss-card__highlights li{padding-left:1.1rem;position:relative}.oss-card__highlights li:before{background:#1f7a4d;background:var(--live);border-radius:50%;content:"";height:6px;left:0;position:absolute;top:.62em;width:6px}.oss-card__pr{font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,monospace;font-family:var(--font-mono);font-size:.82rem;font-weight:600;white-space:nowrap}.oss-list{list-style:none;margin-bottom:1.25rem}.oss-list__item{border-bottom:1px solid #e6e1d8;border-bottom:1px solid var(--border);padding:1rem 0}.oss-list__item:first-child{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.oss-list__head{align-items:baseline;display:flex;flex-wrap:wrap;gap:.25rem 1rem;justify-content:space-between}.oss-list__title{color:#1d1c1a;color:var(--text);font-weight:650}.oss-list a.oss-list__title:hover{color:#2b59c3;color:var(--accent)}.oss-list__meta{color:#77736b;color:var(--text-muted);font-size:.85rem}.oss-list__text{color:#4a4843;color:var(--text-soft);font-size:.95rem;margin-top:.25rem}.work-list{list-style:none}.work-list__item{grid-gap:.25rem 1.5rem;border-bottom:1px solid #e6e1d8;border-bottom:1px solid var(--border);display:grid;gap:.25rem 1.5rem;grid-template-columns:7.5rem 1fr;padding:1.25rem 0}.work-list__item:first-child{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.work-list__period{color:#77736b;color:var(--text-muted);font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,monospace;font-family:var(--font-mono);font-size:.8rem;padding-top:.2rem}.work-list__role{font-size:1rem;font-weight:650;line-height:1.4}.work-list__company{color:#4a4843;color:var(--text-soft);font-weight:500}.work-list__points{color:#4a4843;color:var(--text-soft);font-size:.95rem;margin-top:.5rem;padding-left:1.1rem}.work-list__points li+li{margin-top:.35rem}.skill-list__row{grid-gap:.25rem 1.5rem;border-bottom:1px solid #e6e1d8;border-bottom:1px solid var(--border);display:grid;gap:.25rem 1.5rem;grid-template-columns:7.5rem 1fr;padding:.7rem 0}.skill-list__row:first-child{border-top:1px solid #e6e1d8;border-top:1px solid var(--border)}.skill-list dt{font-size:.95rem;font-weight:600}.skill-list dd{color:#4a4843;color:var(--text-soft);font-size:.95rem}.contact-list{display:flex;flex-wrap:wrap;font-weight:600;gap:.5rem 1.5rem;list-style:none}@media(max-width:560px){.oss-stats{grid-template-columns:1fr}.oss-stats__item{align-items:baseline;flex-direction:row;gap:.75rem}.oss-stats__value{min-width:2.5ch}.skill-list__row,.work-list__item{grid-template-columns:1fr}.post-list__item{flex-direction:column;gap:.15rem}.intro__actions .button{flex:1 1 auto;justify-content:center}}