.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}:root[data-theme=dark] .chroma .err{color:#f85149}:root[data-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root[data-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .hl{background-color:#6e7681}:root[data-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root[data-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root[data-theme=dark] .chroma .line{display:flex}:root[data-theme=dark] .chroma .k{color:#ff7b72}:root[data-theme=dark] .chroma .kc{color:#79c0ff}:root[data-theme=dark] .chroma .kd{color:#ff7b72}:root[data-theme=dark] .chroma .kn{color:#ff7b72}:root[data-theme=dark] .chroma .kp{color:#79c0ff}:root[data-theme=dark] .chroma .kr{color:#ff7b72}:root[data-theme=dark] .chroma .kt{color:#ff7b72}:root[data-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .ni{color:#ffa657}:root[data-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nn{color:#ff7b72}:root[data-theme=dark] .chroma .nx{color:#e6edf3}:root[data-theme=dark] .chroma .py{color:#79c0ff}:root[data-theme=dark] .chroma .nt{color:#7ee787}:root[data-theme=dark] .chroma .nv{color:#79c0ff}:root[data-theme=dark] .chroma .vc{color:#79c0ff}:root[data-theme=dark] .chroma .vg{color:#79c0ff}:root[data-theme=dark] .chroma .vi{color:#79c0ff}:root[data-theme=dark] .chroma .vm{color:#79c0ff}:root[data-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .fm{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .l{color:#a5d6ff}:root[data-theme=dark] .chroma .ld{color:#79c0ff}:root[data-theme=dark] .chroma .s{color:#a5d6ff}:root[data-theme=dark] .chroma .sa{color:#79c0ff}:root[data-theme=dark] .chroma .sb{color:#a5d6ff}:root[data-theme=dark] .chroma .sc{color:#a5d6ff}:root[data-theme=dark] .chroma .dl{color:#79c0ff}:root[data-theme=dark] .chroma .sd{color:#a5d6ff}:root[data-theme=dark] .chroma .s2{color:#a5d6ff}:root[data-theme=dark] .chroma .se{color:#79c0ff}:root[data-theme=dark] .chroma .sh{color:#79c0ff}:root[data-theme=dark] .chroma .si{color:#a5d6ff}:root[data-theme=dark] .chroma .sx{color:#a5d6ff}:root[data-theme=dark] .chroma .sr{color:#79c0ff}:root[data-theme=dark] .chroma .s1{color:#a5d6ff}:root[data-theme=dark] .chroma .ss{color:#a5d6ff}:root[data-theme=dark] .chroma .m{color:#a5d6ff}:root[data-theme=dark] .chroma .mb{color:#a5d6ff}:root[data-theme=dark] .chroma .mf{color:#a5d6ff}:root[data-theme=dark] .chroma .mh{color:#a5d6ff}:root[data-theme=dark] .chroma .mi{color:#a5d6ff}:root[data-theme=dark] .chroma .il{color:#a5d6ff}:root[data-theme=dark] .chroma .mo{color:#a5d6ff}:root[data-theme=dark] .chroma .o{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .or{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .c{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .gd{color:#ffa198;background-color:#490202}:root[data-theme=dark] .chroma .ge{font-style:italic}:root[data-theme=dark] .chroma .gr{color:#ffa198}:root[data-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .gi{color:#56d364;background-color:#0f5323}:root[data-theme=dark] .chroma .go{color:#8b949e}:root[data-theme=dark] .chroma .gp{color:#8b949e}:root[data-theme=dark] .chroma .gs{font-weight:700}:root[data-theme=dark] .chroma .gu{color:#79c0ff}:root[data-theme=dark] .chroma .gt{color:#ff7b72}:root[data-theme=dark] .chroma .gl{text-decoration:underline}:root[data-theme=dark] .chroma .w{color:#6e7681}:root[data-theme=dark] .chroma .bp,:root[data-theme=dark] .chroma .ge,:root[data-theme=dark] .chroma .na,:root[data-theme=dark] .chroma .nb,:root[data-theme=dark] .chroma .p{color:inherit}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .chroma .bp,:root:not([data-theme=light]) .chroma .ge,:root:not([data-theme=light]) .chroma .na,:root:not([data-theme=light]) .chroma .nb,:root:not([data-theme=light]) .chroma .p{color:inherit}:root:not([data-theme=light]) .chroma .err{color:#f85149}:root:not([data-theme=light]) .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root:not([data-theme=light]) .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .hl{background-color:#6e7681}:root:not([data-theme=light]) .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root:not([data-theme=light]) .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root:not([data-theme=light]) .chroma .line{display:flex}:root:not([data-theme=light]) .chroma .k{color:#ff7b72}:root:not([data-theme=light]) .chroma .kc{color:#79c0ff}:root:not([data-theme=light]) .chroma .kd{color:#ff7b72}:root:not([data-theme=light]) .chroma .kn{color:#ff7b72}:root:not([data-theme=light]) .chroma .kp{color:#79c0ff}:root:not([data-theme=light]) .chroma .kr{color:#ff7b72}:root:not([data-theme=light]) .chroma .kt{color:#ff7b72}:root:not([data-theme=light]) .chroma .nc{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .no{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nd{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .ni{color:#ffa657}:root:not([data-theme=light]) .chroma .ne{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .nl{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nn{color:#ff7b72}:root:not([data-theme=light]) .chroma .nx{color:#e6edf3}:root:not([data-theme=light]) .chroma .py{color:#79c0ff}:root:not([data-theme=light]) .chroma .nt{color:#7ee787}:root:not([data-theme=light]) .chroma .nv{color:#79c0ff}:root:not([data-theme=light]) .chroma .vc{color:#79c0ff}:root:not([data-theme=light]) .chroma .vg{color:#79c0ff}:root:not([data-theme=light]) .chroma .vi{color:#79c0ff}:root:not([data-theme=light]) .chroma .vm{color:#79c0ff}:root:not([data-theme=light]) .chroma .nf{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .fm{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .l{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ld{color:#79c0ff}:root:not([data-theme=light]) .chroma .s{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sa{color:#79c0ff}:root:not([data-theme=light]) .chroma .sb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sc{color:#a5d6ff}:root:not([data-theme=light]) .chroma .dl{color:#79c0ff}:root:not([data-theme=light]) .chroma .sd{color:#a5d6ff}:root:not([data-theme=light]) .chroma .s2{color:#a5d6ff}:root:not([data-theme=light]) .chroma .se{color:#79c0ff}:root:not([data-theme=light]) .chroma .sh{color:#79c0ff}:root:not([data-theme=light]) .chroma .si{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sx{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sr{color:#79c0ff}:root:not([data-theme=light]) .chroma .s1{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ss{color:#a5d6ff}:root:not([data-theme=light]) .chroma .m{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mf{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mh{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mi{color:#a5d6ff}:root:not([data-theme=light]) .chroma .il{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mo{color:#a5d6ff}:root:not([data-theme=light]) .chroma .o{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .ow{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .or{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .c{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .ch{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cm{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .c1{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .gd{color:#ffa198;background-color:#490202}:root:not([data-theme=light]) .chroma .ge{font-style:italic}:root:not([data-theme=light]) .chroma .gr{color:#ffa198}:root:not([data-theme=light]) .chroma .gh{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .gi{color:#56d364;background-color:#0f5323}:root:not([data-theme=light]) .chroma .go{color:#8b949e}:root:not([data-theme=light]) .chroma .gp{color:#8b949e}:root:not([data-theme=light]) .chroma .gs{font-weight:700}:root:not([data-theme=light]) .chroma .gu{color:#79c0ff}:root:not([data-theme=light]) .chroma .gt{color:#ff7b72}:root:not([data-theme=light]) .chroma .gl{text-decoration:underline}:root:not([data-theme=light]) .chroma .w{color:#6e7681}}:root{--paper:#ffffff;--il-paper:#ffffff;--il-bg-blog:#f3f3f5;--il-bg-report:#f1ecfe;--il-bg-web:#eef3fb;--il-bg-game:#fdf0f3;--surface:#ffffff;--ink:#1f2328;--ink-soft:#59636e;--ink-faint:#818b98;--line:#e2e2e2;--line-strong:#1f2328;--quote-line:#d1d9e0;--brand:#5b2fd1;--brand-strong:#4822b0;--brand-tint:#ece6fd;--accent:#5b2fd1;--link:#0969da;--link-tint:#ddf4ff;--head-bg:#ffffffee;--code-bg:#f6f8fa;--on-brand:#ffffff;--alert-tip:#1a7f37;--alert-warning:#9a6700;--alert-caution:#cf222e;color-scheme:light;--font-display:"Inter", "Noto Sans JP", system-ui, sans-serif;--font-body:"Noto Sans JP", system-ui, -apple-system, "Segoe UI", sans-serif;--font-ui:"Inter", "Noto Sans JP", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, "Consolas", monospace;--s-1:.25rem;--s-2:.5rem;--s-3:.75rem;--s-4:1rem;--s-5:1.25rem;--s-6:1.5rem;--s-8:2rem;--s-10:2.5rem;--s-12:3rem;--s-16:4rem;--measure:72rem;--measure-text:40rem;--toc-w:14rem;--gutter:clamp(1.25rem, 5vw, 3rem);--radius:4px;--header-h:3.5rem;--ease:cubic-bezier(.22, .61, .36, 1)}:root[data-theme=dark]{--paper:#0d1117;--il-paper:#0d1117;--il-bg-blog:#1c2128;--il-bg-report:#221a3d;--il-bg-web:#152238;--il-bg-game:#3a1a26;--surface:#151b23;--ink:#e6edf3;--ink-soft:#9198a1;--ink-faint:#7d8590;--line:#30363d;--line-strong:#d1d7e0;--quote-line:#3d444d;--brand:#a78bfa;--brand-strong:#c4b5fd;--brand-tint:#2a1f4d;--accent:#a78bfa;--link:#4493f8;--link-tint:#0d2a4d;--head-bg:#0d1117ee;--code-bg:#151b23;--on-brand:#0d1117;--alert-tip:#3fb950;--alert-warning:#d29922;--alert-caution:#f85149;color-scheme:dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#0d1117;--il-paper:#0d1117;--il-bg-blog:#1c2128;--il-bg-report:#221a3d;--il-bg-web:#152238;--il-bg-game:#3a1a26;--surface:#151b23;--ink:#e6edf3;--ink-soft:#9198a1;--ink-faint:#7d8590;--line:#30363d;--line-strong:#d1d7e0;--quote-line:#3d444d;--brand:#a78bfa;--brand-strong:#c4b5fd;--brand-tint:#2a1f4d;--accent:#a78bfa;--link:#4493f8;--link-tint:#0d2a4d;--head-bg:#0d1117ee;--code-bg:#151b23;--on-brand:#0d1117;--alert-tip:#3fb950;--alert-warning:#d29922;--alert-caution:#f85149;color-scheme:dark}}*,::before,::after{box-sizing:border-box}*{margin:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{display:flex;flex-direction:column;min-height:100vh;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:1rem;line-height:1.9;font-feature-settings:"palt";-webkit-font-smoothing:antialiased}main{flex:1 0 auto}a{color:inherit;text-decoration:none}ul,ol{padding:0;list-style:none}img,svg{display:block;max-width:100%;height:auto}h1,h2,h3,h4{font-family:var(--font-display);font-weight:700;line-height:1.45;letter-spacing:.02em}h1,h2,h3{font-weight:900;letter-spacing:-.02em}[id]{scroll-margin-top:calc(var(--header-h) + var(--s-6))}::selection{background:var(--brand-tint)}:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:2px}.wrap{width:100%;max-width:var(--measure);margin-inline:auto;padding-inline:var(--gutter)}.skip{position:absolute;top:var(--s-2);left:var(--s-2);z-index:100;padding:var(--s-2)var(--s-4);background:var(--brand);color:var(--on-brand);font-family:var(--font-ui);transform:translateY(-200%)}.skip:focus{transform:none}.section{padding-block:clamp(2.5rem,6vw,4rem)}.section-head{margin-bottom:clamp(1.25rem,3vw,2rem)}.eyebrow{display:block;margin-bottom:var(--s-2);color:var(--brand);font-family:var(--font-mono);font-size:.75rem;font-weight:500;letter-spacing:.08em;text-transform:lowercase}.eyebrow::before{content:"■ "}.section-title{font-size:clamp(1.25rem,2.6vw,1.625rem)}.section-desc{max-width:var(--measure-text);margin-top:var(--s-3);color:var(--ink-soft);word-break:auto-phrase}.head{position:sticky;top:0;z-index:50;height:var(--header-h);border-bottom:1px solid var(--line-strong);background:var(--head-bg);backdrop-filter:blur(8px)}.head-inner{display:flex;align-items:center;gap:var(--s-6);height:100%}.brand{flex:none;font-family:var(--font-display);font-size:1.0625rem;font-weight:700;letter-spacing:.01em;white-space:nowrap}.brand-sub{color:var(--brand);font-family:var(--font-mono);font-size:.8em;font-weight:500}.brand-sub::before{content:"/";margin-inline:.15em;color:var(--ink-faint)}.nav{margin-left:auto;min-width:0}.nav ul{display:flex;align-items:center;gap:var(--s-5)}.nav a{display:block;padding-block:.375rem;color:var(--ink-soft);font-family:var(--font-ui);font-size:.8125rem;white-space:nowrap;transition:color .14s var(--ease)}.nav a:hover{color:var(--brand)}.theme-toggle{display:grid;flex:none;place-items:center;width:2rem;height:2rem;padding:0;border:1px solid var(--line);border-radius:999px;background:0 0;color:var(--ink-soft);cursor:pointer;transition:border-color .14s var(--ease),color .14s var(--ease)}.theme-toggle:hover{border-color:var(--brand);color:var(--brand)}.theme-toggle svg{width:1rem;height:1rem}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .icon-sun{display:block}:root:not([data-theme=light]) .theme-toggle .icon-moon{display:none}}@media(width <= 30rem){.head-inner{gap:var(--s-4)}.nav ul{gap:var(--s-3)}}@media(width <= 26rem){.nav-main-site{display:none}}.foot{padding-block:var(--s-10)var(--s-8);border-top:3px solid var(--line-strong);color:var(--ink-soft);font-family:var(--font-ui);font-size:.8125rem}.foot-cols{display:grid;gap:var(--s-6)}@media(width >= 48rem){.foot-cols{grid-template-columns:minmax(0,1fr)auto;gap:var(--s-12)}}.foot-brand{color:var(--ink);font-family:var(--font-display);font-size:1.5rem;font-weight:900;letter-spacing:-.03em}.foot-desc{max-width:32rem;margin-top:var(--s-2);line-height:1.9;word-break:auto-phrase}.foot-nav ul{display:flex;flex-wrap:wrap;gap:var(--s-2)var(--s-5)}.foot-nav a:hover,.foot-bottom a:hover{color:var(--brand)}.foot-bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-3);margin-top:var(--s-8);color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem}.foot-bottom small{font-size:inherit}.hero{padding-block:clamp(3rem,9vw,6rem)clamp(1rem,3vw,2rem)}.masthead{font-size:clamp(3rem,13vw,9rem);line-height:.9;letter-spacing:-.05em}.masthead .brand-sub{font-size:.55em}.hero-desc{max-width:var(--measure-text);margin-top:var(--s-4);color:var(--ink-soft);word-break:auto-phrase}.posts{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:var(--s-8)var(--s-6);padding-top:var(--s-6);border-top:3px solid var(--line-strong)}.post{position:relative;display:flex;flex-direction:column;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:8px;transition:border-color .2s var(--ease),box-shadow .2s var(--ease),transform .2s var(--ease)}.post:hover{border-color:var(--brand);box-shadow:0 8px 24px rgb(0 0 0/8%);transform:translateY(-2px)}.post-thumb{order:-1;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-bottom:1px solid var(--line)}.post-thumb--il{display:block}.post-thumb--il svg{display:block;width:100%;height:100%}.post-thumb--il [fill="#1f2328"]{fill:var(--ink)}.post-thumb--il [stroke="#1f2328"]{stroke:var(--ink)}.post-thumb--il [fill="#5b2fd1"]{fill:var(--brand)}.post-thumb--il [stroke="#5b2fd1"]{stroke:var(--brand)}.post-thumb--il [fill="#fff"]{fill:var(--il-paper)}.post-thumb--il [fill="#f3f3f5"]{fill:var(--il-bg-blog)}.post-thumb--il [fill="#f1ecfe"]{fill:var(--il-bg-report)}.post-thumb--il [fill="#eef3fb"]{fill:var(--il-bg-web)}.post-thumb--il [fill="#fdf0f3"]{fill:var(--il-bg-game)}.post-date{padding:var(--s-4)var(--s-5)0;color:var(--ink-faint);font-family:var(--font-mono);font-size:.8125rem;font-variant-numeric:tabular-nums}.post-body{flex:1;display:flex;flex-direction:column;gap:var(--s-2);padding:var(--s-2)var(--s-5)var(--s-5)}.post-body .tags{position:relative;z-index:1;margin-top:auto;padding-top:var(--s-3)}.post-title{font-size:1.125rem;word-break:auto-phrase}.post-title a{transition:color .14s var(--ease)}.post-title a::after{content:"";position:absolute;inset:0}.post:hover .post-title a{color:var(--brand)}.post-desc{color:var(--ink-soft);font-size:.9375rem;word-break:auto-phrase}.empty{color:var(--ink-soft)}.tags{display:flex;flex-wrap:wrap;gap:var(--s-1)var(--s-3);margin-top:var(--s-2)}.tag{color:var(--ink-soft);font-family:var(--font-mono);font-size:.75rem;transition:color .14s var(--ease)}.tag:hover{color:var(--brand)}.pager{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);margin-top:var(--s-8);font-family:var(--font-mono);font-size:.8125rem}.pager-link{color:var(--brand)}.pager-link:hover{text-decoration:underline;text-underline-offset:4px}.pager-count{color:var(--ink-faint)}.wrap--text{max-width:calc(var(--measure-text) + var(--gutter) * 2)}.article-head{padding-block:clamp(3rem,8vw,5rem)clamp(1.5rem,4vw,2.25rem)}.article-title{font-size:clamp(1.625rem,4.2vw,2.25rem);line-height:1.5;word-break:auto-phrase}.article-meta{display:flex;flex-wrap:wrap;gap:var(--s-1)var(--s-4);margin-top:var(--s-4);color:var(--ink-faint);font-family:var(--font-mono);font-size:.8125rem}.article-head .tags{margin-top:var(--s-1)}.article-cover{display:block;width:100%;height:auto;max-height:28rem;margin-top:var(--s-6);object-fit:cover;border:1px solid var(--line)}.article-body{padding-top:clamp(1.5rem,4vw,2.5rem);border-top:3px solid var(--line-strong)}@media(width >= 72rem){.article-layout{display:grid;grid-template-columns:minmax(0,1fr)var(--toc-w);gap:var(--s-12);max-width:calc(var(--measure-text) + var(--toc-w) + var(--s-12) + var(--gutter) * 2)}.article-layout .toc{grid-column:2;grid-row:1;align-self:start;position:sticky;top:calc(var(--header-h) + var(--s-8));max-height:calc(100vh - var(--header-h) - var(--s-16));overflow-y:auto}.article-layout .toc summary{pointer-events:none}.article-layout .toc summary::marker{content:""}}.toc{margin-bottom:var(--s-8);font-family:var(--font-ui);font-size:.8125rem;line-height:1.7}.toc summary{color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.08em;cursor:pointer}.toc>nav{margin-top:var(--s-3);padding-left:var(--s-3);border-left:1px solid var(--line)}.toc li+li{margin-top:var(--s-2)}.toc ul ul{margin-top:var(--s-2);padding-left:var(--s-4)}.toc a{color:var(--ink-soft)}.toc a:hover{color:var(--brand)}.prose{--brand:var(--link);--brand-tint:var(--link-tint);font-size:1.0625rem;line-height:2;overflow-wrap:anywhere}.prose>*+*{margin-top:1.5em}.prose h2{margin-top:2.8em;font-size:1.4375rem}.prose h2::before{content:"";display:block;width:100%;height:3px;margin-bottom:.75em;background:var(--accent)}.prose h3{margin-top:2.2em;font-size:1.1875rem}.prose h4{margin-top:2em;font-size:1.0625rem}.prose .anchor{margin-left:.4em;color:var(--ink-faint);font-family:var(--font-mono);font-weight:400;opacity:0;transition:opacity .14s var(--ease)}.prose :is(h2,h3,h4):hover .anchor,.prose .anchor:focus-visible{opacity:1}.prose a:not(.anchor){color:var(--brand);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--brand) 40%,transparent);text-decoration-thickness:1px;text-underline-offset:4px}.prose a:not(.anchor):hover{text-decoration-color:initial}.prose ul{padding-left:1.4em;list-style:disc}.prose ol{padding-left:1.6em;list-style:decimal}.prose li::marker{color:var(--ink-faint)}.prose li+li{margin-top:.35em}.prose li>:is(ul,ol){margin-top:.35em}.prose strong{font-weight:700}.prose blockquote{padding:.1em 0 .1em 1.2em;border-left:3px solid var(--quote-line);color:var(--ink-soft)}.prose hr{width:3rem;margin:3em auto;border:0;border-top:1px solid var(--line-strong)}.prose img{margin-inline:auto;border-radius:var(--radius)}.prose :not(pre)>code{padding:.1em .35em;border-radius:3px;background:var(--code-bg);font-family:var(--font-mono);font-size:.84em}.prose pre{padding:var(--s-4)var(--s-5);border:1px solid var(--line);border-radius:var(--radius);font-size:.8125rem;line-height:1.75;tab-size:4;overflow-x:auto}.prose pre code{font-family:var(--font-mono)}.prose .chroma,.prose pre{background:var(--code-bg);color:var(--ink)}.prose .highlight{margin-top:1.5em}.prose table{display:block;max-width:100%;border-collapse:collapse;font-family:var(--font-ui);font-size:.875rem;overflow-x:auto}.prose :is(th,td){padding:.5em .9em;border-bottom:1px solid var(--line);text-align:left}.prose th{font-weight:700}.prose h5{margin-top:1.8em;font-size:1rem;color:var(--ink-soft)}.prose del{color:var(--ink-faint)}.prose .code-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--s-3);padding:.3rem .5rem .3rem var(--s-5);border:1px solid var(--line);border-bottom:0;border-radius:var(--radius)var(--radius)0 0;background:var(--code-bg);color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem}.prose .code-bar+pre{margin-top:0;border-top-style:dashed;border-radius:0 0 var(--radius)var(--radius)}.prose .copy-code{flex:none;padding:.2rem .6rem;border:1px solid transparent;border-radius:var(--radius);background:0 0;color:var(--ink-soft);font-family:var(--font-ui);font-size:.75rem;line-height:1.4;cursor:pointer;transition:color .14s var(--ease),border-color .14s var(--ease),background-color .14s var(--ease)}.prose .copy-code:hover{border-color:var(--line);background:var(--surface);color:var(--ink)}.prose .copy-code[data-done]{color:var(--brand)}.prose li:has(>input[type=checkbox]){list-style:none;margin-left:-1.4em}.prose input[type=checkbox]{margin-right:.5em;accent-color:var(--brand);vertical-align:-.1em}.prose dt{font-weight:700}.prose dd{margin-top:.2em;padding-left:1.2em;color:var(--ink-soft)}.prose dd+dt{margin-top:.9em}.prose sup a:not(.anchor){padding-inline:.15em;font-family:var(--font-mono);font-size:.75em;text-decoration:none}.prose .footnotes{margin-top:3em;color:var(--ink-soft);font-size:.875rem}.prose .footnotes hr{width:100%;margin:0 0 1.5em}.prose .footnotes ol{padding-left:1.4em}.prose .footnote-backref{margin-left:.3em;text-decoration:none}.prose .alert{--alert:var(--brand);padding:.9em 1.1em;border-left:3px solid var(--alert);border-radius:0 var(--radius)var(--radius)0;background:color-mix(in srgb,var(--alert) 7%,var(--paper));font-size:.9375rem}.prose .alert>*+*{margin-top:.6em}.prose .alert-title{color:var(--alert);font-family:var(--font-ui);font-size:.8125rem;font-weight:700}.prose .alert--tip{--alert:var(--alert-tip)}.prose .alert--important{--alert:var(--accent)}.prose .alert--warning{--alert:var(--alert-warning)}.prose .alert--caution{--alert:var(--alert-caution)}.article-foot{margin-top:clamp(3rem,8vw,5rem);padding-block:var(--s-8)clamp(3rem,7vw,4.5rem);border-top:1px solid var(--line)}.article-nav{display:grid;gap:var(--s-5)}@media(width >= 40rem){.article-nav{grid-template-columns:1fr 1fr;gap:var(--s-8)}.article-nav-link--older{grid-column:2;text-align:right}}.article-nav-link{display:block}.article-nav-label{display:block;color:var(--ink-faint);font-family:var(--font-mono);font-size:.75rem}.article-nav-title{display:block;margin-top:var(--s-1);font-weight:700;word-break:auto-phrase;transition:color .14s var(--ease)}.article-nav-link:hover .article-nav-title{color:var(--brand)}.back{display:inline-block;margin-top:var(--s-10);color:var(--brand);font-family:var(--font-mono);font-size:.8125rem}.back::before{content:"← "}.back:hover{text-decoration:underline;text-underline-offset:4px}.page-head{padding-block:clamp(3rem,8vw,5rem)0}.page-head .section-title{font-size:clamp(1.625rem,4vw,2.25rem)}.page-head+.section{padding-top:clamp(1.5rem,4vw,2.5rem)}.tag-cloud{display:flex;flex-wrap:wrap;gap:var(--s-3)var(--s-6)}.tag-cloud-item{display:inline-flex;align-items:baseline;gap:var(--s-2);font-family:var(--font-mono);font-size:.9375rem;transition:color .14s var(--ease)}.tag-cloud-item:hover{color:var(--brand)}.tag-cloud-count{color:var(--ink-faint);font-size:.75rem}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,::before,::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}