:root{--tsuki-bg:#fbfaf7;--tsuki-fg:#1a1a1a;--tsuki-fg-muted:#666;--tsuki-fg-subtle:#6b6b6b;--tsuki-border:#e5e3dd;--tsuki-accent:#4a6fa5;--tsuki-accent-hover:#2c4a7a;--tsuki-code-bg:#f1efe9;--tsuki-selection-bg:#d4dff0;--tsuki-shadow:0 1px 2px rgb(0 0 0 / 0.04), 0 4px 12px rgb(0 0 0 / 0.04);--tsuki-font-sans:"Inter", "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;--tsuki-font-mono:"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;--tsuki-font-serif:"Source Serif 4", Georgia, "Iowan Old Style", serif;--tsuki-fs-xs:0.8125rem;--tsuki-fs-sm:0.9375rem;--tsuki-fs-base:1rem;--tsuki-fs-lg:1.125rem;--tsuki-fs-xl:1.375rem;--tsuki-fs-2xl:1.75rem;--tsuki-fs-3xl:2.25rem;--tsuki-lh-tight:1.3;--tsuki-lh-body:1.7;--tsuki-space-1:0.25rem;--tsuki-space-2:0.5rem;--tsuki-space-3:0.75rem;--tsuki-space-4:1rem;--tsuki-space-6:1.5rem;--tsuki-space-8:2rem;--tsuki-space-12:3rem;--tsuki-space-16:4rem;--tsuki-radius:0.375rem;--tsuki-radius-lg:0.625rem;--tsuki-content-width:42rem;--tsuki-wide-width:64rem;--tsuki-transition:180ms ease;color-scheme:light dark}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--tsuki-bg:#14151a;--tsuki-fg:#ececec;--tsuki-fg-muted:#a0a0a0;--tsuki-fg-subtle:#8a8a8a;--tsuki-border:#2a2c33;--tsuki-accent:#8ab0ea;--tsuki-accent-hover:#b1c8f0;--tsuki-code-bg:#1c1e25;--tsuki-selection-bg:#2a3a5a;--tsuki-shadow:0 1px 2px rgb(0 0 0 / 0.2), 0 4px 12px rgb(0 0 0 / 0.25)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--tsuki-bg:#14151a;--tsuki-fg:#ececec;--tsuki-fg-muted:#a0a0a0;--tsuki-fg-subtle:#8a8a8a;--tsuki-border:#2a2c33;--tsuki-accent:#8ab0ea;--tsuki-accent-hover:#b1c8f0;--tsuki-code-bg:#1c1e25;--tsuki-selection-bg:#2a3a5a;--tsuki-shadow:0 1px 2px rgb(0 0 0 / 0.2), 0 4px 12px rgb(0 0 0 / 0.25)}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;font-family:var(--tsuki-font-sans);background:var(--tsuki-bg);color:var(--tsuki-fg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}img,picture,svg,video,canvas{display:block;max-width:100%;height:auto}button{font:inherit;cursor:pointer}a{color:var(--tsuki-accent);text-decoration:none}a:hover{color:var(--tsuki-accent-hover);text-decoration:underline}::selection{background:var(--tsuki-selection-bg)}ul,ol{padding-inline-start:1.25rem}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}body{font-size:var(--tsuki-fs-base);line-height:var(--tsuki-lh-body);font-feature-settings:"kern","liga","calt","ss01"}h1,h2,h3,h4,h5,h6{line-height:var(--tsuki-lh-tight);font-weight:650;letter-spacing:-.01em;margin-block:var(--tsuki-space-8)var(--tsuki-space-3)}h1{font-size:var(--tsuki-fs-3xl)}h2{font-size:var(--tsuki-fs-2xl)}h3{font-size:var(--tsuki-fs-xl)}h4{font-size:var(--tsuki-fs-lg)}p{margin-block:0 var(--tsuki-space-4)}blockquote{margin-inline:0;padding-inline-start:var(--tsuki-space-4);border-inline-start:3px solid var(--tsuki-border);color:var(--tsuki-fg-muted);font-style:italic}code{font-family:var(--tsuki-font-mono);font-size:.9em;background:var(--tsuki-code-bg);padding:.125em .375em;border-radius:var(--tsuki-radius)}pre{font-family:var(--tsuki-font-mono);font-size:var(--tsuki-fs-sm);line-height:1.55;background:var(--tsuki-code-bg);padding:var(--tsuki-space-4);border-radius:var(--tsuki-radius);overflow-x:auto;position:relative}pre code{background:0 0;padding:0;font-size:inherit}hr{border:none;border-top:1px solid var(--tsuki-border);margin-block:var(--tsuki-space-12)}table{width:100%;border-collapse:collapse;margin-block:var(--tsuki-space-6)}.table-wrap{overflow-x:auto;margin-block:var(--tsuki-space-6)}.table-wrap>table{margin-block:0}th,td{text-align:start;vertical-align:top;padding:var(--tsuki-space-2)var(--tsuki-space-3);border-bottom:1px solid var(--tsuki-border)}th{font-weight:600}figure{margin:var(--tsuki-space-6)0}figcaption{margin-block-start:var(--tsuki-space-2);color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-sm)}.image-link{display:block;inline-size:fit-content;max-inline-size:100%}body{display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:minmax(0,1fr)}.site-header,main,.site-footer{padding-inline:var(--tsuki-space-6)}.site-header{display:flex;align-items:center;gap:var(--tsuki-space-4);flex-wrap:wrap;max-width:var(--tsuki-wide-width);margin-inline:auto;width:100%;padding-block:var(--tsuki-space-6);border-bottom:1px solid var(--tsuki-border)}.site-title{font-weight:650;font-size:var(--tsuki-fs-lg);letter-spacing:-.01em;color:var(--tsuki-fg);text-decoration:none}.site-title:hover{text-decoration:none;color:var(--tsuki-accent)}.site-nav{margin-inline-start:auto;min-width:0}.site-nav ul{display:flex;flex-wrap:wrap;gap:var(--tsuki-space-1)var(--tsuki-space-4);list-style:none;padding:0;margin:0}.site-nav a{display:inline-block;padding-block:var(--tsuki-space-2);color:var(--tsuki-fg-muted)}.site-nav a:hover{color:var(--tsuki-fg)}.site-nav a[aria-current=page]{color:var(--tsuki-fg);font-weight:550}.site-nav a::after{content:attr(data-text);display:block;height:0;overflow:hidden;visibility:hidden;font-weight:550}.lang-switcher{display:flex;gap:var(--tsuki-space-2);list-style:none;padding:0;margin:0;font-size:var(--tsuki-fs-sm)}.lang-switcher a{color:var(--tsuki-fg-muted);padding:var(--tsuki-space-1)var(--tsuki-space-2)}.lang-switcher a:hover{color:var(--tsuki-fg)}.lang-switcher a[aria-current=page]{color:var(--tsuki-fg);font-weight:550;text-decoration:none}.site-header-actions{display:flex;align-items:center;gap:var(--tsuki-space-2);margin-inline-start:var(--tsuki-space-3)}.search-button{display:inline-grid;place-items:center;min-width:2.5rem;min-height:2.5rem;border:1px solid var(--tsuki-border);border-radius:999px;color:var(--tsuki-fg-muted);transition:var(--tsuki-transition)}.search-button:hover{color:var(--tsuki-fg);border-color:var(--tsuki-fg-muted);text-decoration:none}.search-button svg{width:1rem;height:1rem}.theme-toggle{background:0 0;border:1px solid var(--tsuki-border);border-radius:999px;min-width:2.5rem;min-height:2.5rem;display:inline-grid;place-items:center;color:var(--tsuki-fg-muted);transition:var(--tsuki-transition)}.theme-toggle:hover{color:var(--tsuki-fg);border-color:var(--tsuki-fg-muted)}.theme-toggle svg{width:1rem;height:1rem}.theme-toggle[aria-pressed=false] .theme-icon-sun,.theme-toggle[aria-pressed=true] .theme-icon-moon{display:none}main{min-width:0;overflow-wrap:break-word;max-width:var(--tsuki-content-width);margin-inline:auto;width:100%;padding-block:var(--tsuki-space-12)var(--tsuki-space-16)}body.home main,body.list main{max-width:var(--tsuki-wide-width)}main>*{min-width:0}@media(max-width:40rem){.site-nav{order:1;flex-basis:100%;margin-inline-start:0}.site-header-actions{margin-inline-start:auto}.site-header{padding-block:var(--tsuki-space-4);row-gap:var(--tsuki-space-2)}.site-nav ul{gap:0 var(--tsuki-space-3)}.site-nav a{padding-block:var(--tsuki-space-1);font-size:var(--tsuki-fs-sm)}}.site-footer{max-width:var(--tsuki-wide-width);margin-inline:auto;width:100%;padding-block:var(--tsuki-space-8);border-top:1px solid var(--tsuki-border);color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-sm);display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:var(--tsuki-space-3)}.site-footer p{margin:0}.site-footer a{display:inline-block;padding-block:var(--tsuki-space-1)}@media(max-width:40rem){.site-footer{flex-direction:column;gap:var(--tsuki-space-2)}}.list-header{margin-block-end:var(--tsuki-space-8);border-block-end:1px solid var(--tsuki-border);padding-block-end:var(--tsuki-space-6)}.list-title{font-size:var(--tsuki-fs-2xl);margin:0}.list-description{margin:var(--tsuki-space-2)0 0;color:var(--tsuki-fg-muted)}.pagination,.pagination-pages{flex-wrap:wrap;justify-content:center}.pagination-ellipsis{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;min-height:2.75rem;color:var(--tsuki-fg-muted)}@media(max-width:40rem){nav.pagination{justify-content:space-between}.pagination-pages{order:1;flex-basis:100%}}.post-category{display:inline-block;margin-block-end:var(--tsuki-space-3);padding:var(--tsuki-space-1)var(--tsuki-space-3);border:1px solid var(--tsuki-border);border-radius:999px;color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-xs);font-weight:550;letter-spacing:.03em;text-transform:uppercase}.post-category:hover{color:var(--tsuki-accent);border-color:var(--tsuki-accent);text-decoration:none}.post-footer-meta{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:var(--tsuki-space-2)var(--tsuki-space-4);margin-block-start:var(--tsuki-space-4);color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-sm)}.post-footer-meta p{margin:0}.post-edit a{display:inline-block;padding-block:var(--tsuki-space-1)}@media print{:root,:root[data-theme],:root:not([data-theme=light]){color-scheme:light;--tsuki-bg:#fff;--tsuki-fg:#000;--tsuki-fg-muted:#333;--tsuki-fg-subtle:#444;--tsuki-border:#ccc;--tsuki-accent:#000;--tsuki-accent-hover:#000;--tsuki-code-bg:#f4f4f4;--tsuki-shadow:none}body{display:block}.skip-link,.site-header,.site-footer,.breadcrumbs,.toc,.prev-next,.related-posts,.comments,.pagination,.post-edit,.code-toolbar,.heading-anchor{display:none!important}main{max-width:none;padding:0}.post-content a[href^=http]::after{content:" (" attr(href)")";font-size:.85em;overflow-wrap:anywhere}pre{white-space:pre-wrap;overflow-wrap:anywhere}:is(h2,h3,h4){break-after:avoid}img,figure,tr{break-inside:avoid}}:focus-visible{outline:2px solid var(--tsuki-accent);outline-offset:2px}.skip-link{position:absolute;inset-inline-start:var(--tsuki-space-3);inset-block-start:-3rem;z-index:100;padding:var(--tsuki-space-2)var(--tsuki-space-4);background:var(--tsuki-bg);color:var(--tsuki-fg);border:1px solid var(--tsuki-border);border-radius:var(--tsuki-radius);transition:var(--tsuki-transition)}.skip-link:focus{inset-block-start:var(--tsuki-space-3);text-decoration:none}.post-card{padding-block:var(--tsuki-space-6);border-block-end:1px solid var(--tsuki-border)}.post-card:last-child{border-block-end:none}.post-card-title{font-size:var(--tsuki-fs-xl);margin:0 0 var(--tsuki-space-2);line-height:var(--tsuki-lh-tight)}.post-card-title a{color:var(--tsuki-fg)}.post-card-title a:hover{color:var(--tsuki-accent);text-decoration:none}.post-card-date{display:block;color:var(--tsuki-fg-subtle);font-size:var(--tsuki-fs-sm);margin-block-end:var(--tsuki-space-2)}.post-card-summary{color:var(--tsuki-fg-muted);margin:0}.post-list{list-style:none;padding:0;margin:0}.post-list li{display:block}.post-header{margin-block-end:var(--tsuki-space-8);border-block-end:1px solid var(--tsuki-border);padding-block-end:var(--tsuki-space-6)}.post-title{font-size:var(--tsuki-fs-3xl);margin:0 0 var(--tsuki-space-3);line-height:var(--tsuki-lh-tight)}.post-description{color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-lg);margin:var(--tsuki-space-3)0 0}.post-meta{display:flex;flex-wrap:wrap;gap:var(--tsuki-space-3);color:var(--tsuki-fg-subtle);font-size:var(--tsuki-fs-sm);align-items:baseline}.post-meta .post-date,.post-meta .reading-time{color:var(--tsuki-fg-subtle)}.post-meta .post-tags a{color:var(--tsuki-fg-muted)}.post-content{font-size:var(--tsuki-fs-lg)}.post-content :is(h2,h3,h4){scroll-margin-block-start:6rem}.post-footer{margin-block-start:var(--tsuki-space-12);padding-block-start:var(--tsuki-space-6);border-block-start:1px solid var(--tsuki-border)}.post-tag-list{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:var(--tsuki-space-2)}.post-tag-list a{display:inline-block;padding:var(--tsuki-space-1)var(--tsuki-space-3);background:var(--tsuki-code-bg);border-radius:var(--tsuki-radius);color:var(--tsuki-fg-muted);font-size:var(--tsuki-fs-sm)}.post-tag-list a:hover{color:var(--tsuki-fg);text-decoration:none}.terms-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(10rem,1fr));gap:var(--tsuki-space-3)}.term-item{display:flex}.term-link{flex:1;display:flex;justify-content:space-between;gap:var(--tsuki-space-2);align-items:baseline;padding:var(--tsuki-space-3)var(--tsuki-space-4);border:1px solid var(--tsuki-border);border-radius:var(--tsuki-radius);color:var(--tsuki-fg);transition:var(--tsuki-transition)}.term-link:hover{border-color:var(--tsuki-accent);text-decoration:none;color:var(--tsuki-accent)}.term-name{font-weight:550}.term-count{color:var(--tsuki-fg-subtle);font-size:var(--tsuki-fs-sm);font-variant-numeric:tabular-nums}.term-prefix{color:var(--tsuki-fg-subtle);margin-inline-end:.125em}.pagination{display:flex;justify-content:center;align-items:center;gap:var(--tsuki-space-3);margin-block-start:var(--tsuki-space-12);font-size:var(--tsuki-fs-sm)}.pagination-pages{display:flex;gap:var(--tsuki-space-2);list-style:none;padding:0;margin:0}.pagination a,.pagination .pagination-current{display:inline-flex;align-items:center;justify-content:center;min-width:2.75rem;min-height:2.75rem;padding-inline:var(--tsuki-space-3);border-radius:var(--tsuki-radius)}.pagination .pagination-current{background:var(--tsuki-fg);color:var(--tsuki-bg);font-weight:600}.pagination .disabled{color:var(--tsuki-fg-muted);cursor:not-allowed}.code-block{position:relative;contain:inline-size}.code-toolbar{position:absolute;inset-block-start:var(--tsuki-space-2);inset-inline-end:var(--tsuki-space-2);display:flex;align-items:center;gap:var(--tsuki-space-2);font-size:var(--tsuki-fs-xs);line-height:1.4}.code-lang{font-family:var(--tsuki-font-mono);color:var(--tsuki-fg-muted);background:var(--tsuki-code-bg);padding:.125rem .375rem;border-radius:var(--tsuki-radius);text-transform:lowercase;user-select:none}.code-copy{background:var(--tsuki-bg);border:1px solid var(--tsuki-border);border-radius:var(--tsuki-radius);min-height:1.5rem;padding:.125rem .5rem;font-size:inherit;color:var(--tsuki-fg-muted);opacity:0;transition:var(--tsuki-transition)}:is(.highlight,.code-block):hover .code-copy,.code-copy:focus-visible,.code-copy[data-state=copied]{opacity:1}.code-copy:hover{color:var(--tsuki-fg)}@media(hover:none){.code-copy{opacity:1}}@media(hover:none),(max-width:40rem){.has-code-toolbar pre{padding-block-start:calc(var(--tsuki-space-4) + 1.75rem)}}.related-posts{margin-block-start:var(--tsuki-space-12);padding-block-start:var(--tsuki-space-6);border-block-start:1px solid var(--tsuki-border)}.related-heading{font-size:var(--tsuki-fs-xl);margin:0 0 var(--tsuki-space-4)}.related-list{list-style:none;padding:0;margin:0;display:grid;gap:0}.related-list .post-card{padding-block:var(--tsuki-space-4)}.heading-anchor{position:absolute;margin-inline-start:var(--tsuki-space-2);color:var(--tsuki-fg-subtle);opacity:0;transition:var(--tsuki-transition);text-decoration:none;font-weight:400}:is(h2,h3,h4):hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.heading-anchor::before{content:"#"}@media(hover:none){.heading-anchor{display:none}}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@view-transition{navigation: auto; }@media(prefers-reduced-motion:no-preference){::view-transition-old(root),::view-transition-new(root){animation-duration:180ms;animation-timing-function:cubic-bezier(.2,0,.2,1)}::view-transition-old(root){animation-name:tsuki-fade-out}::view-transition-new(root){animation-name:tsuki-fade-in}}@media(prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root){animation:none}}@keyframes tsuki-fade-out{to{opacity:0}}@keyframes tsuki-fade-in{from{opacity:0}}