chiltepin-render 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,510 @@
1
+ import { BlockType, Document, BlockDataMap } from 'chiltepin-core';
2
+
3
+ /**
4
+ * The house CSS — ported verbatim from `resources/doc-studio.jsx`.
5
+ *
6
+ * All output is namespaced under `.docskin` so the stylesheet can coexist with
7
+ * a host page's own styles. Every colour is a CSS variable on `:root`. Dark is
8
+ * the default look; `data-theme="light"` (or print) switches to the light set.
9
+ *
10
+ * Exported as a single string so it can be inlined into a `<style>` tag in the
11
+ * standalone HTML produced by {@link renderDocument} (or copied verbatim into
12
+ * a static stylesheet).
13
+ */
14
+ /**
15
+ * The two token sets. Dark is the look: the bare `:root` carries it, so every
16
+ * page, deck, site page, and Studio canvas is dark unless something says
17
+ * otherwise. Light is the explicit choice — `data-theme="light"` on the root
18
+ * (or on a `.docskin`), `colorScheme: light` in the config — and the print
19
+ * look, always. `systemSchemeCss` is appended only when a page asks to follow
20
+ * the reader's OS (`colorScheme: system`).
21
+ *
22
+ * Hex lives only in these two constants and the base block below; every rule
23
+ * after them names a role (`var(--ink)`), never a value (`no-hex.test.ts`).
24
+ */
25
+ declare const LIGHT_SET = " /* The skin's role tokens (packages/render/DESIGN.md). Renderers name the\n role, never the value; the dark set overrides these on :root. */\n --paper:#f7f6f2; --paper-2:#efede8; --ink:#1f2430; --muted:#4f5868; --soft:#5f6876;\n --rule:rgba(31,36,48,.14); --rule-solid:#807b70;\n --accent:#b04a25; --accent-tint:rgba(176,74,37,.09); --link:#2f5c8f;\n --negative:#9a3f34; --negative-tint:rgba(154,63,52,.08);\n /* Tone steps between paper-2 and ink (heatmap ramp: paper \u2192 paper-2 \u2192 ink-3 \u2192 ink-2 \u2192 ink). Fills only, never text. */\n --ink-2:#5d6067; --ink-3:#9c9d9e;\n /* Chart series ramp: five desaturated hues for categorical series. Text never sits on them directly \u2014 use a paper mask. */\n --series-1:#788a6a; --series-2:#5e7a9b; --series-3:#a37c45; --series-4:#9c6b50; --series-5:#6e6479;\n /* The code surface is the one deliberate dark panel in both themes; every token colour clears 4.5:1 on it. */\n --code-bg:#1f2430; --code-fg:#f7f6f2; --code-muted:#9aa3b5; --code-rule:rgba(247,246,242,.12);\n --code-kw:#d7a8e8; --code-str:#b5cfa6; --code-num:#e8c58f; --code-fn:#8fbde6; --code-ty:#e6cf8f; --code-com:#9aa3b5;\n --code-add:#b5cfa6; --code-add-bg:rgba(181,207,166,.14); --code-del:#e6b3ab; --code-del-bg:rgba(230,179,171,.14);\n --stage:#f3f1ec; --stage-glow:rgba(255,255,255,.6);\n";
26
+ declare const DARK_SET = " --paper:#15171d; --paper-2:#1d2028; --ink:#eceae4; --muted:#b4bac6; --soft:#9da5b3;\n --rule:rgba(236,234,228,.13); --rule-solid:#7d8499;\n --accent:#e4744c; --accent-tint:rgba(228,116,76,.14); --link:#93b7e8;\n --negative:#f5a39b; --negative-tint:rgba(245,163,155,.14);\n --ink-2:#adadab; --ink-3:#62646a;\n --series-1:#9db08f; --series-2:#8aa6c6; --series-3:#d1ac72; --series-4:#c48c72; --series-5:#a094ab;\n --code-bg:#0e1015; --code-fg:#eceae4;\n /* The drawing well: a step below the panel, with a faint lift at the centre. */\n --stage:#121419; --stage-glow:rgba(236,234,228,.05);\n";
27
+ /** The reader's OS picks the set — used only for `colorScheme: system`. */
28
+ declare const systemSchemeCss = "@media (prefers-color-scheme: light){:root:not([data-theme=\"dark\"]){ /* The skin's role tokens (packages/render/DESIGN.md). Renderers name the\n role, never the value; the dark set overrides these on :root. */\n --paper:#f7f6f2; --paper-2:#efede8; --ink:#1f2430; --muted:#4f5868; --soft:#5f6876;\n --rule:rgba(31,36,48,.14); --rule-solid:#807b70;\n --accent:#b04a25; --accent-tint:rgba(176,74,37,.09); --link:#2f5c8f;\n --negative:#9a3f34; --negative-tint:rgba(154,63,52,.08);\n /* Tone steps between paper-2 and ink (heatmap ramp: paper \u2192 paper-2 \u2192 ink-3 \u2192 ink-2 \u2192 ink). Fills only, never text. */\n --ink-2:#5d6067; --ink-3:#9c9d9e;\n /* Chart series ramp: five desaturated hues for categorical series. Text never sits on them directly \u2014 use a paper mask. */\n --series-1:#788a6a; --series-2:#5e7a9b; --series-3:#a37c45; --series-4:#9c6b50; --series-5:#6e6479;\n /* The code surface is the one deliberate dark panel in both themes; every token colour clears 4.5:1 on it. */\n --code-bg:#1f2430; --code-fg:#f7f6f2; --code-muted:#9aa3b5; --code-rule:rgba(247,246,242,.12);\n --code-kw:#d7a8e8; --code-str:#b5cfa6; --code-num:#e8c58f; --code-fn:#8fbde6; --code-ty:#e6cf8f; --code-com:#9aa3b5;\n --code-add:#b5cfa6; --code-add-bg:rgba(181,207,166,.14); --code-del:#e6b3ab; --code-del-bg:rgba(230,179,171,.14);\n --stage:#f3f1ec; --stage-glow:rgba(255,255,255,.6);\n color-scheme:light;}}";
29
+ declare const houseCss = "*{box-sizing:border-box;margin:0;padding:0;}\nhtml{scroll-behavior:smooth;}\n/* Design tokens live on :root so an override (applied on :root) reaches\n the whole page \u2014 body chrome included, not just .docskin content. */\n:root{\n /* The skin's role tokens (packages/render/DESIGN.md). Renderers name the\n role, never the value; the dark set overrides these on :root. */\n --paper:#f7f6f2; --paper-2:#efede8; --ink:#1f2430; --muted:#4f5868; --soft:#5f6876;\n --rule:rgba(31,36,48,.14); --rule-solid:#807b70;\n --accent:#b04a25; --accent-tint:rgba(176,74,37,.09); --link:#2f5c8f;\n --negative:#9a3f34; --negative-tint:rgba(154,63,52,.08);\n /* Tone steps between paper-2 and ink (heatmap ramp: paper \u2192 paper-2 \u2192 ink-3 \u2192 ink-2 \u2192 ink). Fills only, never text. */\n --ink-2:#5d6067; --ink-3:#9c9d9e;\n /* Chart series ramp: five desaturated hues for categorical series. Text never sits on them directly \u2014 use a paper mask. */\n --series-1:#788a6a; --series-2:#5e7a9b; --series-3:#a37c45; --series-4:#9c6b50; --series-5:#6e6479;\n /* The code surface is the one deliberate dark panel in both themes; every token colour clears 4.5:1 on it. */\n --code-bg:#1f2430; --code-fg:#f7f6f2; --code-muted:#9aa3b5; --code-rule:rgba(247,246,242,.12);\n --code-kw:#d7a8e8; --code-str:#b5cfa6; --code-num:#e8c58f; --code-fn:#8fbde6; --code-ty:#e6cf8f; --code-com:#9aa3b5;\n --code-add:#b5cfa6; --code-add-bg:rgba(181,207,166,.14); --code-del:#e6b3ab; --code-del-bg:rgba(230,179,171,.14);\n --stage:#f3f1ec; --stage-glow:rgba(255,255,255,.6);\n --paper:#15171d; --paper-2:#1d2028; --ink:#eceae4; --muted:#b4bac6; --soft:#9da5b3;\n --rule:rgba(236,234,228,.13); --rule-solid:#7d8499;\n --accent:#e4744c; --accent-tint:rgba(228,116,76,.14); --link:#93b7e8;\n --negative:#f5a39b; --negative-tint:rgba(245,163,155,.14);\n --ink-2:#adadab; --ink-3:#62646a;\n --series-1:#9db08f; --series-2:#8aa6c6; --series-3:#d1ac72; --series-4:#c48c72; --series-5:#a094ab;\n --code-bg:#0e1015; --code-fg:#eceae4;\n /* The drawing well: a step below the panel, with a faint lift at the centre. */\n --stage:#121419; --stage-glow:rgba(236,234,228,.05);\n color-scheme:dark;\n /* Figure scale: decks set it on the slide root to enlarge small diagrams. */\n --scale:1;\n /* Legacy token names \u2014 aliases of the roles above so the renderers that\n have not migrated keep working. New code never uses these. */\n --navy:var(--ink); --navy-tint:var(--paper-2); --blue:var(--link); --light-blue:var(--paper-2);\n --charcoal:var(--ink); --slate:var(--muted); --gray:var(--muted); --light-gray:var(--paper-2);\n --highlight:var(--accent); --highlight-soft:var(--accent-tint);\n --positive:var(--muted); --positive-soft:var(--paper-2); --negative-soft:var(--negative-tint);\n --purple:var(--muted); --purple-soft:var(--paper-2); --teal:var(--muted); --teal-soft:var(--paper-2); --white:var(--paper);\n --radius:6px;\n --font-display:\"Inter\",\"SF Pro Display\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n --font-body:\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;\n --font-mono:\"SF Mono\",ui-monospace,Menlo,Consolas,\"Courier New\",monospace;}\n/* Light: the explicit choice (a root or docskin stamp) and the print look. */\n:root[data-theme=\"light\"],[data-theme=\"light\"] .docskin,.docskin[data-theme=\"light\"]{\n /* The skin's role tokens (packages/render/DESIGN.md). Renderers name the\n role, never the value; the dark set overrides these on :root. */\n --paper:#f7f6f2; --paper-2:#efede8; --ink:#1f2430; --muted:#4f5868; --soft:#5f6876;\n --rule:rgba(31,36,48,.14); --rule-solid:#807b70;\n --accent:#b04a25; --accent-tint:rgba(176,74,37,.09); --link:#2f5c8f;\n --negative:#9a3f34; --negative-tint:rgba(154,63,52,.08);\n /* Tone steps between paper-2 and ink (heatmap ramp: paper \u2192 paper-2 \u2192 ink-3 \u2192 ink-2 \u2192 ink). Fills only, never text. */\n --ink-2:#5d6067; --ink-3:#9c9d9e;\n /* Chart series ramp: five desaturated hues for categorical series. Text never sits on them directly \u2014 use a paper mask. */\n --series-1:#788a6a; --series-2:#5e7a9b; --series-3:#a37c45; --series-4:#9c6b50; --series-5:#6e6479;\n /* The code surface is the one deliberate dark panel in both themes; every token colour clears 4.5:1 on it. */\n --code-bg:#1f2430; --code-fg:#f7f6f2; --code-muted:#9aa3b5; --code-rule:rgba(247,246,242,.12);\n --code-kw:#d7a8e8; --code-str:#b5cfa6; --code-num:#e8c58f; --code-fn:#8fbde6; --code-ty:#e6cf8f; --code-com:#9aa3b5;\n --code-add:#b5cfa6; --code-add-bg:rgba(181,207,166,.14); --code-del:#e6b3ab; --code-del-bg:rgba(230,179,171,.14);\n --stage:#f3f1ec; --stage-glow:rgba(255,255,255,.6);\n color-scheme:light;\n}\n:root[data-theme=\"dark\"],[data-theme=\"dark\"] .docskin,.docskin[data-theme=\"dark\"]{\n --paper:#15171d; --paper-2:#1d2028; --ink:#eceae4; --muted:#b4bac6; --soft:#9da5b3;\n --rule:rgba(236,234,228,.13); --rule-solid:#7d8499;\n --accent:#e4744c; --accent-tint:rgba(228,116,76,.14); --link:#93b7e8;\n --negative:#f5a39b; --negative-tint:rgba(245,163,155,.14);\n --ink-2:#adadab; --ink-3:#62646a;\n --series-1:#9db08f; --series-2:#8aa6c6; --series-3:#d1ac72; --series-4:#c48c72; --series-5:#a094ab;\n --code-bg:#0e1015; --code-fg:#eceae4;\n /* The drawing well: a step below the panel, with a faint lift at the centre. */\n --stage:#121419; --stage-glow:rgba(236,234,228,.05);\n color-scheme:dark;\n}\n@media print{\n :root{\n /* The skin's role tokens (packages/render/DESIGN.md). Renderers name the\n role, never the value; the dark set overrides these on :root. */\n --paper:#f7f6f2; --paper-2:#efede8; --ink:#1f2430; --muted:#4f5868; --soft:#5f6876;\n --rule:rgba(31,36,48,.14); --rule-solid:#807b70;\n --accent:#b04a25; --accent-tint:rgba(176,74,37,.09); --link:#2f5c8f;\n --negative:#9a3f34; --negative-tint:rgba(154,63,52,.08);\n /* Tone steps between paper-2 and ink (heatmap ramp: paper \u2192 paper-2 \u2192 ink-3 \u2192 ink-2 \u2192 ink). Fills only, never text. */\n --ink-2:#5d6067; --ink-3:#9c9d9e;\n /* Chart series ramp: five desaturated hues for categorical series. Text never sits on them directly \u2014 use a paper mask. */\n --series-1:#788a6a; --series-2:#5e7a9b; --series-3:#a37c45; --series-4:#9c6b50; --series-5:#6e6479;\n /* The code surface is the one deliberate dark panel in both themes; every token colour clears 4.5:1 on it. */\n --code-bg:#1f2430; --code-fg:#f7f6f2; --code-muted:#9aa3b5; --code-rule:rgba(247,246,242,.12);\n --code-kw:#d7a8e8; --code-str:#b5cfa6; --code-num:#e8c58f; --code-fn:#8fbde6; --code-ty:#e6cf8f; --code-com:#9aa3b5;\n --code-add:#b5cfa6; --code-add-bg:rgba(181,207,166,.14); --code-del:#e6b3ab; --code-del-bg:rgba(230,179,171,.14);\n --stage:#f3f1ec; --stage-glow:rgba(255,255,255,.6);\n color-scheme:light;\n }\n}\nbody{background:var(--white);color:var(--charcoal);font-family:var(--font-body);font-size:15px;line-height:1.6;}\n.docskin{\n background:var(--white); color:var(--charcoal); font-family:var(--font-body); font-size:15px; line-height:1.6;\n max-width:var(--page-max,1180px); margin:0 auto; padding:0 56px 128px;\n}\n.docskin .cover-bar{height:8px;background:var(--navy);margin:0 -56px 36px;}\n.docskin .cover-pad{padding:0 0 40px;margin-bottom:56px;border-bottom:1px solid var(--rule);}\n.docskin .cover-logo{display:block;height:52px;width:auto;max-width:260px;margin:0 0 28px;}\n.docskin .cover-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--gray);font-weight:600;margin-bottom:32px;}\n.docskin .cover-meta .accent{color:var(--highlight);}\n.docskin .cover-title{font-family:var(--font-display);font-weight:700;font-size:clamp(40px,5.2vw,62px);line-height:1.08;letter-spacing:-.015em;color:var(--navy);margin:0 0 22px;}\n.docskin .cover-sub{font-size:19px;line-height:1.55;color:var(--slate);max-width:860px;margin:0 0 36px;}\n.docskin .section{padding:0;margin-bottom:64px;}\n.docskin .section > *:last-child{margin-bottom:0;}\n.docskin .section-num{font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--soft);font-weight:700;margin-bottom:8px;}\n.docskin .section-head{margin-bottom:28px;padding-bottom:16px;border-bottom:2px solid var(--navy);}\n.docskin .section-head.bare{border-bottom:0;padding-bottom:0;margin-bottom:14px;}\n.docskin .section-head.bare .section-num{margin-bottom:0;font-size:10px;opacity:.8;}\n.docskin .section-head .section-title{border-bottom:0;padding-bottom:0;margin-bottom:14px;}\n.docskin .section-title{font-family:var(--font-display);font-weight:700;font-size:clamp(28px,3.6vw,40px);line-height:1.15;letter-spacing:-.01em;color:var(--navy);margin:0 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .section-lede{font-size:16px;color:var(--slate);line-height:1.6;max-width:860px;margin:0;}\n.docskin .section-block{margin-bottom:64px;scroll-margin-top:16px;}\n.docskin .section-block:last-child{margin-bottom:0;}\n.docskin .block-anchor{position:relative;display:block;height:0;scroll-margin-top:16px;}\n.docskin .diagram{margin:28px 0 36px;border:1px solid var(--rule-solid);background:var(--paper-2);padding:20px 24px 18px;border-radius:6px;box-shadow:none;}\n/* The dot grid sits only behind the drawing, never under the text around it. */\n.docskin .diagram-stage{background-color:var(--stage);background-image:radial-gradient(var(--rule) 1px,transparent 1px),radial-gradient(ellipse 65% 55% at 50% 42%,var(--stage-glow),transparent 100%);background-size:24px 24px,100% 100%;background-repeat:repeat,no-repeat;background-position:center,center;padding:12px 0;border-radius:4px;box-shadow:inset 0 0 0 1px var(--rule);}\n.docskin .diagram-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;padding-bottom:10px;margin-bottom:14px;border-bottom:1px solid var(--rule);}\n.docskin .diagram-eyebrow{display:inline-flex;align-items:baseline;gap:6px;color:var(--soft);}\n.docskin .diagram-tag{color:var(--soft);}\n.docskin .diagram-tag-sep{color:var(--soft);}\n.docskin .diagram-tag-method{color:var(--accent);font-weight:600;}\n.docskin .diagram-tag-path{color:var(--muted);text-transform:none;letter-spacing:.02em;font-size:10px;}\n.docskin .diagram-title{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--ink);flex:1;}\n.docskin .diagram-fignum{font-size:10px;color:var(--soft);text-transform:uppercase;letter-spacing:.1em;font-weight:700;}\n.docskin .diagram-desc{font-size:14px;color:var(--muted);margin:0 0 12px;}\n.docskin .diagram svg{display:block;margin:0 auto;max-width:100%;height:auto;}\n.docskin .diagram-stage--wide{overflow-x:auto;overscroll-behavior-x:contain;}\n.docskin .diagram-stage--wide svg{margin:0;}\n@media print{.docskin .diagram-stage--wide{overflow:visible;}.docskin .diagram-stage--wide svg{width:auto!important;max-width:100%!important;}}\n.docskin.slide .diagram-stage--wide{overflow:visible;}.docskin.slide .diagram-stage--wide svg{width:auto!important;max-width:100%!important;}\n/* Type roles (DESIGN.md \u203A Type roles). Fixed figure sizes; usable on SVG\n <text> (fill) and HTML (color). Every SVG text gets the paper halo so it\n survives crossing a line. */\n.docskin .t-name{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink);color:var(--ink);}\n.docskin .t-sub{font-family:var(--font-mono);font-size:10px;font-weight:400;fill:var(--muted);color:var(--muted);}\n.docskin .t-eyebrow{font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;fill:var(--soft);color:var(--soft);}\n.docskin .t-arrow{font-family:var(--font-mono);font-size:9.5px;font-weight:400;letter-spacing:.04em;fill:var(--muted);color:var(--muted);}\n.docskin .t-badge{font-family:var(--font-mono);font-size:9px;font-weight:600;fill:var(--muted);color:var(--muted);}\n.docskin svg .t-name,.docskin svg .t-sub,.docskin svg .t-eyebrow,.docskin svg .t-arrow,.docskin svg .t-badge{paint-order:stroke;stroke:var(--paper);stroke-width:2.5px;stroke-linejoin:round;}\n.docskin svg .t-name{stroke-width:3px;}\n/* Colour modifiers for the type roles \u2014 the only colours a figure spends. */\n.docskin .c-ink{fill:var(--ink);color:var(--ink);} .docskin .c-muted{fill:var(--muted);color:var(--muted);} .docskin .c-soft{fill:var(--soft);color:var(--soft);}\n.docskin .c-accent{fill:var(--accent);color:var(--accent);} .docskin .c-negative{fill:var(--negative);color:var(--negative);} .docskin .c-link{fill:var(--link);color:var(--link);}\n/* Legend strip: a hairline row under the drawing, one item per encoding used. */\n.docskin .diagram-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;margin-top:12px;padding-top:10px;border-top:1px solid var(--rule);}\n.docskin .lg-title{margin-right:2px;}\n.docskin .lg-item{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:10px;letter-spacing:.03em;color:var(--muted);}\n.docskin .lg-sw{flex:none;display:block;}\n.docskin .lg-chip{display:inline-block;padding:1px 5px;border:1px solid var(--rule-solid);border-radius:2px;background:var(--paper);color:var(--muted);line-height:1.3;}\n/* sequence \u2014 paper actor heads, hairline lifelines, arrows per kind, hollow badges */\n.docskin .lane-head{fill:var(--paper);stroke:var(--ink);stroke-width:1.5;} .docskin .lane-head.ext{stroke-dasharray:4 3;}\n.docskin .lane-head-text{text-anchor:middle;}\n.docskin .lane-head-sub{text-anchor:middle;}\n.docskin .lifeline{stroke:var(--rule-solid);stroke-width:1;stroke-dasharray:4 3;}\n.docskin .activation{fill:var(--paper-2);stroke:var(--ink);stroke-width:1;}\n.docskin .msg-line{stroke:var(--muted);stroke-width:1.5;fill:none;}\n.docskin .msg-line.dashed{stroke-dasharray:5 4;} .docskin .msg-line.async{stroke-width:1.25;stroke-dasharray:2 3;}\n.docskin .msg-line.err{stroke:var(--negative);} .docskin .msg-line.accent{stroke:var(--accent);stroke-width:1.75;}\n.docskin .msg-text.em{fill:var(--ink);} .docskin .msg-text.err{fill:var(--negative);} .docskin .msg-text.note{fill:var(--soft);font-style:italic;} .docskin .msg-text.accent{fill:var(--accent);font-weight:600;}\n.docskin .msg-line.self{fill:none;}\n/* combined fragments (alt/opt/loop/par/break/critical): a paper-2 panel, a paper tab chip, the guard in brackets */\n.docskin .seq-frame{fill:var(--paper-2);fill-opacity:.6;stroke:var(--rule-solid);stroke-width:1;}\n.docskin .seq-frame-tab{fill:var(--paper);stroke:var(--rule-solid);stroke-width:1;}\n.docskin .seq-frame-else{stroke:var(--rule-solid);stroke-width:1;stroke-dasharray:4 3;}\n/* note boxes: paper fill, hairline stroke, folded corner */\n.docskin .seq-note{fill:var(--paper);stroke:var(--rule-solid);stroke-width:1;}\n.docskin .seq-note-fold{fill:none;stroke:var(--rule-solid);stroke-width:1;}\n.docskin .seq-note-text{font-style:italic;}\n.docskin .step-badge{fill:var(--paper);stroke:var(--muted);stroke-width:1;} .docskin .step-badge.err{stroke:var(--negative);}\n.docskin .step-badge-text{text-anchor:middle;fill:var(--ink);}\n.docskin .seq-steps{margin-top:16px;padding:14px 18px;background:var(--paper);border:1px solid var(--rule-solid);border-radius:4px;}\n.docskin .seq-steps-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--soft);font-weight:600;margin-bottom:8px;font-family:var(--font-mono);}\n.docskin .seq-steps ol{list-style:none;padding:0;margin:0;}\n.docskin .seq-steps li{padding:7px 0 8px 40px;position:relative;border-bottom:1px solid var(--rule);}\n.docskin .seq-steps li:last-child{border-bottom:none;}\n/* The number is emitted by the renderer (the message's DIAGRAM number, so an\n annotation on step 4 reads \u2463 here even when steps 1-3 have no note). */\n.docskin .seq-steps .step-n{position:absolute;left:2px;top:7px;width:20px;height:20px;border:1px solid var(--muted);border-radius:50%;color:var(--muted);font-family:var(--font-mono);font-size:9px;font-weight:600;text-align:center;line-height:18px;background:var(--paper);}\n/* frame dividers mirror the diagram's frames: \"ALT \u00B7 token valid\", \"else \u00B7 expired\" */\n.docskin .seq-steps li.step-frame{padding:8px 0 4px;font-family:var(--font-mono);font-size:10px;color:var(--muted);border-bottom:1px dashed var(--rule);}\n.docskin .seq-steps li.step-frame .step-frame-tag{display:inline-block;padding:1px 6px;margin-right:8px;border:1px solid var(--rule-solid);border-radius:2px;background:var(--paper);color:var(--soft);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;}\n.docskin .seq-steps li.step-frame.else{padding-left:12px;}\n.docskin .seq-steps li.err .step-n{border-color:var(--negative);color:var(--negative);}\n.docskin .seq-steps li.err{font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;border-bottom:1px solid var(--rule);padding:7px 0 8px 40px;margin:0;white-space:normal;}\n.docskin .seq-steps li.err:last-child{border-bottom:none;}\n.docskin .diagram-foot{display:flex;flex-wrap:wrap;gap:6px 24px;margin-top:14px;font-size:12.5px;color:var(--ink);}\n.docskin .diagram-foot strong{color:var(--muted);font-weight:600;}\n.docskin .step-actor{font-family:var(--font-mono);font-size:10px;font-weight:600;color:var(--muted);margin-right:8px;text-transform:uppercase;letter-spacing:.06em;}\n.docskin .step-actor.err{color:var(--negative);background:none;border:none;padding:0;margin:0 8px 0 0;font-size:10px;white-space:normal;}\n.docskin .step-summary{font-size:13px;color:var(--ink);}\n/* c4 */\n.docskin .c4-name{font-family:var(--font-display);font-size:14px;font-weight:700;}\n.docskin .c4-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .c4-desc{font-family:var(--font-body);font-size:10px;}\n.docskin .c4-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .edge-label{font-family:var(--font-body);font-size:9.5px;fill:var(--slate);text-anchor:middle;}\n.docskin .edge-label.err{fill:var(--negative);font-weight:700;}\n/* numbered edge steps (dense diagrams): circled numerals on arrows + legend below */\n.docskin .edge-steps{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:12px;padding-top:10px;border-top:1px solid var(--rule);}\n.docskin .edge-step{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--slate);}\n.docskin .edge-step b{flex:none;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;border:1px solid var(--charcoal);color:var(--charcoal);font-family:var(--font-mono);font-size:10px;font-weight:700;background:var(--white);}\n.docskin .edge-step.err{color:var(--negative);}\n.docskin .edge-step.err b{border-color:var(--negative);color:var(--negative);}\n.docskin .c4-boundary{fill:none;stroke:var(--navy);stroke-width:1.4;stroke-dasharray:8 5;}\n.docskin .c4-boundary-label{font-family:var(--font-body);font-size:10px;font-weight:700;fill:var(--navy);letter-spacing:.08em;text-transform:uppercase;}\n/* code block */\n/* Code surfaces are a dark editor theme everywhere (code block, gallery, sequence). */\n.docskin pre{background:var(--code-bg);color:var(--code-fg);padding:18px 20px;font-family:var(--font-mono);font-size:12.5px;line-height:1.65;overflow-x:auto;white-space:pre;margin:0;-moz-tab-size:2;tab-size:2;}\n.docskin pre .kw{color:var(--code-kw);font-weight:600;} .docskin pre .com{color:var(--code-com);font-style:italic;}\n.docskin pre .str{color:var(--code-str);} .docskin pre .num{color:var(--code-num);} .docskin pre .fn{color:var(--code-fn);} .docskin pre .ty{color:var(--code-ty);}\n.docskin .code-block{margin:14px 0 18px;border-radius:6px;overflow:hidden;border:1px solid var(--rule-solid);box-shadow:none;}\n.docskin .code-header{display:flex;justify-content:space-between;align-items:center;padding:9px 16px;background:var(--code-bg);color:var(--code-muted);font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.04em;border-bottom:1px solid var(--code-rule);}\n/* Three quiet dots stand in for the traffic lights on full code blocks (not the tighter gallery cards). */\n.docskin .code-block>.code-header::before{content:\"\";flex:none;width:9px;height:9px;border-radius:50%;background:var(--code-muted);box-shadow:15px 0 0 var(--code-muted),30px 0 0 var(--code-muted);opacity:.4;margin-right:38px;}\n.docskin .code-block>pre{border-radius:0;}\n/* er \u2014 paper cards, an eyebrow + name header, mono rows with # (pk) and \u2192 (fk) */\n.docskin .er-head-text{text-anchor:start;}\n.docskin .er-col{font-family:var(--font-mono);font-size:10px;fill:var(--ink);} .docskin .er-col.dim{fill:var(--soft);}\n.docskin .er-key{font-family:var(--font-mono);font-size:10px;font-weight:600;fill:var(--muted);}\n.docskin .er-rowline{stroke:var(--rule);stroke-width:1;}\n.docskin .er-headline{stroke:var(--rule-solid);stroke-width:1;}\n.docskin .er-panel{fill:var(--paper-2);stroke:var(--rule-solid);stroke-width:1;}\n.docskin .er-panel-tab{fill:var(--soft);}\n.docskin .er-card{fill:var(--muted);}\n.docskin .er-rel{fill:var(--muted);}\n/* block / state / flow shared text */\n.docskin .blk-name{font-family:var(--font-display);font-size:13px;font-weight:700;}\n.docskin .blk-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .blk-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .grp-label{font-family:var(--font-body);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}\n.docskin .fc-label{text-anchor:middle;}\n.docskin .endpoint-card{border:1px solid var(--rule);margin:16px 0;padding:18px 22px;background:var(--white);}\n.docskin .endpoint-header{display:flex;align-items:center;gap:12px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed var(--rule);}\n/* The method chip is the card's one accent (DESIGN.md: the endpoint method may take it); DELETE reads as negative. */\n.docskin .endpoint-method{font-family:var(--font-mono);font-size:11px;font-weight:600;padding:3px 9px;color:var(--accent);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--accent);border-radius:3px;background:var(--paper);}\n.docskin .endpoint-method.delete{color:var(--negative);border-color:var(--negative);}\n.docskin .endpoint-path{font-family:var(--font-mono);font-size:15px;font-weight:700;color:var(--ink);flex:1;}\n.docskin .endpoint-status{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);font-weight:700;}\n.docskin .endpoint-desc{font-size:13px;color:var(--muted);margin:0 0 8px;}\n.docskin .endpoint-card h4{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);margin:14px 0 6px;}\n.docskin .endpoint-card ul{margin:0 0 0 20px;} .docskin .endpoint-card li{font-size:13px;margin-bottom:3px;}\n.docskin code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;border:1px solid var(--rule);}\n.docskin .transition-table{width:100%;border-collapse:collapse;margin:16px 0 8px;font-size:12px;}\n/* Table headers everywhere: a paper-2 band with eyebrow text in muted (4.5:1 floor) \u2014 never a dark fill. */\n.docskin .transition-table thead{background:var(--paper-2);color:var(--muted);}\n.docskin .transition-table th{text-align:left;padding:8px 10px;font-family:var(--font-mono);font-size:9.5px;font-weight:500;text-transform:uppercase;letter-spacing:.12em;border-bottom:1px solid var(--rule-solid);}\n.docskin .transition-table td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:top;}\n.docskin .transition-table td.t-num{width:30px;padding-right:2px;}\n/* Status chips (the one encoding for every status / priority / tone pill in the skin):\n a WORD plus one of \u2014 ink outline (default) \u00B7 paper-2 fill (done / settled) \u00B7\n accent outline (current / recommended) \u00B7 negative outline (blocked / error) \u00B7\n dashed outline (todo / future / not started). Never a hue per status. */\n.docskin .pill{display:inline-block;font-family:var(--font-mono);font-size:10px;font-weight:600;padding:2px 7px;border-radius:3px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .pill-init{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .pill-active{border-color:var(--ink);}\n.docskin .pill-wait{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .pill-end{border-color:var(--accent);color:var(--accent);}\n/* presentation: comparison table */\n.docskin .pres-table{width:100%;border-collapse:collapse;margin:14px 0;font-size:13px;}\n.docskin .pres-table thead{background:var(--paper-2);color:var(--muted);}\n.docskin .pres-table th{padding:9px 12px;text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;border-bottom:1px solid var(--rule-solid);}\n.docskin .pres-table th.r,.docskin .pres-table td.r{text-align:right;} .docskin .pres-table th.c,.docskin .pres-table td.c{text-align:center;}\n.docskin .pres-table th.hi{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent);}\n.docskin .pres-table td{padding:9px 12px;border-bottom:1px solid var(--rule);}\n.docskin .pres-table tbody tr:nth-child(even){background:color-mix(in srgb,var(--paper-2) 50%,transparent);}\n.docskin .pres-table td.lead{font-weight:600;color:var(--ink);}\n.docskin .pres-table td.hi{background:var(--accent-tint);}\n.docskin .cell-pos{color:var(--ink);font-weight:700;} .docskin .cell-neg{color:var(--negative);font-weight:700;} .docskin .cell-warn{color:var(--accent);font-weight:700;} .docskin .cell-muted{color:var(--muted);}\n.docskin .badge{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;font-weight:700;border:1px solid currentColor;background:var(--paper);}\n.docskin .badge.yes{color:var(--ink);} .docskin .badge.no{color:var(--negative);}\n.docskin .tbl-note{font-size:11px;color:var(--muted);font-style:italic;margin-top:6px;}\n/* presentation: stat cards */\n.docskin .stat-row{display:flex;flex-wrap:wrap;gap:14px;margin:16px 0;}\n.docskin .stat-card{flex:1 1 150px;border:1px solid var(--rule-solid);border-top:2px solid var(--ink);padding:16px 18px;background:var(--paper);border-radius:0 0 6px 6px;}\n.docskin .stat-value{font-family:var(--font-display);font-size:30px;font-weight:700;color:var(--ink);line-height:1;}\n.docskin .stat-label{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:500;margin-top:8px;}\n.docskin .stat-delta{font-family:var(--font-mono);font-size:12px;font-weight:700;margin-top:6px;}\n.docskin .stat-delta.up{color:var(--ink);} .docskin .stat-delta.down{color:var(--negative);} .docskin .stat-delta.flat{color:var(--muted);}\n/* presentation: timeline \u2014 hollow dots; done = paper-2 fill, current = the accent, next/future = dashed */\n.docskin .tl{position:relative;margin:18px 0;padding-left:8px;}\n.docskin .tl::before{content:\"\";position:absolute;left:9px;top:6px;bottom:6px;width:1px;background:var(--rule-solid);}\n.docskin .tl-item{position:relative;padding:0 0 18px 30px;}\n.docskin .tl-item:last-child{padding-bottom:0;}\n.docskin .tl-dot{position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:var(--paper);border:1.5px solid var(--muted);box-sizing:border-box;}\n.docskin .tl-dot.done,.docskin .tl-dot.past{background:var(--paper-2);border-color:var(--ink);} .docskin .tl-dot.current{background:var(--accent);border-color:var(--accent);} .docskin .tl-dot.next,.docskin .tl-dot.future{border-style:dashed;border-color:var(--ink);}\n.docskin .tl-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}\n.docskin .tl-date{font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;}\n/* The status word beside the dot, in the chip encoding. */\n.docskin .tl-status{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;padding:1px 6px;border-radius:2px;line-height:1.5;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .tl-status.tl-s-done{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .tl-status.tl-s-current{color:var(--accent);border-color:var(--accent);}\n.docskin .tl-status.tl-s-next,.docskin .tl-status.tl-s-future{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .tl-label{font-family:var(--font-display);font-size:15px;font-weight:700;color:var(--ink);margin:1px 0 2px;}\n.docskin .tl-desc{font-size:12.5px;color:var(--muted);}\n.docskin .toc{margin:18px 0 6px;padding:14px 20px;background:var(--light-gray);border:1px solid var(--rule);border-left:4px solid var(--highlight);border-radius:0 var(--radius) var(--radius) 0;}\n.docskin .toc-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--navy);font-weight:700;margin-bottom:8px;}\n.docskin .toc ol{margin:0;padding-left:20px;} .docskin .toc li{font-size:13px;margin-bottom:4px;color:var(--slate);}\n.docskin .toc li span{color:var(--gray);font-family:var(--font-mono);font-size:11px;}\n/* callouts */\n/* Tones by left rule only: note = hairline \u00B7 tip = accent \u00B7 warn / danger = negative \u00B7 info = link \u00B7 success = ink on paper-2. Text is always ink. */\n.docskin .callout{border:1px solid var(--rule-solid);padding:14px 18px;margin:14px 0;border-radius:6px;background:var(--paper);}\n.docskin .callout.tip{border-left:3px solid var(--accent);border-radius:0 6px 6px 0;} .docskin .callout.warn,.docskin .callout.danger{border-left:3px solid var(--negative);border-radius:0 6px 6px 0;} .docskin .callout.info{border-left:3px solid var(--link);border-radius:0 6px 6px 0;} .docskin .callout.success{border-left:3px solid var(--ink);border-radius:0 6px 6px 0;background:var(--paper-2);}\n.docskin .callout-title{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;margin-bottom:5px;color:var(--muted);}\n.docskin .callout.tip .callout-title{color:var(--accent);} .docskin .callout.warn .callout-title,.docskin .callout.danger .callout-title{color:var(--negative);} .docskin .callout.info .callout-title{color:var(--link);}\n.docskin .callout-body{font-size:14.5px;color:var(--ink);line-height:1.6;}\n.docskin .callout-body p{margin:0 0 8px;}\n.docskin .callout-body p:last-child{margin-bottom:0;}\n/* prose */\n.docskin .prose h2{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3vw,32px);line-height:1.15;letter-spacing:-.015em;color:var(--navy);margin:40px 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .prose h2:first-child{margin-top:0;}\n.docskin .prose h3{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.005em;color:var(--navy);margin:36px 0 12px;}\n.docskin .prose h4{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);margin:22px 0 8px;}\n.docskin .prose p{font-size:15.5px;color:var(--charcoal);margin:0 0 14px;line-height:1.65;max-width:820px;}\n.docskin .prose ul,.docskin .prose ol{margin:0 0 14px 22px;}\n.docskin .prose li{font-size:15px;color:var(--charcoal);margin-bottom:5px;max-width:820px;line-height:1.6;}\n.docskin .prose blockquote{border-left:2px solid var(--ink);padding:4px 14px;margin:14px 0;color:var(--muted);font-style:italic;font-family:var(--font-display);}\n.docskin .prose code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;color:var(--charcoal);border:1px solid var(--rule);}\n.docskin .prose strong{font-weight:700;color:var(--charcoal);}\n.docskin .prose em{font-style:italic;}\n/* glossary */\n.docskin .jr-emotion{margin-top:10px;}\n.docskin .jr-emotion-label{font-size:10px;color:var(--gray);font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px;}\n.docskin .glossary{margin:10px 0;}\n.docskin .glossary .row{display:grid;grid-template-columns:170px 1fr;gap:14px;padding:9px 0;border-bottom:1px solid var(--rule);}\n.docskin .glossary dt{font-family:var(--font-mono);font-size:14px;font-weight:700;color:var(--navy);}\n.docskin .glossary dd{margin:0;font-size:14px;color:var(--slate);}\n.docskin .glossary .avoid{font-size:12px;color:var(--gray);}\n/* pros / cons */\n.docskin .pc{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:12px 0;}\n.docskin .pc-col{border:1px solid var(--rule-solid);padding:14px 16px;background:var(--paper);border-radius:6px;}\n.docskin .pc-col.pro{border-top:2px solid var(--ink);} .docskin .pc-col.con{border-top:2px solid var(--negative);}\n.docskin .pc-head{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;margin-bottom:8px;}\n.docskin .pc-col.pro .pc-head{color:var(--muted);} .docskin .pc-col.con .pc-head{color:var(--negative);}\n.docskin .pc-item{font-size:13px;color:var(--ink);padding:4px 0 4px 22px;position:relative;}\n.docskin .pc-item::before{position:absolute;left:0;top:4px;font-weight:700;}\n.docskin .pc-col.pro .pc-item::before{content:\"\\2713\";color:var(--ink);} .docskin .pc-col.con .pc-item::before{content:\"\\2717\";color:var(--negative);}\n/* current / target */\n.docskin .ct{display:flex;align-items:stretch;margin:12px 0;}\n.docskin .ct-panel{flex:1;border:1px solid var(--rule);padding:14px 18px;}\n.docskin .ct-panel.cur{background:var(--light-gray);} .docskin .ct-panel.tgt{border-top:3px solid var(--navy);}\n.docskin .ct-arrow{display:flex;align-items:center;padding:0 14px;color:var(--highlight);font-size:22px;font-weight:700;}\n.docskin .ct-label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;color:var(--gray);margin-bottom:8px;}\n.docskin .ct-panel.tgt .ct-label{color:var(--navy);}\n.docskin .ct-item{font-size:13px;color:var(--slate);padding:3px 0;}\n/* kanban */\n.docskin .kanban{display:flex;gap:14px;margin:12px 0;overflow-x:auto;}\n.docskin .kan-col{flex:1 1 0;min-width:150px;background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:6px;}\n.docskin .kan-head{font-family:var(--font-mono);font-size:9.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-weight:500;padding:9px 12px 7px;border-bottom:1px solid var(--rule);}\n.docskin .kan-card{background:var(--paper);border:1px solid var(--rule-solid);margin:8px;padding:9px 11px;border-radius:4px;}\n.docskin .kan-card-title{font-size:13px;font-weight:600;color:var(--ink);}\n.docskin .kan-card-tag{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);margin-top:5px;border:1px solid var(--rule-solid);border-radius:2px;padding:1px 5px;background:var(--paper);}\n/* pass 2 chart labels */\n.docskin .cycle-center text{font-family:var(--font-mono);font-size:12px;font-weight:600;text-anchor:middle;fill:var(--gray);}\n.docskin .pyr-label{font-family:var(--font-display);font-size:12.5px;font-weight:700;fill:var(--white);text-anchor:middle;}\n.docskin .pyr-desc{font-family:var(--font-body);font-size:10px;fill:var(--white);text-anchor:middle;opacity:.85;}\n/* indented tree */\n.docskin .tree-list{margin:10px 0;font-size:13px;}\n.docskin .tree-row{display:flex;align-items:baseline;padding:3px 0;}\n.docskin .tree-row .tw{color:var(--gray);margin-right:8px;font-family:var(--font-mono);font-size:11px;}\n.docskin .tree-row.branch .tw{color:var(--navy);}\n.docskin .tree-row .tlabel{color:var(--charcoal);font-family:var(--font-mono);}\n.docskin .tree-row.branch .tlabel{font-weight:700;color:var(--navy);}\n.docskin .tree-row .tnote{color:var(--gray);font-size:11px;margin-left:10px;font-family:var(--font-body);font-style:italic;}\n/* agenda */\n.docskin .agenda{margin:10px 0;}\n.docskin .agenda-row{display:grid;grid-template-columns:88px 1fr;gap:14px;padding:10px 0;border-bottom:1px solid var(--rule);}\n.docskin .agenda-time{font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--navy);}\n.docskin .agenda-dur{font-family:var(--font-mono);font-size:10px;color:var(--gray);margin-top:2px;}\n.docskin .agenda-title{font-family:var(--font-display);font-size:14px;font-weight:700;color:var(--charcoal);}\n.docskin .agenda-owner{font-size:10.5px;color:var(--highlight);font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-left:8px;}\n.docskin .agenda-desc{font-size:12.5px;color:var(--slate);margin-top:2px;}\n/* tracker */\n.docskin .trk{width:100%;border-collapse:collapse;margin:12px 0;font-size:13px;}\n.docskin .trk thead{background:var(--paper-2);color:var(--muted);} .docskin .trk th{padding:8px 10px;text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;border-bottom:1px solid var(--rule-solid);}\n.docskin .trk td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:middle;}\n.docskin .trk tr.done .trk-task{text-decoration:line-through;color:var(--muted);}\n.docskin .st{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;padding:2px 8px;border-radius:3px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .st.todo{border-style:dashed;border-color:var(--muted);color:var(--muted);} .docskin .st.doing{border-color:var(--accent);color:var(--accent);} .docskin .st.done{background:var(--paper-2);border-color:var(--paper-2);} .docskin .st.blocked{border-color:var(--negative);color:var(--negative);}\n.docskin .pri{font-family:var(--font-mono);font-size:10px;font-weight:700;} .docskin .pri.high{color:var(--negative);} .docskin .pri.med{color:var(--ink);} .docskin .pri.low{color:var(--muted);}\n/* cluster */\n.docskin .cl-head{font-family:var(--font-display);font-size:13px;font-weight:700;fill:var(--ink);}\n/* user story */\n.docskin .story{border:1px solid var(--rule);border-left:4px solid var(--navy);padding:18px 22px;margin:12px 0;background:var(--white);border-radius:0 var(--radius) var(--radius) 0;}\n.docskin .story-stmt{font-family:var(--font-display);font-size:18px;line-height:1.55;color:var(--charcoal);}\n.docskin .story-stmt b{color:var(--navy);}\n.docskin .story-meta{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;}\n.docskin .story-chip{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:3px;background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);}\n.docskin .story-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;}\n.docskin .story-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-right:auto;}\n.docskin .story-chip.pts{background:var(--paper);color:var(--ink);border-color:var(--ink);}\n.docskin .ac-title{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:500;margin:16px 0 8px;}\n.docskin .ac-item{border:1px solid var(--rule-solid);padding:10px 14px;margin-bottom:8px;background:var(--paper);border-radius:4px;}\n.docskin .gwt{display:grid;grid-template-columns:60px 1fr;gap:4px 12px;font-size:13px;}\n.docskin .gwt .k{font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;padding-top:1px;color:var(--muted);}\n.docskin .gwt .k.t{color:var(--ink);}\n.docskin .gwt .v{color:var(--charcoal);}\n.docskin .links-row{display:flex;gap:8px;flex-wrap:wrap;}\n.docskin .link-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--navy);border:1px solid var(--navy);background:var(--white);padding:5px 11px;border-radius:20px;cursor:pointer;}\n.docskin .link-chip .lt{color:var(--gray);font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;}\na.link-chip,a.st-link{text-decoration:none;color:inherit;}\na.link-chip:hover,a.st-link:hover{text-decoration:underline;}\n.docskin .footer{margin-top:8px;padding:18px 32px 28px;border-top:2px solid var(--navy);font-size:11px;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;font-weight:700;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;}\n.docskin .footer .accent{color:var(--highlight);}\n.docskin .layer-label{font-family:var(--font-body);font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;}\n.docskin .uml-sep{stroke:var(--rule);stroke-width:1;}\n/* wireframe / UI mockups */\n.docskin .wf-h{font-family:var(--font-display);font-size:18px;font-weight:700;}\n.docskin .wf-sub{font-family:var(--font-body);font-size:12px;font-weight:600;}\n.docskin .wf-btn{font-family:var(--font-body);font-size:11px;font-weight:700;fill:var(--paper);}\n.docskin .wf-btn.on-light{fill:var(--ink);}\n.docskin .wf-ph-text{font-family:var(--font-body);font-size:10px;fill:var(--muted);}\n.docskin .wf-status{font-family:var(--font-mono);font-size:9px;fill:var(--charcoal);font-weight:700;}\n.docskin .wf-url{font-family:var(--font-mono);font-size:8.5px;fill:var(--gray);}\n.docskin .wf-tab{font-family:var(--font-body);font-size:8px;}\n.docskin .wf-caption{font-family:var(--font-mono);font-size:10px;fill:var(--gray);letter-spacing:.04em;}\n/* parse error (the block-level div only; .err modifiers on labels and rows have their own rules) */\n.docskin div.err{font-family:var(--font-mono);font-size:12px;color:var(--negative);background:var(--negative-tint);border:1px solid var(--negative);border-radius:4px;padding:8px 12px;margin:12px 0;white-space:pre-wrap;}\n/* endpoint (API reference card) */\n.docskin .endpoint{border:1px solid var(--rule-solid);border-radius:6px;margin:18px 0;overflow:hidden;background:var(--paper);}\n.docskin .ep-head{display:flex;align-items:center;gap:12px;padding:11px 16px;background:var(--paper-2);border-bottom:1px solid var(--rule-solid);flex-wrap:wrap;}\n/* The method chip is the card's one accent; DELETE reads as negative. */\n.docskin .ep-method{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--accent);padding:3px 9px;border-radius:3px;letter-spacing:.08em;border:1px solid var(--accent);background:var(--paper);}\n.docskin .ep-method.delete{color:var(--negative);border-color:var(--negative);}\n.docskin .ep-path{font-family:var(--font-mono);font-size:14px;font-weight:600;color:var(--ink);}\n.docskin .ep-auth{margin-left:auto;font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);padding:3px 8px;border-radius:3px;}\n.docskin .ep-body{padding:6px 16px 14px;}\n.docskin .ep-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin:10px 0 2px;}\n.docskin .ep-desc{font-size:13.5px;color:var(--slate);margin:4px 0 0;line-height:1.55;}\n.docskin .ep-section{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--gray);font-weight:700;margin:16px 0 6px;}\n.docskin .ep-table{width:100%;border-collapse:collapse;font-size:13px;}\n.docskin .ep-table th{text-align:left;font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--gray);font-weight:700;padding:4px 8px;border-bottom:1px solid var(--rule);}\n.docskin .ep-table td{padding:6px 8px;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--charcoal);}\n.docskin .ep-name{font-family:var(--font-mono);font-weight:600;color:var(--navy);white-space:nowrap;}\n.docskin .ep-type{font-family:var(--font-mono);color:var(--slate);font-size:12px;}\n.docskin .ep-req{font-family:var(--font-body);font-size:9px;font-weight:700;text-transform:uppercase;color:var(--negative);letter-spacing:.04em;}\n.docskin .ep-status{font-family:var(--font-mono);font-weight:600;font-size:12px;padding:1px 8px;border-radius:3px;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .ep-status.ep-2xx{background:var(--paper-2);border-color:var(--paper-2);} .docskin .ep-status.ep-3xx{border-style:dashed;border-color:var(--muted);color:var(--muted);} .docskin .ep-status.ep-5xx{border-color:var(--negative);color:var(--negative);}\n.docskin .ep-ex{font-family:var(--font-mono);font-size:12px;line-height:1.5;color:var(--ink);background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:4px;padding:10px 12px;margin:4px 0 0;overflow-x:auto;white-space:pre;}\n.docskin .j-key{color:var(--ink);font-weight:600;} .docskin .j-str{color:var(--muted);} .docskin .j-num{color:var(--ink);} .docskin .j-kw{color:var(--accent);font-weight:600;}\n/* pullquote */\n.docskin .pull{margin:28px 0;padding:18px 24px;background:var(--paper-2);border-left:3px solid var(--accent);border-radius:0 6px 6px 0;}\n.docskin .pull-text{font-family:var(--font-display);font-size:18px;line-height:1.45;color:var(--ink);max-width:840px;}\n.docskin .pull-attr{margin-top:10px;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:500;}\n/* layers (numbered layer stack) */\n.docskin .layer-stack{margin:22px 0;border:1px solid var(--rule-solid);border-radius:6px;overflow:hidden;background:var(--paper);}\n.docskin .layer{display:grid;grid-template-columns:48px 168px 1fr;border-bottom:1px solid var(--rule);}\n.docskin .layer:last-child{border-bottom:none;}\n.docskin .layer-num{background:var(--paper-2);color:var(--ink);border-right:1px solid var(--rule);display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:16px;font-weight:600;}\n.docskin .layer-meta{background:var(--paper);padding:13px 15px;border-right:1px solid var(--rule);}\n.docskin .layer-kicker{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);font-weight:500;margin-bottom:4px;}\n.docskin .layer-title{font-family:var(--font-display);font-size:14px;font-weight:700;color:var(--ink);}\n.docskin .layer-src{font-family:var(--font-mono);font-size:10px;color:var(--muted);margin-top:4px;}\n.docskin .layer-q{font-family:var(--font-display);font-size:12px;font-style:italic;color:var(--muted);margin-top:8px;line-height:1.35;}\n.docskin .layer-body{padding:13px 18px;font-size:13px;line-height:1.55;color:var(--ink);}\n/* matrix (role \u00D7 resource capability grid) \u2014 full = solid ink outline, some = dashed outline, none = muted */\n.docskin .matrix{margin:22px 0;}\n.docskin .mx-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .mx-desc{font-size:13px;color:var(--muted);margin:2px 0 10px;line-height:1.5;}\n.docskin .mx-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);}\n.docskin .mx-grid{border-collapse:collapse;width:100%;font-size:13px;}\n.docskin .mx-grid th,.docskin .mx-grid td{padding:9px 13px;text-align:center;border-bottom:1px solid var(--rule);border-right:1px solid var(--rule);}\n.docskin .mx-grid tr:last-child th,.docskin .mx-grid tr:last-child td{border-bottom:none;}\n.docskin .mx-grid th:last-child,.docskin .mx-grid td:last-child{border-right:none;}\n.docskin .mx-grid thead th{background:var(--paper-2);color:var(--muted);font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;}\n.docskin .mx-corner{background:var(--paper-2)!important;color:var(--muted)!important;text-align:left;}\n.docskin .mx-row{text-align:left;background:var(--paper-2);color:var(--ink);font-weight:600;white-space:nowrap;}\n.docskin .mx-cell{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--ink);}\n.docskin .mx-cell.m-full{outline:1.5px solid var(--ink);outline-offset:-5px;}\n.docskin .mx-cell.m-some{outline:1px dashed var(--muted);outline-offset:-5px;}\n.docskin .mx-cell.m-none{color:var(--muted);font-weight:400;}\n/* anatomy (anatomy of a structured string) */\n.docskin .anatomy{margin:24px 0;}\n.docskin .a-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .a-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .a-string{font-family:var(--font-mono);font-size:22px;font-weight:700;text-align:center;padding:14px;background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:6px;overflow-x:auto;white-space:nowrap;color:var(--ink);}\n.docskin .a-sep{color:var(--muted);margin:0 2px;font-weight:400;}\n.docskin .a-cards{display:flex;flex-wrap:wrap;align-items:stretch;gap:0;margin-top:14px;justify-content:center;}\n.docskin .a-card{flex:1 1 140px;min-width:120px;max-width:240px;background:var(--paper);border:1px solid var(--rule-solid);border-radius:6px;padding:10px 13px;}\n.docskin .a-card-sep{align-self:center;font-family:var(--font-mono);font-size:18px;font-weight:700;color:var(--muted);padding:0 8px;}\n.docskin .a-label{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;font-weight:500;margin-bottom:5px;color:var(--muted);}\n.docskin .a-value{font-family:var(--font-mono);font-size:14px;font-weight:600;color:var(--ink);word-break:break-word;}\n.docskin .a-note{font-size:12px;color:var(--muted);margin-top:5px;line-height:1.45;}\n/* Segments are told apart by their label, not a hue. */\n.docskin .a-seg-1,.docskin .a-seg-2,.docskin .a-seg-3,.docskin .a-seg-4{color:var(--ink);}\n.docskin .a-label.a-seg-1,.docskin .a-label.a-seg-2,.docskin .a-label.a-seg-3,.docskin .a-label.a-seg-4{color:var(--muted);}\n/* composition (layered gates intersected into a result) \u2014 the result is the one accent */\n.docskin .composition{margin:24px 0;}\n.docskin .cp-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .cp-desc-top{font-size:13px;color:var(--muted);margin:2px 0 14px;line-height:1.5;}\n.docskin .cp-row{display:flex;flex-wrap:wrap;align-items:stretch;gap:0;}\n.docskin .cp-gate{flex:1 1 150px;min-width:140px;background:var(--paper);border:1px solid var(--rule-solid);border-radius:6px;padding:0 0 12px;overflow:hidden;box-shadow:none;display:flex;flex-direction:column;}\n.docskin .cp-gate-head{padding:10px 14px 8px;border-bottom:1px solid var(--rule);background:var(--paper-2);}\n.docskin .cp-gate-kicker{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;font-weight:500;color:var(--muted);margin-bottom:3px;}\n.docskin .cp-gate-label{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--ink);line-height:1.2;}\n.docskin .cp-desc{font-size:12px;color:var(--muted);margin:8px 14px 0;line-height:1.45;flex:1;}\n.docskin .cp-gate-src{font-family:var(--font-mono);font-size:9.5px;color:var(--muted);margin:8px 14px 0;}\n.docskin .cp-op,.docskin .cp-eq{align-self:center;font-family:var(--font-display);font-size:26px;font-weight:700;color:var(--muted);padding:0 12px;}\n.docskin .cp-result{flex:1 1 150px;min-width:140px;align-self:stretch;background:var(--paper);border:1.5px solid var(--accent);border-radius:6px;padding:14px;display:flex;flex-direction:column;justify-content:center;}\n.docskin .cp-result-kicker{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;font-weight:500;color:var(--accent);margin-bottom:4px;}\n.docskin .cp-result-label{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);line-height:1.2;}\n/* drivers (factor card grid) */\n.docskin .drivers{margin:24px 0;}\n.docskin .dv-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .dv-desc{font-size:13px;color:var(--muted);margin:2px 0 12px;line-height:1.5;}\n.docskin .dv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;}\n.docskin .dv-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:18px 16px;text-align:center;box-shadow:none;}\n.docskin .dv-icon{width:38px;height:38px;margin:0 auto 10px;display:block;color:var(--muted);}\n.docskin .dv-title{font-family:var(--font-display);font-size:14px;font-weight:700;color:var(--ink);line-height:1.25;margin-bottom:6px;}\n.docskin .dv-sub{font-size:11.5px;line-height:1.45;color:var(--muted);}\n.docskin .dv-tag{margin-top:8px;font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;color:var(--muted);text-transform:uppercase;}\n/* Card accents are ignored by the skin: drivers differ by title and tag, not hue. */\n/* options (approaches explored) \u2014 the chosen card takes the accent; verdicts are status chips */\n.docskin .options{margin:24px 0;}\n.docskin .op-headline{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .op-desc{font-size:13px;color:var(--muted);margin:2px 0 12px;line-height:1.5;}\n.docskin .op-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;align-items:stretch;}\n.docskin .op-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;display:flex;flex-direction:column;}\n.docskin .op-card.is-chosen{border:1.5px solid var(--accent);box-shadow:none;}\n.docskin .op-head{padding:12px 14px 10px;color:var(--ink);background:var(--paper-2);border-bottom:1px solid var(--rule);}\n.docskin .op-kicker{display:block;font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:4px;}\n.docskin .op-card.is-chosen .op-kicker{color:var(--accent);}\n.docskin .op-title{font-family:var(--font-display);font-size:14px;font-weight:700;line-height:1.25;color:var(--ink);}\n.docskin .op-how{padding:9px 14px;font-size:11.5px;color:var(--ink);background:var(--paper);border-bottom:1px solid var(--rule);line-height:1.45;}\n.docskin .op-body{padding:10px 14px 12px;flex:1;}\n.docskin .op-list{list-style:none;margin:0 0 8px;padding:0;}\n.docskin .op-list li{position:relative;padding-left:18px;font-size:12px;line-height:1.5;color:var(--ink);margin-bottom:5px;}\n.docskin .op-list li::before{position:absolute;left:0;top:0;font-weight:700;}\n.docskin .op-pros li::before{content:\"\\2713\";color:var(--ink);}\n.docskin .op-cons li::before{content:\"\\2717\";color:var(--negative);}\n.docskin .op-verdict{margin:0 14px 14px;padding:6px 8px;border-radius:3px;font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-align:center;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--ink);color:var(--ink);background:var(--paper);}\n.docskin .op-v-rejected,.docskin .op-v-neutral{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .op-v-warn{border-color:var(--negative);color:var(--negative);}\n.docskin .op-v-chosen{border-color:var(--accent);color:var(--accent);}\n/* spec (labelled spec sheet) */\n.docskin .spec{margin:22px 0;}\n.docskin .sp-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .sp-desc{font-size:13px;color:var(--muted);margin:2px 0 10px;line-height:1.5;}\n.docskin .sp-grid{display:grid;grid-template-columns:140px 1fr;border:1px solid var(--rule-solid);border-radius:6px;overflow:hidden;background:var(--paper);}\n.docskin .sp-label{background:var(--paper-2);font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);padding:12px 16px;border-bottom:1px solid var(--rule);display:flex;align-items:center;}\n.docskin .sp-val{padding:12px 16px;font-size:13px;line-height:1.5;color:var(--ink);border-bottom:1px solid var(--rule);}\n.docskin .sp-grid > .sp-label:nth-last-child(2),.docskin .sp-grid > .sp-val:last-child{border-bottom:none;}\n.docskin .sp-flow{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}\n.docskin .sp-step{background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:4px 9px;font-size:11px;font-weight:600;color:var(--ink);white-space:nowrap;}\n.docskin .sp-arrow{color:var(--muted);font-weight:700;}\n/* Sheet accents are ignored by the skin. */\n/* list (fancy bullet list \u2014 accent / check / icon / number styles) */\n.docskin .list-block{--ls-accent:var(--ink);--ls-soft:var(--paper-2);margin:22px 0;}\n.docskin .ls-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .ls-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .ls-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;}\n.docskin .ls-item{display:flex;align-items:flex-start;gap:12px;}\n.docskin .ls-body{display:flex;flex-direction:column;gap:2px;min-width:0;}\n.docskin .ls-lead{font-weight:700;color:var(--charcoal);line-height:1.35;}\n.docskin .ls-text{font-size:13px;color:var(--slate);line-height:1.5;}\n.docskin .ls-mark{flex:none;display:flex;align-items:center;justify-content:center;}\n.docskin .ls-style-accent .ls-item{border-left:3px solid var(--ls-accent);padding:1px 0 1px 14px;}\n.docskin .ls-style-accent .ls-bar{display:none;}\n.docskin .ls-check{width:22px;height:22px;border-radius:50%;font-size:13px;font-weight:700;background:var(--paper-2);color:var(--ink);border:1px solid var(--rule-solid);}\n.docskin .ls-check.ls-off{background:var(--paper);color:var(--muted);border-style:dashed;}\n.docskin .ls-num{width:24px;height:24px;border-radius:50%;font-family:var(--font-mono);font-size:11px;font-weight:600;background:var(--paper);color:var(--ink);border:1px solid var(--ink);}\n.docskin .ls-icon{width:26px;height:26px;border-radius:6px;background:var(--ls-soft);color:var(--ls-accent);}\n.docskin .ls-icon svg{width:16px;height:16px;}\n/* List accents are ignored by the skin: every list marks in ink on paper-2. */\n/* stories (collapsible user-story backlog) */\n.docskin .stories{margin:22px 0;}\n.docskin .st-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .st-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .st-list{display:flex;flex-direction:column;gap:8px;}\n.docskin .st-item{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;}\n.docskin .st-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:12px 14px;}\n.docskin .st-summary::-webkit-details-marker{display:none;}\n.docskin .st-caret{flex:none;width:0;height:0;border-left:5px solid var(--gray);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .15s;}\n.docskin details[open]>.st-summary .st-caret{transform:rotate(90deg);}\n.docskin .st-sum-main{display:flex;align-items:center;gap:8px;flex:1;min-width:0;}\n.docskin .st-id{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--ink);background:var(--paper-2);padding:1px 6px;border-radius:3px;}\n.docskin .st-sum-title{font-weight:700;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n.docskin .st-chips{display:flex;gap:6px;flex:none;}\n.docskin .st-chip{font-family:var(--font-mono);font-size:10px;font-weight:600;padding:2px 7px;border-radius:3px;letter-spacing:.04em;white-space:nowrap;border:1px solid var(--rule-solid);background:var(--paper);color:var(--muted);}\n.docskin .st-points{background:var(--paper-2);border-color:var(--paper-2);color:var(--ink);}\n.docskin .st-prio{border-color:var(--ink);color:var(--ink);}\n.docskin .st-body{padding:2px 14px 14px 30px;border-top:1px solid var(--rule);}\n.docskin .st-narr{margin:12px 0 8px;color:var(--slate);line-height:1.55;font-size:14px;}\n.docskin .st-ac-label{font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--gray);margin:10px 0 4px;}\n.docskin .st-ac{margin:0;padding-left:18px;color:var(--slate);font-size:13px;line-height:1.5;}\n.docskin .st-ac li{margin:3px 0;}\n.docskin .st-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}\n.docskin .st-link{font-family:var(--font-mono);font-size:11px;color:var(--link);background:var(--paper);border:1px solid var(--rule-solid);padding:2px 8px;border-radius:3px;}\n/* pattern (design-pattern reference card) */\n.docskin .pattern{margin:22px 0;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;box-shadow:none;}\n.docskin .pt-header{display:flex;align-items:center;gap:10px;padding:13px 18px;background:var(--paper-2);color:var(--ink);border-bottom:1px solid var(--rule-solid);}\n.docskin .pt-kicker{font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;color:var(--muted);}\n.docskin .pt-name{font-family:var(--font-display);font-weight:700;font-size:17px;}\n.docskin .pt-cat{margin-left:auto;font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);padding:2px 8px;border-radius:3px;}\n.docskin .pt-rows{display:flex;flex-direction:column;}\n.docskin .pt-row{display:grid;grid-template-columns:130px 1fr;gap:14px;padding:12px 18px;border-top:1px solid var(--rule);}\n.docskin .pt-row:first-child{border-top:none;}\n.docskin .pt-label{font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--gray);padding-top:2px;}\n.docskin .pt-value{color:var(--charcoal);line-height:1.55;font-size:14px;}\n.docskin .pt-chips{display:flex;flex-wrap:wrap;gap:6px;}\n.docskin .pt-chip{font-size:12px;background:var(--light-gray);color:var(--slate);padding:2px 9px;border-radius:10px;}\n.docskin .pt-parts{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;}\n.docskin .pt-parts li{display:flex;gap:8px;align-items:baseline;}\n.docskin .pt-pname{font-weight:700;color:var(--ink);font-size:13px;}\n.docskin .pt-prole{color:var(--muted);font-size:13px;}\n.docskin .pt-cons{display:grid;grid-template-columns:1fr 1fr;gap:16px;}\n.docskin .pt-cons-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font-size:13px;line-height:1.45;}\n.docskin .pt-cons-list li{display:flex;gap:6px;}\n.docskin .pt-sign{font-weight:700;flex:none;}\n.docskin .pt-pro .pt-sign{color:var(--ink);}\n.docskin .pt-con .pt-sign{color:var(--negative);}\n/* gallery (responsive grid of code / note cards) */\n.docskin .gallery{margin:22px 0;}\n.docskin .gl-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .gl-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .gl-grid{display:grid;grid-template-columns:repeat(var(--gl-cols,2),minmax(0,1fr));gap:14px;align-items:start;}\n@media(max-width:680px){.docskin .gl-grid{grid-template-columns:1fr;}}\n.docskin .gl-cell{min-width:0;}\n.docskin .gl-cell .diagram{margin:0;}\n.docskin .gl-cell .gl-card-title{padding:0 0 6px;}\n.docskin .gl-cell .gl-cap{padding:8px 2px 0;}\n.docskin .gl-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;box-shadow:none;display:flex;flex-direction:column;min-width:0;}\n.docskin .gl-card>.code-header{border-radius:0;}\n.docskin .gl-card>pre{margin:0;border:none;border-radius:0;font-size:11.5px;line-height:1.55;padding:13px 15px;flex:1;}\n.docskin .gl-card-title{font-family:var(--font-display);font-weight:700;font-size:13px;color:var(--ink);padding:11px 13px 0;}\n.docskin .gl-cap{font-size:12px;color:var(--muted);padding:9px 13px 11px;line-height:1.45;}\n/* Card accents are ignored by the skin. */\n/* chart (bar / line / area / donut) \u2014 the donut's centre figure; every other chart label is a type role */\n.docskin .chart-total{font-family:var(--font-display);font-size:22px;font-weight:700;fill:var(--ink);text-anchor:middle;}\n/* figure (an image with a caption) */\n.docskin .fig{margin:22px 0;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:14px;box-shadow:none;}\n.docskin .fig-img{display:block;max-width:100%;height:auto;border-radius:4px;margin:0 auto;}\n.docskin .fig-cap{font-size:13px;color:var(--muted);margin-top:10px;line-height:1.5;}\n/* diff (unified diff on the dark editor surface) */\n.docskin .diff-pre{padding:14px 0;}\n.docskin .df-line{display:block;padding:0 20px;color:var(--code-fg);}\n.docskin .df-add{background:var(--code-add-bg);color:var(--code-add);}\n.docskin .df-del{background:var(--code-del-bg);color:var(--code-del);}\n.docskin .df-hunk{color:var(--code-muted);font-style:italic;}\n/* steps (numbered how-to / runbook stepper) */\n.docskin .steps{margin:22px 0;}\n.docskin .stp-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .stp-desc{font-size:13px;color:var(--slate);margin:2px 0 14px;line-height:1.5;}\n.docskin .stp-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}\n.docskin .stp-item{position:relative;display:flex;align-items:flex-start;gap:14px;padding:0 0 22px;}\n.docskin .stp-item:last-child{padding-bottom:0;}\n.docskin .stp-item::before{content:\"\";position:absolute;left:12px;top:28px;bottom:2px;width:2px;background:var(--rule);}\n.docskin .stp-item:last-child::before{display:none;}\n.docskin .stp-num{flex:none;position:relative;z-index:1;width:26px;height:26px;border-radius:50%;background:var(--paper);color:var(--ink);border:1px solid var(--ink);font-family:var(--font-mono);font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;}\n.docskin .stp-body{flex:1;min-width:0;padding-top:3px;}\n.docskin .stp-title{font-weight:700;font-size:14px;color:var(--ink);line-height:1.35;}\n.docskin .stp-text{font-size:13px;color:var(--muted);margin:4px 0 0;line-height:1.55;max-width:760px;}\n.docskin .stp-code{margin:10px 0 0;border-radius:6px;overflow:hidden;border:1px solid var(--rule-solid);box-shadow:none;}\n.docskin .stp-code-head{padding:6px 14px;background:var(--code-bg);color:var(--code-muted);font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.04em;border-bottom:1px solid var(--code-rule);}\n.docskin .stp-code pre{font-size:12px;line-height:1.6;padding:12px 16px;}\n.docskin .stp-code pre code{background:transparent;border:none;padding:0;border-radius:0;font-size:inherit;color:inherit;}\n.docskin .stp-note{font-size:12px;color:var(--gray);font-style:italic;margin:8px 0 0;line-height:1.5;}\n/* faq (Q&A accordions, native details) */\n.docskin .faq{margin:22px 0;}\n.docskin .fq-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .fq-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .fq-list{display:flex;flex-direction:column;gap:8px;}\n.docskin .fq-item{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;}\n.docskin .fq-summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;padding:13px 16px;}\n.docskin .fq-summary::-webkit-details-marker{display:none;}\n.docskin .fq-caret{flex:none;width:0;height:0;border-left:5px solid var(--gray);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .15s;}\n.docskin details[open]>.fq-summary .fq-caret{transform:rotate(90deg);}\n.docskin .fq-q{font-weight:700;color:var(--charcoal);line-height:1.4;}\n.docskin .fq-a{padding:2px 16px 14px 31px;border-top:1px solid var(--rule);font-size:14px;color:var(--slate);line-height:1.6;}\n.docskin .fq-a p{margin:10px 0 0;max-width:780px;}\n/* envelope (back-of-envelope capacity math) */\n.docskin .envelope{margin:22px 0;}\n.docskin .env-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .env-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .env-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:18px 22px;box-shadow:none;}\n.docskin .env-givens{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 24px;padding-bottom:16px;margin-bottom:14px;border-bottom:1px solid var(--rule);}\n.docskin .env-g-label{font-family:var(--font-mono);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--gray);margin-bottom:2px;}\n.docskin .env-g-value{font-size:15px;font-weight:700;color:var(--charcoal);}\n.docskin .env-steps{display:flex;flex-direction:column;gap:9px;}\n.docskin .env-step{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}\n.docskin .env-s-label{flex:0 0 150px;font-size:13px;color:var(--slate);}\n.docskin .env-s-calc{font-family:var(--font-mono);font-size:12.5px;color:var(--charcoal);background:var(--light-gray);border:1px solid var(--rule);border-radius:5px;padding:2px 8px;}\n.docskin .env-s-arrow{color:var(--gray);font-weight:700;}\n.docskin .env-s-result{font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--ink);}\n/* The final figure is the one accent. */\n.docskin .env-result{margin-top:16px;padding:12px 16px;background:var(--paper-2);border-left:3px solid var(--accent);border-radius:0 6px 6px 0;}\n.docskin .env-r-label{font-family:var(--font-mono);font-size:9.5px;font-weight:500;text-transform:uppercase;letter-spacing:.12em;color:var(--accent);margin-bottom:2px;}\n.docskin .env-r-value{font-family:var(--font-display);font-size:18px;font-weight:700;color:var(--ink);line-height:1.25;}\n/* slo (service-level objectives with error budgets) */\n.docskin .slo{margin:22px 0;}\n.docskin .slo-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .slo-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .slo-list{display:flex;flex-direction:column;gap:12px;}\n.docskin .slo-item{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:14px 18px;box-shadow:none;}\n.docskin .slo-top{display:flex;align-items:center;gap:10px;}\n.docskin .slo-name{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--charcoal);flex:1;min-width:0;}\n.docskin .slo-window{font-family:var(--font-mono);font-size:10px;font-weight:700;color:var(--slate);background:var(--light-gray);border:1px solid var(--rule);border-radius:10px;padding:2px 8px;white-space:nowrap;}\n.docskin .slo-sli{font-size:12.5px;color:var(--slate);margin:3px 0 0;line-height:1.5;}\n.docskin .slo-vals{display:flex;gap:26px;margin-top:9px;}\n.docskin .slo-val{display:flex;flex-direction:column;gap:1px;}\n.docskin .slo-v-label{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--gray);}\n.docskin .slo-v-num{font-family:var(--font-mono);font-size:14px;font-weight:700;color:var(--charcoal);}\n.docskin .slo-v-num.slo-ok{color:var(--ink);}\n.docskin .slo-v-num.slo-bad{color:var(--negative);}\n.docskin .slo-budget{margin-top:10px;}\n.docskin .slo-track{height:8px;border-radius:4px;background:var(--paper-2);border:1px solid var(--rule);overflow:hidden;}\n.docskin .slo-fill{height:100%;border-radius:4px;}\n/* Budget burn: muted while healthy, ink when the caption says it is close, negative only when it is spent. */\n.docskin .slo-fill.slo-b-ok{background:var(--muted);}\n.docskin .slo-fill.slo-b-warn{background:var(--ink);}\n.docskin .slo-fill.slo-b-hot{background:var(--negative);}\n.docskin .slo-caption{font-family:var(--font-mono);font-size:11px;color:var(--muted);margin-top:5px;}\n/* terminal (a shell session on the dark surface) */\n.docskin .terminal-block{border-radius:6px;}\n.docskin .tm-pre{line-height:1.7;}\n.docskin .tm-line{display:block;}\n.docskin .tm-prompt{color:var(--code-str);font-weight:700;}\n.docskin .tm-cmd-text{color:var(--code-fg);font-weight:700;}\n.docskin .tm-comment{color:var(--code-com);font-style:italic;}\n.docskin .tm-out{color:var(--code-muted);}\n/* swot (strengths / weaknesses / opportunities / threats 2x2) */\n.docskin .swot{margin:22px 0;}\n.docskin .swot-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .swot-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .swot-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}\n@media(max-width:680px){.docskin .swot-grid{grid-template-columns:1fr;}}\n/* Quadrants are told apart by their label: paper for the internal pair (S, W), paper-2 for the external pair (O, T). */\n.docskin .swot-quad{border:1px solid var(--rule-solid);border-radius:6px;padding:13px 16px 14px;box-shadow:none;background:var(--paper);}\n.docskin .swot-label{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;margin-bottom:7px;color:var(--muted);}\n.docskin .swot-list{list-style:none;margin:0;padding:0;}\n.docskin .swot-item{position:relative;font-size:13px;color:var(--ink);line-height:1.5;padding:2px 0 2px 14px;}\n.docskin .swot-item::before{content:\"\";position:absolute;left:0;top:11px;width:5px;height:5px;border-radius:50%;background:var(--muted);}\n.docskin .swot-o,.docskin .swot-t{background:var(--paper-2);}\n.docskin .swot-w .swot-label,.docskin .swot-t .swot-label{color:var(--negative);}\n/* okr (objectives + key results) */\n.docskin .okr{margin:22px 0;}\n.docskin .okr-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .okr-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .okr-list{display:flex;flex-direction:column;gap:12px;}\n.docskin .okr-item{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:14px 18px;box-shadow:none;}\n.docskin .okr-top{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;}\n.docskin .okr-objective{font-family:var(--font-display);font-weight:700;font-size:14.5px;color:var(--charcoal);flex:1;min-width:0;}\n.docskin .okr-owner{font-family:var(--font-mono);font-size:10px;font-weight:700;color:var(--slate);background:var(--light-gray);border:1px solid var(--rule);border-radius:10px;padding:2px 8px;white-space:nowrap;}\n.docskin .okr-krs{display:flex;flex-direction:column;gap:8px;}\n.docskin .okr-kr-text{font-size:13px;color:var(--charcoal);line-height:1.45;}\n.docskin .okr-kr-bar{display:flex;align-items:center;gap:10px;margin-top:3px;}\n.docskin .okr-track{flex:1;height:7px;border-radius:4px;background:var(--paper-2);border:1px solid var(--rule);overflow:hidden;}\n.docskin .okr-fill{height:100%;border-radius:4px;background:var(--ink);}\n.docskin .okr-fill.okr-b-ok,.docskin .okr-fill.okr-b-plain{background:var(--ink);}\n.docskin .okr-fill.okr-b-warn{background:var(--muted);}\n.docskin .okr-fill.okr-b-bad{background:var(--negative);}\n.docskin .okr-pct{flex:none;font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--muted);min-width:34px;text-align:right;}\n/* The KR's status as a word chip (the bar tone alone never carries it). */\n.docskin .okr-status{flex:none;font-family:var(--font-mono);font-size:9px;font-weight:600;padding:1px 7px;border-radius:3px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .okr-status.okr-s-done,.docskin .okr-status.okr-s-on-track{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .okr-status.okr-s-at-risk{border-color:var(--accent);color:var(--accent);}\n.docskin .okr-status.okr-s-off-track{border-color:var(--negative);color:var(--negative);}\n/* persona (user persona cards) */\n.docskin .persona{margin:22px 0;}\n.docskin .pa-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .pa-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .pa-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start;}\n@media(max-width:680px){.docskin .pa-grid{grid-template-columns:1fr;}}\n.docskin .pa-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:16px 18px;box-shadow:none;}\n.docskin .pa-id{display:flex;align-items:center;gap:12px;}\n.docskin .pa-avatar{flex:none;width:42px;height:42px;border-radius:50%;background:var(--paper-2);color:var(--ink);border:1px solid var(--rule-solid);font-family:var(--font-display);font-size:15px;font-weight:700;display:flex;align-items:center;justify-content:center;letter-spacing:.02em;}\n.docskin .pa-name{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);line-height:1.25;}\n.docskin .pa-role{font-size:12px;color:var(--muted);margin-top:1px;}\n.docskin .pa-quote{font-family:var(--font-display);font-style:italic;font-size:13px;color:var(--muted);line-height:1.5;margin:12px 0 0;padding:2px 0 2px 12px;border-left:2px solid var(--rule-solid);}\n.docskin .pa-section{margin-top:12px;}\n.docskin .pa-sec-label{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;font-weight:500;color:var(--muted);margin-bottom:4px;}\n.docskin .pa-list{list-style:none;margin:0;padding:0;}\n.docskin .pa-li{position:relative;font-size:12.5px;color:var(--ink);line-height:1.5;padding:1px 0 1px 14px;}\n.docskin .pa-li::before{content:\"\";position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:var(--muted);}\n.docskin .pa-frustrations .pa-li::before{background:var(--negative);}\n.docskin .pa-tools{display:flex;flex-wrap:wrap;gap:6px;}\n.docskin .pa-tool{font-family:var(--font-mono);font-size:10.5px;font-weight:600;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:2px 8px;}\n/* Card accents are ignored by the skin. */\n/* changelog (release history on a vertical rail) */\n.docskin .changelog{margin:22px 0;}\n.docskin .cg-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .cg-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .cg-rail{position:relative;padding-left:26px;}\n.docskin .cg-rail::before{content:\"\";position:absolute;left:7px;top:8px;bottom:8px;width:2px;background:var(--rule);}\n.docskin .cg-release{position:relative;padding-bottom:20px;}\n.docskin .cg-release:last-child{padding-bottom:0;}\n.docskin .cg-dot{position:absolute;left:-25px;top:4px;width:12px;height:12px;border-radius:50%;background:var(--paper);border:1.5px solid var(--ink);box-shadow:none;}\n.docskin .cg-dot-breaking{border-color:var(--negative);background:var(--negative-tint);}\n.docskin .cg-rel-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:7px;}\n.docskin .cg-version{font-family:var(--font-mono);font-size:12.5px;font-weight:700;color:var(--ink);background:var(--paper-2);border-radius:3px;padding:2px 9px;}\n.docskin .cg-version.cg-v-breaking{background:var(--paper);color:var(--negative);border:1px solid var(--negative);}\n.docskin .cg-date{font-size:12px;color:var(--muted);}\n.docskin .cg-tag{font-family:var(--font-mono);font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:2px 8px;}\n.docskin .cg-tag-breaking{color:var(--negative);border-color:var(--negative);}\n.docskin .cg-items{display:flex;flex-direction:column;gap:5px;}\n.docskin .cg-item{display:flex;align-items:baseline;gap:9px;}\n/* Change kinds as status chips: added / fixed = paper-2 fill \u00B7 changed = ink outline \u00B7 removed / deprecated = dashed \u00B7 security = negative outline. */\n.docskin .cg-type{flex:none;font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:1px 7px;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .cg-t-added,.docskin .cg-t-fixed{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .cg-t-removed,.docskin .cg-t-deprecated{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .cg-t-security{border-color:var(--negative);color:var(--negative);}\n.docskin .cg-text{font-size:13px;color:var(--ink);line-height:1.5;}\n/* team (compact people cards) */\n.docskin .team{margin:22px 0;}\n.docskin .tem-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .tem-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .tem-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:stretch;}\n@media(max-width:900px){.docskin .tem-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}\n@media(max-width:680px){.docskin .tem-grid{grid-template-columns:1fr;}}\n.docskin .tem-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:16px 16px 14px;text-align:center;box-shadow:none;}\n.docskin .tem-avatar{width:40px;height:40px;border-radius:50%;background:var(--paper-2);color:var(--ink);border:1px solid var(--rule-solid);font-family:var(--font-display);font-size:14px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;letter-spacing:.02em;margin-bottom:9px;}\n.docskin .tem-name{font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--ink);line-height:1.3;}\n.docskin .tem-role{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);margin-top:2px;}\n.docskin .tem-focus{font-size:12.5px;color:var(--muted);line-height:1.45;margin-top:6px;}\n/* Card accents are ignored by the skin. */\n/* heatmap (numeric grid with an intensity ramp) */\n.docskin .heatmap{margin:22px 0;}\n.docskin .hm-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .hm-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .hm-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:14px 16px;box-shadow:none;}\n.docskin .hm-grid{display:grid;gap:4px;min-width:0;}\n.docskin .hm-corner{min-width:0;}\n.docskin .hm-col{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--gray);text-align:center;align-self:end;padding-bottom:2px;white-space:nowrap;}\n.docskin .hm-rowlabel{font-size:12px;font-weight:600;color:var(--charcoal);text-align:right;align-self:center;padding-right:8px;white-space:nowrap;}\n.docskin .hm-cell{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--charcoal);border-radius:6px;min-height:32px;display:flex;align-items:center;justify-content:center;}\n.docskin .hm-cell.hm-blank{background:var(--paper-2);}\n/* scorecard (weighted decision matrix) \u2014 the winner takes the accent */\n.docskin .scorecard{margin:22px 0;}\n.docskin .sc-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .sc-desc{font-size:13px;color:var(--muted);margin:2px 0 12px;line-height:1.5;}\n.docskin .sc-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;box-shadow:none;}\n.docskin .sc-table{width:100%;border-collapse:collapse;font-size:13px;background:var(--paper);}\n.docskin .sc-table thead th{background:var(--paper-2);color:var(--muted);padding:10px 12px;text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;vertical-align:top;border-bottom:1px solid var(--rule-solid);}\n.docskin .sc-table th.c,.docskin .sc-table td.c{text-align:center;}\n.docskin .sc-table thead th.sc-win{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent);}\n.docskin .sc-table td{padding:9px 12px;border-bottom:1px solid var(--rule);color:var(--ink);}\n.docskin .sc-crit{font-weight:600;color:var(--ink);}\n.docskin .sc-weight{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;color:var(--ink);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:1px 6px;margin-left:8px;}\n.docskin .sc-score{font-family:var(--font-mono);font-weight:600;}\n.docskin .sc-note{display:block;font-family:var(--font-body);font-size:11px;font-weight:400;color:var(--muted);text-transform:none;letter-spacing:0;margin-top:3px;}\n.docskin .sc-winner{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:600;letter-spacing:.1em;color:var(--accent);background:var(--paper);border:1px solid var(--accent);border-radius:3px;padding:1px 6px;margin-left:8px;vertical-align:middle;}\n.docskin .sc-foot td{border-bottom:none;border-top:1.5px solid var(--ink);font-family:var(--font-mono);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);}\n.docskin .sc-foot td.sc-total{font-size:14px;color:var(--ink);letter-spacing:0;}\n.docskin .sc-foot td.sc-total.sc-win{background:var(--accent-tint);color:var(--ink);font-weight:700;}\n/* risk (risk register row-cards) \u2014 severity and status as chips */\n.docskin .risk{margin:22px 0;}\n.docskin .rk-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .rk-desc{font-size:13px;color:var(--muted);margin:2px 0 12px;line-height:1.5;}\n.docskin .rk-list{display:flex;flex-direction:column;gap:10px;}\n.docskin .rk-item{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:12px 16px;box-shadow:none;}\n.docskin .rk-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}\n.docskin .rk-sev{flex:none;font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:2px 8px;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .rk-sev-critical{background:var(--negative-tint);color:var(--negative);border-color:var(--negative);}\n.docskin .rk-sev-high{color:var(--negative);border-color:var(--negative);}\n.docskin .rk-sev-low{background:var(--paper-2);border-color:var(--paper-2);color:var(--muted);}\n.docskin .rk-risk{font-family:var(--font-display);font-weight:700;font-size:13.5px;color:var(--ink);flex:1;min-width:0;}\n.docskin .rk-chips{display:flex;align-items:center;gap:6px;flex:none;margin-left:auto;}\n.docskin .rk-owner{font-family:var(--font-mono);font-size:10px;font-weight:600;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:2px 8px;white-space:nowrap;}\n.docskin .rk-status{font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:2px 8px;white-space:nowrap;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .rk-st-mitigating{border-color:var(--accent);color:var(--accent);}\n.docskin .rk-st-accepted,.docskin .rk-st-closed{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .rk-meta{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--gray);margin-top:4px;}\n.docskin .rk-mitigation{font-size:12.5px;color:var(--slate);margin:5px 0 0;line-height:1.5;}\n.docskin .rk-mit-label{font-weight:700;color:var(--charcoal);}\n/* palette (colour-token swatches) */\n.docskin .palette{margin:22px 0;}\n.docskin .pl-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .pl-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .pl-grid{display:grid;grid-template-columns:repeat(var(--pl-cols,4),minmax(0,1fr));gap:14px;align-items:start;}\n@media(max-width:900px){.docskin .pl-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}\n@media(max-width:680px){.docskin .pl-grid{grid-template-columns:1fr;}}\n.docskin .pl-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;box-shadow:none;}\n.docskin .pl-swatch{height:64px;border-radius:5px 5px 0 0;display:flex;align-items:flex-end;padding:6px 9px;}\n.docskin .pl-hex{font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.02em;padding:1px 6px;border-radius:3px;}\n.docskin .pl-meta{padding:9px 11px 11px;border-top:1px solid var(--rule);}\n.docskin .pl-name{font-weight:700;font-size:13px;color:var(--charcoal);line-height:1.3;}\n.docskin .pl-usage{font-size:11.5px;color:var(--slate);margin-top:2px;line-height:1.45;}\n/* eventcontract (async event contract card \u2014 the twin of endpoint). Chips carry words; the partition-key row is the one accent. */\n.docskin .eventcontract{border:1px solid var(--rule-solid);border-radius:6px;margin:18px 0;overflow:hidden;background:var(--paper);}\n.docskin .evc-head{display:flex;align-items:center;gap:12px;padding:11px 16px;background:var(--paper-2);border-bottom:1px solid var(--rule-solid);flex-wrap:wrap;}\n.docskin .evc-eyebrow{color:var(--muted);} .docskin .evc-sep{margin:0 5px;}\n.docskin .evc-name{font-family:var(--font-mono);font-size:14px;font-weight:600;color:var(--ink);}\n.docskin .evc-channel{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:10.5px;color:var(--ink);background:var(--paper);border:1px solid var(--rule-solid);padding:3px 8px;border-radius:3px;}\n.docskin .evc-channel .t-eyebrow{color:var(--muted);}\n.docskin .evc-body{padding:6px 16px 14px;}\n.docskin .evc-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin:10px 0 2px;}\n.docskin .evc-summary,.docskin .evc-desc-p{font-size:13.5px;color:var(--muted);margin:10px 0 0;line-height:1.55;}\n/* Producers \u2192 consumers: two columns of mono chips on the paper-2 ground, the arrow between them. */\n.docskin .evc-strip{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:start;margin:14px 0 0;padding:10px 12px;background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:4px;}\n.docskin .evc-party-label{display:block;margin-bottom:7px;color:var(--muted);}\n.docskin .evc-chips{display:flex;flex-wrap:wrap;gap:6px;}\n.docskin .evc-chip{display:inline-block;font-family:var(--font-mono);font-size:10.5px;color:var(--ink);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:2px 7px;line-height:1.5;}\n.docskin .evc-none{color:var(--muted);}\n.docskin .evc-arrow{align-self:center;font-size:15px;color:var(--muted);padding:14px 2px 0;}\n/* Delivery facts: outlined word chips \u2014 the label word in the eyebrow role, then the value. */\n.docskin .evc-facts{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 0;}\n.docskin .evc-fact{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:10.5px;color:var(--ink);background:var(--paper);border:1px solid var(--ink);border-radius:3px;padding:2px 8px;line-height:1.5;}\n.docskin .evc-fact-k{color:var(--muted);}\n.docskin .evc-section{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:500;margin:16px 0 6px;}\n.docskin .evc-table{width:100%;border-collapse:collapse;font-size:13px;}\n.docskin .evc-table th{text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:500;padding:4px 8px;border-bottom:1px solid var(--rule);}\n.docskin .evc-table td{padding:6px 8px;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--ink);}\n.docskin .evc-mark{width:14px;padding-left:6px;padding-right:2px;font-family:var(--font-mono);font-weight:600;color:var(--muted);text-align:center;}\n.docskin .evc-fname{font-family:var(--font-mono);font-weight:600;color:var(--ink);white-space:nowrap;}\n.docskin .evc-type{font-family:var(--font-mono);color:var(--muted);font-size:12px;}\n.docskin .evc-eg{font-family:var(--font-mono);font-size:11px;color:var(--muted);}\n/* The partition key is the one accent: its marker and name in accent (on paper \u2014 the tint would drop it under 4.5:1), a rule down the row's left edge. */\n.docskin .evc-key td:first-child{border-left:2px solid var(--accent);padding-left:4px;}\n.docskin .evc-key .evc-mark,.docskin .evc-key .evc-fname{color:var(--accent);}\n.docskin .evc-keyline{margin:6px 0 0;color:var(--muted);} .docskin .evc-mark-k{font-weight:600;color:var(--ink);}\n.docskin .evc-note{font-size:12.5px;color:var(--muted);margin:14px 0 0;padding-top:10px;border-top:1px solid var(--rule);line-height:1.5;}\n/* typescale (live type specimen) */\n.docskin .typescale{margin:22px 0;}\n.docskin .ts-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .ts-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .ts-row{display:flex;align-items:center;gap:18px;padding:12px 0;border-bottom:1px solid var(--rule);}\n.docskin .ts-row:last-child{border-bottom:none;}\n.docskin .ts-meta{flex:0 0 160px;min-width:0;}\n.docskin .ts-name{font-weight:700;font-size:12.5px;color:var(--charcoal);line-height:1.3;}\n.docskin .ts-spec{font-family:var(--font-mono);font-size:10.5px;color:var(--gray);margin-top:2px;}\n.docskin .ts-note{font-size:11px;color:var(--slate);margin-top:2px;line-height:1.4;}\n.docskin .ts-sample{flex:1;min-width:0;color:var(--charcoal);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n.docskin .ts-f-display{font-family:var(--font-display);}\n.docskin .ts-f-body{font-family:var(--font-body);}\n.docskin .ts-f-mono{font-family:var(--font-mono);}\n/* dodont (do / don't guideline cards) */\n.docskin .dodont{margin:22px 0;}\n.docskin .dd-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .dd-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .dd-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start;}\n@media(max-width:680px){.docskin .dd-grid{grid-template-columns:1fr;}}\n.docskin .dd-card{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;box-shadow:none;}\n.docskin .dd-band{display:flex;align-items:center;gap:8px;padding:9px 14px;background:var(--paper-2);border-bottom:1px solid var(--rule);}\n.docskin .dd-sign{flex:none;width:18px;height:18px;border-radius:50%;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;border:1px solid currentColor;background:var(--paper);}\n.docskin .dd-do .dd-sign{color:var(--ink);}\n.docskin .dd-dont .dd-sign{color:var(--negative);}\n.docskin .dd-label{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;}\n.docskin .dd-do .dd-label{color:var(--ink);}\n.docskin .dd-dont .dd-label{color:var(--negative);}\n.docskin .dd-list{padding:11px 14px 14px;display:flex;flex-direction:column;gap:9px;}\n.docskin .dd-item{position:relative;padding-left:14px;}\n.docskin .dd-item::before{content:\"\";position:absolute;left:0;top:8px;width:5px;height:5px;border-radius:50%;}\n.docskin .dd-do .dd-item::before{background:var(--muted);}\n.docskin .dd-dont .dd-item::before{background:var(--negative);}\n.docskin .dd-text{font-size:13px;color:var(--ink);line-height:1.5;}\n.docskin .dd-ex{display:inline-block;font-family:var(--font-mono);font-size:11.5px;color:var(--muted);background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:4px;padding:3px 8px;margin-top:4px;}\n/* inventory (component / feature status board) */\n.docskin .inventory{margin:22px 0;}\n.docskin .inv-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .inv-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .inv-row{display:flex;align-items:flex-start;gap:12px;padding:9px 0;border-bottom:1px solid var(--rule);}\n.docskin .inv-row:last-child{border-bottom:none;}\n.docskin .inv-main{flex:1;min-width:0;}\n.docskin .inv-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}\n.docskin .inv-name{font-weight:700;font-size:13.5px;color:var(--charcoal);line-height:1.35;}\n.docskin .inv-tag{font-family:var(--font-mono);font-size:9.5px;font-weight:600;color:var(--slate);background:var(--light-gray);border:1px solid var(--rule);border-radius:4px;padding:1px 6px;}\n.docskin .inv-note{font-size:12px;color:var(--slate);margin-top:1px;line-height:1.45;}\n.docskin .inv-status{flex:none;font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:2px 8px;margin-top:1px;white-space:nowrap;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .inv-st-stable{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .inv-st-experimental,.docskin .inv-st-planned{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .inv-st-deprecated{border-color:var(--negative);color:var(--negative);}\n/* algorithms & data structures (array / bintree / hashmap) \u2014 cell values only; everything else is a type role */\n.docskin .ds-val{font-family:var(--font-mono);font-size:13px;font-weight:600;text-anchor:middle;}\n.docskin .bt-val{font-family:var(--font-mono);font-size:12.5px;font-weight:600;text-anchor:middle;}\n.docskin .hsh-key{font-family:var(--font-mono);font-size:11px;font-weight:600;text-anchor:middle;}\n/* agentloop (agent-loop diagram, SVG) */\n.docskin .al-edge{stroke:var(--muted);stroke-width:1.5;fill:none;}\n.docskin .al-edge.dashed{stroke:var(--muted);stroke-dasharray:5 4;}\n.docskin .al-lbl{font-family:var(--font-mono);font-size:9.5px;font-weight:400;fill:var(--muted);letter-spacing:.04em;paint-order:stroke;stroke:var(--paper);stroke-width:2.5px;stroke-linejoin:round;}\n.docskin .al-name{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink);}\n.docskin .al-chip{font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.04em;fill:var(--muted);}\n.docskin .al-note{font-family:var(--font-body);font-size:10.5px;fill:var(--muted);}\n.docskin .al-env{font-family:var(--font-body);font-size:12px;font-weight:600;fill:var(--ink);}\n.docskin .al-tool-name{font-family:var(--font-mono);font-size:11px;font-weight:600;fill:var(--ink);}\n.docskin .al-tool-desc{font-family:var(--font-body);font-size:10px;fill:var(--muted);}\n.docskin .al-more{font-family:var(--font-mono);font-size:10px;fill:var(--muted);font-style:italic;}\n.docskin .al-mem{font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;fill:var(--muted);}\n.docskin .al-mem-item{font-family:var(--font-body);font-size:10px;fill:var(--ink);}\n.docskin .al-foot{margin-top:14px;padding-top:12px;border-top:1px solid var(--rule);font-size:12.5px;color:var(--ink);}\n.docskin .al-foot-label{font-family:var(--font-mono);font-size:9.5px;font-weight:500;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-right:6px;}\n/* trace (agent / session execution transcript) */\n.docskin .trace{margin:22px 0;}\n.docskin .tr-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .tr-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .tr-list{display:flex;flex-direction:column;}\n.docskin .tr-turn{position:relative;padding:0 0 16px 0;}\n.docskin .tr-turn::before{content:\"\";position:absolute;left:14px;top:24px;bottom:-2px;width:1px;background:var(--rule);}\n.docskin .tr-turn:last-child{padding-bottom:0;}\n.docskin .tr-turn:last-child::before{display:none;}\n/* Roles as chips: the assistant is the one accent; user = paper-2 fill; tool = ink outline; system = dashed. */\n.docskin .tr-chip{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;letter-spacing:.08em;padding:2px 8px;border-radius:3px;margin-bottom:6px;position:relative;z-index:1;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .tr-user>.tr-chip{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .tr-assistant>.tr-chip{color:var(--accent);border-color:var(--accent);}\n.docskin .tr-system>.tr-chip{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .tr-card{margin-left:28px;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);padding:12px 16px;box-shadow:none;}\n.docskin .tr-think{font-size:12px;font-style:italic;color:var(--muted);border-left:2px dotted var(--muted);padding-left:10px;margin-bottom:8px;white-space:pre-wrap;line-height:1.55;}\n.docskin .tr-text{font-size:13.5px;color:var(--ink);line-height:1.6;white-space:pre-wrap;}\n.docskin .tr-think+.tr-text{margin-top:2px;}\n.docskin .tr-tool-name{font-family:var(--font-mono);font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:6px;}\n.docskin .tr-io{display:flex;align-items:baseline;gap:8px;margin:4px 0;}\n.docskin .tr-io-label{flex:none;font-family:var(--font-mono);font-size:10px;font-weight:700;color:var(--gray);}\n.docskin .tr-mono{font-family:var(--font-mono);font-size:11.5px;color:var(--charcoal);background:var(--light-gray);border:1px solid var(--rule);border-radius:5px;padding:2px 8px;white-space:pre-wrap;min-width:0;}\n.docskin .tr-io+.tr-text{margin-top:8px;}\n/* prompt (prompt anatomy with variable highlighting) */\n.docskin .prompt{margin:22px 0;}\n.docskin .pr-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .pr-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .pr-list{display:flex;flex-direction:column;gap:10px;}\n.docskin .pr-seg{border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);overflow:hidden;box-shadow:none;}\n.docskin .pr-kicker{font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;padding:8px 16px 0;color:var(--muted);}\n.docskin .pr-assistant>.pr-kicker{color:var(--accent);}\n.docskin .pr-label{font-family:var(--font-body);font-weight:600;font-size:11px;letter-spacing:0;text-transform:none;color:var(--muted);margin-left:6px;}\n.docskin .pr-text{font-family:var(--font-mono);font-size:12.5px;line-height:1.65;color:var(--ink);background:var(--paper-2);border-top:1px solid var(--rule);padding:12px 16px;margin-top:8px;white-space:pre-wrap;}\n/* Variables: accent text on paper (never on the tint \u2014 4.46:1), boxed by a hairline. */\n.docskin .pr-var{font-family:var(--font-mono);background:var(--paper);color:var(--accent);border:1px solid var(--accent);border-radius:3px;padding:0 4px;font-weight:600;}\n.docskin .pr-vars{display:flex;flex-direction:column;gap:5px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--rule);}\n.docskin .pr-var-row{display:flex;align-items:baseline;gap:10px;}\n.docskin .pr-var-row .pr-var{font-size:11.5px;}\n.docskin .pr-var-desc{font-size:12px;color:var(--slate);line-height:1.45;}\n/* context (context-window token budget, SVG) */\n.docskin .ctx-window-label{font-family:var(--font-mono);font-size:10px;font-weight:500;fill:var(--muted);letter-spacing:.06em;}\n/* Segment labels sit on a paper mask (series fills are mid-tone; no text reads on them directly). */\n.docskin .ctx-seg-mask{fill:var(--paper);stroke:none;}\n.docskin .ctx-seg-label{font-family:var(--font-mono);font-size:10px;font-weight:600;fill:var(--ink);}\n.docskin .ctx-free-label{font-family:var(--font-mono);font-size:10.5px;font-weight:500;fill:var(--muted);}\n.docskin .ctx-boundary{stroke:var(--negative);stroke-width:1.4;stroke-dasharray:5 4;}\n.docskin rect.ctx-chip-bg{fill:var(--paper);stroke:var(--negative);stroke-width:1;}\n.docskin text.ctx-chip{font-family:var(--font-mono);font-size:9.5px;font-weight:600;fill:var(--negative);}\n.docskin .ctx-legend{display:flex;flex-direction:column;gap:6px;margin-top:14px;padding-top:10px;border-top:1px solid var(--rule);}\n.docskin .ctx-legend .lg-title{margin-bottom:2px;}\n.docskin .ctx-row{display:flex;align-items:baseline;gap:9px;font-size:12.5px;color:var(--ink);}\n.docskin .ctx-dot{flex:none;width:11px;height:11px;border-radius:2px;align-self:center;}\n.docskin .ctx-idx{flex:none;font-family:var(--font-mono);font-size:10px;font-weight:600;color:var(--muted);}\n.docskin .ctx-label{font-weight:600;}\n.docskin .ctx-num{font-family:var(--font-mono);font-size:11px;color:var(--muted);white-space:nowrap;}\n.docskin .ctx-note{font-size:12px;color:var(--muted);}\n/* archmap (target-architecture capability map) */\n.docskin .archmap{margin:22px 0;}\n.docskin .am-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .am-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .am-grid{display:grid;grid-template-columns:repeat(var(--am-cols,3),minmax(0,1fr));gap:10px;align-items:stretch;}\n@media(max-width:900px){.docskin .am-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}\n@media(max-width:680px){.docskin .am-grid{grid-template-columns:1fr;}}\n/* Areas are paper-2 frames with an eyebrow; tile status by stroke: current = hairline \u00B7 new = ink 1.5px \u00B7 target = dashed ink \u00B7 gap = dashed negative \u00B7 deprecated = paper-2, muted. Area accents are ignored. */\n.docskin .am-area{background:var(--paper-2);border:1px solid var(--rule-solid);border-radius:6px;padding:12px;box-shadow:none;}\n.docskin .am-area-label{font-family:var(--font-mono);font-size:8.5px;text-transform:uppercase;letter-spacing:.14em;font-weight:500;color:var(--muted);margin-bottom:2px;}\n.docskin .am-area-desc{font-size:11.5px;color:var(--muted);line-height:1.45;}\n.docskin .am-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:6px;margin-top:8px;}\n.docskin .am-tile{background:var(--paper);border:1px solid var(--rule-solid);border-radius:4px;padding:6px 8px;font-size:11.5px;line-height:1.35;color:var(--ink);text-align:center;}\n.docskin .am-t-target{border:1px dashed var(--ink);}\n.docskin .am-t-new{border:1.5px solid var(--ink);}\n.docskin .am-t-gap{background:var(--paper);border:1px dashed var(--ink);}\n.docskin .am-chip{display:block;margin-top:3px;color:var(--muted);}\n.docskin .am-t-deprecated{background:var(--paper-2);color:var(--muted);border:1px dashed var(--muted);}\n/* Legend swatches mirror the tile strokes (the gap entry is its word chip). */\n.docskin .am-sw{display:inline-block;width:30px;height:14px;border-radius:2px;box-sizing:border-box;}\n.docskin .am-sw-current{background:var(--paper);border:1px solid var(--rule-solid);}\n.docskin .am-sw-target{background:var(--paper);border:1px dashed var(--ink);}\n.docskin .am-sw-new{background:var(--paper);border:1.5px solid var(--ink);}\n.docskin .am-sw-deprecated{background:var(--paper-2);border:1px dashed var(--muted);}\n/* divider (full-width section-break band) */\n.docskin .dvd{--dvd-accent:var(--navy);--dvd-soft:var(--light-blue);margin:22px 0;width:100%;min-height:180px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:36px 28px;text-align:center;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--dvd-soft) 45%,transparent);}\n.docskin .dvd-kicker{display:flex;align-items:center;gap:12px;}\n.docskin .dvd-kicker-text{font-family:var(--font-mono);font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--dvd-accent);}\n.docskin .dvd-rule{width:36px;height:1px;background:var(--dvd-accent);opacity:.55;}\n.docskin .dvd-title{font-family:var(--font-display);font-weight:700;font-size:34px;line-height:1.15;letter-spacing:-.01em;color:var(--charcoal);max-width:820px;}\n.docskin .dvd-subtitle{font-size:15px;color:var(--slate);line-height:1.55;max-width:680px;margin:0;}\n/* Band accents are ignored by the skin. */\n/* spans (distributed-trace waterfall) \u2014 lanes per service; bars lighten by depth (ink \u2192 muted \u2192 paper-2);\n the critical path is the one accent; errors are a negative outline + ERR chip. */\n.docskin .sp-axis{stroke:var(--rule-solid);stroke-width:1;}\n.docskin .sp-grid{stroke:var(--rule);stroke-width:1;}\n.docskin .sp-lane-rule{stroke:var(--rule);stroke-width:1;}\n.docskin .sp-bar.d0{fill:var(--ink);stroke:none;}\n.docskin .sp-bar.d1{fill:var(--muted);stroke:none;}\n.docskin .sp-bar.d2{fill:var(--paper-2);stroke:var(--rule-solid);stroke-width:1;}\n.docskin .sp-bar.crit{fill:var(--accent-tint);stroke:var(--accent);stroke-width:1.5;}\n.docskin .sp-bar.err{fill:var(--negative-tint);stroke:var(--negative);stroke-width:1.5;}\n/* Paper text on a dark bar drops the paper halo (it would blot the glyphs). */\n.docskin svg text.sp-on-dark{fill:var(--paper);stroke:none;}\n.docskin .sp-link{stroke:var(--rule-solid);stroke-width:1;fill:none;}\n.docskin .sp-chip{fill:var(--paper);stroke:var(--rule-solid);stroke-width:1;}\n.docskin .sp-chip.err{stroke:var(--negative);}\n.docskin svg text.sp-chip-text.err{fill:var(--negative);}\n.docskin .sp-details{margin-top:12px;padding-top:10px;border-top:1px solid var(--rule);font-size:12px;color:var(--ink);}\n.docskin .sp-details-title{display:block;margin-bottom:6px;}\n.docskin .sp-details ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;}\n.docskin .sp-details li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;}\n.docskin .sp-d-span{font-weight:600;color:var(--ink);}\n.docskin .sp-d-service{font-family:var(--font-mono);font-weight:400;font-size:10px;color:var(--muted);letter-spacing:.04em;text-transform:uppercase;margin-right:4px;}\n.docskin .sp-d-attrs{display:inline-flex;flex-wrap:wrap;gap:4px 8px;}\n.docskin .sp-d-attr{font-family:var(--font-mono);font-size:10.5px;color:var(--muted);}\n.docskin .sp-d-note{color:var(--muted);font-style:italic;}\n/* rollout (progressive-delivery stage strip) \u2014 paper cards on the frame ground, an ink traffic bar,\n the gate as a chip on the connector; status by the shared chip encoding, current = the one accent. */\n.docskin .ro-strip{display:flex;align-items:stretch;overflow-x:auto;padding:4px 0 6px;}\n.docskin .ro-stage{flex:1 1 160px;min-width:150px;box-sizing:border-box;display:flex;flex-direction:column;gap:6px;padding:10px 12px 12px;border-radius:4px;background:var(--paper);border:1px solid var(--ink);}\n.docskin .ro-stage.ro-s-done{background:var(--paper-2);border-color:var(--rule-solid);}\n.docskin .ro-stage.ro-s-current{border:1.5px solid var(--accent);}\n.docskin .ro-stage.ro-s-next{border-style:dashed;border-color:var(--muted);}\n.docskin .ro-stage.ro-s-blocked{border-color:var(--negative);background:var(--negative-tint);}\n.docskin .ro-n{display:block;}\n.docskin .ro-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;}\n.docskin .ro-status{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;padding:1px 6px;border-radius:2px;line-height:1.5;color:var(--ink);background:var(--paper);border:1px solid var(--ink);}\n.docskin .ro-status.ro-st-done{background:var(--paper);border-color:var(--rule-solid);color:var(--muted);}\n.docskin .ro-status.ro-st-current{color:var(--accent);border-color:var(--accent);}\n.docskin .ro-status.ro-st-next{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n.docskin .ro-status.ro-st-blocked{color:var(--negative);border-color:var(--negative);}\n.docskin .ro-traffic{display:flex;align-items:center;gap:8px;}\n.docskin .ro-track{flex:1;height:6px;border-radius:3px;background:var(--paper-2);border:1px solid var(--rule-solid);overflow:hidden;}\n.docskin .ro-s-done .ro-track{background:var(--paper);}\n.docskin .ro-fill{height:100%;background:var(--ink);}\n.docskin .ro-pct{flex:none;color:var(--ink);}\n.docskin .ro-note{font-size:12px;color:var(--muted);line-height:1.45;}\n.docskin .ro-link{flex:0 0 auto;position:relative;display:flex;align-items:center;justify-content:center;min-width:34px;max-width:150px;padding:0 8px;}\n.docskin .ro-link::before{content:\"\";position:absolute;left:0;right:0;top:50%;height:1px;background:var(--muted);}\n.docskin .ro-link::after{content:\"\";position:absolute;right:0;top:50%;margin-top:-4px;border:4px solid transparent;border-left:6px solid var(--muted);border-right:0;}\n.docskin .ro-link-end::after{display:none;}\n.docskin .ro-gate{position:relative;max-width:134px;padding:2px 7px;border-radius:2px;background:var(--paper);border:1px solid var(--rule-solid);color:var(--ink);text-align:center;line-height:1.35;}\n.docskin .ro-rollback{display:flex;align-items:baseline;gap:10px;margin-top:12px;font-size:12.5px;color:var(--ink);}\n/* bignumber (one hero metric at presentation scale) \u2014 ink, never a coloured fill */\n.docskin .bn{margin:22px 0;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px;padding:30px 24px;text-align:center;}\n.docskin .bn-value-row{display:flex;align-items:baseline;justify-content:center;gap:14px;flex-wrap:wrap;}\n.docskin .bn-value{font-family:var(--font-display);font-weight:700;font-size:clamp(56px,10vw,84px);line-height:1;letter-spacing:-.02em;color:var(--ink);}\n.docskin .bn-delta{display:inline-flex;align-items:baseline;gap:5px;font-family:var(--font-mono);font-size:15px;font-weight:700;color:var(--muted);}\n.docskin .bn-arrow{color:var(--muted);font-size:12px;}\n.docskin .bn-label{font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--ink);line-height:1.35;max-width:720px;}\n.docskin .bn-context{font-size:13.5px;color:var(--muted);line-height:1.5;max-width:640px;margin:0;}\n/* takeaways (numbered closing-slide rows) */\n.docskin .tk{margin:22px 0;width:100%;}\n.docskin .tk-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:14px;}\n.docskin .tk-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:18px;}\n.docskin .tk-item{display:flex;align-items:flex-start;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--rule);}\n.docskin .tk-item:last-child{padding-bottom:0;border-bottom:none;}\n.docskin .tk-num{flex:none;width:30px;height:30px;border-radius:50%;border:1px solid var(--ink);background:var(--paper);color:var(--ink);font-family:var(--font-mono);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;}\n.docskin .tk-body{flex:1;min-width:0;padding-top:3px;}\n.docskin .tk-text{font-family:var(--font-display);font-weight:700;font-size:17px;color:var(--ink);line-height:1.35;}\n.docskin .tk-detail{font-size:13.5px;color:var(--muted);margin:5px 0 0;line-height:1.55;max-width:760px;}\n/* statustable (task table + status chips) */\n.docskin .stt{margin:14px 0;}\n.docskin .stt-desc{font-size:13px;color:var(--muted);margin:0 0 10px;max-width:760px;}\n.docskin .stt-wrap{border:1px solid var(--rule-solid);border-radius:6px;overflow:hidden;background:var(--paper);box-shadow:none;}\n.docskin .stt-table{width:100%;border-collapse:collapse;font-size:13px;}\n.docskin .stt-table thead{background:var(--paper-2);color:var(--muted);}\n.docskin .stt-table th{padding:9px 12px;text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;border-bottom:1px solid var(--rule-solid);}\n.docskin .stt-table th.stt-status-h{width:1%;white-space:nowrap;}\n.docskin .stt-table td{padding:9px 12px;border-bottom:1px solid var(--rule);vertical-align:middle;color:var(--ink);}\n.docskin .stt-table tbody.stt-group:nth-of-type(even){background:color-mix(in srgb,var(--paper-2) 50%,transparent);}\n.docskin .stt-table tbody.stt-group:last-of-type tr:last-child td{border-bottom:none;}\n.docskin .stt-table td.stt-lead{font-weight:600;color:var(--ink);}\n.docskin .stt-table tr.stt-haskids td{border-bottom-style:dashed;}\n.docskin .stt-table tr.stt-sub td{color:var(--muted);font-size:12.5px;padding-top:6px;padding-bottom:6px;border-bottom-style:dashed;}\n.docskin .stt-table tr.stt-sub td:first-child{padding-left:24px;}\n.docskin .stt-table tr.stt-sub:last-child td{border-bottom-style:solid;}\n.docskin .stt-tree{font-family:var(--font-mono);color:var(--muted);margin-right:8px;}\n.docskin .stt-table td.stt-status{white-space:nowrap;}\n/* The status vocabulary's colour names map onto the chip encoding: green = paper-2 fill (done) \u00B7\n amber = accent outline (in progress) \u00B7 red = negative outline (blocked) \u00B7 gray = dashed (todo) \u00B7 the rest = ink outline. */\n.docskin .stt-pill{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;padding:2px 8px;border-radius:3px;text-transform:uppercase;letter-spacing:.06em;background:var(--paper);color:var(--ink);border:1px solid var(--ink);}\n.docskin .stt-pill.stt-green{background:var(--paper-2);border-color:var(--paper-2);}\n.docskin .stt-pill.stt-amber{border-color:var(--accent);color:var(--accent);}\n.docskin .stt-pill.stt-red{border-color:var(--negative);color:var(--negative);}\n.docskin .stt-pill.stt-gray{border-style:dashed;border-color:var(--muted);color:var(--muted);}\n/* The legend is the shared strip, inside the frame. */\n.docskin .stt-wrap .diagram-legend{margin:0;padding:10px 12px;}\n.docskin .stt-dot{flex:none;width:10px;height:10px;border-radius:2px;background:var(--paper);border:1px solid var(--ink);box-sizing:border-box;}\n.docskin .stt-dot.stt-green{background:var(--paper-2);border-color:var(--rule-solid);}\n.docskin .stt-dot.stt-amber{border-color:var(--accent);}\n.docskin .stt-dot.stt-red{border-color:var(--negative);}\n.docskin .stt-dot.stt-gray{border-style:dashed;border-color:var(--muted);}\n/* benchmark (measured results: subject columns \u00D7 metric rows) \u2014 an airy\n scoreboard: no fills in the header, hairline row rules drawn as inset\n shadows so the featured column's real borders can close into a rounded\n outline, and the winning value in each row tinted with its subject's tone. */\n.docskin .benchmark{margin:26px 0 34px;}\n.docskin .bm-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .bm-desc{font-size:13px;color:var(--slate);margin:2px 0 14px;line-height:1.5;}\n.docskin .bm-scroll{overflow-x:auto;padding:3px 3px 4px;}\n.docskin .bm-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;}\n.docskin .bm-table th,.docskin .bm-table td{box-shadow:inset 0 -1px 0 var(--rule);vertical-align:middle;}\n.docskin .bm-table tbody tr:last-child th,.docskin .bm-table tbody tr:last-child td{box-shadow:none;}\n.docskin .bm-table th.bm-subj{padding:10px 14px 12px;text-align:center;font-family:var(--font-display);font-size:15px;font-weight:700;color:var(--charcoal);}\n.docskin .bm-subj-sub{display:block;font-family:var(--font-body);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--gray);margin-top:3px;}\n.docskin .bm-table th.bm-metric{padding:10px 14px 12px;text-align:left;font-family:var(--font-body);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--gray);}\n.docskin .bm-table td.bm-metric{padding:12px 18px 12px 2px;width:30%;min-width:170px;}\n.docskin .bm-row-label{display:block;font-size:14px;font-weight:600;color:var(--charcoal);line-height:1.35;}\n.docskin .bm-row-sub{display:block;font-size:12px;color:var(--gray);line-height:1.4;margin-top:1px;}\n.docskin .bm-table td.bm-cell{padding:0;text-align:center;}\n.docskin .bm-slot{padding:11px 10px;border-radius:4px;}\n.docskin .bm-slot + .bm-slot{position:relative;}\n.docskin .bm-slot + .bm-slot::before{content:\"\";position:absolute;top:0;left:22%;right:22%;height:1px;background:var(--rule);}\n.docskin .bm-val{display:block;font-size:15px;color:var(--charcoal);line-height:1.25;}\n.docskin .bm-slot.bm-best .bm-val{font-weight:700;}\n.docskin .bm-cap{display:block;font-size:11px;color:var(--gray);margin-top:2px;}\n.docskin .bm-note{display:block;font-size:11px;color:var(--gray);margin-bottom:2px;}\n.docskin .bm-slot.bm-best.bm-accent{background:var(--accent-tint);}\n.docskin .bm-slot.bm-best.bm-muted{background:var(--paper-2);}\n/* The featured column is the one accent: side borders on every cell, closed top and bottom. */\n.docskin .bm-table th.bm-feat,.docskin .bm-table td.bm-feat{border-left:1.5px solid var(--accent);border-right:1.5px solid var(--accent);}\n.docskin .bm-table thead th.bm-feat{border-top:1.5px solid var(--accent);border-radius:6px 6px 0 0;}\n.docskin .bm-table tbody tr:last-child td.bm-feat{border-bottom:1.5px solid var(--accent);border-radius:0 0 6px 6px;}\n.docskin .src-note{font-family:var(--font-mono);font-size:11px;color:var(--gray);margin:-6px 0 18px;letter-spacing:.02em;}\n/* tree values \u2014 the driver-tree treatment: the number, then its share of the parent */\n.docskin .tvalue{margin-left:10px;font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--navy);}\n.docskin .tshare{margin-left:6px;font-family:var(--font-mono);font-size:10.5px;color:var(--gray);}\n/* storymap \u2014 backbone step cards across the top, release slices as bands; the first slice is the one accent */\n.docskin .sm-scroll{overflow-x:auto;}\n.docskin .sm-row{display:flex;align-items:stretch;}\n.docskin .sm-head{background:var(--paper-2);}\n.docskin .sm-gutter{flex:0 0 128px;padding:8px 10px 8px 12px;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);position:sticky;left:0;z-index:2;background:var(--paper-2);}\n/* The nearest release is the one accent: its label, and a single rule down the row's left edge. */\n.docskin .sm-band-first .sm-gutter{color:var(--accent);border-left:3px solid var(--accent);padding-left:9px;}\n.docskin .sm-colcell{flex:0 0 170px;padding:4px 5px;min-width:0;}\n.docskin .sm-step{background:var(--paper);border:1px solid var(--ink);border-radius:4px;padding:7px 11px 8px;height:100%;box-sizing:border-box;}\n.docskin .sm-step-eyebrow{display:block;margin-bottom:2px;color:var(--muted);}\n.docskin .sm-step-label{font-size:13px;font-weight:600;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}\n.docskin .sm-step-note{font-family:var(--font-mono);font-size:10px;color:var(--muted);margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}\n.docskin .sm-band{border-top:1px solid var(--rule);}\n.docskin .sm-band .sm-gutter{padding-top:12px;}\n.docskin .sm-cell{padding:8px 5px;}\n.docskin .sm-card{background:var(--paper);border:1px solid var(--rule-solid);padding:7px 10px;border-radius:4px;}\n.docskin .sm-card + .sm-card{margin-top:6px;}\n.docskin .sm-card-title{font-size:12.5px;font-weight:600;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}\n.docskin .sm-card-tag{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);border-radius:2px;padding:1px 5px;margin-top:5px;}\n/* scenarios \u2014 assumptions in columns, the outcome on its own row */\n.docskin .scenarios{margin:26px 0 34px;}\n.docskin .sn-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--charcoal);margin-bottom:2px;}\n.docskin .sn-desc{font-size:13px;color:var(--slate);margin:2px 0 12px;line-height:1.5;}\n.docskin .sn-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);box-shadow:none;}\n.docskin .sn-table{width:100%;border-collapse:collapse;font-size:13px;}\n.docskin .sn-table thead th{background:var(--paper-2);color:var(--ink);padding:10px 12px;text-align:center;font-family:var(--font-display);font-size:13px;font-weight:700;vertical-align:top;border-bottom:1px solid var(--rule-solid);}\n.docskin .sn-table th.sn-driver,.docskin .sn-table td.sn-driver{text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);}\n.docskin .sn-table td{padding:9px 12px;border-bottom:1px solid var(--rule);text-align:center;font-family:var(--font-mono);color:var(--ink);}\n.docskin .sn-table td.sn-driver{font-family:var(--font-body);color:var(--muted);}\n/* The base case is the one accent: a chip in its header and a tint down its column. */\n.docskin .sn-badge{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:600;letter-spacing:.1em;color:var(--accent);background:var(--paper);border:1px solid var(--accent);border-radius:3px;padding:1px 6px;margin-top:5px;}\n.docskin .sn-note{display:block;font-family:var(--font-body);font-size:10.5px;font-weight:400;color:var(--muted);text-transform:none;letter-spacing:0;margin-top:3px;}\n.docskin .sn-blank{color:var(--rule-solid);}\n.docskin .sn-table .sc-base{background:var(--accent-tint);}\n.docskin .sn-table thead th.sc-base{background:var(--paper-2);box-shadow:inset 0 -2px 0 var(--accent);}\n.docskin .sn-outcome td{border-bottom:none;border-top:1.5px solid var(--ink);font-family:var(--font-display);font-size:17px;font-weight:700;color:var(--ink);padding:11px 12px;}\n.docskin .sn-outcome td:first-child{font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;color:var(--muted);text-align:left;}\n/* harvey \u2014 the rated comparison grid: options across, criteria down; the recommendation is the one accent */\n.docskin .harvey{margin:26px 0 34px;}\n.docskin .hv-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .hv-desc{font-size:13px;color:var(--muted);margin:2px 0 12px;line-height:1.5;}\n.docskin .hv-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);box-shadow:none;}\n.docskin .hv-table{width:100%;border-collapse:collapse;font-size:13px;}\n.docskin .hv-table thead th{background:var(--paper-2);color:var(--muted);padding:10px 12px;text-align:center;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;vertical-align:top;border-bottom:1px solid var(--rule-solid);}\n.docskin .hv-table th.hv-crit{text-align:left;}\n.docskin .hv-table td{padding:9px 12px;border-bottom:1px solid var(--rule);text-align:center;vertical-align:middle;color:var(--ink);}\n.docskin .hv-table td.hv-crit{text-align:left;}\n.docskin .hv-label{font-weight:600;color:var(--ink);}\n.docskin .hv-note{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;}\n.docskin .hv-weight{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;color:var(--ink);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:1px 6px;margin-left:8px;}\n.docskin .hv-rec{display:inline-block;font-family:var(--font-mono);font-size:8.5px;font-weight:600;letter-spacing:.1em;color:var(--accent);background:var(--paper);border:1px solid var(--accent);border-radius:3px;padding:1px 6px;margin-top:5px;}\n.docskin .hv-table td.hv-is-rec{background:var(--accent-tint);}\n.docskin .hv-table thead th.hv-is-rec{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent);}\n.docskin .hv-na{color:var(--muted);font-family:var(--font-mono);}\n.docskin .hv-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}\n.docskin .hv-foot td{border-bottom:none;border-top:1.5px solid var(--ink);font-family:var(--font-mono);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);text-align:center;}\n.docskin .hv-foot td:first-child{text-align:left;}\n.docskin .hv-foot td.hv-lead{color:var(--ink);font-weight:700;}\n.docskin .hv-scroll .diagram-legend{margin:0;padding:10px 12px;}\n/* scqa \u2014 the executive summary ladder; the answer carries the weight and the one accent */\n.docskin .scqa{margin:26px 0 34px;}\n.docskin .sq-head{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);margin-bottom:2px;}\n.docskin .sq-desc{font-size:13px;color:var(--muted);margin:2px 0 14px;line-height:1.5;}\n.docskin .sq-row{display:flex;gap:14px;padding:11px 0;border-bottom:1px dashed var(--rule);}\n.docskin .sq-num{flex:none;width:22px;height:22px;border-radius:50%;background:var(--paper);color:var(--ink);border:1px solid var(--ink);font-family:var(--font-mono);font-size:10px;font-weight:600;display:flex;align-items:center;justify-content:center;}\n.docskin .sq-body{min-width:0;}\n.docskin .sq-label{display:block;font-family:var(--font-mono);font-size:9.5px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:3px;}\n.docskin .sq-text{font-size:15px;line-height:1.55;color:var(--ink);margin:0;}\n.docskin .sq-answer{margin-top:16px;padding:16px 20px;background:var(--paper-2);border-left:3px solid var(--accent);border-radius:0 6px 6px 0;}\n.docskin .sq-label-answer{color:var(--accent);}\n.docskin .sq-text-answer{font-family:var(--font-display);font-size:19px;font-weight:700;line-height:1.4;color:var(--ink);}\n.docskin .sq-because{margin:10px 0 0;padding-left:18px;}\n.docskin .sq-because li{font-size:13.5px;line-height:1.55;color:var(--muted);margin-bottom:3px;}\n/* packet \u2014 the bit ruler, field cells, and each cell's bit count */\n.docskin .pk-tick{font-family:var(--font-mono);font-size:8.5px;fill:var(--gray);}\n.docskin .pk-off{font-family:var(--font-mono);font-size:9px;fill:var(--gray);text-anchor:end;dominant-baseline:middle;}\n.docskin .pk-name{font-family:var(--font-body);font-size:11.5px;font-weight:700;fill:var(--charcoal);text-anchor:middle;}\n.docskin .pk-value{font-family:var(--font-mono);font-size:10px;fill:var(--slate);text-anchor:middle;}\n.docskin .pk-bits{font-family:var(--font-mono);font-size:8.5px;fill:var(--gray);text-anchor:middle;}\n.docskin .pk-total{font-family:var(--font-mono);font-size:11px;color:var(--gray);margin:10px 0 0;letter-spacing:.03em;}\n/* gitgraph \u2014 lane names, commit messages, release tags */\n.docskin .gg-branch{font-family:var(--font-mono);font-size:11px;font-weight:700;text-anchor:end;}\n.docskin .gg-msg{font-family:var(--font-body);font-size:11px;fill:var(--slate);text-anchor:middle;}\n.docskin .gg-tag{font-family:var(--font-mono);font-size:10px;font-weight:700;fill:var(--highlight);text-anchor:middle;}\n.docskin .bm-foot{font-size:12px;color:var(--gray);margin:12px 0 0;line-height:1.5;}\n/* \u2500\u2500 audit (findings register) \u2014 the risk chip encoding for severity; open = negative, fixing = the accent \u2500\u2500 */\n.docskin .audit{margin:22px 0;}\n.docskin .au-head{display:flex;align-items:baseline;gap:8px 18px;flex-wrap:wrap;margin-bottom:2px;}\n.docskin .au-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);}\n.docskin .au-meta{display:inline-flex;flex-wrap:wrap;gap:4px 14px;font-family:var(--font-mono);font-size:10.5px;color:var(--muted);}\n.docskin .au-k{font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--soft);margin-right:6px;}\n.docskin .au-desc{font-size:13px;color:var(--muted);margin:2px 0 10px;line-height:1.5;}\n.docskin .au-counts{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:8px 0 10px;}\n.docskin .au-total{margin-right:6px;}\n.docskin .au-sev{display:inline-block;line-height:1.5;}\n.docskin .au-count .au-n{font-weight:700;}\n.docskin .au-sev.rk-sev-info{background:var(--paper);border-color:var(--rule-solid);color:var(--soft);}\n.docskin .au-scroll{overflow-x:auto;border:1px solid var(--rule-solid);border-radius:6px;background:var(--paper);}\n.docskin .au-table{width:100%;border-collapse:collapse;font-size:12.5px;}\n.docskin .au-table thead th{background:var(--paper-2);color:var(--muted);padding:8px 10px;text-align:left;font-family:var(--font-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;font-weight:500;border-bottom:1px solid var(--rule-solid);white-space:nowrap;}\n.docskin .au-table td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--ink);line-height:1.45;}\n.docskin .au-table tbody tr:last-child td{border-bottom:none;}\n.docskin .au-id{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--muted);white-space:nowrap;}\n.docskin .au-c-sev,.docskin .au-c-status{white-space:nowrap;}\n.docskin .au-ftitle{display:block;font-weight:600;color:var(--ink);}\n.docskin .au-area{display:inline-block;margin-top:3px;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--rule-solid);border-radius:2px;padding:0 5px;line-height:1.5;}\n.docskin .au-ref{display:inline-block;margin:3px 0 0 6px;font-family:var(--font-mono);font-size:10px;color:var(--link);}\n.docskin .au-evidence{font-family:var(--font-mono);font-size:11px;color:var(--muted);min-width:140px;}\n.docskin .au-fix{min-width:150px;}\n.docskin .au-owner{font-family:var(--font-mono);font-size:11px;color:var(--muted);white-space:nowrap;}\n.docskin .au-st-open{border-color:var(--negative);color:var(--negative);}\n.docskin .au-st-fixing{border-color:var(--accent);color:var(--accent);}\n.docskin .au-st-fixed{background:var(--paper-2);border-color:var(--paper-2);color:var(--muted);}\n.docskin .au-st-accepted,.docskin .au-st-wontfix{border-color:var(--rule-solid);color:var(--soft);}\n/* \u2500\u2500 checklist (pass / fail with evidence) \u2014 verdict chips, mono evidence, the derived pass rate \u2500\u2500 */\n.docskin .checklist{margin:22px 0;}\n.docskin .cl-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:2px;}\n.docskin .cl-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);}\n.docskin .cl-standard{font-family:var(--font-mono);font-size:10px;color:var(--muted);background:var(--paper);border:1px solid var(--rule-solid);border-radius:3px;padding:2px 7px;line-height:1.5;}\n.docskin .cl-desc{font-size:13px;color:var(--muted);margin:2px 0 10px;line-height:1.5;}\n.docskin .cl-groups{display:flex;flex-direction:column;gap:14px;margin-top:8px;}\n.docskin .cl-group-label{display:block;margin-bottom:4px;}\n.docskin .cl-items{display:flex;flex-direction:column;border-top:1px solid var(--rule);}\n.docskin .cl-item{display:flex;align-items:flex-start;gap:12px;padding:8px 2px;border-bottom:1px solid var(--rule);}\n.docskin .cl-verdict{flex:none;display:inline-flex;align-items:center;gap:5px;min-width:64px;font-family:var(--font-mono);font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;border-radius:3px;padding:2px 7px;line-height:1.5;color:var(--ink);background:var(--paper);border:1px solid var(--ink);margin-top:1px;}\n.docskin .cl-glyph{font-size:11px;line-height:1;}\n.docskin .cl-v-pass{background:var(--paper-2);border-color:var(--paper-2);color:var(--ink);}\n.docskin .cl-v-fail{color:var(--negative);border-color:var(--negative);background:var(--negative-tint);}\n.docskin .cl-v-partial{color:var(--accent);border-color:var(--accent);}\n.docskin .cl-v-na,.docskin .cl-v-pending{color:var(--soft);border-color:var(--rule-solid);}\n.docskin .cl-body{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;min-width:0;font-size:13px;line-height:1.5;}\n.docskin .cl-text{color:var(--ink);font-weight:500;}\n.docskin .cl-s-na .cl-text{color:var(--muted);font-weight:400;}\n.docskin .cl-evidence{font-family:var(--font-mono);font-size:11px;color:var(--muted);}\n.docskin .cl-note{font-size:12px;color:var(--muted);font-style:italic;}\n.docskin .cl-ref{font-family:var(--font-mono);font-size:10px;color:var(--link);}\n.docskin .cl-foot{display:flex;justify-content:space-between;align-items:baseline;gap:10px 18px;flex-wrap:wrap;margin-top:10px;font-family:var(--font-mono);font-size:10.5px;color:var(--muted);letter-spacing:.03em;}\n.docskin .cl-rate b{color:var(--ink);font-weight:700;font-size:12px;}\n/* \u2500\u2500 modelcard (ML model card) \u2014 the eventcontract card chrome plus a spec strip and a metrics table \u2500\u2500 */\n.docskin .modelcard{border:1px solid var(--rule-solid);border-radius:6px;margin:18px 0;overflow:hidden;background:var(--paper);}\n.docskin .mc-task{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-family:var(--font-body);font-size:12px;color:var(--ink);background:var(--paper);border:1px solid var(--rule-solid);padding:3px 8px;border-radius:3px;}\n.docskin .mc-task .t-eyebrow{color:var(--muted);}\n.docskin .mc-spec{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;margin:14px 0 0;background:var(--rule-solid);border:1px solid var(--rule-solid);border-radius:4px;overflow:hidden;}\n.docskin .mc-cell{display:flex;flex-direction:column;gap:3px;padding:8px 10px;background:var(--paper-2);}\n.docskin .mc-k{color:var(--muted);}\n.docskin .mc-v{font-family:var(--font-mono);font-size:11.5px;color:var(--ink);line-height:1.4;}\n.docskin .mc-list{margin:0;padding-left:18px;font-size:13px;line-height:1.55;color:var(--ink);}\n.docskin .mc-list li{margin:2px 0;}\n.docskin .mc-metrics th.mc-value,.docskin .mc-metrics td.mc-value{text-align:right;}\n.docskin .mc-metrics td.mc-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600;color:var(--ink);white-space:nowrap;}\n/* \u2500\u2500 chevrons (process chevron strip) \u2014 paper text on the one accent-filled step \u2500\u2500 */\n.docskin svg .t-name.ch-on-accent{fill:var(--paper);stroke:none;}\n/* \u2500\u2500 roadmap (themes \u00D7 periods) \u2014 the current chip's label is bold \u2500\u2500 */\n.docskin svg .rm-label{font-size:10.5px;}\n.docskin svg .rm-current{font-weight:600;}\n/* perfbudget \u2014 metric names in the label column and the measured value at the bar end */\n.docskin .pb-label{font-family:var(--font-mono);font-size:11px;font-weight:600;fill:var(--ink);}\n.docskin .pb-val{font-weight:600;}\n/* percentiles \u2014 the row label */\n.docskin .pc-label{font-family:var(--font-mono);font-size:11px;font-weight:600;fill:var(--ink);}\n/* threatmodel \u2014 trust boundaries restyle the shared group panel; the STRIDE table under the drawing */\n.docskin .tm-bounds rect{fill:var(--negative-tint);fill-opacity:1;stroke:var(--negative);stroke-dasharray:4 3;}\n.docskin .tm-bounds text{fill:var(--negative);}\n.docskin .tm-scroll{overflow-x:auto;margin-top:14px;}\n.docskin .tm-table{margin:0;font-size:12.5px;}\n.docskin .tm-table td{vertical-align:top;color:var(--ink);}\n.docskin .tm-id,.docskin .tm-target{font-family:var(--font-mono);font-size:11px;white-space:nowrap;}\n.docskin .tm-id{color:var(--muted);font-weight:600;}\n.docskin .tm-threat{font-weight:600;}\n.docskin .tm-mit{color:var(--muted);}\n.docskin .tm-none{color:var(--soft);}\n.docskin .tm-cat{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:3px;border:1px solid var(--ink);color:var(--ink);background:var(--paper);font-family:var(--font-mono);font-size:10.5px;font-weight:700;text-decoration:none;cursor:help;}\n.docskin .tm-st-open{color:var(--negative);border-color:var(--negative);}\n.docskin .tm-st-accepted{background:var(--paper-2);border-color:var(--paper-2);color:var(--muted);}\n/* \u2500\u2500 code (refined) \u2014 accent bands for highlight, a counter gutter for lines, the cols / compare grid, wrap, captions \u2500\u2500 */\n.docskin .cb>pre{padding:14px 0;}\n.docskin .cb .cl{display:block;padding:0 20px;}\n.docskin .cb .cl-hl{background:color-mix(in srgb,var(--accent) 16%,transparent);box-shadow:inset 2px 0 0 var(--accent);}\n.docskin .cb-lines>pre{counter-reset:line var(--code-start,0);}\n.docskin .cb-lines .cl{padding-left:calc(20px + var(--code-gutter,2ch) + 14px);text-indent:calc(-1 * (var(--code-gutter,2ch) + 14px));}\n.docskin .cb-lines .cl::before{counter-increment:line;content:counter(line);display:inline-block;width:var(--code-gutter,2ch);margin-right:14px;text-align:right;text-indent:0;color:var(--code-muted);opacity:.7;user-select:none;-webkit-user-select:none;}\n.docskin .cb-wrap>pre{white-space:pre-wrap;overflow-wrap:anywhere;}\n.docskin .code-grid{display:grid;grid-template-columns:repeat(var(--code-cols,1),minmax(0,1fr));gap:14px;margin:14px 0 18px;}\n.docskin .code-grid>.code-block{margin:0;display:flex;flex-direction:column;background:var(--code-bg);}\n.docskin .code-grid>.code-block>pre{flex:1 1 auto;}\n@media(max-width:720px){.docskin .code-grid{grid-template-columns:1fr;}}\n.docskin .code-eyebrow{font-size:8.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--code-muted);}\n.docskin .code-cap{font-size:12px;color:var(--muted);line-height:1.45;padding:8px 16px 9px;background:var(--paper);border-top:1px solid var(--rule-solid);}\n.docskin .code-cap-group{border:0;background:none;padding:0 2px;margin:-10px 0 18px;}";
30
+
31
+ /**
32
+ * The chiltepin brand mark — the official kawaii-chiltepin logo (adopted
33
+ * 2026-09-14; canonical PNGs live in assets/brand/). The favicon below is the
34
+ * 64px transparent-background mark, base64-embedded so every rendered page
35
+ * (chiltepin html/serve/build, decks, Studio) stays fully self-contained (~8 KB).
36
+ *
37
+ * FAVICON_SVG is a minimal vector mark (red pod, green stem), kept for any
38
+ * consumer that wants a scalable icon — the PNG data URI is the brand.
39
+ */
40
+ declare const FAVICON_SVG: string;
41
+ /** The official mark as a `data:` URI (64px PNG, transparent background). */
42
+ declare const FAVICON_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAYmUlEQVR42t2beZRddZXvP/v3O3esuSpVSSpzCCGEIKOMsQtoNDSTiASRVhtxwKftw7HbVjEL27FtBxRQ24FunoIabFFsVBBIAFGZIpCEBELmVKqSGm/d4Zx7zu+33x/nVohvPQEDKHrXOqvuulP99vTde3/3PvDSfQgQqCIiIKbxytPvvWD/5KX4sAhOEFQN4HqBWUAE/G6/syt/ZQ8BrIgAfc3AZR0zuPvEZZnyBZc162kXZHXaTLmns1CY0fis+WsTXlLhuWj2oTx5+ccP1rsee6+uHjlef7x9oX/HDUFy2rtEu6fxk8Z3nrcCzEtIeJYvX24yOf3qOW9qvvGWW/9tweevuCHpmdftdo0N6JObxmTzusQ0TRfXOT9zBuTmIvjnK0PwUrF8X1+f+cUvVt70lg9Pe/UnrvhUMjBeNteuOTfYsnM3E+PG10PjsgWrrR3tJhtEAZTlrwUErYi4fF7/65IPTX/TZR85LH78iVrm/qd+Rf8WtDRR8NUxbDjiKGQCkrEsj98xfuPwXr24YX3/l+wBVkScqL7llRe1v+nvP9Ab/3rtusya9bvpfyqjE5W8jDzq7MjG+hPVEb2HJB6oTVSfDOF7L1QW+HN6gEFRhKkLDrfrP/vfc9siG3PP/f1m6+OqtVqTbrs9csPro/eXIv6jkQJfhEP8uR7LETFoLse/nP2Opo4pvcY/smHI7NyUUHdF7b8vMXseid5YivgKUG946+Qlf+kKMCsWo6pMXXCMueSVr+3QDZtKduf2GmGYSaq7AzO0rvqdiuf7QLbxnWS/S/9SFWAAyxyyV34cHwRcdtqFTa0trdZt2lGS8T2Kp2CHNkQajvKFxufdi1nxBX+KFAcYVZwx4kHRbbjmbPbQzvn195x8ZovftrNmR8bqhDXxXjOmOlx9rGZkjaiiin2xLfKCNzB9fQQrVmBERI0xXsQkIqiqzlXl9VOmyOeybfGq487Od/T0ZmVHf1WisuKdwcfgI5+o1+NVsSI4ePGU8GJngSZgIXDK3HmtZy9Y2HHi7JeXCrY9YtUPqrzv2g6dO6NT7nhwJ9s3JezpF+phO6WHSrzs8DYeXFVe88TG2odF5OfqVZB9IfGSCwEB6OqiuV4N3prN5I7omNI0p2da08HzD+qdccxJM+hdUqbctJUto8PuZ1dFetJrxZ521N/Jw+sfJ0rqxJHBRY4gD4lBDzvX6fEXzDzq5q8M/2zVT0Y+ifAxMeL0CjVciTQKoJdMHRAArqNNrlp2afO7z7pgIV3tbUzvnsPc7qWM+XXJQ7tukrWbd5vHHlIZeSrhE59cxqGF8/iPBz9K/2CJzY87hnZ6Ch3NDKwRXDTBojPx82ZOZfD+rFl14+C9AwP1jwF3iRFUFVJ8eF6KeEFiazEEe8EVO3MuseF5Y8UBCVt3EmY2saV8m/yu/16zc6hiymUj3dMNPQs9AzuF32xbxUhlhLAGo3uV2oRSryWYghJYjxiRUqkqi5YW3Ymnz57bmm/6h8pI/RWl8dgDu4Hy8ycennc9g10NyVXvPiO39Y6NZ9mtemr9fi08da+X+34VmcceT9ixAaK9TRx/9HymtAtHzT6K0eRJnto9RKVkKY17ahPgEsjmhLZuT+dMQSzk8xmsqpFi6OccneOIV0ydP3N2y/mBuEtcmCzo6so/XCol5QP1Zvt8hV8p4k5oDvoeufeJH/3NkZ1v+uDp83OXukhOHohl0RZl3u9g1YOe45b1cdQJbZw+7SvUkhJPjv8aKzkwSr4o9M62TJ9nae0xFFqEICdYMcSho651alEoe0ZGpKx7XfuCRHuWaHMS14/Z/WhiwphfNMLQ/6lAUJaDWWnEvTzQ97WRfO7tbz3anH/CzITHNgY6xdHVnuPobJa7toyz8IjFnLR8jN7sa9gw8UMeGvomJEUqYZW2DkNghErFMb0rTxh5xsuO0rgnX3Rs+AmUxhTbrkjW4OrYsFzyvoz3A2ZTNZO9ejmRXXmAXWFwoMLfZMQdJ/r5Q7py7/uX957qD23x3t3260Cb25DjjsEmIW7Hk3x1uIXTL5uKl608tPfrbB7ejroiTiK6ugxrVjkWzs4z44iA8rjS2hyAASOGcpgKfvTNCfMKwl48FugUkX6nrI99fnbWzVgJm/sgWP2n8IA+sCuNJMerfvHI2U3v+dcV5ybd47tsvG5Q7GnLkCw4r2TGd3PD6gnyJy+hd+EutgyMUVdHc1Mz5WrC5kc9j/y4zqzVnjumxZx7dRttvZ6RkTrZrCF2DmOF5nnQ3gJvMDAKqBfwKt29U3R9Pj/76i077zq52V64uuz+u6GE5EXDgD4IVoskx1n94OJp+Sv+7dPL4ym1oUys0yS47Muw9E1QLWG2PEy07Qk+v1c5+6PdTARbmKgpe/cqD66K+e23I4IbYv7+KeWdbZYZo56vPVDn4BPztE6BsXGHV/AeYq+U7vWcl7dMm5Iha5VsAGgiJ8zq9Yd2dZl7BvZeML1g778n0ieWg13/R6RF+8cA3q3gTirmXtWd9dd/5qNnJ73NLoibF0lwyVegpRsxOfTJVdj1d1Gq1Pn62AQ7zBD3/yLi0R/UGf4/EYvuSHjrMFzWmeWE+UXaZ+U4vMkwbVvM1fdGTH9Znu5eYe9IgqjgFCbudZzjDR3tGbKBQQCXJAwM7pGXTevRue3t5s7+oXPmFXM33Rq54RVgVj9HJTxXBch64OLDZ7dPDIzc9oFLjms+9qgeieN2Yy/6d3AxYrLojgeQO6/BxQlNgTJz4wi1/wk5Yb3ndaOGt3fkeM1BTSxY0EJhah6Tt6gTKFiWtFkW7Yz59p0hlS7LgkWWauip1pToPs95WArNAWKEjBW0Id7gniE5evZsb60p3LNn7MQblvZdd+u2bax/IT1gOdj1Ij43OP65M1/e87eXXnycS3b0W3vuFVDsgiADpd3wy3+H6igSx2gUsqAt4NTeHMcc3MLcQ9po6m3Ct+bw1oCmQoiAeMVnDQvaA04pOe66s84Dw8qcJRlKkad+u+fCjCUoWlTBWoOgxInivTI+Nm5OWXhwsn58bNY3Nz1V+mXCr55rKDyrAlaAuRZ0aXN2cVfOf/Ojly2VtrFdRuccL+aE16cSjO+Eu6+Coe1QjyCqQhLjshbfmsXnLYqgHkgUvIIqMtnpK4iCt4butgxnBcCamLt+G/Pkk3DmgHJKWwbNGaRR+AaBIak7PIY4TsiKlYOnTtPb+gePX9jVdN0tlbjS6Hb1ebXD60EQ0Vq5/uGzTpiVmdWT9cnwmJhCEa2OwIbb4NYV0P8khDUIy+BjsGCMYlQxxiBGEAOSEcQ2aIJ0FAJGwKRPYyPkuvO845Ai34oCrnlcuaQ1gzQHiIKINHQmFAsBgqeQz7Fr1w5Z3DXbv2rG9PbBocrlINr3HOST58AX+FPb83NySbTha/90Sm4OoyR1J2bqTMg1QWkAjIEkQaMqrh5BEoN6RMFqw+KJQuwh1vRKFCIHsaLOT0I+KKjzKBAoSORxAqqgTlFV1KWub0QYm4gZr3iCIMeso5f5jYV2eddN/7m3OLvz4J9vGik9G3tsniXtGUQYHgtff/yirvyc3qJze/eIedX/gjlHw9bHIAqhMoErjWLrNbIFIdtZINucIZMF7316+sYZ1Gujk0sBQEURUUBQa1JPMIIRwYmQ5AxqBZVJL5GnzaZKIWvAe9q7p+CiEbN4+lx/1Mzenl2bRs4Goe9ZwvwZFbAanAgUhPNPPnIGjAyKb+5BjjoTtqyDWgUqZVxpgozEVEyW6x8e5/0/2s4n7hjivm01gkBSy03GPYo4n1q9YRedPIlJQ0KtIZH0HSupQryQKkFATBovzoM1QjYQxoaHGO/fgtm7Q5fOP1xtyjvTc6AYsKIBIEtbsvN6Ws0RS+Z3wNC4kaiMXnMpuuE3oAGuXCUTKD/fAUuv28Et/kT02DfzncfhrO/s5opVIxgL6n3qvpqeKBUijfs0GAURwRvB4skVMwRtBXw+hw2EXN6QMYLX1PLSKJS8QiZjiGohe3buYGLbWntEa7u0FjjppM6OlpUpgyR/dCm8qhH/o+PRy49a1JKd3mqd31a2YhSeegTJ5HBhSKZg+cnGhLfeNs5137mBs159LgB/d/LL+NDbLuWqhyY4rM1y0eIm6rEnsAZsigsquu9ooh6nQkaUqK2ZLz8xxq3bK4yUYWqL5dSOgHf1BLQaCN1+dKuHwAjGpnzZ2OBWmdExRWc253oeLg8fBvxmOZiVf4BKe2aUFMHCkXOmNoOP1VVCRIEgi08cgYGd48pbftTPP//zBznr1ecyURoHYPP2XZQjmNoccP36Mhp7rKSe8HTeSy0J4Dxk1LMj18Rpvy7xyJILeNuXb+SMt72dJ2qez/XHnL2+ykDsCQSc7sug+3BBgUp5jGI44OYX85BwOMCeA/GAnjTTIMpB0zvzUKtB4veBj4ogGcM1v5mgpnDGGcsAaGltY+O6x/jGFz9PrmDAeHZVlJGKoytvSVAadHfauzlFfaqPar7A8rsHeN1HvsB7L383ABdffBE7f3cPmx7fwKOh8KHtEdfNzTWwXfGTxVRjl6Ye16EyxvRsgMKCZxshmmegubRRKXV1FC3U41SLDtRDYGCi4rh9e8icJuH7136WB+5ZxfVfvYo3n30aYaVENmcxpIcMvYBN45xGHEOqCK8QFDN84dEh7IJjee/l76ZWqxLHdcbHxtjcP8REoswtGG4ve9aWHQVSDEizCqim+JB4Ja5W6AqErDDtgNvhK0EFMEJLXjwkScNiHjWCZIQtJcdIGDO3K8cvf3ozP/jezdTrUChAGIGrewotlpyB1nxjy0kb6O/TS4HACmEM39lU54yl8wAoFIoAXPWJ97Nr6146p2TI4IkRHqh4Ds8bXCMGVJX9HIp6nEjBGDJWuhHo0T/sAs/KB1iDMWEIVZtaP1E0SBEoTFL/qyceb7MUmz3FdDbC+z/5ccYHtnHVF69h6fwCLS0BSegx1qT+3tjwUQ/GwmN7IyoFw+CaO7jth9+ltbuX733r6/z4hu/T1ZVFVREjWCsMN8pp1fR3fEMJ8HSVaI3BqPrUjAfgAStArlTUCbWwHELVoIkiiU/d2CnTC4a8lUa+VqwRxkZiTj+nj0v/9wdYe/+v+Ninr+aiY7pQ08jjljR+VPHO40XBGrZHDglgz8gY7/mHN1BPwDlobTWMDNWxFnqmZFLvyJiniyqfun2iDWD0YGygcaw4T/WAQ2B9AzkTZXC0VIc4q/hUcGM8SQizWgOO7c7y0HDCQV0ZnBemNVnK29dy1Uf+kW9f/yPOO6GTsxYWkPGQIBA8mvYCHjIFg29YMUhnZ1QTyDdlyHiPiCGsJbzxnW+FJOLnK2/AAIe0BI1yWVD1JEmKM17TXGetZawakigjz5YF/iAI7gFBFbFs7h+LIfbpr7gGEMYOrYZccUyOfODZORLTmjUUspbNWwZY8alrOHRezDWv6UVqIV94sMQ/3r4XmzV4UWwGfjtUZ6xxioOaDTlJnSNrwRpDeTzmpL5X8Imrv8G/XvMt6kGOuUXhhJaAcqKTiYC4Yf3Ep5lArGUwrINl+/MejibWrNs+WodajAU08RA7rBp8y2wOnnsIKy9ZzIlHtjMshiEs0w+dzjUfOZYbL5xF08AYYFm3J+Tu7TWGywlBR5Y7d0ecduswP91RAwOLWgOOaA4oxdDZlKE1b5nVnSEZ3clvbvsxV77nnWwdrfJPiztoqdSJAO8U55W609QuCllrSayVnWEdFR5/NkrgD4bAKeBXAy0F+9DWcuwH90R2amsWlyj4BOa8DOldSGIM8wO4ZuYOSqNbiJsKdGWBkXH8hgouE2AT5Q2LW7l9S8jrfjrIQR0Z7twacmSnoW9qFl/3WIQrD2vi4ocnGBzzHNRTIJfJM7J7J28+5zwGYvjMGVN5dbnKWD2tghQlclB34FRw3tPUlGNUsVtr9SSX4VFq8ExssXmGNOgBufz08zYMOtmwdnckeO/VNVrZBtdg4pAkTkh0Hq2D0PXoZvyaXcT9ZVQsQaK4SsKpM3N89bROpuaETUN1zpyd4/q+DuY0B/hEcbFnSdHw3dO7OXhuM9snEp4YqjFQ9Rx2aCs/umgm74wjJoYj1Ai+UUDVEiVW8D7NAp0tTX5rrc5Q3W+cv2z51qcL5gNIg31gL1y5MjmySW757Zhb/LdjdU9T1igG2bIWsnlkSi8myIDGOBSVDGJtGi5xWrQLiqsrZ80pcNb0HPVEyVqB0KepsdEex5FyeBzxvSNb2OibGUqEKd3dHKIG1u6i3F/GZwJclDZWUaKEkwCIEFihrbnJP7hn1NSUn61ceZN7Nqr8GRUwGQZNmeDG+6vJBzeP1O28jMFnArQawiP3QPsUaGqFqIREJcgE4B1q01YvXQRT8BCHDqNKRpW4pkisGJcimCaKUYgjj6wd4pBikUOOejkU23GVGL9kJpn2rdTXrsNr2gqX6p6k0REaoDWfY8KI+dXohIrhB6AH3g5PhsEKMPeNxY8MOFavGvfIeOx87BEv4Aw6PIRufwpGRyERJHRIlF7s++uR2GMTD5HHhx4bKzLJEtV9GlaJxzjAJyTTZ5O0TSWp1sCHBOoIunpwavDeU64rdZd+zZjUy2Z2tLjfliqyNXQPrKnqgzxDF/hHcYIKGGM++/MJke0VRzJRT7NBoqAWJIs6g0Y+veqKhg5Ch0YNAev+95/XUwpM49T6k4rQyOHV4nbugP7tGO8Q53ATE0w89hiuHhPGUI39vlI4Y4SmXAZbzHPzwIjEcJXIC8MJ7iNHPg7+uKLceXE7p17WaVyYt7a1JYsXeZrYnFxgF1KecL+2GtjHBjeC9un9L6do4lKCwynOg48TPIIWingPrlzBxQmRM4yHjsgLdacUAyF2nkVTu90dsbef3jb86JnH9x3D6tX+yucwK3xOc4EeMOtAD23OPPxE6N+2KIdME6SaeMkFDY4/8eBBJrOEZx8Zmrp64/XG+xqnHqSJ4hNPEivOgXNKkqTI4RzElRpJLURVCJ0wVnPEmqa+QiAEKB1NRXxLi//Mtr2mjHnjd5/csqkHzAsyF2iEgS4H+9PQD0wJTLI98a98RcEkJGrD2JNt9DfepfU5rtGsuLRw0kmga4Cd92md7xKPS1LBk4blnVOcS8vbxCkeg0eYCD2l0ONIyeSCFYoZQAxzpvYkX+ofDh4qx998oMaXloNd+RyXqZ7zbHB9Y0J0R6x356wcP5zoIX9TCJJarKYW+cbmc+rSzpPm9uRpCttPWrdh4VTQSaFTBSSN15JEJ3VIGHsmQk+1ke5iD3krtGaFxCsHdU9xPxirBt/fW954bEv3ax+oVpIXZTi6HyDKsp7WW+8v1c+pqE5dWgiSSuxNNXTEcSrsJPGpflJQfk/oOGkI6cE1nieTivJpURMlSjnyTNSVWAWnQtxw+9asoe6UuZ2d7s7Q22t3j401F7LLbhye2LUCZPWLpQBAV4B8sRRVj2nO3/JwLT6npkx5RXM2Dp3aibqnXveEkSdOfOrmvuH6jXw9CXTs99xr6h1R4qkmnlJdKUdK5J8mObxCMWPIZ9KJ8dyuTreqrvZL/SOhz9hz7hhLHlgO9to/cklCDng3CNz50/JzBkrRLa9sMYe/szOX+Ci2g2Ei6aQrjYc0SUg6/TKyr4NDUgU4Td0/9rovOfiGCJ5Gfy+p8KDkraW3rTX5n2ocfGOwNJ6IPf+eirvzQJYjntee4KQS3jKztXP9SOk/l+TNOW/vyrFQcLsqkZ1IFCP73d+mTws+OShSGiSJgm8wPig41bQRAbJGGu2x0JUv+CSX1xtGy/bWsXBDMZe56Lax+JEDFf55bYmtT8PBfLEUVfsTbiyKVO+uJCeHRnKLmrJ+WmB9lKhUnZfYp6Mtj+D2o61c466nNHEIDsUhiELGQC4QilZoz+Z8S7HJrfFiv7KnZO6rxN+d1912wc2D1a2Tixt/zk3RfSOKU5syh9U0/tSsjJz7quYMJ2YtU1STcuxMKXZS9SoxKX+X3hRJCquNWt4aIWeEYiAUrfVZY33FBGajx/yyErKmGq9zxq64r+x/CMoKMFc+z3uGXrBl6f3dsK/Nnh4l7vKpVs44Km+DI7OW+YGhVdXhVVUVpyqTWx7WGDLGYI1oojAhxg4osr6e8FAYszl2j9YwX1vcNeu6/9q2LWwIri+5e4Ya88RJLoG+jsySauxek8efO8XK4TMCyfUaQ7cV2owhIykoxkBVYdQrA4ljR+wZdH7rhHKnt3blB5edf/uFK1e6/bHnJb0uvxzsYtBJRQjCKa3Zg6o+OcKhSwL8wRmRGUBz6g+SONU9ibLdGLPeO/PwvK5pa1fu3Fn7f0DX/0XdL7wCTN8f5Bx+bzT8/7XFcrDLU6B+0e5rkD+lMlbt156eAr4Rx6xIt9Bkkr7uAf1TWfv/AgxYkH5Da9T7AAAAAElFTkSuQmCC";
43
+ /** The ready-to-splice `<link rel="icon">` tag. */
44
+ declare const FAVICON_LINK = "<link rel=\"icon\" type=\"image/png\" href=\"data:image/png;base64,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\">";
45
+
46
+ /**
47
+ * HTML entity escaping, matching the reference renderer's `esc` semantics.
48
+ *
49
+ * Escapes `&`, `<`, `>`, and `"`. `null`/`undefined` become the empty string.
50
+ * Non-string values are coerced via `String()`.
51
+ */
52
+ /**
53
+ * Escapes a value for safe insertion into HTML text or attribute content.
54
+ *
55
+ * @param value - The value to escape (any type).
56
+ * @returns The escaped string. Empty string for `null`/`undefined`.
57
+ */
58
+ declare function escapeHtml(value: unknown): string;
59
+
60
+ /**
61
+ * Output-safety helpers.
62
+ *
63
+ * Chiltepin documents are normally authored by trusted hands, but rendered output
64
+ * is also shown in untrusted contexts — any hosted preview renders whatever a
65
+ * visitor pastes, and shared renders travel beyond their authors. So the
66
+ * renderer treats author-supplied values (colours, link hrefs, prose HTML) as
67
+ * untrusted and neutralises anything that could break out of its target context.
68
+ *
69
+ * These functions are pure and allocation-light; they run on every render.
70
+ */
71
+ /**
72
+ * Returns `value` if it is a safe CSS colour, otherwise `fallback`.
73
+ *
74
+ * Use this for any author-supplied colour that gets interpolated into an SVG
75
+ * attribute (`fill`, `stroke`) or a `style` declaration.
76
+ *
77
+ * @param value - The candidate colour (any author string, or undefined).
78
+ * @param fallback - The colour to use when `value` is missing or unsafe.
79
+ */
80
+ declare function safeColor(value: string | undefined, fallback: string): string;
81
+ /**
82
+ * Returns `url` if its scheme is safe to put in an `href`/`src`, otherwise `#`.
83
+ *
84
+ * Relative URLs, fragments (`#id`), and the usual web schemes pass through;
85
+ * `javascript:`, `data:`, and `vbscript:` are rejected.
86
+ *
87
+ * @param url - The candidate URL.
88
+ */
89
+ declare function safeUrl(url: string): string;
90
+
91
+ /**
92
+ * Renders Markdown prose to an HTML string wrapped in `<div class="prose">`.
93
+ *
94
+ * @param text - The Markdown source.
95
+ * @returns The HTML output, wrapped in a `prose` div for styling scope.
96
+ */
97
+ declare function renderProse(text: string): string;
98
+
99
+ /**
100
+ * The look. There is exactly one: the editorial skin defined in `css.ts`
101
+ * (`packages/render/DESIGN.md`) — warm-neutral paper, near-black ink, one rust
102
+ * accent. Dark mode is not a theme: the tokens flip on the reader's
103
+ * `prefers-color-scheme`, or when a host page stamps `data-theme="dark"`.
104
+ *
105
+ * This module keeps the shape a preset system needs (a name, a label, a set
106
+ * of `:root` variable overrides) so presets can return without an API change.
107
+ * Until then the single entry overrides nothing and `themeStyle()` is `''`.
108
+ * Callers that need a one-off variable override use `RenderPartsOptions.themeVars`
109
+ * — an internal escape hatch with no user-facing surface.
110
+ */
111
+ /** The single look. */
112
+ type ThemeName = 'textbook';
113
+ /** The look used when none is specified (there is only one). */
114
+ declare const DEFAULT_THEME: ThemeName;
115
+ interface ThemeDef {
116
+ /** Human-readable label, for UI surfaces. */
117
+ readonly label: string;
118
+ /** CSS variable overrides applied at the `.docskin` root. */
119
+ readonly vars: Readonly<Record<string, string>>;
120
+ }
121
+ /** The looks. One entry: the editorial skin, which `css.ts` already defines. */
122
+ declare const themes: Readonly<Record<ThemeName, ThemeDef>>;
123
+ /**
124
+ * Returns the CSS variable overrides for a look as a declaration string
125
+ * (e.g. `"--accent:#0f766e;"`). Always `''` today — the editorial skin is
126
+ * the stylesheet's own `:root`.
127
+ */
128
+ declare function themeStyle(name: ThemeName): string;
129
+
130
+ /**
131
+ * Renders a parsed {@link Document} into its composable PARTS — the CSS, the
132
+ * variable-override string, the inner body HTML (for a `<div class="docskin">`),
133
+ * the title, and a section index for navigation.
134
+ *
135
+ * {@link renderDocument} (in `document.ts`) wraps these parts into a standalone
136
+ * `<!doctype html>` page. Embedding consumers (e.g. a React app) inject the
137
+ * parts directly: one `<style>` with `css`, a scoped `<style>` that sets the
138
+ * variable overrides, and the `body` inside their own `.docskin` host. This
139
+ * avoids nesting a full HTML document inside the page and enables
140
+ * section-level navigation (each section carries an `id`).
141
+ */
142
+
143
+ /**
144
+ * Which token set a page shows. `dark` (the default) stamps nothing: the
145
+ * stylesheet's own root is dark. `light` stamps `data-theme="light"` on the
146
+ * page root. `system` lets the reader's OS choose, light or dark.
147
+ */
148
+ type ColorScheme = 'dark' | 'light' | 'system';
149
+ /** Options shared by {@link renderDocumentParts} and the page renderer. */
150
+ interface RenderPartsOptions {
151
+ /** The page's colour scheme; the parts renderer ignores it (a page-level stamp). */
152
+ readonly colorScheme?: ColorScheme;
153
+ /** The look. Only `textbook` (the editorial skin) exists; defaults to it. */
154
+ readonly theme?: ThemeName;
155
+ /**
156
+ * Internal escape hatch: CSS-variable overrides emitted on `:root`, e.g.
157
+ * `{ '--accent': '#123456' }`. No user-facing surface sets this.
158
+ */
159
+ readonly themeVars?: Readonly<Record<string, string>>;
160
+ }
161
+ /** One navigable section of a rendered document. */
162
+ interface DocumentSection {
163
+ /** DOM id of the `<section>` (e.g. `section-01`). */
164
+ readonly id: string;
165
+ /** 1-based section number. */
166
+ readonly num: number;
167
+ /** Section label (e.g. `Roadmap`, `Sequence`). */
168
+ readonly label: string;
169
+ /** The block's title, if it has one. */
170
+ readonly title?: string;
171
+ /** The block's user-supplied `id:` (referenceable as `doc#id`), if it has one. */
172
+ readonly blockId?: string;
173
+ }
174
+ /** The composable pieces of a rendered document. */
175
+ interface DocumentParts {
176
+ /** Theme-independent house stylesheet. Inject once. */
177
+ readonly css: string;
178
+ /** Theme variable declarations (e.g. `--navy:#0f766e;`), or `''` for default. */
179
+ readonly themeVars: string;
180
+ /** Inner HTML for a `<div class="docskin">` host: defs + cover + sections. */
181
+ readonly body: string;
182
+ /** Document title (from the `meta` block). */
183
+ readonly title: string;
184
+ /** Section index for navigation. */
185
+ readonly sections: readonly DocumentSection[];
186
+ }
187
+ /** Builds the `:root` variable declaration string (look + internal overrides). */
188
+ declare function buildThemeVars(theme: ThemeName, vars?: Readonly<Record<string, string>>): string;
189
+ /** One rendered segment, index-aligned with `doc.segments`. */
190
+ interface RenderedSegment {
191
+ /** The segment's HTML (`''` for the meta block and empty/`null`-body blocks). */
192
+ readonly html: string;
193
+ /** DOM id of the segment's `<section>`, when it produced one. */
194
+ readonly sectionId?: string;
195
+ /** 1-based section number, when the segment produced a section. */
196
+ readonly sectionNum?: number;
197
+ }
198
+ /** A document rendered segment-by-segment, plus the shared page pieces. */
199
+ interface DocumentSegmentsResult {
200
+ /** Theme-independent house stylesheet. Inject once. */
201
+ readonly css: string;
202
+ /** Theme variable declarations (e.g. `--navy:#0f766e;`), or `''` for default. */
203
+ readonly themeVars: string;
204
+ /** Document title (from the `meta` block). */
205
+ readonly title: string;
206
+ /** Shared SVG `<defs>` (markers + filters) — the body's leading chunk. */
207
+ readonly defs: string;
208
+ /** The cover/meta header HTML the document body starts with. */
209
+ readonly cover: string;
210
+ /** EXACTLY one entry per `doc.segments[i]`, index-aligned. */
211
+ readonly segments: readonly RenderedSegment[];
212
+ /** Section index for navigation. */
213
+ readonly sections: readonly DocumentSection[];
214
+ }
215
+ /**
216
+ * Renders a document one segment at a time — the primitive under
217
+ * {@link renderDocumentParts}. Recomposing
218
+ * `defs + cover + segments.map((s) => s.html).join('')` yields exactly
219
+ * `renderDocumentParts(doc, opts).body`, while keeping each segment's HTML
220
+ * addressable by its index in `doc.segments` (for editors that re-render one
221
+ * block at a time).
222
+ *
223
+ * @param doc - The parsed Chiltepin document.
224
+ * @param opts - Optional theme + variable overrides.
225
+ * @returns The shared page pieces plus one rendered entry per segment.
226
+ */
227
+ declare function renderDocumentSegments(doc: Document, opts?: RenderPartsOptions): DocumentSegmentsResult;
228
+ /**
229
+ * Renders a document into its composable parts.
230
+ *
231
+ * Implemented on top of {@link renderDocumentSegments}: the body is
232
+ * `defs + cover + segments.join('')`.
233
+ *
234
+ * @param doc - The parsed Chiltepin document.
235
+ * @param opts - Optional theme + variable overrides.
236
+ * @returns The CSS, theme vars, body HTML, title, and section index.
237
+ */
238
+ declare function renderDocumentParts(doc: Document, opts?: RenderPartsOptions): DocumentParts;
239
+ /**
240
+ * One piece of a slide, for structure-aware exporters (e.g. editable PPTX):
241
+ * the same content as the slide's HTML, but still addressable as prose text or
242
+ * a typed block with its parsed data.
243
+ */
244
+ interface SlidePart {
245
+ readonly kind: 'prose' | 'block';
246
+ /** This part's rendered HTML (a slice of the slide's `html`). */
247
+ readonly html: string;
248
+ /** Raw Markdown source (prose parts only). */
249
+ readonly text?: string;
250
+ /** Block type (block parts only). */
251
+ readonly type?: BlockType;
252
+ /** Parsed, sugar-normalized block data (block parts only). */
253
+ readonly data?: unknown;
254
+ }
255
+ /** One presentation slide (used by the slides export). */
256
+ interface Slide {
257
+ /** Section label (e.g. `Sequence`), or `Cover`. */
258
+ readonly label: string;
259
+ /** The block's title, if any. */
260
+ readonly title?: string;
261
+ /**
262
+ * The exhibit's supporting line — a block's `lede`. On a page it sits in the
263
+ * section head; on a stage the deck pins it under the slide title, where an
264
+ * action title's supporting line belongs and where the fitter can't shrink
265
+ * it with the exhibit.
266
+ */
267
+ readonly lede?: string;
268
+ /**
269
+ * Provenance for the exhibit — `## Title {source: internal QA, Oct 2026}`.
270
+ * Every consulting exhibit carries one, and it belongs in the slide footer
271
+ * rather than under the block, where the fitter would scale it away.
272
+ */
273
+ readonly source?: string;
274
+ /** The part (divider band) this slide belongs to, for the deck tracker. */
275
+ readonly part?: string;
276
+ /** Inner HTML for a `<div class="docskin slide">`. */
277
+ readonly html: string;
278
+ /** Vertical alignment of the content (auto by weight, or forced via a heading marker). */
279
+ readonly align?: 'top' | 'center' | 'bottom';
280
+ /** `split` = consulting layout: prose (message) left, blocks (exhibit) right.
281
+ * Forced via a `{split}` heading marker. */
282
+ readonly layout?: 'split';
283
+ /** `{nobuild}` heading marker: the deck shows this slide whole instead of
284
+ * stepping through its diagrams' `data-reveal` order. */
285
+ readonly nobuild?: true;
286
+ /** The slide's content as structured parts (empty for the cover — exporters
287
+ * read `doc.meta` for it). Concatenating part HTML yields `html`, modulo
288
+ * the split-layout column wrappers. */
289
+ readonly parts?: readonly SlidePart[];
290
+ }
291
+ /** A document rendered as a sequence of slides. */
292
+ interface SlidesResult {
293
+ readonly css: string;
294
+ readonly themeVars: string;
295
+ readonly title: string;
296
+ /** Shared SVG `<defs>` (markers + filters). Place once at the deck root —
297
+ * NOT inside a slide, since slides toggle `display:none` and a filter
298
+ * referenced from a hidden subtree won't resolve (the element vanishes). */
299
+ readonly defs: string;
300
+ readonly slides: readonly Slide[];
301
+ }
302
+ declare function renderSlides(doc: Document, opts?: RenderPartsOptions): SlidesResult;
303
+
304
+ /**
305
+ * Renders a parsed {@link Document} to a standalone HTML string.
306
+ *
307
+ * - Inlines the house CSS in `<style>` so the output is self-contained.
308
+ * - Wraps the body in `<div class="docskin">` so the CSS rules apply.
309
+ * - Emits internal `themeVars` overrides (if any) as CSS variables on `:root`.
310
+ * - Dark is the look. `colorScheme: 'light'` stamps `data-theme="light"` on
311
+ * `<html>`; `'system'` adds the media rule that lets the OS choose.
312
+ *
313
+ * The actual rendering is done by {@link renderDocumentParts} (in `parts.ts`);
314
+ * this function just wraps those parts into a full HTML page. Embedding
315
+ * consumers (e.g. a React app) should use `renderDocumentParts` directly.
316
+ *
317
+ * @example
318
+ * ```ts
319
+ * import { parseDocument } from 'chiltepin-core';
320
+ * import { renderDocument } from 'chiltepin-render';
321
+ *
322
+ * const html = renderDocument(parseDocument(md, 'orders'));
323
+ * ```
324
+ */
325
+
326
+ /** The `<html>` attribute and extra `<style>` a colour scheme needs. */
327
+ declare function schemeMarkup(scheme: RenderPartsOptions['colorScheme']): {
328
+ stamp: string;
329
+ style: string;
330
+ };
331
+ /** Options for {@link renderDocument}. */
332
+ type RenderOptions = RenderPartsOptions;
333
+ /**
334
+ * Renders a document to a standalone HTML page.
335
+ *
336
+ * @param doc - The parsed Chiltepin document.
337
+ * @param opts - Optional render options (internal variable overrides).
338
+ * @returns A complete HTML string (`<!doctype html>…</html>`).
339
+ */
340
+ declare function renderDocument(doc: Document, opts?: RenderOptions): string;
341
+
342
+ /**
343
+ * Slide-deck assembly — turns a document into a self-contained presentation
344
+ * deck: one slide for the cover and one per section, with keyboard / button /
345
+ * jump navigation. Each slide is a `.docskin` paper card with a hairline edge.
346
+ *
347
+ * The output is a single HTML file with inline CSS + a tiny vanilla-JS
348
+ * controller (no runtime dependency), so it opens straight in a browser.
349
+ * Pure string-building on top of {@link renderSlides} — browser-safe, no I/O.
350
+ */
351
+
352
+ /**
353
+ * Renders a {@link Document} to a self-contained slide-deck HTML string.
354
+ *
355
+ * @param doc - The parsed document.
356
+ * @param opts - Optional internal variable overrides.
357
+ */
358
+ declare function toSlides(doc: Document, opts?: RenderPartsOptions): string;
359
+
360
+ /**
361
+ * HTML renderer registry — mirrors the core block registry's exhaustiveness.
362
+ *
363
+ * Each block type maps to a function that takes its typed data and returns an
364
+ * HTML string. The mapped type `{ [K in BlockType]: ... }` ensures omitting a
365
+ * block type is a compile error — adding a new BlockType in core fails tsc here
366
+ * until the renderer is added.
367
+ */
368
+
369
+ /** Per-block HTML renderer signature. */
370
+ type HtmlRenderer<K extends BlockType> = (data: BlockDataMap[K]) => string;
371
+ /** Mapped type — adding a {@link BlockType} without an entry fails tsc. */
372
+ type HtmlRendererRegistry = {
373
+ readonly [K in BlockType]: HtmlRenderer<K>;
374
+ };
375
+ /** The HTML renderer registry. `meta` is intentionally a no-op (cover is rendered separately). */
376
+ declare const htmlRenderers: HtmlRendererRegistry;
377
+
378
+ /**
379
+ * Node-kind vocabulary + skin helpers for the architecture-flavoured blocks
380
+ * (block / infra / event / ddd / network, cluster, felogic, …).
381
+ *
382
+ * The skin (see `DESIGN.md`) tells kinds apart by stroke weight, dash, fill
383
+ * and an eyebrow chip — never by hue. {@link nodeSkin} is that mapping;
384
+ * {@link nodeGlyph} keeps the small icons (drawn in `muted`). No hex here:
385
+ * every colour is a role token.
386
+ */
387
+ /**
388
+ * Every node `kind` {@link blockStyle} styles specially — the case labels of
389
+ * its switch, in switch order. Editors use this as the canonical dropdown of
390
+ * documented kinds for the block-graph family (block / infra / event / ddd /
391
+ * network / cluster). Keep it in sync when adding a case below.
392
+ */
393
+ declare const KNOWN_NODE_KINDS: readonly string[];
394
+
395
+ /**
396
+ * Frontend / backend module-graph rendering — design-pattern nodes (engine,
397
+ * interface, strategy, controller, service, repo, worker, middleware, model,
398
+ * db, cache, queue, hook, store, external) as module cards.
399
+ *
400
+ * Backs `felogic` (with `variant: be` for the former `belogic` framing).
401
+ *
402
+ * Skin (`DESIGN.md`): a module is a paper card with an ink outline and an
403
+ * eyebrow chip for its pattern role (`ENGINE`, `INTERFACE`, `CONTROLLER`, …);
404
+ * `interface` is dashed (a contract, not a body); `middleware` and `state`
405
+ * sit on the inactive fill. Data, transport and external nodes borrow the
406
+ * block family's shapes (cylinder, pipe, stack, cloud). Edges follow the
407
+ * stroke table: `uses` solid, `implements` dashed with the UML hollow
408
+ * triangle, `reads` dashed with an open head, `async` dotted, network calls
409
+ * (`egress` / `https` / `api`) in `link`.
410
+ *
411
+ * Accent rule: the single entry module — `engine` / `core` on the frontend
412
+ * variant, `controller` / `handler` / `route` on `variant: be`. Two or more
413
+ * candidates, or none, means no accent.
414
+ */
415
+
416
+ /**
417
+ * Every module `kind` {@link feSkin} styles specially (plus `component`, the
418
+ * default) — the canonical dropdown of documented kinds for `felogic` /
419
+ * `belogic` nodes. Keep it in sync when adding a case below.
420
+ */
421
+ declare const KNOWN_LOGIC_KINDS: readonly string[];
422
+
423
+ /**
424
+ * Global SVG `<defs>` shared by multiple block renderers (markers used as edge
425
+ * arrow heads, a drop-shadow filter for boxed nodes).
426
+ *
427
+ * Emitted once near the top of the rendered body so subsequent SVGs can
428
+ * reference them by id. Ported from `resources/doc-studio.jsx` `GlobalDefs`.
429
+ */
430
+ /**
431
+ * Returns the SVG element containing global marker + filter definitions.
432
+ * The element is invisible (width/height = 0) but the defs are scoped to the
433
+ * document so any subsequent `<svg>` can use `marker-end="url(#gArrow)"` etc.
434
+ */
435
+ declare function globalDefsSvg(): string;
436
+
437
+ /**
438
+ * Manhattan / orthogonal edge routing between two rectangular nodes.
439
+ *
440
+ * Returns the SVG path `d` attribute and a midpoint for label placement.
441
+ * The route turns at the midpoint along the dominant axis, so edges read
442
+ * cleanly even when the source and target overlap on one axis.
443
+ *
444
+ * Ported from `resources/doc-studio.jsx` `ortho`.
445
+ */
446
+ /** A rectangular node bounding box (top-left + size). */
447
+ interface Box {
448
+ readonly x: number;
449
+ readonly y: number;
450
+ readonly w: number;
451
+ readonly h: number;
452
+ }
453
+ /** Routed edge: SVG `d` plus a midpoint for the edge label. */
454
+ interface Route {
455
+ readonly d: string;
456
+ readonly lx: number;
457
+ readonly ly: number;
458
+ }
459
+ /**
460
+ * Routes an orthogonal edge from box A to box B.
461
+ *
462
+ * @param A - Source box.
463
+ * @param B - Target box.
464
+ * @param lane - Perpendicular offset lane (±1) so an A→B / B→A pair renders
465
+ * as two parallel arrows instead of one line drawn twice. 0 = centered.
466
+ * @param entry - Entry-port offset along B's entry side (px). When several
467
+ * edges terminate on the same side of the same node, each gets its own
468
+ * offset (see {@link entryPortOffsets}) so their final segments — and
469
+ * arrowheads — no longer coincide. 0 = the side's center (the historical
470
+ * geometry, byte-identical).
471
+ * @returns SVG path data and label midpoint.
472
+ */
473
+ declare function ortho(A: Box, B: Box, lane?: number, entry?: number): Route;
474
+
475
+ /**
476
+ * Wraps text to fit within an approximate character-per-line budget, capping
477
+ * the total number of lines. Word-aware (won't break mid-word).
478
+ *
479
+ * Used by diagram renderers for fixed-size labels. Ported from
480
+ * `resources/doc-studio.jsx` `wrapText`.
481
+ */
482
+ /**
483
+ * @param text - Source text (any value is coerced via `String(...)`).
484
+ * @param max - Approximate maximum characters per line.
485
+ * @param maxLines - Maximum number of lines to return (later lines dropped).
486
+ * @returns An array of wrapped lines; empty array for empty input.
487
+ */
488
+ declare function wrapText(text: unknown, max: number, maxLines: number): string[];
489
+
490
+ /**
491
+ * Renders an SVG edge label as a small rounded pill, sized to the label text.
492
+ *
493
+ * Returned as an SVG `<g>` fragment so it can be appended inside an enclosing
494
+ * `<svg>`. Returns the empty string if `label` is falsy.
495
+ *
496
+ * Ported from `resources/doc-studio.jsx` `EdgePill`.
497
+ */
498
+ /** Pill placement (midpoint of the labelled edge). */
499
+ interface PillPoint {
500
+ readonly lx: number;
501
+ readonly ly: number;
502
+ }
503
+ /**
504
+ * @param p - Midpoint of the edge (typically from {@link ortho}).
505
+ * @param label - Label text. Empty/undefined yields an empty string.
506
+ * @param err - If true, the label is rendered in the error style.
507
+ */
508
+ declare function edgePill(p: PillPoint, label: string | undefined, err?: boolean): string;
509
+
510
+ export { type Box, type ColorScheme, DARK_SET, DEFAULT_THEME, type DocumentParts, type DocumentSection, type DocumentSegmentsResult, FAVICON_DATA_URI, FAVICON_LINK, FAVICON_SVG, type HtmlRenderer, type HtmlRendererRegistry, KNOWN_LOGIC_KINDS, KNOWN_NODE_KINDS, LIGHT_SET, type PillPoint, type RenderOptions, type RenderPartsOptions, type RenderedSegment, type Route, type Slide, type SlidePart, type SlidesResult, type ThemeName, buildThemeVars, edgePill, escapeHtml, globalDefsSvg, houseCss, htmlRenderers, ortho, renderDocument, renderDocumentParts, renderDocumentSegments, renderProse, renderSlides, safeColor, safeUrl, schemeMarkup, systemSchemeCss, themeStyle, themes, toSlides, wrapText };