# Atlas Design System

> Canonical rules document. Category: Custom · Surface: web (dense desktop-first internal tool).
>
> Source of truth for color, typography, spacing, radii/shadows, components, motion, voice, and anti-patterns. Treat this file as authoritative; downstream agents must read it before generating any artifact that links `colors_and_type.css` or `styles.css`.

---

## 1. Product context & visual theme

Atlas is a standalone internal product — an **organisation ledger** for workforce management. Every organisational fact (who sits in which work group, at what capacity %, reporting to whom, in which function) is stored as a **time-bounded event** rather than a mutable record.

The visual language is a **dense desktop-first admin tool** in the spirit of Linear / Retool / Mercury Treasury, optimised for HR / Finance / Engineering leadership. It pairs:

- **A raspberry-coral accent (Flush)** used sparingly — a single primary action, the active selection, and the contractor encoding.
- **Warm plum-charcoal neutrals (Plum)** — the dark sidebar is `plum-900` (#241420), the app canvas is `plum-100` (#F5F1F4). The whole product reads premium-fintech rather than neon.
- **An editorial display serif (Newsreader)** for page titles and big numerals, paired with a **humanist grotesk (Hanken Grotesk)** for all UI text, and **IBM Plex Mono** for event hashes / NetSuite refs / cost centres.

What this system is **not**:

- Not a marketing site. No hero gradients, no oversized headlines, no decorative illustration.
- Not a generic Inter/Roboto SaaS sketch. The Newsreader serif is load-bearing.
- Not a beige/peach "AI canvas." The neutrals are explicitly **warm plum**, not warm beige.
- Not a single app mockup. The desktop and mobile apps are applied kits that prove the system; the root package is a design-system catalog.

### Design-system package contract

Atlas is governed in layers. Maintain the layer that owns the change:

| Layer | Files | Rule |
|-------|-------|------|
| Package index | `index.html` | Must catalogue foundations, components, previews, applied kits, and quality gates. It must not collapse into only `ui_kits/app/index.html`. |
| Rules | `DESIGN.md` | Canonical product, visual, interaction, mobile, and anti-pattern contract. |
| Tokens | `tokens/`, `styles.css`, `colors_and_type.css` | Token source first; downstream entries second. Do not invent one-off colours in applied kits. |
| Components | `components/` | Reusable primitives with source, typing, prompt companion, and preview coverage. |
| Preview cards | `preview/`, `guidelines/` | Focused evidence cards for auditing system foundations. They are not product screens and not alternate themes. |
| Applied kits | `ui_kits/app/`, `ui_kits/mobile/` | Product examples that consume the system. They can reveal missing components, but they do not replace the component layer. |
| Evidence | `source_examples/`, `context/` | Preserved source used for fidelity comparisons. |
| Tests | `tests/` | Contract tests that prevent package-shape regressions and product-fidelity regressions. |

If a UI kit exposes a missing pattern, integrate it back into the system: document the rule in `DESIGN.md`, add or update reusable components/previews when the pattern is generic, and add a regression test. Do not leave the fix only inside the applied app.

---

## 2. Color

Defined in [`tokens/colors.css`](tokens/colors.css) and aggregated in [`colors_and_type.css`](colors_and_type.css).

### Accent — Flush (raspberry-coral)

| Token              | Hex        | Use                                                |
|--------------------|------------|----------------------------------------------------|
| `--at-flush-50`    | `#FFF1F4`  | Accent wash / row hover                             |
| `--at-flush-100`   | `#FFE2E9`  | Active row, chip background                         |
| `--at-flush-200`   | `#FFC8D4`  | —                                                  |
| `--at-flush-300`   | `#F7A3B6`  | —                                                  |
| `--at-flush-400`   | `#F0738F`  | Decorative gradient pair                            |
| `--at-flush-500`   | `#E94E72`  | Primary button :hover                               |
| `--at-flush-600`   | `#E03A63`  | **Primary accent** — buttons, dots, contractor kind |
| `--at-flush-700`   | `#C12B51`  | Active text, focus border                           |
| `--at-flush-800`   | `#981F3F`  | —                                                  |
| `--at-flush-900`   | `#6C162C`  | —                                                  |

### Neutral — Plum (warm plum-charcoal)

| Token              | Hex        | Use                                                |
|--------------------|------------|----------------------------------------------------|
| `--at-plum-950`    | `#1E1019`  | Deepest dark surface                                |
| `--at-plum-900`    | `#241420`  | Sidebar, scrubber, dark overlays                    |
| `--at-plum-800`    | `#3C2A38`  | —                                                  |
| `--at-plum-700`    | `#5D4A57`  | Secondary copy, `--fg-3`, hover border              |
| `--at-plum-600`    | `#877A84`  | Tertiary / meta copy, `--fg-4`                      |
| `--at-plum-500`    | `#B2A8AF`  | Sidebar muted label                                 |
| `--at-plum-400`    | `#D1CACF`  | `--border-line`, sidebar inactive text              |
| `--at-plum-300`    | `#E3DDE1`  | `--border-subtle`, the default hairline             |
| `--at-plum-200`    | `#EEE9EC`  | Ghost-button :hover, employee chip bg               |
| `--at-plum-100`    | `#F5F1F4`  | App canvas (`--bg-tint`), table header, row hover   |
| `--at-plum-50`     | `#FAF8FA`  | Empty matrix cell                                   |

### Base + semantic

- `--at-black #150F14` · `--at-ink #221C26` · `--at-white #FFFFFF`
- **Success** `--at-success-fg #1B6E48` on `--at-success-bg` (13% alpha green)
- **Warning** `--at-warning-fg #8A5A12` on `--at-warning-bg` (16% alpha amber)
- **Info** `--at-info-fg #2F5B92` on `--at-info-bg` (14% alpha blue)
- **Role change** `--at-role #B07FE0` lavender (used only on role-change event nodes)

### Category tints (work-group categories)

`--at-cat-1 #E03A63` Bubble · `--at-cat-2 #3F73B5` Country · `--at-cat-3 #C58A2C` Other.

### Semantic role tokens (always reach for these, not raw ramps)

```
--fg-1 (black) → primary body & headings
--fg-2 (ink)   → default text
--fg-3         → secondary copy
--fg-4         → tertiary / meta
--fg-accent    → flush-600
--fg-inverse   → white

--bg-page        → white
--bg-tint        → plum-100 (app canvas)
--bg-tint-accent → flush-50
--bg-dark        → plum-900 (sidebar / overlays / scrubber)
--bg-accent      → flush-600

--border-subtle  → plum-300 (default hairline)
--border-line    → plum-400 (stronger divider)
--border-accent  → flush-600

--kind-employee   → plum-900
--kind-contractor → flush-600
```

### Color rules

- **One accent, used sparingly.** Flush appears on the single primary action per surface, the active row marker, the contractor encoding, allocation segments, and the focus ring — nothing else.
- **Two-colour person encoding everywhere.** Employees read `plum-900`, contractors read `flush-600`. AllocationBar / Avatar / Chip / matrix split bars all honour the same two anchors.
- **Backgrounds are flat plum tints only.** No gradients, no imagery, no texture. The single exception is the sidebar avatar fallback (`linear-gradient(135deg, flush-400 → flush-700)`) — a deliberate sparkle of identity.
- **Shadows are plum-tinted**, not neutral black — see `--shadow-sm/md/lg`. Depth is hairline borders + soft tinted elevation, never heavy.

---

## 3. Typography

Defined in [`tokens/typography.css`](tokens/typography.css) and [`tokens/fonts.css`](tokens/fonts.css).

### Stacks

```
--font-display  "Newsreader", "Spectral", Georgia, serif
--font-sans     "Hanken Grotesk", "Helvetica Neue", Arial, sans-serif
--font-mono     "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace
```

Loaded from Google Fonts via `tokens/fonts.css` (and re-loaded by `colors_and_type.css`). For production, swap for licensed binaries dropped into [`fonts/`](fonts/) and rewrite `@font-face` rules there.

### Type scale (dense internal-tool)

| Token             | Size  | Line  | Use                                  |
|-------------------|-------|-------|--------------------------------------|
| `--fs-display-lg` | 48px  | 52px  | Page hero numerals                   |
| `--fs-h1`         | 32px  | 38px  | Page titles (display serif)          |
| `--fs-h2`         | 24px  | 30px  | Card section titles                  |
| `--fs-h3`         | 20px  | 26px  | Drawer / modal titles                |
| `--fs-h4`         | 16px  | 22px  | Card titles (serif)                  |
| `--fs-h5`         | 14px  | 20px  | Sans semibold heading                |
| `--fs-h6`         | 13px  | 18px  | Card header label                    |
| `--fs-body-1`     | 13px  | 18px  | Default UI text                      |
| `--fs-body-2`     | 12px  | 16px  | Table cell / dense body              |
| `--fs-body-3`     | 11px  | 15px  | Meta / caption / role line           |

### Helpers

- `.at-h1`/`.at-h2`/`.at-h3` — display serif, 600 weight, `-0.01em` tracking.
- `.at-h5` — sans 600 (used for card titles in UI chrome).
- `.at-body` / `.at-meta` — Hanken Grotesk body and meta.
- `.at-mono` — IBM Plex Mono, tabular figures.
- `.at-num` — display serif, 600, tabular figures (big metric numerals).
- `.at-eyebrow` — sans 600, 10px, `0.16em` tracking, uppercase, accent colour.

### Rules

- **Display serif for page titles, card headlines, and big numerals only.** UI chrome (buttons, labels, body) is Hanken Grotesk.
- **Tabular figures everywhere.** `font-variant-numeric: tabular-nums` is on `body`, on `.at-num`, and on every component that renders a metric.
- **Eyebrows are uppercase, tracked `0.16em`, accent-coloured, 10px.** Not 12px. Not navy. Not bold-sans.
- **Mono is reserved for event hashes, NetSuite refs, cost centres, keyboard hints, and any code-like identifier.** Never use mono for body copy.
- **No Inter, Roboto, Arial as display.** Body fallback is allowed (`Helvetica Neue → Arial`), but the display face is always a serif.

---

## 4. Spacing

Defined in [`tokens/spacing.css`](tokens/spacing.css).

```
--space-2xs  4px   (tight icon gap)
--space-xs   8px   (chip gap, control gap)
--space-sm  12px   (card-head padding)
--space-md  16px   (default card padding)
--space-lg  24px   (section gap)
--space-xl  32px   (page padding)
--space-2xl 40px
--space-3xl 48px
--space-4xl 64px
--space-5xl 80px
```

### Density anchors

| Token              | Value | Where                                   |
|--------------------|-------|-----------------------------------------|
| `--row-height`     | 36px  | Table rows, nav items, tree rows        |
| `--control-height` | 28px  | Buttons, pills, inputs                  |
| `--cell-pad-y`     | 16px  | Matrix cell vertical padding            |
| `--cell-pad-x`     | 18px  | Matrix cell horizontal padding          |

### Rules

- **4px base grid.** Everything snaps to multiples of 4.
- **Dense but breathable.** 28px controls, 36px rows. Resist the temptation to inflate (Atlas is a power-user tool).
- **Page padding is `20–24px` vertical · `24–28px` horizontal.** Cards sit inside with 14px `card-head` padding and 12px between rows.

---

## 5. Layout & composition

### App shell (`templates/atlas-page/AtlasPage.dc.html`)

```
┌──────────┬─────────────────────────────────────────────────┐
│ Sidebar  │ Topbar (48px, breadcrumb · spacer · pill · btn) │
│ 224px    ├─────────────────────────────────────────────────┤
│ plum-900 │ Page (eyebrow + h1 + meta)                      │
│          │ StatStrip (4 KPI tiles, hairline-joined)        │
│          │ Card: People & allocation (rows of avatar +     │
│          │ name+role + chip + AllocationBar + status chip) │
└──────────┴─────────────────────────────────────────────────┘
```

- **Sidebar:** 224px, `--at-plum-900` background, white text, accent-tinted active row (`rgba(224,58,99,0.16)`) with a 2px flush bar on the left edge.
- **Topbar:** 48px, white/translucent, `border-bottom: 1px solid --border-subtle`, breadcrumb on the left, "As of Today" pill + primary button on the right.
- **Canvas:** `--bg-tint` (plum-100). Cards float as white rectangles with `--radius-md` and `--border-subtle`.

### Information density

- Tables use **table header bg = `--at-plum-100`** with `10px / 0.06em tracked / uppercase` column headers.
- Matrix cells render **headcount as serif 18px**, optional **FTE as 10px meta**, and a **4px split bar** showing employee vs contractor share.
- Cards group hairline-divided rows. Header is a single 12–14px padded row with a 13px semibold title and a 11px meta on the right.

### Responsive posture

Atlas is desktop-first for full editing. Minimum desktop working width is `1280px`; below that the sidebar collapses to icon-only and dense matrices scroll horizontally. Mobile is now a **consultation + guided actions** mode, not a shrunken copy of the desktop app.

### Mobile operating model

Mobile Atlas must support high-confidence inspection and small ledger-safe actions. It must not expose full-edit workflows or dense desktop maintenance screens.

- **Consultation first:** people, team, reporting line, current allocation, compact history, event status, and date context are readable in one-hand layouts.
- **Guided actions only:** mobile actions are short, explicit flows with a confirmation sheet, impact preview, and ledger-event outcome. They are never freeform matrix edits, bulk changes, cost-table editing, or organisation restructuring.
- **No future-domain commitments:** mobile patterns stay generic (`Guided action`, `Decision queue`, `Impact preview`, `Event feed`) so future workflows can plug in without the design system naming a feature before the product owns it.
- **Same Atlas system:** mobile uses the same Flush + Plum palette, Newsreader / Hanken / IBM Plex Mono stacks, semantic tokens, status colours, and ledger language. It is not a separate mobile brand.
- **Native touch contract:** touch targets are at least 44px, body copy is at least 14px, meta copy is at least 12px, and hover-only affordances always have visible touch equivalents.

Mobile surface primitives:

| Primitive | Purpose | Contract |
|-----------|---------|----------|
| `MobileTopbar` | Current workspace/date + global search + global time-machine actions | 56px high, white surface, hairline bottom border, icon-only search/time controls |
| `MobileBottomNav` | Primary consultation routes: Work groups, Functions, People | 64px high, 3 items, Flush only for active route |
| `MobileCommandSearch` | Full-screen search and jump targets | Search field first, grouped results, keyboard hints hidden on touch |
| `MobileSummary` | Person/team current state | Serif metric or title, compact allocation bar, status chip |
| `MobileDetailSheet` | Person/team/event detail | Full-height sheet, sticky header, ledger rows and next action |
| `MobileActionSheet` | Guided action flow | One primary action, one cancel, explicit ledger event preview |
| `MobileDecisionQueue` | Manager/leadership pending decisions | Stacked decision rows with impact preview, not a data table |
| `MobileImpactPreview` | Explain the result before confirmation | Before/after allocation, affected people, effective date |
| `MobileEventFeed` | Replace ledger tables on mobile | Chronological cards with mono event IDs and status chips |
| `MobileDateScrubber` | Global compact time-machine control | Bottom sheet timeline opened from the topbar; selected date applies across Work groups, Functions, and People |

Desktop-only surfaces must stay desktop/tablet: matrix editing, bulk structural changes, contractor cost tables, full event drawer composition, and dense reporting tables. On mobile these become read-only summaries, drill-down lists, or guided action handoffs.

---

## 6. Components

All components are framework-light React (no deps) that inject their own scoped `<style>` and consume the CSS custom properties above, so they work standalone in any HTML host that links `colors_and_type.css`.

### Core ([`components/core/`](components/core/))

- **`Button`** — 28px dense action button. Variants: `default` (white + hairline), `primary` (flush-600 fill), `ghost` (transparent → plum-200 on hover). `iconOnly` for 28×28 square. Always wears the `--ring-accent` focus ring.
- **`Chip`** — 1px×8px pill (18px line-height). Tones: `employee` (plum-200), `contractor` (flush-100), `active` (success), `planned` (warning), `ended` (muted), `fn` (function tag, plum-100 + hairline). Optional 6px leading dot for kind encoding.
- **`Avatar`** — Monogram, 22 / 32 / 56 px. Square-ish at md/lg (`border-radius: 8/14px`), round at sm. Tinted by `kind` (`employee` plum, `contractor` flush). Two-letter initials, derived from `name`.
- **`Field`** — Drawer form anatomy primitive: label above, 30px bordered control, hint/error below. Error uses `--at-flush-700`; focus uses `--ring-accent`.
- **`FieldRow`** — Equal-column layout for two or three related drawer Fields. Gap is `--space-sm`; columns collapse on narrow hosts.
- **`Hint`** — Stand-alone helper text for drawer sections. Tones: `neutral`, `warn`, `error`.
- **`ValidationMessage`** — Section-level feedback for cross-field validation such as allocation totals. Tones: `error`, `warning`, `info`, `success`; copy must include the current value when useful.

### Feedback ([`components/feedback/`](components/feedback/))

- **`Toast`** — Transient post-commit, network, or ambient-state feedback card. The component is the card only; host stacks own top-right positioning and duration.
- **`Banner`** — Persistent top-of-section/page status for time-travel, environment, connection, or other state the user must keep while working.
- **`ConflictBanner`** — Full drawer-body replacement for concurrency conflicts. It requires a reload/discard decision and is not used for validation or network errors.

### Workforce ([`components/workforce/`](components/workforce/))

- **`AllocationBar`** — The signature visualization. A stacked horizontal bar of a person's capacity %, segments coloured by category (1 raspberry / 2 navy / 3 amber). Capacity under 100% leaves a **diagonal-hatched plum tail**; over 100% saturates to flush-700. Pairs with a status chip.
- **`StatTile`** + **`StatStrip`** — A KPI strip: hairline-joined 4-column grid of `label / serif numeral / optional meta`. Label is `.at-eyebrow`. Numeral is `--font-display` 28px tabular. The strip is bordered as one rounded rectangle.

### Applied product surfaces ([`ui_kits/app/`](ui_kits/app/))

The applied app is part of the design-system contract. It must stay equivalent to the imported Atlas prototype and include the routed product surfaces preserved in `overview.jsx`, `explorer.jsx`, `detail-screens.jsx`, and `overlays.jsx`.

- **Dimension Explorer** — Default workspace. Shows dimensions, nested work-group tree, selected-group detail pane, filters, and date-aware totals computed from the assignment ledger.
- **Overview** — Organisation KPI workspace and matrix entry. It should never collapse to only a KPI strip plus a people list.
- **Matrix** — Function × work-group table. Cells show serif headcount, optional FTE metadata, and a 4px employee/contractor split bar. Empty cells use `--at-plum-50`.
- **People and person detail** — Directory table plus person detail with identity side panel, allocation bar, allocation chips, Gantt, and git-log style event history.
- **Ledger tables** — Events, reporting, functions, and contractor costs use dense tables, sticky context headers where needed, uppercase 10px column labels, and tabular numeric cells.
- **Command palette** — `⌘K` / `Ctrl+K` opens a centred white palette with search, actions, people results, jump targets, keyboard hints, and flush hover wash.
- **Event drawer** — Right-side drawer for allocation, hire, role-change, contract-end, and role-creation events. It appends ledger records; it never implies destructive editing.
- **Time machine and scrubber** — Time-machine screen opens the dark plum scrubber. The scrubber is a dark component in the single Atlas system, with range input, timeline ticks, today cursor, planned-event state, concise legend, and app-wide `viewDate` recomputation through `assignmentAt` / `peopleAt`.

### Mobile product surfaces ([`ui_kits/mobile/`](ui_kits/mobile/))

The mobile kit is a separate consultation-first reference, not a responsive breakpoint of `ui_kits/app/`. It demonstrates the required mobile primitives with Atlas tokens:

- **Mobile work groups** — phone-scale Dimension Explorer: work-group tree, selected-group totals, current allocation, planned events, and guided handoff actions.
- **Mobile functions** — role and coverage consultation: function summaries, role rows, owners, and guided role-event handoffs without exposing the full desktop drawer.
- **Mobile people** — directory and person detail: identity, reporting line, allocation, compact ledger, and detail sheet behaviour.
- **Mobile action sheet** — generic guided action flow with impact preview and ledger-event confirmation.
- **Mobile command search** — icon-triggered full-screen search for work groups, functions, people, and events.
- **Mobile time machine** — icon-triggered global bottom-sheet scrubber with current date, ticks, and event chips. It is not a bottom-nav route.

### Component design rules

- **Inject your own scoped style.** Use the `ensureStyle(id, css)` pattern (see `Button.jsx`) so a component dropped into a vanilla HTML host still works.
- **Density anchors come from tokens.** Never hard-code 28px or 36px — use `--control-height` / `--row-height`.
- **Hover = border darken + bg-tint wash.** Never bg-fill primary on hover; never scale or bounce.
- **Active/selected = `--at-flush-100` + `--at-flush-700` text + 2px left bar.**
- **Focus-visible = `--ring-accent` (flush-600 at 18% alpha).** Same ring on every focusable element.

---

## 7. Motion & interaction

- **Transitions are 0.1–0.18s ease on `color`, `border-color`, `background`, `box-shadow`.** Nothing slower; nothing infinite.
- **Soft fade + 4px rise** (`opacity 0 → 1`, `translateY(4px) → 0`) for entering panels / drawers / palettes.
- **No bounce, no scale, no infinite spin.** A spinner is allowed only as a tiny indeterminate progress at `flush-600`.
- **Hover:** borders darken to `plum-700`; ghost buttons fill `plum-200`; table rows and tree rows wash to `plum-100`.
- **Press:** colour shift only — no transform.
- **Reduced motion:** when `prefers-reduced-motion: reduce`, drop the rise + fade and leave only the colour transition (still ≤ 120ms).

---

## 8. Voice & brand

### Tone

Calm, operational, precise. Atlas states facts — "30 people · 24.2 FTE", "Contract will end 31 Jul 2026" — it does not sell. Copy is mostly declarative noun phrases and short verbs in **second-person rare** mode.

### Casing & spelling

- **Sentence case** for body, buttons, and chips ("New event", "Adjust allocations", "Employee").
- **UPPERCASE + `0.16em` letter-spacing** for eyebrows and column headers ("ORGANISATION", "MONTHLY CONTRACTOR SPEND").
- **British English.** "organisation", "allocation", "cancelled". Not "organization".

### Numbers are first-class

- **Tabular figures everywhere.** Always.
- **Headline metrics in display serif** (`.at-num`).
- **FTE to one decimal** (24.2). **Percentages as whole numbers** (30%). **Money compact** (€47.7k, not €47,720). **Dates as `DD MMM YYYY`** ("01 Jan 2026").

### Event language

- Past tense for history: "Joined Core", "Capacity re-allocated".
- Future tense for planned events: "Contract will end".
- **Every change reads as a ledger entry, never a destructive edit.** "Capacity re-allocated", not "Edited allocations".

### Brand mark

The "A" mark — a 40×40 `flush-600` square with `10px` radius and a white Newsreader "A" — is the single brand atom. See [`assets/atlas-mark.svg`](assets/atlas-mark.svg), [`assets/atlas-logo.svg`](assets/atlas-logo.svg) (light), and [`assets/atlas-logo-inverse.svg`](assets/atlas-logo-inverse.svg) (dark).

The app icon is a separate launch-surface asset, not a scaled-up mark: [`assets/atlas-app-icon.svg`](assets/atlas-app-icon.svg) uses a 1024×1024 `plum-900` rounded canvas, subtle ledger geometry, and the Flush mark with a path-based white "A" so PNG exports do not depend on local font rendering. Runtime copies and PNG exports live under [`build/`](build/): `icon.svg`, `icon-1024.png`, `icon-512.png`, `icon-192.png`, `apple-touch-icon.png`, and `favicon-32.png`.

### Iconography

- **Line icons on a 24×24 grid, 1.5px stroke, round caps/joins.** See [`assets/icons.svg`](assets/icons.svg) — the canonical inline sprite. Browse every glyph with usage examples in [`preview/icons.html`](preview/icons.html).
- **Inline `<svg>` with `stroke="currentColor"`** so icons inherit text colour.
- **14px in chrome, 16px in nav.**
- **No emoji. No unicode glyph icons.** If you need an icon not in the sprite, match the Lucide / Feather 1.5px style.

---

## 9. Anti-patterns (do not do these)

The agent must not regress to any of these when generating Atlas artifacts:

- ❌ Aggressive purple/violet hero gradients. Atlas backgrounds are **flat plum tints**.
- ❌ Beige / cream / peach / pink / orange-brown "AI canvas" washes. Neutrals are **plum**, not warm beige.
- ❌ Inter / Roboto / Arial as a **display** face. Display is always Newsreader.
- ❌ Emoji, unicode glyph icons, or stock-photo illustrations. Icons are line SVGs on a 24×24 grid.
- ❌ Generic feature-grid icon rows (✨ 🚀 🎯). Atlas does not market itself.
- ❌ Rounded boxes with a left-border accent stripe for every section. The 2px flush bar is reserved for the active sidebar row.
- ❌ Hand-drawn humans, decorative blobs, gradient meshes.
- ❌ Bouncy / scale-up hover micro-interactions. Hover is colour-only.
- ❌ Heavy neutral-black shadows. Shadows are **plum-tinted** (`rgba(30,16,25,*)`).
- ❌ Display headlines on cover/title surfaces above 140px — Atlas is dense, not poster-like.
- ❌ Filler stat-slop ("10× faster", "99.9% uptime"). Every metric must be a real Atlas number or an honest placeholder.
- ❌ Using **flush** for secondary or decorative purposes. Flush is the **single accent**, used at most twice per visible surface.
- ❌ Exposing project metadata, viewport selectors, theme knobs, or "demo controls" inside a product surface.
- ❌ Treating `ui_kits/app/` or `ui_kits/mobile/` as the whole design system. Applied kits are evidence and examples; tokens, components, previews, and rules remain canonical.

---

## Related package files

- [`index.html`](index.html) — design-system catalog and package map.
- [`README.md`](README.md) — package overview, product context, preview manifest, reuse workflow.
- [`SKILL.md`](SKILL.md) — Claude-style skill entry for agent invocation.
- [`colors_and_type.css`](colors_and_type.css) — single-file CSS entry (tokens + helpers).
- [`styles.css`](styles.css) — modular CSS entry (`@import`s each `tokens/` file).
- [`preview/`](preview/) — focused review cards (colors, type, spacing, components, brand).
- [`assets/`](assets/) · [`build/`](build/) · [`fonts/`](fonts/) — brand marks, runtime icons, font binaries.
- [`source_examples/`](source_examples/) — preserved high-signal source files (Button, Chip, Avatar, AllocationBar, StatStrip, atlas-data, AtlasScreens, atlas-runtime).
- [`ui_kits/app/`](ui_kits/app/) — runnable applied interface (Workforce overview with role-based components).
- [`components/`](components/) · [`guidelines/`](guidelines/) · [`templates/`](templates/) — source-of-truth React + guideline cards + template shell.
