@layer reset,base,theme;@layer reset{*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:1.6;min-height:100vh}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}}@layer base{:root{--text-xs: .8rem;--text-sm: .9rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 1.875rem;--text-4xl: 2.25rem;--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;--font-heading: var(--font-body);--font-mono: "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;--leading-tight: 1.2;--leading-snug: 1.4;--leading-normal: 1.6;--leading-relaxed: 1.75;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4rem;--space-4xl: 5rem;--content-width: 720px;--color-bg: #fafafa;--color-text: #333;--color-text-muted: #666;--color-heading: #111;--color-link: #0066cc;--color-link-hover: #004499;--color-border: #e0e0e0;--color-code-bg: #f4f4f4;--color-code-text: #d14;--color-blockquote-bg: #f6f8fa;--color-blockquote-border: #d0d7de;--color-aside-bg: #f0f7ff;--color-aside-border: #3b82f6;--color-aside-text: #1e40af}body{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-relaxed);color:var(--color-text);background:var(--color-bg)}h1,h2,h3,h4{font-family:var(--font-heading);color:var(--color-heading);line-height:var(--leading-tight);font-weight:700}h1{font-size:var(--text-4xl);margin-bottom:var(--space-lg);letter-spacing:-.02em}h2{font-size:var(--text-2xl);margin-top:var(--space-3xl);margin-bottom:var(--space-md);letter-spacing:-.01em}h3{font-size:var(--text-xl);margin-top:var(--space-2xl);margin-bottom:var(--space-sm)}h4{font-size:var(--text-lg);margin-top:var(--space-xl);margin-bottom:var(--space-sm)}p{margin-bottom:var(--space-md)}p.lead{font-size:var(--text-lg);line-height:var(--leading-relaxed);color:var(--color-text-muted)}a{color:var(--color-link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .15s ease}a:hover{color:var(--color-link-hover)}ul,ol{margin-bottom:var(--space-md);padding-left:var(--space-lg)}li{margin-bottom:var(--space-xs)}li>ul,li>ol{margin-top:var(--space-xs);margin-bottom:var(--space-xs)}blockquote{margin:var(--space-lg) 0;padding:var(--space-md) var(--space-lg);background:var(--color-blockquote-bg);border-left:3px solid var(--color-blockquote-border);border-radius:0 6px 6px 0;color:var(--color-text-muted)}blockquote p{margin-bottom:0}blockquote p+p{margin-top:var(--space-sm)}code{font-family:var(--font-mono);font-size:.9em;background:var(--color-code-bg);color:var(--color-code-text);padding:.15em .4em;border-radius:4px}pre{font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-normal);background:var(--color-code-bg);padding:var(--space-md) var(--space-lg);border-radius:8px;overflow-x:auto;margin:var(--space-lg) 0;border:1px solid var(--color-border)}pre code{background:none;color:inherit;padding:0;font-size:inherit}.token.comment{color:#6a737d}.token.keyword{color:#d73a49}.token.string{color:#032f62}.token.function{color:#6f42c1}.token.number{color:#005cc5}.token.operator{color:#d73a49}.token.class-name{color:#6f42c1}.token.property{color:#005cc5}.token.punctuation{color:#24292e}pre[class*=language-diff]{padding:0}pre[class*=language-diff]>code{display:block;padding:.5rem 0}pre[class*=language-diff] .token.deleted-sign,pre[class*=language-diff] .token.inserted-sign{display:block;position:relative;padding:.125rem 1rem .125rem 1.5rem;margin:0}pre[class*=language-diff] .token.deleted-sign{background-color:#ffeef0;color:#b31d28}pre[class*=language-diff] .token.inserted-sign{background-color:#f0fff4;color:#22863a}pre[class*=language-diff] .token.prefix{position:absolute;left:0;width:2rem;text-align:center;user-select:none}pre[class*=language-diff] .token.line{display:inline}pre[class*=language-diff]>code>.token:not(.deleted-sign):not(.inserted-sign):not(.prefix){padding-left:1.5rem;display:block}table{width:100%;border-collapse:collapse;margin:var(--space-lg) 0;font-size:var(--text-sm)}th,td{padding:var(--space-sm) var(--space-md);text-align:left;border-bottom:1px solid var(--color-border)}th{font-weight:600;color:var(--color-heading);background:var(--color-blockquote-bg);border-bottom:2px solid var(--color-border)}tr:hover{background:var(--color-blockquote-bg)}hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-2xl) 0}strong{font-weight:600;color:var(--color-heading)}em{font-style:italic}small{font-size:var(--text-sm);color:var(--color-text-muted)}.katex{background:#f0f4ff;padding:.1em .3em;border-radius:3px;color:#1e3a5f}.katex-display{background:#f0f4ff;border-radius:6px;padding:.4em .8em;overflow-x:auto}.katex-display>.katex{background:none;padding:0}aside{margin:var(--space-lg) 0;padding:var(--space-md) var(--space-lg);background:var(--color-aside-bg);border-left:4px solid var(--color-aside-border);border-radius:0 6px 6px 0;font-size:var(--text-sm);color:var(--color-aside-text)}aside p{margin:0;color:inherit}aside code{background:#3b82f626;color:#1e40af}aside pre{background:#fff;border:1px solid var(--color-border)}aside pre code{background:none;color:#24292e}aside>:first-child{margin-top:0}.side-drawer{--drawer-pane-width: 280px;margin:var(--space-lg) 0}.side-drawer__trigger{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;padding:1rem 1.25rem;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg);font:inherit;font-weight:600;color:var(--color-heading);cursor:pointer;text-align:left;transition:background-color .15s ease}.side-drawer__trigger:hover{background:var(--color-blockquote-bg)}.side-drawer__arrow{transition:transform .2s ease}.side-drawer--open .side-drawer__arrow{transform:rotate(90deg)}.side-drawer__content{margin-top:.5rem;border:1px solid var(--color-border);border-radius:6px;overflow:hidden}.side-drawer__panes{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.side-drawer__panes::-webkit-scrollbar{display:none}.side-drawer__pane{flex:0 0 100%;scroll-snap-align:start;padding:1.25rem;min-width:0}.side-drawer__pane-title{font-size:var(--text-lg);margin:0 0 .75rem;color:var(--color-heading)}.side-drawer__pane-content{font-size:var(--text-sm);color:var(--color-text);max-height:50vh;overflow-y:auto}.side-drawer__pane-content>:first-child{margin-top:0}.side-drawer__pane-content>:last-child{margin-bottom:0}.side-drawer__nav{display:flex;justify-content:space-between;padding:.75rem 1.25rem;border-top:1px solid var(--color-border);background:var(--color-blockquote-bg)}.side-drawer__nav-btn{padding:.5rem 1rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg);font:inherit;cursor:pointer;transition:background-color .15s ease}.side-drawer__nav-btn:hover{background:var(--color-blockquote-bg)}.flavor-explorer{border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:var(--color-bg);margin:var(--space-lg) 0}.flavor-explorer__header{display:flex;justify-content:space-between;align-items:center;padding:var(--space-md) var(--space-lg);border-bottom:1px solid var(--color-border);background:var(--color-blockquote-bg)}.flavor-explorer__title{margin:0;font-size:var(--text-lg);color:var(--color-heading)}.flavor-explorer__back{padding:.4rem .8rem;border:1px solid var(--color-border);border-radius:4px;background:var(--color-bg);color:var(--color-text);font:inherit;font-size:var(--text-sm);cursor:pointer;transition:background-color .15s ease}.flavor-explorer__back:hover{background:var(--color-blockquote-bg)}.flavor-explorer__columns{display:flex;height:400px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.flavor-explorer__columns::-webkit-scrollbar{display:none}.flavor-explorer__column{flex:0 0 100%;min-width:280px;display:flex;flex-direction:column;border-right:1px solid var(--color-border);scroll-snap-align:start}.flavor-explorer__column:last-child{border-right:none}.flavor-explorer__column-header{padding:var(--space-md);border-bottom:1px solid var(--color-border);background:var(--color-blockquote-bg)}.flavor-explorer__column-title{margin:0 0 .5rem;font-size:var(--text-base)}.flavor-explorer__column-desc{margin:0;font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.4}.flavor-explorer__list{flex:1;overflow-y:auto;padding:var(--space-sm)}.flavor-explorer__item{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;margin-bottom:.25rem;border:1px solid transparent;border-radius:6px;background:transparent;font:inherit;font-size:var(--text-sm);color:var(--color-text);text-align:left;cursor:pointer;transition:all .15s ease}.flavor-explorer__item:hover{background:var(--item-color-light);border-color:var(--item-color)}.flavor-explorer__item--selected{background:var(--item-color-light);border-color:var(--item-color);font-weight:600}.flavor-explorer__item:disabled{cursor:default;opacity:.8}.flavor-explorer__item-swatch{flex-shrink:0;width:1rem;height:1rem;border-radius:3px}.flavor-explorer__item-arrow{margin-left:auto;opacity:.5}.flavor-explorer__descriptor{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem 1rem;margin-bottom:.5rem;border-left:3px solid var(--item-color);background:var(--color-blockquote-bg);border-radius:0 6px 6px 0;color:var(--color-text)}.flavor-explorer__descriptor strong{display:block;color:var(--color-heading);line-height:1}.flavor-explorer__descriptor-text{margin:.25rem 0 0;font-size:var(--text-sm);color:var(--color-text-muted);line-height:1.4}@media(min-width:768px){.flavor-explorer__back{display:none}.flavor-explorer__columns{overflow-x:auto;scroll-snap-type:none}.flavor-explorer__column{flex:0 0 33.333%;min-width:220px;scroll-snap-align:none}.flavor-explorer__columns--two-col .flavor-explorer__column:last-child{flex:1 1 auto}}@media(min-width:1024px){.flavor-explorer__column{min-width:280px}}@media(min-width:900px){.side-drawer__content{position:relative;width:100vw;left:50%;transform:translate(-50%);border-radius:0;border-left:none;border-right:none}.side-drawer__panes{display:flex;justify-content:center;overflow-x:visible;max-width:1200px;margin:0 auto;padding:0 var(--space-lg)}.side-drawer__pane{flex:1 1 var(--drawer-pane-width);max-width:400px;scroll-snap-align:none;border-right:1px solid var(--color-border)}.side-drawer__pane:last-child{border-right:none}.side-drawer__pane-content{max-height:none;overflow-y:visible}.side-drawer__nav{display:none}}aside.warning{background:#fffbeb;border-color:#f59e0b;color:#92400e}aside.warning code{background:#f59e0b26;color:#92400e}aside.tip{background:#f0fdf4;border-color:#22c55e;color:#166534}aside.tip code{background:#22c55e26;color:#166534}.content-container{max-width:var(--content-width);margin:0 auto;padding:var(--space-2xl) var(--space-xl)}.page-header{margin-bottom:var(--space-2xl);padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border)}.page-header h1{margin-bottom:var(--space-sm)}.page-description{font-size:var(--text-lg);color:var(--color-text-muted);line-height:var(--leading-relaxed)}.header{margin-bottom:var(--space-2xl);padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border)}.header h1{margin-bottom:var(--space-sm)}.description{font-size:var(--text-lg);color:var(--color-text-muted);line-height:var(--leading-relaxed);margin-top:.75rem}.back-link{display:inline-block;margin-bottom:var(--space-lg);font-size:var(--text-sm);color:var(--color-text-muted);text-decoration:none}.back-link:hover{color:var(--color-heading)}.language-toggle{display:inline-flex;gap:0;padding:3px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-blockquote-bg)}.language-toggle__button{padding:.35rem .75rem;border:0;border-radius:4px;background:transparent;color:var(--color-text-muted);cursor:pointer;font-size:var(--text-xs);line-height:1.3}.language-toggle__button[data-active=true]{background:var(--color-bg);color:var(--color-heading);font-weight:600;box-shadow:0 1px 2px #00000014}.language-toggle__button:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.code-cell{margin:var(--space-lg) 0;border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:var(--color-bg)}.code-cell__tabs{display:flex;gap:0;border-bottom:1px solid var(--color-border);background:var(--color-blockquote-bg)}.code-cell__tab{padding:.45rem .85rem;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--color-text-muted);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.3}.code-cell__tab[data-active=true]{border-bottom-color:var(--color-link);background:var(--color-bg);color:var(--color-heading);font-weight:600}.code-cell__tab:focus-visible{outline:2px solid var(--color-link);outline-offset:-2px}.code-cell>div:not(.code-cell__tabs){margin:0!important;border:0!important;border-radius:0!important}.code-cell__loading{padding:var(--space-lg);color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--text-sm)}.python-cell{overflow:hidden;background:var(--color-bg)}.python-cell__toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:8px;border-bottom:1px solid var(--color-border);background:var(--color-blockquote-bg)}.python-cell__label{color:var(--color-text-muted);font-family:var(--font-mono);font-size:var(--text-xs);font-weight:600}.python-cell__tabs{display:flex;overflow-x:auto;border-bottom:1px solid var(--color-border);background:#f6f8fa}.python-cell__tab{flex:0 0 auto;padding:.45rem .75rem;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--color-text-muted);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.3}.python-cell__tab[data-active=true]{border-bottom-color:var(--color-link);background:var(--color-bg);color:var(--color-heading);font-weight:600}.python-cell__run{padding:6px 12px;border:1px solid #d0d7de;border-radius:4px;background:#fff;color:#24292e;cursor:pointer;font-size:13px;line-height:1.3}.python-cell__run:disabled{background:#e1e4e8;color:var(--color-text-muted);cursor:default}.python-cell__error{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-border);background:#fff5f5;color:#b31d28;font-size:var(--text-sm)}.python-cell__editor{display:block;width:100%;min-height:260px;resize:vertical;border:0;border-radius:0;background:#0d1117;color:#e6edf3;padding:var(--space-md) var(--space-lg);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-normal);tab-size:4}.python-cell__editor:focus{outline:2px solid var(--color-link);outline-offset:-2px}.python-cell__output{min-height:60px;max-height:200px;overflow:auto;padding:var(--space-sm) var(--space-md);border-top:1px solid var(--color-border);background:var(--color-blockquote-bg);font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--leading-normal)}.python-cell__output-line{white-space:pre-wrap;word-break:break-word;color:var(--color-heading)}.python-cell__output-line--error{color:#b31d28}.python-cell__muted{color:var(--color-text-muted)}.full-bleed{position:relative;width:100vw;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.article-section{margin:var(--space-3xl) 0;padding:var(--space-2xl) 0;position:relative;background:var(--section-bg, transparent)}.article-section--tight{padding-top:var(--space-xl);padding-bottom:var(--space-xl)}.article-section--loose{padding-top:clamp(var(--space-3xl),8vw,var(--space-4xl));padding-bottom:clamp(var(--space-3xl),8vw,var(--space-4xl))}.article-section--full{padding-top:clamp(var(--space-3xl),10vw,var(--space-4xl) * 1.2);padding-bottom:clamp(var(--space-3xl),10vw,var(--space-4xl) * 1.2)}.article-section__inner{max-width:min(1200px,calc(var(--content-width) + 2 * var(--space-xl)));margin:0 auto;padding:0 clamp(1rem,4vw,var(--space-xl))}}[class*=sp-console] [class*=sp-console-item]{border:none!important;border-radius:0!important;background:transparent!important;margin:0!important;padding:4px 12px!important}[class*=sp-console] [class*=sp-console-item]:not(:last-child){border-bottom:1px solid #eee!important}[class*=sp-] pre{background:transparent!important;border:none!important;padding:0!important;margin:0!important;border-radius:0!important}
