@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,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)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--mono:"JetBrains Mono Variable", ui-monospace, "Hiragino Sans", "Noto Sans JP", monospace;--sans:"Helvetica Neue", "Hiragino Sans", "Hiragino Kaku Gothic ProN", Arial, "Noto Sans JP", Meiryo, sans-serif;--width:680px;--bg:#fff;--bg-soft:#f2f2f2;--fg:#1d1f21;--dim:#666;--line:#e4e4e4;--user:#4a6d8f;--path:#4a6d8f;--accent:#4a6d8f;--code:#3e8a8f;--mark:#f0c67473;--error:#c82829;--tag:#666;--warn:#af8700;--code-bg:#1d1f21;--code-fg:#eaeaea;--code-dim:#969896;--code-line:#1d1f21;color-scheme:light}:root[data-theme=dark]{--bg:#282c34;--bg-soft:#2f343e;--fg:#eaeaea;--dim:#969896;--line:#3a3f4b;--user:#81a2be;--path:#81a2be;--accent:#81a2be;--code:#8abeb7;--mark:#f0c6744d;--error:#c66;--tag:#969896;--warn:#f0c674;--code-line:#3a3f4b;color-scheme:dark}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--fg);font-family:var(--mono);overflow-wrap:anywhere;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;flex-direction:column;font-size:16px;line-height:1.75;display:flex}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}ul{list-style:none}button,input{font:inherit;color:inherit;background:0 0;border:none}.container{width:100%;max-width:calc(var(--width) + 48px);margin:0 auto;padding:0 24px}main.container{flex:1;padding-top:40px;padding-bottom:40px}.dim{color:var(--dim)}.comment{color:var(--dim);font-style:italic}.topbar{z-index:10;background:color-mix(in srgb, var(--bg) 88%, transparent);backdrop-filter:blur(8px);border-bottom:1px dashed var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 24px;padding:12px max(24px,50% - 410px);font-size:14px;display:flex;position:sticky;top:0}.brand{font-weight:700}.topbar nav ul{flex-wrap:wrap;gap:2px 16px;display:flex}.topbar nav a,#theme-toggle{color:var(--dim);cursor:pointer}.topbar nav a:hover,.topbar nav a[aria-current=page],#theme-toggle:hover{color:var(--fg)}.nav-cmd{color:var(--accent)}.only-dark,:root[data-theme=dark] .only-light{display:none}:root[data-theme=dark] .only-dark{display:inline}.prompt{font-weight:600}.prompt-user{color:var(--user)}.prompt-path{color:var(--path)}.prompt-sep{color:var(--dim);margin-right:.6ch}.prompt-path+.prompt-sep{margin-left:0}.prompt-user+.prompt-sep{margin-right:0}.cursor{vertical-align:text-bottom;background:var(--accent);width:.6em;height:1.1em;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.cursor{animation:none}}.block{margin-bottom:36px}.output{border-left:2px solid var(--line);margin-top:10px;padding-left:2ch}.output>*+*{margin-top:8px}.more{color:var(--accent);display:inline-block}.error{color:var(--error)}.hero{letter-spacing:-.02em;font-size:32px;font-weight:800;line-height:1.3}.output>p{font-family:var(--sans)}.socials{flex-wrap:wrap;gap:8px;display:flex}.socials a{border:1px solid var(--line);border-radius:4px;align-items:center;gap:6px;padding:2px 10px;font-size:14px;display:inline-flex}.socials a:hover{border-color:var(--accent);background:var(--bg-soft)}.ls li{grid-template-columns:11ch auto 1fr;align-items:baseline;gap:0 1.5ch;padding:3px 0;display:grid}.ls time{color:var(--dim);font-size:14px}.ls-title{font-family:var(--sans);font-weight:600}.ls li:has(.ls-title:hover){background:var(--bg-soft)}.ls li:not(:has(.cat-tag)){grid-template-columns:11ch 1fr}.cat-tag{color:var(--tag);font-size:13px;font-weight:600}.ls .cat-tag{min-width:12ch}.cat-tag:hover{color:var(--accent)}.cat-tag:before{content:"[";opacity:.5}.cat-tag:after{content:"]";opacity:.5}.draft{color:var(--warn);font-size:13px;font-weight:600}.dir-list{flex-wrap:wrap;gap:4px 28px;display:flex}.dir-list a,.tree .dir{color:var(--path);font-weight:700}.tree p{white-space:pre-wrap;margin:0}.tree p a:not(.dir){font-family:var(--sans)}.tree-summary{margin-top:12px!important}#search-input{border-bottom:2px solid var(--accent);width:min(28ch,50vw);color:var(--fg);outline:none;padding:0 4px;font-weight:600}#search-input::placeholder{color:var(--dim);font-weight:400}.grep-results li{border-bottom:1px solid var(--line);padding:10px 0}.grep-file{color:var(--path);margin-right:1ch;font-weight:600}.grep-title{font-family:var(--sans);font-weight:700;display:block}.grep-snippet{font-family:var(--sans);color:var(--dim);font-size:14px}mark{background:var(--mark);color:var(--fg);border-radius:2px}.frontmatter{flex-direction:column;margin:12px 0 4px;font-size:14px;display:flex}.frontmatter .key{color:var(--path)}.post-title{letter-spacing:.04em;font-size:32px;font-weight:700;line-height:1.5;font-family:var(--sans);margin:8px 0 48px}.post-nav{border-top:1px solid var(--line);justify-content:space-between;gap:16px;margin:48px 0 24px;padding-top:16px;font-size:14px;display:flex}.post-nav .older{text-align:right}.prose{font-family:var(--sans);font-size:18px;line-height:2}.prose>*+*{margin-top:2em}.prose strong{font-weight:700}.prose h1,.prose h2,.prose h3,.prose h4{letter-spacing:.04em;margin-top:54px;scroll-margin-top:80px;line-height:1.5}.prose :is(h1,h2,h3,h4)+*{margin-top:18px}.prose :is(h1,h2,h3,h4):before{font-family:var(--mono);letter-spacing:0}.prose h1{font-size:28px}.prose h2{font-size:24px}.prose h3{font-size:20px}.prose h4{font-size:18px}.prose h1:before{content:"# ";color:var(--accent);opacity:.6}.prose h2:before{content:"## ";color:var(--accent);opacity:.6}.prose h3:before{content:"### ";color:var(--accent);opacity:.6}.prose h4:before{content:"#### ";color:var(--accent);opacity:.6}.prose a{color:var(--path);text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--path) 35%, transparent);text-underline-offset:4px;text-decoration-thickness:1px;transition:text-decoration-color .15s}.prose a:hover{color:var(--path);text-decoration-color:currentColor}.prose ul,.prose ol{padding-left:1.6em}.prose ul{list-style:none}.prose ul>li:before{content:"•";color:var(--accent);font-family:var(--mono);margin-left:-1.2em;position:absolute}.prose ol{list-style:decimal}.prose ol>li::marker{color:var(--accent);font-family:var(--mono)}.prose li+li,.prose li>ul,.prose li>ol{margin-top:.3em}.prose blockquote{background:var(--bg-soft);color:var(--dim);border-radius:6px;padding:24px 32px}.prose img{border:1px solid var(--line);border-radius:6px;max-width:100%;height:auto}.prose hr{border:none;border-top:1px solid var(--line)}.prose table{border-collapse:collapse;font-size:15px;line-height:1.7;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:8px 14px}.prose th{font-family:var(--mono);color:var(--dim);border-bottom-width:2px;font-size:14px}.prose :not(pre)>code{background:var(--bg-soft);color:var(--code);letter-spacing:0;font-family:var(--mono);border-radius:4px;padding:2px 6px;font-size:.86em}.prose pre{color:var(--code-fg);border:1px solid var(--code-line);font-family:var(--mono);letter-spacing:0;border-radius:8px;padding:16px 20px;font-size:14px;line-height:1.7;position:relative;overflow-x:auto;background:var(--code-bg)!important}.copy-code{color:var(--code-dim);background:var(--code-bg);cursor:pointer;opacity:0;border:1px solid #3a3f4b;border-radius:4px;padding:0 8px;font-size:13px;transition:opacity .15s;position:absolute;top:6px;right:6px}.prose pre:hover .copy-code{opacity:1}.prose .mermaid{border:1px solid var(--line);border-radius:8px;justify-content:center;padding:16px;display:flex}.footer{border-top:1px solid var(--line);color:var(--dim);flex-wrap:wrap;gap:4px 20px;padding-top:16px;padding-bottom:32px;font-size:13px;display:flex}@media (width<=640px){body{font-size:15px}.container{padding:0 16px}.topbar{padding:10px 16px}.hero{font-size:26px}.post-title{font-size:24px}.ls li,.ls li:not(:has(.cat-tag)){grid-template-columns:auto 1fr}.ls-title{grid-column:1/-1}.prose{font-size:16px}}
