/*!
 * Sumi — a local-first documentation theme for MkDocs.
 * Paper and ink, with a vermilion seal. Apache-2.0.
 */

/* ── Fonts (bundled, no CDN) ───────────────────────────────────────────── */
@font-face { font-family: "Inter"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("../fonts/inter-latin-wght-normal.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: "Inter"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("../fonts/inter-latin-ext-wght-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Inter"; font-style: italic; font-weight: 100 900; font-display: swap;
  src: url("../fonts/inter-latin-wght-italic.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: "Inter"; font-style: italic; font-weight: 100 900; font-display: swap;
  src: url("../fonts/inter-latin-ext-wght-italic.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap;
  src: url("../fonts/jetbrains-mono-latin-wght-normal.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, U+2500-257F; }
@font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap;
  src: url("../fonts/jetbrains-mono-latin-ext-wght-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "JetBrains Mono"; font-style: italic; font-weight: 100 800; font-display: swap;
  src: url("../fonts/jetbrains-mono-latin-wght-italic.woff2") format("woff2"); }

/* ── Tokens ─────────────────────────────────────────────────────────────── */
:root {
  --sumi-font: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB",
    "Noto Sans CJK SC", "Source Han Sans SC", "Microsoft YaHei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  --sumi-font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono",
    "PingFang SC", "Microsoft YaHei", monospace;

  --sumi-accent: #c4432b;
  --sumi-bg: #f8f7f4;
  --sumi-bg-elev: #ffffff;
  --sumi-bg-soft: #f1efea;
  --sumi-bg-sunken: #eae8e2;
  --sumi-fg: #1d1c1a;
  --sumi-fg-2: #4a4741;
  --sumi-fg-3: #75716a;
  --sumi-line: rgba(29, 28, 26, 0.1);
  --sumi-line-2: rgba(29, 28, 26, 0.17);
  --sumi-link: #2b5d8e;
  --sumi-link-hover: #1b4a78;
  --sumi-header-bg: rgba(248, 247, 244, 0.82);
  --sumi-shadow-sm: 0 1px 2px rgba(29, 28, 26, 0.05), 0 2px 8px rgba(29, 28, 26, 0.04);
  --sumi-shadow-md: 0 2px 6px rgba(29, 28, 26, 0.05), 0 12px 32px rgba(29, 28, 26, 0.10);
  --sumi-shadow-lg: 0 24px 64px rgba(29, 28, 26, 0.22);
  --sumi-code-bg: #ffffff;
  --sumi-code-inline: rgba(29, 28, 26, 0.065);
  --sumi-code-head: #f4f2ed;
  --sumi-selection: color-mix(in srgb, var(--sumi-accent) 20%, transparent);

  --c-note: #2f6aa3;
  --c-tip: #2f7d4f;
  --c-important: #7445a6;
  --c-warning: #a86b0c;
  --c-caution: #c0392b;
  --c-quote: #75716a;

  --hl-kw: #b23a26;
  --hl-str: #4b7224;
  --hl-com: #8b867d;
  --hl-fn: #2b5d8e;
  --hl-num: #985f0c;
  --hl-type: #7a3b74;
  --hl-bi: #1d6b66;
  --hl-op: #5b574f;
  --hl-attr: #985f0c;
  --hl-var: #9a3c5c;
  --hl-del-bg: rgba(192, 57, 43, 0.12);
  --hl-ins-bg: rgba(47, 125, 79, 0.13);
  --hl-mark: rgba(214, 165, 32, 0.18);

  --sumi-radius: 10px;
  --sumi-radius-sm: 6px;
  --sumi-header-h: 60px;
  --sumi-side-w: 272px;
  --sumi-rail-w: 232px;
  --sumi-content-w: 48rem;
  --sumi-ease: cubic-bezier(.2, .7, .2, 1);
  color-scheme: light;
}

[data-theme="dark"] {
  --sumi-accent: #ef7258;
  --sumi-bg: #141413;
  --sumi-bg-elev: #1c1b19;
  --sumi-bg-soft: #201f1c;
  --sumi-bg-sunken: #0f0f0e;
  --sumi-fg: #ebe8e2;
  --sumi-fg-2: #bbb6ac;
  --sumi-fg-3: #8f8a80;
  --sumi-line: rgba(235, 232, 226, 0.1);
  --sumi-line-2: rgba(235, 232, 226, 0.18);
  --sumi-link: #86b6e8;
  --sumi-link-hover: #abcdf2;
  --sumi-header-bg: rgba(20, 20, 19, 0.82);
  --sumi-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
  --sumi-shadow-md: 0 2px 6px rgba(0, 0, 0, 0.3), 0 14px 40px rgba(0, 0, 0, 0.4);
  --sumi-shadow-lg: 0 24px 72px rgba(0, 0, 0, 0.6);
  --sumi-code-bg: #10100f;
  --sumi-code-inline: rgba(235, 232, 226, 0.09);
  --sumi-code-head: #1a1917;

  --c-note: #7cb1ea;
  --c-tip: #74c493;
  --c-important: #b892e6;
  --c-warning: #e3aa52;
  --c-caution: #f0806f;
  --c-quote: #8f8a80;

  --hl-kw: #f2896d;
  --hl-str: #a8d17f;
  --hl-com: #868177;
  --hl-fn: #8fbcec;
  --hl-num: #e6b56a;
  --hl-type: #d99bd2;
  --hl-bi: #72d0c5;
  --hl-op: #b2ada3;
  --hl-attr: #e6b56a;
  --hl-var: #ee9db8;
  --hl-del-bg: rgba(240, 128, 111, 0.16);
  --hl-ins-bg: rgba(116, 196, 147, 0.15);
  --hl-mark: rgba(230, 181, 106, 0.16);
  color-scheme: dark;
}

/* ── Base ───────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: calc(var(--sumi-header-h) + 20px); }
:is(code, kbd, pre, samp) { font-variant-ligatures: none; font-feature-settings: "liga" 0, "calt" 0; }
body {
  margin: 0; background: var(--sumi-bg); color: var(--sumi-fg);
  font: 400 16px/1.7 var(--sumi-font); font-feature-settings: "cv11", "ss01", "ss03";
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility;
  min-height: 100vh; display: flex; flex-direction: column;
}
::selection { background: var(--sumi-selection); }
a { color: var(--sumi-link); text-decoration: none; }
a:hover { color: var(--sumi-link-hover); }
img, svg, video { max-width: 100%; }
button { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--sumi-accent); outline-offset: 2px; border-radius: 4px; }
.sumi-icon { width: 1.1em; height: 1.1em; flex: none; vertical-align: -0.18em; }
.sumi-icon-inline { width: 1.05em; height: 1.05em; vertical-align: -0.16em; color: var(--sumi-accent); }
.sumi-skip { position: absolute; left: -999px; top: 8px; z-index: 100; background: var(--sumi-bg-elev); padding: 8px 14px; border-radius: 8px; box-shadow: var(--sumi-shadow-md); }
.sumi-skip:focus { left: 12px; }
[hidden] { display: none !important; }

/* ── Buttons & menus ───────────────────────────────────────────────────── */
.sumi-icon-btn {
  display: inline-grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 8px;
  background: transparent; color: var(--sumi-fg-2); cursor: pointer; transition: background .15s, color .15s;
}
.sumi-icon-btn:hover { background: var(--sumi-bg-soft); color: var(--sumi-fg); }
.sumi-icon-btn .sumi-icon { width: 19px; height: 19px; }
.sumi-chip-btn {
  display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 11px; border: 1px solid var(--sumi-line-2);
  border-radius: 8px; background: var(--sumi-bg-elev); color: var(--sumi-fg-2); font-size: 13px; font-weight: 500;
  cursor: pointer; white-space: nowrap; transition: border-color .15s, color .15s, background .15s;
}
.sumi-chip-btn:hover { color: var(--sumi-fg); border-color: color-mix(in srgb, var(--sumi-fg) 30%, transparent); }
.sumi-chip-btn .sumi-icon { width: 15px; height: 15px; }
.sumi-chip-btn.is-done { color: var(--c-tip); border-color: color-mix(in srgb, var(--c-tip) 45%, transparent); }
.sumi-menu { position: relative; }
.sumi-menu-list {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 60; min-width: 200px; margin: 0; padding: 6px; list-style: none;
  background: var(--sumi-bg-elev); border: 1px solid var(--sumi-line); border-radius: 12px; box-shadow: var(--sumi-shadow-md);
  opacity: 0; transform: translateY(-4px); pointer-events: none; transition: opacity .14s, transform .14s var(--sumi-ease);
}
.sumi-menu-right, .sumi-header-tools .sumi-menu-list { left: auto; right: 0; }
.sumi-menu.is-open > .sumi-menu-list { opacity: 1; transform: none; pointer-events: auto; }
.sumi-menu-list a, .sumi-menu-list button {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 7px 10px; border: 0; border-radius: 7px; background: none;
  color: var(--sumi-fg-2); font-size: 14px; text-align: left; cursor: pointer; white-space: nowrap;
}
.sumi-menu-list a:hover, .sumi-menu-list button:hover { background: var(--sumi-bg-soft); color: var(--sumi-fg); }
.sumi-menu-list .sumi-icon { width: 16px; height: 16px; color: var(--sumi-fg-3); }
.sumi-menu-list [aria-current="true"] { color: var(--sumi-accent); font-weight: 600; }

/* ── Announcement ──────────────────────────────────────────────────────── */
.sumi-announce { position: relative; background: var(--sumi-fg); color: var(--sumi-bg); font-size: 14px; }
.sumi-announce-inner { max-width: 1480px; margin: 0 auto; padding: 8px 56px; text-align: center; }
.sumi-announce a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
.sumi-announce-close { position: absolute; right: 10px; top: 50%; translate: 0 -50%; color: inherit; width: 30px; height: 30px; }
.sumi-announce-close:hover { background: rgba(127, 127, 127, .25); color: inherit; }

/* ── Header ─────────────────────────────────────────────────────────────── */
.sumi-header {
  position: sticky; top: 0; z-index: 40; height: var(--sumi-header-h); background: var(--sumi-header-bg);
  -webkit-backdrop-filter: saturate(1.6) blur(14px); backdrop-filter: saturate(1.6) blur(14px);
  border-bottom: 1px solid var(--sumi-line);
}
.sumi-header-inner { display: flex; align-items: center; gap: 8px; height: 100%; max-width: 1480px; margin: 0 auto; padding: 0 20px; }
.sumi-brand { display: inline-flex; align-items: center; gap: 10px; margin-right: 18px; color: var(--sumi-fg); font-weight: 650; font-size: 16.5px; letter-spacing: -0.01em; white-space: nowrap; }
.sumi-brand:hover { color: var(--sumi-fg); }
.sumi-mark, .sumi-logo { width: 28px; height: 28px; flex: none; }
.sumi-logo { object-fit: contain; }
.sumi-brand-name b, .sumi-brand-name strong { color: var(--sumi-accent); font-weight: inherit; }
.sumi-tabs-nav { display: flex; align-items: center; gap: 2px; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.sumi-tabs-nav::-webkit-scrollbar { display: none; }
.sumi-tab-link {
  position: relative; display: inline-flex; align-items: center; height: 36px; padding: 0 12px; border-radius: 8px;
  color: var(--sumi-fg-2); font-size: 14.5px; font-weight: 500; white-space: nowrap; transition: color .15s, background .15s;
}
.sumi-tab-link:hover { color: var(--sumi-fg); background: var(--sumi-bg-soft); }
.sumi-tab-link.is-active { color: var(--sumi-fg); }
.sumi-tab-link.is-active::after {
  content: ""; position: absolute; left: 12px; right: 12px; bottom: -12px; height: 2px; border-radius: 2px; background: var(--sumi-accent);
}
.sumi-header-tools { display: flex; align-items: center; gap: 4px; margin-left: auto; }
.sumi-search-btn {
  display: inline-flex; align-items: center; gap: 8px; width: 240px; height: 36px; margin-right: 6px; padding: 0 8px 0 11px;
  border: 1px solid var(--sumi-line-2); border-radius: 9px; background: var(--sumi-bg-elev); color: var(--sumi-fg-3);
  font-size: 14px; cursor: pointer; transition: border-color .15s, box-shadow .15s;
}
.sumi-search-btn:hover { border-color: color-mix(in srgb, var(--sumi-fg) 28%, transparent); box-shadow: var(--sumi-shadow-sm); }
.sumi-search-btn .sumi-icon { width: 16px; height: 16px; }
.sumi-search-label { flex: 1; text-align: left; }
.sumi-search-kbd, .sumi-palette kbd, .sumi-help kbd {
  display: inline-flex; align-items: center; height: 21px; padding: 0 6px; border: 1px solid var(--sumi-line-2); border-bottom-width: 2px;
  border-radius: 5px; background: var(--sumi-bg-soft); color: var(--sumi-fg-3); font: 500 11.5px/1 var(--sumi-font);
}
.sumi-when-dark { display: none; }
[data-theme="dark"] .sumi-when-dark { display: block; }
[data-theme="dark"] .sumi-when-light { display: none; }
.sumi-version-current { font-variant-numeric: tabular-nums; }
.sumi-menu-btn { display: none; margin-left: -6px; }

/* ── Shell ──────────────────────────────────────────────────────────────── */
.sumi-shell {
  flex: 1; display: grid; width: 100%; max-width: 1480px; margin: 0 auto; padding: 0 20px;
  grid-template-columns: var(--sumi-side-w) minmax(0, 1fr) var(--sumi-rail-w); column-gap: 48px;
}
.sumi-shell--no-side { grid-template-columns: minmax(0, 1fr) var(--sumi-rail-w); }
.sumi-shell--no-toc { grid-template-columns: var(--sumi-side-w) minmax(0, 1fr); }
.sumi-shell--no-side.sumi-shell--no-toc { grid-template-columns: minmax(0, 1fr); }
/* Centre the article on the page, but never push it under the table of contents. */
.sumi-shell--no-side .sumi-main { padding-left: clamp(0px, calc((100% + var(--sumi-rail-w) + 48px - var(--sumi-content-w)) / 2), calc(100% - var(--sumi-content-w))); }
.sumi-shell--no-side.sumi-shell--no-toc .sumi-main { padding-left: 0; }
.sumi-shell--no-side.sumi-shell--no-toc .sumi-article { margin: 0 auto; }
.sumi-main { min-width: 0; padding: 28px 0 64px; }
.sumi-article { max-width: var(--sumi-content-w); }
html[data-layout="wide"] .sumi-article { max-width: none; }

/* Sidebar */
.sumi-sidebar { position: sticky; top: var(--sumi-header-h); align-self: start; height: calc(100vh - var(--sumi-header-h)); }
.sumi-sidebar-inner {
  height: 100%; overflow-y: auto; overscroll-behavior: contain; padding: 26px 10px 40px 0; margin-right: -10px;
  scrollbar-width: thin; scrollbar-color: var(--sumi-line-2) transparent;
}
.sumi-sidebar-title { padding: 0 10px 10px; color: var(--sumi-fg); font-weight: 650; font-size: 15px; letter-spacing: -0.005em; }
.sumi-nav-list { list-style: none; margin: 0; padding: 0; }
.sumi-nav-list .sumi-nav-list { margin: 2px 0 6px 10px; padding-left: 10px; border-left: 1px solid var(--sumi-line); }
.sumi-nav-page a, .sumi-nav-link a, .sumi-nav-section summary {
  display: flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 7px; color: var(--sumi-fg-2);
  font-size: 14.5px; line-height: 1.45; transition: color .12s, background .12s;
}
.sumi-nav-page a:hover, .sumi-nav-link a:hover, .sumi-nav-section summary:hover { color: var(--sumi-fg); background: var(--sumi-bg-soft); }
.sumi-nav-page a.is-current, .sumi-nav-section summary a.is-current {
  color: var(--sumi-accent); font-weight: 600; background: color-mix(in srgb, var(--sumi-accent) 8%, transparent);
}
.sumi-nav-list .sumi-nav-list .sumi-nav-page a.is-current { box-shadow: -11px 0 0 -9.5px var(--sumi-accent); border-radius: 0 7px 7px 0; }
.sumi-nav-section summary { list-style: none; cursor: pointer; font-weight: 550; color: var(--sumi-fg); }
.sumi-nav-section summary::-webkit-details-marker { display: none; }
.sumi-nav-section summary a { flex: 1; color: inherit; margin: -5px -10px; padding: 5px 10px; border-radius: 7px; }
.sumi-nav-section summary a.is-current { color: var(--sumi-accent); }
.sumi-nav-section summary > span { flex: 1; }
.sumi-nav-list[data-depth="1"] > .sumi-nav-section { margin-top: 10px; }
.sumi-nav-list[data-depth="1"] > .sumi-nav-section:first-child { margin-top: 0; }
.sumi-chevron { width: 15px; height: 15px; color: var(--sumi-fg-3); transition: transform .18s var(--sumi-ease); }
.sumi-nav-section details[open] > summary .sumi-chevron { transform: rotate(90deg); }
.sumi-ext { width: 12px; height: 12px; color: var(--sumi-fg-3); }

/* Rail */
.sumi-rail { position: sticky; top: var(--sumi-header-h); align-self: start; max-height: calc(100vh - var(--sumi-header-h)); overflow-y: auto; scrollbar-width: none; }
.sumi-rail-inner { padding: 30px 0 40px; }
.sumi-rail-title { margin-bottom: 10px; color: var(--sumi-fg); font-size: 13px; font-weight: 650; letter-spacing: .02em; }
.sumi-toc ul { list-style: none; margin: 0; padding: 0; }
.sumi-toc ul ul { padding-left: 12px; }
.sumi-toc a {
  display: block; padding: 4px 0 4px 12px; margin-left: -1px; border-left: 1px solid var(--sumi-line); color: var(--sumi-fg-3);
  font-size: 13.5px; line-height: 1.45; transition: color .12s, border-color .12s;
}
.sumi-toc ul ul a { font-size: 13px; }
.sumi-toc a:hover { color: var(--sumi-fg); }
.sumi-toc a.is-active { color: var(--sumi-accent); border-left-color: var(--sumi-accent); }
.sumi-rail .sumi-toc > ul { border-left: 1px solid var(--sumi-line); }
.sumi-rail .sumi-toc a { border-left-color: transparent; }
.sumi-rail .sumi-toc a.is-active { border-left-color: var(--sumi-accent); }
.sumi-rail-top { display: inline-flex; align-items: center; gap: 6px; margin-top: 18px; color: var(--sumi-fg-3); font-size: 13px; }
.sumi-rail-top .sumi-icon { width: 14px; height: 14px; }
.sumi-rail-top:hover { color: var(--sumi-fg); }
.sumi-toc-inline { display: none; margin: 0 0 20px; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-bg-elev); }
.sumi-toc-inline summary { display: flex; align-items: center; gap: 8px; padding: 10px 14px; cursor: pointer; list-style: none; font-size: 14px; font-weight: 550; color: var(--sumi-fg-2); }
.sumi-toc-inline summary::-webkit-details-marker { display: none; }
.sumi-toc-inline summary span { flex: 1; }
.sumi-toc-inline[open] summary .sumi-chevron { transform: rotate(180deg); }
.sumi-toc-inline .sumi-toc { padding: 0 14px 12px; }

/* Article top */
.sumi-article-top { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 32px; margin-bottom: 18px; }
.sumi-breadcrumbs ol { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin: 0; padding: 0; list-style: none; font-size: 13.5px; color: var(--sumi-fg-3); }
.sumi-breadcrumbs li { display: inline-flex; align-items: center; gap: 2px; }
.sumi-breadcrumbs a { color: var(--sumi-fg-3); }
.sumi-breadcrumbs a:hover { color: var(--sumi-fg); }
.sumi-breadcrumbs [aria-current] span { color: var(--sumi-fg-2); }
.sumi-crumb-sep { width: 13px; height: 13px; opacity: .6; }
.sumi-actions { display: inline-flex; align-items: center; flex: none; }
.sumi-actions .sumi-copy-page { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.sumi-actions .sumi-chip-icon { width: 30px; height: 32px; border: 1px solid var(--sumi-line-2); border-radius: 8px; background: var(--sumi-bg-elev); }
.sumi-actions .sumi-copy-page + .sumi-menu .sumi-chip-icon { border-left: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; }
.sumi-actions .sumi-chip-icon .sumi-icon { width: 15px; height: 15px; }

/* ── Prose ──────────────────────────────────────────────────────────────── */
.sumi-prose { font-size: 16px; line-height: 1.75; overflow-wrap: break-word; }
.sumi-prose > :first-child { margin-top: 0; }
.sumi-prose h1, .sumi-prose h2, .sumi-prose h3, .sumi-prose h4, .sumi-prose h5, .sumi-prose h6 {
  position: relative; color: var(--sumi-fg); font-weight: 650; letter-spacing: -0.018em; line-height: 1.3; scroll-margin-top: calc(var(--sumi-header-h) + 20px);
}
.sumi-prose h1 { margin: 0 0 .7em; font-size: 2.35rem; font-weight: 700; letter-spacing: -0.028em; line-height: 1.18; }
.sumi-prose h2 { margin: 2.4em 0 .8em; padding-top: 1.2em; border-top: 1px solid var(--sumi-line); font-size: 1.55rem; }
.sumi-prose :is(h1, hr) + h2, .sumi-prose h1 + p + h2 { border-top: 0; padding-top: 0; }
.sumi-prose h3 { margin: 2em 0 .6em; font-size: 1.22rem; }
:is(:lang(zh), :lang(ja), :lang(ko)) .sumi-prose { line-height: 1.85; letter-spacing: .01em; }
:is(:lang(zh), :lang(ja), :lang(ko)) :is(.sumi-prose :is(h1, h2, h3, h4), .sumi-hero-title, .sumi-land-head h2) { letter-spacing: 0; }
:is(:lang(zh), :lang(ja), :lang(ko)) .sumi-prose em { font-style: normal; font-weight: 600; }
.sumi-prose h4 { margin: 1.8em 0 .5em; font-size: 1.05rem; }
.sumi-prose h5, .sumi-prose h6 { margin: 1.6em 0 .5em; font-size: .95rem; color: var(--sumi-fg-2); }
.sumi-prose h1 + p { font-size: 1.12rem; color: var(--sumi-fg-2); line-height: 1.7; }
.sumi-prose .headerlink {
  margin-left: .35em; padding: 0 .2em; color: var(--sumi-fg-3); font-weight: 400; text-decoration: none; opacity: 0; transition: opacity .15s;
}
.sumi-prose :is(h1, h2, h3, h4, h5, h6):hover .headerlink, .sumi-prose .headerlink:focus { opacity: 1; }
.sumi-prose .headerlink:hover { color: var(--sumi-accent); }
.sumi-prose p, .sumi-prose ul, .sumi-prose ol, .sumi-prose dl, .sumi-prose blockquote, .sumi-prose figure, .sumi-prose details { margin: 0 0 1.15em; }
.sumi-prose a { color: var(--sumi-link); text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--sumi-link) 35%, transparent); text-underline-offset: 3px; text-decoration-thickness: 1px; }
.sumi-prose a:hover { text-decoration-color: currentColor; }
.sumi-prose :is(h1, h2, h3, h4, h5, h6) a:not(.headerlink) { color: inherit; text-decoration: none; }
.sumi-prose strong { font-weight: 650; color: var(--sumi-fg); }
.sumi-prose ul, .sumi-prose ol { padding-left: 1.5em; }
.sumi-prose li { margin: .3em 0; }
.sumi-prose li > p { margin: .4em 0; }
.sumi-prose li::marker { color: var(--sumi-fg-3); }
.sumi-prose ol > li::marker { font-variant-numeric: tabular-nums; font-weight: 500; }
.sumi-prose hr { margin: 2.5em 0; border: 0; border-top: 1px solid var(--sumi-line); }
.sumi-prose img { height: auto; border-radius: 8px; }
.sumi-prose img.left { float: left; margin: 0 1.2em 1em 0; }
.sumi-prose img.right { float: right; margin: 0 0 1em 1.2em; }
[data-theme="dark"] img[src$="#only-light"], [data-theme="light"] img[src$="#only-dark"],
:root:not([data-theme="dark"]) img[src$="#only-dark"] { display: none; }
.sumi-prose blockquote { margin-left: 0; padding: .1em 0 .1em 1.1em; border-left: 3px solid var(--sumi-line-2); color: var(--sumi-fg-2); }
.sumi-prose dt { font-weight: 600; }
.sumi-prose dd { margin: .25em 0 .9em 1.4em; color: var(--sumi-fg-2); }
.sumi-prose kbd { display: inline-block; min-width: 1.6em; padding: .05em .45em; border: 1px solid var(--sumi-line-2); border-bottom-width: 2px; border-radius: 5px; background: var(--sumi-bg-elev); font: 500 .8em/1.5 var(--sumi-font-mono); text-align: center; color: var(--sumi-fg); }
.sumi-keys { white-space: nowrap; }
.sumi-keys-sep { margin: 0 .2em; color: var(--sumi-fg-3); font-size: .85em; }
.sumi-prose mark { background: var(--hl-mark); color: inherit; padding: 0 .15em; border-radius: 3px; }
.sumi-prose abbr[title] { text-decoration: underline dotted; cursor: help; }
.sumi-prose sup, .sumi-prose sub { line-height: 0; }
.sumi-prose .footnote { margin-top: 3em; font-size: .9em; color: var(--sumi-fg-2); }
.sumi-prose .footnote hr { margin: 0 0 1.2em; }
.sumi-prose .footnote-ref a, .sumi-prose a.footnote-ref { text-decoration: none; }
.sumi-prose .task-list-item { list-style: none; }
.sumi-prose .task-list-item input { margin: 0 .5em 0 -1.4em; }

/* Inline code */
.sumi-prose :not(pre) > code {
  padding: .14em .38em; border-radius: 5px; background: var(--sumi-code-inline); color: var(--sumi-fg);
  font: 500 .86em/1.4 var(--sumi-font-mono); overflow-wrap: anywhere; -webkit-box-decoration-break: clone; box-decoration-break: clone;
}
.sumi-prose a > code { color: inherit; }

/* Code blocks */
.sumi-prose pre {
  position: relative; margin: 0 0 1.25em; padding: 16px 18px; overflow-x: auto; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius);
  background: var(--sumi-code-bg); color: var(--sumi-fg); font: 400 13.5px/1.65 var(--sumi-font-mono); tab-size: 4;
  scrollbar-width: thin; scrollbar-color: var(--sumi-line-2) transparent;
}
.sumi-prose pre code { padding: 0; background: none; font: inherit; color: inherit; }
.sumi-prose .highlight, .sumi-prose .codehilite { position: relative; margin: 0 0 1.25em; }
.sumi-prose .highlight pre, .sumi-prose .codehilite pre { margin: 0; }
.sumi-prose .highlight .hll { display: block; margin: 0 -18px; padding: 0 18px; background: var(--hl-mark); box-shadow: inset 3px 0 0 var(--hl-num); }
.sumi-prose .highlighttable { width: 100%; border-collapse: collapse; }
.sumi-prose .highlighttable td { padding: 0; border: 0; }
.sumi-prose .highlighttable .linenos { width: 1%; user-select: none; }
.sumi-prose .highlighttable .linenos pre { color: var(--sumi-fg-3); border-right: 0; border-radius: var(--sumi-radius) 0 0 var(--sumi-radius); background: var(--sumi-code-head); text-align: right; }
.sumi-prose .highlighttable .code pre { border-radius: 0 var(--sumi-radius) var(--sumi-radius) 0; }
.sumi-prose .linenos .normal, .sumi-prose .linenos .special { color: var(--sumi-fg-3); }
.sumi-copy {
  position: absolute; top: 8px; right: 8px; z-index: 2; display: grid; place-items: center; width: 30px; height: 30px; padding: 0;
  border: 1px solid var(--sumi-line); border-radius: 7px; background: var(--sumi-bg-elev); color: var(--sumi-fg-3); cursor: pointer;
  opacity: 0; transition: opacity .15s, color .15s;
}
.sumi-copy .sumi-icon { width: 15px; height: 15px; }
:is(.highlight, .codehilite, pre):hover > .sumi-copy, .sumi-copy:focus-visible, .sumi-copy.is-done { opacity: 1; }
.sumi-copy:hover { color: var(--sumi-fg); }
.sumi-copy.is-done { color: var(--c-tip); }
.sumi-code-lang {
  position: absolute; top: 9px; right: 46px; z-index: 1; color: var(--sumi-fg-3); font: 500 11px/1 var(--sumi-font-mono);
  text-transform: lowercase; letter-spacing: .02em; pointer-events: none; opacity: .8; transition: opacity .15s;
}
:is(.highlight, .codehilite):hover > .sumi-code-lang { opacity: 0; }

/* Titled code */
.sumi-code { margin: 0 0 1.25em; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-code-bg); overflow: hidden; }
.sumi-code-title {
  display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-bottom: 1px solid var(--sumi-line); background: var(--sumi-code-head);
  color: var(--sumi-fg-2); font: 500 12.5px/1.4 var(--sumi-font-mono);
}
.sumi-code-title .sumi-icon { width: 14px; height: 14px; color: var(--sumi-fg-3); }
.sumi-code > :is(.highlight, .codehilite, pre) { margin: 0; }
.sumi-code pre { border: 0; border-radius: 0; }

/* Pygments tokens */
.highlight .c, .highlight .ch, .highlight .cm, .highlight .c1, .highlight .cs, .highlight .cpf,
.codehilite .c, .codehilite .ch, .codehilite .cm, .codehilite .c1, .codehilite .cs { color: var(--hl-com); font-style: italic; }
.highlight .cp, .codehilite .cp { color: var(--hl-kw); }
.highlight :is(.k, .kd, .kn, .kp, .kr, .ow), .codehilite :is(.k, .kd, .kn, .kp, .kr, .ow) { color: var(--hl-kw); }
.highlight .kc, .codehilite .kc { color: var(--hl-bi); }
.highlight .kt, .codehilite .kt { color: var(--hl-type); }
.highlight :is(.s, .sa, .sb, .sc, .dl, .s1, .s2, .sh, .sx, .ss), .codehilite :is(.s, .sa, .sb, .sc, .dl, .s1, .s2, .sh, .sx, .ss) { color: var(--hl-str); }
.highlight :is(.sd), .codehilite :is(.sd) { color: var(--hl-com); }
.highlight :is(.se, .si, .sr), .codehilite :is(.se, .si, .sr) { color: var(--hl-attr); }
.highlight :is(.m, .mb, .mf, .mh, .mi, .mo, .il), .codehilite :is(.m, .mb, .mf, .mh, .mi, .mo, .il) { color: var(--hl-num); }
.highlight :is(.nf, .fm), .codehilite :is(.nf, .fm) { color: var(--hl-fn); }
.highlight :is(.nc, .nn, .ne), .codehilite :is(.nc, .nn, .ne) { color: var(--hl-type); }
.highlight :is(.nb, .bp), .codehilite :is(.nb, .bp) { color: var(--hl-bi); }
.highlight :is(.nd, .ni, .nl), .codehilite :is(.nd, .ni, .nl) { color: var(--hl-attr); }
.highlight :is(.na), .codehilite :is(.na) { color: var(--hl-attr); }
.highlight :is(.nt), .codehilite :is(.nt) { color: var(--hl-kw); }
.highlight :is(.nv, .vc, .vg, .vi, .vm), .codehilite :is(.nv, .vc, .vg, .vi, .vm) { color: var(--hl-var); }
.highlight :is(.no), .codehilite :is(.no) { color: var(--hl-num); }
.highlight :is(.o), .codehilite :is(.o) { color: var(--hl-op); }
.highlight :is(.p), .codehilite :is(.p) { color: var(--sumi-fg-2); }
.highlight .gd, .codehilite .gd { color: var(--c-caution); background: var(--hl-del-bg); display: inline-block; width: 100%; }
.highlight .gi, .codehilite .gi { color: var(--c-tip); background: var(--hl-ins-bg); display: inline-block; width: 100%; }
.highlight :is(.gh, .gu), .codehilite :is(.gh, .gu) { color: var(--hl-fn); font-weight: 600; }
.highlight .gp, .codehilite .gp { color: var(--hl-com); user-select: none; }
.highlight .go, .codehilite .go { color: var(--sumi-fg-2); }
.highlight .ge, .codehilite .ge { font-style: italic; }
.highlight .gs, .codehilite .gs { font-weight: 700; }
.highlight .err, .codehilite .err { color: inherit; }

/* ── Tables ─────────────────────────────────────────────────────────────── */
.sumi-table { margin: 0 0 1.4em; overflow-x: auto; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-bg-elev); scrollbar-width: thin; }
.sumi-prose table { width: 100%; border-collapse: collapse; font-size: 14.5px; line-height: 1.55; font-variant-numeric: tabular-nums; }
.sumi-prose :not(.sumi-table) > table { margin: 0 0 1.4em; }
.sumi-prose th { padding: 10px 14px; background: var(--sumi-bg-soft); color: var(--sumi-fg); font-weight: 600; text-align: left; white-space: nowrap; border-bottom: 1px solid var(--sumi-line-2); }
.sumi-prose td { padding: 10px 14px; border-top: 1px solid var(--sumi-line); vertical-align: top; }
.sumi-prose tbody tr:first-child td { border-top: 0; }
.sumi-prose tbody tr:hover td { background: color-mix(in srgb, var(--sumi-bg-soft) 55%, transparent); }
.sumi-prose caption { caption-side: top; padding: 10px 14px; color: var(--sumi-fg-2); font-size: 13.5px; font-weight: 500; text-align: left; border-bottom: 1px solid var(--sumi-line); }
.sumi-table--compact :is(th, td) { padding: 6px 10px; font-size: 13.5px; }
.sumi-table--striped tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--sumi-bg-soft) 60%, transparent); }
.sumi-table--center :is(th, td) { text-align: center; }
.sumi-table--wide { width: min(100vw - 40px, calc(var(--sumi-content-w) + var(--sumi-rail-w) + 48px)); }

