pivoshenko-brand
What pivoshenko Is
pivoshenko is the practitioner's notebook — a dark, monospaced workshop where an engineer thinks out loud.
Every rule below descends from that sentence. If a future decision doesn't fit it, the decision is out — not the sentence. Read this line as the brand's positioning, not its tagline; it's the test, not the marketing.
The skill is organized in two layers:
- DNA — identity decisions that hold across every substrate (web, print, video, audio, physical). These don't change when you port to a new medium.
- Expression — how DNA gets rendered in this substrate (CSS tokens, hex values, pixel sizes, motion timings). These change per substrate; the DNA above them does not.
When porting to a substrate this skill doesn't enumerate, hold the DNA fixed and re-derive the expression. The Porting to a new substrate section below gives the rubric.
Files
SKILL.md is the entry point. Open references only when the task calls for them — keeps context lean.
One rule for the tree: everything under preview/ is rendered HTML for a human to look at; everything else is for you to read. The component cards are the exception worth reaching for — lift their markup instead of reinventing a component.
colors_and_type.css — drop-in role tokens (CSS vars as R G B triples) + utility classes + 8 type-* recipes. Link or inline for any web prototype.
assets/logo-vp.svg — canonical VP tile (32×32, 4px radius, light fill, dark glyph). The only mark.
assets/social/{github,linkedin,rss}.svg — Simple Icons brand marks (footer use only).
assets/templates/ — drop-in artifact skeletons. Start here for any one-shot output — copy, fill placeholders, don't rebuild from scratch:
page.html — generic dark page (header + content + footer). Use for one-pagers, mocks, posters.
document.html — print-tuned (A4, @page, page-break hygiene). Render to PDF via headless Chrome.
og-card.html — 1200×630 social/OG card. Hex inlined because @vercel/og and most screenshotters don't resolve CSS variables.
references/voice.md — content fundamentals: rhythm, casing, microcopy, refuse-list, smell test. Read when writing copy (post, README, social, email).
references/visual.md — deep rationale for color + typography choices (origin / substitution / extension) and long-form spacing/border/layout rules. Read when extending the palette, porting to a substrate without JetBrains Mono, or auditing a layout.
references/iconography.md — Lucide / Simple Icons / VP-mark rules. Read when placing icons, building a logo lockup, or making a favicon / OG mark.
references/anti-patterns.md — do/don't pairs per DNA rule. Read when a rule feels ambiguous, or when you've drifted and want to diagnose why.
preview/*.html — per-recipe component cards. Lift markup from these; read on demand:
colors-* — palette + accent usage
type-* — type recipes + foreground ladder
spacing-* — scale, borders, corners
components-* — card, button, tag, alert, code, chrome, menu, search, tabs, status, form-inputs, palette-table
preview/index.html, preview/components.html — the two hub pages that frame the cards above for a human browsing them. Open one for the user when they want to see the system; they carry no rule you can't get from this file.
DNA — Identity (Won't Change Across Substrates)
Every line here is a hill the brand dies on. Break one -> looks like generic SaaS, not pivoshenko. These are the anchors — they hold whether the substrate is HTML, a printed booklet, a slide, a podcast cover, or a conference badge.
- Dark only. No light mode, no toggle, no media-query fallback. The background absorbs; the foreground emits.
- One typeface, monospaced. The whole brand reads in a single dev/terminal typeface. Headings, body, captions, code — same font. The practitioner's tool is the practitioner's voice.
- Grayscale chrome, one accent as subject. UI is warm grey on warm black. The single accent is the thing being looked at (a link, a status dot, a focus ring, a copy-success flash) — never the container, never a button fill.
- Flat-edge. No shadows, no gradients, no blur, no glow. Separation is 1px lines. Depth is implied, never rendered.
- Type and color only. No stock photography, no illustration, no AI imagery, no 3D renders, no decorative shapes. The exception is the work itself: a terminal screenshot, a code listing, a mono portrait.
- One mark:
VP. Every surface uses the same tile — light fill, dark glyph, monospaced 700. Surfaces differentiate through the dotted wordmark suffix (pivoshenko.<namespace>) and the URL/title, never through a per-surface glyph.
- No emoji. Not in UI, READMEs, commits, or social copy. Typographic restraint is the brand. One exception: the GitHub repo description field — a single contextual emoji is allowed there as visual punctuation in a wall of grey listing text. Nowhere else.
- Voice = practitioner's notebook. First-person singular. Short declarative + short declarative + counterpunch. Lists do the heavy lifting. No hype, no marketing voice, no "we".
Rationale for the typeface and accent — origin, substitution rule, extension rule — lives in references/visual.md. Open it when porting to a substrate that can't deliver mono, or when extending the palette.
Expression — Web/CSS Substrate (This Is One Rendering of the DNA)
The hex values, class names, and timings below are how DNA #1–#7 render in CSS. They are the signature, not the soul. A different substrate may pick different signature values for the same DNA.
Token Model
Tokens are space-separated R G B triples so they compose with alpha, consumed via rgb(var(--token) / <alpha>):
color: rgb(var(--fg-default));
background: rgb(var(--bg-surface));
border-color: rgb(var(--border-default) / 0.6);
Role tokens (single source of truth — :root in colors_and_type.css):
Background --bg-canvas #1f1f1e --bg-surface #262625 --bg-raised #2e2e2c
--bg-sunken #1a1a19 --bg-overlay #57534e
Foreground --fg-default #e4e2de --fg-muted #b8b3a8
--fg-subtle #9b958a --fg-faint #78716c
Border --border-subtle #262625 --border-default #2e2e2c --border-strong #373634
Accent --accent-primary #d97757 (terracotta — the one accent)
--accent-secondary #d4a85a
--accent-success #8a9d68 --accent-warning #d4a85a
--accent-danger #c87a72 --accent-info #7ba0c4
Convenience aliases wrap the role tokens so utility classes read naturally: fg-primary/fg-body/fg-muted, bg-page/bg-card/bg-elevated, border-ui/border-faint, plus -c color-resolved forms (--fg-muted-c). Prefer utility classes; reach for raw rgb(var(--…)) only for one-off styles.
For off-DOM contexts that can't resolve CSS variables (@vercel/og, themeColor meta, headless screenshotters), inline the raw hex values above.
Web Signature Values
- Page floor:
--bg-canvas #1f1f1e. Components never read the underlying hex.
- Typeface:
JetBrains Mono everywhere — body, headings, nav, code. Fallback chain in colors_and_type.css.
- Corner radius:
4px default. 8px only for prose <pre>. 999px only for the palette swatch circle.
- Borders: all
1px solid. border-ui for primary lines, border-faint (same slot at 60% alpha) for dividers inside a card.
- Motion: one spec —
150ms ease on color, background-color, border-color. No bounce, no spring, no scale, no entry animation.
- Hover: color class moves up one step in the foreground ladder. No pill, no underline, no left border on active nav.
- Wordmark lockup:
pivoshenko.<namespace>, dotted — pivoshenko in fg-primary, the dotted suffix in fg-muted. Paired with the VP tile.
Voice (Quick Reference)
- Pragmatic, technical, calm. Practitioner, not marketer.
- First-person singular. Any
pivoshenko.<namespace> form stays lowercase, even at sentence start.
- Short declarative + short declarative + one-line counterpunch. Lists do heavy lifting.
- Favor:
practical notes, curated, experiments, step-by-step, baseline, ports, userstyles.
- Posts, not articles.
- Refuse: hype (
game-changing, revolutionary), vague value (solutions, seamless), playful slang (awesome, super), em-dashes for drama.
- Byline:
Volodymyr Pivoshenko <contact@pivoshenko.dev> (mail-header style).
- Section labels SHOUT but small — uppercase via
.type-label, widest tracking.
For longer copy work, open references/voice.md for the rhythm, refuse-list, microcopy table, and smell test.
Porting to a New Substrate
The brand outlasts any single medium. When the substrate isn't web — book cover, podcast art, conference badge, video lower-third, printed booklet, a new IDE port — hold the DNA fixed and re-derive the expression by walking these four questions:
- What is "dark" here? The deepest absorbing value the substrate can render. On paper that's the warmest near-black the press can hold without bleeding; on a screen it's
#1f1f1e; on audio it's the silence-tone the speaker assumes between words.
- What is "monospaced" here? The substrate's most workshop-feeling expression of a single voice. On screen it's JetBrains Mono; on print it's the same family if licensable, otherwise the nearest mono with good rendering at the print weight; in video it's mono captions; in audio it's a steady, unhurried delivery (no music beds, no jingles).
- What is "the mark" here? The
VP tile, scaled and rendered in whatever the substrate offers. Always light tile, dark glyph; never inverted. On a badge it's debossed; on video it's the sting frame; on audio it's the spoken name in the same cadence as the writing.
- What is "the accent" here? Terracotta
#d97757 if the substrate can hold color faithfully. If not, the accent collapses to position — the spot the eye lands on. In a grayscale newspaper it's the bolded word; in a single-color print run it's the only color used. The accent's job is "look here", and that job has a substrate-appropriate answer everywhere.
If all four questions have answers, the substrate is in. If one stays empty, the substrate isn't ready — pick a different one or constrain the artifact.
Substrate Cheat Sheet
Same brand, different rendering. Each row is a worked instance of the four-question rubric.
- Web UI (production) -> role tokens + utility classes from
colors_and_type.css (bg-page, fg-primary, border-ui, type-label, type-meta). Match patterns in preview/components-*.html.
- Standalone HTML mock / prototype -> start from
assets/templates/page.html. Lift markup from preview/components-*.html.
- PDF -> start from
assets/templates/document.html (A4, @page, page-break hygiene). Render via chromium --headless --print-to-pdf or any pipeline that respects -webkit-print-color-adjust: exact. Dark by design — including PDFs.
- Social card / OG image -> start from
assets/templates/og-card.html (1200×630, VP tile top-left, title scaled up, one accent line). Hex inlined for @vercel/og / satori.
- Slide deck / poster -> stack
assets/templates/page.html clones, one idea per slide. Avoid .pptx — binary formats fall outside the token system; ship slides as HTML or PDF.
- README / GitHub markdown -> no emoji in the body (the repo description field is the sole exception, one contextual emoji). Lowercase brand names. Tables + code fences over prose. Mail-header byline footer.
- Email / signature -> mono if the client supports it, system fallback otherwise. Plain text preferred. Single-line byline.
- Terminal / theme port -> map the hex values to the target tool's syntax. Background =
#1f1f1e. Body = #e4e2de. Accent = #d97757. Don't invent shades — every color the port needs is already in the role layer.
- Print booklet, podcast cover, conference badge, video lower-third, … -> not enumerated. Walk the four questions above. Pull rationale from
references/visual.md if substituting the typeface or extending the palette.
- No spec given -> ask audience, fidelity, target substrate. Then output.
Quality Checklist
Two passes. DNA first (does it belong to the brand?), expression second (is it correctly rendered in this substrate?).
DNA — does this feel like pivoshenko regardless of medium?
- Dark floor, foreground emits?
- Single monospaced (or substrate-equivalent) voice throughout?
- Grayscale chrome; accent only as the thing being looked at, never the container?
- Flat-edge: no shadows, gradients, blur, glow?
- Type and color only — no decorative imagery?
VP mark present and unchanged?
- Zero emoji (GitHub repo description excepted)?
- Voice: practitioner's notebook, first-person, no hype?
Expression — correctly rendered in this substrate?
- Right hex / class / token for this medium? Web uses tokens not raw hex; off-DOM contexts use raw hex.
- Right radius / motion / border weight for the medium?
- Right substitution if a DNA element can't render directly (e.g. typeface unavailable, color absent)? See
references/visual.md.
Final test: Could this sit next to any other pivoshenko artifact and feel like the same hand made it? If yes, ship. If no, walk references/anti-patterns.md to find which rule got bent.
How to Use This Skill
For a quick artifact (mock, poster, one-pager, slide, social card, PDF), start from assets/templates/ and link colors_and_type.css (or inline its tokens). Lift component patterns from preview/components-*.html instead of reinventing. Always read tokens, never hexes.
For a substrate not enumerated above, walk the four porting questions, then output.
If invoked without further guidance, ask audience, fidelity, and target substrate. Then output.
1---2name: pivoshenko-brand3description: Central brand system for Volodymyr Pivoshenko — voice, type, color, layout, iconography. Self-contained; covers any output format (web UI, PDF, slide deck, README, social card, email, terminal/theme port, throwaway mock). Trigger even when the user doesn't say "brand" — any visual or copy decision touching pivoshenko surfaces counts. Also trigger on "make this on brand", "style this", "design a mock", "apply pivoshenko style", "needs to feel like my site", "generate a PDF / slide / poster / card", or any styling work on pivoshenko-adjacent content.4---56# pivoshenko-brand78## What pivoshenko Is910> **pivoshenko is the practitioner's notebook — a dark, monospaced workshop where an engineer thinks out loud.**1112Every rule below descends from that sentence. If a future decision doesn't fit it, the decision is out — not the sentence. Read this line as the brand's positioning, not its tagline; it's the test, not the marketing.1314The skill is organized in two layers:1516- **DNA** — identity decisions that hold *across every substrate* (web, print, video, audio, physical). These don't change when you port to a new medium.17- **Expression** — how DNA gets rendered *in this substrate* (CSS tokens, hex values, pixel sizes, motion timings). These change per substrate; the DNA above them does not.1819When porting to a substrate this skill doesn't enumerate, hold the DNA fixed and re-derive the expression. The *Porting to a new substrate* section below gives the rubric.2021## Files2223SKILL.md is the entry point. Open references only when the task calls for them — keeps context lean.2425One rule for the tree: **everything under `preview/` is rendered HTML for a human to look at; everything else is for you to read.** The component cards are the exception worth reaching for — lift their markup instead of reinventing a component.2627- `colors_and_type.css` — drop-in role tokens (CSS vars as `R G B` triples) + utility classes + 8 `type-*` recipes. Link or inline for any web prototype.28- `assets/logo-vp.svg` — canonical `VP` tile (32×32, 4px radius, light fill, dark glyph). The only mark.29- `assets/social/{github,linkedin,rss}.svg` — Simple Icons brand marks (footer use only).30- `assets/templates/` — drop-in artifact skeletons. **Start here for any one-shot output** — copy, fill placeholders, don't rebuild from scratch:31 - `page.html` — generic dark page (header + content + footer). Use for one-pagers, mocks, posters.32 - `document.html` — print-tuned (A4, `@page`, page-break hygiene). Render to PDF via headless Chrome.33 - `og-card.html` — 1200×630 social/OG card. Hex inlined because `@vercel/og` and most screenshotters don't resolve CSS variables.34- `references/voice.md` — content fundamentals: rhythm, casing, microcopy, refuse-list, smell test. **Read when writing copy** (post, README, social, email).35- `references/visual.md` — deep rationale for color + typography choices (origin / substitution / extension) and long-form spacing/border/layout rules. **Read when extending the palette, porting to a substrate without JetBrains Mono, or auditing a layout.**36- `references/iconography.md` — Lucide / Simple Icons / VP-mark rules. **Read when placing icons, building a logo lockup, or making a favicon / OG mark.**37- `references/anti-patterns.md` — do/don't pairs per DNA rule. **Read when a rule feels ambiguous, or when you've drifted and want to diagnose why.**38- `preview/*.html` — per-recipe component cards. Lift markup from these; read on demand:39 - `colors-*` — palette + accent usage40 - `type-*` — type recipes + foreground ladder41 - `spacing-*` — scale, borders, corners42 - `components-*` — card, button, tag, alert, code, chrome, menu, search, tabs, status, form-inputs, palette-table43- `preview/index.html`, `preview/components.html` — the two hub pages that frame the cards above for a human browsing them. Open one for the user when they want to *see* the system; they carry no rule you can't get from this file.4445## DNA — Identity (Won't Change Across Substrates)4647Every line here is a hill the brand dies on. Break one -> looks like generic SaaS, not pivoshenko. These are *the* anchors — they hold whether the substrate is HTML, a printed booklet, a slide, a podcast cover, or a conference badge.48491. **Dark only.** No light mode, no toggle, no media-query fallback. The background absorbs; the foreground emits.502. **One typeface, monospaced.** The whole brand reads in a single dev/terminal typeface. Headings, body, captions, code — same font. The practitioner's tool is the practitioner's voice.513. **Grayscale chrome, one accent as subject.** UI is warm grey on warm black. The single accent is the *thing being looked at* (a link, a status dot, a focus ring, a copy-success flash) — never the container, never a button fill.524. **Flat-edge.** No shadows, no gradients, no blur, no glow. Separation is 1px lines. Depth is implied, never rendered.535. **Type and color only.** No stock photography, no illustration, no AI imagery, no 3D renders, no decorative shapes. The exception is *the work itself*: a terminal screenshot, a code listing, a mono portrait.546. **One mark: `VP`.** Every surface uses the same tile — light fill, dark glyph, monospaced 700. Surfaces differentiate through the dotted wordmark suffix (`pivoshenko.<namespace>`) and the URL/title, never through a per-surface glyph.557. **No emoji.** Not in UI, READMEs, commits, or social copy. Typographic restraint *is* the brand. **One exception:** the GitHub repo description field — a single contextual emoji is allowed there as visual punctuation in a wall of grey listing text. Nowhere else.568. **Voice = practitioner's notebook.** First-person singular. Short declarative + short declarative + counterpunch. Lists do the heavy lifting. No hype, no marketing voice, no "we".5758Rationale for the typeface and accent — origin, substitution rule, extension rule — lives in `references/visual.md`. Open it when porting to a substrate that can't deliver mono, or when extending the palette.5960## Expression — Web/CSS Substrate (This Is One Rendering of the DNA)6162The hex values, class names, and timings below are how DNA #1–#7 render in CSS. They are the *signature*, not the *soul*. A different substrate may pick different signature values for the same DNA.6364### Token Model6566Tokens are space-separated `R G B` triples so they compose with alpha, consumed via `rgb(var(--token) / <alpha>)`:6768```css69color: rgb(var(--fg-default));70background: rgb(var(--bg-surface));71border-color: rgb(var(--border-default) / 0.6);72```7374Role tokens (single source of truth — `:root` in `colors_and_type.css`):7576```77Background --bg-canvas #1f1f1e --bg-surface #262625 --bg-raised #2e2e2c78 --bg-sunken #1a1a19 --bg-overlay #57534e79Foreground --fg-default #e4e2de --fg-muted #b8b3a880 --fg-subtle #9b958a --fg-faint #78716c81Border --border-subtle #262625 --border-default #2e2e2c --border-strong #37363482Accent --accent-primary #d97757 (terracotta — the one accent)83 --accent-secondary #d4a85a84 --accent-success #8a9d68 --accent-warning #d4a85a85 --accent-danger #c87a72 --accent-info #7ba0c486```8788Convenience aliases wrap the role tokens so utility classes read naturally: `fg-primary`/`fg-body`/`fg-muted`, `bg-page`/`bg-card`/`bg-elevated`, `border-ui`/`border-faint`, plus `-c` color-resolved forms (`--fg-muted-c`). **Prefer utility classes; reach for raw `rgb(var(--…))` only for one-off styles.**8990For off-DOM contexts that can't resolve CSS variables (`@vercel/og`, `themeColor` meta, headless screenshotters), inline the raw hex values above.9192### Web Signature Values9394- **Page floor:** `--bg-canvas` `#1f1f1e`. Components never read the underlying hex.95- **Typeface:** `JetBrains Mono` everywhere — body, headings, nav, code. Fallback chain in `colors_and_type.css`.96- **Corner radius:** `4px` default. `8px` only for prose `<pre>`. `999px` only for the palette swatch circle.97- **Borders:** all `1px solid`. `border-ui` for primary lines, `border-faint` (same slot at 60% alpha) for dividers inside a card.98- **Motion:** one spec — `150ms ease` on `color, background-color, border-color`. No bounce, no spring, no scale, no entry animation.99- **Hover:** color class moves up one step in the foreground ladder. No pill, no underline, no left border on active nav.100- **Wordmark lockup:** `pivoshenko.<namespace>`, dotted — `pivoshenko` in `fg-primary`, the dotted suffix in `fg-muted`. Paired with the `VP` tile.101102### Voice (Quick Reference)103104- Pragmatic, technical, calm. Practitioner, not marketer.105- First-person singular. Any `pivoshenko.<namespace>` form stays lowercase, even at sentence start.106- Short declarative + short declarative + one-line counterpunch. Lists do heavy lifting.107- Favor: `practical notes`, `curated`, `experiments`, `step-by-step`, `baseline`, `ports`, `userstyles`.108- Posts, not articles.109- Refuse: hype (`game-changing`, `revolutionary`), vague value (`solutions`, `seamless`), playful slang (`awesome`, `super`), em-dashes for drama.110- Byline: `Volodymyr Pivoshenko <contact@pivoshenko.dev>` (mail-header style).111- Section labels SHOUT but small — uppercase via `.type-label`, widest tracking.112113For longer copy work, open `references/voice.md` for the rhythm, refuse-list, microcopy table, and smell test.114115## Porting to a New Substrate116117The brand outlasts any single medium. When the substrate isn't web — book cover, podcast art, conference badge, video lower-third, printed booklet, a new IDE port — *hold the DNA fixed and re-derive the expression* by walking these four questions:1181191. **What is "dark" here?** The deepest absorbing value the substrate can render. On paper that's the warmest near-black the press can hold without bleeding; on a screen it's `#1f1f1e`; on audio it's the silence-tone the speaker assumes between words.1202. **What is "monospaced" here?** The substrate's most workshop-feeling expression of a single voice. On screen it's JetBrains Mono; on print it's the same family if licensable, otherwise the nearest mono with good rendering at the print weight; in video it's mono captions; in audio it's a steady, unhurried delivery (no music beds, no jingles).1213. **What is "the mark" here?** The `VP` tile, scaled and rendered in whatever the substrate offers. Always light tile, dark glyph; never inverted. On a badge it's debossed; on video it's the sting frame; on audio it's the spoken name in the same cadence as the writing.1224. **What is "the accent" here?** Terracotta `#d97757` if the substrate can hold color faithfully. If not, the accent collapses to *position* — the spot the eye lands on. In a grayscale newspaper it's the bolded word; in a single-color print run it's the only color used. The accent's job is "look here", and that job has a substrate-appropriate answer everywhere.123124If all four questions have answers, the substrate is in. If one stays empty, the substrate isn't ready — pick a different one or constrain the artifact.125126### Substrate Cheat Sheet127128Same brand, different rendering. Each row is a worked instance of the four-question rubric.129130- **Web UI (production)** -> role tokens + utility classes from `colors_and_type.css` (`bg-page`, `fg-primary`, `border-ui`, `type-label`, `type-meta`). Match patterns in `preview/components-*.html`.131- **Standalone HTML mock / prototype** -> start from `assets/templates/page.html`. Lift markup from `preview/components-*.html`.132- **PDF** -> start from `assets/templates/document.html` (A4, `@page`, page-break hygiene). Render via `chromium --headless --print-to-pdf` or any pipeline that respects `-webkit-print-color-adjust: exact`. Dark by design — including PDFs.133- **Social card / OG image** -> start from `assets/templates/og-card.html` (1200×630, VP tile top-left, title scaled up, one accent line). Hex inlined for `@vercel/og` / satori.134- **Slide deck / poster** -> stack `assets/templates/page.html` clones, one idea per slide. **Avoid `.pptx`** — binary formats fall outside the token system; ship slides as HTML or PDF.135- **README / GitHub markdown** -> no emoji in the body (the repo *description* field is the sole exception, one contextual emoji). Lowercase brand names. Tables + code fences over prose. Mail-header byline footer.136- **Email / signature** -> mono if the client supports it, system fallback otherwise. Plain text preferred. Single-line byline.137- **Terminal / theme port** -> map the hex values to the target tool's syntax. Background = `#1f1f1e`. Body = `#e4e2de`. Accent = `#d97757`. Don't invent shades — every color the port needs is already in the role layer.138- **Print booklet, podcast cover, conference badge, video lower-third, …** -> not enumerated. Walk the four questions above. Pull rationale from `references/visual.md` if substituting the typeface or extending the palette.139- **No spec given** -> ask audience, fidelity, target substrate. Then output.140141## Quality Checklist142143Two passes. DNA first (does it *belong* to the brand?), expression second (is it correctly rendered *in this substrate*?).144145**DNA — does this feel like pivoshenko regardless of medium?**1461471. Dark floor, foreground emits?1482. Single monospaced (or substrate-equivalent) voice throughout?1493. Grayscale chrome; accent only as the thing being looked at, never the container?1504. Flat-edge: no shadows, gradients, blur, glow?1515. Type and color only — no decorative imagery?1526. `VP` mark present and unchanged?1537. Zero emoji (GitHub repo description excepted)?1548. Voice: practitioner's notebook, first-person, no hype?155156**Expression — correctly rendered in this substrate?**1571589. Right hex / class / token for this medium? Web uses tokens not raw hex; off-DOM contexts use raw hex.15910. Right radius / motion / border weight for the medium?16011. Right substitution if a DNA element can't render directly (e.g. typeface unavailable, color absent)? See `references/visual.md`.161162**Final test:** Could this sit next to any other pivoshenko artifact and feel like the same hand made it? If yes, ship. If no, walk `references/anti-patterns.md` to find which rule got bent.163164## How to Use This Skill165166For a quick artifact (mock, poster, one-pager, slide, social card, PDF), start from `assets/templates/` and link `colors_and_type.css` (or inline its tokens). Lift component patterns from `preview/components-*.html` instead of reinventing. Always read tokens, never hexes.167168For a substrate not enumerated above, walk the four porting questions, then output.169170If invoked without further guidance, ask audience, fidelity, and target substrate. Then output.