From zensical-authoring
Guide for writing documentation content with Zensical's Markdown extensions. Use when: write docs with admonitions, code blocks, content tabs, diagrams, grids, icons, emojis, math equations, data tables, footnotes, tooltips, buttons, images, lists, task lists, formatting, front matter, Mermaid diagrams.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zensical-authoring:zensical-authoringThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reference for all authoring features available in Zensical documentation sites.
Reference for all authoring features available in Zensical documentation sites. Covers admonitions, code blocks, content tabs, diagrams, grids, icons, math, tables, formatting, front matter, and more.
All examples use the recommended default Markdown extensions configuration. If extensions have been customized, some features may require explicit enabling.
Every page can include YAML front matter for metadata and behavior control:
---
title: Custom Page Title # Override nav/head title
description: Page meta description # HTML meta tag
icon: lucide/braces # Navigation icon
status: new # Page status badge (new, deprecated)
template: my_template.html # Custom template
tags:
- Setup
- Getting started
hide:
- navigation # Hide left sidebar
- toc # Hide right sidebar
- path # Hide breadcrumbs
- footer # Hide prev/next links
- tags # Hide tag chips
- feedback # Hide feedback widget
search:
exclude: true # Exclude from search
comments: true # Enable comments (if configured)
---
Custom page status identifiers (in zensical.toml):
[project.extra.status]
new = "Recently added"
deprecated = "Deprecated"
Required extensions: admonition, pymdownx.details, pymdownx.superfences
!!! note
Content indented by 4 spaces.
!!! note "My Custom Title"
Content here.
!!! note ""
No title or icon shown.
??? note
Click to expand.
???+ note
Initially expanded, can be collapsed.
!!! note "Outer"
Outer content.
!!! warning "Inner"
Inner content (indented further).
!!! info inline end "Right sidebar"
Placed to the right of following content.
!!! info inline "Left sidebar"
Placed to the left of following content.
Important: Inline admonitions must appear before the content they sit beside.
note, abstract, info, tip, success, question, warning,
failure, danger, bug, example, quote
Custom icons per type:
[project.theme.icon.admonition]
note = "octicons/tag-16"
tip = "octicons/squirrel-16"
Required extensions: pymdownx.highlight, pymdownx.inlinehilite,
pymdownx.snippets, pymdownx.superfences
``` python
def hello():
print("Hello, world!")
```
``` python title="hello.py"
def hello():
print("Hello, world!")
```
``` python linenums="1"
def hello():
print("Hello, world!")
```
``` python hl_lines="2 3"
def bubble_sort(items):
for i in range(len(items)):
for j in range(len(items) - 1 - i):
if items[j] > items[j + 1]:
items[j], items[j + 1] = items[j + 1], items[j]
```
Line ranges: hl_lines="3-5"
Add numbered markers in comments that expand to rich content:
``` toml
[project.theme]
features = ["content.code.annotate"] # (1)!
```
1. I'm a code annotation! Supports **Markdown**, `code`, images, etc.
The ! after (1) strips the comment characters. Enable globally:
[project.theme]
features = ["content.code.annotate"]
Or per-block with { .yaml .annotate } syntax.
[project.theme]
features = [
"content.code.copy", # Copy button on code blocks
"content.code.select" # Line selection button
]
Per-block: { .yaml .copy }, { .yaml .no-copy }, { .yaml .select }, { .yaml .no-select }
The `#!python range()` function generates a sequence of numbers.
``` title=".browserslistrc"
;--8<-- ".browserslistrc"
```
Override via CSS variables:
:root > * {
--md-code-hl-string-color: #0FF1CE;
--md-code-fg-color: ...;
--md-code-bg-color: ...;
--md-code-hl-color: ...;
}
Required extensions: pymdownx.superfences, pymdownx.tabbed (with alternate_style = true)
=== "Tab 1"
Content for tab 1.
=== "Tab 2"
Content for tab 2.
=== "Python"
``` python
print("Hello")
```
=== "JavaScript"
``` javascript
console.log("Hello");
```
[project.theme]
features = ["content.tabs.link"]
!!! example
=== "Tab A"
Content A.
=== "Tab B"
Content B.
[project.markdown_extensions.pymdownx.tabbed.slugify]
object = "pymdownx.slugs.slugify"
kwds = { case = "lower" }
Required: pymdownx.superfences with custom fence:
[project.markdown_extensions.pymdownx.superfences]
custom_fences = [
{ name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" }
]
``` mermaid
graph LR
A[Start] --> B{Error?};
B -->|Yes| C[Hmm...];
C --> D[Debug];
D --> B;
B ---->|No| E[Yay!];
```
``` mermaid
sequenceDiagram
autonumber
Alice->>John: Hello John, how are you?
loop Healthcheck
John->>John: Fight against hypochondria
end
John-->>Alice: Great!
```
``` mermaid
stateDiagram-v2
[*] --> Active
Active --> Inactive
Inactive --> Active
Inactive --> [*]
```
``` mermaid
classDiagram
Animal <|-- Duck
Animal : +String name
Duck: +swim()
```
``` mermaid
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
```
Diagrams auto-adapt to light/dark themes and use configured fonts.
Required extension: tables
| Method | Description |
| -------- | ------------------------ |
| `GET` | :lucide-check: Fetch |
| `PUT` | :lucide-check: Update |
| `DELETE` | :lucide-x: Delete |
Alignment: :--- (left), :---: (center), ---: (right)
Add tablesort JS:
// docs/javascripts/tablesort.js
document$.subscribe(function() {
var tables = document.querySelectorAll("article table:not([class])")
tables.forEach(function(table) {
new Tablesort(table)
})
})
[project]
extra_javascript = [
"https://unpkg.com/[email protected]/dist/tablesort.min.js",
"javascripts/tablesort.js"
]
Required extensions: attr_list, md_in_html
<div class="grid cards" markdown>
- :fontawesome-brands-html5: __HTML__ for content and structure
- :fontawesome-brands-js: __JavaScript__ for interactivity
- :fontawesome-brands-css3: __CSS__ for styling
</div>
<div class="grid cards" markdown>
- :material-clock-fast:{ .lg .middle } __Set up in 5 minutes__
---
Install Zensical and get up and running in minutes.
[:octicons-arrow-right-24: Getting started](#)
- :fontawesome-brands-markdown:{ .lg .middle } __It's just Markdown__
---
Focus on your content and generate a responsive site.
[:octicons-arrow-right-24: Reference](#)
</div>
<div class="grid" markdown>
:fontawesome-brands-html5: __HTML__
{ .card }
:fontawesome-brands-js: __JavaScript__
{ .card }
> A regular blockquote (not a card)
</div>
<div class="grid" markdown>
=== "Tab A"
* Item 1
* Item 2
``` python
print("Hello")
```
</div>
Required extensions: attr_list, pymdownx.emoji
:smile: :heart: :thumbsup:
Icon syntax: :icon-set-icon-name: (replace / with - from path)
:fontawesome-regular-face-laugh-wink:
:lucide-check:
:material-material-design:
:octicons-mark-github-16:
:simple-simpleicons:
:fontawesome-brands-youtube:{ .youtube }
/* docs/stylesheets/extra.css */
.youtube { color: #EE0F0F; }
:octicons-heart-fill-24:{ .heart }
@keyframes heart {
0%, 40%, 80%, 100% { transform: scale(1); }
20%, 60% { transform: scale(1.15); }
}
.heart { animation: heart 1000ms infinite; }
Lucide, Material Design, FontAwesome, Octicons, Simple Icons (10,000+)
Required extension: attr_list
[Subscribe](#){ .md-button }
[Subscribe](#){ .md-button .md-button--primary }
[Send :fontawesome-solid-paper-plane:](#){ .md-button }
Required extensions: attr_list, md_in_html, pymdownx.blocks.caption
{ align=left }
{ align=right }
<figure markdown="span">
{ width="300" }
<figcaption>Caption text</figcaption>
</figure>
{ width="300" }
/// caption
Caption text
///
{ loading=lazy }


Required extension: def_list
`Term`
: Definition paragraph. Can contain multiple paragraphs
indented by 4 spaces.
Required extension: pymdownx.tasklist (with custom_checkbox = true)
- [x] Completed task
- [ ] Incomplete task
* [x] Nested completed
* [ ] Nested incomplete
Required extensions: pymdownx.caret, pymdownx.keys, pymdownx.mark, pymdownx.tilde
==Highlighted text==
^^Underlined text^^
~~Strikethrough text~~
H~2~O (subscript)
A^T^A (superscript)
++ctrl+alt+del++ (keyboard keys)
Required extension: footnotes
Text with footnote reference.[^1]
[^1]: Footnote content. Can span multiple indented paragraphs.
Enable tooltips:
[project.theme]
features = ["content.footnote.tooltips"]
Required extensions: abbr, attr_list, pymdownx.snippets
[Hover me](https://example.com "I'm a tooltip!")
The HTML specification is maintained by the W3C.
*[HTML]: Hyper Text Markup Language
*[W3C]: World Wide Web Consortium
Create includes/abbreviations.md with all abbreviations, then:
[project.markdown_extensions.pymdownx.snippets]
auto_append = ["includes/abbreviations.md"]
Enable improved tooltips:
[project.theme]
features = ["content.tooltips"]
Required extension: pymdownx.arithmatex (with generic = true)
[project]
extra_javascript = [
"javascripts/mathjax.js",
"https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js"
]
[project.markdown_extensions.pymdownx.arithmatex]
generic = true
// docs/javascripts/mathjax.js
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex"
}
};
document$.subscribe(() => {
MathJax.startup.output.clearCache()
MathJax.typesetClear()
MathJax.texReset()
MathJax.typesetPromise()
})
[project]
extra_javascript = [
"javascripts/katex.js",
"https://unpkg.com/katex@0/dist/katex.min.js",
"https://unpkg.com/katex@0/dist/contrib/auto-render.min.js"
]
extra_css = ["https://unpkg.com/katex@0/dist/katex.min.css"]
[project.markdown_extensions.pymdownx.arithmatex]
generic = true
Block math:
$$
\cos x = \sum_{k=0}^{\infty}\frac{(-1)^k}{(2k)!}x^{2k}
$$
Inline math:
The function $f(x) = x^2$ is quadratic.
---
search:
exclude: true
---
## Secret Section { data-search-exclude }
This content won't appear in search.
This paragraph is excluded from search.
{ data-search-exclude }
[project.theme]
features = [
"content.code.annotate", # Code annotations
"content.code.copy", # Copy button
"content.code.select", # Line selection
"content.tabs.link", # Linked content tabs
"content.tooltips", # Improved tooltips
"content.footnote.tooltips", # Footnote tooltips
]
For a fully-featured documentation site:
[project]
site_name = "My Project"
site_url = "https://example.com"
repo_url = "https://github.com/org/repo"
[project.theme]
features = [
"navigation.instant",
"navigation.tabs",
"navigation.sections",
"navigation.path",
"navigation.top",
"navigation.footer",
"navigation.indexes",
"toc.follow",
"search.highlight",
"content.code.annotate",
"content.code.copy",
"content.tabs.link",
"content.tooltips",
"content.footnote.tooltips",
"content.action.edit",
"content.action.view",
"header.autohide",
]
[[project.theme.palette]]
scheme = "default"
toggle.icon = "lucide/sun"
toggle.name = "Switch to dark mode"
[[project.theme.palette]]
scheme = "slate"
toggle.icon = "lucide/moon"
toggle.name = "Switch to light mode"
2plugins reuse this skill
First indexed Jun 18, 2026
npx claudepluginhub ai-riksarkivet/ra-skills --plugin zensical-authoringBlocks Edit/Write/Bash actions until Claude investigates importers, data schemas, and user instructions. Improves output quality by forcing concrete facts before edits.