@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;450;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap");:root{--od-bg:#fff;--od-bg-soft:#fbfcfd;--od-panel:#f6f8fa;--od-panel-2:#eff2f6;--od-line:#e4e9ef;--od-line-2:#d5dce5;--od-line-3:#c3ccd8;--od-ink:#18222e;--od-ink-2:#475569;--od-ink-3:#64748b;--od-ink-4:#94a3b8;--od-link:#1f6feb;--od-link-h:#1a5ac4;--od-accent:#2563eb;--od-accent-bg:#ecf2fe;--od-ok:#157f4b;--od-ok-bg:#e7f4ed;--od-ok-line:#bfe3cd;--od-info:#1f6feb;--od-info-bg:#e9f1fd;--od-info-line:#c7dcfa;--od-warn:#8a6111;--od-warn-bg:#faf1dc;--od-warn-line:#ecd9ac;--od-muted:#5b6776;--od-muted-bg:#f1f4f8;--od-muted-line:#dee4ec;--od-dang:#a4453b;--od-dang-bg:#faedeb;--od-dang-line:#eccac4;--od-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--od-mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;--o1:4px;--o2:8px;--o3:12px;--o4:16px;--o5:20px;--o6:24px;--o7:32px;--o8:48px;--o9:64px;--o10:96px;--rad:6px;--rad-2:8px;--rad-pill:999px;--sh-pop:0 1px 2px rgba(20,33,46,.06),0 8px 24px rgba(20,33,46,.1)}body,html{padding:0;margin:0}.odc,.odc *{box-sizing:border-box}.odc{font-family:var(--od-sans);font-size:15px;line-height:1.55;color:var(--od-ink);background:var(--od-bg-soft);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv05","ss01";min-height:100vh;display:flex;flex-direction:column}.odc p{margin:0}:where(.odc a){color:inherit;text-decoration:none}.tnum{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.mono{font-family:var(--od-mono);font-feature-settings:"tnum"}.od-h1{font-size:30px;font-weight:700;line-height:1.15;letter-spacing:-.022em;color:var(--od-ink);margin:0}.od-h2{font-size:20px;line-height:1.25;letter-spacing:-.014em}.od-h2,.od-h3{font-weight:600;color:var(--od-ink);margin:0}.od-h3{font-size:15px;line-height:1.3;letter-spacing:-.008em}.od-eyebrow{font-family:var(--od-mono);font-size:12px;font-weight:500;letter-spacing:.02em;color:var(--od-ink-3)}.od-lead{font-size:16px;line-height:1.6}.od-body,.od-lead{color:var(--od-ink-2)}.od-body{font-size:14px;line-height:1.65}.od-small{font-size:13px;line-height:1.5}.od-micro,.od-small{color:var(--od-ink-3)}.od-micro{font-size:12px;line-height:1.45}.od-link{color:var(--od-link)}.od-link:hover{color:var(--od-link-h);text-decoration:underline;text-underline-offset:2px}.od-nav{gap:var(--o6);height:56px;padding:0 var(--o7);border-bottom:1px solid var(--od-line);background:var(--od-bg);position:-webkit-sticky;position:sticky;top:0;z-index:50}.od-nav,.od-nav__links{display:flex;align-items:center}.od-nav__links{gap:2px}.od-nav__link{font-size:13.5px;font-weight:500;color:var(--od-ink-2);padding:6px 10px;border-radius:var(--rad);transition:background .12s,color .12s;cursor:pointer}.od-nav__link:hover{color:var(--od-ink);background:var(--od-panel)}.od-nav__link.active{color:var(--od-ink);font-weight:600}.od-nav__spacer{flex:1 1}.od-search{display:flex;align-items:center;gap:var(--o2);height:32px;padding:0 10px;min-width:200px;border:1px solid var(--od-line-2);border-radius:var(--rad);background:var(--od-bg);color:var(--od-ink-4);font-size:13px}.od-search .od-kbd{margin-left:auto}.od-kbd{font-family:var(--od-mono);font-size:11px;color:var(--od-ink-3);border:1px solid var(--od-line-2);border-radius:4px;padding:1px 5px;background:var(--od-panel)}.od-logo{display:inline-flex;align-items:center;gap:var(--o3)}.od-logo__type{font-family:var(--od-mono);font-weight:600;font-size:14px;letter-spacing:-.01em;color:var(--od-ink)}.od-logo__type .s{color:var(--od-ink-4)}.od-btn{display:inline-flex;align-items:center;gap:var(--o2);height:34px;padding:0 14px;border-radius:var(--rad);font-family:var(--od-sans);font-size:13.5px;font-weight:600;cursor:pointer;border:1px solid var(--od-line-2);background:var(--od-bg);color:var(--od-ink);transition:background .12s,border-color .12s;white-space:nowrap;text-decoration:none}.od-btn:hover{background:var(--od-panel);border-color:var(--od-line-3)}.od-btn--primary{background:var(--od-ink);border-color:var(--od-ink);color:#fff}.od-btn--primary:hover{background:#0d1620;border-color:#0d1620}.od-btn--sm{height:28px;padding:0 10px;font-size:12.5px}.od-btn svg{flex:0 0 auto}.od-status{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 8px;border-radius:var(--rad-pill);font-family:var(--od-mono);font-size:11.5px;font-weight:500;letter-spacing:.01em;border:1px solid;white-space:nowrap}.od-status:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}.od-status.ok{color:var(--od-ok);background:var(--od-ok-bg);border-color:var(--od-ok-line)}.od-status.info{color:var(--od-info);background:var(--od-info-bg);border-color:var(--od-info-line)}.od-status.warn{color:var(--od-warn);background:var(--od-warn-bg);border-color:var(--od-warn-line)}.od-status.muted{color:var(--od-muted);background:var(--od-muted-bg);border-color:var(--od-muted-line)}.od-status.dang{color:var(--od-dang);background:var(--od-dang-bg);border-color:var(--od-dang-line)}.od-chip{font-family:var(--od-mono);font-size:11px;font-weight:500;padding:2px 6px;border-radius:4px;background:var(--od-panel);color:var(--od-ink-2);border:1px solid var(--od-line)}.od-chips{gap:4px}.od-chips,.od-pill{display:inline-flex}.od-pill{align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:var(--rad-pill);font-size:12px;font-weight:500;border:1px solid var(--od-line-2);background:var(--od-bg);color:var(--od-ink-2)}.od-table{width:100%;border-collapse:collapse}.od-table th{text-align:left;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--od-ink-3);padding:10px 14px;border-bottom:1px solid var(--od-line-2);background:var(--od-panel);white-space:nowrap}.od-table td{padding:12px 14px;border-bottom:1px solid var(--od-line);font-size:13.5px;color:var(--od-ink);vertical-align:top}.od-table tr:last-child td{border-bottom:none}.od-table tbody tr:hover td{background:var(--od-panel)}.od-table .mono{font-size:12.5px}.od-table__name{font-family:var(--od-mono);font-size:13px;font-weight:500;color:var(--od-link);cursor:pointer}.od-table__name:hover{text-decoration:underline;text-underline-offset:2px}.od-table .num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-family:var(--od-mono);font-size:12.5px;color:var(--od-ink-2)}.od-table--bordered{border:1px solid var(--od-line);border-radius:var(--rad-2);overflow:hidden}.od-fieldtable td{font-size:13px}.od-fieldtable .ftype{font-family:var(--od-mono);font-size:12px;color:var(--od-ok)}.od-fieldtable .freq{font-family:var(--od-mono);font-size:11.5px}.od-meta{border:1px solid var(--od-line);border-radius:var(--rad-2);overflow:hidden;background:var(--od-bg)}.od-meta__row{display:grid;grid-template-columns:168px 1fr;grid-gap:var(--o4);gap:var(--o4);padding:10px 16px;border-bottom:1px solid var(--od-line)}.od-meta__row:last-child{border-bottom:none}.od-meta__k{font-size:12px;color:var(--od-ink-3)}.od-meta__k,.od-meta__v{font-family:var(--od-mono)}.od-meta__v{font-size:12.5px;color:var(--od-ink)}.od-meta__v.sans{font-family:var(--od-sans);font-size:13.5px;color:var(--od-ink-2)}.od-code{border:1px solid var(--od-line);border-radius:var(--rad-2);overflow:hidden;background:var(--od-bg)}.od-code__bar{display:flex;align-items:center;gap:var(--o3);height:38px;padding:0 12px;border-bottom:1px solid var(--od-line);background:var(--od-panel)}.od-code__tabs{display:flex;gap:2px}.od-code__tab{font-family:var(--od-mono);font-size:12px;padding:5px 10px;border-radius:5px;color:var(--od-ink-3);cursor:pointer;background:none;border:none}.od-code__tab.is-active{background:var(--od-bg);color:var(--od-ink);border:1px solid var(--od-line)}.od-code__act{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--od-ink-3);cursor:pointer;background:none;border:none}.od-code__act:hover{color:var(--od-ink)}.od-code pre{margin:0;padding:16px 18px;overflow:auto}.od-code code{font-family:var(--od-mono);font-size:12.5px;line-height:1.7;color:var(--od-ink);white-space:pre}.t-key{color:#1f6feb}.t-str{color:#157f4b}.t-num{color:#9a5b12}.t-bool{color:#8250df}.t-pun{color:#7a8699}.t-cmt{color:#9aa6b4;font-style:italic}.t-mtd{color:#157f4b;font-weight:600}.od-icode{font-family:var(--od-mono);font-size:.88em;border:1px solid var(--od-line);border-radius:4px;padding:1px 5px;color:var(--od-ink)}.od-icode,.od-note{background:var(--od-panel)}.od-note{border:1px solid var(--od-line-2);border-radius:var(--rad-2);padding:16px 18px}.od-note--accent{border-left:3px solid var(--od-line-3)}.od-note__h{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13.5px;color:var(--od-ink);margin-bottom:6px}.od-clog{display:grid;grid-template-columns:150px 1fr;grid-gap:var(--o5);gap:var(--o5);padding:14px 0;border-top:1px solid var(--od-line)}.od-clog__meta{display:flex;flex-direction:column;gap:5px}.od-clog__date{font-family:var(--od-mono);font-size:12px;color:var(--od-ink-3)}.od-clog__ver{font-family:var(--od-mono);font-size:11px;color:var(--od-ink-2)}.od-clog__body{font-size:13.5px;color:var(--od-ink-2);line-height:1.55}.od-clog__ds{font-family:var(--od-mono);font-size:12px;color:var(--od-link)}.od-shell{display:grid;grid-template-columns:232px 1fr;flex:1 1}.od-shell--toc{grid-template-columns:232px 1fr 200px}.od-side{border-right:1px solid var(--od-line);padding:var(--o6) var(--o5);background:var(--od-bg-soft)}.od-side__group{margin-bottom:var(--o6)}.od-side__h{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--od-ink-4);margin-bottom:var(--o3);padding:0 8px}.od-side__link{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;color:var(--od-ink-2);padding:6px 8px;border-radius:var(--rad);cursor:pointer;text-decoration:none}.od-side__link:hover{background:var(--od-panel);color:var(--od-ink)}.od-side__link.active{background:var(--od-accent-bg);color:var(--od-link);font-weight:500}.od-side__link.mono{font-family:var(--od-mono);font-size:12px}.od-main{padding:var(--o8) var(--o9);min-width:0}.od-toc{padding:var(--o8) var(--o5);border-left:1px solid var(--od-line)}.od-toc__h{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--od-ink-4);margin-bottom:var(--o3)}.od-toc__link{display:block;font-size:12.5px;color:var(--od-ink-3);padding:4px 0;text-decoration:none}.od-toc__link.active{color:var(--od-link)}.od-crumb{display:flex;align-items:center;gap:7px;font-family:var(--od-mono);font-size:12px;color:var(--od-ink-3);flex-wrap:wrap}.od-crumb a:hover{color:var(--od-link)}.od-crumb .sep{color:var(--od-ink-4)}.od-dl{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 12px;border:1px solid var(--od-line-2);border-radius:var(--rad);font-family:var(--od-mono);font-size:12.5px;color:var(--od-ink);background:var(--od-bg);cursor:pointer;text-decoration:none}.od-dl:hover{background:var(--od-panel)}.od-dl .sz{color:var(--od-ink-4)}.od-section{padding:var(--o9) var(--o8);border-bottom:1px solid var(--od-line)}.od-wrap{max-width:1100px;margin:0 auto}.odc :where(a,button,input):focus-visible{outline:2px solid var(--od-accent);outline-offset:2px;border-radius:3px}.od-footer{background:var(--od-bg);border-top:1px solid var(--od-line);padding:var(--o8) var(--o8) var(--o7)}.od-footer__cols{display:grid;grid-template-columns:1.7fr repeat(4,1fr);grid-gap:var(--o6);gap:var(--o6);max-width:1100px;margin:0 auto}.od-footer__h{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--od-ink-4);margin-bottom:var(--o3)}.od-footer__link{display:block;font-size:13px;color:var(--od-ink-2);padding:4px 0;text-decoration:none}.od-footer__link:hover{color:var(--od-link)}.od-footer__bottom{max-width:1100px;margin:var(--o7) auto 0;padding-top:var(--o5);border-top:1px solid var(--od-line);display:flex;align-items:center;gap:var(--o4);font-size:12.5px;color:var(--od-ink-3);flex-wrap:wrap}@media (max-width:900px){.od-nav{padding:0 var(--o4);gap:var(--o3)}.od-search{display:none}.od-section{padding:var(--o7) var(--o4)}.od-shell,.od-shell--toc{grid-template-columns:1fr}.od-side,.od-toc{display:none}.od-footer,.od-main{padding:var(--o6) var(--o4)}.od-footer__cols{grid-template-columns:1fr 1fr}.od-h1{font-size:24px}.od-meta__row{grid-template-columns:1fr;gap:4px}}