Brand Identity
SV Brand Guide v6 [Operation Midnight Teal]. Dark-first design system. 12 colors. WCAG AA+. CBO reviewed. 6-agent validated.
Last updated: Apr 12, 2026
On This Page
- ยง00 Cover
- ยง00.5 Voice & Tone
- ยง01 Color Palette
- ยง02 Color Usage
- ยง03 Accent Ramp
- ยง04 Typography
- ยง05 Components
- ยง06 Motion
- ยง07 Spacing
- ยง08 Accessibility
- ยง09 Dark & Light Modes
- ยง10 Photography
- ยง11 Logo Spec
- ยง12 Email Templates
- ยง13 Warm Accent Migration
- ยง14 Common Mistakes
- ยง15 Quick Start
- ยง16 Activation Checklist
- ยง17 Changelog
StorageValet
Operation Midnight Teal โ A dark-first design system for a tech-forward storage concierge. 6-agent validated, WCAG AA+.
Voice & Tone
Storage Valet is a premium, white-glove storage concierge โ not a storage facility, not a moving company. We are a service + data platform that brings reliability, clarity, and trust to urban household overflow.
Voice Principles
- Confident but not arrogant โ We know our value; we don't oversell
- Clear and direct โ No jargon, no filler, no corporate-speak
- Warm but professional โ Approachable premium, like a trusted concierge
- Action-oriented โ Every piece of copy should guide toward a next step
Do / Don't Examples
Language Rules
| Always Say | Never Say |
|---|---|
| "as needed" | "on-demand" |
| "48-hour lead time" | "instant" or "same-day" |
| "schedule returns" | "request delivery" |
| "valet service" | "storage unit" |
| "better value" | "cheaper" |
| "planned pickup" | "on-demand retrieval" |
Content Principles
- Lead with the resident benefit, not Storage Valet features
- Specificity sells โ "$2,000 included coverage" beats "insurance included"
- One CTA per section โ Don't create choice paralysis
- Social proof when available โ Building partnerships, resident count, promo redemptions
- Seasonal hooks โ Holiday decorations, back-to-school, spring cleaning, baby gear rotation
Color Palette
A 12-color system anchored by near-black Midnight and Electric Teal. Dark backgrounds are the default canvas; light surfaces are the exception. Status colors are functional tokens โ they are not part of the brand palette count.
Dark Range โ 3 Colors
Accent Range โ 4 Colors (Teal Ramp)
Neutral Range โ 5 Colors
Color Usage Rules
Which color goes where โ and which combinations are prohibited.
Dark Surfaces (Default)
| Element | Color | Value |
|---|---|---|
| Page background | Abyss | #060E1A |
| Card / elevated surface | Midnight or Deep Sea | #0A1628 / #0D2137 |
| Headlines (H1, H2) | White | #FFFFFF |
| Body text | Mist โ full opacity | #8BA4A8 |
| Secondary / meta text | Mist โ full opacity | #8BA4A8 (same token; no opacity) |
| CTA button fill | Electric Teal | #00D4AA |
| CTA button text | Midnight | #0A1628 |
| Links | Electric Teal | #00D4AA |
| Icons (standalone) | Electric Teal (follows --sv-accent-text) | #00D4AA |
| Focus rings | Electric Teal, 2px solid, 2px offset | #00D4AA |
| Borders | White at 6% opacity | rgba(255,255,255,0.06) |
--sv-text-tertiary) with verified contrast โ never use opacity as a shortcut.
Light Surfaces
| Element | Color | Value |
|---|---|---|
| Page background | Cloud | #F4F7F6 |
| Cards | White | #FFFFFF |
| Featured / warm cards | Seafoam | #E6F0EE |
| Headlines | Midnight | #0A1628 |
| Body text | Storm โ full opacity | #3D4F54 |
| Secondary / meta text | Storm โ full opacity | #3D4F54 (same token; no opacity) |
| CTA button fill | Electric Teal + 2px Teal Dark border | #00D4AA / border #00A888 |
| CTA button text | Midnight | #0A1628 |
| Links | Link Teal | #007A62 |
| Icons (standalone) | Link Teal (follows --sv-accent-text) | #007A62 |
| Focus rings | Link Teal, 2px solid, 2px offset | #007A62 |
The Teal Accent Ramp
Four steps from luminous to deep. One teal can't work everywhere โ the ramp solves dark-vs-light contrast without leaving the accent family.
| Step | Hex | Role | On Abyss | On Cloud |
|---|---|---|---|---|
| Electric Teal | #00D4AA |
CTA fills both modes; icons, focus rings, accent text โ dark surfaces only | 10.1:1 AAA โ | 1.9:1 FAIL โ |
| Teal Dark | #00A888 |
Button hover/active; light-mode primary button border | 6.4:1 AA โ | 2.6:1 FAIL โ |
| Deep Teal | #008F72 |
Pressed states, tertiary accents โ dark only | 4.8:1 AA โ | 3.5:1 AA Large โ |
| Link Teal | #007A62 |
Text links on light bg, outline buttons โ light only | 3.65:1 AA Large โ | 4.9:1 AA โ |
--sv-accent-text pattern: Electric Teal on dark surfaces, Link Teal on light surfaces. No separate icon token is needed โ the existing accent-text mapping covers it.
Typography
DM Serif Display for emotional headlines. Outfit for everything else. Warmth meets precision.
Your Home, Reclaimed.
Used for: H1, H2, hero headlines, pull quotes, logo lockup, and emotional moments.
Weight: 400 Regular + 400 Italic only. Never bold. Never H3 or smaller.
Fallback stack: 'DM Serif Display', Georgia, 'Times New Roman', serif
Outfit 700 โ H3, card titles
Outfit 500 โ Subheadings, nav labels
Outfit 300 โ Body text, descriptions, long-form content
Available weights: 300, 400, 500, 600, 700. Geometric, modern, optimized for digital.
Fallback stack: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif
#00D4AA --sv-electric-teal rgb(0, 212, 170)
Use mono stack for all hex values, CSS code blocks, and technical reference displays. Never use 'Outfit' as a monospace font.
Fallback stack: 'SF Mono', 'JetBrains Mono', 'Fira Code', Consolas, monospace
Type Scale
| Element | Size | Weight | Font | Color (Dark) | Color (Light) |
|---|---|---|---|---|---|
| H1 โ Hero | clamp(48px, 7vw, 96px) | 400 | DM Serif Display | White | Midnight |
| H2 โ Section | clamp(32px, 4vw, 44px) | 400 | DM Serif Display | White | Midnight |
| H3 โ Card title | 20โ24px | 700 | Outfit | White | Midnight |
| H4 โ Label | 13โ16px | 600โ700 | Outfit | Mist | Storm |
| Body | 15โ16px | 300โ400 | Outfit | Mist | Storm |
| Eyebrow | 11โ12px | 700 | Outfit | Electric Teal | Link Teal |
| Small / Meta | 12โ13px | 400 | Outfit | Mist โ full opacity | Storm โ full opacity |
| Button | 14โ16px | 700 | Outfit | Per button spec (ยง05) | |
| Code / Hex | 11โ13px | 400 | Monospace stack | Electric Teal | Link Teal |
Components
Live-rendered buttons, cards, chips, links, and status elements across both surface modes.
Buttons
Dark Surface
Primary Outline GhostLight Surface
Primary Dark Outline Ghost| Button | Surface | Fill | Text | Border | Hover |
|---|---|---|---|---|---|
| Primary | Both | Electric Teal | Midnight | Electric Teal (dark) / Teal Dark 2px (light) | Teal Dark fill + translateY(-1px) |
| Dark | Light only | Midnight | White | Midnight | Deep Sea fill + translateY(-1px) |
| Outline | Dark | Transparent | Electric Teal | Electric Teal @ 35% | Teal glow bg |
| Outline | Light | Transparent | Link Teal | Link Teal 2px | Seafoam bg |
| Ghost | Dark | Transparent | Electric Teal | None | Underline color shift |
| Ghost | Light | Transparent | Link Teal | None | Electric Teal underline |
Status Chips
On Dark Surface
Stored Pending Scheduled CancelledOn Light Surface โ with 1px border
Stored Pending Scheduled CancelledcurrentColor as an additional WCAG 1.4.11 safeguard. Info chip light-mode BG is #E0EBF0 (shifted from the former #E6F0EE to prevent Seafoam collision).
Link Component Spec
| Context | Color | Underline | Hover | Focus Ring |
|---|---|---|---|---|
| Link on dark bg | Electric Teal #00D4AA | None (underline on hover) | Teal Dark #00A888 + underline | Electric Teal, 2px solid, 2px offset |
| Link on light bg | Link Teal #007A62 | None (underline on hover) | Deep Teal #008F72 + underline | Link Teal, 2px solid, 2px offset |
| Link on light bg (alt) | Midnight #0A1628 | Electric Teal underline, 3px offset | Teal Dark underline | Link Teal, 2px solid, 2px offset |
Warm Cards
Seafoam Card
Teal left-border accent on Seafoam surface. Feature highlights and callouts on light pages. Body text must be Storm, never Mist.
White Card
Teal left-border accent on White surface. Content cards on Cloud-background pages.
Motion & Interaction
Purposeful, restrained motion. Every animation must earn its place.
Transition Tokens
| Token | Value | Use |
|---|---|---|
--sv-transition | 0.2s cubic-bezier(0.22, 1, 0.36, 1) | Buttons, links, hover states, focus rings |
--sv-transition-slow | 0.4s cubic-bezier(0.22, 1, 0.36, 1) | Page reveals, card entrances, modals |
Permitted Animations
| Animation | Duration | Context |
|---|---|---|
| fadeUp (opacity + translateY) | 0.6โ0.8s | Hero content, page load reveals |
| fadeIn (opacity only) | 0.8โ1.0s | Background elements, ambient glows |
| Staggered delays | 0.1โ0.15s increments | Sequential element reveals โ max 6 items |
| Scale on hover | 0.2s | Cards, tiles โ max scale: 1.02 |
| Button lift | 0.2s | translateY(-1px) + one-step color darken on hover |
/* Mandatory reduced-motion override โ must be in every implementation */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
Spacing & Layout
An 8px base grid with named tokens. Generous whitespace is a brand signal โ not wasted space.
Space Tokens
| Token | Value | Use |
|---|---|---|
--sv-space-xs | 4px | Inline gaps, icon margins |
--sv-space-sm | 8px | Tight component padding |
--sv-space-md | 16px | Default component gap, card padding |
--sv-space-lg | 24px | Section inner padding |
--sv-space-xl | 32px | Section margins, card padding (large) |
--sv-space-2xl | 48px | Page section spacing |
--sv-space-3xl | 64px | Major section breaks |
--sv-space-4xl | 96px | Hero/footer vertical padding |
Border Radius Tokens
| Token | Value | Use |
|---|---|---|
--sv-radius-sm | 6px | Chips, badges, small buttons |
--sv-radius-md | 8px | Buttons, inputs, code blocks |
--sv-radius-lg | 12px | Cards, modals |
--sv-radius-xl | 16px | Feature cards, panels |
--sv-radius-2xl | 20px | Hero panels, pricing cards |
Layout Constraints
| Element | Max Width | Horizontal Padding |
|---|---|---|
| Content container | 1100px | 48px (24px on mobile) |
| Pricing card | 580px | 48px internal |
| Body text | 640px | โ |
| Hero headline | 880px | โ |
Accessibility
WCAG 2.1 AA minimum for all text. AAA targeted for primary reading combinations. Ratios are Claude Desktop verified calculations.
Text on Dark Backgrounds
| Text | Background | Ratio | Rating |
|---|---|---|---|
| White (#FFF) | Abyss (#060E1A) | 19.3:1 | AAA โ |
| White (#FFF) | Midnight (#0A1628) | 18.1:1 | AAA โ |
| White (#FFF) | Deep Sea (#0D2137) | 16.3:1 | AAA โ |
| Mist (#8BA4A8) | Abyss (#060E1A) | 7.4:1 | AA โ |
| Mist (#8BA4A8) | Midnight (#0A1628) | 6.9:1 | AA โ |
| Electric Teal (#00D4AA) | Abyss (#060E1A) | 10.1:1 | AAA โ |
| Electric Teal (#00D4AA) | Midnight (#0A1628) | 9.5:1 | AAA โ |
| Teal Dark (#00A888) | Abyss (#060E1A) | 6.4:1 | AA โ |
| Teal Dark (#00A888) | Midnight (#0A1628) | 6.0:1 | AA โ |
| Deep Teal (#008F72) | Abyss (#060E1A) | 4.8:1 | AA โ |
| Link Teal (#007A62) | Abyss (#060E1A) | 3.65:1 | AA Large โ |
| Link Teal (#007A62) | Midnight (#0A1628) | 3.4:1 | AA Large โ |
Text on Light Backgrounds
| Text | Background | Ratio | Rating |
|---|---|---|---|
| Midnight (#0A1628) | White (#FFF) | 18.1:1 | AAA โ |
| Midnight (#0A1628) | Cloud (#F4F7F6) | 15.6:1 | AAA โ |
| Midnight (#0A1628) | Seafoam (#E6F0EE) | 15.6:1 | AAA โ |
| Storm (#3D4F54) | White (#FFF) | 8.6:1 | AAA โ |
| Storm (#3D4F54) | Cloud (#F4F7F6) | 7.9:1 | AAA โ |
| Storm (#3D4F54) | Seafoam (#E6F0EE) | 7.5:1 | AAA โ |
| Link Teal (#007A62) | White (#FFF) | 5.3:1 | AA โ |
| Link Teal (#007A62) | Cloud (#F4F7F6) | 4.9:1 | AA โ |
| Mist (#8BA4A8) | Cloud (#F4F7F6) | 2.44:1 | FAIL โ |
| Mist (#8BA4A8) | White (#FFF) | 2.6:1 | FAIL โ |
| Electric Teal (#00D4AA) | Cloud (#F4F7F6) | 1.9:1 | FAIL โ |
| Electric Teal (#00D4AA) | White (#FFF) | 1.8:1 | FAIL โ |
Button Text Contrast (WCAG 1.4.3)
| Text | Button Fill | Ratio | Rating |
|---|---|---|---|
| Midnight (#0A1628) | Electric Teal (#00D4AA) | 9.5:1 | AAA โ |
| White (#FFF) | Midnight (#0A1628) | 18.1:1 | AAA โ |
| Midnight (#0A1628) | Teal Dark (#00A888) | 6.0:1 | AA โ |
| White (#FFF) | Electric Teal (#00D4AA) | 1.8:1 | FAIL โ |
WCAG 1.4.11 โ Non-Text Contrast
UI component boundaries (button borders, input outlines, focus indicators) require a 3:1 minimum contrast against adjacent colors. Electric Teal button fill on Cloud is ~1.9:1 for the boundary alone โ below the 3:1 requirement. Mitigation: light-surface primary buttons add a 2px solid var(--sv-teal-dark) border (Teal Dark on Cloud = 3.5:1 AA boundary). This is a light-mode-only addition; dark-surface primary buttons do not need it.
Key Accessibility Rules
Dark & Light Modes
Dark is the default. Light mode is the inversion for specific contexts โ emails, print, property manager materials, and OS-level light-mode preference on certain products.
Per-Product Dark-Mode Behavior
| Product | Behavior | Implementation |
|---|---|---|
| sv-website (mystoragevalet.com) | Always dark. No toggle. No system preference detection. | :root applies dark tokens unconditionally. Never add a media query or theme toggle. The brand statement is strongest when unequivocal. |
| sv-portal-2026 (portal.mystoragevalet.com) | Dark default, respects prefers-color-scheme: light via media query. |
:root dark tokens are the base. Add a media query to override with light tokens for users who have OS-level light mode enabled. No manual toggle required. |
| sv-wiki (wiki.mystoragevalet.com) | Dark default, respects prefers-color-scheme: light via media query. |
Same behavior pattern as sv-portal-2026. The wiki is a long-form internal reading surface; honoring OS preference improves readability without diluting the brand stance. No manual toggle. |
| Print / Email | Light body always. | Hardcode light palette hex values (CSS vars are stripped by email clients). See ยง12 Email Templates. |
Semantic Token Mapping
| Token | Dark Mode (Default) | Light Mode |
|---|---|---|
--sv-bg-page | Abyss #060E1A | Cloud #F4F7F6 |
--sv-bg-surface | Midnight #0A1628 | White #FFFFFF |
--sv-bg-elevated | Deep Sea #0D2137 | Seafoam #E6F0EE |
--sv-text-primary | White #FFFFFF | Midnight #0A1628 |
--sv-text-body | Mist #8BA4A8 (full opacity) | Storm #3D4F54 (full opacity) |
--sv-text-secondary | Mist #8BA4A8 (full opacity) | Storm #3D4F54 (full opacity) |
--sv-accent | Electric Teal #00D4AA | Electric Teal #00D4AA |
--sv-accent-text | Electric Teal #00D4AA | Link Teal #007A62 |
--sv-focus | Electric Teal #00D4AA | Link Teal #007A62 |
--sv-border | rgba(255,255,255,0.06) | rgba(0,0,0,0.06) |
--sv-btn-primary-fill | Electric Teal | Electric Teal |
--sv-btn-primary-text | Midnight | Midnight |
--sv-text-secondary uses full-opacity values. Opacity-based text creates unpredictable accessibility failures on non-solid backgrounds. Both --sv-text-body and --sv-text-secondary resolve to the same full-opacity value. If a visually lighter tertiary level is required, define --sv-text-tertiary as a separate named token with verified contrast โ never use opacity.
Portal & Wiki Implementation (prefers-color-scheme)
/* sv-portal-2026 and sv-wiki dark/light implementation */ /* Dark is the base โ no condition required */ :root { --sv-bg-page: #060E1A; --sv-bg-surface: #0A1628; --sv-text-primary: #FFFFFF; --sv-text-body: #8BA4A8; --sv-text-secondary:#8BA4A8; --sv-accent-text: #00D4AA; --sv-focus: #00D4AA; --sv-border: rgba(255,255,255,0.06); } /* Respect OS-level light mode preference */ @media (prefers-color-scheme: light) { :root { --sv-bg-page: #F4F7F6; --sv-bg-surface: #FFFFFF; --sv-text-primary: #0A1628; --sv-text-body: #3D4F54; --sv-text-secondary:#3D4F54; --sv-accent-text: #007A62; --sv-focus: #007A62; --sv-border: rgba(0,0,0,0.06); } } /* sv-website: always dark โ no media query, no toggle */
Photography & Art Direction
Cinematic, editorial, human. Never stock-photo sterile.
Aesthetic: "Cinematic Concierge"
Photography should feel like stills from a documentary about beautifully organized urban life. Moody natural light, shallow depth-of-field, real spaces with real wear. The dark palette means photos need to hold their own on both dark and light surfaces.
Principles
| Principle | Do | Don't |
|---|---|---|
| Light | Natural window light, golden hour, soft shadows | Flash, flat studio light, fluorescent |
| Color | Desaturated, cool undertones, teal/slate tints | Oversaturated, warm orange filters, HDR |
| People | Candid moments, genuine expressions, diverse ages/backgrounds | Posed stock faces, models with forced smiles |
| Spaces | Real apartments, lived-in texture, window views of Hudson County | Catalog staging, empty rooms |
| Items | Close-ups of real belongings (coats, boxes, sports gear) handled with care | Generic boxes, warehouse interiors, padlocks |
Color Treatment for Dark Surfaces
When placing photography on dark backgrounds, apply a subtle overlay: linear-gradient(rgba(6,14,26,0.3), rgba(6,14,26,0.6)) to ensure text readability over images. Photos should feel like they emerge from the darkness, not sit on top of it.
Logo Spec
The logo lockup is rendered as a single PascalCase word: StorageValet. The two-color treatment (White/Midnight for "Storage," teal accent for "Valet") provides visual word separation โ no space is needed. DM Serif Display is the logo typeface. The one-word form applies only where the wordmark is being displayed as a visual mark (logo lockups, favicon/app icon, merchandise, URL slugs, social profile handles). In all written text โ page titles, meta tags, email subject lines and body copy, calendar invites, headings in documents, product and plan names, press and legal copy, documentation โ use Storage Valet (with space). The spaced form is also the form used in the legal entity name "My Storage Valet LLC."
Logo Lockup
| Context | "Storage" | "Valet" | Font |
|---|---|---|---|
| Dark surfaces | White #FFFFFF | Electric Teal #00D4AA | DM Serif Display, 400 Regular |
| Light digital surfaces | Midnight #0A1628 | Link Teal #007A62 | DM Serif Display, 400 Regular |
| Print / decorative large-format | Per substrate | Electric Teal (when legibility is visually confirmed) | DM Serif Display, 400 Regular |
| Single-color (emboss/stamp) | Midnight (dark) or White (light) โ no teal split | DM Serif Display, 400 Regular | |
Usage Rules
Looking at it โ StorageValet. Reading it โ Storage Valet.
- The rendered logo lockup (actual wordmark with the color split)
- Favicon, app icon, apple-touch-icon (visual assets)
- Merchandise branding (tote labels, bin decals, shirts)
- Social media handles (@storagevalet)
- Domain, URLs, hashtags, email address prefixes
- Alt text on logo images (describes what the image visually shows)
- The brand guide document title ("StorageValet Brand Guide v6")
Email Templates
Email clients strip CSS variables, ignore dark backgrounds, and force their own dark-mode inversions. The rules here are different from the web โ hardcode everything.
Default Email Structure
Your pickup is confirmed.
Your Storage Valet pickup has been scheduled for Thursday, April 23rd between 10amโ12pm. Our team will arrive at the address on file.
Questions? Contact our team anytime or reply to this email.
Email Design Rules
| Element | Value (hardcoded hex) | Reason |
|---|---|---|
| Header background | #0A1628 (Midnight) | Dark header creates brand signature; safe in most clients |
| Body background | #FFFFFF (White) | Light body is the safe email default โ consistent across all clients |
| Body text | #3D4F54 (Storm) | High contrast on white; never use Mist in email body |
| Headlines | #0A1628 (Midnight) | DM Serif Display; hardcode the hex, not a token |
| CTA button | Fill #00D4AA, text #0A1628 | Must have Midnight text โ white-on-teal fails (1.8:1) |
| Text links | #007A62 (Link Teal) | AA on white; underline always present in email |
| Footer background | #F4F7F6 (Cloud) | Subtle separation from white body |
| Footer text | #3D4F54 (Storm) | Maintain accessibility in footer |
Client Behavior Notes
| Client | Dark Mode Behavior | Mitigation |
|---|---|---|
| Gmail (mobile) | Forces dark-mode inversion on light email content | Add color-scheme: light dark and test; inversion is partial and inconsistent |
| Outlook (Windows) | Ignores dark background colors entirely โ background reverts to white | Dark header will revert to white. Ensure header text has dark fallback. Use table-based layouts. |
| Apple Mail | Respects CSS @media (prefers-color-scheme: dark) | Safe to add a dark-mode media query block for Apple Mail specifically if desired |
var(--sv-...)) do not work in any email client. All email templates must hardcode every hex value. Dark email templates (fully dark body) require explicit testing in every target client before production use.
Warm Accent Migration
The Navy + Berry system (v2.0โv4.2) included warm accent tokens that have no equivalent in Midnight Teal. This section documents their canonical migration targets so agents encountering v4.x hex values in any codebase know exactly where they go.
Deprecated Token Mapping
| Deprecated Token | Old Value | Migration Target | Notes |
|---|---|---|---|
| Rose Taupe decorative borders | #AC928A |
--sv-border (rgba subtle border) |
Warm borders had decorative-only purpose; the rgba border system achieves the same subtlety without a warm hue |
| Rosey Tint highlight backgrounds | #E8DAD6 |
Seafoam #E6F0EE |
Seafoam is the warm-light surface in the Midnight Teal system; slightly cooler but functionally equivalent for highlights |
| Parchment page backgrounds | Warm off-white | Cloud #F4F7F6 (light) / Abyss #060E1A (dark) |
Parchment implied warmth that conflicts with the teal-led system; Cloud and Abyss are the new mode-appropriate page backgrounds |
| Berry CTA | #A14567 |
Electric Teal #00D4AA |
All CTA fills migrate to Electric Teal. The warm CTA era is fully retired. |
| Oxford Navy heading | #213C47 |
Midnight #0A1628 (dark) / Midnight text on light |
Midnight is darker and more refined; use for all heading and surface roles previously held by Oxford Navy |
| Mist Blue secondary text | Named legacy token | Mist #8BA4A8 (dark) / Storm #3D4F54 (light) |
Do not confuse with the new Mist token โ the legacy "Mist Blue" was a different value entirely |
| Action Brown | Named legacy token | Deprecated โ no replacement | Action Brown is fully retired from the system with no equivalent. Do not introduce any brown or warm-brown accent. |
Common Mistakes
The patterns developers reach for that break the system.
| Mistake | Why It Fails | Correct Pattern |
|---|---|---|
| Electric Teal text on Cloud / White / Seafoam | 1.8โ1.9:1 โ invisible to many users | Link Teal (#007A62) for all readable text on light surfaces |
| Mist text on Cloud / White / Seafoam | 2.44:1 โ hard accessibility failure. Mist is dark-mode only. Storm is light-mode only. They never cross. | Storm (#3D4F54) for all body text on light surfaces |
| White text on Electric Teal buttons | 1.8:1 โ FAIL; close to invisible | Midnight (#0A1628) text on Electric Teal โ always. This is the only approved combination. |
| Using Electric Teal for both fill and text | Conflates two distinct roles | Electric Teal for fills/icons/focus on dark; Link Teal for readable text on light |
| Dark button on dark surfaces | Midnight on Midnight/Abyss = zero separation | Dark button is light-surface only. Use Primary (teal) or Outline on dark surfaces. |
| Opacity-based text tokens | Fails on non-solid backgrounds; produces unpredictable contrast values | Full-opacity Mist on dark, full-opacity Storm on light. Define named tokens if lighter text is needed. |
| Mist or Storm as text in the wrong mode | Mist on Cloud = 2.44:1 fail; Storm on Abyss = wrong tone | Mist โ dark surfaces only. Storm โ light surfaces only. |
| Using Outfit as monospace | Outfit is a geometric sans โ it is not monospaced; hex values and code look inconsistent | Use the mono stack: 'SF Mono', 'JetBrains Mono', 'Fira Code', Consolas, monospace |
| Skipping the accent-text swap in light mode | Electric Teal links on Cloud = invisible text | Map --sv-accent-text to Link Teal in light mode |
| Using Abyss for card backgrounds | No visual separation from the page background | Midnight or Deep Sea for cards on Abyss page |
| DM Serif Display below H2 | Serif at small sizes loses legibility; system only loads 400 Regular weight | Outfit 700 for H3 and below |
| DM Serif Display in bold (font-weight: 700) | Only ships Regular โ browser faux-bold is visually broken | DM Serif Display 400 only. Use Outfit for bold needs. |
| Using Plus Jakarta Sans or Inter in implementations | These were used in exploratory mockups only โ not authoritative | The production typefaces are DM Serif Display + Outfit. No substitutions. |
| Adding new hex values to the palette | Breaks the 12-color palette lock | Use rgba opacity on existing colors for decorative/data-vis variations only โ never for text |
| CSS variables in email templates | Stripped by every major email client | Hardcode all hex values in email HTML using inline styles |
| Skipping prefers-reduced-motion | Accessibility violation for motion-sensitive users | Always include the reduced-motion media query (see ยง06) |
| Writing "Storage Valet" with a space in the logo lockup, favicon, or other visual brand mark | The logo lockup is "StorageValet" โ the color split provides word separation; a space disrupts visual symmetry | "StorageValet" (no space) only in visual marks: logo lockup, favicon/app icon, merchandise, URL slugs, social profile handles, hashtags. "Storage Valet" (with space) everywhere text is read: page titles, meta tags, email subject/body copy, headings in documents, product and plan names, press, legal, documentation, and the LLC name. |
Quick Start
Copy-paste CSS custom properties. This is the complete design system in one code block โ start here.
/* ============================================= STORAGEVALET โ Brand Tokens v6 Operation Midnight Teal ยท Dark-First 12 colors: 3 dark + 4 teal + 5 neutral ============================================= */ :root { /* PALETTE โ 12 COLORS (LOCKED) */ --sv-abyss: #060E1A; --sv-midnight: #0A1628; --sv-deep-sea: #0D2137; --sv-electric-teal: #00D4AA; --sv-teal-dark: #00A888; --sv-deep-teal: #008F72; --sv-link-teal: #007A62; --sv-storm: #3D4F54; --sv-mist: #8BA4A8; --sv-seafoam: #E6F0EE; --sv-cloud: #F4F7F6; --sv-white: #FFFFFF; /* TYPOGRAPHY */ --sv-font-display: 'DM Serif Display', Georgia, 'Times New Roman', serif; --sv-font-body: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --sv-font-mono: 'SF Mono', 'JetBrains Mono', 'Fira Code', Consolas, monospace; /* SEMANTIC TOKENS โ dark mode default */ --sv-bg-page: var(--sv-abyss); --sv-bg-surface: var(--sv-midnight); --sv-bg-elevated: var(--sv-deep-sea); --sv-text-primary: var(--sv-white); --sv-text-body: var(--sv-mist); --sv-text-secondary: var(--sv-mist); --sv-accent: var(--sv-electric-teal); --sv-accent-text: var(--sv-electric-teal); --sv-focus: var(--sv-electric-teal); --sv-border: rgba(255,255,255,0.06); /* STATUS TOKENS โ dark mode default */ --sv-status-success-text: #34D399; --sv-status-success-bg: rgba(52,211,153,0.10); --sv-status-info-text: #67B8BF; --sv-status-info-bg: rgba(103,184,191,0.08); --sv-status-warning-text: #FBBF24; --sv-status-warning-bg: rgba(251,191,36,0.08); --sv-status-error-text: #F87171; --sv-status-error-bg: rgba(248,113,113,0.08); /* MOTION */ --sv-transition: 0.2s cubic-bezier(0.22, 1, 0.36, 1); --sv-transition-slow: 0.4s cubic-bezier(0.22, 1, 0.36, 1); /* SPACING (8px base) */ --sv-space-xs: 4px; --sv-space-sm: 8px; --sv-space-md: 16px; --sv-space-lg: 24px; --sv-space-xl: 32px; --sv-space-2xl: 48px; --sv-space-3xl: 64px; --sv-space-4xl: 96px; /* BORDER RADIUS */ --sv-radius-sm: 6px; --sv-radius-md: 8px; --sv-radius-lg: 12px; --sv-radius-xl: 16px; --sv-radius-2xl: 20px; } /* Light mode override โ sv-portal-2026 and sv-wiki only */ @media (prefers-color-scheme: light) { :root { --sv-bg-page: var(--sv-cloud); --sv-bg-surface: var(--sv-white); --sv-bg-elevated: var(--sv-seafoam); --sv-text-primary: var(--sv-midnight); --sv-text-body: var(--sv-storm); --sv-text-secondary: var(--sv-storm); --sv-accent-text: var(--sv-link-teal); --sv-focus: var(--sv-link-teal); --sv-border: rgba(0,0,0,0.06); --sv-status-success-text: #1B6B4A; --sv-status-success-bg: #E6F5EC; --sv-status-info-text: #3D5A5E; --sv-status-info-bg: #E0EBF0; --sv-status-warning-text: #8B5E1A; --sv-status-warning-bg: #FFF3E0; --sv-status-error-text: #9A2D22; --sv-status-error-bg: #FDECEB; } } /* Reduced motion โ mandatory in every stylesheet */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }
Activation Checklist
Every item a developer must verify before shipping. Check each against the guide sections cited.
Phase 1 โ Palette & Tokens
- Google Fonts loaded: DM Serif Display (400, 400i) + Outfit (300โ800) โ ยง04
- All 12 palette hex values match this guide exactly โ no approximations โ ยง01
- No 13th color in the codebase. Status colors are functional tokens, not palette โ ยง01
- CSS custom properties from ยง15 Quick Start are in the global stylesheet
--sv-font-displayuses the Georgia fallback stack โ ยง04--sv-font-bodyuses the -apple-system stack โ ยง04--sv-font-monois defined and used for all hex displays, code blocks, token labels โ ยง04--sv-text-secondaryresolves to full-opacity Mist/Storm โ no opacity shorthand โ ยง09- All 8 status semantic tokens (4 ร text/bg) are defined and switch on mode โ ยง09
Phase 2 โ Color Correctness
- Dark mode is the
:rootdefault โ light mode overrides via media query (portal + wiki) or never (site) โ ยง09 --sv-accent-textswaps from Electric Teal to Link Teal in light mode โ ยง09--sv-focusswaps from Electric Teal to Link Teal in light mode โ ยง09- Zero instances of Electric Teal (#00D4AA) as text on Cloud, White, or Seafoam โ ยง08
- Zero instances of Mist (#8BA4A8) as text on Cloud, White, or Seafoam โ ยง08
- Zero instances of Storm (#3D4F54) as text on Abyss, Midnight, or Deep Sea
- Info status light-mode BG is #E0EBF0, not #E6F0EE โ ยง05
- All warm-era hex values from v4.x have been migrated per ยง13
Phase 3 โ Components
- All CTA buttons use Midnight text on Electric Teal fill โ ยง05
- Light-surface primary buttons have a 2px solid Teal Dark border (WCAG 1.4.11) โ ยง05, ยง08
- Dark button (Midnight fill) is not used on dark surfaces โ ยง05
- Light-mode status chips have a 1px currentColor border โ ยง05
- Status chips use icon + label โ never color alone (WCAG 1.4.1) โ ยง05
- All interactive elements have visible focus rings (2px solid, 2px offset) โ ยง08
- Link colors match the spec table in ยง05: Electric Teal on dark, Link Teal on light
- Button hover includes translateY(-1px) and one-step color darken on the ramp โ ยง06
Phase 4 โ Typography
- DM Serif Display is used only for H1, H2, and the logo lockup โ ยง04
- DM Serif Display is never set to font-weight: bold or 700 โ ยง04
- Body and UI text use Outfit โ no Plus Jakarta Sans or Inter anywhere โ ยง04
- Hex values and code displays use the mono font stack โ ยง04
Phase 5 โ Accessibility & Motion
prefers-reduced-motion: reducemedia query is present in every stylesheet โ ยง06- Film grain overlay uses opacity โค 0.03 (decorative only) โ ยง06
- Ambient glow radials use Electric Teal at โค 6% opacity โ ยง06
- Focus ring: 2px solid, 2px offset
Phase 6 โ Email & Assets (deferred)
- Email templates use hardcoded hex values โ zero CSS custom properties โ ยง12
- Email CTA uses Midnight (#0A1628) text on Electric Teal fill โ ยง12
- Logo lockup implemented per ยง11 (White+Teal on dark, Midnight+Teal on light)
- Logo rendered as "StorageValet" (no space) in visual marks only โ logo lockup, favicon, merchandise, URL slugs. Written text uses "Storage Valet" (with space) โ ยง11
- Favicon and OG images updated to Midnight Teal system (deferred)
- Stripe portal branding updated (deferred)
- Canva brand kit updated to SV_Brand_Kit_2026_v6 (Midnight Teal)
- Print/Pantone mappings defined when producing physical materials (deferred)
Changelog
| Version | Date | Status | Summary |
|---|---|---|---|
| v6 | Apr 9, 2026 | Major version consolidating all Operation Midnight Teal work. Naming convention formalized: "StorageValet" (no space, PascalCase) is the visual wordmark โ used only where the brand name is rendered as a mark with the color split (logo lockups, favicon/app icon, merchandise, URL slugs, social handles, hashtags). "Storage Valet" (with space) is the written brand name โ used everywhere the name is read as text (page titles, meta tags, H1/H2/H3 headings, email copy, calendar invites, product names, CLAUDE.md/README headers, press, legal, and all documentation). Incorporates all v5.x fixes: Storm/Mist swatch corrections, Link Teal on light logo surfaces, button border 2px standardization, [data-theme="light"] clarification, 6-agent validation, sv-wiki row added to ยง09 per-product dark-mode behavior table. Version number reset for clarity. |
|
| v5.1.1 | Apr 8, 2026 | Archived | Patch release. Storm/Mist swatch role labels corrected. Link spec inline style fixed. Button border standardized to 2px. Logo "Valet" on light digital surfaces changed to Link Teal. [data-theme="light"] clarification added. Agent count updated to 6. |
ยฉ 2026 My Storage Valet LLC ยท Delaware