Zenzic · Brand System · v0.7.1a1 · Obsidian Maturity

Logomark — The Zenzic Artifact 4-quadrant isometric identity · diagonal slash cut · Harbor Cyan → Sentinel Indigo
Dark · 120 px
Light · 120 px
48 px
32 px
16 px
Favicon sizes
Zenzic
The Safe Harbor
Zenzic
The Safe Harbor
Horizontal · IBM Plex Mono · Dark + Light

Wordmark Usage — Dark & Light

Dark background

  • ✓  Background: #09090b (Obsidian Lead) or deeper
  • ✓  Wordmark text: #F8FAFC near-white
  • ✓  Tagline: #38bdf8 Harbor Cyan
  • ✓  Minimum clear space: 1× artifact width on all sides

Light background

  • ✓  Background: #F1F5F9 or lighter
  • ✓  Wordmark text: #0F172A near-black
  • ✓  Tagline: #4f46e5 Sentinel Indigo
  • ✓  Never use the dark wordmark on a light surface
Social Card · OG Image · 1200 × 630
Sentinel Palette

Palette v0.7.1a1 — Obsidian Maturity Edition  ·  Bimodal Indigo: Light #4338ca (AAA 7.4:1) · Dark #a5b4fc (AAA 8.9:1)

Identity

Harbor Cyan
#38bdf8
Z1xx · Links
Sentinel Indigo
#4f46e5
Primary Brand

Signals

Blood
#FF3B30
Exit 3 · Fatal
Magenta
#FF2D73
Exit 2 · Shield

Surface

Obsidian Lead
#09090b
Primary BG
Void
#0f0f13
Surface
Zinc
#8B8FA8
Muted Text
Ghost
#E2E8F0
Primary Text
Typography System

Headings · Inter 700

Zenzic

The Safe Harbor

Body · Inter 400 / 500

Engine-agnostic quality guarantee for
Markdown documentation at every scale.

Secondary text · labels · captions

Code / UI · JetBrains Mono

SENTINEL · SHIELD · HARBOR
uvx zenzic check all ./docs
v0.7.1a1 · obsidian maturity · exit 0

Scale specimen

32 · Hero

24 · Heading

16 · Subheading

14 · Body — the primary reading size

12 · Code · JetBrains Mono

09 · Brand Labels · IBM Plex Mono · tracked

ObsidianPalette — CLI Semantic Color System zenzic.core.ui.ObsidianPalette · sole source of truth for stdout / stderr color · private hex, public semantics
BRAND
#4f46e5
Indigo · Primary
SUCCESS
#10b981
Emerald · Pass
WARNING
#f59e0b
Amber · Advisory
ERROR
#f43f5e
Rose · Broken
DIM
#64748b
Slate · Muted
FATAL
#8b0000
Security only ⚠
Semantic Name Private Hex Value Usage in CLI output Exit
BRAND _INDIGO #4f46e5 Sentinel banner, panel borders, primary accent
SUCCESS _EMERALD #10b981 Clean check, ✨ Obsidian Seal, pass findings 0
WARNING _AMBER #f59e0b Advisory findings, non-blocking issues 0 / 1*
ERROR _ROSE #f43f5e Broken links, orphan pages, snippet failures 1
DIM _SLATE #64748b Secondary text, file paths, timestamps
FATAL _BLOOD #8b0000 Security incidents only — Shield (Z201) and Blood Sentinel (Z202–203) 2 / 3

Law: External code must reference semantic names only (ObsidianPalette.BRAND, .SUCCESS, …). Private hex constants (_INDIGO, _BLOOD, …) are internal implementation details. *WARNING exits as 1 under --strict.

The Architecture of Color Every pixel of CLI output is governed by ObsidianPalette — the single authoritative color contract

Every character of color that Zenzic emits to stdout and stderr flows through a single class: zenzic.core.ui.ObsidianPalette. No hex value is hardcoded outside of that class — not in report templates, not in scanner output, not in the Sentinel banner.

When you read a Zenzic terminal output, you are reading a semantically governed document. An emerald line is always a pass. A rose line is always an error. Dark red is always a security incident — never a style choice. This guarantee holds across stdout, stderr, JSON output, and the --quiet mode.

CLI Output — Color Mapping

▮ ZENZIC SENTINEL v0.7.1a1
✨ Obsidian Seal: All checks passed.
⚠ WARNING docs/guide.md:14
✗ ERROR docs/api.md:88
23 files · 0.8 s · exit 1
🔴 SECURITY INCIDENT — Exit 3
BRAND   SUCCESS   WARNING   ERROR
DIM   FATAL

For plugin and extension builders: If your rule emits a finding, the Zenzic engine maps severity to color automatically via ObsidianPalette. You supply the semantic severity ("error", "warning", "info"); the color contract is enforced for you. Never hardcode ANSI codes in a plugin.

