Layouts
Kova automatically selects the best layout for each slide based on its content. You can also override the layout manually with an HTML comment.
Automatic layout detection
Kova analyses the elements on a slide and applies the first matching rule in priority order:
| Priority | Condition | Layout applied |
|---|---|---|
| 1 | H1 heading | title |
| 2 | Any !youtube or !poll element |
media |
| 3 | A \|\|\| column break |
two-column |
| 4 | All elements are code blocks or Mermaid diagrams | code |
| 5 | No heading + single image | full-bleed |
| 6 | No heading + single blockquote | quote |
| 7 | H2 + no body content | section |
| 8 | Heading + single image only | title-image |
| 9 | Heading + one image + one text block | split |
| 10 | 2–3 logical elements, visually diverse | bsp |
| 11 | 4 or more logical elements | grid |
| 12 | Dense pure-text exceeding overflow threshold | two-column |
| 13 | Anything else | title-content |
Logical element counting
Consecutive !progress bars are treated as a single logical unit for the BSP and Grid threshold checks. A slide with a heading, a paragraph, and four progress bars is counted as 3 logical elements — not 6 — so it uses bsp rather than grid.
Overflow guard
Text-only slides that exceed the safe area line count automatically fall back to two-column to prevent text clipping (rule 12).
Layout reference
title
Triggered by: an H1 heading.
Full-colour hero slide. Paragraphs below the H1 render as subtitles. Background colour, text alignment, and decorative pattern follow the active theme.
section
Triggered by: an H2 heading with no body content.
Coloured section-break slide for dividing a presentation into chapters.
title-content
Triggered by: a heading with text, lists, tables, or other body content.
This is the default layout. The heading sits across the top; content fills the remainder of the slide.
## Key findings
- Response time improved by 40%
- Error rate dropped below 0.1%
- Customer satisfaction up 18 points
title-image
Triggered by: a heading with a single image and nothing else.
The heading anchors the left side; the image fills the right half.
split
Triggered by: a heading + one image + one text block (paragraph or list).
Image on the left, text on the right. Good for product screenshots with accompanying description.
## The editor

Write slides in plain Markdown with a live preview alongside.
full-bleed
Triggered by: a single image with no heading.
The image fills the entire slide (cover crop). Good for dramatic opening or closing slides.
quote
Triggered by: a single blockquote with no heading.
Large centred quote with optional attribution in smaller text.
two-column
Triggered by: a ||| column break, or the overflow guard on a dense pure-text slide.
Splits the slide into two equal columns. If ||| is present the split occurs there; otherwise Kova splits at the element midpoint.
## Before and after
**Legacy workflow**
1. Open PowerPoint
2. Drag text boxes around
3. Fight with alignment
|||
**With Kova**
1. Write Markdown
2. Choose a theme
3. Click Present
bsp
Triggered by: 2–3 logical elements where the mix is visually diverse.
- 2 elements: side-by-side panes.
- 3 elements: left column + stacked right column.
Text content is placed on the left; visual content (images, progress bars, Mermaid) goes on the right. Consecutive !progress bars are grouped into a single pane.
## Team health
We're making solid progress across all workstreams.
!progress[Feature delivery](88)
!progress[Code review SLA](72)
!progress[Test coverage](91)
code
Triggered by: all body elements are code blocks or Mermaid diagrams.
Dark, code-focused background with a full-width monospace display. Optimised for code reviews and technical walkthroughs.
## Parsing a slide
```rust
fn parse_slide(src: &str) -> Slide {
let tokens = tokenise(src);
layout::detect(&tokens)
}
```
media
Triggered by: a !youtube or !poll element.
Centred media display with the title above. Ideal for embedding polls or videos mid-presentation.
grid
Triggered by: 4 or more logical elements.
Elements are arranged in a responsive grid of cards. Good for feature comparisons or category overviews.
## Supported platforms
- **macOS** — Universal binary, Apple Silicon and Intel
- **Windows** — MSI and setup.exe installers
- **Debian/Ubuntu** — `.deb` package
- **Fedora/RHEL** — `.rpm` package
- **AppImage** — distro-independent
Manual override
Place <!-- layout:NAME --> at the very top of a slide to force any layout regardless of content:
<!-- layout:grid -->
## Pricing tiers
- **Free** — unlimited presentations, all themes
- **Pro** — priority support (coming soon)
- **Team** — shared theme library (coming soon)
- **Enterprise** — custom deployment (coming soon)
Available names: title · section · title-content · title-image · split · full-bleed · quote · two-column · bsp · grid · media · code