Health
Brand guide
How Health should look, sound, and behave.
Spot outdated projects worth selling upgrades for, keep them secure, size sell hours for PMs, and hide inactive ones.
01
Purpose
We are
- A triage surface, worst first, expand for detail
- Honest about age, EOL, and sell hours
- A shared source for engineering, PMs, and sales
We are not
- A marketing site or agency portfolio piece
- A generic “security dashboard” SaaS skin
- A place for celebration metrics or vanity charts
- A timesheet or delivery-hour forecast
02
Audience
Engineers
PMs & commercial
Do
Write so an engineer trusts the data and a PM can size (and sell) without a Slack thread to engineering.
Don’t
Don’t keep inactive projects in the main list, hide them so sellable work stays obvious.
03
Personality
Operational
Precise
Calm
04
Mark
Logo lockup
HealthLogo, one horizontal card (default height 20px): cobalt field #0c2839 + healthy cyan left rail #33e1ff + border #244a6b + Health in white Space Mono bold uppercase tracking-wide inside the card. Shared via AppHeader and the login header. Not a square mark with a separate wordmark outside. Never “H HEALTH”, never a second Health label beside the lockup.Clear space
Favicon
#0c2839) + one full-height left rail in healthy / brand cyan #33e1ff + geometric H in near-white. Files: app/icon.svg, app/apple-icon.svg. Favicon cannot hold the full HEALTH word, keep the square app mark separate. No emoji. Same hex as healthy project status so mark and severity match.Do
Use HealthLogo once in chrome (HEALTH inside the wide card); keep the square H monogram for tabs and the login hero mark.
Don’t
Don’t put HEALTH outside the card, duplicate Health beside the lockup, theme the logo tile away from cobalt, or glue a timestamp to the brand cluster.
05
Colour
Surfaces & borders
bg
#071a2b
Page, deep cobalt-navy field (panels lift above it)
surface
#0c2839
Cards, inputs, sticky chrome, lifted cobalt panel
surface-alt
#143650
Hover states, one step lifted cobalt
ancient
#0a2333
Reserved deep neutral (caption, not row wash)
border
#244a6b
Borders, dividers, hairline whisper on dark
dot
rgba(255,255,255,0.03)
Background dot pattern (reserved)
Brand
brand
#33e1ff
Health identity cyan, focus, active chrome
brand-bg
rgba(51,225,255,0.16)
Soft brand wash (rare)
Text on surface
text-1
#ffffff
Primary on surface, sharp white ink (AAA, 15.2:1 on surface)
text-2
#b3cde4
Secondary body on surface, cool light blue (AAA, 9.3:1 on surface)
text-3
#93aec6
Labels, muted legends, verified AA (6.6:1 on surface, 5.3:1 on healthy tile)
Text on field
on-bg
#ffffff
Titles / primary on page bg, sharp white ink
on-bg-muted
#b3cde4
Leads, loading, secondary on bg
on-bg-subtle
#93aec6
Kickers, captions on bg
Emphasis (restrained)
accent-ink
#d0e4f7
Cool ink emphasis, quiet lit detail, not a colour punch
accent-green
#33e1ff
Vivid aqua-cyan, echoes the mark / healthy; the one accent
accent-stone
#93aec6
Blue-grey stone, softest neutral emphasis (AA on bg/surface/surface-alt)
Severity
crit
#ff7284
Critical alerts, EOL, hot rose-red (rail + bold label); AA as text on its wash (4.65:1)
high
#ff9d3d
High severity, unsupported runtime, vivid cobalt orange (pops AAA on dark)
mod
#ffc933
Moderate, EOL soon, vivid cobalt yellow (pops AAA on dark)
low
#93aec6
Low-severity alert counts, blue-grey stone (AA everywhere, incl. tile washes)
healthy
#33e1ff
Clear, supported, vivid aqua-cyan (Health identity)
Meaning
Not alone
Do
Use the vivid aqua-cyan for focus, healthy status, and the mark rail; sharp white ink for type; let the punchy severity hues pop for crit / high / mod signal (rails, labels, Overview tiles).
Don’t
Don’t paint row washes or add colour that means nothing, punch is signal, not ornament. Fun ≠ rainbow floods or glass.
06
Typography
Title
16px · text-title
AO-Package-Component
Project names
Body
14px · text-body
AO-Package-Component
Default UI text; bold + tabular for lit data (versions, euros, counts)
UI
13px · text-ui
AO-Package-Component
Nav, filters, buttons, section labels; regular for secondary captions
Caption
12px · text-caption
AO-Package-Component
Status, dimension labels, timestamps, hours, kbd; regular when not a label
Do
Bold for titles, chrome, and lit values. Specimens live in bordered frames with air, not lined tables.
Don’t
Don’t invent sizes, use font-medium, or run samples flush against hairlines.
07
Layout & geometry
Corners
Spacing
Depth
bg → card surface. No shadows, glass, or elevation theatre.Lines, borders, colour, only when they earn it
Breathing room
gap-4 stacks so panels and controls can breathe. Dense for scan data; never sparse-to-broken voids.Specimens
SpecimenFrame atoms, equal chrome for tokens, type, and rules.Chrome
max-w-6xl chrome on every screen. Desktop: h-14: Health left; nav + logout right. Mobile: brand + logout on row one; primary nav wraps alone below, never mix prefs into the nav wrap or clip. Report language EN|NL lives on Upgrade (Copy / Slack), not the header. Filters: quiet surface-alt when active. Refresh is icon + text next to search, same h-10, vertically centered, no box. Hide ⌘K below sm. Action icons are sharp strokes beside labels (ui-icons), not emoji, not icon-only for sell/hide/share (logout may be icon-only in chrome).Targets
min-h-11 (44px). Quiet :focus-visible, inset on fields, not a thick outer frame. Action buttons use bordered surface + hover surface-alt, never ink-black invert.08
Voice & writing
Prefer
- EOL · 11y
- Needs attention
- Major upgrade (security ended)
- Long past EOL
- Supported · Clear · Done
- Sell hours
Avoid
- Critical!!! / emoji alarms
- Your projects are on fire
- Awesome security wins
- Ancient / legacy vibes
- Raw enums as labels (done)
- Tooling or IDE brand names in UI
Case
formatProjectTitle.Numbers
Naming
Length
Hours
Obvious
09
Motion
Allowed
segment-slide), only when they communicate work in progress, arrival of data, a completed action, or a chrome preference change. Report copy and € amounts update instantly.Reduced motion
prefers-reduced-motion: static sweep bar; no blink, reveal, expand, confirm, or segment slide / press / icon engage.Forbidden
10
Accessibility
Contrast
bg uses on-bg*. Muted text is for secondary detail, never the only carrier of critical status.Not colour alone
Keyboard
Targets
min-h-11. Dense lists may use min-h-9 secondary rows, never tiny icon-only risk controls.11
Design principles
Clarity
Deference
Depth
Breathing room
Consistency
Feedback
User control
12
Out of brand
Never
- Gradients, glassmorphism, soft multi-layer shadows
- Rounded marketing cards, pill clusters, floating badges
- Filled severity washes on rows or filters
- Colour, borders, lines, or dividers that carry no meaning
- Registration ticks, HUD marks, or diagrammatic chrome
- Vivid neon accents or cockpit theatre
- Emoji, hype, or alarmist punctuation in product UI
- A second typeface or “friendly” sans takeover
- Decorative motion; ignoring reduced-motion
- Nested severity rails or card-in-card outlines
- Stoplight / multi-colour mark rail (mark is one cyan bar)
- Stuck icon + label, tighter than gap-3 (12px)
- Packed panels, content flush to edges or stacked cages instead of breathing room
- Agency wordmark or product names prefixed with the agency brand
- Naming agent tooling or IDE brands in shipped UI