:root{--color-page-bg:#eff3f8;--color-card-bg:#fff;--color-text:#1f2733;--color-text-secondary:#4b5563;--color-muted:#6b7684;--color-accent:#0b66c3;--color-accent-weak:#0b66c314;--color-border:#dde4ec;--color-surface:#f4f7fa;--color-zebra:#f8fafc;--scroll-fade:#0f172a29;--shadow-card:0 1px 3px #1428460f;--radius-card:12px;--page-width:45rem;--content-width:47.5rem;color-scheme:light}:root[data-theme=dark]{--color-page-bg:#0c1116;--color-card-bg:#151b23;--color-text:#e6edf3;--color-text-secondary:#b6c2cf;--color-muted:#8d99a6;--color-accent:#58a6ff;--color-accent-weak:#58a6ff1a;--color-border:#2c343e;--color-surface:#1c242e;--color-zebra:#1a212a;--scroll-fade:#0000008c;--shadow-card:0 1px 3px #0006}*{box-sizing:border-box}html{background:var(--color-page-bg);color:var(--color-text);-webkit-text-size-adjust:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans JP,Hiragino Kaku Gothic ProN,Hiragino Sans,Meiryo,sans-serif}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{overflow-wrap:anywhere;background:var(--color-page-bg);flex-direction:column;min-height:100svh;margin:0;font-size:1rem;line-height:1.9;display:flex}a{color:var(--color-accent);text-decoration:none}a:hover{text-underline-offset:.2em;text-decoration:underline}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:4px}.skip-link{z-index:100;background:var(--color-accent);color:#fff;border-radius:0 0 8px 8px;padding:.6rem 1rem;font-size:.9rem;font-weight:700;transition:top .15s;position:absolute;top:-3rem;left:.75rem}.skip-link:focus{text-decoration:none;top:0}#main-content:focus-visible{outline:none}.container{width:100%;max-width:var(--page-width);margin:0 auto;padding:0 1rem}.container-wide{max-width:calc(var(--content-width) + 5.5rem)}@media (width>=1024px){.container-wide{max-width:81rem}}.container-article{width:100%;max-width:calc(var(--content-width) + 5.5rem);margin:0 auto;padding:0 1rem}@media (width>=1024px){.container-article{max-width:calc(var(--content-width) + 5.5rem + 2.5rem + 15rem)}}.site-header{background:var(--color-card-bg);border-bottom:1px solid var(--color-border)}.site-header .header-inner{flex-wrap:wrap;align-items:baseline;gap:.25rem 1rem;padding-top:.9rem;padding-bottom:.9rem;display:flex}.site-header .site-title{letter-spacing:.02em;margin:0;font-size:1.3rem;font-weight:700}.site-header .site-title a{color:var(--color-text);margin:-.6rem -.4rem;padding:.6rem .4rem}.site-header .site-title a:hover{color:var(--color-accent);text-decoration:none}.site-header .tagline{color:var(--color-muted);margin:0;font-size:.8rem}.site-header .site-nav{gap:.5rem;margin-left:auto;font-size:.88rem;display:flex}.site-header .site-nav a{border-radius:6px;margin:-.7rem 0;padding:.7rem .6rem}.site-header .site-nav a:hover{background:var(--color-accent-weak);text-decoration:none}main{flex:1 0 auto;padding-top:2rem;padding-bottom:2rem}.site-footer{border-top:1px solid var(--color-border);color:var(--color-muted);background:0 0;margin-top:4rem;padding:2rem 0 3rem;font-size:.82rem}.site-footer p{margin:.3rem 0}.footer-links{flex-wrap:wrap;gap:.5rem 1.1rem;margin:0 0 .8rem;display:flex}.footer-links a{color:var(--color-muted)}.footer-links a:hover{color:var(--color-accent)}.home-intro{border-bottom:1px solid var(--color-border);margin:.5rem 0 2.25rem;padding-bottom:1.75rem}.home-intro h1{letter-spacing:.01em;font-feature-settings:"palt";margin:0 0 .6rem;font-size:clamp(1.5rem,5vw,1.9rem);line-height:1.5}.home-lead{color:var(--color-text-secondary);margin:0;font-size:.98rem;line-height:1.85}.page-title{margin:0 0 1.25rem;font-size:1.25rem}.post-list{flex-direction:column;gap:1rem;margin:0;padding:0;list-style:none;display:flex}.post-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:1.25rem 1.5rem;transition:border-color .15s;position:relative}.post-card:hover{border-color:var(--color-accent)}.post-card .post-title{margin:0 0 .35rem;font-size:1.12rem;font-weight:700;line-height:1.5}.post-card .post-title a{color:var(--color-text)}.post-card .post-title a:after{content:"";position:absolute;inset:0}.post-card .post-title a:hover{color:var(--color-accent);text-decoration:none}.post-card .post-description{color:var(--color-text-secondary);margin:.4rem 0 0;font-size:.92rem}.post-meta{color:var(--color-muted);flex-wrap:wrap;align-items:center;gap:.3rem .75rem;margin:0;font-size:.8rem;display:flex}.tag-list{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:inline-flex}.tag-list li{background:var(--color-accent-weak);color:var(--color-accent);border-radius:999px;padding:.05em .75em;font-size:.76rem}.article-layout{grid-template-columns:minmax(0,1fr);display:grid}@media (width>=1024px){.article-layout:has(>.toc-rail){grid-template-columns:minmax(0, calc(var(--content-width) + 5.5rem)) 15rem;justify-content:center;align-items:start;gap:2.5rem}}.toc-rail{display:none}@media (width>=1024px){.toc-rail{flex-direction:column;gap:1.25rem;max-height:calc(100vh - 3rem);display:flex;position:sticky;top:1.5rem;overflow-y:auto}.toc-mobile{display:none}}.lab-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:1rem 1.1rem;font-size:.82rem;line-height:1.6}.lab-card-head{color:var(--color-text);align-items:center;gap:.5rem;display:flex}.lab-card-head:hover{color:var(--color-accent);text-decoration:none}.lab-card-mark{border-radius:6px;flex-shrink:0;display:block}.lab-card-name{font-size:.95rem;font-weight:700}.lab-card-tagline{color:var(--color-text-secondary);margin:.6rem 0 .8rem}.lab-card-link{font-weight:600}.toc{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:1rem 1.1rem;font-size:.82rem;line-height:1.6}.toc-title{color:var(--color-text-secondary);margin:0 0 .5rem;font-size:.85rem;font-weight:700}.toc-list{margin:0;padding:0;list-style:none}.toc-list li{margin:0}.toc-list a{color:var(--color-muted);border-left:2px solid #0000;border-radius:0 6px 6px 0;padding:.28em .5em .28em .75em;display:block}.toc-list li.toc-h3 a{padding-left:1.8em;font-size:.95em}.toc-list a:hover{color:var(--color-accent);background:var(--color-accent-weak);text-decoration:none}.toc-list a.active{color:var(--color-accent);border-left-color:var(--color-accent);background:var(--color-accent-weak);font-weight:600}.toc-mobile{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;margin:1rem 0 1.5rem;padding:.4rem 1rem;font-size:.9rem}.toc-mobile summary{cursor:pointer;color:var(--color-text-secondary);padding:.4rem 0;font-weight:700}.toc-mobile summary:hover{color:var(--color-accent)}.toc-mobile .toc-list{margin-top:.5rem}.article-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);max-width:calc(var(--content-width) + 2.5rem);padding:1.5rem 1.25rem}@media (width>=640px){.article-card{max-width:calc(var(--content-width) + 5.5rem);padding:2.5rem 2.75rem}}.breadcrumb{color:var(--color-muted);margin-bottom:1rem;font-size:.8rem}.breadcrumb ol{flex-wrap:wrap;align-items:center;gap:.3rem;margin:0;padding:0;list-style:none;display:flex}.breadcrumb li{align-items:center;gap:.3rem;display:flex}.breadcrumb li:not(:last-child):after{content:"›";color:var(--color-border)}.breadcrumb li[aria-current=page]{color:var(--color-text-secondary)}@media (width<=1023.98px){.breadcrumb li:nth-child(3){display:none}.breadcrumb li:nth-child(2):after{content:none}}.article-header{margin-bottom:1.5rem}.byline{border-top:1px solid var(--color-border);color:var(--color-muted);flex-wrap:wrap;align-items:center;gap:.35rem;margin:.9rem 0 0;padding-top:.8rem;font-size:.85rem;display:flex}.byline-mark{border-radius:5px;flex-shrink:0;display:block}.byline-name{color:var(--color-text);font-weight:700}.byline-name:hover{color:var(--color-accent)}.byline-desc{color:var(--color-muted)}.byline-sep{color:var(--color-border)}.byline-link{color:var(--color-accent)}.article-header h1{font-feature-settings:"palt";letter-spacing:.01em;margin:0 0 .6rem;font-size:clamp(1.35rem,4.5vw,1.65rem);line-height:1.5}.article-header .post-meta{margin-bottom:.6rem}.article-body{font-size:1rem;line-height:1.9}.article-body>*{margin-block:0 1.4em}.article-body h2{border-bottom:1px solid var(--color-border);font-feature-settings:"palt";margin:1.2em 0 1em;padding-bottom:.35em;font-size:1.35rem;line-height:1.6}.article-body h3{font-feature-settings:"palt";margin:.8em 0;font-size:1.13rem;line-height:1.6}.article-body h4{margin:.6em 0 .7em;font-size:1rem}.article-body :is(h2,h3,h4)[id]{scroll-margin-top:1.25rem}.article-body ul,.article-body ol{padding-left:1.6em}.article-body li{margin-block:.3em}.article-body hr{border:0;border-top:1px solid var(--color-border);margin:1.6em 0 3em}.article-body blockquote{background:var(--color-surface);border-left:4px solid var(--color-accent);color:var(--color-text);border-radius:0 10px 10px 0;margin:.2em 0 1.6em;padding:1em 1.4em}.article-body blockquote>:first-child{margin-top:0}.article-body blockquote>:last-child{margin-bottom:0}.article-body p:has(>img),.article-body figure{text-align:center;margin:.6em 0 2em;position:relative}.article-body img{border:1px solid var(--color-border);background:#fff;border-radius:10px;max-width:100%;height:auto;margin:0 auto;display:block}.article-body img.zoomable{cursor:zoom-in}.article-body p:has(>img.zoomable):after,.article-body figure:has(>img.zoomable):after{content:"";opacity:.85;pointer-events:none;background-color:#0f172a8c;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10' cy='10' r='6'/%3E%3Cline x1='20' y1='20' x2='14.5' y2='14.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:.85rem;border-radius:999px;width:1.7rem;height:1.7rem;position:absolute;top:.6rem;right:.6rem}.article-body figcaption{color:var(--color-muted);margin-top:.6em;font-size:.85rem;line-height:1.6}.lightbox{background:0 0;border:0;max-width:none;max-height:none;padding:0}.lightbox::backdrop{background:#050a10d1}.lightbox img{cursor:zoom-out;background:#fff;border-radius:8px;width:auto;max-width:94vw;height:auto;max-height:92vh;display:block}@media (width<=767px){.lightbox img{max-width:98vw;max-height:96vh}}.article-body table{border-collapse:separate;border-spacing:0;overflow-wrap:normal;font-size:.88rem;line-height:1.6}.article-body>table{border:1px solid var(--color-border);border-radius:8px;max-width:100%;margin:.2em 0 1.6em;display:block;overflow-x:auto}.table-shell{max-width:100%;margin:.2em 0 1.6em}.table-hint{color:var(--color-muted);margin:0 0 .4em;font-size:.75rem;display:none}.table-shell.scrollable .table-hint{display:block}.table-frame{vertical-align:top;border:1px solid var(--color-border);border-radius:8px;max-width:100%;display:inline-block;position:relative}.table-frame:before,.table-frame:after{content:"";pointer-events:none;opacity:0;z-index:2;width:26px;transition:opacity .15s;position:absolute;top:0;bottom:0}.table-frame:before{background:linear-gradient(to right, var(--scroll-fade), transparent);border-radius:8px 0 0 8px;left:0}.table-frame:after{background:linear-gradient(to left, var(--scroll-fade), transparent);border-radius:0 8px 8px 0;right:0}.table-shell.scrollable:not(.at-start) .table-frame:before,.table-shell.scrollable:not(.at-end) .table-frame:after{opacity:1}.table-wrap{border-radius:7px;overflow-x:auto}.table-wrap table{border:0;margin:0;display:table}.article-body th,.article-body td{border:0;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);padding:.5em .85em}.article-body tr>:last-child{border-right:0}.article-body tbody tr:last-child>*{border-bottom:0}.article-body th{background:var(--color-surface);white-space:nowrap;font-weight:600}.article-body td{font-variant-numeric:tabular-nums}.article-body td.td-num{white-space:nowrap}.article-body tbody tr:nth-child(2n){background:var(--color-zebra)}@media (width<=767px){.table-wrap th:first-child,.table-wrap td:first-child{z-index:1;background:var(--color-card-bg);padding-right:1.15em;position:sticky;left:0}.table-wrap thead th:first-child{background:var(--color-surface);z-index:2}.table-wrap tbody tr:nth-child(2n) td:first-child{background:var(--color-zebra)}.table-shell.scrollable:not(.at-start) .table-wrap :is(th,td):first-child{box-shadow:2px 0 0 var(--color-border)}}.article-body pre{white-space:pre;border-radius:10px;margin:.2em 0 1.6em;padding:1.1rem 4.5rem 1.1rem 1.25rem;font-size:.85rem;line-height:1.7;overflow-x:auto}.code-wrap{margin:.2em 0 1.6em;position:relative}.code-wrap pre{margin:0}.copy-btn{color:#d6dee7;cursor:pointer;opacity:.8;background:#ffffff1f;border:1px solid #ffffff40;border-radius:6px;padding:.3em .9em;font-family:inherit;font-size:.72rem;transition:opacity .15s;position:absolute;top:.55rem;right:.55rem}.copy-btn:hover{opacity:1;background:#fff3}.copy-btn.is-done{color:#7ee2a8;border-color:#7ee2a899}pre,code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}:not(pre)>code{background:var(--color-surface);border:1px solid var(--color-border);border-radius:5px;padding:.1em .4em;font-size:.86em}.provenance{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;margin:0 0 1.5rem;padding:.7rem 1.4rem;font-size:.88rem;line-height:1.7}.provenance[open]{padding-bottom:1.1rem}.provenance summary{cursor:pointer;color:var(--color-text-secondary);list-style:revert;padding:.4rem 0;font-weight:700}.provenance summary::marker{color:var(--color-muted)}.provenance summary:hover{color:var(--color-accent)}.provenance-panel{margin-top:.6rem}.provenance h2{color:var(--color-text-secondary);border:none;margin:0 0 .6rem;padding:0;font-size:.95rem;font-weight:700}.provenance section+section{margin-top:1rem}.provenance table{border-collapse:collapse;overflow-wrap:normal;max-width:100%;margin:0;font-size:.85rem;display:block;overflow-x:auto}.provenance th,.provenance td{border:1px solid var(--color-border);text-align:left;padding:.35em .8em}.provenance th{background:var(--color-card-bg);white-space:nowrap;font-weight:600}.provenance ul{margin:0;padding-left:1.4em}.provenance li{margin-block:.2em}.article-footer{border-top:1px solid var(--color-border);margin-top:3rem;padding-top:1.5rem}.share-row{color:var(--color-muted);flex-wrap:wrap;align-items:center;gap:.6rem;font-size:.85rem;display:flex}.share-row a{border:1px solid var(--color-border);border-radius:999px;padding:.3em 1.1em;font-size:.82rem}.share-row a:hover{border-color:var(--color-accent);background:var(--color-accent-weak);text-decoration:none}.share-bar-fixed{display:none}@media (width<=1023.98px){.share-bar-fixed{z-index:40;padding:.4rem 1rem calc(.4rem + env(safe-area-inset-bottom,0px));background:#ffffffe6;background:color-mix(in srgb, var(--color-card-bg) 90%, transparent);border-top:1px solid color-mix(in srgb, var(--color-border) 70%, transparent);color:var(--color-muted);align-items:center;gap:.4rem;font-size:.76rem;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -1px 5px #0f172a0d}.share-bar-fixed a{border:1px solid color-mix(in srgb, var(--color-border) 75%, transparent);color:var(--color-muted);border-radius:999px;padding:.24em .8em;font-size:.74rem}.share-bar-fixed a:hover,.share-bar-fixed a:focus-visible{border-color:var(--color-accent);background:var(--color-accent-weak);color:var(--color-accent);text-decoration:none}body:has(.share-bar-fixed){padding-bottom:2.75rem}}.related{margin-top:2rem}.related h2{margin:0 0 .8rem;font-size:1.05rem}.related .post-card{background:var(--color-surface);box-shadow:none}.back-link{margin:2rem 0 0;font-size:.9rem}.error-page{text-align:center;padding:3rem 0 2rem}.error-page .error-code{color:var(--color-accent);letter-spacing:.04em;margin:0;font-size:4.5rem;font-weight:800;line-height:1}.error-page h1{margin:1rem 0;font-size:1.3rem}.error-recent{margin-top:2.5rem}.static-page{padding-bottom:1rem}.static-page h1{font-feature-settings:"palt";letter-spacing:.01em;margin:0 0 .8rem;font-size:clamp(1.4rem,4.5vw,1.8rem);line-height:1.5}.static-page .about-lead{color:var(--color-text-secondary);margin:0 0 2rem;font-size:1rem;line-height:1.85}.static-page h2{border-bottom:1px solid var(--color-border);font-feature-settings:"palt";margin:2rem 0 .8rem;padding-bottom:.3em;font-size:1.15rem;line-height:1.6}.static-page p{margin:0 0 1rem;line-height:1.9}.static-page ol,.static-page ul{margin:0 0 1rem;padding-left:1.6em}.static-page li{margin-block:.5em}.static-page .page-meta{color:var(--color-muted);margin:0 0 2rem;font-size:.85rem}.static-page table{border-collapse:collapse;width:100%;margin:0 0 1.2rem;font-size:.9rem}.static-page th,.static-page td{border:1px solid var(--color-border);text-align:left;vertical-align:top;padding:.6em .9em}.static-page th{background:var(--color-surface);white-space:nowrap;font-weight:600}.contact-form{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);flex-direction:column;gap:1.1rem;margin:0 0 1rem;padding:1.5rem;display:flex}.form-field{flex-direction:column;gap:.4rem;display:flex}.form-field label{color:var(--color-text);font-size:.92rem;font-weight:600}.form-field input[type=text],.form-field input[type=email],.form-field textarea{font:inherit;border:1px solid var(--color-border);color:var(--color-text);background:#fff;border-radius:8px;padding:.6em .8em;font-size:.95rem}.form-field textarea{resize:vertical;min-height:8rem}.form-field input:focus-visible,.form-field textarea:focus-visible{outline:2px solid var(--color-accent);outline-offset:1px}.form-submit{font:inherit;background:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:8px;align-self:flex-start;padding:.7em 1.6em;font-size:.95rem;font-weight:700}.form-submit:hover{opacity:.92}.form-result{background:var(--color-surface);color:var(--color-text-secondary);border-radius:8px;margin:0;padding:.6em .9em;font-size:.9rem}.form-result.form-result-success{color:#0d6b39;background:#107a3c14}.form-result.form-result-error{color:#b32424;background:#c42c2c14}.form-note{color:var(--color-muted);font-size:.85rem}
