.blog-index{padding-top:7.5rem;padding-bottom:5rem}.blog-index__header{max-width:var(--prose-w);margin-bottom:3rem}.blog-index__title{font-size:var(--fs-h1);margin:.9rem 0 1rem}.blog-index__lead{color:var(--text-color);font-size:var(--fs-lead);max-width:60ch}.blog-index__controls{border-bottom:1px solid var(--border-color);gap:1.25rem;margin-bottom:3rem;padding-bottom:2rem;display:grid}.blog-index__empty{color:var(--text-color-light);padding-block:3rem}.blog-index__grid{grid-template-columns:1fr;gap:1.5rem;display:grid}.blog-search__label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.blog-search__field{background-color:var(--input-color);border:1px solid var(--border-color);border-radius:var(--radius-pill);color:var(--text-color-light);transition:border-color var(--dur) var(--ease);align-items:center;gap:.6rem;padding:.7rem 1.1rem;display:flex}.blog-search__field:focus-within{border-color:var(--accent)}.blog-search__input{color:var(--title-color);font-family:var(--body-font);font-size:var(--fs-base);background:0 0;border:none;outline:none;flex:1}.blog-search__input::-webkit-search-cancel-button{filter:grayscale();cursor:pointer}.blog-search__status{font-family:var(--mono-font);font-size:var(--fs-smaller);color:var(--text-color-light);margin-top:.6rem}.post-tag{font-family:var(--mono-font);font-size:var(--fs-smaller);background-color:var(--surface-2);border:1px solid var(--border-color);border-radius:var(--radius-pill);color:var(--title-color);align-items:center;gap:.4rem;padding:.35rem .8rem;display:inline-flex}a.post-tag:hover{border-color:var(--accent);color:var(--accent-ink)}.post-tag--button{cursor:pointer;transition:border-color var(--dur) var(--ease), background-color var(--dur) var(--ease), color var(--dur) var(--ease)}.post-tag--button:hover{border-color:var(--border-strong)}.post-tag--button.is-active{background-color:var(--accent);border-color:var(--accent);color:var(--on-accent)}.post-tag__count{opacity:.65;font-size:.68rem}.tag-filter{flex-wrap:wrap;gap:.5rem;display:flex}.post-card{background-color:var(--container-color);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease), border-color var(--dur) var(--ease);overflow:hidden}.post-card:hover{box-shadow:var(--shadow-lg);border-color:var(--border-strong);transform:translateY(-3px)}.post-card__link{height:100%;color:inherit;display:grid}.post-card__cover{aspect-ratio:16/9;object-fit:cover;border-bottom:1px solid var(--border-color);width:100%}.post-card__body{align-content:start;gap:.7rem;padding:1.5rem;display:grid}.post-card__meta{font-family:var(--mono-font);font-size:var(--fs-smaller);color:var(--text-color-light);flex-wrap:wrap;gap:.5rem;display:flex}.post-card__title{font-size:var(--fs-h3);color:var(--title-color);line-height:1.3}.post-card__excerpt{color:var(--text-color);font-size:var(--fs-small);line-height:1.65}.post-card__tags{flex-wrap:wrap;gap:.45rem;margin-top:.35rem;list-style:none;display:flex}.post-card--featured{margin-bottom:1.5rem}.post-card--featured .post-card__title{font-size:var(--fs-h2)}.post-page{padding-top:7.5rem;padding-bottom:5rem}body:has(.bg-canvas) .post-page__container{background:color-mix(in srgb, var(--body-color) 90%, transparent);-webkit-backdrop-filter:blur(20px)saturate(150%);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding-block:3rem}.post-page__back{font-size:var(--fs-small);color:var(--text-color-light);transition:color var(--dur) var(--ease);align-items:center;gap:.4rem;margin-bottom:2rem;display:inline-flex}.post-page__back:hover{color:var(--accent-ink)}.post-page__header{max-width:var(--prose-w);margin-inline:auto;margin-bottom:2.5rem}.post-page__title{font-size:var(--fs-h1);margin:.9rem 0 1rem;line-height:1.15}.post-page__meta{font-family:var(--mono-font);font-size:var(--fs-smaller);color:var(--text-color-light);flex-wrap:wrap;gap:.5rem;display:flex}.post-page__tags{flex-wrap:wrap;gap:.45rem;margin-top:1.1rem;list-style:none;display:flex}.post-page__cover{border-radius:var(--radius-lg);border:1px solid var(--border-color);width:100%;max-width:900px;box-shadow:var(--shadow);margin:0 auto 3rem;display:block}.post-page__layout{grid-template-columns:minmax(0,1fr);gap:2.5rem;display:grid}.post-page__canonical{max-width:var(--prose-w);font-size:var(--fs-small);color:var(--text-color-light);margin:3rem auto 0}.post-toc{border-inline-start:2px solid var(--border-color);align-self:start;padding-inline-start:1rem}.post-toc__heading{font-family:var(--mono-font);font-size:var(--fs-eyebrow);letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink);margin-bottom:.85rem}.post-toc__list{gap:.5rem;list-style:none;display:grid}.post-toc__item a{color:var(--text-color-light);font-size:var(--fs-small);transition:color var(--dur) var(--ease);line-height:1.4}.post-toc__item a:hover{color:var(--accent-ink)}.post-toc__item--h3{padding-inline-start:.9rem}.post-series{max-width:var(--prose-w);background-color:var(--container-color);border:1px solid var(--border-color);border-radius:var(--radius-lg);margin:3.5rem auto 0;padding:1.5rem}.post-series__eyebrow{font-family:var(--mono-font);font-size:var(--fs-eyebrow);letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink);margin-bottom:1rem}.post-series__list{color:var(--text-color);gap:.6rem;padding-inline-start:1.2rem;list-style:decimal;display:grid}.post-series__item::marker{color:var(--text-color-light);font-family:var(--mono-font);font-size:var(--fs-smaller)}.post-series__item.is-current{color:var(--title-color);font-weight:var(--fw-semibold)}.post-series__item a:hover{color:var(--accent-ink)}.post-nav{max-width:var(--prose-w);border-top:1px solid var(--border-color);gap:1rem;margin:3.5rem auto 0;padding-top:2rem;display:grid}.post-nav__link{border:1px solid var(--border-color);border-radius:var(--radius);color:inherit;transition:border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);gap:.35rem;padding:1rem 1.25rem;display:grid}.post-nav__link:hover{border-color:var(--accent);background-color:var(--surface-2)}.post-nav__link--next{text-align:end}.post-nav__label{font-family:var(--mono-font);font-size:var(--fs-eyebrow);letter-spacing:.12em;text-transform:uppercase;color:var(--text-color-light);align-items:center;gap:.35rem;display:inline-flex}.post-nav__link--next .post-nav__label{justify-content:flex-end}.post-nav__title{color:var(--title-color);font-weight:var(--fw-medium);line-height:1.35}.post-related{max-width:var(--prose-w);margin:3.5rem auto 0}.post-related__heading{font-size:var(--fs-h3);margin-bottom:1.25rem}.post-related__list{gap:.9rem;list-style:none;display:grid}.post-related__link{color:inherit;border-bottom:1px solid var(--border-color);gap:.25rem;padding-bottom:.9rem;display:grid}.post-related__list li:last-child .post-related__link{border-bottom:none;padding-bottom:0}.post-related__title{color:var(--title-color);font-weight:var(--fw-medium);transition:color var(--dur) var(--ease)}.post-related__link:hover .post-related__title{color:var(--accent-ink)}.post-related__meta{font-family:var(--mono-font);font-size:var(--fs-smaller);color:var(--text-color-light);gap:.45rem;display:flex}.prose{width:100%;min-width:0;max-width:var(--prose-w);font-size:var(--fs-lead);color:var(--text-color);overflow-wrap:break-word;margin-inline:auto;line-height:1.75}.prose h2,.prose h3,.prose h4{color:var(--title-color);font-family:var(--title-font);letter-spacing:-.02em;scroll-margin-top:calc(var(--header-height) + 1.5rem);line-height:1.2;position:relative}.prose h2{font-size:var(--fs-h2);margin-block:3rem 1rem}.prose h3{font-size:var(--fs-h3);font-weight:var(--fw-semibold);margin-block:2.25rem .75rem}.prose h4{font-size:var(--fs-base);font-weight:var(--fw-semibold);color:var(--text-color-light);font-family:var(--mono-font);letter-spacing:.02em;margin-block:1.75rem .5rem}.prose>:is(h2,h3,h4):first-child{margin-top:0}.prose__anchor{color:var(--accent-ink);font-family:var(--mono-font);font-weight:var(--fw-regular);opacity:0;transition:opacity var(--dur) var(--ease);position:absolute;inset-inline-start:-1.25rem}.prose :is(h2,h3,h4):hover .prose__anchor,.prose__anchor:focus-visible{opacity:1}@media (width<=40rem){.prose__anchor{display:none}}.prose p{margin-block:0 1.35rem}.prose>:last-child{margin-bottom:0}.prose :is(ul,ol){gap:.5rem;margin-block:0 1.35rem;padding-inline-start:1.5rem;display:grid}.prose ul{list-style:outside}.prose ol{list-style:decimal}.prose li::marker{color:var(--accent-ink)}.prose li>:is(ul,ol){margin-block:.5rem 0}.prose li>p{margin-bottom:.5rem}.prose a{color:var(--accent-ink);font-weight:var(--fw-medium);text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--accent-ink) 35%, transparent);text-decoration-color:color-mix(in srgb, var(--accent-ink) 35%, transparent);text-underline-offset:.2em;transition:text-decoration-color var(--dur) var(--ease);text-decoration-thickness:1px}.prose a:hover{-webkit-text-decoration-color:var(--accent-ink);text-decoration-color:var(--accent-ink)}.prose strong{color:var(--title-color);font-weight:var(--fw-semibold)}.prose blockquote{border-inline-start:3px solid var(--accent);color:var(--text-color-light);font-size:var(--fs-base);margin:2rem 0;padding:.25rem 0 .25rem 1.35rem}.prose blockquote p:last-child{margin-bottom:0}.prose :not(pre)>code{font-family:var(--mono-font);background-color:var(--surface-2);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--title-color);padding:.12em .4em;font-size:.875em}.prose pre{background-color:var(--surface-2);border:1px solid var(--border-color);border-radius:var(--radius);font-size:var(--fs-small);tab-size:2;box-shadow:var(--shadow-sm);margin:2rem 0;padding:1.15rem 1.25rem;line-height:1.6;overflow-x:auto}.prose pre:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.prose pre code{font-family:var(--mono-font);white-space:pre;background:0 0;border:none;padding:0;display:block}.prose .shiki,.prose .shiki span{color:var(--shiki-light)}body.dark-theme .prose .shiki,body.dark-theme .prose .shiki span{color:var(--shiki-dark)}.prose :is(img,video){border-radius:var(--radius);border:1px solid var(--border-color);width:100%;margin-block:2rem;display:block}.prose figure{margin-block:2rem}.prose figure img{margin-block:0}.prose figcaption{font-family:var(--mono-font);font-size:var(--fs-smaller);color:var(--text-color-light);text-align:center;margin-top:.7rem}.prose__table-scroll{margin-block:2rem;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-size:var(--fs-small);text-align:start}.prose :is(th,td){border-bottom:1px solid var(--border-color);vertical-align:top;padding:.7rem .9rem}.prose th{color:var(--title-color);font-weight:var(--fw-semibold);font-family:var(--mono-font);font-size:var(--fs-smaller);letter-spacing:.06em;text-transform:uppercase;border-bottom-color:var(--border-strong);white-space:nowrap}.prose tbody tr:last-child :is(th,td){border-bottom:none}.prose hr{border:none;border-top:1px solid var(--border-color);margin-block:3rem}.prose details{background-color:var(--container-color);border:1px solid var(--border-color);border-radius:var(--radius);margin-block:1.5rem;padding:1rem 1.25rem}.prose summary{cursor:pointer;color:var(--title-color);font-weight:var(--fw-semibold)}.prose details[open] summary{margin-bottom:.85rem}.prose .footnotes{font-size:var(--fs-small);color:var(--text-color-light)}.prose .footnotes h2{font-size:var(--fs-h3)}@media screen and (width>=768px){.blog-index__grid,.post-nav{grid-template-columns:repeat(2,1fr)}.post-card--featured .post-card__link{grid-template-columns:1.1fr 1fr;align-items:stretch}.post-card--featured .post-card__cover{aspect-ratio:auto;border-bottom:none;border-inline-end:1px solid var(--border-color);height:100%}.post-card--featured .post-card__body{align-content:center;padding:2rem}}@media screen and (width>=1100px){.post-page__layout--with-toc{grid-template-columns:15rem minmax(0,1fr);align-items:start;gap:3rem}.post-toc{top:calc(var(--header-height) + 2rem);max-height:calc(100vh - var(--header-height) - 4rem);position:sticky;overflow-y:auto}.post-page__layout--with-toc .prose{margin-inline:0}}@media (prefers-reduced-motion:reduce){.post-card,.post-card:hover{transition:none;transform:none}}
