@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/IBMPlexMono-400.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/IBMPlexMono-500.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/IBMPlexSans.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
:root{--ink:#131a24;--body:#26323f;--muted:#4d5a6b;--accent:#0a56b0;--accent-dark:#083f82;--soft:#f3f6fa;--line:#d9e0ea;--key:#eef2f7;--key-line:#c5cfdc;--sans:'IBM Plex Sans',system-ui,-apple-system,'Segoe UI',sans-serif;--mono:'IBM Plex Mono',ui-monospace,Consolas,monospace}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;font-family:var(--sans);font-size:18px;line-height:1.65;color:var(--ink);background:#ffffff;overflow-wrap:break-word;min-height:100vh;min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:minmax(0,1fr)}
main{width:100%;align-self:start}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-dark);text-decoration:underline}
a:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:3px}
h1,h2,h3,p,ul,ol,figure{margin:0}
h1,h2{text-wrap:pretty}
h3{text-wrap:balance}
p,li{text-wrap:pretty}
kbd{font-family:var(--mono);font-size:.88em;background:var(--key);border:1px solid var(--key-line);border-bottom-width:2px;border-radius:5px;padding:1px 6px;white-space:nowrap}
kbd.phrase{white-space:normal}
.wrap{max-width:1120px;margin:0 auto;padding-left:24px;padding-right:24px}
.label{font-size:13px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);line-height:1.4}
.label-accent{color:var(--accent)}