/* ── Callouts (and MkDocs admonitions) ─────────────────────────────────── */
.sumi-callout, .sumi-prose .admonition, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) {
  --c: var(--c-note);
  margin: 0 0 1.25em; padding: 12px 16px; border: 1px solid color-mix(in srgb, var(--c) 22%, var(--sumi-line));
  border-left: 3px solid var(--c); border-radius: var(--sumi-radius-sm) var(--sumi-radius) var(--sumi-radius) var(--sumi-radius-sm);
  background: color-mix(in srgb, var(--c) 5%, var(--sumi-bg-elev)); font-size: 15px; line-height: 1.65;
}
.sumi-prose .sumi-callout-title, .sumi-prose .admonition-title, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary {
  display: flex; align-items: center; gap: 8px; margin: 0 0 4px; color: var(--c); font-weight: 650; font-size: 14.5px;
}
.sumi-callout-title .sumi-icon { width: 17px; height: 17px; }
.sumi-callout-body > :last-child, .sumi-prose .admonition > :last-child, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > :last-child { margin-bottom: 0; }
.sumi-callout-body > :first-child { margin-top: 0; }
.sumi-callout pre, .sumi-prose .admonition pre { background: var(--sumi-bg-elev); }
details.sumi-callout > summary, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary { margin: -12px -16px; padding: 12px 16px; cursor: pointer; list-style: none; }
details.sumi-callout > summary::-webkit-details-marker, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary::-webkit-details-marker { display: none; }
details.sumi-callout > summary::after, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary::after {
  content: ""; width: 8px; height: 8px; margin-left: auto; border: solid currentColor; border-width: 0 1.6px 1.6px 0; transform: rotate(-45deg);
  transition: transform .18s var(--sumi-ease); opacity: .7;
}
details.sumi-callout[open] > summary, .sumi-prose details[open]:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary { margin-bottom: 4px; }
details.sumi-callout[open] > summary::after, .sumi-prose details[open]:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline)) > summary::after { transform: rotate(45deg); }
.sumi-prose .sumi-callout--tip, .sumi-prose :is(.admonition, details):is(.tip, .hint, .success, .check, .done) { --c: var(--c-tip); }
.sumi-prose .sumi-callout--important, .sumi-prose :is(.admonition, details):is(.important, .question, .help, .faq, .example, .abstract, .summary, .tldr) { --c: var(--c-important); }
.sumi-prose .sumi-callout--warning, .sumi-prose :is(.admonition, details):is(.warning, .attention) { --c: var(--c-warning); }
.sumi-prose .sumi-callout--caution, .sumi-prose :is(.admonition, details):is(.caution, .danger, .error, .failure, .fail, .missing, .bug) { --c: var(--c-caution); }
.sumi-prose .sumi-callout--quote, .sumi-prose :is(.admonition, details):is(.quote, .cite) { --c: var(--c-quote); }
.sumi-prose .admonition-title::before, .sumi-prose details:where(:not(.sumi-filetree *, .sumi-faq *, .sumi-toc-inline, .sumi-callout)) > summary::before {
  content: ""; width: 17px; height: 17px; flex: none; background: currentColor;
  -webkit-mask: var(--sumi-admon-icon) center / contain no-repeat; mask: var(--sumi-admon-icon) center / contain no-repeat;
}
.sumi-prose :is(.admonition, details) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.tip, .hint) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.success, .check, .done) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.warning, .attention, .caution) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.danger, .error, .failure, .fail, .missing, .bug) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16h.01"/><path d="M12 8v4"/><path d="M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.question, .help, .faq) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></svg>'); }
.sumi-prose :is(.admonition, details):is(.quote, .cite) { --sumi-admon-icon: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"/><path d="M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"/></svg>'); }

/* ── Steps ──────────────────────────────────────────────────────────────── */
.sumi-prose ol.sumi-steps { --gap: 1.6em; list-style: none; counter-reset: sumi-step; padding-left: 0; margin: 1.6em 0; }
.sumi-steps > li { position: relative; counter-increment: sumi-step; margin: 0; padding: 0 0 var(--gap) 3.1em; }
.sumi-steps > li::before {
  content: counter(sumi-step); position: absolute; left: 0; top: .05em; display: grid; place-items: center; width: 2em; height: 2em;
  border: 1px solid var(--sumi-line-2); border-radius: 50%; background: var(--sumi-bg-elev); color: var(--sumi-fg); font-size: .85em; font-weight: 650;
  box-shadow: 0 0 0 4px var(--sumi-bg);
}
.sumi-steps > li::after { content: ""; position: absolute; left: calc(1em * .85 - .5px); top: 2.1em; bottom: .3em; width: 1px; background: var(--sumi-line-2); }
.sumi-steps > li:last-child { padding-bottom: 0; }
.sumi-steps > li:last-child::after { display: none; }
.sumi-steps > li > p:first-child { margin-top: 0; font-weight: 600; color: var(--sumi-fg); }
.sumi-steps > li > :not(p:first-child) { font-weight: 400; }

/* ── Cards ──────────────────────────────────────────────────────────────── */
.sumi-prose ul.sumi-cards {
  --cols: 2; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc((100% - (var(--cols) - 1) * 14px) / var(--cols))), 1fr));
  gap: 14px; margin: 1.4em 0; padding: 0; list-style: none;
}
.sumi-cards > li {
  position: relative; margin: 0; padding: 18px 20px; border: 1px solid var(--sumi-line); border-radius: 12px; background: var(--sumi-bg-elev);
  color: var(--sumi-fg-2); font-size: 14.5px; line-height: 1.6; transition: border-color .15s, box-shadow .15s, transform .15s var(--sumi-ease);
}
.sumi-cards > li:hover { border-color: var(--sumi-line-2); box-shadow: var(--sumi-shadow-md); }
.sumi-cards > li:has(a):hover { transform: translateY(-1px); }
.sumi-cards > li > :last-child { margin-bottom: 0; }
.sumi-cards > li > a:first-child, .sumi-cards > li > p:first-child > a:first-child,
.sumi-cards > li > svg:first-child + a, .sumi-cards > li > p:first-child > svg:first-child + a {
  display: block; margin-bottom: 4px; color: var(--sumi-fg); font-size: 15.5px; font-weight: 650; text-decoration: none;
}
.sumi-cards > li a:first-of-type::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
.sumi-cards > li > p:first-child { margin: 0; }
.sumi-cards .sumi-icon-inline { display: block; width: 26px; height: 26px; margin-bottom: 12px; padding: 5px; border-radius: 8px; background: color-mix(in srgb, var(--sumi-accent) 10%, transparent); box-sizing: content-box; }

