Skip to content

Design & brand

detectkit’s visual identity — colors, type, and theming. The canonical sources live in the repo (no external design files needed):

  • website/src/styles/brand.css — the design tokens as CSS custom properties (used by the docs site and the marketing landing).
  • website/brand/Detectkit Brand.dc.html — the full brand guide (logo usage, color directions, typography, alert styling, landing layouts).
  • website/src/assets/logo.svg, website/public/favicon.svg, website/src/components/Logo.astro — the logo / wordmark assets.
  • website/public/bot-icon.png — the alert bot avatar (raster brand mark on a clay tile), served at https://dtk.pipelab.dev/bot-icon.png and used as the default icon_url for Slack/Mattermost/webhook channels (see detectkit/alerting/channels/branding.py). Regenerate from the logo geometry with node website/scripts/make-bot-icon.mjs if the brand mark changes.

brand.css is derived verbatim from the brand guide — keep the two in sync if either changes.

The base palette (:root in brand.css), theme-independent:

TokenHexRole
--clay#d15b36Primary brand / accent
--clay-700#b4471fDarker accent (hover/pressed)
--ink#1b1916Primary text / near-black
--muted#6e675bSecondary text
--faint#9a9384Tertiary text / hints
--paper#f5f1e8Warm page background (light)
--surface#fbf9f3Raised surface (light)
--border#e6e0d4Hairlines / dividers (light)
--term-bg#211e1aTerminal / dark surface
--term-border#332f29Dark surface border
--term-text#c9c2b4Text on dark surfaces
--accent-green#2e9e73Positive accent

These map alert states to color and are kept in sync with the alert channel rendering (detectkit/alerting/channels/webhook.py), so dashboards and notifications read the same way:

TokenHexMeaning
--st-recovery#36a64fRecovery / all-clear
--st-nodata#f0ad4eNo-data alert
--st-anomaly#d63232Anomaly alert
--st-error#5a7a8cPipeline error
  • --sl-fontSchibsted Grotesk (UI, headings, body), with a system-sans fallback stack.
  • --sl-font-monoJetBrains Mono (code, terminal, metrics), with a monospace fallback stack.

Both are loaded from Google Fonts in website/astro.config.mjs.

The site ships two themes, both built from the tokens above:

  • Dark (default) — terminal surfaces (--term-*) with the clay accent.
  • Light (:root[data-theme='light']) — a warm “paper” theme (--paper / --surface).

Starlight’s color variables (--sl-color-*) are mapped from the brand palette in brand.css for each theme — change a brand token there and both the docs chrome and the landing follow. Code blocks stay on a dark theme in both modes (expressiveCode.themes: ['github-dark'] in astro.config.mjs) to match the terminal aesthetic.

  • In the website, reference the CSS variables directly (color: var(--clay)), never hardcode hex — that keeps theming and the landing consistent.
  • For anything outside CSS (slides, diagrams, external dashboards), copy the hex values from the tables above; they are the single source of truth alongside the brand guide.