@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff)format("woff")}:root{--bg:#f3f5f6;--surface:#fff;--text:#1b2528;--text-sub:#5a676b;--text-body:#46545a;--border:#dce2e4;--border-strong:#c9d1d4;--brand:#476268;--brand-soft:#e3e9eb;--accent:#00619f;--accent-dark:#004c7d;--code-bg:#0d1117;--code-head:#161b22;--code-line:#30363d;--inline-code:#eef2f3;--footer:#1b2528;--radius:10px;--radius-s:6px;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Noto Sans JP", "Yu Gothic UI", Meiryo, sans-serif;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#12171a;--surface:#1a2125;--text:#e4e9eb;--text-sub:#9eabb0;--text-body:#b8c3c7;--border:#2c363b;--border-strong:#3b474d;--brand:#9db8be;--brand-soft:#26333a;--accent:#6cb6ef;--accent-dark:#9ccdf5;--inline-code:#26313a;--footer:#0b0f11;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--sans);overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.85}a{color:var(--accent)}a:hover{color:var(--accent-dark)}img,video{max-width:100%;height:auto}.mono{font-family:var(--mono)}.container{max-width:1200px;margin:0 auto;padding:0 24px}@media (width<=600px){.container{padding:0 16px}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link{position:absolute;left:-9999px}.skip-link:focus{z-index:10;background:var(--surface);padding:4px 8px;top:8px;left:16px}.label{font-family:var(--mono);letter-spacing:.16em;color:var(--text-sub);margin:0 0 12px;font-size:12px;font-weight:600}.chip{font-family:var(--mono);border:1px solid var(--brand);color:var(--brand);white-space:nowrap;border-radius:4px;padding:0 8px;font-size:12px;line-height:1.6;text-decoration:none;display:inline-block}a.chip:hover{background:var(--brand);color:var(--surface)}.tag{background:var(--brand-soft);color:var(--text);border-radius:999px;padding:2px 10px;font-size:13px;text-decoration:none;display:inline-block}.tag:hover{color:var(--accent)}.site-header{background:var(--surface);border-bottom:1px solid var(--border)}.site-header-inner{flex-wrap:wrap;align-items:center;gap:12px 32px;padding-top:12px;padding-bottom:12px;display:flex}.site-branding{color:var(--brand);align-items:center;gap:10px;text-decoration:none;display:flex}.site-branding:hover{color:var(--brand);opacity:.85}.site-mark{width:28px;height:auto}@media (prefers-color-scheme:dark){.site-mark{filter:brightness(1.9)}}.site-name-wrap{flex-direction:column;line-height:1.2;display:flex}.site-title{font-family:var(--mono);font-size:18px;font-weight:600}.site-tagline{font-family:var(--mono);letter-spacing:.14em;color:var(--text-sub);font-size:11px}.global-nav{flex:360px;min-width:0}.global-nav ul{flex-wrap:wrap;gap:2px 20px;margin:0;padding:0;font-size:14px;font-weight:500;list-style:none;display:flex}.global-nav a{color:var(--text);border-bottom:2px solid #0000;padding:4px 0;text-decoration:none}.global-nav a:hover{color:var(--accent)}.global-nav a[aria-current]{color:var(--accent);border-bottom-color:var(--accent)}.search-form{border:1px solid var(--border-strong);background:var(--bg);border-radius:999px;align-items:center;gap:8px;min-width:220px;padding:4px 6px 4px 14px;display:flex}.search-form svg{color:var(--text-sub);flex:none}.search-form input{min-width:0;font:inherit;color:var(--text);background:0 0;border:0;flex:1;padding:4px 0;font-size:14px}.search-form input:focus{outline:none}.search-form:focus-within{border-color:var(--accent)}.search-form button{background:var(--text);color:var(--surface);font:inherit;cursor:pointer;border:0;border-radius:999px;padding:4px 12px;font-size:12px}@media (width<=760px){.global-nav{flex-basis:100%;order:3;overflow-x:auto}.global-nav ul{white-space:nowrap;flex-wrap:nowrap}.header-search{flex:200px}}.page{padding-top:32px;padding-bottom:72px}.layout{flex-wrap:wrap;align-items:flex-start;gap:48px;display:flex}.layout>main{flex:999 640px;min-width:0}.layout>.sidebar{flex:260px;min-width:0}.sidebar{flex-direction:column;gap:36px;font-size:14px;display:flex}.sidebar ul{margin:0;padding:0;list-style:none}.side-list li{border-bottom:1px solid var(--border);justify-content:space-between;gap:8px;padding:7px 0;display:flex}.side-list li:last-child{border-bottom:0}.side-list li.child{padding-left:16px}.side-list a{color:var(--text);text-decoration:underline;text-decoration-color:color-mix(in srgb, currentColor 25%, transparent);text-underline-offset:3px}.side-list a:hover{color:var(--accent)}.side-list .count{font-family:var(--mono);color:var(--text-sub)}.recent-list li{border-bottom:1px solid var(--border);padding:6px 0;line-height:1.6}.recent-list li:last-child{border-bottom:0}.recent-list a{color:var(--text);text-decoration:underline;text-decoration-color:color-mix(in srgb, currentColor 25%, transparent);text-underline-offset:3px}.recent-list time{font-family:var(--mono);color:var(--text-sub);font-size:11px;display:block}.year-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.year-grid a{text-align:center;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);color:var(--text);font-family:var(--mono);padding:6px 0;font-size:13px;text-decoration:none}.year-grid a:hover,.year-grid a[aria-current]{border-color:var(--accent);color:var(--accent)}.tag-cloud{flex-wrap:wrap;gap:6px;display:flex}.archive-head{justify-content:space-between;align-items:baseline;gap:12px;margin:0 0 18px;display:flex}.archive-title{margin:0;font-size:22px;line-height:1.4}.archive-count{font-family:var(--mono);color:var(--text-sub);white-space:nowrap;font-size:12px}.month-links{font-family:var(--mono);flex-wrap:wrap;gap:6px;margin:0 0 24px;padding:0;font-size:13px;list-style:none;display:flex}.month-links a{border:1px solid var(--border);border-radius:var(--radius-s);background:var(--surface);color:var(--text);padding:2px 10px;text-decoration:none;display:inline-block}.featured{margin-bottom:56px}.featured-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));text-decoration:none;display:grid;overflow:hidden}.featured-card:hover{border-color:var(--border-strong)}.featured-card:hover h2{color:var(--accent)}.featured-thumb img,.featured-thumb .no-image{object-fit:cover;width:100%;height:100%;min-height:280px;display:block}.featured-body{flex-direction:column;justify-content:center;gap:12px;padding:32px 36px;display:flex}.featured-body h2{margin:0;font-size:28px;line-height:1.4}.featured-body p{color:var(--text-body);margin:0;font-size:15px}.featured-more{color:var(--accent);font-size:14px;font-weight:500}@media (width<=600px){.featured-body{padding:20px}.featured-body h2{font-size:22px}.featured-thumb img{aspect-ratio:16/9;min-height:0}}.meta-row{font-family:var(--mono);color:var(--text-sub);flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:12px;display:flex}.post-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:24px;display:grid}.post-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.post-card:hover{border-color:var(--border-strong)}.post-card-link{height:100%;color:inherit;flex-direction:column;text-decoration:none;display:flex}.post-card-link:hover .post-card-title{color:var(--accent)}.post-card-thumb{aspect-ratio:16/9;background:var(--brand-soft);overflow:hidden}.post-card-thumb img{object-fit:cover;width:100%;height:100%;display:block}.post-card-body{flex-direction:column;gap:8px;padding:14px 16px 18px;display:flex}.post-card-title{margin:0;font-size:16px;line-height:1.5}.post-card-excerpt{color:var(--text-sub);margin:0;font-size:13px;line-height:1.7}.no-image{width:100%;height:100%;color:var(--text-sub);font-family:var(--mono);place-items:center;font-size:12px;display:grid}.draft-label{font-family:var(--mono);color:#fff;vertical-align:middle;background:#b3261e;border-radius:4px;margin-left:8px;padding:1px 6px;font-size:.6em}.pagination{font-family:var(--mono);flex-wrap:wrap;justify-content:center;gap:8px;margin-top:40px;font-size:14px;display:flex}.pagination a,.pagination span{border-radius:8px;place-items:center;min-width:44px;height:44px;padding:0 12px;text-decoration:none;display:grid}.pagination a{border:1px solid var(--border);background:var(--surface);color:var(--text)}.pagination a:hover{border-color:var(--accent);color:var(--accent)}.pagination span[aria-current]{background:var(--text);color:var(--surface)}.pagination .dots{min-width:20px;color:var(--text-sub);padding:0}.breadcrumbs ol{font-family:var(--mono);color:var(--text-sub);flex-wrap:wrap;margin:0 0 20px;padding:0;font-size:12px;list-style:none;display:flex}.breadcrumbs li+li:before{content:"/";margin:0 8px}.breadcrumbs a{color:var(--text-sub)}.post{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:48px 56px 56px}@media (width<=760px){.post{border-left:0;border-right:0;border-radius:0;margin:0 -16px;padding:24px 18px 32px}}.post-header{flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:28px;display:flex}.post-title{letter-spacing:.01em;margin:0;font-size:34px;line-height:1.4}@media (width<=600px){.post-title{font-size:25px}}.post-meta{font-family:var(--mono);color:var(--text-sub);flex-wrap:wrap;gap:4px 20px;margin:0;font-size:13px;display:flex}.post-cover{border-radius:8px;width:100%;height:auto;margin-bottom:32px;display:block}.post-content{line-height:1.9}.post-content p{margin:0 0 1.2em}.post-content h2{border-bottom:1px solid var(--border);align-items:center;gap:12px;margin:2.4em 0 .8em;padding-bottom:10px;scroll-margin-top:16px;font-size:22px;line-height:1.4;display:flex}.post-content h2:before{content:"";background:var(--brand);width:10px;height:10px;box-shadow:0 0 0 3px var(--brand-soft);border-radius:2px;flex:none}.post-content h3{margin:2em 0 .6em;scroll-margin-top:16px;font-size:18px}.post-content h4,.post-content h5,.post-content h6{margin:1.6em 0 .5em;font-size:16px}@media (width<=600px){.post-content h2{font-size:19px}}.post-content img{border-radius:var(--radius-s);border:1px solid var(--border);height:auto;margin:1.4em auto;display:block}.post-content img.zoomable{cursor:zoom-in}.post-content picture img{border:0}.post-content :not(pre)>code{font-family:var(--mono);background:var(--inline-code);border-radius:4px;padding:1px 6px;font-size:.88em}.post-content blockquote{border-left:3px solid var(--border-strong);color:var(--text-sub);margin:1.2em 0;padding:.4em 1em}.post-content table{border-collapse:collapse;margin:1.2em 0;font-size:14px;display:block;overflow-x:auto}.post-content th,.post-content td{border:1px solid var(--border);padding:6px 10px}.post-content th{background:var(--bg)}.post-content iframe[src*=youtube\.com]{aspect-ratio:16/9;border-radius:var(--radius-s);border:0;width:100%;height:auto}.post-content audio,.post-content video{max-width:100%;margin:1.2em 0;display:block}.code-block{background:var(--code-bg);border:1px solid var(--code-line);border-radius:8px;margin:0 0 1.4em;overflow:hidden}.code-head{background:var(--code-head);border-bottom:1px solid var(--code-line);font-family:var(--mono);color:#c9d1d9;justify-content:space-between;align-items:center;gap:12px;padding:6px 8px 6px 14px;font-size:12px;display:flex}.code-head a{color:#79c0ff}.code-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.code-tools{flex:none;align-items:center;gap:10px;display:flex}.code-lang{color:#8b949e}.code-copy{font:inherit;color:#c9d1d9;border:1px solid var(--code-line);cursor:pointer;background:#21262d;border-radius:6px;min-height:32px;padding:4px 10px;font-size:12px}.code-copy:hover{border-color:#8b949e}.post-content pre{font-family:var(--mono);border-radius:8px;margin:0 0 1.4em;padding:16px 18px;font-size:13px;line-height:1.7;overflow-x:auto}.code-block pre{border-radius:0;margin:0}.post-content pre code{font-family:inherit}.post-content pre:not(.astro-code){background:var(--inline-code)}.post-footer{border-top:1px solid var(--border);flex-direction:column;gap:18px;margin-top:48px;padding-top:24px;display:flex}.post-terms{flex-wrap:wrap;align-items:center;gap:8px;margin:0;display:flex}.post-terms .label{margin:0 4px 0 0}.share{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.share .label{margin:0 4px 0 0}.share ul{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.share a{border:1px solid var(--border-strong);min-width:44px;height:44px;color:var(--text);border-radius:999px;place-items:center;padding:0 16px;font-size:13px;text-decoration:none;display:grid}.share a:hover{border-color:var(--accent);color:var(--accent)}.share .share-hatena{font-weight:700}.toc-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px 22px}.toc ol{counter-reset:toc;margin:0;padding:0;list-style:none}.toc li{counter-increment:toc;border-left:2px solid var(--border);gap:10px;padding:4px 0 4px 12px;line-height:1.6;display:flex}.toc li:before{content:counter(toc, decimal-leading-zero);font-family:var(--mono);color:var(--text-sub)}.toc li.depth-3{padding-left:28px;font-size:13px}.toc li.depth-3:before{content:none}.toc a{color:var(--text);text-decoration:none}.toc a:hover{color:var(--accent)}.toc-inline{border:1px solid var(--border);background:var(--bg);border-radius:8px;margin-bottom:24px;padding:10px 14px;display:none}.toc-inline summary{font-family:var(--mono);letter-spacing:.14em;color:var(--text-sub);cursor:pointer;font-size:12px}.toc-inline .toc{margin-top:8px}@media (width<=960px){.toc-inline{display:block}.sidebar .toc-box{display:none}}.related-list{flex-direction:column;gap:14px;display:flex}.related-list a{color:var(--text);align-items:center;gap:12px;font-size:13px;line-height:1.5;text-decoration:none;display:flex}.related-list a:hover{color:var(--accent)}.related-list img,.related-list .no-image{aspect-ratio:16/9;object-fit:cover;border-radius:var(--radius-s);flex:none;width:88px}.related-list .no-image{background:var(--brand-soft);font-size:10px}.prev-next{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:16px;margin-top:40px;display:grid}.prev-next a,.prev-next .none{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);flex-direction:column;gap:4px;padding:16px 20px;line-height:1.6;text-decoration:none;display:flex}.prev-next a:hover{border-color:var(--accent)}.prev-next .none{color:var(--text-sub);background:0 0;border-style:dashed}.prev-next span.dir{font-family:var(--mono);color:var(--text-sub);font-size:12px}.prev-next .next{text-align:right}.linkcard{margin:1.4em 0}.linkcard a{border:1px solid var(--border);color:var(--text);background:var(--surface);border-radius:8px;align-items:center;gap:14px;padding:10px;text-decoration:none;display:flex}.linkcard a:hover{border-color:var(--accent)}.linkcard-image{object-fit:cover;border-radius:var(--radius-s);flex:none;width:88px;height:88px;border:0!important;margin:0!important}.linkcard-body{flex-direction:column;gap:2px;min-width:0;display:flex}.linkcard-title{color:var(--accent);font-weight:700;line-height:1.5}.linkcard-site{font-family:var(--mono);color:var(--text-sub);font-size:12px}.lightbox{background:0 0;border:0;max-width:96vw;max-height:96vh;padding:0}.lightbox::backdrop{background:#000000d1}.lightbox img{cursor:zoom-out;width:auto;max-width:96vw;height:auto;max-height:92vh;display:block}.lightbox-close{color:#fff;cursor:pointer;background:0 0;border:0;width:44px;height:44px;font-size:2rem;line-height:1;position:fixed;top:12px;right:16px}.site-footer{background:var(--footer);color:#c3cdd0;font-size:13px}.site-footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 32px;padding-top:28px;padding-bottom:28px;display:flex}.site-footer .mono{color:#fff}.site-footer nav{gap:20px;display:flex}.site-footer a{color:#fff}