/* ── Fields ─────────────────────────────────────────────────────────────── */
.sumi-fields { margin: 1.4em 0; border-top: 1px solid var(--sumi-line); }
.sumi-field { padding: 14px 0; border-bottom: 1px solid var(--sumi-line); }
.sumi-field-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.sumi-field-name { color: var(--sumi-fg); font-weight: 650; }
.sumi-field-name code { padding: .12em .45em; font-size: .9em !important; font-weight: 650 !important; }
.sumi-chip {
  display: inline-flex; align-items: center; gap: 3px; height: 22px; padding: 0 8px; border-radius: 999px; background: var(--sumi-bg-soft);
  color: var(--sumi-fg-2); font: 500 12px/1 var(--sumi-font-mono); white-space: nowrap;
}
.sumi-chip code { padding: 0 !important; background: none !important; font-size: 1em !important; }
.sumi-chip-key { color: var(--sumi-fg-3); font-family: var(--sumi-font); }
.sumi-chip[data-key="type"] { background: color-mix(in srgb, var(--c-note) 11%, transparent); color: var(--c-note); }
.sumi-chip--required { background: color-mix(in srgb, var(--c-caution) 11%, transparent); color: var(--c-caution); font-family: var(--sumi-font); }
.sumi-field-body { margin-top: 6px; color: var(--sumi-fg-2); font-size: 15px; }
.sumi-field-body p:last-child { margin-bottom: 0; }

