# Olive & Oat UI Style Guide

A muted olive system with oat-coloured surfaces, offering an earthy but cleaner alternative to brown.

Olive & Oat is calm and practical. Keep the olive muted; brighter yellow-green shades quickly become visually demanding.

This system keeps the interface ADHD-friendly by using layered neutral surfaces, one clear primary colour, one quieter secondary colour and very restrained supporting accents.

---

## 1. Core rules

- Use neutral backgrounds and surfaces for most of the page.
- Reserve the primary colour for the next important action.
- Use the secondary colour for optional or supporting actions.
- Use spacing and typography before adding colour.
- Keep one main task visible at a time.
- Avoid decorative motion and unexpected layout changes.
- Never communicate status using colour alone.

---

## 2. Light mode

| Token | Value | Purpose |
|---|---:|---|
| `--page` | `#F9F7F0` | Main page background |
| `--page-accent` | `#ECE8D9` | Subtle page depth |
| `--surface` | `#FFFDF8` | Cards and dialogs |
| `--surface-alt` | `#F4F1E5` | Inputs and secondary regions |
| `--surface-strong` | `#E3DFCD` | Selected and elevated elements |
| `--text` | `#35362B` | Main text |
| `--muted` | `#737363` | Secondary text |
| `--border` | `#D7D3C1` | Borders and dividers |
| `--primary` | `#777B4F` | Main action and brand colour |
| `--primary-hover` | `#5D623A` | Primary hover and active state |
| `--secondary` | `#DDE6E2` | Secondary action |
| `--secondary-hover` | `#CEDBD5` | Secondary hover state |

---

## 3. Dark mode

| Token | Value | Purpose |
|---|---:|---|
| `--page` | `#030401` | Main dark background |
| `--page-accent` | `#0A0C05` | Background depth |
| `--surface` | `#15170E` | Cards and dialogs |
| `--surface-alt` | `#212418` | Inputs and secondary regions |
| `--surface-strong` | `#343827` | Selected and elevated elements |
| `--text` | `#F5F4EA` | Main text |
| `--muted` | `#C4C3B4` | Secondary text |
| `--border` | `#505443` | Borders and dividers |
| `--primary` | `#A9AD75` | Main action and brand colour |
| `--primary-hover` | `#8F945D` | Primary hover and active state |
| `--secondary` | `#3E5A57` | Secondary action |
| `--secondary-hover` | `#50706C` | Secondary hover state |

---

## 4. Colour roles

### Primary

Use the primary colour for grounded primary actions and selected states.

Use it on:

- the main button
- active navigation
- selected controls
- important links
- compact brand marks

The primary colour should answer:

> What should I do next?

### Secondary

Use the secondary colour for cool green-grey controls that prevent the palette becoming too earthy.

Use it on:

- secondary buttons
- optional actions
- toolbars
- supporting cards
- inactive navigation

The secondary colour should answer:

> What else can I do?

### Supporting accents

| Role | Light | Dark |
|---|---:|---:|
| Accent 1 | `#96966D` | `#BCBD8D` |
| Accent 2 | `#6E8B88` | `#82A09D` |
| Accent 3 | `#C29A64` | `#CFAD76` |
| Success | `#6F8464` | `#9BAF8F` |
| Danger | `#A36558` | `#D18E7E` |

Use one supporting accent per component whenever possible.

Recommended page balance:

- **70%** neutral backgrounds and surfaces
- **20%** primary and secondary structure
- **10%** supporting accents and status colours

---

## 5. Typography

```css
--font-body:
  "Atkinson Hyperlegible",
  "Segoe UI",
  Arial,
  sans-serif;

--font-ui:
  "Lexend",
  "Segoe UI",
  Arial,
  sans-serif;
```

Use **Atkinson Hyperlegible** for paragraphs, instructions, tables and form help.

Use **Lexend** for headings, buttons, navigation and labels.

Recommended settings:

- body text: `18px`
- body line-height: `1.6`
- paragraphs: no wider than `70ch`
- labels and buttons: `16–18px`
- left-aligned body text
- concise headings
- no long all-caps passages

---

## 6. Layout and spacing

Use an 8-pixel spacing rhythm.

```text
4px   tiny adjustment
8px   closely related elements
16px  normal component spacing
24px  groups inside a section
32px  separation between sections
48px+ major page regions
```

Keep one purpose per card. Prefer spacing and surface changes over thick borders or multiple shadows.

---

## 7. Components

### Primary button

```css
background: var(--primary);
color: var(--on-primary);
```

Use one obvious primary button per task area.

### Secondary button

```css
background: var(--secondary);
color: var(--on-secondary);
```

Use for optional or reversible actions.

### Inputs

```css
background: var(--surface-alt);
border: 1px solid var(--border);
color: var(--text);
```

On focus:

```css
border-color: var(--primary);
outline: 3px solid var(--focus);
```

### Validation

- Place the error beside the affected field.
- Explain how to fix the problem.
- Preserve the user’s entered data.
- Use text or an icon as well as colour.

---

## 8. ADHD-friendly interaction rules

- Present one main task at a time.
- Reduce optional decisions near the primary action.
- Keep related controls close together.
- Use consistent button placement.
- Avoid unexpected layout movement.
- Respect `prefers-reduced-motion`.
- Keep notifications short and actionable.
- Use progressive disclosure for advanced options.

---

## 9. Accessibility checks

Before release:

- test keyboard navigation
- verify visible focus states
- check text and button contrast
- test at 200% zoom
- connect labels to controls
- test light and dark modes separately
- use semantic HTML before ARIA

---

## 10. Quick tokens

```css
:root {
  --page: #F9F7F0;
  --surface: #FFFDF8;
  --surface-alt: #F4F1E5;
  --text: #35362B;
  --muted: #737363;
  --border: #D7D3C1;
  --primary: #777B4F;
  --secondary: #DDE6E2;
}

html[data-theme="dark"] {
  --page: #030401;
  --surface: #15170E;
  --surface-alt: #212418;
  --text: #F5F4EA;
  --muted: #C4C3B4;
  --border: #505443;
  --primary: #A9AD75;
  --secondary: #3E5A57;
}
```

---

## 11. Final rule

When the interface begins to feel busy, remove emphasis before adding another colour. Neutral surfaces should make the primary action easy to find without demanding constant attention.

---

## Typography sample card

Every login demo includes a sample content card so the heading, subheading and paragraph fonts can be compared in a realistic surface.

The demos load the fonts through the Google Fonts CSS API:

```css
@import url(
  "https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Lexend:wght@400;500;600;700&display=swap"
);
```

Recommended use:

- **Lexend** for the card heading, subheading, labels and badges
- **Atkinson Hyperlegible** for the paragraph and longer reading text

Example structure:

```html
<article class="sample-card">
  <p class="sample-card__eyebrow">Typography sample</p>
  <h3>A calm and readable card heading</h3>
  <p class="sample-card__subheading">
    A concise subheading demonstrates Lexend at a smaller interface size.
  </p>
  <p class="sample-card__body">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  </p>
</article>
```

