UPISLAND

Sentri register · sentry.io family

The system behind every UpIsland page.

One source of truth for color, type, space, and component. Built lean — audit, consolidate, document. No color or font appears here that isn't already in use. Click any value to copy it; toggle the theme to test both polarities.

3 accent colors 4 type families 4pt spacing grid 2 themes tokens.json v1.4
01 — Foundations

Color

Two layers. Primitives are raw values named by what they are; page CSS never touches them. Semantics are intent aliases — switch the theme or rebrand and only these change.

Locked
The palette is decided — two accents, fixed roles

Hot pink #ff2e88 is the one brand accent: the chip, eyebrows, links, focus. Electric green #8dff1f is signal only — the lighthouse beacon and live/status dots, never decorative. The old lime is retired. Dark is the canonical theme. One accent per viewport.

Violet scale — canvas & ink

--color-violet-900#150f23Deepest section · code bg
--color-violet-800#1f1633Page canvas · raised card
--color-violet-700#2a1f44Hover-darker
--color-violet-600#362d59Hairline on dark
--color-violet-500#422082Deep violet accent
--color-violet-400#6a5fc1Link · warn note
--color-violet-300#79628cMid violet · tag fill
--color-violet-200#e7e3d8Hairline on cream
--color-violet-100#f4f1e7Cream tint
--color-violet-50#faf8f3Light-theme canvas

Accent — pink leads, green signals

--color-pink-500#ff2e88Brand accent · the chip. One per viewport.
--color-pink-300#ff86b8Accent soft · hover-lighten
--color-green-500#8dff1fSignal only · beacon + live dots. Never decorative.
--signalThe alias page CSS uses for live state

Semantic aliases — what page CSS uses

--canvasPage background
--canvas-deepDeepest section
--canvas-elevRaised card
--brand-accentSignature lime
--ink-strongMax-contrast text
--ink-muteMuted text
--ink-faintDivider overlay
--border-strongHairline on dark

Polarity pairs — text on canvas

Ink on canvas --ink-mute on --canvas — muted body white · #1f1633
Ink on lime --ink-on-light on --brand-accent — the chip #1f1633 · #c2ef4e
02 — Foundations

Typography

Four families, each with exactly one role: Space Grotesk display, Rubik body & UI, Monaco code, Saira Stencil wordmark. Never reach for a fifth.

.display-heroSpace Grotesk · clamp 56–88 · 700
Hello, UpIsland
.display-largeSpace Grotesk · clamp 42–60 · 500
A new shape for the CISO office.
.h-xlRubik · 30 / 1.2 · 500
Heading XL — section opener
.h-lgRubik · 27 / 1.25 · 500
Heading LG — large card title
.h-mdRubik · 24 / 1.25 · 500
Heading MD — card title
.h-smRubik · 20 / 1.25 · 600
Heading SM — list-group title
.body-lgRubik · 16 / 2.0 · 400
Body LG — the airy marketing paragraph, two-line leading for generous breathing room.
.body-mdRubik · 16 / 1.5 · 500
Body MD — the default UI body, denser, closer to console output.
.captionRubik · 14 / 1.43 · 400
Caption — secondary info, meta, byline.
.micro-capRubik · 10 · 600 · tracked caps
Micro · all-caps metadata
.monoMonaco · 14 / 1.5
.mono — routing, code, machine values
03 — Foundations

Spacing

Every margin, gap, and pad lands on the 4-point grid. Section bands are always --space-96.

--space-44
--space-88
--space-1212
--space-1616
--space-24 · gutter24
--space-32 · card pad32
--space-4848
--space-6464
--space-96 · section96
04 — Foundations

Radius

Seven steps. xs–xl for components, xxl for raised cards, full for pills and avatars. Click a tile to copy its token.

xs · 4
sm · 6
md · 8
lg · 10
xl · 12
xxl · 18
full
05 — Foundations

Shadow

Functional only — three elevations for genuine lift, plus a violet soft-ring for the inverted button and a lime glow for the live dot. On dark canvas, depth comes from texture, not drop shadows.

--shadow-sm
--shadow-md
--shadow-lg
--shadow-ring-violet-soft --shadow-glow-lime --shadow-ring-focus · v1.2
06 — Foundations

Motion

--ease-spring on movement, --ease-out on color & opacity. Hover a card to replay. Durations step 120 · 200 · 250 · 300 · 360 ms.

movement → --ease-spring
cubic-bezier(.34, 1.3, .64, 1)
color / opacity → --ease-out
cubic-bezier(.2, .7, .2, 1)
--duration-fast · 120 --duration-base · 200 --duration-mid · 250 --duration-slow · 300 --duration-xslow · 360
07 — Components