/* ── API reference (mkdocstrings) ──────────────────────────────────────── */
.sumi-prose .doc-heading { font-size: 1.1rem; line-height: 1.5; }
.sumi-prose .doc-heading > code {
  padding: 0; background: none; font: 600 .84em/1.6 var(--sumi-font-mono); overflow-wrap: anywhere; letter-spacing: 0;
}
.sumi-prose .doc-heading > code .n, .sumi-prose .doc-heading > code .nb { color: var(--sumi-fg); }
.sumi-prose .doc-heading > code .fm, .sumi-prose .doc-heading > code .nf { color: var(--hl-fn); }
.sumi-prose .doc-heading > code.doc-symbol { margin-right: 6px; vertical-align: .15em; }
.sumi-prose .doc-heading .doc-labels { margin-left: 6px; vertical-align: .15em; }
.sumi-prose .doc-object .doc-object { margin-top: 1.6em; }
.sumi-prose .doc-object .doc-object > .doc-heading { margin: 0 0 .5em; padding-top: 1.1em; border-top: 1px dashed var(--sumi-line); font-size: 1rem; }
.sumi-prose .doc-contents { padding-left: 16px; border-left: 2px solid var(--sumi-line); }
.sumi-prose .doc-contents.first { padding-left: 0; border-left: 0; }
.sumi-prose .doc-children { margin-top: 1em; }
.sumi-prose .doc-labels { display: inline-flex; flex-wrap: wrap; gap: 4px; line-height: 1; }
.sumi-prose .doc-label {
  display: inline-block; padding: 1px 7px; border: 1px solid var(--sumi-line-2); border-radius: 999px; color: var(--sumi-fg-3);
  font: 500 11.5px/1.5 var(--sumi-font); letter-spacing: .01em;
}
.sumi-prose .doc-label code { padding: 0; background: none; color: inherit; font: inherit; }
.sumi-prose .doc-section-title { color: var(--sumi-fg-2); font-weight: 650; font-size: .78rem; letter-spacing: .06em; text-transform: uppercase; }
.sumi-prose .doc-section-item { margin: .5em 0; }
.sumi-prose .doc-md-description { display: inline; }
.sumi-prose .doc-md-description > p:only-child { display: inline; }
.sumi-prose .doc-signature { margin-bottom: 1em; }
/* Doubled class: beats the prose inline-code rule. */
code.doc-symbol.doc-symbol { display: inline-block; min-width: 1.6em; padding: 0 .3em; border-radius: 4px; font: 600 .72em/1.6 var(--sumi-font-mono); text-align: center; }
code.doc-symbol.doc-symbol-module { background: color-mix(in srgb, var(--c-important) 14%, transparent); color: var(--c-important); }
code.doc-symbol.doc-symbol-class { background: color-mix(in srgb, var(--c-note) 14%, transparent); color: var(--c-note); }
code.doc-symbol.doc-symbol-function, code.doc-symbol.doc-symbol-method { background: color-mix(in srgb, var(--c-tip) 14%, transparent); color: var(--c-tip); }
code.doc-symbol.doc-symbol-attribute { background: color-mix(in srgb, var(--c-warning) 14%, transparent); color: var(--c-warning); }
code.doc-symbol.doc-symbol-module::after { content: "mod"; }
code.doc-symbol.doc-symbol-class::after { content: "class"; }
code.doc-symbol.doc-symbol-function::after { content: "func"; }
code.doc-symbol.doc-symbol-method::after { content: "meth"; }
code.doc-symbol.doc-symbol-attribute::after { content: "attr"; }
.sumi-toc code.doc-symbol.doc-symbol { margin-right: 4px; font-size: .68em; }

