---
version: alpha
name: Sentri-Inspired-design-analysis
description: An inspired interpretation of Sentri's design language — a developer-tools brand built on a deep purple-violet midnight canvas, electric lime accents, and a slightly subversive illustrated personality. The system pairs a custom display sans (chunky, playful, near-condensed) with the open Rubik family for UI copy and Monaco for code, then leans on dark-on-light pricing surfaces, sticker-style mascots, and a single-color CTA hierarchy where black-violet buttons read as the primary action against either polarity.
colors:
primary: "#150f23"
ink-deep: "#1f1633"
on-primary: "#ffffff"
accent-lime: "#c2ef4e"
accent-pink: "#fa7faa"
accent-violet: "#6a5fc1"
accent-violet-deep: "#422082"
accent-violet-mid: "#79628c"
surface-canvas-dark: "#1f1633"
surface-canvas-light: "#ffffff"
surface-night: "#150f23"
surface-press-light: "#f0f0f0"
surface-press-stronger: "#efefef"
hairline-violet: "#362d59"
hairline-cool: "#cfcfdb"
hairline-cloud: "#e5e7eb"
ink: "#1f1633"
ink-press: "#1a1a1a"
on-dark-muted: "#bdb8c0"
on-dark-faint: "#3f3849"
ring-focus: "#9dc1f5"
typography:
display-hero:
fontFamily: "Sentri Display, Rubik, system-ui, sans-serif"
fontSize: 88px
fontWeight: 700
lineHeight: 1.2
letterSpacing: 0
display-large:
fontFamily: "Sentri Display, Rubik, system-ui, sans-serif"
fontSize: 60px
fontWeight: 500
lineHeight: 1.1
letterSpacing: 0
heading-xl:
fontFamily: "Rubik, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif"
fontSize: 30px
fontWeight: 500
lineHeight: 1.2
letterSpacing: 0
heading-lg:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 27px
fontWeight: 500
lineHeight: 1.25
letterSpacing: 0
heading-md:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 24px
fontWeight: 500
lineHeight: 1.25
letterSpacing: 0
heading-sm:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 20px
fontWeight: 600
lineHeight: 1.25
letterSpacing: 0
body-lg:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 16px
fontWeight: 400
lineHeight: 2.0
letterSpacing: 0
body-strong:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 16px
fontWeight: 600
lineHeight: 1.5
letterSpacing: 0
body-md:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 16px
fontWeight: 500
lineHeight: 1.5
letterSpacing: 0
eyebrow:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 15px
fontWeight: 500
lineHeight: 1.4
letterSpacing: 0
button-cap:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 14px
fontWeight: 700
lineHeight: 1.14
letterSpacing: 0.2px
button-cap-light:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 14px
fontWeight: 500
lineHeight: 1.29
letterSpacing: 0.2px
caption:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 14px
fontWeight: 400
lineHeight: 1.43
letterSpacing: 0
micro-cap:
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
fontSize: 10px
fontWeight: 600
lineHeight: 1.8
letterSpacing: 0.25px
code:
fontFamily: "Monaco, Menlo, Ubuntu Mono, monospace"
fontSize: 16px
fontWeight: 400
lineHeight: 1.5
letterSpacing: 0
code-strong:
fontFamily: "Monaco, Menlo, Ubuntu Mono, monospace"
fontSize: 16px
fontWeight: 700
lineHeight: 1.5
letterSpacing: 0
rounded:
xs: 4px
sm: 6px
md: 8px
lg: 10px
xl: 12px
xxl: 18px
full: 9999px
spacing:
xxs: 2px
xs: 4px
sm: 8px
md: 12px
lg: 16px
xl: 24px
xxl: 32px
section: 96px
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.button-cap}"
rounded: "{rounded.md}"
padding: 12px 16px
button-primary-pressed:
backgroundColor: "{colors.surface-press-stronger}"
textColor: "{colors.ink-press}"
typography: "{typography.button-cap}"
rounded: "{rounded.md}"
padding: 12px 16px
button-inverted:
backgroundColor: "{colors.on-primary}"
textColor: "{colors.ink-deep}"
typography: "{typography.button-cap}"
rounded: "{rounded.md}"
padding: 12px 16px
button-inverted-pressed:
backgroundColor: "{colors.surface-press-light}"
textColor: "{colors.ink-press}"
typography: "{typography.button-cap}"
rounded: "{rounded.md}"
padding: 12px 16px
button-ghost-on-dark:
backgroundColor: "{colors.on-dark-faint}"
textColor: "{colors.on-primary}"
typography: "{typography.button-cap}"
rounded: "{rounded.xl}"
padding: 8px
button-violet-token:
backgroundColor: "{colors.accent-violet-mid}"
textColor: "{colors.on-primary}"
typography: "{typography.button-cap-light}"
rounded: "{rounded.xl}"
padding: 8px 16px
button-disabled:
backgroundColor: "{colors.hairline-cloud}"
textColor: "{colors.on-dark-muted}"
typography: "{typography.button-cap}"
rounded: "{rounded.md}"
padding: 12px 16px
pill-neutral-dark:
backgroundColor: "{colors.surface-night}"
textColor: "{colors.on-primary}"
typography: "{typography.caption}"
rounded: "{rounded.xs}"
padding: 4px 8px
chip-lime-keyword:
backgroundColor: "{colors.accent-lime}"
textColor: "{colors.ink-deep}"
typography: "{typography.display-hero}"
rounded: "{rounded.xs}"
padding: 0 12px
text-input:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.body-md}"
rounded: "{rounded.sm}"
padding: 8px 12px
text-input-focused:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.body-md}"
rounded: "{rounded.sm}"
padding: 8px 12px
select-violet:
backgroundColor: "{colors.accent-violet-deep}"
textColor: "{colors.on-primary}"
typography: "{typography.body-md}"
rounded: "{rounded.md}"
padding: 8px 16px
card-pricing:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.body-md}"
rounded: "{rounded.xl}"
padding: 32px
card-pricing-featured:
backgroundColor: "{colors.surface-night}"
textColor: "{colors.on-primary}"
typography: "{typography.body-md}"
rounded: "{rounded.xl}"
padding: 32px
card-feature-dark:
backgroundColor: "{colors.ink-deep}"
textColor: "{colors.on-primary}"
typography: "{typography.body-lg}"
rounded: "{rounded.xxl}"
padding: 32px
card-spotlight-violet:
backgroundColor: "{colors.accent-violet-deep}"
textColor: "{colors.on-primary}"
typography: "{typography.body-lg}"
rounded: "{rounded.xxl}"
padding: 32px
code-block:
backgroundColor: "{colors.surface-night}"
textColor: "{colors.on-primary}"
typography: "{typography.code}"
rounded: "{rounded.md}"
padding: 16px
link-on-dark:
backgroundColor: "{colors.surface-canvas-dark}"
textColor: "{colors.on-primary}"
typography: "{typography.body-md}"
rounded: "{rounded.xs}"
padding: 0px
link-on-light:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.body-md}"
rounded: "{rounded.xs}"
padding: 0px
nav-bar-light:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.body-md}"
rounded: "{rounded.xs}"
padding: 16px 24px
footer-light:
backgroundColor: "{colors.surface-canvas-light}"
textColor: "{colors.ink-deep}"
typography: "{typography.caption}"
rounded: "{rounded.xs}"
padding: 32px 24px
---
Overview
Section 01Sentri's design language reads like a debugging console wearing a leather jacket. The home and product surfaces sit on a near-black violet midnight (`{colors.surface-canvas-dark}` / `{colors.surface-night}`), strewn with starfield textures and floating sticker-style mascots — astronauts, monsters, traffic cones — that puncture the seriousness of an observability product. Headlines run in a chunky proprietary display sans where the most important keywords are wrapped in lime-green highlight chips (`{colors.accent-lime}`), as if the copy itself has been marked up by a developer redlining their own console output.
The palette is deliberately narrow: deep midnight as the dominant canvas, electric lime as the primary attention-grabber, hot pink (`{colors.accent-pink}`) as a secondary punctuation, and a violet-mid (`{colors.accent-violet-mid}`) for tag chips and hairline strokes. White appears in two roles — as text on dark, and as the canvas for pricing, contact, and content-heavy pages where developers need to scan dense tables. The "single primary CTA" is visually inverted depending on context: filled black-violet (`{colors.primary}`) with white type on light surfaces, or filled white with dark type on dark surfaces. The button always reads as the strongest UI affordance regardless of polarity.
Typography splits cleanly between three families: a custom display sans for hero and section openers (chunky, near-condensed, slightly playful), Rubik for every UI text role (body, captions, eyebrow caps, button labels), and Monaco for code. Buttons and eyebrows almost always run in uppercase with a 0.2px tracking lift to give them the snap of console output.
**Key Characteristics:**
Colors
Section 02> **Source pages:** home (`/welcome/`), product/error-monitoring, contact/enterprise, pricing.
Brand & Accent
Section 03Surface
Section 04Text
Section 05Semantic
Section 06Typography
Section 07Font Family
Section 08The display tier is a proprietary geometric sans with chunky, near-condensed proportions and a slightly subversive personality (closing apertures, optical-stress letterforms). When unavailable, fall back to **Rubik** at heavier weights for visual continuity.
The UI tier is **Rubik** — an open-source Hebrew/Latin sans on Google Fonts — with system fallbacks (`-apple-system, system-ui, Segoe UI, Helvetica, Arial`). Rubik handles every body, caption, button, and eyebrow role.
The code tier is **Monaco** with Menlo and Ubuntu Mono fallbacks — used in code blocks, install snippets, and inline tokens.
Hierarchy
Section 09| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-hero}` | 88px | 700 | 1.2 | 0 | Marketing hero headline (single line of attention) |
| `{typography.display-large}` | 60px | 500 | 1.1 | 0 | Section openers on dark surfaces |
| `{typography.heading-xl}` | 30px | 500 | 1.2 | 0 | Page titles on light surfaces (e.g., "Pricing plans for dev teams of all sizes") |
| `{typography.heading-lg}` | 27px | 500 | 1.25 | 0 | Sub-section headings, large card titles |
| `{typography.heading-md}` | 24px | 500 | 1.25 | 0 | Card titles, in-page section headings |
| `{typography.heading-sm}` | 20px | 600 | 1.25 | 0 | Compact card title, list-group title |
| `{typography.body-lg}` | 16px | 400 | 2.0 | 0 | Marketing-paragraph body — the airy, two-line-leading variant used in hero subtext |
| `{typography.body-strong}` | 16px | 600 | 1.5 | 0 | Emphasized body run, lead sentence |
| `{typography.body-md}` | 16px | 500 | 1.5 | 0 | Default UI body, table cells, form labels |
| `{typography.eyebrow}` | 15px | 500 | 1.4 | 0 | Section eyebrow above large headings, all-caps |
| `{typography.button-cap}` | 14px | 700 | 1.14 | 0.2px | Filled button labels (uppercase) |
| `{typography.button-cap-light}` | 14px | 500 | 1.29 | 0.2px | Ghost / outline button labels (uppercase) |
| `{typography.caption}` | 14px | 400 | 1.43 | 0 | Footer text, fine print, helper copy |
| `{typography.micro-cap}` | 10px | 600 | 1.8 | 0.25px | Status labels, badge text, micro-eyebrow |
| `{typography.code}` | 16px | 400 | 1.5 | 0 | Code block content |
| `{typography.code-strong}` | 16px | 700 | 1.5 | 0 | Highlighted code keyword |
Principles
Section 010Note on Font Substitutes
Section 011Rubik is open-source on Google Fonts and is the safe default for everything except the hero display. For the proprietary display sans, suitable open substitutes are **Space Grotesk** (heavier weights), **Archivo** (semi-condensed weights), or **Hubot Sans** with optical-size axis at heavier ends — all carry the same chunky, near-condensed silhouette. Adjust line-height down by 0.05 when substituting, since the proprietary face has tighter leading at large sizes.
Layout
Section 012Spacing System
Section 013Grid & Container
Section 014Whitespace Philosophy
Section 015The dark canvas absorbs whitespace differently from light. On dark surfaces the brand stretches `{spacing.section}` generously between bands so floating mascots and starfield textures have room to breathe. On light surfaces (pricing, contact) the whitespace tightens — content density takes priority because users are scanning, comparing, and acting. Rule of thumb: hero and feature surfaces are spacious, transactional surfaces are dense.
Elevation & Depth
Section 016| Level | Treatment | Use |
|---|---|---|
| 0 | Flat on canvas, no shadow | Default surface, dark or light |
| 1 | `box-shadow: rgba(0,0,0,0.08) 0 2px 8px 0` | Inverted buttons on dark canvas (light fill lifting off dark surface) |
| 2 | `box-shadow: rgba(0,0,0,0.1) 0 10px 15px -3px, rgba(0,0,0,0.1) 0 4px 6px -4px` | Floating cards on light canvas, modals |
| 3 | `box-shadow: rgb(21,15,35) 0 0 8px 6px` | Glow halo around primary CTA on dark hero — the dark color itself becomes the shadow, creating a vignette of canvas around the button |
| 4 | `box-shadow: rgba(0,0,0,0.18) 0 0.5rem 1.5rem` | Pressed inverted button on dark canvas |
Decorative Depth
Section 017Sentri's depth doesn't come from drop shadows — it comes from the **starfield texture** on the hero canvas (subtle white-on-violet pinpricks at low opacity), the **floating sticker mascots** (drawn with hand-rendered outlines and saturated fills, layered above the canvas with no shadow), and the **lime squiggly divider** above the footer. These illustrative elements do the work that shadow stacks do in flatter design systems — they tell the eye where one section ends and another begins.
Shapes
Section 018Border Radius Scale
Section 019| Token | Value | Use |
|---|---|---|
| `{rounded.xs}` | 4px | Badges, status pills, lime keyword highlight chips |
| `{rounded.sm}` | 6px | Text inputs, search boxes |
| `{rounded.md}` | 8px | Primary and inverted buttons, code blocks, select dropdowns |
| `{rounded.lg}` | 10px | Generic divs, container blocks |
| `{rounded.xl}` | 12px | Pricing cards, feature cards, navigation pill chrome |
| `{rounded.xxl}` | 18px | Image containers, large hero illustrations |
| `{rounded.full}` | 9999px | Avatars, circular icon buttons |
Photography Geometry
Section 020The site doesn't use traditional photography — it uses **illustrated stickers and product UI screenshots** in roughly equivalent geometric roles. Product UI mocks sit inside `{rounded.xxl}` 18px containers, often tilted slightly off-axis, against the dark canvas with no border. Sticker mascots have no container at all — they are layered directly on canvas, often overlapping section boundaries to break the grid. Avatar treatments (in customer-logo strips) are simple greyscale wordmarks, not photos.
Components
Section 021> **No hover states documented.** Every spec below shows only Default and Pressed/Active states. Variants are formal entries in the front-matter `components:` block.
Buttons
Section 022**`button-primary`** — the dominant CTA across light surfaces.
**`button-inverted`** — the dominant CTA on dark canvas; visually identical hierarchy, polarity-flipped.
**`button-ghost-on-dark`** — secondary CTA on dark canvas (e.g., "Get Demo" beside "Get Started").
**`button-violet-token`** — pill-shaped tag/category button used inline in product navs.
**`button-disabled`**
Cards & Containers
Section 023**`card-pricing`** — the standard tier card on the pricing page.
**`card-pricing-featured`** — the dark inverted "featured" tier (Sentri uses the Business tier as the featured one).
**`card-feature-dark`** — large feature-band card on dark surfaces, used to anchor product feature explanations.
**`card-spotlight-violet`** — accent feature card with deeper violet fill, used for "Sentry-only" capability bands.
**`code-block`** — code/install snippets.
Inputs & Forms
Section 024**`text-input`** — the contact-form first/last/email/etc. fields.
**`select-violet`** — the dropdown variant used inside dark contact panels.
Navigation
Section 025**`nav-bar-light`** — the standard top nav across light pages (pricing, contact, docs).
**Top Nav (dark variant)** — used on the home page; same structure but inverted polarity, sitting on `{colors.surface-canvas-dark}`. The right-side button becomes `button-inverted`.
**Mobile nav** — collapses to a hamburger toggle below the 768px breakpoint; dropdown carets become full-width accordion items.
Pills, Badges, and Highlight Chips
Section 026**`pill-neutral-dark`** — small status / category pill on dark surfaces.
**`chip-lime-keyword`** — the signature inline highlight wrapping single words inside the hero display headline.
Signature Components
Section 027**Sticker Mascot Layer** — illustrated characters (astronauts, cartoon monsters, traffic cones, debugging avatars) drawn with hand-rendered outlines and saturated `{colors.accent-pink}` / `{colors.accent-lime}` fills. Mascots are placed at section junctions, often overlapping section boundaries by 30–40% of their height, with no container or shadow. They function as decorative section markers and brand personality carriers — never inside cards, never as buttons.
**Lime Squiggly Footer Divider** — a hand-drawn `{colors.accent-lime}` squiggle line, ~3px stroke, sitting above the footer at full container width. Replaces what would otherwise be a 1px hairline divider with a personality-laden flourish.
**Starfield Hero Texture** — a faint white-on-violet pinprick pattern overlaid on the hero canvas at very low opacity. Adds atmospheric depth to the dark canvas without visible decoration. Implemented as a background image, not as repeating CSS.
**Window-Chrome UI Mock** — product UI screenshots framed in `{rounded.xxl}` containers, often tilted ±2–3 degrees off axis, positioned overlapping section boundaries on the dark feature pages. The chrome itself is just a rounded image with a subtle hairline; the content is the actual product UI.
**`link-on-dark`** — inline links in body copy on dark surfaces. Default text is `{colors.on-primary}` rendered in `{typography.body-md}` with a persistent underline; the underline is the entire affordance, no color change. Sits flush in copy with no padding, no rounded corners beyond the inherited `{rounded.xs}`.
**`link-on-light`** — inline links in body copy on light surfaces. Same shape contract as `link-on-dark`, but text is `{colors.ink-deep}`. Used across pricing, contact, and docs surfaces.
**`footer-light`** — site-wide footer on the light-canvas template (pricing, contact, docs).
Do's and Don'ts
Section 028Do
Section 029Don't
Section 030Responsive Behavior
Section 031Breakpoints
Section 032| Name | Width | Key Changes |
|---|---|---|
| 4K / Wide | ≥ 1440px | Full 4-tier pricing row, hero illustration sits beside headline at full scale |
| Desktop | 1152–1440px | Default content max-width sits at 1152px, all 4-tier patterns hold |
| Laptop | 992–1151px | Pricing collapses to 2-up rows, nav remains horizontal |
| Tablet | 768–991px | 2-column feature grids collapse to 1-up; nav still horizontal but compresses |
| Mobile Large | 640–767px | Hamburger nav appears; hero display drops from 88px to ~56px |
| Mobile | 576–639px | Single-column everything; section padding collapses from 96px to 32–48px |
| Small Mobile | 1–575px | Compact mode; sticker mascots drop in size or hide entirely to preserve content priority |
Touch Targets
Section 033Collapsing Strategy
Section 034Image Behavior
Section 035Iteration Guide
Section 0361. Focus on ONE component at a time. Don't rebuild the system — extend it.
2. Reference component names and tokens directly (`{colors.accent-lime}`, `{button-primary}-pressed`, `{rounded.xxl}`) — do not paraphrase.
3. Run `npx @google/design.md lint DESIGN.md` after edits — `broken-ref`, `contrast-ratio`, and `orphaned-tokens` warnings flag issues automatically.
4. Add new variants as separate component entries (`-pressed`, `-disabled`, `-focused`) — do not bury them inside prose.
5. Default to `{typography.body-md}` for product UI body and `{typography.body-lg}` for marketing prose — the leading difference is intentional and load-bearing.
6. Keep `{colors.accent-lime}` scarce — one lime element per viewport. The signature only works because it's rare.
7. When polarizing a new surface, choose one canvas (`{colors.surface-canvas-dark}` or `{colors.surface-canvas-light}`) and commit to it; don't blend the two on a single page band.