.pub{--pub-bg:#f6f7f9;--pub-band:#fff;--pub-line:#e3e7ee;--pub-line-strong:#d5dbe4;--pub-ink:#0b1220;--pub-body:#3a4556;--pub-fine:#5a6578;--pub-mute:#8a97ad;--pub-brand:#1274fe;--pub-link:#0b63e5;--pub-link-hover:#084bb0;--pub-tint:#eef4ff;--pub-dark:#15171c;--pub-dark-line:#262a33;--pub-dark-well:#101216;--pub-dark-ink:#e6edf7;--pub-dark-body:#a9b5c8;--pub-sky:#6fb1ff;--pub-sans:var(--font-plex-sans), "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--pub-mono:var(--font-plex-mono), "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;font-family:var(--pub-sans);color:var(--pub-ink);-webkit-font-smoothing:antialiased}.pub-page{background:var(--pub-bg)}.pub .pub-shell{box-sizing:border-box;width:100%;max-width:1400px;margin-inline:auto;padding-inline:24px}@media (min-width:768px){.pub .pub-shell{padding-inline:32px}}.pub .pub-section{padding-block:48px}@media (min-width:1024px){.pub .pub-section{padding-block:64px}}.pub .pub-section.flex-col,.pub .pub-section>.pub-shell.flex-col{row-gap:32px}@media (min-width:1024px){.pub .pub-shell.lg\:pt-\[104px\].lg\:pb-20{padding-top:64px;padding-bottom:48px}}.pub .pub-band{background:var(--pub-band);border-block:1px solid var(--pub-line)}.pub .pub-kicker{font-family:var(--pub-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--pub-link);font-size:13px;font-weight:500}.pub .pub-h1{letter-spacing:-.03em;text-wrap:balance;font-size:40px;font-weight:600;line-height:1.05}@media (min-width:768px){.pub .pub-h1{font-size:56px}}@media (min-width:1280px){.pub .pub-h1{letter-spacing:-.035em;font-size:68px;line-height:1.02}.pub .pub-h1--hero{font-size:57px}}@media (min-width:1400px){.pub .pub-h1--hero{font-size:63px}}.pub .pub-h2{letter-spacing:-.02em;text-wrap:balance;font-size:32px;font-weight:600;line-height:1.12}@media (min-width:1024px){.pub .pub-h2{font-size:48px;line-height:1.08}.pub .pub-h2--narrow{font-size:40px}}.pub .pub-h3{letter-spacing:-.015em;font-size:26px;font-weight:600;line-height:1.2}@media (min-width:1024px){.pub .pub-h3{font-size:32px;line-height:1.18}}.pub .pub-lede{color:var(--pub-body);font-size:17px;line-height:1.65}@media (min-width:1024px){.pub .pub-lede{font-size:18px}}.pub .pub-body{color:var(--pub-body);font-size:16px;line-height:1.65}@media (min-width:1024px){.pub .pub-body{font-size:17px}}.pub .pub-fine{color:var(--pub-fine);font-size:14px;line-height:1.5}.pub .pub-label{font-family:var(--pub-mono);letter-spacing:.08em;text-transform:uppercase;font-size:12px;font-weight:600}.pub .pub-statement{letter-spacing:-.02em;text-align:center;text-wrap:balance;font-size:28px;font-weight:600;line-height:1.2}@media (min-width:1024px){.pub .pub-statement{letter-spacing:-.025em;font-size:40px}}.pub .pub-muted-ink{color:var(--pub-mute)}.pub .pub-link{color:var(--pub-link);font-weight:600;transition:color .18s}.pub .pub-link:hover{color:var(--pub-link-hover);text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:1px}.pub .pub-btn{white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:0 26px;font-size:16px;font-weight:600;line-height:1;transition:transform .18s,box-shadow .18s,background-color .18s;display:inline-flex}.pub .pub-btn--sm{min-height:44px;padding:0 18px;font-size:15px}.pub .pub-btn--primary{background:var(--pub-link);color:#fff}.pub .pub-btn--primary:hover{background:var(--pub-link-hover)}.pub .pub-btn--secondary{color:var(--pub-ink);border:1px solid var(--pub-line-strong);background:#fff}.pub .pub-btn--inverse{color:var(--pub-dark);background:#fff}.pub .pub-btn:focus-visible,.pub .pub-focus:focus-visible{outline:2px solid var(--pub-link);outline-offset:2px}@media (prefers-reduced-motion:no-preference){.pub .pub-btn:hover{transform:translateY(-1px);box-shadow:0 6px 16px #0b122024}}.pub .pub-card{border:1px solid var(--pub-line);background:#fff;border-radius:16px;transition:border-color .2s,box-shadow .2s}.pub .pub-card--soft{background:var(--pub-bg)}.pub .pub-card:hover{border-color:#c9d2df;box-shadow:0 8px 24px #0b12200f}.pub .pub-dark{background:var(--pub-dark);border:1px solid var(--pub-dark-line);color:var(--pub-dark-ink);border-radius:16px;overflow:hidden}.pub .pub-dark--sm{border-radius:12px}.pub .pub-frame-bar{border-bottom:1px solid var(--pub-dark-line);align-items:center;gap:8px;padding:12px 16px;display:flex}.pub .pub-shot{color:var(--pub-dark-ink);border:1px solid #262a33;border-radius:14px;position:relative;overflow:hidden;box-shadow:0 24px 60px #15171c29}.pub .pub-shot--framed{flex-direction:column;flex:0 auto;max-width:100%;margin-inline:auto;display:flex}.pub .pub-shot-img{width:100%;height:auto;display:block}.pub .pub-shot-pair{flex-direction:column;gap:16px;display:flex}.pub .pub-shot-pair-cell{flex-direction:column;width:100%;min-width:0;margin-inline:auto;display:flex}@media (min-width:768px){.pub .pub-shot-pair{flex-direction:row;align-items:stretch}.pub .pub-shot-pair-cell{flex:var(--grow) 1 0;width:auto;margin-inline:0}}.pub .pub-shot-zoom{color:#c9d3e3;opacity:.85;background:#101216b8;border-radius:8px;justify-content:center;align-items:center;width:30px;height:30px;transition:opacity .2s;display:inline-flex;position:absolute;bottom:10px;right:10px}.pub .pub-shot button:hover .pub-shot-zoom,.pub .pub-shot button:focus-visible .pub-shot-zoom{opacity:1}.pub .pub-video-sound,.pub .pub-video-toggle{color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer;background:#101216c7;border:1px solid #ffffff38;border-radius:999px;justify-content:center;align-items:center;min-height:44px;transition:background-color .2s,border-color .2s;display:inline-flex;position:absolute;bottom:16px}.pub .pub-video-sound{gap:10px;padding:0 18px 0 14px;font-size:15px;font-weight:600;left:16px}.pub .pub-video-toggle{width:44px;right:16px}.pub .pub-video-sound:hover,.pub .pub-video-toggle:hover{background:#0b63e5eb;border-color:#fff6}.pub .pub-video-sound:focus-visible,.pub .pub-video-toggle:focus-visible{outline:2px solid var(--pub-sky);outline-offset:2px}@media (min-width:1024px){.pub .pub-video-sound{min-height:48px;padding:0 22px 0 16px;font-size:16px;bottom:24px;left:24px}.pub .pub-video-toggle{bottom:24px;right:24px}}.pub .pub-code{font-family:var(--pub-mono);color:#d5deea;white-space:nowrap;font-size:13px;line-height:1.95;overflow-x:auto}@media (min-width:1024px){.pub .pub-code{font-size:13.5px}}.pub .pub-code--lg{font-size:14px;line-height:2.1}@media (min-width:1024px){.pub .pub-code--lg{white-space:normal;font-size:16px;line-height:2;overflow-x:visible}}.pub .pub-code-ln{color:#5f6d85;-webkit-user-select:none;user-select:none;width:18px;margin-right:16px;display:inline-block}.pub .pub-code-label{letter-spacing:.12em;color:var(--pub-mute);font-size:11px}.pub .tk-conn{color:#3fd67f;font-weight:600}.pub .tk-key{color:#fff;font-weight:600}.pub .tk-num{color:#f2c66d}.pub .tk-op,.pub .tk-mute{color:var(--pub-mute)}.pub .pub-seq-line{border-radius:6px;margin-inline:-10px;padding-inline:10px;transition:background-color .35s,opacity .35s}.pub .pub-seq-line[data-state=current]{background:#6fb1ff29}.pub .pub-seq-line[data-state=ahead]{opacity:.6}.pub .pub-code--seq{margin-inline:-10px;padding-inline:10px}.pub .pub-caret{vertical-align:-3px;background:var(--pub-sky);width:8px;height:16px;margin-left:2px;display:inline-block}@media (prefers-reduced-motion:no-preference){.pub .pub-caret{animation:1s step-end infinite pub-blink}}@keyframes pub-blink{0%,49%{opacity:1}50%,to{opacity:0}}.pub .pub-type-rest{opacity:0}.pub .pub-typer-toggle:focus-visible{outline:2px solid var(--pub-sky);outline-offset:2px}.pub-motion .pub .pub-typer:not([data-typer-state]) .pub-typer-body{opacity:0;animation:0s linear 2.5s forwards pub-unhide}@keyframes pub-unhide{to{opacity:1}}@media (min-width:768px){.pub .pub-typer-head{padding-inline:28px}.pub .pub-typer-body{padding:28px;font-size:16px;line-height:2}.pub .pub-typer-body .pub-code-ln{width:22px;margin-right:20px}.pub .pub-typer-body .pub-code-label{font-size:12px}.pub .pub-typer-body .pub-caret{vertical-align:-4px;height:19px}}.pub .pub-ptabs-wrap{border-bottom:1px solid var(--pub-line);position:relative}.pub .pub-ptabs{scrollbar-width:none;gap:4px;display:flex;overflow-x:auto}.pub .pub-ptabs::-webkit-scrollbar{display:none}.pub .pub-ptab{white-space:nowrap;min-height:44px;color:var(--pub-body);cursor:pointer;background:0 0;border-bottom:3px solid #0000;border-radius:8px 8px 0 0;flex:none;padding:0 16px;font-size:15px;font-weight:500;line-height:1.2;transition:background-color .2s,color .2s,border-color .2s}.pub .pub-ptab:hover{color:var(--pub-ink);background:#eef1f5}.pub .pub-ptab[aria-selected=true]{background:var(--pub-tint);color:var(--pub-ink);border-bottom-color:var(--pub-link);font-weight:700}.pub .pub-ptab:focus-visible{outline:2px solid var(--pub-link);outline-offset:-2px}.pub .pub-ptabs-wrap--dark{border-bottom-color:var(--pub-dark-line)}.pub .pub-ptabs-wrap--dark .pub-ptab{color:#c9d3e3;flex:1 0 auto;padding:0 9px}.pub .pub-ptabs-wrap--dark .pub-ptab:hover{color:#fff;background:#1f232b}.pub .pub-ptabs-wrap--dark .pub-ptab[aria-selected=true]{color:#fff;border-bottom-color:var(--pub-sky);background:#1c2a42}.pub .pub-ptabs-wrap--dark .pub-ptab:focus-visible{outline-color:var(--pub-sky)}.pub .pub-ptabs-progress{background:var(--pub-dark-line);pointer-events:none;height:3px;position:absolute;inset:auto 0 -1px}.pub .pub-ptabs-progress>span{background:var(--pub-link);height:100%;display:block}@media (prefers-reduced-motion:no-preference){.pub .pub-ptabs-progress>span{transition:width .45s}}.pub .pub-pager{justify-content:flex-end;align-items:center;gap:8px;display:flex}.pub .pub-pager-count{font-variant-numeric:tabular-nums;color:var(--pub-body);margin-right:6px;font-size:15px}.pub .pub-pager-btn{border:1px solid var(--pub-line-strong);width:44px;height:44px;color:var(--pub-ink);cursor:pointer;background:#fff;border-radius:999px;justify-content:center;align-items:center;transition:background-color .2s,border-color .2s;display:inline-flex}.pub .pub-pager-btn:hover:not(:disabled){background:var(--pub-tint);border-color:var(--pub-link)}.pub .pub-pager-btn:disabled{opacity:.4;cursor:default}.pub .pub-pager-btn:focus-visible{outline:2px solid var(--pub-link);outline-offset:2px}.pub .pub-pager--dark .pub-pager-count{color:#c9d3e3}.pub .pub-pager--dark .pub-pager-btn{color:#fff;background:0 0;border-color:#3a3f4a}.pub .pub-pager--dark .pub-pager-btn:hover:not(:disabled){border-color:var(--pub-sky);background:#1c2a42}.pub .pub-pager--dark .pub-pager-btn:focus-visible{outline-color:var(--pub-sky)}.pub .pub-disclosure{grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1);display:grid}.pub .pub-disclosure[data-open=true]{grid-template-rows:1fr}.pub .pub-disclosure>div{overflow:hidden}@media (min-width:1024px){.pub .pub-hiw-stages{transition:height .25s;display:block;position:relative;overflow:hidden}.pub .pub-hiw-stages>*{min-width:0;transition:opacity .28s,visibility .28s}.pub .pub-hiw-stages>[data-off]{opacity:0;visibility:hidden;position:absolute;top:0;left:0;right:0}}@media (prefers-reduced-motion:reduce){.pub .pub-hiw-stages,.pub .pub-hiw-stages>*{transition:none}}.pub .pub-blocks{grid-template-columns:minmax(0,1fr);align-items:start;gap:24px 40px;margin:0;padding:0;list-style:none;display:grid}@media (min-width:768px){.pub .pub-blocks{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.pub .pub-blocks:not(.pub-blocks--2){grid-template-columns:repeat(3,minmax(0,1fr))}.pub .pub-blocks.pub-blocks--1-xl{grid-template-columns:minmax(0,1fr)}.pub .pub-blocks{-moz-column-gap:48px;column-gap:48px}}.pub .pub-block{border-top:1px solid var(--pub-line-strong);padding-top:18px}.pub .pub-step{flex-direction:column;gap:10px;display:flex}.pub .pub-step-n{font-family:var(--pub-mono);letter-spacing:.08em;color:var(--pub-link);font-size:13px;font-weight:600}.pub .pub-anchor{scroll-margin-top:calc(var(--site-header-h,72px) + 16px)}.pub .pub-index{display:none}@media (min-width:1848px){.pub .pub-index{z-index:1;width:168px;display:block;position:absolute;top:0;bottom:0;left:32px}}.pub .pub-index-list{top:calc(var(--site-header-h,72px) + 32px);flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex;position:sticky}.pub .pub-index[data-shown=false] .pub-index-list{opacity:0;visibility:hidden}.pub .pub-index-list{transition:opacity .3s,visibility .3s}@media (prefers-reduced-motion:reduce){.pub .pub-index-list{transition:none}}.pub .pub-index-link{border-left:2px solid var(--pub-line);font-family:var(--pub-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--pub-fine);padding:7px 0 7px 12px;font-size:11px;line-height:1.35;transition:color .2s,border-color .2s;display:block}.pub .pub-index-link:hover{color:var(--pub-ink);border-left-color:var(--pub-mute)}.pub .pub-index-link[aria-current=true]{color:var(--pub-link);border-left-color:var(--pub-link);font-weight:600}.pub .pub-index-link:focus-visible{outline:2px solid var(--pub-link);outline-offset:2px}.pub .pub-xfade{display:grid}.pub .pub-xfade>*{grid-area:1/1;min-width:0;transition:opacity .28s,visibility .28s}.pub .pub-xfade>[data-off]{opacity:0;visibility:hidden}@keyframes pub-panel-in{0%{opacity:0}to{opacity:1}}.pub [role=tabpanel]:not(.pub-xfade):not([hidden]){animation:.28s pub-panel-in}@media (prefers-reduced-motion:reduce){.pub .pub-xfade>*{transition:none}.pub [role=tabpanel]{animation:none!important}}.pub button[aria-label=Show\ password],.pub button[aria-label=Hide\ password]{min-height:32px;font-family:var(--pub-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--pub-link);border-radius:6px;align-items:center;padding:4px 8px;font-size:12px;font-weight:600;line-height:1;transition:color .18s,background-color .18s;display:inline-flex}.pub button[aria-label=Show\ password]:hover,.pub button[aria-label=Hide\ password]:hover{color:var(--pub-link-hover);background-color:#eef4ff}.pub button[aria-label=Show\ password]:focus-visible,.pub button[aria-label=Hide\ password]:focus-visible{outline:2px solid var(--pub-link);outline-offset:2px}.pub .pub-reveal-pending{opacity:0;transform:translateY(20px)}.pub .pub-reveal-run{transition:opacity .6s cubic-bezier(.21,.47,.32,.98),transform .6s cubic-bezier(.21,.47,.32,.98)}.pub [data-reveal=scale].pub-reveal-pending{transform:scale(.97)}.pub .pub-lightbox{background:#080a0ef0;border:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:0}.pub .pub-lightbox::backdrop{background:#080a0e99}.pub .pub-lightbox-inner{box-sizing:border-box;justify-content:safe center;align-items:safe center;width:100%;height:100%;padding:56px 12px 12px;display:flex;overflow:auto}@media (min-width:768px){.pub .pub-lightbox-inner{padding:64px 32px 32px}}.pub .pub-lightbox-inner>picture{display:contents}.pub .pub-lightbox-img{border-radius:8px;width:auto;max-width:none;height:auto}@media (min-width:768px){.pub .pub-lightbox-img{-o-object-fit:contain;object-fit:contain;max-width:100%;max-height:100%}}.pub .pub-lightbox-close{color:#fff;background:#ffffff14;border-radius:999px;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex;position:fixed;top:8px;right:8px}.pub .pub-lightbox-close:hover{background:#ffffff29}.pub .pub-lightbox-close:focus-visible{outline:2px solid var(--pub-sky);outline-offset:2px}#site-header:has(>.pub-header){background:0 0}.pub-header{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--pub-dark-line);background:#15171ce6}.pub-header .pub-nav-link{color:#c9d3e3;min-height:44px;font-size:15px;font-weight:500;transition:color .18s}.pub-header .pub-nav-link:hover{color:#fff}.pub-header .pub-nav-link:focus-visible,.pub-header .pub-menu-btn:focus-visible{outline:2px solid var(--pub-sky);outline-offset:2px;border-radius:4px}.pub-footer{background:var(--pub-dark);color:var(--pub-dark-ink)}.pub-footer .pub-footer-link{min-height:32px;color:var(--pub-dark-ink);align-items:center;font-size:15px;transition:color .18s;display:inline-flex}.pub-footer .pub-footer-link:hover{color:#fff;text-underline-offset:3px;text-decoration:underline}.pub-footer .pub-footer-cookie button{min-height:32px;color:var(--pub-dark-ink);text-align:left;font-size:15px}.pub-footer .pub-footer-cookie button:hover{color:#fff;text-underline-offset:3px;text-decoration:underline}