/* ── Figures, images, diagrams ─────────────────────────────────────────── */
.sumi-figure, .sumi-diagram { margin: 1.6em 0; text-align: center; }
.sumi-figure img { display: block; margin: 0 auto; border: 1px solid var(--sumi-line); }
.sumi-figure figcaption, .sumi-diagram figcaption { margin-top: 10px; color: var(--sumi-fg-3); font-size: 13.5px; }
.sumi-prose img.sumi-zoomable { cursor: zoom-in; }
.sumi-diagram pre.mermaid {
  display: flex; justify-content: center; margin: 0; padding: 20px; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius);
  background: var(--sumi-bg-elev); font-family: var(--sumi-font); white-space: pre; color: var(--sumi-fg-3); overflow-x: auto;
}
.sumi-diagram pre.mermaid[data-processed] { white-space: normal; color: inherit; }
.sumi-diagram pre.mermaid svg { max-width: 100%; height: auto; }
.sumi-math.math-display { margin: 1.4em 0; overflow-x: auto; overflow-y: hidden; text-align: center; font-family: var(--sumi-font-mono); color: var(--sumi-fg-2); }
.sumi-math.math-display .katex-display { margin: 0; }
.sumi-math:not([data-rendered]) { white-space: pre-wrap; }

/* ── Tabs ───────────────────────────────────────────────────────────────── */
.sumi-tabs { margin: 0 0 1.3em; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-code-bg); overflow: hidden; }
.sumi-tablist { display: flex; gap: 2px; padding: 0 8px; overflow-x: auto; border-bottom: 1px solid var(--sumi-line); background: var(--sumi-code-head); scrollbar-width: none; }
.sumi-tablist button {
  position: relative; padding: 9px 10px; border: 0; background: none; color: var(--sumi-fg-3); font-size: 13px; font-weight: 550; white-space: nowrap; cursor: pointer;
}
.sumi-tablist button:hover { color: var(--sumi-fg); }
.sumi-tablist button[aria-selected="true"] { color: var(--sumi-fg); }
.sumi-tablist button[aria-selected="true"]::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: -1px; height: 2px; border-radius: 2px; background: var(--sumi-accent); }
.sumi-tab > :is(.highlight, .codehilite, pre, .sumi-code) { margin: 0; }
.sumi-tab :is(pre, .sumi-code) { border: 0; border-radius: 0; }
.js .sumi-tabs[data-ready] .sumi-tab:not(.is-active) { display: none; }
.js .sumi-tabs[data-ready] .sumi-tab-label { display: none; }
.sumi-tab-label { padding: 8px 14px 0; color: var(--sumi-fg-3); font-size: 12.5px; font-weight: 600; }
.sumi-tab + .sumi-tab { border-top: 1px solid var(--sumi-line); }
.js .sumi-tabs[data-ready] .sumi-tab + .sumi-tab { border-top: 0; }
/* pymdownx.tabbed (alternate style) */
.sumi-prose .tabbed-set { position: relative; display: flex; flex-wrap: wrap; margin: 0 0 1.3em; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-bg-elev); }
.sumi-prose .tabbed-set > input { position: absolute; opacity: 0; pointer-events: none; }
.sumi-prose .tabbed-labels { display: flex; width: 100%; gap: 2px; padding: 0 8px; overflow-x: auto; border-bottom: 1px solid var(--sumi-line); background: var(--sumi-code-head); border-radius: var(--sumi-radius) var(--sumi-radius) 0 0; }
.sumi-prose .tabbed-labels > label { position: relative; padding: 9px 10px; color: var(--sumi-fg-3); font-size: 13px; font-weight: 550; white-space: nowrap; cursor: pointer; }
.sumi-prose .tabbed-content { width: 100%; }
.sumi-prose .tabbed-block { display: none; padding: 14px 16px 2px; }
.sumi-prose .tabbed-block > :is(.highlight, pre) { margin-left: -16px; margin-right: -16px; }
.sumi-prose .tabbed-block > :first-child:is(.highlight, pre) { margin-top: -14px; }
.sumi-prose .tabbed-block pre { border-left: 0; border-right: 0; border-radius: 0; }
.sumi-prose .tabbed-set > input:nth-child(1):checked ~ .tabbed-content > :nth-child(1),
.sumi-prose .tabbed-set > input:nth-child(2):checked ~ .tabbed-content > :nth-child(2),
.sumi-prose .tabbed-set > input:nth-child(3):checked ~ .tabbed-content > :nth-child(3),
.sumi-prose .tabbed-set > input:nth-child(4):checked ~ .tabbed-content > :nth-child(4),
.sumi-prose .tabbed-set > input:nth-child(5):checked ~ .tabbed-content > :nth-child(5),
.sumi-prose .tabbed-set > input:nth-child(6):checked ~ .tabbed-content > :nth-child(6),
.sumi-prose .tabbed-set > input:nth-child(7):checked ~ .tabbed-content > :nth-child(7),
.sumi-prose .tabbed-set > input:nth-child(8):checked ~ .tabbed-content > :nth-child(8) { display: block; }
.sumi-prose .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1),
.sumi-prose .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2),
.sumi-prose .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3),
.sumi-prose .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4),
.sumi-prose .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5),
.sumi-prose .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6),
.sumi-prose .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7),
.sumi-prose .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8) { color: var(--sumi-fg); box-shadow: inset 0 -2px 0 var(--sumi-accent); }

/* ── File tree ──────────────────────────────────────────────────────────── */
.sumi-filetree {
  margin: 0 0 1.3em; padding: 12px 6px; border: 1px solid var(--sumi-line); border-radius: var(--sumi-radius); background: var(--sumi-code-bg);
  font: 400 13.5px/1.5 var(--sumi-font-mono); overflow-x: auto;
}
.sumi-ft-title { margin: -12px -6px 8px; padding: 8px 14px; border-bottom: 1px solid var(--sumi-line); background: var(--sumi-code-head); color: var(--sumi-fg-2); font-size: 12.5px; }
.sumi-filetree ul { margin: 0; padding: 0; list-style: none; }
.sumi-filetree ul ul { margin-left: 15px; padding-left: 10px; border-left: 1px dashed var(--sumi-line-2); }
.sumi-filetree li { margin: 0; }
.sumi-filetree details > summary { list-style: none; cursor: pointer; }
.sumi-filetree details > summary::-webkit-details-marker { display: none; }
.sumi-ft-row {
  display: grid; grid-template-columns: 18px calc(var(--ft-col) - var(--d) * 25px - 22px) minmax(0, 1fr); align-items: center; gap: 6px;
  min-height: 27px; padding: 1px 8px; border-radius: 6px; white-space: nowrap;
}
.sumi-filetree[data-notes="false"] .sumi-ft-row { grid-template-columns: 18px auto; }
.sumi-ft-row:hover { background: var(--sumi-bg-soft); }
.sumi-ft-row .sumi-icon { width: 16px; height: 16px; color: var(--sumi-fg-3); }
.sumi-ft-dir > details > summary .sumi-icon, .sumi-ft-dir > .sumi-ft-row .sumi-icon { color: var(--sumi-accent); }
.sumi-ft-open { display: none; }
.sumi-ft-dir details[open] > summary .sumi-ft-open { display: block; }
.sumi-ft-dir details[open] > summary .sumi-ft-closed { display: none; }
.sumi-ft-name { overflow: hidden; text-overflow: ellipsis; color: var(--sumi-fg); }
.sumi-ft-dir .sumi-ft-name { font-weight: 600; }
.sumi-ft-slash { color: var(--sumi-fg-3); font-weight: 400; }
.sumi-ft-note { color: var(--sumi-fg-3); font-family: var(--sumi-font); font-size: 13px; white-space: normal; }

