Display face
Inter Tight
- 500
- 600
The rules this site is built on: one dark page, one accent, two typefaces and a lot of restraint. Every value here is the one the site ships with. For how things move, see the motion guidelines.
Pure Experience Design
The site is a dark, neutral stage so the client work and its colors carry the page. Lime is the only brand color and appears sparingly: an eyebrow, a focus ring, the one link that matters.
Brand
The settings at a glance.
Identity
P, X and D, stacked: Pure Experience Design. Each initial is Inter Tight SemiBold turned into outlines and drawn as a hairline, never filled. In the header it sits in a pill of page color at 80% opacity; on hover or focus the pill opens and the words appear beside their initials.
Color
Eight core colors. Contrast below is on white and on the page background, worked out when the page is built.
One color per audience in the home headline, each checked against the darkest and lightest pixel behind it. They never appear as UI colors elsewhere.
Typography
Two families, three roles. Inter Tight does almost everything; Roboto Condensed is for labels only.
Display face
Inter Tight
Text face
Inter Tight
Label face
Roboto Condensed
Typography
Fluid sizes: each role scales with the screen between a phone and a wide desktop. Shown at 1440px wide; long lines are cut to fit.
Product design
Made with care.
Public means everyone.
Design with, not for
Discovery, design, development, QA and launch for digital products.
Every project starts with the people who will use it and the people who have to run it.
Working together
text-wrap: balance); one idea per heading; display headings end with a period.Writing
Confident, plain and specific. Say what was done and what it changed.
| Rule | How |
|---|---|
| Sentence case | Only the first word and proper names capitalized: “Product design, site development, WordPress.” Titles too. |
| Acronyms and names as they are | UX, UI, IxD, IA, SEO, AI, A/B, WCAG; WordPress, WP Engine, Figma, TriNetX. Never “Ux” or “wordpress.” |
| American English | Color, center, organization, program. |
| Plain language | Short sentences, the user’s words, no jargon a client wouldn’t use. Clear words are an accessibility feature. |
| Numbers | Sequences use Roman numerals (chapters I, II, III). Counts inside a prototype or a client artifact keep the numbers the product shows (Pass 6 of 8). |
| Say what happened | Describe the work and its outcome; only add caption notes if it adds value. |
| Punctuation | Curly quotes and apostrophes, em dashes for asides, en dashes for ranges, a middle dot (·) between short facts. Periods and commas go inside closing quotes. No serial comma (“research, design and build”), unless an item already contains “and.” |
Layout
One container, one gutter, an 8px-based space scale and generous section padding. Layouts are designed from 320 pixels wide up and tested at 390 and 1440, then on 1728 and 2304 screens.
| Token | Value | Use |
|---|---|---|
| --s-1 | 0.5rem · 8px | Inside pills and chips |
| --s-2 | 1rem · 16px | Between a heading and its line |
| --s-3 | 1.5rem · 24px | Grid gaps, small |
| --s-4 | 2rem · 32px | Between blocks in a section |
| --s-5 | 3rem · 48px | Grid gaps, large |
| --s-6 | 4.5rem · 72px | Section heading to content |
| --s-7 | 7rem · 112px | Between groups in a long section |
| --s-8 | 10rem · 160px | Section padding, top and bottom |
| Token | Value | Use |
|---|---|---|
| --container | 82rem · 1312px | Maximum content width |
| --gutter | clamp(1.25rem, 4vw, 4rem) | Side margin, 20 → 64px |
| --measure | 60ch | Reading line length |
| Breakpoints | 40rem · 64rem | Phone · tablet; layouts are fluid between |
| Sections | .section .rule | 10rem padding, a hairline above; full-bleed backgrounds put .wrap on an inner div |
Interface
A small set, used everywhere. Drawn here with the site’s own styles.
Working together
Eyebrow · label face, accent or muted
Call to action · h3 size, lime, no underline; hover fades to 70%
Pills · hairline, fully round, muted text
Accordion row · number, title, a round plus that turns into a minus; an accent rule draws across the open item
Focus · 2px lime ring, 4px offset
Scrollbars · thumb only, 50% muted, no track
Cursor · a lime arrow with a dark outline on everything clickable, never the system hand (--cur-link)
cursor: var(--cur-link), never pointer.Media
The client work is the imagery. Films and backgrounds sit behind the words, never in front of them.
Inclusive by default
Part of the brand, not a check at the end.
| Area | Rule |
|---|---|
| Standard | WCAG 2.2 AA on every page, checked with axe in a real browser at 1440 and 390, plus keyboard and screen-reader walk-throughs. |
| Focus | A 2px lime ring, offset 4px, on everything interactive. Never removed without a replacement. |
| Contrast | Measured, not judged by eye: body and small text 4.5:1 or better on every surface, including the worst pixel behind hero text. |
| Targets | At least 44 × 44px for anything you tap. |
| Structure | Real headings in order, landmarks, a skip link; split text has one readable copy for screen readers. |
| Motion | Every animation has a reduced-motion version: finished state, no blur, no travel, no smooth scroll. See the motion guidelines. |
| Controls | No browser-default menus or selects: custom controls with native-level keyboard access. |
Code
Color, type and space from packages/tokens/tokens.css, printed from the file itself. Plain CSS custom properties: they drop into any stack. Motion tokens are in the motion guidelines.
:root {
/* ---- Color -------------------------------------------------------- */
--c-bg: #08080a;
--c-bg-raised: #101014;
--c-ink: #f4f4f2;
--c-ink-muted: #8a8a92;
--c-ink-body: #a3a3ab; /* running paragraphs: lighter than muted, so long text reads easily */
--c-ink-faint: #808088; /* 4.5:1+ on bg, raised and card */
--c-accent: #d6ff3f;
--c-line: rgba(244, 244, 242, 0.12);
/* Sector colors for the rotating headline. All checked against the worst
background pixel in the hero, not eyeballed. The brand lime is saved for
"everyone" so the payoff gets the strongest color on the page. */
--c-sector-1: #7fe8cb; /* healthcare */
--c-sector-2: #9fe4ff; /* finance */
--c-sector-3: #b6d3ff; /* education */
--c-sector-4: #ffc27a; /* government */
--c-sector-5: #ffb6c9; /* ecommerce */
--c-sector-6: #d9b8ff; /* the arts */
--c-sector-7: #ffe08a; /* mom & pop */
--c-sector-8: #ff9f7e; /* entrepreneurs */
--c-sector-9: var(--c-accent); /* everyone */
--c-sector-10: #c8f29c; /* research */
--c-sector-11: #86e0f2; /* life sciences */
--c-sector-12: #c9c3ff; /* higher ed */
--c-sector-13: #ffcfa3; /* nonprofits */
/* ---- Type families ------------------------------------------------ */
--f-display: 'Inter Tight', system-ui, -apple-system, sans-serif;
--f-body: 'Inter Tight', system-ui, -apple-system, sans-serif;
--f-label: 'Roboto Condensed', 'Arial Narrow', sans-serif;
/* ---- Type scale ----------------------------------------------------
Display sizes are fluid. Line-height 1.0 and negative tracking at the
top end are what give large type the density fantasy.co has;
both relax as size drops, because tight tracking hurts small text. */
--t-display: clamp(1.5rem, -0.151rem + 9.663vw, 7.6rem); /* 24 -> 122px, sized so "for entrepreneurs" — the longest phrase in the rotator — always fits one line */
--t-title: clamp(2.75rem, 1.1rem + 6.6vw, 6.5rem); /* 44 -> 104px, case-study page titles */
--t-h2: clamp(2.5rem, 1.4rem + 4.8vw, 4.375rem); /* 40 -> 70px */
--t-h3: clamp(1.75rem, 1.2rem + 2.4vw, 2.5rem); /* 28 -> 40px */
--t-lead: clamp(1.125rem, 1rem + 0.6vw, 1.5rem);
--t-body: 1.0625rem;
--t-para: 1.125rem; /* running paragraphs, 18px */
--t-label: 0.8125rem;
--fw-display: 600;
--lh-display: 0.94;
--lh-title: 1.02; /* case-study titles: two-line, so they need air the one-line hero headline doesn't */
--lh-h3: 1.1;
--lh-body: 1.55;
--ls-display: -0.02em; /* display headings (Nov 10 2026: was -0.022em) */
--ls-h3: -0.02em;
--ls-body: -0.005em;
--ls-label: 0.14em;
/* ---- Space ---------------------------------------------------------- */
--s-1: 0.5rem; --s-2: 1rem; --s-3: 1.5rem; --s-4: 2rem;
--s-5: 3rem; --s-6: 4.5rem; --s-7: 7rem; --s-8: 10rem;
--measure: 60ch; /* readable line length for body copy */
--container: 82rem;
--gutter: clamp(1.25rem, 4vw, 4rem);
} More about this site