Buttons

Three roles. btn-primary for the page's main action; btn-inverted for the loud hero CTA (white pill, violet soft-ring); btn-ghost-dark for secondary actions on dark. Hover and focus them — keyboard focus shows the new lime ring.

.btn.btn-primary .btn.btn-inverted .btn.btn-ghost-dark
08 — Components

Chips & Pills

.chip-lime is the load-bearing signature — it wraps a single word inside a display headline. .chip is the bordered neutral, .tag the soft taxonomy label, .status-pill the meta-strip badge.

A new shape for security.
Sentri 4pt grid CISO office AI Live · v1.4
.chip-lime .chip .tag .status-pill
09 — Components

Forms new · v1.2

Generic fields added in the v1.2 audit — DESIGN.md specified text-input and select-violet, but only the scoped signup input existed. Focus shows the lime ring; the error state is where pink earns its keep.

Shown on the episode byline.
Used to tailor the digest.
Enter a valid address — pink signals the error.
.field .label .input .select .textarea .field.is-error .field-hint
10 — Components

Headline lockup

Every page hero uses the same shape: lime eyebrow with a leading dot → display headline → muted lede.

Episode 3 · 2026-05-31

Outcomes, not theater. The CISO office, rebuilt.

An eight-agent virtual team running the work the role was never staffed to do. Built in public, anonymously.

.eyebrow .display-large .body-lg
12 — Components

Code & badges

The violet-framed mono block with a lime accent class, the rotated lime stamp, and the pulsing live dot.

$ bun run beam:assemble episode-3
[extract] 12 sources scanned · 8 promoted
[render]  /episodes/episode-3/index.html (47 KB)
[deploy]  upisland.org — done
next sunday episode 3 publishing weekly · episode 3 live
.code .accent .stamp .pulse-dot
13 — Patterns

Surfaces

Three canvases per page. Alternate to create rhythm — never stack two of the same type back-to-back.

.section-dark   default page canvas
.section-night   deepest violet, contrast strips
.section-light   cream surface, story sections
14 — Patterns

Cards & notes

The generic raised .card, and the three-intent .note callout: neutral, accent (lime, positive), warn (violet, attention).

Process

The eight-agent virtual team

Each agent owns one slice of the CISO mandate — strategy, architecture, compliance, awareness, IR — and ships felt outcomes.

.card .note .note.note-accent .note.note-warn
15 — Patterns

Prose & TOC

Wrap long-form content in .prose and write semantic HTML — every element gets the right type, color, and spacing in a 720px reading column. The standalone .toc drops anywhere.

A new shape for the CISO office: outcomes, not theater. The work the role was never staffed to do — done by a virtual team of purpose-built agents.

Why the old shape broke

The CISO role is structurally broken for SMEs. No single person has the time, depth, and breadth to do what the role demands — strategy, architecture, compliance, awareness, IR — all at once.

The deliverable of security is calm in the business, not a list of activities.
.prose .prose .lede .toc .toc-item
17 — System

Audit & changelog

What this pass found and what it changed. Fixes respect the doctrine — document what is, not what could be — so genuine gaps were filled and speculative components were left noted, not invented.

Fixed
Keyboard focus was invisible

No component had a :focus-visible style. Added a lime focus ring (--shadow-ring-focus) on buttons, nav, links, and fields. Mouse interaction is unchanged, so visual parity holds.

Added
Generic form fields

DESIGN.md specified text-input and select-violet, but the system only had the scoped signup input. Added .field, .input, .select, .textarea on-token — see §09.

Rebranded
Signature is now hot pink, green is signal

v1.3 made --brand-accent hot pink #ff2e88; v1.4 added --signal (electric green #8dff1f) with one job — the lighthouse beacon and live/status dots. Because every component reads these through tokens, the whole system reskinned from a few edits. Lime is retired.

Synced
tokens.json round-trip

The new ring-focus shadow was mirrored into tokens.json and the version bumped to 1.2.0, honoring the rule that every value appears in both files.

Noted
Card variants stay on the bench

DESIGN.md describes card-pricing, card-feature-dark, and card-spotlight-violet. No production page uses them yet, so per doctrine they're not in the system — promote when a real page needs one.

Noted
Episode HTML is out of scope

Episode bodies serve both web and the newsletter email, where <link> is stripped. They stay on inline-everything HTML, hand-synced to tokens.json — by design, not by omission.

Doctrine & migration recipe live in DESIGN_SYSTEM.md · primitives in tokens.css · this sheet is the proof.

Copied