Dark, round, and violet —
in that order of importance.

The brand kit for CODECAVE. There is no light theme; the surfaces below are the default, not a mode.

02 — Palette

Six roles carry the brand

Depth never comes from contrast. The page is #0A0A0B and a card is #0F0F15 — one hair apart. What separates them is the 24px radius and a 1px #2B2848 hairline. Violet is an edge colour: it draws links, borders, eyebrows and the focus halo, and never fills a large area.

Surface primary
#0A0A0B

The page canvas — near-black, never pure black.

Heading / body
#F4F4F6

Headings and body text — 18.0:1 on the page.

Action
#5F20FE

Links, borders, eyebrows, focus halo — edges and marks only.

Surface secondary
#0F0F15

Cards and panels — one hair above the page.

Body secondary
#9595BB

Metadata and placeholders only — never long-form copy.

Surface quaternary
#2B2848

Hairline rules, dividers and card edges.

The full ramp

Two ramps ship in colors_and_type.css — twelve violet brand steps and thirteen grays, verbatim from the site's 2026 rebuild — plus single-use accents for the glow button, the gradient and the section glow. The six roles above are drawn from them.

03 — Typography

Satoshi, two weights

Regular 400 and Bold 700 carry everything. Production declares a single face with no weight descriptor, so live 700 text is browser-synthesized; this package binds the genuine cuts, which will read marginally tighter until production ships the same files. Fallbacks: system-ui, -apple-system, Segoe UI, Helvetica Neue, Arial, sans-serif.

Aa

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & @ # % — “ ” ‘ ’

RoleSpecimenSize / leading
heading-lg Ship it 56 / 130%
heading-md Section heading 44 / 115%
heading-sm Eyebrow lead 32 / 110%
stat 98% 36 / 40
lg Subsection heading 24 / 32
md Intro copy sits here. 20 / 28
base Body text and every button label. 16 / 24
caption Captions and form labels. 14 / 20

The eyebrow

The system's one typographic signature: a bold violet line over a larger light lead line. It opens nearly every section.

Cloud & DevOps Optimize costs without pausing delivery
04 — Components

Pill buttons, hairline cards

Every control is a 44px pill: padding: 4px 24px, border-radius: 9999px, 16px bold label. Hover raises contrast everywhere except the tertiary border, which production dims to #4004AF — reproduced faithfully, flagged in WEBSITE-REVIEW.md. Only :disabled reduces the label, to opacity 0.2. Rendered live from colors_and_type.css, so this row is a working check on the token file rather than a picture of one.

primary #5F20FE → #4004AF hover → #1E113B active
secondary #1E113B → #1C1C27 hover
tertiary Learn more 1px #5F20FE → #4004AF hover
disabled opacity 0.2 — the only state allowed to lose contrast

The one violet field

One primary action per page. The glow button is #9980FF with #1B0D4E text at 5.67:1, and it is the only place violet fills an area. Three light sources stack: a static halo, a highlight travelling under the fill, and an edge bloom 8px outside each end. The fill never changes colour on hover.

Surfaces

Default card

24px radius, 1px hairline, no shadow. Padding is bottom-heavy — 2rem 2rem 3rem — so a footer action has room to sit.

Article card

Same surface at a 36px radius. Radius is the loudest brand signal in the system.

Feature card

44px radius, no fill — a gradient hairline drawn with mask-composite over a blurred backdrop.

Input & chips

Straight from the contact form. The label lives inside the field (common/InputText.vue), bold at caption size with a violet asterisk, and the placeholder is a full sentence, not a format hint. Nothing pins the 64px height — it is 28px of top padding around one 24px text line plus 12px below. The chips are checkboxes (Checkbox.vue, secondary / small), not tags — they toggle.

Please enter a valid e-mail address.
Services

Focus is a violet halo — outline: none plus --shadow-input-focus — and the error state swaps the same halo red via --shadow-input-error. Everything else gets a 2px #B19AFE ring. Neither may be removed.

05 — Voice & tone

A small senior team, talking straight

First-person plural, present tense, short declaratives. Lead with the business outcome, then name the technology. Risk, cost and ownership are addressed head-on, because reassurance rather than excitement is what the audience is buying.

  1. Outcome before technology — every service is titled by what it produces, never by its stack.
  2. Risk is named, not hidden — NDA, scope, milestones and outcomes are stated upfront.
  3. One low-friction ask — a free consultation, requested through a single primary action per page.
  4. Evidence over adjectives — every figure carries a named source; nothing is claimed without one.
Use
  • Discuss project for free
  • Get a free consultation
  • Discuss partnership
  • Learn more
  • Tell us about your project
  • Optimize costs
  • payback
  • scope, milestones and outcomes upfront
  • Your idea stays yours
Avoid
  • world-class
  • best-in-class
  • cutting-edge
  • industry-leading
  • revolutionary
  • game-changing
  • synergy
  • paradigm
  • hard-sell urgency
  • invented metrics
06 — Layout posture

Round, asymmetric, lit from below

How a page is built, as opposed to what it is coloured. Every specimen below is drawn with the real token out of colors_and_type.css — a corner rounded at true size, padding at its literal value — rather than a picture of one.

The radius ladder

Radius is the loudest signal in the system, and a 4px corner does not occur anywhere in source. Measured census on the homepage: 24px on 42 blocks, 12px on 9, 44px on 8, 8px on 7, 120px on 2. Radii of 2–4px do not appear at all.

--radius-sm · 8px inputs, small chips
--radius-md · 12px inline chips, icon tiles
--radius-card · 24px the default card — 42 blocks
--radius-article · 36px article & insight cards
--radius-custom · 44px feature & testimonial cards
--radius-pill · 9999px every button, pill and avatar

The two section-panel steps — 64px below 768px, 120px at and above it — are missing from this row on purpose. They are sized for a full-width panel and read as a lozenge on a tile this small; they are shown at their real width two blocks down.

Section rhythm is asymmetric

200px of padding above a section, 120px below. Sections own their approach, not their exit — so vertical space never collapses into one shared symmetric gap. Drawn here at true size straight from --section-padding-top and --section-padding-bottom; the hatched bands are the padding.

200px above
07 — Next section the content box
120px below

The light comes from below

A section panel is #0A0A0B — the same value as the page behind it. Nothing separates the two but radius and light thrown upward: --shadow-section stacks three layers with negative Y offsets seeded from #281470. It is physically wrong and instantly recognisable. The stage below is one step lighter so the shoulder is visible; on the real site the glow alone finds the edge.

--shadow-section · 64px radius under 768px, 120px at and above
a conventional downward drop shadow — never ship this

What the posture forbids

  1. Depth never comes from contrast. The page is #0A0A0B and a card is #0F0F15 — one hair apart on purpose. If you are lightening a card to make it read, you have made a layout mistake, not a colour one.
  2. Only section panels are lit. Cards, inputs and buttons take no shadow at all — --shadow-section belongs to .section-container and nowhere else. The glow button's halo is a separate token with a separate job.
  3. The container is fixed at max-width: 1280px with gutters stepping 8px → 16px → 32px, and 768px is the one structural break in the whole system. Nothing else in the layout gets a second opinion about where to bend.
  4. One primary action per page. A long page may repeat the glow button once at the very end, never twice inside a viewport.
  5. There is no light theme. The black-ink logo variants in 01 are a bounded exception for print and cannot be generalised into one.