/* ── Article footer & pager ────────────────────────────────────────────── */
.sumi-article-footer { margin-top: 56px; }
.sumi-meta-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px; padding: 14px 0; border-top: 1px solid var(--sumi-line); color: var(--sumi-fg-3); font-size: 13.5px; }
.sumi-meta { display: inline-flex; align-items: center; gap: 6px; color: var(--sumi-fg-3); }
.sumi-meta .sumi-icon { width: 14px; height: 14px; }
a.sumi-meta:hover { color: var(--sumi-fg); }
.sumi-pager { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 16px; }
.sumi-pager a {
  display: flex; flex-direction: column; gap: 4px; padding: 14px 18px; border: 1px solid var(--sumi-line); border-radius: 12px; background: var(--sumi-bg-elev);
  transition: border-color .15s, box-shadow .15s;
}
.sumi-pager a:hover { border-color: color-mix(in srgb, var(--sumi-accent) 45%, var(--sumi-line)); box-shadow: var(--sumi-shadow-sm); }
.sumi-pager-next { text-align: right; align-items: flex-end; grid-column: 2; }
.sumi-pager-label { display: inline-flex; align-items: center; gap: 6px; color: var(--sumi-fg-3); font-size: 13px; }
.sumi-pager-label .sumi-icon { width: 14px; height: 14px; }
.sumi-pager-title { color: var(--sumi-fg); font-weight: 600; font-size: 15.5px; }
.sumi-pager a:hover .sumi-pager-title { color: var(--sumi-accent); }

/* ── Footer ─────────────────────────────────────────────────────────────── */
.sumi-footer { border-top: 1px solid var(--sumi-line); background: var(--sumi-bg); }
.sumi-footer-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; max-width: 1480px; margin: 0 auto; padding: 22px 20px; color: var(--sumi-fg-3); font-size: 13.5px; }
.sumi-footer a { color: var(--sumi-fg-2); }
.sumi-footer a:hover { color: var(--sumi-fg); }
.sumi-footer-left { display: flex; flex-direction: column; gap: 2px; }
.sumi-footer-right { display: flex; align-items: center; gap: 2px; }
.sumi-footer-right .sumi-icon-btn { width: 34px; height: 34px; }
.sumi-footer-right .sumi-icon-btn .sumi-icon { width: 17px; height: 17px; }