.site-head{border-bottom:1px solid var(--line);background:#ffffff}
.head-row{padding-top:18px}
.brand{display:inline-flex;align-items:center;gap:14px;color:var(--ink)}
.brand:hover{color:var(--ink);text-decoration:none}
.brand svg{flex:0 0 auto;width:44px;height:44px}
.brand-text{display:flex;flex-direction:column;gap:3px;min-width:0}
.brand-name{font-size:26px;font-weight:700;letter-spacing:.06em;line-height:1}
.brand-line{font-size:13px;color:var(--muted);line-height:1.3}
.main-nav{display:flex;gap:2px;margin:10px -12px 0;font-size:15px;font-weight:500;line-height:1.4;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.main-nav::-webkit-scrollbar{display:none}
.main-nav a{flex:0 0 auto;padding:13px 12px;color:var(--ink);white-space:nowrap}
.main-nav a.active{color:var(--accent);box-shadow:inset 0 -3px 0 var(--accent)}
.main-nav a:hover{color:var(--accent);text-decoration:none}

.home{padding-top:40px;padding-bottom:64px;display:flex;flex-direction:column;gap:48px}
.lead-post{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:32px;align-items:start}
.lead-main{display:flex;flex-direction:column;gap:16px;align-items:flex-start;min-width:0}
.lead-main h1{font-size:40px;line-height:1.15;font-weight:700;letter-spacing:-.01em}
.lead-main h1 a{color:var(--ink)}
.lead-main p{font-size:18px;line-height:1.6;color:#334050}
.meta{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:center;font-size:14px;line-height:1.5;color:var(--muted)}
.btn{display:inline-block;padding:13px 22px;background:var(--accent);color:#ffffff;font-weight:600;font-size:15px;line-height:1.4;border-radius:6px}
.btn:hover{background:var(--accent-dark);color:#ffffff;text-decoration:none}
.box{border:1px solid var(--line);border-radius:10px;padding:20px;display:flex;flex-direction:column;gap:12px;min-width:0}
.box-soft{background:var(--soft)}
.outline{list-style:none;padding:0;display:flex;flex-direction:column;gap:10px;font-size:15px;line-height:1.45;counter-reset:outline}
.outline li{display:flex;gap:10px;counter-increment:outline}
.outline li::before{content:counter(outline,decimal-leading-zero);font-family:var(--mono);color:var(--accent);font-weight:500}
.section-title{font-size:22px;line-height:1.3;font-weight:700;border-bottom:2px solid var(--ink);padding-bottom:12px}
.post-list{list-style:none;padding:0}
.post-row{display:grid;grid-template-columns:190px minmax(0,1fr) auto;gap:6px 24px;align-items:baseline;padding:18px 0;border-bottom:1px solid var(--line)}
.post-row .label{letter-spacing:.06em}
.post-row h3{font-size:19px;line-height:1.35;font-weight:600}
.post-row h3 a{color:var(--ink)}
.post-row h3 a:hover{color:var(--accent)}
.post-row time{font-size:14px;color:var(--muted);white-space:nowrap}
.pager{display:flex;flex-wrap:wrap;gap:8px;padding-top:20px;font-size:15px;font-weight:500;line-height:1}
.pager a,.pager span{display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:0 14px;border:1px solid var(--key-line);border-radius:6px;color:var(--ink)}
.pager span{background:var(--ink);border-color:var(--ink);color:#ffffff}
.pager a:hover{border-color:var(--accent);color:var(--accent);text-decoration:none}
.topics{display:flex;flex-direction:column;gap:20px}
.topic-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px}
.topic-card{display:grid;grid-row:span 2;grid-template-rows:subgrid;align-content:start;row-gap:8px;padding:20px;background:var(--soft);border:1px solid var(--line);border-radius:10px;color:var(--ink)}
.topic-card:hover{border-color:var(--accent);color:var(--ink);text-decoration:none}
.topic-card strong{font-size:17px;line-height:1.3;font-weight:600}
.topic-card span{font-size:14px;line-height:1.5;color:var(--muted)}

.post{display:grid;grid-template-columns:minmax(0,740px) minmax(0,280px);justify-content:space-between;column-gap:48px;padding-top:28px;padding-bottom:64px}
.post-head{grid-column:1;grid-row:1;display:flex;flex-direction:column;gap:18px;min-width:0}
.post-body{grid-column:1;grid-row:2;display:flex;flex-direction:column;gap:22px;min-width:0;padding-top:22px}
.side{grid-column:2;grid-row:1 / span 2;display:flex;flex-direction:column;gap:20px;min-width:0}
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:0 8px;margin:-10px 0;font-size:14px;line-height:1.5;color:var(--muted)}
.crumbs a{padding:10px 0;min-width:40px}
.post-head h1{font-size:38px;line-height:1.15;font-weight:700;letter-spacing:-.01em}
.byline{padding-bottom:18px;border-bottom:1px solid var(--line)}
.pill{background:var(--key);border-radius:999px;padding:3px 10px;color:#334050;white-space:nowrap}
.post-body .lead{font-size:19px;color:var(--body)}
.post-body h2{margin-top:14px;font-size:26px;line-height:1.25;font-weight:700;scroll-margin-top:16px}
.post-body ul{padding-left:22px;display:flex;flex-direction:column;gap:10px}
.steps{list-style:none;padding:0;display:flex;flex-direction:column;gap:12px;counter-reset:step}
.steps li{position:relative;padding-left:44px;min-height:30px;counter-increment:step}
.steps li::before{content:counter(step);position:absolute;left:0;top:0;width:30px;height:30px;border-radius:50%;background:var(--accent);color:#ffffff;font-size:15px;font-weight:600;line-height:30px;text-align:center}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:10px}
.table-wrap table{width:100%;border-collapse:collapse;font-size:16px;line-height:1.5}
.table-wrap th,.table-wrap td{padding:12px 16px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line)}
.table-wrap th{background:var(--soft);font-weight:600}
.table-wrap tbody tr:last-child td{border-bottom:0}
.code{border-radius:10px;overflow:hidden;border:1px solid #1f2a38}
.code figcaption{background:#1f2a38;color:#d3dbe6;font-size:13px;font-weight:500;letter-spacing:.04em;line-height:1.5;padding:9px 16px}
.code pre{margin:0;background:var(--ink);color:#ffffff;font-family:var(--mono);font-size:16px;line-height:1.5;padding:16px;overflow-x:auto}
.faq{border-top:1px solid var(--line)}
.faq-item{padding:18px 0;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.faq-item h3{font-size:19px;line-height:1.35;font-weight:600}
.faq-item p{font-size:17px}
.related{margin-top:40px;padding-top:28px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:12px}
.related h2{margin-top:0;font-size:20px}
.related-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.related-card{display:flex;flex-direction:column;gap:6px;padding:16px;background:var(--soft);border:1px solid var(--line);border-radius:10px;color:var(--ink);font-size:16px;line-height:1.4}
.related-card:hover{border-color:var(--accent);color:var(--ink);text-decoration:none}
.related-card strong{font-weight:600;text-wrap:balance}
.side-links{display:flex;flex-direction:column;font-size:15px;line-height:1.4}
.side-links a{padding:10px 0;color:var(--ink)}
.side-links a:hover{color:var(--accent)}
.side-links.ruled a + a{border-top:1px solid #e6ebf2}
.side-links.strong a{color:var(--accent);font-weight:500}

.plain{padding-top:28px;padding-bottom:64px;display:flex;flex-direction:column;gap:22px}
.plain-head{display:flex;flex-direction:column;gap:12px;max-width:740px}
.plain-head h1{font-size:38px;line-height:1.15;font-weight:700;letter-spacing:-.01em}
.plain-head p{font-size:19px;color:var(--body)}
.plain-text{display:flex;flex-direction:column;gap:18px;max-width:740px}
.plain-text h2{margin-top:10px;font-size:24px;line-height:1.3;font-weight:700}
.plain-text ul{padding-left:24px;display:flex;flex-direction:column;gap:8px}
.plain-head .note{font-size:15px;color:var(--muted);font-family:var(--mono)}
.site-foot{background:var(--ink);color:#d3dbe6}
.foot-row{padding-top:36px;padding-bottom:36px;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px 48px}
.foot-about{flex:1 1 320px;min-width:0;display:flex;flex-direction:column;gap:8px}
.foot-name{font-size:20px;font-weight:700;letter-spacing:.06em;line-height:1.2;color:#ffffff}
.foot-about p{font-size:14px;line-height:1.6;max-width:460px}
.foot-nav{display:flex;flex-wrap:wrap;gap:0 8px;margin:0 -10px;font-size:14px;line-height:1.4}
.foot-nav a{padding:12px 10px;color:#ffffff}

@media (max-width:1000px){
.main-nav{margin-left:-24px;margin-right:-24px;padding:0 44px 0 12px;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent)}
.topic-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.post{grid-template-columns:minmax(0,1fr);justify-content:stretch;max-width:788px}
.post-head{grid-column:1;grid-row:auto;order:1}
.side{display:contents}
.toc{order:2;margin-top:22px}
.post-body{grid-column:1;grid-row:auto;order:3}
.side-related{display:none}
.side-topics{order:4;margin-top:32px}
}
@media (max-width:860px){
.lead-post{grid-template-columns:minmax(0,1fr)}
.post-row{grid-template-columns:minmax(0,1fr);gap:4px;padding:16px 0}
}
@media (max-width:600px){
body{font-size:17px;line-height:1.6}
.wrap{padding-left:16px;padding-right:16px}
.head-row{padding-top:14px}
.brand{gap:12px}
.brand svg{width:38px;height:38px}
.brand-name{font-size:22px}
.brand-line{font-size:12.5px}
.main-nav{margin:8px -16px 0;padding:0 44px 0 4px}
.home{padding-top:28px;padding-bottom:48px;gap:40px}
.lead-main h1{font-size:28px;line-height:1.2}
.lead-main p{font-size:17px}
.btn{display:block;width:100%;text-align:center}
.section-title{font-size:20px}
.post-row h3{font-size:18px}
.topic-grid{grid-template-columns:minmax(0,1fr);gap:12px}
.topic-card{padding:16px}
.post{padding-top:20px;padding-bottom:48px}
.post-head{gap:14px}
.post-head h1{font-size:28px;line-height:1.2}
.plain{padding-top:20px;padding-bottom:48px}
.plain-head h1{font-size:28px;line-height:1.2}
.plain-head p{font-size:18px}
.plain-text h2{font-size:21px}
.byline{padding-bottom:16px}
.toc{margin-top:18px}
.box{padding:16px}
.post-body{gap:18px;padding-top:20px}
.post-body .lead{font-size:18px}
.post-body h2{margin-top:10px;font-size:22px}
.steps li{padding-left:40px}
.steps li::before{width:28px;height:28px;line-height:28px;font-size:14px}
.table-wrap table{min-width:500px;font-size:15px}
.table-wrap th,.table-wrap td{padding:10px 12px}
.code pre{font-size:15px;padding:14px}
.faq-item h3{font-size:18px}
.faq-item p{font-size:16px}
.related-grid{grid-template-columns:minmax(0,1fr)}
.foot-row{padding-top:28px;padding-bottom:28px}
}
