:root{--ink:#17313d;--muted:#57717c;--line:#d6e1e1;--paper:#f5f7f2;--white:#fff;--deep:#102b38;--teal:#1c8b86;--mint:#d8f1e8;--orange:#e69556;--code:#112d38;--shadow:0 16px 42px rgba(20,56,66,.08)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.74 system-ui,-apple-system,"Noto Sans KR","Malgun Gothic",sans-serif}a{color:#176e78}a:hover{color:#105356}button,input{font:inherit}.skip-link{position:absolute;left:1rem;top:-4rem;background:#fff;z-index:100;padding:.6rem 1rem;border-radius:.5rem}.skip-link:focus{top:.5rem}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.topbar{height:70px;display:flex;align-items:center;gap:1.2rem;padding:0 clamp(1rem,3vw,3rem);background:var(--deep);color:#f5fff9;border-bottom:1px solid #244957;position:sticky;top:0;z-index:30}.brand{display:flex;align-items:center;gap:.72rem;color:#fff;text-decoration:none;font-weight:800;letter-spacing:.02em;font-size:1.08rem}.brand:hover{color:#fff}.brand-mark{display:grid;place-items:center;width:32px;height:32px;border:1px solid #8ccdc1;border-radius:10px;color:#96e6d0;font-size:1.4rem}.brand-cross{color:#8ddbc6}.topbar-label{font-size:.77rem;color:#86a7b2;border-left:1px solid #3a5b67;padding-left:1.2rem}.repo-link{margin-left:auto;color:#d2eee4;font-size:.88rem;text-decoration:none;padding:.35rem .75rem;border:1px solid #446b73;border-radius:9px}.repo-link:hover{background:#1e4552;color:#fff}.menu-button{display:none;background:none;border:0;color:#fff;font-size:1.45rem;cursor:pointer}
.layout{display:grid;grid-template-columns:260px minmax(0,1fr) 190px;max-width:1520px;margin:auto;min-height:calc(100vh - 70px)}.sidebar{padding:32px 18px 24px;background:#edf2ed;border-right:1px solid var(--line);align-self:stretch}.sidebar-head{padding:0 14px 20px;border-bottom:1px solid #d1dfd9;margin-bottom:22px}.sidebar-head strong{font-size:1.18rem;line-height:1.48;letter-spacing:-.02em}.sidebar-eyebrow{display:block;font-size:.7rem;letter-spacing:.19em;font-weight:800;color:var(--teal);margin-bottom:8px}.search-wrap{position:relative;margin:0 9px 24px}.search-wrap input{width:100%;height:42px;background:#fff;border:1px solid #cbdcd5;border-radius:10px;padding:0 14px 0 36px;font-size:.9rem;color:var(--ink);outline:none}.search-wrap input:focus{border-color:var(--teal);box-shadow:0 0 0 3px #c4e9df}.search-icon{position:absolute;left:11px;top:3px;color:#60818a;font-size:1.65rem;line-height:1}.search-results{position:absolute;top:48px;left:0;right:0;z-index:20;max-height:360px;overflow:auto;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;padding:7px}.search-results a{display:block;text-decoration:none;padding:9px 10px;border-radius:7px;color:var(--ink)}.search-results a:hover{background:#eaf6f0}.search-results strong{display:block;font-size:.9rem}.search-results small{display:block;color:var(--muted);font-size:.76rem;line-height:1.4}.search-results p{margin:.4rem;font-size:.82rem;color:var(--muted)}.nav-group{font-size:.69rem;font-weight:800;color:#78928e;letter-spacing:.1em;padding:16px 13px 6px;text-transform:uppercase}.nav-item{display:block;margin:2px 0;padding:8px 13px;color:#3d5b62;text-decoration:none;font-size:.89rem;border-radius:9px;line-height:1.4}.nav-item:hover{background:#e0ece6;color:var(--ink)}.nav-item.active{background:#d8ece3;color:#0b615d;font-weight:800;box-shadow:inset 3px 0 #19887f}.sidebar-footer{font-size:.72rem;color:#78918b;border-top:1px solid #d1dfd9;margin:28px 14px 0;padding-top:15px}
.main{min-width:0;padding:30px clamp(24px,4vw,66px) 24px;max-width:1030px}.breadcrumb{display:flex;align-items:center;gap:9px;color:#82999a;font-size:.78rem;margin-bottom:27px}.breadcrumb a{text-decoration:none;color:#5c8184}.breadcrumb strong{color:#3e686c}.page-hero{padding:36px 40px 38px;border-radius:20px;background:radial-gradient(circle at 85% -20%,#2f756d 0,transparent 38%),linear-gradient(125deg,#153542,#204b51);color:#fff;box-shadow:var(--shadow);position:relative;overflow:hidden;margin-bottom:42px}.page-hero:after{content:"";position:absolute;width:210px;height:210px;border:1px solid #76b9aa;border-radius:50%;opacity:.16;right:-46px;bottom:-115px}.eyebrow{font-size:.76rem;font-weight:800;letter-spacing:.08em;color:#9fdcc6}.eyebrow span{color:#f3aa74}.page-hero h1{font-size:clamp(1.8rem,3vw,2.75rem);letter-spacing:-.055em;line-height:1.2;margin:12px 0 13px}.page-hero p{max-width:640px;color:#cde5dc;font-size:1rem;margin:0;line-height:1.68}.article{max-width:810px}.article h2{font-size:1.38rem;letter-spacing:-.035em;line-height:1.4;margin:50px 0 18px;padding-top:5px;scroll-margin-top:90px}.article h3{font-size:1.06rem;letter-spacing:-.02em;margin:28px 0 10px;scroll-margin-top:90px}.article p{margin:14px 0;color:#36525b}.article p.lead{font-size:1.06rem;color:#294d55;line-height:1.85}.article ul,.article ol{padding-left:1.4rem;color:#36525b}.article li{margin:.35rem 0}.article strong{color:#153945}.article a{text-underline-offset:3px}.article code:not(pre code){font:.9em/1.4 ui-monospace,SFMono-Regular,Consolas,monospace;background:#e4eee9;color:#0f635c;padding:.13em .34em;border-radius:5px}.article pre{position:relative;background:var(--code);color:#dbeee8;padding:20px 23px;border-radius:13px;overflow:auto;box-shadow:var(--shadow);font:13px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}.article pre code{white-space:pre}.article pre .copy-button{position:absolute;top:9px;right:9px;border:1px solid #54757b;color:#e1f2eb;background:#23444d;border-radius:7px;padding:3px 9px;font:12px/1.4 system-ui,sans-serif;cursor:pointer}.article pre .copy-button:hover{background:#35626a}.article .table-scroll{overflow:auto;margin:20px 0;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:var(--shadow)}.article table{border-collapse:collapse;width:100%;min-width:530px;font-size:.88rem;line-height:1.55}.article th,.article td{text-align:left;padding:12px 15px;border-bottom:1px solid #e2eaea;vertical-align:top}.article th{background:#e9f2ee;color:#244a4b;white-space:nowrap}.article tr:last-child td{border-bottom:0}.article .callout{border-radius:13px;padding:15px 19px;margin:24px 0;background:#e7f4ee;border-left:4px solid var(--teal)}.article .callout.warning{background:#fff1df;border-color:var(--orange)}.article .callout p{margin:4px 0}.article .callout strong{display:block;margin-bottom:4px}.article .cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin:20px 0}.article .card{display:block;background:#fff;border:1px solid var(--line);border-radius:13px;padding:17px 18px;text-decoration:none;color:var(--ink);box-shadow:var(--shadow)}.article .card:hover{border-color:var(--teal);transform:translateY(-2px)}.article .card .card-kicker{display:block;color:var(--teal);font-size:.73rem;font-weight:800;letter-spacing:.08em}.article .card strong{display:block;font-size:1.06rem;margin:5px 0}.article .card small{display:block;color:var(--muted);line-height:1.55;font-size:.82rem}.article .pipeline{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:23px 0}.article .pipeline div{background:#e5f0ed;border:1px solid #cadbd7;border-radius:12px;padding:13px;text-align:center;font-weight:700;color:#23555b;font-size:.82rem;line-height:1.5}.article .pipeline span{display:block;font-size:.7rem;letter-spacing:.06em;color:#53817f;margin-bottom:4px}.article .metric-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:22px 0}.article .metric{padding:15px 18px;background:#fff;border:1px solid var(--line);border-radius:12px}.article .metric strong{display:block;color:#0d766c;font-size:1.5rem;line-height:1.2}.article .metric span{font-size:.75rem;color:var(--muted)}.article .figure{margin:25px 0;background:#fff;border:1px solid var(--line);border-radius:15px;padding:21px;box-shadow:var(--shadow)}.article .figure svg{width:100%;height:auto;display:block}.article .figure figcaption{font-size:.78rem;color:var(--muted);text-align:center;margin-top:12px}.article .source-note{font-size:.78rem;color:#70898b;border-top:1px dashed #cadbd7;margin-top:25px;padding-top:12px}.page-end{max-width:810px;border-top:1px solid var(--line);margin-top:55px;padding-top:22px}.page-end a{display:block;text-decoration:none;border:1px solid var(--line);border-radius:13px;padding:14px 20px;background:#fff;width:max-content;max-width:100%}.page-end a:hover{border-color:var(--teal)}.page-end span{display:block;font-size:.72rem;color:var(--muted)}.page-end strong{color:#166864}.footer{border-top:1px solid var(--line);margin-top:64px;padding-top:20px;font-size:.76rem;color:#779091}.footer a{color:#597f80}.toc{padding:126px 20px 15px 0;position:sticky;top:70px;align-self:start;height:calc(100vh - 70px);overflow:auto}.toc-title{font-size:.73rem;letter-spacing:.08em;font-weight:800;color:#719494;margin-bottom:11px}.toc a{display:block;text-decoration:none;font-size:.79rem;color:#739091;padding:6px 8px;border-left:1px solid #c4d9d3;line-height:1.45}.toc a:hover,.toc a.active{border-left-color:var(--teal);color:#116e69}
@media(max-width:1200px){.layout{grid-template-columns:235px minmax(0,1fr)}.toc{display:none}}@media(max-width:760px){.topbar{height:60px;padding:0 15px;gap:.7rem}.menu-button{display:block}.topbar-label{display:none}.repo-link{font-size:.72rem;padding:.25rem .45rem}.brand{font-size:.92rem}.brand-mark{width:28px;height:28px}.layout{display:block;min-height:calc(100vh - 60px)}.sidebar{position:fixed;z-index:25;top:60px;bottom:0;left:0;width:min(300px,85vw);overflow:auto;transform:translateX(-105%);box-shadow:var(--shadow);transition:transform .2s}.sidebar.open{transform:translateX(0)}.main{padding:20px 19px 25px;max-width:none}.breadcrumb{margin-bottom:17px}.page-hero{padding:27px 25px;margin-bottom:33px}.article .cards,.article .metric-strip{grid-template-columns:1fr}.article .pipeline{grid-template-columns:1fr}.article table{min-width:500px}.article h2{margin-top:38px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.sidebar{transition:none}.article .card:hover{transform:none}}
.article .flow{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin:25px 0}.article .flow span{display:inline-block;padding:9px 12px;background:#e5f0ed;border:1px solid #cadbd7;border-radius:10px;color:#23555b;font-size:.79rem;font-weight:700;line-height:1.4}.article .flow span+span:before{content:"→";color:#6a9990;margin-right:9px;font-weight:800}
@media(max-width:760px){.main,.article{width:100%;min-width:0}.article p,.article li{overflow-wrap:anywhere}.article pre{max-width:100%}.repo-link{display:none}}
/* Keep repository links readable in horizontally scrollable tables. */
.article table td a{white-space:nowrap}