/* ── Palette (search + commands) ───────────────────────────────────────── */
dialog { color: inherit; }
.sumi-palette, .sumi-help {
  width: min(680px, calc(100vw - 24px)); max-height: min(620px, calc(100vh - 120px)); margin: 10vh auto auto; padding: 0;
  border: 1px solid var(--sumi-line-2); border-radius: 16px; background: var(--sumi-bg-elev); box-shadow: var(--sumi-shadow-lg); overflow: hidden;
}
.sumi-palette::backdrop, .sumi-help::backdrop, .sumi-zoom::backdrop { background: rgba(15, 14, 12, .42); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.sumi-palette[open] { display: flex; animation: sumi-pop .16s var(--sumi-ease); }
@keyframes sumi-pop { from { opacity: 0; transform: translateY(-6px) scale(.985); } }
.sumi-palette-box { display: flex; flex-direction: column; width: 100%; max-height: inherit; }
.sumi-palette-input { display: flex; align-items: center; gap: 12px; padding: 0 16px; border-bottom: 1px solid var(--sumi-line); }
.sumi-palette-input > .sumi-icon { width: 19px; height: 19px; color: var(--sumi-fg-3); }
.sumi-palette-input input { flex: 1; height: 56px; border: 0; outline: 0; background: none; color: var(--sumi-fg); font: 400 16.5px var(--sumi-font); }
.sumi-palette-input input::-webkit-search-cancel-button { display: none; }
.sumi-palette-results { flex: 1; overflow-y: auto; padding: 8px; overscroll-behavior: contain; }
.sumi-palette-group { padding: 10px 10px 4px; color: var(--sumi-fg-3); font-size: 12px; font-weight: 600; letter-spacing: .03em; }
.sumi-palette-item {
  display: flex; align-items: flex-start; gap: 12px; padding: 9px 10px; border-radius: 9px; color: var(--sumi-fg); cursor: pointer; scroll-margin: 8px;
}
.sumi-palette-item .sumi-icon { width: 17px; height: 17px; margin-top: 2px; color: var(--sumi-fg-3); }
.sumi-palette-item[aria-selected="true"] { background: color-mix(in srgb, var(--sumi-accent) 9%, var(--sumi-bg-soft)); }
.sumi-palette-item[aria-selected="true"] .sumi-icon { color: var(--sumi-accent); }
.sumi-palette-text { min-width: 0; flex: 1; }
.sumi-palette-title { display: block; font-size: 14.5px; font-weight: 550; line-height: 1.4; }
.sumi-palette-path { display: block; color: var(--sumi-fg-3); font-size: 12.5px; line-height: 1.4; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sumi-palette-snippet { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-top: 2px; color: var(--sumi-fg-2); font-size: 13px; line-height: 1.5; }
.sumi-palette mark { background: none; color: var(--sumi-accent); font-weight: 650; }
.sumi-palette-empty { padding: 36px 12px; color: var(--sumi-fg-3); text-align: center; font-size: 14px; }
.sumi-palette-foot { display: flex; gap: 18px; padding: 10px 16px; border-top: 1px solid var(--sumi-line); background: var(--sumi-bg-soft); color: var(--sumi-fg-3); font-size: 12px; }
.sumi-palette-foot span { display: inline-flex; align-items: center; gap: 4px; }
.sumi-palette-foot kbd { height: 19px; min-width: 19px; justify-content: center; font-size: 11px; }
.sumi-help { width: min(440px, calc(100vw - 24px)); }
.sumi-help-box { padding: 6px 20px 20px; }
.sumi-help-head { display: flex; align-items: center; justify-content: space-between; padding: 8px 0 12px; }
.sumi-help dl { display: grid; grid-template-columns: auto 1fr; gap: 10px 18px; margin: 0; font-size: 14px; }
.sumi-help dt { display: flex; gap: 4px; }
.sumi-help dd { margin: 0; color: var(--sumi-fg-2); }
.sumi-zoom { max-width: 96vw; max-height: 94vh; padding: 0; border: 0; background: none; box-shadow: none; overflow: visible; }
.sumi-zoom img { display: block; max-width: 96vw; max-height: 94vh; border-radius: 10px; box-shadow: var(--sumi-shadow-lg); cursor: zoom-out; background: var(--sumi-bg-elev); }
.sumi-toast {
  position: fixed; left: 50%; bottom: 28px; z-index: 90; padding: 9px 16px; border-radius: 10px; background: var(--sumi-fg); color: var(--sumi-bg);
  font-size: 14px; font-weight: 500; box-shadow: var(--sumi-shadow-md); opacity: 0; transform: translate(-50%, 8px); pointer-events: none;
  transition: opacity .18s, transform .18s var(--sumi-ease);
}
.sumi-toast.is-on { opacity: 1; transform: translate(-50%, 0); }

/* Version banner */
.sumi-version-banner { padding: 10px 20px; background: color-mix(in srgb, var(--c-warning) 13%, var(--sumi-bg)); border-bottom: 1px solid color-mix(in srgb, var(--c-warning) 30%, transparent); text-align: center; font-size: 14px; }
.sumi-version-banner a { font-weight: 600; }

/* ── 404 ────────────────────────────────────────────────────────────────── */
.sumi-404 { display: grid; place-items: center; min-height: 60vh; text-align: center; }
.sumi-404-code { font-size: 96px; font-weight: 750; letter-spacing: -0.05em; line-height: 1; color: var(--sumi-accent); }
.sumi-404 h1 { margin: 16px 0 8px; font-size: 26px; }
.sumi-404 p { color: var(--sumi-fg-2); }

/* ── Responsive ─────────────────────────────────────────────────────────── */
@media (max-width: 1240px) {
  .sumi-shell { grid-template-columns: var(--sumi-side-w) minmax(0, 1fr); }
  .sumi-shell--no-side { grid-template-columns: minmax(0, 1fr); }
  .sumi-shell--no-side .sumi-main { padding-left: 0; }
  .sumi-shell--no-side .sumi-article { margin: 0 auto; }
  .sumi-rail { display: none; }
  .sumi-toc-inline { display: block; }
  .sumi-search-btn { width: 200px; }
}
@media (max-width: 920px) {
  :root { --sumi-header-h: 56px; }
  .sumi-shell, .sumi-shell--no-toc { grid-template-columns: minmax(0, 1fr); padding: 0 18px; }
  .sumi-menu-btn { display: inline-grid; }
  .sumi-tabs-nav { display: none; }
  .sumi-sidebar {
    position: fixed; inset: var(--sumi-header-h) auto 0 0; z-index: 35; width: min(320px, 86vw); height: auto; padding-left: 12px;
    background: var(--sumi-bg); border-right: 1px solid var(--sumi-line); box-shadow: var(--sumi-shadow-lg);
    transform: translateX(-102%); transition: transform .22s var(--sumi-ease); visibility: hidden;
  }
  .sumi-sidebar.is-open { transform: none; visibility: visible; }
  .sumi-sidebar-tabs { display: block; }
  body.sumi-locked { overflow: hidden; }
  .sumi-scrim { position: fixed; inset: var(--sumi-header-h) 0 0; z-index: 34; background: rgba(15, 14, 12, .35); }
  .sumi-search-btn { width: 36px; padding: 0; justify-content: center; border: 0; background: none; margin: 0; }
  .sumi-search-btn:hover { background: var(--sumi-bg-soft); box-shadow: none; }
  .sumi-search-label, .sumi-search-kbd { display: none; }
  .sumi-search-btn .sumi-icon { width: 19px; height: 19px; color: var(--sumi-fg-2); }
  .sumi-main { padding-top: 20px; }
  .sumi-prose h1 { font-size: 1.95rem; }
  .sumi-prose h2 { font-size: 1.38rem; }
  .sumi-copy-page span { display: none; }
  .sumi-pager { grid-template-columns: 1fr; }
  .sumi-pager-next { grid-column: 1; }
  .sumi-palette { margin-top: 12px; max-height: calc(100vh - 24px); }
  .sumi-palette-foot { display: none; }
  .sumi-table--wide { width: auto; }
}
@media (max-width: 520px) {
  .sumi-brand-name { font-size: 15.5px; }
  .sumi-header-inner { padding: 0 12px; gap: 2px; }
  .sumi-article-top { flex-wrap: wrap; }
}
.sumi-sidebar-tabs { display: none; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 0s !important; animation-duration: 0s !important; scroll-behavior: auto !important; }
}

/* ── Print ──────────────────────────────────────────────────────────────── */
@media print {
  :root, [data-theme="dark"] {
    --sumi-bg: #fff; --sumi-bg-elev: #fff; --sumi-bg-soft: #f5f4f1; --sumi-fg: #111; --sumi-fg-2: #333; --sumi-fg-3: #666;
    --sumi-code-bg: #fafaf8; --sumi-code-head: #f2f1ee; --sumi-line: #ddd; --sumi-line-2: #ccc; --sumi-link: #1b4a78; color-scheme: light;
  }
  body { font-size: 11pt; display: block; }
  .sumi-header, .sumi-sidebar, .sumi-rail, .sumi-footer, .sumi-actions, .sumi-toc-inline, .sumi-pager, .sumi-copy, .sumi-code-lang,
  .sumi-announce, .sumi-version-banner, .sumi-skip, .sumi-tablist, .headerlink, .sumi-meta-row .sumi-edit, dialog, .sumi-toast { display: none !important; }
  .sumi-shell { display: block; max-width: none; padding: 0; }
  .sumi-main { padding: 0; }
  .sumi-article { max-width: none; }
  .js .sumi-tabs[data-ready] .sumi-tab:not(.is-active), .js .sumi-tabs[data-ready] .sumi-tab-label { display: block !important; }
  .sumi-prose pre { white-space: pre-wrap; word-break: break-word; }
  .sumi-prose a { color: inherit; text-decoration: underline; }
  .sumi-prose a[href^="http"]:not(:has(img))::after { content: " (" attr(href) ")"; font-size: 0.85em; color: var(--sumi-fg-3); word-break: break-all; }
  .sumi-prose h2, .sumi-prose h3 { break-after: avoid; }
  .sumi-prose pre, .sumi-prose table, .sumi-callout, .sumi-figure, .sumi-diagram, .sumi-filetree { break-inside: avoid; }
  .sumi-print-section { break-before: page; }
  .sumi-print-section:first-of-type { break-before: auto; }
  details:not([open]) > :not(summary) { display: block !important; }
}

/* ── Buttons ────────────────────────────────────────────────────────────── */
.sumi-btn {
  display: inline-flex; align-items: center; gap: 8px; height: 42px; padding: 0 18px; border: 1px solid var(--sumi-line-2); border-radius: 10px;
  background: var(--sumi-bg-elev); color: var(--sumi-fg); font-size: 15px; font-weight: 600; text-decoration: none !important; cursor: pointer;
  box-shadow: var(--sumi-shadow-sm); transition: transform .15s var(--sumi-ease), box-shadow .15s, border-color .15s, background .15s;
}
.sumi-btn:hover { color: var(--sumi-fg); border-color: color-mix(in srgb, var(--sumi-fg) 30%, transparent); transform: translateY(-1px); box-shadow: var(--sumi-shadow-md); }
.sumi-btn .sumi-icon { width: 17px; height: 17px; }
.sumi-btn--primary { background: var(--sumi-fg); border-color: var(--sumi-fg); color: var(--sumi-bg); }
.sumi-btn--primary:hover { color: var(--sumi-bg); border-color: var(--sumi-fg); background: color-mix(in srgb, var(--sumi-fg) 88%, var(--sumi-accent)); }
.sumi-btn-arrow { transition: transform .15s var(--sumi-ease); }
.sumi-btn:hover .sumi-btn-arrow { transform: translateX(3px); }
.sumi-actions-row { display: flex; flex-wrap: wrap; gap: 12px; }
.sumi-404 .sumi-btn { margin: 6px 4px; }

/* ── Landing ────────────────────────────────────────────────────────────── */
.sumi-landing { flex: 1; }
.sumi-land-inner { max-width: 1200px; margin: 0 auto; padding: 0 28px; }
.sumi-hero { position: relative; overflow: hidden; padding: 96px 0 88px; border-bottom: 1px solid var(--sumi-line); }
.sumi-hero-bg {
  position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(600px 300px at 82% 18%, color-mix(in srgb, var(--sumi-accent) 13%, transparent), transparent 70%),
    radial-gradient(500px 260px at 8% 90%, color-mix(in srgb, var(--sumi-link) 9%, transparent), transparent 70%),
    linear-gradient(var(--sumi-line) 1px, transparent 1px) 0 0 / 44px 44px,
    linear-gradient(90deg, var(--sumi-line) 1px, transparent 1px) 0 0 / 44px 44px;
  -webkit-mask: radial-gradient(ellipse 85% 75% at 50% 35%, #000 35%, transparent 100%);
  mask: radial-gradient(ellipse 85% 75% at 50% 35%, #000 35%, transparent 100%);
  opacity: .9;
}
.sumi-hero-inner { position: relative; }
.sumi-hero--split .sumi-hero-inner { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); align-items: center; gap: 56px; }
.sumi-eyebrow {
  display: inline-flex; align-items: center; gap: 9px; margin-bottom: 20px; color: var(--sumi-fg-2);
  font: 500 12.5px/1 var(--sumi-font-mono); letter-spacing: .08em; text-transform: uppercase;
}
.sumi-eyebrow-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--sumi-accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--sumi-accent) 18%, transparent); }
.sumi-hero-title { margin: 0 0 22px; color: var(--sumi-fg); font-size: clamp(2.6rem, 5.4vw, 4.4rem); font-weight: 760; line-height: 1.04; letter-spacing: -0.045em; }
.sumi-hero-title em { font-style: normal; color: var(--sumi-accent); }
.sumi-hero-text { max-width: 36em; margin: 0 0 32px; color: var(--sumi-fg-2); font-size: 1.2rem; line-height: 1.6; }
.sumi-install {
  display: inline-flex; align-items: center; gap: 10px; margin-top: 22px; padding: 9px 14px; border: 1px dashed var(--sumi-line-2); border-radius: 10px;
  background: color-mix(in srgb, var(--sumi-bg-elev) 70%, transparent); color: var(--sumi-fg-2); font: 500 14px var(--sumi-font-mono); cursor: pointer;
}
.sumi-install:hover { border-style: solid; color: var(--sumi-fg); }
.sumi-install code { font: inherit; }
.sumi-install-prompt { color: var(--sumi-accent); }
.sumi-install .sumi-icon { width: 15px; height: 15px; color: var(--sumi-fg-3); }
.sumi-hero-art img { width: 100%; border-radius: 14px; }
.sumi-land-code {
  position: relative; border: 1px solid var(--sumi-line-2); border-radius: 14px; background: var(--sumi-code-bg); box-shadow: var(--sumi-shadow-lg); overflow: hidden;
}
.sumi-hero .sumi-land-code { transform: perspective(1400px) rotateY(-5deg) rotateX(2deg); }
.sumi-land-code-bar { display: flex; align-items: center; gap: 7px; height: 40px; padding: 0 14px; border-bottom: 1px solid var(--sumi-line); background: var(--sumi-code-head); }
.sumi-land-code-bar span { width: 11px; height: 11px; border-radius: 50%; background: var(--sumi-line-2); }
.sumi-land-code-bar span:first-child { background: color-mix(in srgb, var(--sumi-accent) 75%, transparent); }
.sumi-land-code-bar em { margin-left: 8px; color: var(--sumi-fg-3); font: 500 12.5px var(--sumi-font-mono); font-style: normal; }
.sumi-land-code :is(.highlight, .codehilite) { margin: 0; }
.sumi-land-code pre { margin: 0; padding: 18px 20px; border: 0; border-radius: 0; background: transparent; font: 400 13.5px/1.7 var(--sumi-font-mono); overflow-x: auto; }
.sumi-land-code .sumi-copy { display: none; }
.sumi-land-section { padding: 88px 0; border-bottom: 1px solid var(--sumi-line); }
.sumi-land--soft { background: var(--sumi-bg-soft); }
.sumi-land-head { max-width: 760px; margin-bottom: 44px; }
.sumi-land-head h2 { margin: 0 0 14px; color: var(--sumi-fg); font-size: clamp(1.9rem, 3.4vw, 2.7rem); font-weight: 720; line-height: 1.12; letter-spacing: -0.035em; }
.sumi-land-lead { margin: 0; color: var(--sumi-fg-2); font-size: 1.12rem; line-height: 1.65; }
.sumi-features { display: grid; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); gap: 1px; overflow: hidden; border: 1px solid var(--sumi-line); border-radius: 16px; background: var(--sumi-line); }
.sumi-feature { display: flex; flex-direction: column; padding: 28px 26px 26px; background: var(--sumi-bg-elev); color: var(--sumi-fg-2); text-decoration: none; transition: background .15s; }
a.sumi-feature:hover { background: color-mix(in srgb, var(--sumi-bg-elev) 85%, var(--sumi-bg-soft)); color: var(--sumi-fg-2); }
.sumi-feature-icon { display: grid; place-items: center; width: 40px; height: 40px; margin-bottom: 18px; border-radius: 10px; background: color-mix(in srgb, var(--sumi-accent) 10%, transparent); color: var(--sumi-accent); }
.sumi-feature-icon .sumi-icon { width: 21px; height: 21px; }
.sumi-feature h3 { margin: 0 0 8px; color: var(--sumi-fg); font-size: 17px; font-weight: 650; letter-spacing: -0.01em; }
.sumi-feature p { margin: 0; font-size: 14.5px; line-height: 1.65; }
.sumi-feature p code { padding: .1em .35em; border-radius: 4px; background: var(--sumi-code-inline); font: 500 .88em var(--sumi-font-mono); color: var(--sumi-fg); }
.sumi-feature-more { display: inline-flex; align-items: center; gap: 4px; margin-top: auto; padding-top: 16px; color: var(--sumi-accent); font-size: 14px; font-weight: 600; }
.sumi-feature-more .sumi-icon { width: 15px; height: 15px; transition: transform .15s; }
a.sumi-feature:hover .sumi-feature-more .sumi-icon { transform: translateX(3px); }
.sumi-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); align-items: center; gap: 64px; }
.sumi-split--reverse .sumi-split-copy { order: 2; }
.sumi-split .sumi-land-head { margin-bottom: 24px; }
.sumi-check-list { margin: 0 0 28px; padding: 0; list-style: none; }
.sumi-check-list li { display: flex; gap: 10px; margin: 0 0 10px; color: var(--sumi-fg-2); }
.sumi-check-list .sumi-icon { margin-top: 4px; color: var(--sumi-accent); }
.sumi-check-list code { padding: .1em .35em; border-radius: 4px; background: var(--sumi-code-inline); font: 500 .88em var(--sumi-font-mono); color: var(--sumi-fg); }
.sumi-split-art img { width: 100%; border-radius: 14px; border: 1px solid var(--sumi-line); box-shadow: var(--sumi-shadow-md); }
.sumi-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1px; margin: 0; overflow: hidden; border: 1px solid var(--sumi-line); border-radius: 16px; background: var(--sumi-line); }
.sumi-stats > div { display: flex; flex-direction: column-reverse; padding: 28px; background: var(--sumi-bg-elev); }
.sumi-stats dd { margin: 0 0 6px; color: var(--sumi-fg); font-size: 2.4rem; font-weight: 740; letter-spacing: -0.04em; line-height: 1; font-variant-numeric: tabular-nums; }
.sumi-stats dt { color: var(--sumi-fg-3); font-size: 14px; }
@media (max-width: 600px) { .sumi-stats { grid-template-columns: 1fr 1fr; } .sumi-stats > div { padding: 20px; } .sumi-stats dd { font-size: 1.9rem; } .sumi-steplist { grid-template-columns: 1fr 1fr; gap: 22px; } }
.sumi-steplist { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 28px; margin: 0; padding: 0; list-style: none; counter-reset: land; }
.sumi-steplist li { counter-increment: land; padding-top: 18px; border-top: 2px solid var(--sumi-fg); }
.sumi-steplist li::before { content: "0" counter(land); display: block; margin-bottom: 10px; color: var(--sumi-accent); font: 600 13px var(--sumi-font-mono); }
.sumi-steplist h3 { margin: 0 0 8px; font-size: 17px; }
.sumi-steplist div { color: var(--sumi-fg-2); font-size: 14.5px; }
.sumi-steplist pre { margin: 10px 0 0; padding: 10px 12px; font-size: 12.5px; }
.sumi-faq { max-width: 820px; border-top: 1px solid var(--sumi-line); }
.sumi-faq details { border-bottom: 1px solid var(--sumi-line); }
.sumi-faq summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 0; color: var(--sumi-fg); font-size: 16.5px; font-weight: 600; list-style: none; cursor: pointer; }
.sumi-faq summary::-webkit-details-marker { display: none; }
.sumi-faq summary::after { content: "+"; color: var(--sumi-fg-3); font-size: 22px; font-weight: 300; transition: transform .2s; }
.sumi-faq details[open] summary::after { transform: rotate(45deg); }
.sumi-faq .sumi-prose { padding: 0 0 18px; color: var(--sumi-fg-2); }
.sumi-cta { padding: 56px 48px; border-radius: 20px; background: var(--sumi-fg); color: var(--sumi-bg); text-align: center; position: relative; overflow: hidden; }
.sumi-cta::before { content: ""; position: absolute; inset: 0; background: radial-gradient(500px 220px at 85% 0%, color-mix(in srgb, var(--sumi-accent) 45%, transparent), transparent 70%); opacity: .7; }
.sumi-cta > * { position: relative; }
.sumi-cta .sumi-land-head { margin: 0 auto 28px; }
.sumi-cta .sumi-land-head h2 { color: var(--sumi-bg); }
.sumi-cta .sumi-land-lead, .sumi-cta .sumi-eyebrow { color: color-mix(in srgb, var(--sumi-bg) 75%, transparent); }
.sumi-cta .sumi-actions-row { justify-content: center; }
.sumi-cta .sumi-btn { background: transparent; color: var(--sumi-bg); border-color: color-mix(in srgb, var(--sumi-bg) 35%, transparent); box-shadow: none; }
.sumi-cta .sumi-btn--primary { background: var(--sumi-bg); color: var(--sumi-fg); border-color: var(--sumi-bg); }
.sumi-land-content .sumi-land-prose { max-width: var(--sumi-content-w); margin: 0 auto; }
.sumi-land-section:last-child { border-bottom: 0; }

