Slide components

Presentation mode is built around one rule: write plain Markdown where plain Markdown already says the right thing, and reach for a component only where it doesn't. Headings, paragraphs, lists, tables, code and images all render against the deck palette with no markup of their own.

Every other Neko component still works inside a slide — the slide body goes through the same pipeline as any page.

Presentation components are scoped to decks

cols, box, note, claim, lead and figure only mean what this page describes inside a presentation. Everywhere else ::: name stays Neko's generic container — the name becomes the div's class — so an existing ::: note on a documentation page is untouched.

Lead

The paragraph directly after a slide's # or ## heading is the lead: larger, dimmed, wider measure. No markup needed.

## One vector index answers one question

"Find me something like this" is never a single question.

To lead with something else — a second paragraph, a list — wrap it:

::: lead
This paragraph is a lead even though it isn't the first one.
:::

Claim

A blockquote is the deck's claim: the one sentence the slide is actually making, set in the display face against an accent rule.

> A similarity score here is not one number from one index. It is a sum of
> named signals, and every result carries the breakdown that produced it.

::: claim is the explicit form, and renders identically. A slide with accent="rose" turns its claim rule rose.

Key/value rows

The row list — a bold key on the left, prose on the right — is a Markdown definition list:

Typed nodes
:   Every node has a type and a stable key, addressed by a `UID128`.

Typed edges, both ways
:   Relationships are first-class and stored as pairs, so a traversal is cheap
    in either direction.

Rows stack on narrow screens and split into two columns from 760px up. ::: rows on a plain <div> gets the same frame if you need to build the rows by hand.

Columns

:::: cols lays its children out side by side — one column on a phone, two from 820px up.

:::: cols
::: box {title="How it is wired up"}
- Built under **Settings → NLP → Pipelines**, one per language.
- Assigned to node-field pairs on the **Used for** tab.
:::

::: box {title="Mixed languages"}
- Assign the same field to several pipelines.
- The workspace splits at sentence level and routes each sentence on its own.
:::
::::

The outer container needs more colons than the inner one — that is how Markdown container nesting works everywhere, not a Neko rule. Four outside, three inside.

{count="3"} asks for three columns; {count="1"} keeps a single column at every width.

Box

A bordered panel. tone tints the border and the title.

::: box {title="Two things to plan for" tone="warn"}
- **It is not trained on commit.** Call `TrainAsync` once there is data.
- **It is sensitive to density.** Sparse subgraphs produce poor vectors.
:::
tone Border and title
(omitted) Neutral rule, accent-coloured title
warn Amber
stop Rose
ok Green

A ### heading inside a box works too, when you want more than one titled section in the same panel.

Note

The small, rule-led aside at the foot of a slide — the caveat, the source line, the "and one more thing".

::: note
Everything left of `signals` happens at ingest time. Everything right of it
happens per request, in a scenario you write.
:::

::: note {tone="limit"}
Rules only filter — they never change a score.
:::

tone="limit" turns the note rose, for the limitation that has to land.

Tags

An inline chip, for marking a verdict or a state inside a sentence or a row.

[!tag text="flag" tone="warn"] conversation continues, verdict recorded.
[!tag text="reject" tone="stop"] the turn is refused.

tone takes warn, stop, ok, or nothing for the neutral chip.

Tables

Plain Markdown tables, styled for a deck: a display-face header row, hairline rules, dimmed body text. A cell that holds only inline code reads as a mono key column, which is what the source decks use for API names.

| Fuse | Effect |
| --- | --- |
| `Sum` | Add the signal scores. The default. |
| `Max` | Keep the strongest single signal. |

Lists

Bullets and numbers render as you'd expect. A bold lead-in inside a bullet is styled as a mini-heading, which is the pattern the source decks use for checklists:

- **Model the edges first.** Structural signals and PageSpace both read them.
- **Point NLP at the fields that carry entities** and configure linking.

Diagrams: raw HTML and SVG

A slide can carry a hand-drawn diagram with no side file.

Inline, as Markdown already allows

A block-level HTML element on its own line passes straight through:

<svg viewBox="0 0 200 60"><rect x="4" y="4" width="192" height="52" rx="4" fill="none" stroke="#5FD0D8"/></svg>

That only holds while the element has no blank line inside it — Markdown ends an HTML block at the first blank line, which most hand-written SVGs have.

Fenced, for anything longer

An ```embed fence emits its contents verbatim, blank lines and all. Use it for any diagram you'd otherwise have to squash onto one line:

::: figure {caption="The path from a committed node to a ranked list."}
```embed
<svg viewBox="0 0 880 300">
  <defs>
    <marker id="a2" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto">
      <path d="M0 0 L8 4 L0 8 z" fill="#2F5478"/>
    </marker>
  </defs>

  <rect x="108" y="118" width="96" height="64" rx="4" fill="none" stroke="#5FD0D8"/>
  <text x="156" y="142" text-anchor="middle" fill="#5FD0D8">graph</text>
</svg>
```
:::

embed-html and embed-svg are aliases — pick whichever reads better. The content is emitted as-is with no escaping, so only put markup you control in one.

Figure

::: figure frames a diagram so it scrolls instead of overflowing on a narrow screen, and adds an optional caption and accessible label.

Attribute What it does
caption Mono caption rendered under the figure.
label aria-label on the figure, describing the diagram for screen readers.

Reusing a diagram across decks

When the same diagram appears in several decks, keep it in a file and pull it in with an include — the deck file stays the source of truth for the slides, and the SVG has one home:

::: figure {caption="Shared pipeline diagram"}
<!-- Include file not found: diagrams/pipeline.svg -->
:::

Deck palette

Slides read these CSS variables, so site CSS can retune a deck without forking the stylesheet:

Variable Role
--deck-ground Page background
--deck-panel Box background
--deck-rule / --deck-rule-bright Hairlines and borders
--deck-ink / --deck-ink-dim Body text and secondary text
--deck-cyan / --deck-amber / --deck-rose / --deck-leaf Accents
--deck-accent The current slide's accent
--deck-font-display / --deck-font-body / --deck-font-mono The type trio