This documentation is rendered by the design system it describes. Every colour
chip, type row, and code block on this site is produced from the same tokens the
pages document.
Foundations are the primitives — colour, type, spacing, shape, motion.
Everything else composes from them.
Logo covers the mark, the four lockups, and the rules that keep them legible.
Interface applies the foundations to screens: components, code surfaces,
dark mode, icons, and forms.
Collateral covers the artefacts that leave the product — decks, cards,
signatures, social imagery.
Governance covers licensing, trademark, the pre-launch legal assessment, and
asset provenance.
Source of truth
The canonical design documents live in brand/
in the repository — the HTML design-system documents, logo files, document
templates, and the token exports. This site is the readable presentation of
those sources, not a replacement for them.
1 - Foundations
The primitives — colour, typography, spacing, shape, and motion. Everything else composes from these.
Foundations are the values the rest of the system is built from. They are
deliberately small in number and fixed: a component may choose which token to
use, but it does not invent new ones.
1.1 - Colour
Three 12-step scales in two modes, their step roles, and the contrast rules that govern them.
The palette is three scales — midnight, orange, and slate — each
expressed as a 12-step ramp in a light and a dark variant. The step numbering
follows the Radix convention, which assigns every step a role. Using a step
outside its role is the single most common way to break the system.
Core colours
These are the named aliases most projects reach for first. They are shortcuts
into the scales, not a separate palette.
Primary
#1d3352
Text, headings, primary surfaces
Primary Light
#2b4d78
Hover states, dark-mode primary
Primary Dark
#132440
Dark backgrounds, navbar, code blocks
Accent
#E05232
CTAs, highlights, active states
Accent Light
#ea7558
Accent hover on dark, syntax strings
Accent Dark
#b84228
Accent pressed state
Accent Solid
#cc4528
Fill for solid controls with white text (4.72:1)
Secondary
#546a82
Supporting text, borders
Step roles
Every scale uses the same twelve roles in the same order:
Steps
Role
Used for
1–2
App and subtle backgrounds
Page and section surfaces
3–5
Element backgrounds
Component fills, hover, active
6–8
Borders
Subtle, default, and strong borders
9–10
Solid
Solid fills and their hover state
11–12
Text
Low-emphasis and high-emphasis text
Only 11 and 12 are text steps
Steps 8, 9, and 10 are border and solid-surface roles. They are not held to text
contrast thresholds and must not be used for body text. If you need dimmer text
than step 11, define a dedicated token and verify its contrast — see
the code-comment token for a worked
example.
Midnight
Midnightlight · step 9 #1d3352
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Midnightdark · step 9 #1d3352
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Midnight is the primary. It carries structure, text, and the calm end of the
system. Step 9 (#1d3352) is the brand primary and is identical in both modes.
Orange
Orangelight · step 9 #E05232
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Orangedark · step 9 #E05232
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Orange is the accent. It marks the primary action, the active state, and little
else. Step 9 (#E05232) is constant across modes.
Do
Use orange for the single most important action in a view, active navigation
state, and focus emphasis.
Don't
Use orange for large background fills, body text, or more than one competing
call to action on the same screen.
Slate
Slatelight · step 9 #546a82
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Slatedark · step 9 #546a82
1App bg
2Subtle bg
3Elem bg
4Hover bg
5Active bg
6Subtle brd
7Border
8Strong brd
9Solid bg
10Solid hvr
11Lo text
12Hi text
Slate is the secondary — supporting text, borders, and neutral surfaces. Step 9
(#546a82) is the brand secondary and is constant across modes.
Contrast rules
Never use pure #000 or #fff as text. Use step 12 of the relevant
scale: #142438 on light, #c5daf0 on dark.
Step 9 is constant across modes. The solid accent does not shift when the
theme changes.
Body text targets 4.5:1, large text (≥24px, or ≥18.66px bold) targets 3:1.
Verify against the actual surface. A step that passes on the app
background may fail on an elevated panel.
Where an identity colour cannot carry text
Being the brand colour does not make a value a legible background. White on
orange-9 (#E05232) measures 3.87:1 — fine as a mark or a border, but
below the floor for button labels. Rather than dilute the accent, the system
adds a separate fill for that job:
Token
Hex
With white text
--color-accent
#E05232
3.87:1 — identity only, not for text
--color-accent-solid
#cc4528
4.72:1 — solid controls
--color-accent-dark
#b84228
5.46:1 — hover and pressed
The same principle produced the
code-comment token: when no existing
step can do the job accessibly, name a new one rather than misuse a step.
Semantic colours are mode-specific
The callout hues are tuned for dark text on tinted light backgrounds. Used
as foregrounds on the dark app surface they fall below AA, so dark mode has its
own set:
Role
Light
Dark
On #0e1720
Success
#2f7d65
#6cc090
3.65:1 → 8.24:1
Warning
#8b6508
#e0a92a
3.41:1 → 8.50:1
Danger
#a8261c
#f08b80
2.55:1 → 7.49:1
Info
#3a5a82
#8aacc8
2.55:1 → 7.59:1
Dark mode
Both modes are equally supported. See
Dark mode for the implementation
rules — theme switching, persistence, image treatment, and the always-dark code
surface.
1.2 - Typography
Three typefaces, three jobs, and a fixed type ramp.
The system uses three typefaces, each with one job. All three are licensed under
the SIL Open Font License 1.1 and served from Google Fonts, so there are no
bundled font binaries to license or redistribute.
Every row below is set in the family, size, weight, and line-height it
documents — this is the live specimen, not a picture of one.
Display · 48/800/1.1
Redesigning work
H1 · 36/700/1.15
Agent-first consulting
H2 · 28/700/1.2
Composable infrastructure
H3 · 22/600/1.25
How the system fits together
H4 · 18/600/1.3
Working in the open
H5 · 15/600/1.35
Supporting detail
Body L · 16/400/1.65
Augmenting people's strengths through composable Cloud, Agile, and Agentic AI infrastructure.
Caption · 12/400/1.5
Figure 1 — pipeline stages and their policy gates.
Overline · 11/600/1.3
SECTION LABEL
Code · 13/400/1.6
createPipeline({ policy: "strict" })
Rules
Letter-spacing tightens to −0.3px above 20px. Large type set at default
tracking reads loose and unresolved.
Overline is a label, not a heading. 11px, 600, uppercase, 0.08em tracking.
Use it above a heading, never as one.
Body copy is 16px / 1.65. This is the reading size for documentation and
long-form prose. Do not set body text below 14px.
Never set body copy in Plus Jakarta Sans, and never set headings in
Source Sans 3. The split is what makes the voice recognisable.
Do
Pair an overline with an H2 to label a section. Keep the ramp intact — skip
sizes rather than inventing intermediate ones.
Don't
Introduce a fourth typeface, use a weight outside the listed set, or fake a
weight with font-synthesis.
1.3 - Space, shape, and motion
The 4px spacing base, the radius and elevation ladders, and the motion tokens.
Spacing
A 4px base with a nine-step scale. Every margin, padding, and gap resolves to
one of these values.
Token
Value
Typical use
--space-1
4px
Icon-to-label gaps
--space-2
8px
Tight component padding
--space-3
12px
Control padding
--space-4
16px
Default element spacing
--space-5
24px
Card padding, paragraph rhythm
--space-6
32px
Component separation
--space-7
48px
Sub-section separation
--space-8
64px
Section separation
--space-9
96px
Page-level bands
Content sits inside a 1100px measure. Wider viewports gain margin, not
line length.
Radius
Token
Value
Applied to
--radius-sm
3px
Tags, chips, small indicators
--radius-md
6px
Buttons, inputs, code blocks
--radius-lg
9px
Cards, panels
--radius-xl
13px
Large panels, modals
--radius-full
9999px
Pills, avatars
Radius is a signal of scale: the larger the surface, the larger the radius.
Mixing radii on nested surfaces reads as a mistake — a 6px control inside a 9px
card is correct; a 13px control inside a 6px card is not.
Elevation
Four levels. Shadows are soft and low-contrast; the system leans on borders and
surface tint before it reaches for shadow.
Token
Value
Applied to
--shadow-0
none
Flat surfaces, default
--shadow-1
0 1px 3px rgba(0,0,0,0.06)
Cards at rest
--shadow-2
0 4px 12px rgba(0,0,0,0.08)
Hover, dropdowns
--shadow-3
0 8px 24px rgba(0,0,0,0.12)
Modals, popovers
In dark mode, elevation is expressed by lightening the surface rather than
deepening the shadow — a shadow on a near-black background is invisible.
Motion
Things slide into place. They do not bounce.
Durations
Token
Value
Use
--duration-micro
100ms
Colour and opacity changes
--duration-standard
200ms
Hover, focus, small moves
--duration-expand
300ms
Height and width changes, accordions
--duration-page
400ms
Route and view transitions
Easing
Token
Value
Use
--ease-out
cubic-bezier(0.33, 1, 0.68, 1)
Entering — arriving on screen
--ease-in
cubic-bezier(0.32, 0, 0.67, 0)
Exiting — leaving screen
Radius ladder — 3 / 6 / 9 / 13 / full
sm 3px
md 6px
lg 9px
xl 13px
full
Elevation — shadow-0 through shadow-3
shadow-0
shadow-1
shadow-2
shadow-3
Motion — slides into place, never bounces
200ms · ease-out — entering
100ms · colour and opacity
Motion rules
All animation wraps in @media (prefers-reduced-motion: no-preference), or is
disabled under prefers-reduced-motion: reduce.
CSS-only for HTML. For React, use Framer Motion with these same timing values.
Use --ease-out for anything appearing and --ease-in for anything leaving.
Keep durations on the ladder.
Don't
Add spring or bounce easing, animate layout-shifting properties, or exceed 400ms
for any single transition.
2 - Logo
The mark, the four lockups, and the rules that keep them legible.
The mark is a stencil peony bud — concentric petal cuts resolving to an accent
centre. It reads as a single form at 16px and holds its internal structure at
poster scale.
2.1 - Lockups
Four approved lockups, rendered live, and where each one belongs.
Four lockups are approved. Each has a defined context; using one outside its
context is what makes a layout feel off-brand even when the colours are right.
All four are built with HTML and CSS rather than flattened artwork, so spacing
comes from natural text flow and never needs re-kerning.
The four lockups
Two-line (default) and one-line
projectious· workTwo-line · headers, slides, cards · min 120px
projectious · workOne-line · navbars, footers, signatures · min 140px
Dot-replace and stacked
projectiousworkDot-replace · compact horizontal · min 160px
Every lockup has a light-surface and a dark-surface rendering. The mark’s inner
cuts pick up the surface colour, so it never needs a plate or a knockout box.
The same lockup on both surfaces
projectious · work
projectious · work
The mark alone
The mark may stand alone only where the wordmark is already established
nearby — an app icon on a page that names the product, an avatar in a
signed-in context, a favicon.
Standalone mark — 96 · 64 · 48 · 32 · 24 · 16px
Minimum for the standalone mark is 24px. The 16px rendering exists for
favicons only, where the browser supplies the name.
Product line
Product names extend the wordmark with the same dot construction and flow.
The separator between “projectious” and “work” is a dot in the mark’s own
geometry, not a typed period. It takes slate on light surfaces and midnight-11
on dark. Spacing is handled by flex layout so the wordmark reflows naturally —
do not hand-kern it or convert it to a static image.
The wordmark keeps the accent
“work” is set in orange-9 (#E05232). As body text that value would be too
low-contrast, but WCAG 2.1 SC 1.4.3 exempts logotypes — “text that is part of a
logo or brand name has no minimum contrast requirement”. The wordmark is the one
place the identity accent is used as letterforms.
Do
Use the two-line lockup unless the space is explicitly horizontal. Let the flex
layout handle spacing.
Don't
Rebuild a lockup by hand, change the order of mark and wordmark, or set the
wordmark in a different typeface.
2.2 - Usage
Clear space, minimum sizes, monochrome variants, and placing the mark on colour and photography.
Clear space
Exclusion zone — 1x the icon height on every side
Nothing enters the dashed zone
Minimum clear space is 1× the icon height on all sides. Nothing — text,
rules, image edges, other logos — enters that exclusion zone.
At a 40px mark, that is 40px of clear space in every direction. The zone scales
with the mark, so it never needs recalculating per context.
Minimum sizes
Minimum sizes — 48 / 32 / 24 / 16px
48px
32px
24px — minimum
16px — favicon only
Variant
Minimum
Icon (standalone)
24px — 16px for favicons only
Stacked lockup
60px
Two-line lockup
120px
One-line lockup
140px
Dot-replace lockup
160px
Below these sizes the petal cuts collapse into a smudge. If the space is smaller
than the minimum, use a smaller variant rather than scaling one down.
Monochrome
Four monochrome treatments are approved, for print, fax, embossing, and any
single-colour reproduction:
Monochrome variants
Midnight
Black
White reversed
Grey
Variant
Mark
Inner lines
Surface
Midnight
#1d3352
White
Light
Black
#000000
White
Light
White reversed
#ffffff
Slate
Midnight
Grey
#9299a4
White
Light
The white-reversed variant uses slate for its inner lines rather than the
background colour, so the petal structure stays visible. All petal structure
must remain legible in every monochrome variant — a solid silhouette is not an
approved treatment.
On colour
Placing the mark on colour
Lighter than slate-5 -> light mark
Darker -> dark mark
On accent → white ring
On photography -> midnight backing
Background
Treatment
Lighter than slate-5
Light-surface mark
Darker than slate-5
Dark-surface mark
Accent (#E05232)
Mark with a white ring border
Photography
Semi-transparent midnight backing behind the mark
The slate-5 threshold is the decision rule: measure the background, pick the
side it falls on. On the accent, neither variant has enough separation on its
own, which is why the ring exists.
On photography
Never place the mark directly on an unmodified photograph. Apply a
semi-transparent midnight backing — a shape, a scrim, or a gradient — so the
mark sits on a controlled surface. The backing is part of the logo treatment,
not an optional enhancement.
Watermark
Watermark — uniform wash, no accent
For background use, the mark may run as a watermark at 8–15% opacity. It
renders as a uniform wash: no accent colour in watermark mode, since a
single coloured element at low opacity reads as a printing error.
Favicons
Icon-only, on a midnight tile, with 12% padding. Corner radius scales with
size:
Favicon tiles — 12% padding, radius scales with size
48px / r8
32px / r4
16px / r2
Size
Radius
16px
2px
32px
4px
48px
8px
180px
36px
Do
Measure the background against slate-5 before choosing a variant. Keep the full
clear-space zone even when layout is tight.
Don't
Recolour the mark outside the approved variants, add effects (shadow, glow,
outline, gradient), rotate or skew it, or place it on a busy photograph without
a backing.
2.3 - Files
Delivered formats, when to use each, and where to download them.
Formats
Format
Contents
Use for
SVG
Vector source
Primary for web and print
PNG @1x
16 / 32 / 48 / 64 / 128 / 256 / 512px
Native-resolution raster
PNG @2x
2× pixel dimensions
Retina — required for web
PNG @3x
3× pixel dimensions
Super-retina — mobile
ICO
Multi-resolution (16 + 32 + 48)
Favicon
apple-touch
180×180 PNG
iOS home screen
SVG is the source. Raster exports exist for contexts that cannot take vector —
prefer SVG wherever the medium allows it.
Variants
Each raster size ships in five variants:
icon-light — for light surfaces
icon-dark — for dark surfaces
icon-mono-black — single-colour black
icon-mono-white — single-colour white, reversed
icon-mono-gray — single-colour grey
Downloads
The logo files are served from this site and are also in the repository under
brand/logo/.
Logo files are brand assets, not MIT-licensed code. You may reference and
display them under the terms in
Licensing; you may not modify
them or use them to imply endorsement. See also the
Trademark guidelines.
3 - Interface
The foundations applied to screens — components, code surfaces, dark mode, icons, and forms.
Interface guidance applies the foundations
to working software. Where a component appears here, its measurements are
normative — a 40px input is 40px, not “about 40px”.
3.1 - Components
The component set as live specimens — buttons, inputs, cards, tables, navigation, feedback, overlays, and data display.
Every specimen on this page is live markup styled by the brand tokens, ported
from brand/html/projectious-kitchen-sink.html. They follow your colour mode —
switch the theme and they change with the documentation.
Measurements listed here are normative: a 40px input is 40px.
Buttons
Five variants, three sizes. Plus Jakarta Sans 600, 6px radius, 200ms transitions.
Variants — medium (40px)
Sizes — sm 32px · md 40px · lg 48px
On a midnight surface
Variant
Fill
Border
Text
Contrast
Use
Primary
midnight-9
none
white
12.75:1
Default action
Accent
accent-solid#cc4528
none
white
4.72:1
The single most important action
Outline
transparent
1.5px orange-9
orange-11
5.13:1
Secondary action
Ghost
transparent
1px border
slate-9
—
Tertiary, toolbars
Danger
#a8261c
none
white
7.10:1
Destructive action
Accent buttons fill with accent-solid, not step 9
orange-9 (#E05232) is the identity accent and is unchanged as a mark,
border, active state, or syntax colour. But white on it measures 3.87:1 —
below the 4.5:1 floor for 13–14px labels. Solid accent controls therefore fill
with --color-accent-solid (#cc4528), white at 4.72:1; hover
continues to accent-dark (#b84228, 5.46:1).
Do
Use exactly one accent button per view. Give every button a verb — “Deploy”,
“Save changes”.
Don't
Place two accent buttons side by side, or use a danger button for a reversible
action.
Inputs
Default height 40px (sm 32, lg 48). Source Sans 3 at 13px, slate-7 border,
and a 2px focus ring at midnight 15% alpha.
Text, textarea, select
States — default, focus, error, disabled
Defaultslate-7 border
Focusmidnight-9 + 2px ring
ErrorAgent identifier is incomplete.
Disabledslate-4 bg, cursor not-allowed
Checkbox, radio, toggle, slider
On Off
Full rules — labels, validation, focus — are on
Forms.
Cards
Radius 9px, padding 24px, 1px slate-4 border, shadow-1 at rest. Nested
controls step down one radius.
Basic, with image, with actions
Validate & deploy
Runs policy checks before promoting to staging.
Image / diagram
Architecture
Nodes, flows, and policy gates.
Agent: auditor
Idle for 2 hours.
Tables
Header cells use the overline style. Striping uses the subtle background step,
never a border-only rule. Wide tables scroll inside their own container.
Data table with sort indicator
Pipeline
Policy
Agents
Status
validate-deploy
strict
2
Healthy
nightly-audit
advisory
1
Degraded
release-train
strict
4
Blocked
Table with search and filters
A toolbar above the table carries the search field and filter chips. Active
filters are shown as removable chips so the current view is always legible —
never leave a filter applied with no visible indication.
Search, filter chips, pagination footer
Pipeline
Policy
Owner
Status
release-train
strict
platform
Blocked
nightly-audit
strict
security
Failed
Multi-level headers
Grouped columns use a two-row header. The group row is centred over its span and
separated by a vertical rule — the only place the system uses one.
Two-row header with column groups
Pipeline
This week
Last week
Runs
Pass
p95
Runs
Pass
p95
validate-deploy
412
98.1%
4m12s
388
97.4%
4m40s
nightly-audit
7
71.4%
18m03s
7
85.7%
17m22s
release-train
14
92.9%
9m51s
12
91.7%
10m08s
Grouped rows and totals
Row groups act as sub-headings inside the table. A totals row is separated by a
2px rule — heavier than the body rules, so it reads as a summary rather than
another record.
Row groups, indented children, totals
Workload
Runs
Cost
Platform
validate-deploy
412
€48.10
release-train
14
€12.60
Security
nightly-audit
7
€21.40
secret-scan
96
€9.05
Total
529
€91.15
Wide tables
A wide table scrolls inside its own container, never the page, and pins its
first column so the row identity stays visible while scrolling.
Horizontal scroll with a sticky first column
Pipeline
Policy
Owner
Runs
Pass
p50
p95
Region
Status
validate-deploy
strict
platform
412
98.1%
2m01s
4m12s
eu-central
Healthy
nightly-audit
strict
security
7
71.4%
11m40s
18m03s
eu-west
Degraded
Do
Right-align numeric columns and set them in IBM Plex Mono so digits line up.
Show the active filter state and the result count together.
Don't
Add vertical rules between ordinary columns, let a wide table scroll the whole
page, or apply a filter without a visible chip saying so.
$ tofu apply -auto-approve Plan: 3 to add, 0 to change, 0 to destroy. ✓Policy check passed ●Deploying to staging…
3.2 - Dark mode
Both modes are equally supported. The implementation rules that keep them in step.
Dark mode is not a variant of the brand — it is half of it. Both modes are
designed, tested, and shipped together.
Implementation rules
Default follows prefers-color-scheme, with a manual override toggle
persisted to localStorage.
CSS custom properties swap per theme. Components read tokens; they do not
branch on the mode themselves.
Step 9 (solid accent) stays constant across modes.#E05232 is #E05232
everywhere.
No pure #000 or #fff as text. Use step 12 — #c5daf0 on dark,
#142438 on light.
Images get a subtle overlay (black at low alpha) in dark mode, so a bright
photograph does not punch a hole in a dark page.
Code blocks are always dark, regardless of mode. See
Code.
The same card in both modes
Light mode
Body text is midnight-12; supporting copy is slate-11.
Deploy
Dark mode
Never pure white — midnight-12 from the dark scale.
Deploy
Surfaces
Elevation in dark mode is expressed by lightening the surface, not by
deepening the shadow — a shadow against a near-black background is invisible.
Layer
Light
Dark
App background
#ffffff
midnight-dark-1#0e1720
Subtle surface
midnight-1
midnight-dark-2#131e2b
Raised surface
midnight-2
midnight-dark-3#1a2b3e
Restating text on dark surfaces
The default heading colour is midnight-9, chosen so headings read correctly on
light pages. That same value on a midnight surface is invisible — #1d3352 on
#1d3352 is a contrast ratio of 1.00:1.
Any component that paints its own dark background must therefore restate its
text colours. This applies to covers, dark boxes, footers, and overlays:
.surface--dark{--bs-body-color:#c5daf0;// midnight-dark-12
--bs-heading-color:#c5daf0;--bs-secondary-color:#97a8b8;// slate-dark-11, still AA
}
Do
Test every surface in both modes. Restate text colours on any component that
sets its own dark background.
Don't
Ship a component that only works in one mode, or use pure black or white as a
text colour in either.
3.3 - Code
The always-dark code surface and the syntax theme, with measured contrast for every token.
Code blocks are always dark
Code blocks stay dark regardless of colour mode. A code surface that flips
with the theme forces the syntax palette to be designed twice and makes
screenshots inconsistent between users. The surface is midnight-2 from the
dark scale (#131e2b) in both light and dark mode.
The block you are reading is rendered by that rule:
Because the surface is always dark, every syntax value is read from the dark
scale. Contrast is measured against #131e2b:
Token
Step
Hex
Contrast
WCAG AA
Identifiers
midnight-12
#c5daf0
11.74:1
Pass
Numbers
orange-11
#f09878
7.58:1
Pass
Keywords
midnight-11
#8aacc8
7.06:1
Pass
Operators
slate-11
#97a8b8
6.90:1
Pass
Strings
orange-light
#ea7558
5.76:1
Pass
Comments
code-comment
#72889d
4.59:1
Pass
Why comments have a dedicated token
Comments are the one syntax role with no scale step available to it.
Code comments are ordinary 13px text, so they need 4.5:1. The obvious
candidate, slate-8, measures only 3.02:1 on this surface — and it is a
border step, not a text step (see step roles).
The next steps up are no better: slate-9 is 3.01:1 and slate-10 is 3.78:1,
both also non-text roles. The first step that clears AA, slate-11, is already
spoken for by operators, and reusing it would erase the distinction between a
comment and an operator.
So code-comment (#72889d, 4.59:1) exists as a dedicated syntax token —
the dimmest value that clears AA while staying visibly below operators. It is
not a scale step and should not be treated as one.
Do not read text colours off steps 8–10
Steps 8, 9, and 10 are border and solid-surface roles across all three scales.
Where a text role needs a value between step 10 and step 11, define a named
token and record its measured contrast — as code-comment does.
Inline code
Inline code does not take the dark block treatment — it follows the
surrounding surface. On light surfaces it sits on midnight-2 (light scale)
with orange-11 text; in dark mode both values shift to their dark-scale
counterparts. It uses IBM Plex Mono at 13px with a 3px radius.
Terminal output
Terminal blocks use the same dark surface. Prompts take the comment colour,
output takes the operator colour, so a transcript stays readable without
becoming a second syntax theme.
$ hugo --gc --minify
Start building sites …
Total in 842 ms
3.4 - Icons
Lucide as the icon library, and how icons are sized and coloured.
Library
The system uses Lucide — an actively maintained fork
of Feather with over 1,400 icons.
Property
Value
Licence
ISC (functionally equivalent to MIT)
Commercial use
Permitted
Attribution
Not required in product UI; retain the notice in source
Modification
Permitted
ISC is one of the most permissive open-source licences available, which is why
it was chosen over icon sets with attribution or share-alike terms. See the
legal assessment for the
clearance detail.
Sizes on the 4px grid — 16 / 20 / 24 / 32px
16
20 — default
24
32
accent — primary action
Icon with a label, and an icon button
Policy enforced
Usage
Stroke width 2, matching Lucide’s default. Do not thin or thicken strokes
to “match” a layout.
Size on the 4px grid: 16, 20, 24, 32px. 20px is the default for inline UI.
Colour follows text. An icon beside a label takes the label’s colour.
Standalone icons carrying meaning take --color-secondary; an icon marking
the primary action takes the accent.
Icons are not decoration. Every icon must carry meaning the label does not
already carry, or be marked aria-hidden="true".
Do
Pair icons with text labels wherever the meaning is not universally understood.
Give standalone icon buttons an accessible name.
Don't
Mix icon sets, recolour icons to arbitrary hues, or use an icon as the only
indicator of state.
3.5 - Forms
Input sizing, labels, focus, error, and disabled states.
Labels use the overline style and sit above the field. Floating labels
are not used anywhere in the system — they hide the label at exactly the moment
the user is filling the field, and they break at long label lengths.
These patterns are Projectious organization assets. Bernhard Gerlach’s
personal LinkedIn profile is a separate identity: use his name, portrait, and
first-person voice only with his approval. Do not turn a personal profile into
an organization-brand channel or imply personal endorsement.
4.1 - Status treatments
Text-first maturity labels for truthful portfolio presentation.
Required pattern
Every project presentation must show a status as text. Color, icons, position,
and motion may reinforce the label but must never replace it.
Status
Use when
Supporting cue
Usable project
Documented users can complete the stated core task.
Solid dot
Working prototype
A real implementation runs, with known limits.
Half-filled dot
Applied research
Evidence or experiments are the primary output.
Diamond
Supporting asset
The repository enables another project.
Square
Idea / implementation starting
Scope exists; implementation is absent or partial.
Ring
Archived
Work is preserved but no longer maintained.
Horizontal bar
Do not substitute broad claims such as “platform”, “production-ready”, or
“enterprise” unless the owning repository publishes evidence for that claim.
Prefer narrow artifact categories: CLI, process layer,
applied research, prototype, library, or supporting asset.
Accessibility
Keep the full status label visible at all viewport sizes.
Pair every color with the status-specific shape in the table.
Use normal text contrast of at least 4.5:1 and large-text/UI contrast of at
least 3:1.
Test light and dark variants independently.
Do not encode a status change with animation alone.
The source templates use high-contrast neutral text and reserve accent color
for a supporting rule. Maintainers must rerun local validation after changing
colors.
Project examples
Examples are prompts for maintainers, not permanent factual claims. Confirm
each status and limitation with the owning repository before publishing.
Project
Narrow category
Example status line
Required limitation
aibox
CLI
Usable project
State supported hosts and providers.
processkit
Process layer
Working prototype
State current API/version constraints.
ai-market-research
Applied research
Applied research
State dataset date and methodology limits.
KubeClaw
Prototype
Idea / implementation starting
State which flows are implemented.
4.2 - Social previews
Repository artwork that states category and maturity plainly.
Content model
Every 1280×640 preview contains only:
Projectious organization mark and name.
Project name.
One narrow artifact category.
One complete maturity label from the status vocabulary.
An optional short limitation, never a marketing claim.
The editable source is
brand/portfolio/social-preview-template.svg. Replace bracketed text, keep
the status label intact, and save a project-specific SVG beside the template.
Examples for aibox, processkit, ai-market-research, and KubeClaw demonstrate
the content structure; they are not evidence of current maturity.
Export and validation
Run:
npm run portfolio:validate
npm run portfolio:export
The export script uses resvg when available and otherwise leaves the SVG
source as the canonical reusable asset. Commit generated PNGs only when a
repository needs them.
Source and generated exports use this repository’s split license. The
Projectious name and marks remain subject to TRADEMARK.md. Record any
third-party typeface, icon, logo, or screenshot in brand/PROVENANCE.md
before use. The supplied templates contain no third-party logos or
screenshots.
4.3 - Diagrams and demos
Evidence-first architecture, flow, screenshot, and demo framing.
Architecture and flow diagrams
Prefer left-to-right flow, explicit boundaries, and named protocols.
Distinguish implemented components from planned components with text:
implemented, external, or planned.
Add a caption with repository, source path, commit or release, and capture
date.
Never infer architecture from a social preview or marketing page.
Keep editable source beside the export and document the export command.
Suggested caption:
Source: owner/repository, docs/architecture.svg, release vX.Y.Z,
captured YYYY-MM-DD. Planned elements are labelled.
Screenshots and demos
Show real output from a named build, commit, or release.
Frame the output without modifying product state or hiding errors.
State sample/synthetic data clearly.
Do not fabricate dashboards, terminal output, customer logos, or product UI.
Crop personal data, tokens, account identifiers, and unrelated windows.
Record capture command, viewport, theme, and date in provenance.
When there is no real output yet, use a text-first project card labelled
Idea / implementation starting. A truthful absence is better than a
fictional interface.
5 - Media
Motion, audio, video, photography, and presentation guidance.
Media guidance covers everything with a time dimension or a photographic
surface — the places where the system meets material it does not fully control.
5.1 - Audio and video
Sonic identity and video production rules.
Audio identity
Four defined cues. All are short, tonal, and mid-register — the audio equivalent
of “slides into place, doesn’t bounce”.
Cue
Sound
Length
Notification
Short tonal chime, mid-register
200ms
Success
Ascending C→E, warm sine wave
—
Error
Single low A2
300ms
Podcast intro
Ambient pad, tension→warmth resolve
3s
Error is a single low note, not a buzz or a descending pair — it marks the event
without scolding.
Video rules
Demos run at real time. No fast-forward, no speed ramps. If a step is
slow, that is information the viewer needs.
Transitions are a cut or a 200ms fade. No swoops, wipes, or 3D moves.
All video uses midnight surfaces.
Subtitles are always available.
Export at 1080p minimum, 4K when possible.
Do
Show the real thing at real speed. Caption everything.
Don't
Speed up a demo to hide latency, or use a transition that draws attention to
itself.
5.2 - Photography and illustration
Sourcing rules, treatment, and the abstract illustration style.
Sources
Preferred: Unsplash and Pexels — royalty-free, no attribution required for
commercial use. Commission custom photography where possible, from local
European photographers.
Never use: watermarked Shutterstock or Getty imagery, or AI-generated
imagery.
Every photograph must pass the test: “would a developer trust this?” Stock
imagery of handshakes in glass lobbies fails it. A real desk, real hardware, or
real people working passes it.
Treatment
Photographs in dark mode receive a subtle black overlay so they do not punch a
hole in the page.
The logo never sits directly on an unmodified photograph — see
Logo usage.
Never place text over a busy region. Add a scrim or crop to a quiet area.
Illustration
The illustration style is abstract system diagrams — nodes, flows, and
pipelines drawn in the brand palette.
Midnight for structure, slate for supporting lines, accent for the single
element that matters.
Dashed strokes indicate inferred or optional relationships.
Labels use Source Sans 3; never letter-space diagram labels.
Diagrams are line-based, not filled — the system reads as engineering
drawing, not infographic.
Do
Draw the actual architecture. Use accent once per diagram, on the element the
reader should look at first.
Don't
Use isometric 3D illustration, gradient-filled shapes, or generic “tech” clip
art.
5.3 - Presentations
Slide templates, animation, and the core deck structure.
Core slides
Six slide types cover most decks:
Slide
Purpose
Title
Deck opening — display type on midnight
Section statement
A single sentence marking a new section
Three-up
Three parallel points
Quote
A single quotation, attributed
Code showcase
Code on the always-dark surface
CTA closer
The one thing you want the audience to do
Core slide types — 16:10
Redesigning work
Cloud · Agile · Agentic AI
projectious.work
Bad software is a decision, not a constraint.
The agent-first approach
DefineBuildDeploy
"We run what we recommend."
// pipeline createPipeline({ policy: "strict" });
Let's talk
projectious.work
The full deck
Twelve slide types cover a complete talk. Each is 16:10 and uses the same
tokens as the product surfaces — no separate “presentation theme”.
Opening — title, agenda, section statement
Redesigning work
Cloud · Agile · Agentic AI
Agenda
01 Why agent-first
02 Architecture
03 Operating model
04 What it costs
Bad software is a decision, not a constraint.
Content — three-up, split, comparison
The agent-first approach
DefineBuildDeploy
Before
Manual gates, tribal knowledge, slow feedback.
After
Policy as code, repeatable runs, fast feedback.
Where the time goes
Review
42%
Build
31%
Deploy
27%
Evidence — metric, quote, code, diagram
1,284
Runs this week
"We run what we recommend."
// pipeline createPipeline({ policy: "strict" });
Architecture
Closing — CTA and contact
Let's talk
projectious.work
Thank you
info@projectious.work
Slide
Purpose
Title
Deck opening — display type on midnight
Agenda
Numbered outline; current item in midnight-11
Section statement
A single sentence marking a new section
Three-up
Three parallel points
Split
Before/after or contrast, one half on midnight
Comparison
A small table where numbers are the point
Metric
One number, large; the label in overline style
Quote
A single quotation with the accent rule, attributed
Code showcase
Code on the always-dark surface
Diagram
Line-based system diagram, accent on the focal node
CTA closer
The one thing you want the audience to do
Contact
Thank-you and a single contact route
Rules
16:10 aspect ratio.
Title slides and section statements use midnight surfaces; content slides use
white or midnight-1.
projectious.work is visible on the title and closing slides.
One idea per slide. If a slide needs a paragraph, it needs to be two slides.
Animation
Slide transitions: cut or 200ms fade.
Build animations use --ease-out at --duration-standard.
Never animate text character-by-character.
Motion is for revealing structure, not for holding attention.
Templates
Document templates for LaTeX and Typst are in
brand/templates/.
Both embed brand identity and fall under the brand-asset licence terms — see
Licensing.
6 - Collateral
Artefacts that leave the product — cards, signatures, and social imagery.
Collateral is where the brand travels without its context. These artefacts are
often seen once, at small size, next to other companies’ material — so they lean
harder on the mark and the wordmark than in-product surfaces do.
6.1 - Business card
The digital-first vCard, shared by QR code or link.
The primary format is digital — a vCard shared via QR code or direct link,
not a printed card.
Digital vCard
projectious · work
Bernhard Gerlach
Cloud · Agile · Agentic AI
info@projectious.work
projectious.work
Layout
Midnight surface, mark top-left, name in Plus Jakarta Sans 700.
Role in Source Sans 3 400, in slate-dark-11.
Contact rows in IBM Plex Mono at 11px — addresses and handles are data, and
monospace makes them scannable and unambiguous.
projectious.work always present.
Accent used once, on the QR frame or the primary contact method.
Print fallback
If a printed card is required:
85×55mm, matte stock.
Single-colour midnight on uncoated white, or reversed white on midnight.
Use the monochrome mark — no accent on
press unless a spot colour is budgeted.
Respect the 1× clear-space rule; do not bleed the mark to the trim edge.
6.2 - Email signature
A compact signature that survives every mail client.
The signature is built to work in clients with hostile CSS support — Outlook
included. The source is
brand/email/signature.html.
Table-based layout. Flexbox and grid do not survive Outlook.
Inline styles only. Most clients strip <style> blocks.
Web-safe font fallbacks. Brand fonts will not load in most clients — the
stack must degrade to a system sans without breaking the layout.
The mark is a hosted PNG, not an SVG and not a data URI. Include alt
text; many clients block images by default.
No background images. Use a solid bgcolor attribute.
Content
One line each: name, role, projectious.work, and a single contact method.
The one-line lockup is used here — the signature is a horizontal context.
Do
Test in Outlook, Gmail web, and Apple Mail before shipping a change. Keep the
signature under four lines.
Don't
Add social icon rows, legal disclaimers, quotations, or “please consider the
environment” footers.
6.3 - Social and OG images
Templates for LinkedIn, GitHub, blog headers, and Open Graph cards.
Priority
LinkedIn and GitHub first, blog second, Twitter/X as backup. The templates
are sized for those surfaces in that order.
Template rules
Backgrounds are midnight or midnight-dark, or white with an accent top
bar.
projectious.work is always visible.
Never place text over a busy background.
An accent glow circle at subtle opacity provides visual interest without
competing with the text.
Typography hierarchy is unchanged: Plus Jakarta Sans for headlines, Source
Sans 3 for body.
Open Graph card — 1200x630
Bad software is a decision, not a constraint.
projectious.work · Cloud · Agile · Agentic AI
Open Graph
1200×630px.
Headline at Display weight, capped at roughly 60 characters — longer headlines
are truncated by most platforms anyway.
The mark sits bottom-left or top-left, never centred.
Test the rendering at 320px wide: most impressions are in a mobile timeline.
Do
Keep one message per card. Check contrast against the actual background, not the
design canvas.
Don't
Fill the card with a screenshot, use more than one accent element, or rely on
text smaller than 24px at 1200×630.
7 - Governance
Licensing, trademark, the pre-launch legal assessment, and per-asset provenance.
This section states what you may and may not do with the material in this
repository. It is deliberately explicit: a design system that is
source-available without clear terms is a liability for everyone who touches it.
7.1 - Licensing
A split licence — brand assets are proprietary, code and tokens are MIT.
The repository carries two categories of intellectual property under
different terms. The full text is in
LICENSE.md;
this page summarises it.
Brand assets — proprietary, source-available
Everything representing the visual identity: logos, brand imagery, and the
design-system documents under brand/.
Permitted
Download and view for personal reference, editorial reporting, or authorised partner use
Prohibited
Modification, derivative works, sale, or commercial use — including merchandise or software featuring these assets — without prior written consent
No impersonation
Use must not imply endorsement, affiliation, or ownership by anyone other than projectious.work
Document templates under brand/templates/ fall under these same terms: they
embed brand identity (colours, fonts, tagline). You may use them as structural
reference for your own templates, but not redistribute them with projectious.work
branding intact.
Code, scripts, and tokens — MIT
Source code, automation scripts, and configuration files (.py, .js, .sh,
.json, .yaml) are MIT-licensed: use, copy, modify, merge, publish,
distribute, sublicense, and sell, provided the copyright and permission notice
travel with the software.
The design tokens — brand/tokens/ — are in
this category. The values are free to use; the marks are not.
What this means in practice
Do
Use the token files, the spacing scale, and the component measurements in your
own work. Link to this documentation. Write about the brand editorially.
Don't
Ship the logo in your product, sell anything carrying the marks, or present
modified brand assets as projectious.work’s.
Guidelines for referring to projectious.work and using its marks.
The names, logos, and icons associated with projectious.work are its
trademarks. Full text:
TRADEMARK.md.
Not permitted
Using the logo as your own, or as part of your own logo.
Using the brand name in a way that suggests partnership or official status
without a signed agreement.
Registering domain names, social handles, or app names that include the
trademarks in a confusingly similar way.
Permitted
Linking to the official website.
Press articles or blog posts about the project.
Technical documentation that refers to the tools.
These are nominative uses — referring to the thing by its name. They do not
require permission, and they do not grant any broader licence.
When in doubt, ask
Unauthorised use of the trademarks may result in a request for removal.
Contact info@projectious.work before shipping anything you are unsure about
— asking first is always cheaper than a takedown.
7.3 - Legal assessment
Pre-launch clearance review of the name, mark, fonts, icons, and imagery sources.
A pre-launch review of the elements that carry legal risk. Source:
brand/html/projectious-legal-assessment.html.
Not legal advice
This is a design-side risk assessment, not a legal opinion, and it is not a
registered-trademark search. Obtain professional advice before relying on it for
a commercial launch.
Summary
#
Area
Verdict
1
Company name “projectious”
Low risk
2
Logo similarity — stencil peony bud
Low risk
3
Font licensing
Low risk
4
Icon library — Lucide
Low risk
5
Photography and imagery sources
Low risk
6
Other design elements
Low risk
Fonts
All three families are SIL Open Font License 1.1 and served from Google
Fonts. OFL permits commercial use, embedding, and redistribution; it forbids
selling the fonts on their own and requires that any derivative font use a
different name. Since the fonts are linked rather than bundled, no font binaries
are redistributed by this repository.
Icons — Lucide
ISC License, functionally equivalent to MIT: free commercial use,
modification, redistribution, sublicensing. No attribution required in product
UI — only the notice retained in source. Over 1,400 icons, actively maintained,
a fork of Feather with a broader community.
Photography
Source
Licence
Cost
Attribution
Commercial
Restriction
Unsplash
Unsplash License
Free
Not required
Allowed
No reselling as-is; no competing stock service
Pexels
Pexels License
Free
Not required
Allowed
No reselling; no implying endorsement
Both permit free commercial use without attribution for website imagery,
marketing, social posts, presentations, and blog posts. The binding restriction
is that you may not compile the images into a competing stock service.
Colour
Colours cannot be trademarked in the abstract — only in connection with specific
goods and services in specific contexts (Tiffany blue for jewellery being the
canonical example). The palette (#1d3352 midnight, #E05232 orange, #546a82
slate) uses common design colours and does not infringe any known colour
trademark in the IT consulting space.
Recommended actions before launch
Run a registered-trademark search in the operating jurisdictions.
Last reviewed 2026-07-26: no unlicensed, sensitive, or third-party binary
assets are committed to this repository. Every physically present file is
original.
Adding a bundled asset
If you commit a third-party binary — a font file, an icon SVG, an image — add a
row to brand/PROVENANCE.md recording its individual source, licence, and
attribution requirement. Do not rely on the summary tables above.
8 - Tokens
Machine-readable exports of the design values, and how to consume them.
The token files are the machine-readable form of the
foundations. They are MIT-licensed —
the values are free to use, the marks are not. See
Licensing.
Colour — the seven named aliases. The full 12-step scales are documented
on the Colour page; the token file
exports the named entry points.
Typography — the three font stacks.
Spacing — the nine-step 4px scale.
Radius — five steps.
Elevation — four shadow levels.
Motion — four durations, two easing curves.
Consuming them in SCSS
This site maps the tokens onto Bootstrap and Docsy variables in
src/assets/scss/_variables_project.scss.
That file is a worked example of wiring the brand into an existing component
framework — including the full 12-step scales in both modes, which the CSS
export does not carry.
The site is the test
This documentation is styled by those same SCSS files. If a token is wrong, this
page renders wrong — which is the point. There is no separate brand-site theme
that can drift away from the system it documents.