:root{--color-bg:#fff;--color-surface:#f6f7f9;--color-line:#e7e9ee;--color-ink:#151b26;--color-body:#3b4250;--color-muted:#6a7180;--color-accent:#1f3864;--color-link:#2350c8;--code-bg:#121b2c;--code-fg:#e4e9f2;--code-comment:#8391ab;--code-string:#f2cf8a;--code-keyword:#93b5ff;--code-attr:#9fdccb;--code-command:#c8bbff;--font-sans:'IBM Plex Sans JP' , 'Hiragino Sans' , 'Yu Gothic' , Meiryo , sans-serif;--font-mono:'IBM Plex Mono' , ui-monospace , Menlo , Consolas , monospace;--title-indent:46px;color-scheme:light}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--color-bg);color:var(--color-body);font:400 16px/1.85 var(--font-sans)}a{color:var(--color-link);text-underline-offset:3px;text-decoration-thickness:1px}a:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}h1,h2,h3{color:var(--color-ink);text-wrap:balance;word-break:auto-phrase}.vh,.screen-reader-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.head{border-bottom:1px solid var(--color-line);background:#FAFAF7 url("assets/img/hero-flow-lines.svg") right center / cover no-repeat}.head__in{max-width:1240px;margin:0 auto;padding:16px 32px 20px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;align-items:center;gap:0 24px}.brand{grid-column:1;grid-row:1;justify-self:start;display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--color-ink)}.brand i{width:36px;height:26px;background:url("assets/img/logo.png") center/contain no-repeat;flex:none}.brand b{font-family:'Hiragino Mincho Pro','ヒラギノ明朝 Pro','Hiragino Mincho ProN','ヒラギノ明朝 ProN','YuMincho','Yu Mincho','游明朝','Noto Serif JP',serif;font-size:16.5px;font-weight:700;color:#1f3864;letter-spacing:.02em;line-height:1.35;white-space:nowrap}.sitetitle{grid-column:1 / -1;grid-row:2;justify-self:start;margin:2px 0 0 var(--title-indent);font-size:32px;font-weight:700;line-height:1.2;letter-spacing:.02em;color:#1f3864;white-space:nowrap;text-align:left}.sitetitle a{color:inherit;text-decoration:none}.home .head{background-position:right 85%}.home .head__in{min-height:200px;grid-template-rows:auto 1fr}.home .sitetitle{align-self:start;margin-top:8px}.shell{display:grid;grid-template-columns:minmax(0,1fr) 264px;gap:56px;max-width:1240px;margin:0 auto;padding:0 32px}.shell--article{grid-template-columns:minmax(0,1fr)}.main{min-width:0;padding:48px 0 88px}.intro{max-width:720px;margin-bottom:24px}.intro h1{font-size:26px;line-height:1.5;font-weight:700;margin:0 0 8px}.intro p{margin:0;color:var(--color-muted);font-size:15px}.crumbs{font-size:13px;color:var(--color-muted);margin:0 0 8px;line-height:1.6}.crumbs a{color:var(--color-muted);text-decoration:none}.crumbs a:hover{color:var(--color-ink)}.count{font:400 13px/1 var(--font-mono);color:var(--color-muted);margin:12px 0 0!important}.sec{font-size:18px;font-weight:700;color:var(--color-ink);line-height:1.5;margin:0;padding-bottom:12px}.rows{max-width:760px}.row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:0 24px;padding:24px 0;border-top:1px solid var(--color-line)}.row time{font:400 13px/1.9 var(--font-mono);color:var(--color-muted);font-variant-numeric:tabular-nums}.row .crumbs{margin:0 0 2px}.row h2,.row h3{font-size:18px;line-height:1.55;font-weight:600;margin:0 0 4px}.row h2 a,.row h3 a{color:var(--color-ink);text-decoration:none}.row h2 a:hover,.row h3 a:hover{color:var(--color-link)}.row p{margin:0;font-size:14.5px;line-height:1.75;color:var(--color-body)}.row .tags{margin-top:8px;font-size:12.5px;color:var(--color-muted)}.tags{display:flex;flex-wrap:wrap;gap:4px 14px;list-style:none;margin:0;padding:0}.tags a{color:inherit;text-decoration:none}.tags a:hover{color:var(--color-ink)}.empty{max-width:760px;border-top:1px solid var(--color-line);padding:24px 0;color:var(--color-muted)}.empty p{margin:0}.pagination{max-width:760px;border-top:1px solid var(--color-line);padding-top:24px}.pagination .nav-links{display:flex;flex-wrap:wrap;gap:8px}.pagination .page-numbers{display:inline-block;min-width:36px;padding:6px 10px;border:1px solid var(--color-line);border-radius:6px;text-align:center;font-size:14px;color:var(--color-body);text-decoration:none}.pagination .page-numbers.current{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pagination .page-numbers.dots{border:0}.art{display:grid;grid-template-columns:minmax(0,700px) 200px;gap:56px;align-items:start}.art__head{margin-bottom:8px}.art__head h1{font-size:30px;line-height:1.5;font-weight:700;margin:0 0 12px}.meta{display:flex;flex-wrap:wrap;gap:4px 18px;font-size:13px;color:var(--color-muted);margin:0}.meta .tags{gap:4px 12px}.toc-side{position:sticky;top:24px;font-size:13px;line-height:1.6;padding-top:6px}.toc-side h2,.rel h2{font-size:12px;font-weight:600;color:var(--color-muted);letter-spacing:.06em;margin:0 0 10px}.toc-side ol,.toc-in ol{list-style:none;margin:0;padding:0}.toc-side li{padding:4px 0 4px 12px;border-left:1px solid var(--color-line)}.toc-side li:has(a[aria-current]){border-left:2px solid var(--color-accent);padding-left:11px}.toc-side a,.toc-in a{color:var(--color-muted);text-decoration:none}.toc-side a:hover,.toc-in a:hover{color:var(--color-ink)}.toc-side a[aria-current]{color:var(--color-ink);font-weight:600}.toc-in{display:none;border-top:1px solid var(--color-line);border-bottom:1px solid var(--color-line);margin:20px 0 0}.toc-in summary{cursor:pointer;padding:12px 0;font-size:14px;font-weight:600;color:var(--color-ink)}.toc-in ol{padding:0 0 12px}.toc-in li{padding:4px 0;font-size:14px}.toc-side[hidden],.toc-in[hidden]{display:none!important}@media (min-width:1121px){.shell--article .art{max-width:956px;margin:0 auto}}.post{margin-top:32px}.post h2{font-size:21px;line-height:1.5;font-weight:700;margin:56px 0 14px;scroll-margin-top:24px}.post h3{font-size:17px;line-height:1.55;font-weight:600;margin:36px 0 8px}.post h4,.post h5,.post h6{font-size:16px;line-height:1.6;font-weight:600;color:var(--color-ink);margin:28px 0 8px}.post p{margin:0 0 20px}.post ul,.post ol{margin:0 0 20px;padding-left:1.4em}.post li{margin-bottom:6px}.post li:has(>input[type=checkbox]){list-style:none;margin-left:-1.4em}.post li>input[type="checkbox"]{margin:0 .5em 0 0;vertical-align:-1px}.post hr{border:0;border-top:1px solid var(--color-line);margin:40px 0}.post img{display:block;max-width:100%;height:auto;border-radius:6px;border:1px solid var(--color-line)}.post p:has(>img)>em{display:block;font-style:normal;font-size:13px;color:var(--color-muted);margin-top:8px}.post code{font:400 .86em/1.5 var(--font-mono);background:var(--color-surface);color:var(--color-ink);padding:.12em .38em;border-radius:4px}.post blockquote{margin:0 0 24px;padding:2px 0 2px 16px;border-left:2px solid var(--color-accent);color:var(--color-body);font-size:15px}.post blockquote p{margin:0}.post blockquote p+p{margin-top:8px}.post table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;margin:0 0 24px;font-size:14px;line-height:1.65}.post th,.post td{border-bottom:1px solid var(--color-line);padding:8px 20px 8px 0;text-align:left;vertical-align:top}.post th{color:var(--color-ink);font-weight:600;white-space:nowrap;border-bottom-color:var(--color-ink)}.post th[align="center"],.post td[align="center"]{text-align:center}.post th[align="right"],.post td[align="right"]{text-align:right}.codebox{position:relative;margin:0 0 24px;background:var(--code-bg);border-radius:8px;overflow:hidden}.codebox__head{display:flex;justify-content:space-between;align-items:center;padding:8px 10px 0 18px}.codebox__lang{font:400 12px/1.6 var(--font-mono);color:#8e9bb3}.codebox__copy{font:400 12px/1.6 var(--font-sans);color:#c6d0e2;background:transparent;border:1px solid #2c3a55;border-radius:4px;padding:1px 10px;cursor:pointer}.codebox__copy:hover{border-color:#6f81a6;color:#fff}.codebox__copy:focus-visible{outline:2px solid #fff}.post pre{margin:0 0 24px;padding:8px 18px 16px;overflow-x:auto;tab-size:2;background:var(--code-bg);border-radius:8px}.codebox pre{margin:0;border-radius:0;background:none}.post pre code{display:block;width:max-content;min-width:100%;font:400 13.5px/1.75 var(--font-mono);background:none;color:var(--code-fg);padding:0;border-radius:0;white-space:pre}.post pre code.hljs{background:none;color:var(--code-fg);padding:0}.hljs-comment,.hljs-quote{color:var(--code-comment)}.hljs-string,.hljs-regexp,.hljs-template-variable{color:var(--code-string)}.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:var(--code-keyword)}.hljs-attr,.hljs-attribute,.hljs-property,.hljs-variable,.hljs-params{color:var(--code-attr)}.hljs-built_in,.hljs-title,.hljs-section,.hljs-meta{color:var(--code-command)}.hljs-number,.hljs-symbol{color:#f1b29b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.cta{margin:56px 0 0;padding:20px 0;border-top:1px solid var(--color-line);border-bottom:1px solid var(--color-line);display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between}.cta p{margin:0;color:var(--color-ink);font-weight:600;line-height:1.6}.cta small{display:block;font-weight:400;font-size:13px;color:var(--color-muted)}.btn{display:inline-block;background:var(--color-accent);color:#fff;text-decoration:none;font-size:14px;font-weight:600;padding:9px 20px;border-radius:6px;white-space:nowrap}.btn:hover{background:#16294a}.rel{margin-top:40px}.rel .row{grid-template-columns:96px minmax(0,1fr);padding:14px 0}.rel .row h3{font-size:15.5px;margin:0}.nf{max-width:600px}.nf__code{font:500 13px/1 var(--font-mono);color:var(--color-muted);margin:0 0 14px}.nf h1{font-size:26px;line-height:1.5;margin:0 0 12px}.nf ul{list-style:none;padding:0;margin:24px 0 0;display:flex;flex-wrap:wrap;gap:8px 24px}.page-body{max-width:700px}.page-body h1{font-size:26px;line-height:1.5;margin:0 0 24px}.foot{border-top:1px solid var(--color-line);font-size:13px;line-height:1.7;color:var(--color-muted)}.foot__in{max-width:1240px;margin:0 auto;padding:24px 32px;display:flex;flex-wrap:wrap;gap:8px 32px;justify-content:space-between}.foot ul{display:flex;flex-wrap:wrap;gap:4px 18px;list-style:none;margin:0;padding:0}.foot a{color:var(--color-muted);text-decoration:none}.foot a:hover{color:var(--color-ink)}.rail{display:flex;flex-direction:column;gap:36px;font-size:13.5px;line-height:1.75;min-width:0;padding:48px 0 72px}.rail h2{position:relative;font-size:15px;font-weight:700;color:var(--color-ink);margin:0 0 16px;padding-bottom:10px;border-bottom:2px solid var(--color-line)}.rail h2::after{content:"";position:absolute;left:0;bottom:-2px;width:56px;height:2px;background:var(--color-accent)}.rail p{margin:0}.rail__rss{margin-top:8px!important}.search{display:flex;gap:6px}.search input{flex:1;min-width:0;font:inherit;font-size:14px;padding:7px 10px;border:1px solid var(--color-line);border-radius:6px;background:#fff;color:var(--color-ink)}.search input:focus{outline:2px solid var(--color-link);outline-offset:-1px}.search button{font:inherit;font-size:13px;font-weight:600;padding:7px 12px;border:0;border-radius:6px;background:var(--color-accent);color:#fff;cursor:pointer;white-space:nowrap}.chips{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}.chips a{display:block;background:var(--color-surface);color:var(--color-body);text-decoration:none;font-size:13.5px;line-height:1.5;padding:5px 11px;border-radius:4px}.chips a:hover{color:var(--color-ink);filter:brightness(.97)}.chips a[aria-current]{background:var(--color-accent);color:#fff}.chips span{font-variant-numeric:tabular-nums}.arch details{margin:0 0 4px}.arch summary{cursor:pointer;color:var(--color-link);font-size:14px}.arch summary::marker{color:var(--color-ink);font-size:11px}.arch ul{list-style:none;margin:6px 0 4px;padding:0 0 0 18px}.arch li{padding:3px 0}.arch li::before{content:"└";color:var(--color-muted);margin-right:8px;font-size:12px}.arch a{color:var(--color-link);text-decoration:none;font-variant-numeric:tabular-nums}.arch a:hover{text-decoration:underline}.pop{list-style:none;margin:0;padding:0}.pop a{display:grid;grid-template-columns:22px minmax(0,1fr);gap:0 10px;padding:9px 0;border-top:1px solid var(--color-line);color:var(--color-ink);text-decoration:none;line-height:1.6}.pop li:last-child a{border-bottom:1px solid var(--color-line)}.pop a:hover span{color:var(--color-link);text-decoration:underline}.pop b{font-weight:700;color:var(--color-accent);font-variant-numeric:tabular-nums;text-align:center;line-height:1.6}.rail__none{color:var(--color-muted)}@media (max-width:1120px){.shell{grid-template-columns:minmax(0,1fr) 232px;gap:40px}.shell--article{grid-template-columns:minmax(0,1fr)}.art{display:block;max-width:700px}.toc-side{display:none}.toc-in{display:block}}@media (max-width:760px){.head__in{grid-template-columns:minmax(0,1fr);row-gap:6px;padding:12px 16px}.sitetitle{grid-column:1;grid-row:2;font-size:26px;margin:0 0 2px var(--title-indent)}.home .head__in{min-height:160px;grid-template-rows:auto 1fr auto}.home .sitetitle{margin-top:4px}.shell,.shell--article{display:block;padding:0}.main{padding:28px 16px 56px}.rail{padding:32px 16px 48px;border-top:1px solid var(--color-line);gap:32px}.intro h1{font-size:22px}.art__head h1{font-size:24px}.row,.rel .row{display:block;padding:20px 0}.row time{display:block;line-height:1.6;margin-bottom:2px}.row h2,.row h3{font-size:17px}.post h2{font-size:19px;margin-top:44px}.post td{min-width:9.5em}.post td code{white-space:nowrap}.post pre{padding:8px 14px 14px}.post pre code{font-size:13px}.foot__in{padding:20px 16px}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}