# Headings, Rules and Blockquotes

This page covers headings, horizontal rules, blockquotes and GitHub-style alert boxes.

## Headings

| Source | Output |
|---|---|
| `# Text` to `###### Text` | `<h1>` to `<h6>` |
| `Text` with `===` (3 or more) on the next line | `<h1>` |
| `Text` with `---` (3 or more) on the next line | `<h2>` |
| Inside a table cell `\| ## Text \|` | `<h2>` inside the cell |

| Rule | Detail |
|---|---|
| Space after `#` required | `#tag` is not a heading and may become a [Hashtag Link](/hashtag-links) |
| Allowed lead-ins | A `#` after leading spaces, `> `, or a list marker (`- `, `1. `) also becomes a heading |
| Escape | `\# Text` is not converted |
| No ids | Headings get no `id` attribute, so they cannot be linked by anchor |

## Horizontal Rules

A line containing only `---` or `***` (3 or more, surrounding spaces allowed) outputs `<hr>`.

| Source | Result |
|---|---|
| `---`, `*****` | `<hr>` |
| `* * *`, `- - -` | Not supported; read as a list |
| `___` | Not supported |
| `---` under a line of text | setext `<h2>`, not a rule |

## Blockquotes

```markdown
> Level one
>> Level two
> - A list inside the quote
```

| Rule | Detail |
|---|---|
| Start | Every line begins with `>`; consecutive lines merge into one `<blockquote>` |
| Nesting | `>>` creates an inner `<blockquote>`; later `>` lines in the same block stay in the inner level instead of returning to the outer one |
| Content | Each line is wrapped in a `<span>`; lines go through list conversion first, so lists work |

## Alerts

Extended mode supports GitHub-style alerts; the marker must be the first line of the quote:

```markdown
> [!WARNING]
> This action cannot be undone
```

| Marker | Icon (Material Symbols) |
|---|---|
| `[!NOTE]` | `info` |
| `[!TIP]` | `lightbulb` |
| `[!IMPORTANT]` | `sms` |
| `[!WARNING]` | `warning` |
| `[!CAUTION]` | `error` |

The output is `<blockquote class="WARNING">` with the first line replaced by a `<span class="hint">` holding the icon and type name. Markers must be uppercase; standard mode outputs the literal `[!WARNING]` text.
