markawesome-skill 0.1.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ All notable changes to `markawesome-skill` are documented here. The format is
4
+ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
5
+ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.1.0] - 2026-07-05
10
+
11
+ ### Added
12
+
13
+ - Initial release of the `markawesome` Agent Skill.
14
+ - `SKILL.md` routing body: what Markawesome is, the proactive behavioral
15
+ contract, a one-line "use when" roster for every component, the
16
+ progressive-disclosure index, and a companion-skills pointer to Web Awesome's
17
+ own `webawesome` / `webawesome-design` skills.
18
+ - Reference files under `skills/markawesome/references/`:
19
+ - `when-to-use.md` — content-pattern → component decision guide plus
20
+ anti-patterns.
21
+ - `components-content.md` — callout, card, tag, badge, button, copy button,
22
+ icon.
23
+ - `components-interactive.md` — details, accordion, tabs, dialog, popover,
24
+ tooltip, random content, tree.
25
+ - `components-media.md` — carousel, comparison, video, video playlist, format
26
+ date, relative time.
27
+ - `layouts.md` — grid, stack, cluster, split, flank, frame, the shared gap
28
+ scale, and nesting rules.
29
+ - `authoring.md` — dual syntax, Markdown-in-blocks, image/link auto-detection,
30
+ the `>>>` separator, the Web Awesome 3.10.0 pin, and static-safety / Pro
31
+ caveats.
32
+ - `examples.md` — generic full-page worked examples (landing page, docs
33
+ getting-started, changelog + FAQ).
34
+ - Distribution as an npm package (`files: ["skills", …]`) installable through the
35
+ `npx skills` CLI from GitHub or npm.
package/LICENSE.txt ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Janne Warén
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # markawesome-skill
2
+
3
+ An [Agent Skill](https://docs.claude.com/en/docs/agents-and-tools/agent-skills)
4
+ that teaches an AI assistant to **author and review
5
+ [Markawesome](https://github.com/jannewaren/markawesome)-flavoured Markdown** —
6
+ the terse syntax (`:::`, `===`, `@@@`, `!!!`, `%%%`, `^^^`, `++++++`, `&&&`, …)
7
+ that the **markawesome** (Ruby) and **markawesome-js** (Node) engines transform
8
+ into [Web Awesome](https://webawesome.com/) web components.
9
+
10
+ It does two things:
11
+
12
+ 1. **Recognizes opportunities proactively** — while you write or review Markdown,
13
+ it spots prose that would read better as a component and suggests it unprompted
14
+ ("this warning should be a `:::danger` callout"; "these three features want a
15
+ `::::grid` of `===` cards").
16
+ 2. **Writes the exact syntax** — every component's delimiter, attributes, and when
17
+ to reach for it, verified against both engines so it never emits syntax only
18
+ one accepts.
19
+
20
+ The skill is **pure Markdown knowledge** — no build step, and installing it needs
21
+ no clone of the Ruby or JS engine.
22
+
23
+ ## Install
24
+
25
+ The skill installs with [`npx skills`](https://github.com/vercel-labs/skills) —
26
+ the same CLI Web Awesome ships their skill with.
27
+
28
+ ### Recommended — one line, from GitHub
29
+
30
+ ```bash
31
+ npx skills add jannewaren/markawesome-skill
32
+ ```
33
+
34
+ No `npm install`, no engine clone. This symlinks the skill into each detected
35
+ agent's directory (`.claude/skills/markawesome`, `.agents/skills/markawesome`, …).
36
+
37
+ ### From npm
38
+
39
+ ```bash
40
+ npm install markawesome-skill
41
+ npx skills experimental_sync # auto-discovers skills/markawesome/
42
+ # …or point at it explicitly:
43
+ npx skills add ./node_modules/markawesome-skill/skills/markawesome
44
+ ```
45
+
46
+ > **Reality check:** `npx skills` has **no npm-registry resolver**. A bare package
47
+ > name — `npx skills add markawesome-skill` — does **not** work: the CLI falls
48
+ > through to `git clone` and fails. The true one-liner is the **GitHub** form
49
+ > above; npm distribution is `install` + `experimental_sync` (or a path `add`).
50
+
51
+ ## Companion skills
52
+
53
+ This is the **authoring layer** — which Markawesome Markdown to write, and when.
54
+ For the underlying `<wa-*>` component APIs and for page layout / theming / brand
55
+ color, also install Web Awesome's own skills:
56
+
57
+ - **`webawesome`** — the individual `<wa-*>` component APIs.
58
+ - **`webawesome-design`** — page layout, theming, and design tokens.
59
+
60
+ This skill deliberately does not duplicate their content.
61
+
62
+ ## What's inside
63
+
64
+ ```
65
+ skills/markawesome/
66
+ ├── SKILL.md # routing body + the proactive "brain"
67
+ └── references/
68
+ ├── when-to-use.md # content-pattern → component decision guide
69
+ ├── components-content.md # callout, card, tag, badge, button, copy button, icon
70
+ ├── components-interactive.md # details, accordion, tabs, dialog, popover, tooltip, random content, tree
71
+ ├── components-media.md # carousel, comparison, video, playlist, format date, relative time
72
+ ├── layouts.md # grid, stack, cluster, split, flank, frame
73
+ ├── authoring.md # dual syntax, caveats, the WA 3.10.0 pin
74
+ └── examples.md # generic full-page worked examples
75
+ ```
76
+
77
+ ## The Markawesome ecosystem
78
+
79
+ This skill is the **teaching layer** for a family of repositories that keep the
80
+ same Markdown dialect in lockstep:
81
+
82
+ | Repo | Role |
83
+ |------|------|
84
+ | [`markawesome`](https://github.com/jannewaren/markawesome) | Authors the syntax (Ruby engine) |
85
+ | [`markawesome-js`](https://github.com/jannewaren/markawesome-js) | Authors the syntax (Node engine) |
86
+ | [`jekyll-webawesome`](https://github.com/jannewaren/jekyll-webawesome) | Uses it (Jekyll integration) |
87
+ | [`eleventy-plugin-webawesome`](https://github.com/jannewaren/eleventy-plugin-webawesome) | Uses it (Eleventy integration) |
88
+ | [`markawesome-vscode`](https://github.com/jannewaren/markawesome-vscode) | Produces it (editor tooling) |
89
+ | **`markawesome-skill`** | **Teaches it (AI authoring skill)** |
90
+
91
+ Because the two engines accept byte-for-byte identical input, everything the skill
92
+ documents works in both the Ruby and Node worlds. See the
93
+ [live examples site](https://jannewaren.github.io/jekyll-webawesome/) to watch the
94
+ Markdown render into components side by side.
95
+
96
+ ## License
97
+
98
+ [MIT](LICENSE.txt) © Janne Warén
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "markawesome-skill",
3
+ "version": "0.1.0",
4
+ "description": "AI authoring skill for Markawesome Markdown — proactively suggests and writes the terse syntax that markawesome / markawesome-js transform into Web Awesome components.",
5
+ "keywords": [
6
+ "markawesome",
7
+ "web-awesome",
8
+ "webawesome",
9
+ "markdown",
10
+ "web-components",
11
+ "agent-skills",
12
+ "skills"
13
+ ],
14
+ "author": {
15
+ "name": "Janne Warén",
16
+ "email": "janne.waren@iki.fi"
17
+ },
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/jannewaren/markawesome-skill.git"
22
+ },
23
+ "homepage": "https://github.com/jannewaren/markawesome-skill",
24
+ "bugs": {
25
+ "url": "https://github.com/jannewaren/markawesome-skill/issues"
26
+ },
27
+ "files": [
28
+ "skills",
29
+ "README.md",
30
+ "CHANGELOG.md",
31
+ "LICENSE.txt"
32
+ ],
33
+ "publishConfig": {
34
+ "access": "public"
35
+ }
36
+ }
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: markawesome
3
+ description: >-
4
+ Authors and reviews Markawesome-flavoured Markdown — a terse syntax
5
+ (:::, ===, @@@, !!!, %%%, ^^^, ++++++, &&&, and more) that the markawesome
6
+ and markawesome-js engines transform into Web Awesome web components
7
+ (callouts, cards, tabs, accordions, tags, badges, buttons, tooltips,
8
+ carousels, and grid/stack/cluster/split/flank/frame layouts). Use when
9
+ writing, editing, or reviewing Markdown for a site built with markawesome,
10
+ markawesome-js, jekyll-webawesome, or eleventy-plugin-webawesome — and
11
+ proactively whenever plain prose would read better as a component (a warning
12
+ as a callout, a feature list as a card grid, alternatives as tabs, a glossary
13
+ term as a tooltip). Covers which component to reach for, when, and its exact
14
+ syntax.
15
+ license: MIT
16
+ metadata:
17
+ author: Janne Warén
18
+ version: "0.1.0"
19
+ homepage: https://github.com/jannewaren/markawesome-skill
20
+ ---
21
+
22
+ # Markawesome authoring
23
+
24
+ Markawesome is a terse Markdown dialect that the **markawesome** (Ruby) and
25
+ **markawesome-js** (Node) engines transform into [Web Awesome](https://webawesome.com/)
26
+ web components. It powers the **jekyll-webawesome** and **eleventy-plugin-webawesome**
27
+ static-site integrations. Both engines accept **byte-for-byte identical** input,
28
+ so everything documented here works in either world.
29
+
30
+ ## Behavioral contract (be proactive)
31
+
32
+ When writing, editing, or reviewing Markdown for one of these projects:
33
+
34
+ 1. **Scan prose for component opportunities and act on them.** Don't wait to be
35
+ asked. A paragraph that warns wants a `:::warning` callout; a bulleted feature
36
+ list wants a `::::grid` of `===` cards; "on macOS… on Windows…" wants
37
+ `++++++` tabs; a copy-me command wants a `<<<` copy button; a defined term
38
+ wants a `(((term >>> definition)))` tooltip. Suggest the change and write it.
39
+ 2. **Prefer terse Markawesome syntax over raw `<wa-*>` HTML.** If you would reach
40
+ for a Web Awesome web component, write the Markawesome delimiter instead. Drop
41
+ to raw HTML only for something Markawesome has no syntax for.
42
+ 3. **Default to the primary shorthand delimiters** (`:::`, `===`, `@@@`, …). The
43
+ `:::wa-*` / `::::wa-*` alternative forms exist for readability or disambiguation;
44
+ reach for them only when the shorthand is ambiguous in context.
45
+ 4. **Keep the Markdown valid.** Never break a table, list, or fenced code block.
46
+ Component syntax inside a fenced ``` block is **not** transformed (it is
47
+ protected), so use fences to show Markawesome examples literally.
48
+ 5. **Never invent attributes.** Every delimiter, variant, size, and flag is
49
+ enumerated in the reference files. If it isn't listed there, an engine will
50
+ reject or ignore it — verify before you emit it.
51
+
52
+ ## Component roster — recognize the opportunity
53
+
54
+ Each row is enough to *spot* a candidate without loading a reference. Load the
55
+ referenced file for exact attributes before writing anything non-trivial.
56
+
57
+ | Delimiter | Component | Reach for it when… | Reference |
58
+ |-----------|-----------|--------------------|-----------|
59
+ | `:::info` `:::success` `:::warning` `:::danger` `:::neutral` `:::brand` | Callout | highlighting a note, tip, prerequisite, warning, or error | components-content |
60
+ | `===` | Card | a self-contained unit (feature, product, link preview), esp. inside a grid | components-content |
61
+ | `@@@` | Tag | a status/category label — New, Beta, Deprecated, a topic (inline or block) | components-content |
62
+ | `!!!` | Badge | a compact count/status chip, often with `pulse`/`bounce` attention | components-content |
63
+ | `%%%` | Button | a call-to-action or link that should look like a button | components-content |
64
+ | `<<<` | Copy button | a command, URL, or config value users will copy-paste | components-content |
65
+ | `$$$name` / `:::wa-icon` | Icon | an inline decorative icon, or a labeled block icon | components-content |
66
+ | `^^^` | Details | one collapsible block of optional/advanced info | components-interactive |
67
+ | `//////` | Accordion | a *group* of collapsible sections — FAQ, doc sections | components-interactive |
68
+ | `++++++` | Tabs | switchable alternatives — multi-language code, per-OS steps, A/B | components-interactive |
69
+ | `???` | Dialog | long supplementary content hidden behind a trigger button | components-interactive |
70
+ | `&&&` | Popover | hover/click floating content (rich markdown block, or inline) | components-interactive |
71
+ | `(((` | Tooltip | an inline glossary term / short definition on hover | components-interactive |
72
+ | `......` | Random content | rotating tips/testimonials/featured content (zero-JS) | components-interactive |
73
+ | `\|\|\|\|\|\|` | Tree | a file/dir hierarchy or nested navigation from a bullet list | components-interactive |
74
+ | `~~~~~~` | Carousel | an image gallery or step-by-step visual slides | components-media |
75
+ | `\|\|\|` | Comparison | a before/after two-image slider | components-media |
76
+ | `;;;` / `;;;;;;` | Video / Playlist | embedded video(s) — Web Awesome **Pro** | components-media |
77
+ | `[[[…]]]` | Format date / Relative time | a localized absolute or "3 days ago" date | components-media |
78
+ | `::::grid` `::::stack` `::::cluster` `::::split` `::::flank` `::::frame` | Layouts | arranging the above (card grids, sidebars, tag clusters) | layouts |
79
+
80
+ ## Where to read what
81
+
82
+ Load only what the task needs — the references are one level deep, each
83
+ self-contained:
84
+
85
+ - **`references/when-to-use.md`** — the decision guide: content shape → component,
86
+ why, a generic snippet, and the anti-patterns. Read this first when deciding
87
+ *whether* and *which*.
88
+ - **`references/components-content.md`** — callout, card, tag, badge, button,
89
+ copy button, icon.
90
+ - **`references/components-interactive.md`** — details, accordion, tabs, dialog,
91
+ popover, tooltip, random content, tree.
92
+ - **`references/components-media.md`** — carousel, comparison, video, video
93
+ playlist, format date, relative time.
94
+ - **`references/layouts.md`** — the six `::::` layouts, the shared gap scale,
95
+ `align`/`justify`, and nesting.
96
+ - **`references/authoring.md`** — dual syntax, Markdown-inside-blocks, image/link
97
+ auto-detection, the `>>>` separator, front matter, the Web Awesome 3.10.0 pin,
98
+ and static-safety / Pro caveats.
99
+ - **`references/examples.md`** — full generic pages combining many components.
100
+
101
+ ## Companion skills
102
+
103
+ This is the **authoring layer** — which Markawesome Markdown to write, and when.
104
+ It does not document the underlying `<wa-*>` component APIs or page-level design.
105
+ For those, also install Web Awesome's own skills:
106
+
107
+ - **`webawesome`** — the individual `<wa-*>` component APIs (props, slots, events).
108
+ - **`webawesome-design`** — page layout, theming, design tokens, and brand color.
109
+
110
+ Reach for them when the work goes beyond emitting Markawesome Markdown (custom
111
+ component behavior, `<wa-page>` scaffolding, a theme). This skill deliberately
112
+ does not duplicate their content.
@@ -0,0 +1,116 @@
1
+ # Authoring conventions & caveats
2
+
3
+ Cross-cutting rules that apply to every component. Read this once; it explains the
4
+ mechanics the per-component references assume.
5
+
6
+ ## Dual syntax: primary shorthand vs. `:::wa-*` alternative
7
+
8
+ Every component accepts two equivalent spellings:
9
+
10
+ - **Primary** — the terse delimiter: `:::info`, `===`, `@@@brand`, `%%%`, `^^^`,
11
+ `//////`, `++++++`, `&&&`, `(((…)))`, `[[[…]]]`, `::::grid`.
12
+ - **Alternative** — an explicit `:::wa-component` (or `::::wa-layout`) form:
13
+ `:::wa-callout info`, `:::wa-card`, `:::wa-tag brand`, `::::wa-grid`.
14
+
15
+ **Default to the primary shorthand.** Reach for the `:::wa-*` form only when the
16
+ shorthand would be ambiguous or hard to read in context — for instance when a line
17
+ could be mistaken for something else, or when a reviewer benefits from the
18
+ component name spelled out. Both produce identical HTML; the choice is purely
19
+ readability.
20
+
21
+ ## Markdown renders inside component bodies
22
+
23
+ The body of a component (a callout, a card, a tab panel, an accordion item, a
24
+ dialog, a details block) is **full Markdown** — headings, lists, links, emphasis,
25
+ inline code, even other components all work inside. Only the *inner* content of
26
+ components is rendered; the surrounding page Markdown is left for your site's own
27
+ Markdown processor.
28
+
29
+ Exceptions where the body is **plain text, not Markdown**:
30
+
31
+ - **Tooltip** tip content is plain text (HTML-escaped); `\n` becomes `<br>`.
32
+ - **Tree** labels are plain text (a leading `icon:name` token aside).
33
+
34
+ ## The `>>>` separator
35
+
36
+ `>>>` on its own splits a **trigger from its body** inside these blocks:
37
+
38
+ - **Details** (`^^^`) — summary `>>>` content.
39
+ - **Dialog** (`???`) — trigger-button text `>>>` dialog content.
40
+ - **Popover** (`&&&`) — trigger `>>>` content (inline form too:
41
+ `&&&trigger >>> content&&&`).
42
+ - **Tooltip** (`(((…)))`) — anchor `>>>` tip.
43
+ - **Random content** (`......`) — separates each option from the next.
44
+
45
+ It only has meaning **inside** one of those blocks. Elsewhere `>` is an ordinary
46
+ Markdown blockquote.
47
+
48
+ ## Image & link auto-detection in cards
49
+
50
+ A card (`===`) reads its body positionally — you don't name slots:
51
+
52
+ - First **Markdown image** → the media slot.
53
+ - First **bold line** (`**Title**`, *not* a `#` heading) → the header slot.
54
+ - A **trailing Markdown link** on its own line → a footer button.
55
+ - Everything else → the body.
56
+
57
+ Buttons (`%%%`) and videos (`;;;`) similarly pick up a Markdown link in their body
58
+ to become clickable / sourced. See the per-component references for specifics.
59
+
60
+ ## Code fences are protected
61
+
62
+ Anything inside a fenced ``` code block is **not** transformed — the engines
63
+ replace fenced blocks with placeholders before running, then restore them. So to
64
+ show Markawesome syntax literally in documentation, put it in a fenced block (as
65
+ this skill's references do). Inline code (`` `like this` ``) is likewise safe.
66
+
67
+ ## Front matter is SSG-specific
68
+
69
+ Markawesome transforms the Markdown **body**, not the YAML front matter. How front
70
+ matter works — permalinks, layouts, collections, data — is defined by your static
71
+ site generator, not by Markawesome:
72
+
73
+ - **Jekyll** (via `jekyll-webawesome`) — Jekyll/Liquid front matter and layouts.
74
+ - **Eleventy** (via `eleventy-plugin-webawesome`) — Eleventy front matter and
75
+ templating.
76
+
77
+ Author the component syntax in the body; leave front-matter conventions to the
78
+ host SSG's own docs.
79
+
80
+ ## Web Awesome version pin: 3.10.0
81
+
82
+ The ecosystem's examples sites pin **Web Awesome 3.10.0** in their CDN URLs, and
83
+ this skill's attribute vocabulary (icon families, animations, the `xs–xl` size
84
+ scale, canvas sizing) matches that release. If a project pins a different Web
85
+ Awesome version, some newer families/animations may not exist there — validate
86
+ against the version the site actually loads.
87
+
88
+ ## Static-safety & Pro caveats
89
+
90
+ Most components are **declarative and static-site-safe** — they render correctly
91
+ with only the Web Awesome library on the page and no JavaScript of your own.
92
+ Know the exceptions:
93
+
94
+ - **Web Awesome Pro required:** Video (`;;;`) and Video playlist (`;;;;;;`) emit
95
+ `<wa-video>` / `<wa-video-playlist>`, which are Pro (and experimental). They do
96
+ nothing on a free kit.
97
+ - **No light-DOM fallback (needs Web Awesome's JS to show anything):** Icon
98
+ (`$$$` / `:::wa-icon`), Format date (`[[[…]]]`), and Relative time
99
+ (`[[[relative …]]]`) render generated content into shadow DOM. With Web
100
+ Awesome's JavaScript disabled they show nothing.
101
+ - **Fires an event but doesn't act on its own:** a Tag's `with-remove` × button
102
+ fires `wa-remove` but doesn't remove the tag without your listener.
103
+ - **Declarative-safe but note the runtime quirk:** Tree (`||||||`) expands only
104
+ top-level branches on load (WA 3.9.0); Random content (`......`) and Accordion
105
+ (`//////`) are experimental in Web Awesome but fully declarative here.
106
+
107
+ When a page must work with scripting disabled, prefer the declarative-safe
108
+ components and avoid the shadow-DOM-only ones for essential content.
109
+
110
+ ## The lockstep guarantee
111
+
112
+ The **markawesome** (Ruby) and **markawesome-js** (Node) engines accept
113
+ byte-for-byte identical input. Everything in these references works in both, so a
114
+ document authored for a Jekyll site transforms identically on an Eleventy site.
115
+ Never emit a delimiter or attribute that only one engine supports — if it isn't in
116
+ these references, don't use it.
@@ -0,0 +1,258 @@
1
+ # Content components
2
+
3
+ Callout · Card · Tag · Badge · Button · Copy button · Icon
4
+
5
+ Every component has a **primary** shorthand delimiter and an equivalent
6
+ **`:::wa-*` alternative**. All attributes are optional and order-independent
7
+ (rightmost wins on conflict). Inner content is full Markdown. Unknown tokens are
8
+ silently dropped, so a mistyped variant simply vanishes — spell them exactly.
9
+
10
+ ## Callout
11
+
12
+ Draw attention to elevated information with a colored, icon-led block.
13
+
14
+ - **Primary:** `:::type size? appearance? family? variant? animation? icon:name?`
15
+ - **Alt:** `:::wa-callout type size? appearance? family? variant? animation? icon:name?`
16
+ - Close with `:::`.
17
+
18
+ **Types** (the first token; sets color + default icon):
19
+
20
+ | Type | Color | Default icon | Use for |
21
+ |------|-------|--------------|---------|
22
+ | `info` / `brand` | blue | `circle-info` | notes, tips (`info` is an alias for `brand`) |
23
+ | `success` | green | `circle-check` | confirmations, "done" states |
24
+ | `warning` | yellow | `triangle-exclamation` | things that need care |
25
+ | `danger` | red | `circle-exclamation` | data loss, errors, destructive actions |
26
+ | `neutral` | gray | `gear` | low-key asides |
27
+
28
+ **Sizes:** `xs`, `s`, `m`, `l`, `xl` (Web Awesome 3.x five-step scale) plus the
29
+ legacy `small` / `medium` / `large` aliases.
30
+
31
+ **Appearances:** `accent`, `filled`, `outlined`, `plain`, `filled-outlined`.
32
+
33
+ **Icon overrides** (the callout's leading icon):
34
+
35
+ - `icon:name` — swap the icon glyph (e.g. `icon:rocket`, `icon:shield`).
36
+ - `family` — icon family: `classic`, `sharp`, `duotone`, `sharp-duotone`,
37
+ `brands`, plus the WA 3.10.0 families `mosaic`, `pixel`, `vellum`, `slab-duo`,
38
+ `slab-press-duo`, `chisel`, `etch`, `graphite`, `jelly`, `jelly-duo`,
39
+ `jelly-fill`, `notdog`, `notdog-duo`, `slab`, `slab-press`, `thumbprint`,
40
+ `utility`, `utility-duo`, `utility-fill`, `whiteboard`.
41
+ - `variant` — Font Awesome weight: `thin`, `light`, `regular`, `solid`,
42
+ `semibold`.
43
+ - `animation` — `beat`, `fade`, `beat-fade`, `bounce`, `flip`, `shake`, `spin`,
44
+ `spin-pulse`, `spin-reverse`, plus WA 3.10.0's `flip-360`, `spin-snap`,
45
+ `spin-snap-4`, `spin-snap-8`, `buzz`, `float`, `jello`, `swing`, `wag`.
46
+ Animation needs no Pro kit — e.g. `:::warning shake`.
47
+ - `canvas` — icon sizing box: `fixed` (default), `auto`, `square`, `roomy`.
48
+
49
+ ```
50
+ :::success l icon:trophy
51
+ **Deploy succeeded.** Your site is live at the production URL.
52
+ :::
53
+ ```
54
+
55
+ ```
56
+ :::warning shake
57
+ This warning's icon animates. Family/variant glyph changes depend on your
58
+ Font Awesome kit tier; animation and canvas work with any kit.
59
+ :::
60
+ ```
61
+
62
+ ## Card
63
+
64
+ A flexible container with optional media, header, body, and footer slots — the
65
+ building block of a `::::grid`.
66
+
67
+ - **Primary:** `===appearance? orientation?`
68
+ - **Alt:** `:::wa-card appearance? orientation?`
69
+ - Close with `===`.
70
+
71
+ **Appearances:** `outlined` (default), `filled`, `filled-outlined`, `plain`,
72
+ `accent`. **Orientation:** `vertical` (default), `horizontal` (media and content
73
+ side by side).
74
+
75
+ **Composition is auto-detected from the body** (this is the part people get
76
+ wrong):
77
+
78
+ - The **first Markdown image** `![alt](src)` becomes the **media** slot.
79
+ - The **first bold line** `**Title**` becomes the **header** slot. (It must be a
80
+ bold line on its own — *not* a `#` heading.)
81
+ - A **trailing Markdown link** on its own line becomes a **footer** button.
82
+ - Everything else is the body.
83
+
84
+ ```
85
+ ===
86
+ ![Chart](/img/analytics.png)
87
+ **Analytics**
88
+ Track visits, referrers, and conversions in real time.
89
+ [Learn more](/docs/analytics)
90
+ ===
91
+ ```
92
+
93
+ ```
94
+ ===horizontal accent
95
+ **Horizontal card**
96
+ Media and content sit side by side.
97
+ ===
98
+ ```
99
+
100
+ ## Tag
101
+
102
+ A small colored label for a category or status. Works **inline** in a sentence or
103
+ as a **block**.
104
+
105
+ - **Primary:** `@@@variant? appearance? size? pill? with-remove? icon:name?`
106
+ - **Alt:** `:::wa-tag variant? appearance? size? pill? with-remove? icon:name?`
107
+ - Inline form opens and closes on one line: `@@@variant Label @@@`.
108
+
109
+ **Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
110
+ **Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`.
111
+ **Sizes:** `xs`, `s`, `m`, `l`, `xl` plus legacy `small` / `medium` / `large`.
112
+ **Flags:** `pill` (rounded), `with-remove` (adds a × button).
113
+ **Icon:** `icon:name` places an icon inside the tag.
114
+
115
+ ```
116
+ The @@@success icon:check Stable @@@ API and the @@@warning Beta @@@ API differ.
117
+ ```
118
+
119
+ ```
120
+ @@@brand pill icon:star
121
+ Featured
122
+ @@@
123
+ ```
124
+
125
+ > **`with-remove` caveat:** the × button only *fires* a `wa-remove` event — Web
126
+ > Awesome does not remove the tag for you. On a page with no JavaScript beyond
127
+ > the Web Awesome library it is inert. Add your own `wa-remove` listener to make
128
+ > it functional. The markup is valid either way.
129
+
130
+ ## Badge
131
+
132
+ A compact count/status chip, often used to grab attention.
133
+
134
+ - **Primary:** `!!!variant? appearance? attention? pill?`
135
+ - **Alt:** `:::wa-badge variant? appearance? attention? pill?`
136
+ - Close with `!!!`.
137
+
138
+ **Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
139
+ **Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`.
140
+ **Attention:** `none`, `pulse`, `bounce`. **Flags:** `pill`.
141
+
142
+ ```
143
+ !!!brand pulse
144
+ New
145
+ !!!
146
+ ```
147
+
148
+ Tag vs. badge: reach for a **tag** for a category/status label in flowing content,
149
+ a **badge** for a small attention-grabbing count or "new" marker (badges carry
150
+ the `pulse`/`bounce` animations).
151
+
152
+ ## Button
153
+
154
+ A styled button — a link when it wraps a Markdown link, a plain button otherwise.
155
+
156
+ - **Primary:** `%%%variant? appearance? size? pill? caret? loading? disabled? target? download? icon:name? icon:end:name?`
157
+ - **Alt:** `:::wa-button variant? appearance? size? pill? caret? loading? disabled? …`
158
+ - Close with `%%%`.
159
+
160
+ **Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
161
+ **Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`, `plain`.
162
+ **Sizes:** `xs`, `s`, `m`, `l`, `xl` plus legacy `small` / `medium` / `large`.
163
+ **Flags:** `pill`, `caret` (dropdown indicator), `loading`, `disabled`.
164
+
165
+ **Link behavior** (link-form buttons only — the body holds a Markdown link).
166
+ These are **bare tokens**, not `key=value` pairs:
167
+
168
+ - `_blank`, `_self`, `_parent`, `_top` set the anchor target; `_blank` also adds
169
+ `rel="noopener noreferrer"` automatically.
170
+ - `download` makes the link download its target instead of navigating.
171
+
172
+ **Icons:** `icon:name` for a start icon, `icon:end:name` for an end icon (or the
173
+ explicit `icon:start:name`); combine both.
174
+
175
+ ```
176
+ %%%brand icon:rocket
177
+ [Get started](https://example.com/start)
178
+ %%%
179
+ ```
180
+
181
+ ```
182
+ %%%neutral outlined icon:end:arrow-right _blank
183
+ [Read the docs](https://example.com/docs)
184
+ %%%
185
+ ```
186
+
187
+ ```
188
+ %%%success download
189
+ [Download sample](/files/sample.zip)
190
+ %%%
191
+ ```
192
+
193
+ ## Copy button
194
+
195
+ A button that copies text to the clipboard — attach it to any command, URL, or
196
+ value the reader will copy. The display supports Markdown while the copied text
197
+ stays raw.
198
+
199
+ - **Primary:** `<<<placement? tooltip:full|copy|none? duration? disabled? copy-label? success-label? error-label? from?`
200
+ - **Alt:** `:::wa-copy-button placement? tooltip:full|copy|none? …`
201
+ - Close with `<<<`.
202
+
203
+ **Tooltip placement:** `top` (default), `right`, `bottom`, `left`.
204
+ **Tooltip mode:** `tooltip:full` (default — hover/focus + copy feedback),
205
+ `tooltip:copy` (feedback only), `tooltip:none` (no tooltip).
206
+ **Feedback duration:** a bare number is the success-message duration in ms
207
+ (e.g. `2000`).
208
+ **Custom labels:** `copy-label="…"`, `success-label="…"`, `error-label="…"`.
209
+ **Copy from another element:** `from="element-id"` (also `from="input.value"`,
210
+ `from="link[href]"`). **Flags:** `disabled`.
211
+
212
+ ```
213
+ <<<top copy-label="Copy install command"
214
+ npm install markawesome-js
215
+ <<<
216
+ ```
217
+
218
+ ## Icon
219
+
220
+ A standalone Web Awesome `<wa-icon>` — inline and decorative, or a labeled block.
221
+
222
+ - **Inline** `$$$name` — name only, decorative, no attributes; use mid-prose:
223
+ `Click the $$$gear icon.`
224
+ - **Block** `:::wa-icon name family? variant? animation? canvas?` — the first
225
+ token is the icon name; the rest are optional, order-independent attributes. A
226
+ non-empty block body becomes the icon's accessible `label`; an empty body
227
+ leaves it presentational. Close with `:::`.
228
+
229
+ **Icon attributes** (same vocabulary as the callout icon overrides):
230
+
231
+ - **family** — `classic`, `sharp`, `duotone`, `sharp-duotone`, `brands`, plus the
232
+ WA 3.10.0 families (`mosaic`, `pixel`, `vellum`, `slab-duo`, `slab-press-duo`,
233
+ `chisel`, `etch`, `graphite`, `jelly`, `jelly-duo`, `jelly-fill`, `notdog`,
234
+ `notdog-duo`, `slab`, `slab-press`, `thumbprint`, `utility`, `utility-duo`,
235
+ `utility-fill`, `whiteboard`).
236
+ - **variant** (Font Awesome weight) — `thin`, `light`, `regular`, `solid`,
237
+ `semibold`.
238
+ - **animation** — `beat`, `fade`, `beat-fade`, `bounce`, `flip`, `shake`, `spin`,
239
+ `spin-pulse`, `spin-reverse`, `flip-360`, `spin-snap`, `spin-snap-4`,
240
+ `spin-snap-8`, `buzz`, `float`, `jello`, `swing`, `wag`.
241
+ - **canvas** (sizing box) — `fixed` (default), `auto`, `square`, `roomy`.
242
+
243
+ Animation and canvas work with any kit; family/variant glyph changes depend on
244
+ the kit's Font Awesome tier.
245
+
246
+ ```
247
+ Enable it under the $$$gear Settings menu.
248
+ ```
249
+
250
+ ```
251
+ :::wa-icon bell shake
252
+ Notifications
253
+ :::
254
+ ```
255
+
256
+ > **Static-site caveat:** an icon renders its glyph into shadow DOM with no
257
+ > light-DOM fallback — with Web Awesome's JavaScript disabled it shows nothing.
258
+ > See `authoring.md`.