Blood Sentinel — FATAL (#8b0000)

This color is reserved exclusively for security incidents. It may never be repurposed.

ObsidianPalette.FATAL  (#8b0000)  is emitted only by two scanner families inside the Zenzic core:

Design invariant for builders: If you build a tool or plugin for Zenzic and need to signal a security event, use ObsidianPalette.FATAL. If you use it for anything else, you are violating the semantic contract of the Sentinel color system. One color. One meaning. Non-negotiable.

ObsidianWebPalette — CLI vs Web --zenzic-* in src/css/custom.css · light: WCAG-calibrated · dark: exact CLI match

Web colors are calibrated for WCAG AA on light and dark surfaces. Where CLI and web values coincide, the identity is exact.

Semantic CSS Variable CLI Terminal Web — Light Web — Dark Note
BRAND --zenzic-brand #4f46e5 #4f46e5 #4f46e5 Exact match — AA on all surfaces
SUCCESS --zenzic-success #10b981 #059669 #10b981 Light: Emerald-600 for WCAG AA
WARNING --zenzic-warning #f59e0b #b45309 #f59e0b Light: Amber-700 for WCAG AA
ERROR --zenzic-error #f43f5e #e11d48 #f43f5e Light: Rose-600 for WCAG AA
DIM --zenzic-dim #64748b #475569 #94a3b8 Light: Slate-600 · Dark: Slate-400 (D110 — WCAG AA both surfaces)
FATAL --zenzic-fatal #8b0000 #991b1b #8b0000 Follows --obsidian-blood — security-only

Mermaid exception: Diagram nodes (style NODE fill:#… / classDef fill:#…) cannot consume CSS custom properties — Mermaid resolves colors in its own rendering pipeline. Hex values inside Mermaid code blocks are not subject to the Zero Hex Law.

Official Badges Static SVG · for offline / enterprise deployments · included in brand-kit.zip
Zenzic Shield badge Shield · Binary gate: passing / failing
Zenzic Score badge Score · Quality metric 0–100

Dynamic variants via Shields.io → see zenzic.dev/docs/how-to/add-badges/

Brand inquiries → [email protected]

Usage Laws

Do

  • ✓  Use on high-contrast backgrounds
  • ✓  Maintain the slash-cut geometry
  • ✓  Keep the 4-quadrant color split
  • ✓  Give the artifact room to breathe
  • ✓  Write "Zenzic" with capital Z

Do Not

  • ✗  Rotate or skew the artifact
  • ✗  Apply drop-shadows or blur
  • ✗  Recolor individual quadrants
  • ✗  Place on low-contrast surfaces
  • ✗  Write "zenzic", "ZENZIC", or "ZenZic"

Voice

  • —  Surgical precision, never vague
  • —  "The Safe Harbor", not "the linter"
  • —  Exit codes, not "errors"
  • —  Findings with Z-codes, always
  • —  Silent on success, loud on failure

§ 08 — Accessibility & Themes

The Zenzic palette is adaptive: every accent colour shifts between dark and light surfaces to maintain the minimum WCAG AA contrast ratio (4.5:1 for body text, 3:1 for large UI elements). A brand system that ignores contrast is a liability at scale.

Dark Mode — Obsidian Lead

Indigo Vibrante — #4f46e5

--ifm-color-primary · Ratio ~5.2:1 on #09090b

Cyan Elettrico — #06b6d4

--obsidian-accent · Ratio ~6.8:1 on #09090b

Sangue Profondo — #8b0000

--obsidian-blood · Blood Sentinel & Security

Light Mode — White Surface

Indigo Inchiostro — #3730a3

--ifm-color-primary [light] · Ratio ~7.9:1 on #fff

Cyan Profondo — #0891b2

--obsidian-accent [light] · Ratio ~4.6:1 on #fff

Rosso Mattone — #991b1b

--obsidian-blood [light] · Ratio ~7.1:1 on #fff

Zinc Typography Scale

Zinc-900 — #18181b — --ifm-heading-color

Headings — solid, authoritative, Ratio 18.1:1 on #fff

Zinc-800 — #27272a — --ifm-font-color-base

Body text — premium readability, Ratio 14.7:1 on #fff

Zinc-600 — #52525b — --ifm-color-emphasis-600

Metadata, secondary text — Ratio 7.8:1 on #fff (D110: raised from Zinc-500)

CSS Variable Contract

Variable Dark Light Role
--ifm-heading-color #fafafa #18181b Headings — Zinc-900 in light, near-white in dark
--ifm-font-color-base #e4e4e7 #27272a Body text — Zinc-800 in light, silk in dark
--ifm-color-primary #818cf8 #3730a3 Links, active states, sidebar
--obsidian-accent #06b6d4 #0891b2 Hover states, archive cards, sidebar links
--obsidian-author-signature #3730a3 The Author's Signature — reserved for human identity
--obsidian-blood #8b0000 #991b1b Blood Sentinel, security findings, Shield

The Author's Signature Doctrine

Zinc is the architecture — cold, industrial, precise. It defines the document: headings, body, metadata. Zinc conveys: this content is technical, universal, trustworthy.

Indigo is the soul — the author's mark on the machine. Reserved exclusively for --obsidian-author-signature on the creator's name. In a field of Zinc, a single Indigo node draws the eye to its origin. One colour. One meaning. Non-negotiable.

Law: Never use hardcoded accent hex values in component styles. Always consume var(--obsidian-accent), var(--obsidian-blood), and var(--obsidian-author-signature). Theme adaptation is free. Hardcoding is a regression.

§ 09 — Web Performance & CLS

Cumulative Layout Shift (CLS) degrades perceived performance and is penalised by Core Web Vitals. Every image, SVG, and icon in the Zenzic documentation site must carry explicit dimensions so the browser reserves the correct space before the asset loads. A Porto Sicuro does not jump.

Asset Type Standard Size Implementation Rule
Navbar logo 32 × 32 px docusaurus.config.ts logo.width/height Explicit — prevents navbar CLS on first load
Inline icon 16 × 16 px <img width="16" height="16" /> Always explicit on <img> tags
Feature icon 40 × 40 px <img width="40" height="40" /> Cards, hero sections, doc callouts
Architecture SVG native viewBox style="aspect-ratio:16/9;width:100%" Responsive diagrams — aspect-ratio reserves space

Law: No <img> or <Image> component may be merged without explicit width and height attributes (or aspect-ratio CSS on fluid containers). PRs that introduce dimensionless images are rejected by the visual hardening protocol (D110).

Zenzic · Open Source · Apache-2.0 · zenzic.dev · [email protected]