/* ── Blog ───────────────────────────────────────────────────────────────── */
.sumi-blog { max-width: 52rem; margin: 0 auto; }
.sumi-blog-head { margin-bottom: 26px; }
.sumi-blog-head h1 { margin-bottom: .3em; }
.sumi-blog-feed a { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; text-decoration: none; }
.sumi-tag-filter { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 28px; }
.sumi-tag {
  display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 11px; border: 1px solid var(--sumi-line-2); border-radius: 999px;
  background: var(--sumi-bg-elev); color: var(--sumi-fg-2); font-size: 13px; font-weight: 500; cursor: pointer; text-decoration: none;
}
.sumi-tag span { color: var(--sumi-fg-3); font-size: 12px; }
.sumi-tag:hover { color: var(--sumi-fg); border-color: color-mix(in srgb, var(--sumi-fg) 30%, transparent); }
.sumi-tag.is-active { background: var(--sumi-fg); border-color: var(--sumi-fg); color: var(--sumi-bg); }
.sumi-tag.is-active span { color: color-mix(in srgb, var(--sumi-bg) 70%, transparent); }
.sumi-tag--static { height: 24px; padding: 0 9px; border-color: transparent; background: var(--sumi-bg-soft); font-size: 12.5px; cursor: inherit; }
a.sumi-tag--static { cursor: pointer; }
.sumi-post-list { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--sumi-line); }
.sumi-post-card { border-bottom: 1px solid var(--sumi-line); }
.sumi-post-link { display: block; padding: 26px 4px; color: var(--sumi-fg-2); text-decoration: none; }
.sumi-post-link:hover { color: var(--sumi-fg-2); }
.sumi-post-link:hover .sumi-post-title { color: var(--sumi-accent); }
.sumi-post-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; color: var(--sumi-fg-3); font-size: 13.5px; font-variant-numeric: tabular-nums; }
.sumi-post-title { margin: 8px 0 8px; color: var(--sumi-fg); font-size: 1.45rem; font-weight: 680; line-height: 1.3; letter-spacing: -0.02em; transition: color .15s; }
.sumi-post-excerpt { margin: 0 0 12px; font-size: 15.5px; line-height: 1.7; }
.sumi-post-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.sumi-authors { display: inline-flex; align-items: center; gap: 6px; margin-right: 6px; color: var(--sumi-fg-2); font-size: 13.5px; }
.sumi-authors img { width: 22px; height: 22px; border-radius: 50%; margin-right: -10px; border: 2px solid var(--sumi-bg); }
.sumi-authors img:last-of-type { margin-right: 2px; }
.sumi-back { display: inline-flex; align-items: center; gap: 6px; color: var(--sumi-fg-3); font-size: 14px; }
.sumi-back .sumi-icon { width: 15px; height: 15px; }
.sumi-back:hover { color: var(--sumi-fg); }
.sumi-post { margin: 0 auto; }
.sumi-post-header { margin-bottom: 12px; }
.sumi-post .sumi-prose h1 { font-size: 2.6rem; }
.sumi-post-authors { display: flex; flex-wrap: wrap; gap: 20px; margin-top: 44px; padding-top: 24px; border-top: 1px solid var(--sumi-line); }
.sumi-author { display: flex; align-items: center; gap: 12px; }
.sumi-author img, .sumi-author-initial { width: 44px; height: 44px; border-radius: 50%; }
.sumi-author-initial { display: grid; place-items: center; background: var(--sumi-bg-soft); color: var(--sumi-fg-2); font-weight: 700; }
.sumi-author-name { color: var(--sumi-fg); font-weight: 600; }
.sumi-author-desc { color: var(--sumi-fg-3); font-size: 13.5px; }

/* ── Releases ───────────────────────────────────────────────────────────── */
.sumi-releases { margin-top: 1.6em; }
.sumi-release { position: relative; margin: 0 0 22px; padding: 22px 24px 8px; border: 1px solid var(--sumi-line); border-radius: 14px; background: var(--sumi-bg-elev); }
.sumi-release--latest { border-color: color-mix(in srgb, var(--sumi-accent) 40%, var(--sumi-line)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--sumi-accent) 8%, transparent); }
.sumi-release--archived { opacity: .82; }
.sumi-release-head { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 10px; }
.sumi-prose .sumi-release-version { margin: 0; padding: 0; border: 0; font-size: 1.35rem; font-variant-numeric: tabular-nums; }
.sumi-release-date { margin-left: auto; color: var(--sumi-fg-3); font-size: 13.5px; }
.sumi-release-summary { color: var(--sumi-fg-2); }
.sumi-badge { display: inline-flex; align-items: center; height: 22px; padding: 0 9px; border-radius: 999px; background: var(--sumi-bg-soft); color: var(--sumi-fg-2); font-size: 12px; font-weight: 600; }
.sumi-badge--latest { background: color-mix(in srgb, var(--sumi-accent) 13%, transparent); color: var(--sumi-accent); }
.sumi-badge--pre { background: color-mix(in srgb, var(--c-warning) 15%, transparent); color: var(--c-warning); }
.sumi-assets td a { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; text-decoration: none; font-family: var(--sumi-font-mono); font-size: 13.5px; }
.sumi-assets td a .sumi-icon { width: 15px; height: 15px; }
.sumi-hash { display: inline-flex; align-items: center; gap: 6px; padding: 2px 6px; border: 0; border-radius: 6px; background: none; color: var(--sumi-fg-3); cursor: pointer; }
.sumi-hash:hover { background: var(--sumi-bg-soft); color: var(--sumi-fg); }
.sumi-hash .sumi-icon { width: 13px; height: 13px; }

/* ── Print edition ─────────────────────────────────────────────────────── */
.sumi-print { max-width: var(--sumi-content-w); margin: 0 auto; }
.sumi-print-cover { padding: 40px 0 28px; border-bottom: 1px solid var(--sumi-line); margin-bottom: 28px; }
.sumi-print-cover h1 { margin: 0 0 10px; font-size: 3rem; letter-spacing: -0.04em; line-height: 1.1; }
.sumi-print-lead { margin: 0 0 6px; color: var(--sumi-fg-2); font-size: 1.15rem; }
.sumi-print-date { color: var(--sumi-fg-3); font-size: 14px; }
.sumi-print-actions { float: right; }
.sumi-print-toc ol { columns: 2; column-gap: 32px; padding-left: 1.4em; }
.sumi-print-toc li { break-inside: avoid; margin: 4px 0; }
.sumi-print-toc h2 { font-size: 1.2rem; }
.sumi-print-section { margin-top: 56px; padding-top: 32px; border-top: 2px solid var(--sumi-fg); }
@media print {
  .sumi-print-actions { display: none; }
  .sumi-print-cover { min-height: 60vh; display: flex; flex-direction: column; justify-content: flex-end; border: 0; }
  .sumi-print-toc { break-after: page; }
  .sumi-print-section { margin-top: 0; padding-top: 0; border: 0; }
  .sumi-landing .sumi-hero-bg { display: none; }
}

@media (max-width: 920px) {
  .sumi-hero { padding: 60px 0 56px; }
  .sumi-hero--split .sumi-hero-inner, .sumi-split { grid-template-columns: minmax(0, 1fr); gap: 36px; }
  .sumi-split--reverse .sumi-split-copy { order: 0; }
  .sumi-hero .sumi-land-code { transform: none; }
  .sumi-features { grid-template-columns: minmax(0, 1fr); }
  .sumi-land-section { padding: 60px 0; }
  .sumi-land-inner { padding: 0 18px; }
  .sumi-cta { padding: 40px 22px; }
  .sumi-print-toc ol { columns: 1; }
}
@media (min-width: 921px) and (max-width: 1100px) {
  .sumi-features { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
a.sumi-sidebar-title { display: block; margin: 0 0 6px; padding: 5px 10px; border-radius: 7px; }
a.sumi-sidebar-title:hover { background: var(--sumi-bg-soft); color: var(--sumi-fg); }
a.sumi-sidebar-title.is-current { color: var(--sumi-accent); }
.sumi-filetree details { margin: 0; }
