# Good Journey — Brand Contract

This file is the machine-readable brand contract for **Good Journey**. An agent that builds anything for this brand — a page, a deck, a PDF, an email, a component — applies it exactly.

| Field | Value |
|---|---|
| Brand | `goodjourney` |
| Brand name | Good Journey |
| Company | `goodjourney` |
| Website | https://goodjourneydonuts.com |
| Theme | `marketing` |
| Channel | `stable` |
| Version | 1 |
| Pointer seq | 1 |
| Manifest sha256 | `4838b8c2e5f5ed900b71a83f3b06911388381bdd7304743ee4f7f96e4507d2fb` |
| Signing key id | `goodjourney-20260a97` |
| Guide schema | 2 |
| Generated at | 2026-10-03T15:15:04Z |
| Canonical URL | https://goodjourney.brandguide.strietzel.ai/api/public/v1/agent.md |

**Machine-readable siblings**

| File | URL |
|---|---|
| Discovery | https://goodjourney.brandguide.strietzel.ai/api/public/v1/.well-known/styleguide.json |
| This contract | https://goodjourney.brandguide.strietzel.ai/api/public/v1/agent.md |
| This contract (llms.txt) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/llms.txt |
| Effective guide | https://goodjourney.brandguide.strietzel.ai/api/public/v1/effective.json |
| Signed manifest | https://goodjourney.brandguide.strietzel.ai/api/public/v1/manifest.json |
| Stylesheet (normative) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/brand.css |
| Stylesheet (descriptive) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/brand.descriptive.css |
| Tailwind v4 theme | https://goodjourney.brandguide.strietzel.ai/api/public/v1/tokens.tailwind.css |
| Design tokens (DTCG) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/tokens.dtcg.json |
| Brand book (PDF) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/guide.pdf |
| Asset bytes | `https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/<sha256>` |
| Logo redirect | `https://goodjourney.brandguide.strietzel.ai/api/public/v1/logo/<asset id>` |
| App icons (Web App Manifest) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/appicons.json |
| App icon redirect | `https://goodjourney.brandguide.strietzel.ai/api/public/v1/appicon/<any\|maskable\|monochrome\|ios\|favicon>` |

## 1. Protocol

1. **Fetch this file** from `https://goodjourney.brandguide.strietzel.ai/api/public/v1/agent.md` at the start of the work. Do not rely on a copy in your context, in a cached repo, or in your memory.
2. **Pin the version you built against.** This contract is Good Journey **v1**, manifest `4838b8c2e5f5ed900b71a83f3b06911388381bdd7304743ee4f7f96e4507d2fb`. Record both in your output.
3. **Apply §2–§9 exactly.** They are not suggestions and not defaults; they are the brand.
4. **Never invent a value.** No colour, size, face, duration, radius, easing, spacing step or asset that is not listed in this file exists for this brand.
5. **If a value you need is missing, STOP and request it.** Ask the brand owner, or raise an overlay request against this master. Never approximate, never pick "something close", never sample a colour out of a screenshot.
6. **Report the manifest sha you built against** in your final message (see §10).
7. **Run the verification in §10 before declaring the work done.** "It looks right" is not a result.
8. **This tier is read-only.** There is no write path here. Changes to the brand happen only in the style-guide master, by a human.

**Other non-negotiables declared by this brand**

| Category | Rule |
|---|---|
| Sub-brands | Donuts and Cookies use the parent logotype plus their pill (DONUTS / COOKIES) and their flavour palette; they never get their own logotype. |
| Claims | Health and nutrition claims (zero added sugar, net carbs, keto, gluten-free, non-GMO) appear only as printed on the current pack. |
| Accessibility | Every text pair meets WCAG 2.1 AA (4.5:1, 3:1 for large text); every interactive state has a visible focus ring and a reduced-motion alternative. |

## 2. Identity and voice

**Positioning.** For people who want to enjoy the journey to good health, Good Journey offers unreasonably good, cheat-free donuts and cookies in a variety of popular flavors — made with real ingredients and a natural sweetener found in fruits and vegetables that tastes like cane sugar and is far better for you (pp. 6, 10, 11).

**Emotion.** Here’s where the journey gets sweet.

**Customer.** People on a journey to good health — from fitness lovers to people newly noticing they feel better eating cleaner — who are positive, energetic, open and always looking for ways to enhance their experience without compromising their lifestyle (p.19). Three types: the Expert (clean-eating, low price sensitivity, “This is legit. A no-brainer. Done.”), the Seeker (recently diagnosed, wants to do it right, “I’ve got this / They’ve got me”) and the Newbie (new to nutrition, wary of being duped, needs transparent, simple, supportive messages) (pp. 21–26).

**The tension**

| Pole | Traits |
|---|---|
| The Lover | passion, pleasure, indulgence, sensory, alluring |
| The Caregiver | compassion, nurturing, health, supportive, reassuring |

**Personality**

- Bold — confident, energetic, innovative (and not afraid to show it) (p.14)
- Real — authentic, honest, transparent, earnest, plainspoken (p.14)
- Healthy — healthy bodies, healthy minds, healthy attitudes (p.14)
- Playful — fun, bright, positive vibes (p.14)
- Primary archetype The Lover, secondary The Caregiver: delightful, health-conscious products that promote self-love and care for others (p.15)

**Signature moves**

| Name | What it is |
|---|---|
| The swooping R | The logotype's R kicks its leg into a wave under the N — the road of the journey. Never redrawn (pp. 28–33). |
| The wave rule | A lime wavy line under every section label (pp. 19–55) — the road again, as a rule. |
| Colour-shift emphasis | A headline's key phrase changes colour — lime on navy, periwinkle on cream — instead of changing weight (pp. 6, 9–11, 19). |
| The highlighter | A flat lime block behind one phrase of a tagline (pp. 5, 17). |
| Stickers and doodles | Donut, cookie, smiley GOOD, “yum!”, “sweet”, “You’ll love” stickers and line doodles of rockets, stars and planets (pp. 1, 21–25, 30). |
| The elongated “goooood” | “Get the goooooooooood stuff!” (p.37), “IT’S GOOOOOOOOD TO SEE YOU!” (p.46) — the brand stretches its own name for joy. |

**Visual references**

- Navy pages and cream pages alternating like a book, with lime as the light in between (pp. 2–56)
- Hand-drawn doodles — rockets, stars, speech bubbles saying “yum!” and “HI!”, looping arrows (pp. 1, 14, 21–25)
- Saturated product still life: packs, donuts and cookies on flat colour grounds that match the pack (pp. 4, 13, 45, 46, 54, 55)
- Real-customer UGC collages (p.7)
- Stickers with hard offset shadows (p.30)

**Feels / never feels**

| Always feels | Never feels |
|---|---|
| Joyful | Clinical or diet-food |
| Indulgent | Preachy about sugar |
| Caring | Guilt-tripping |
| Honest | Goofy-sweetener cheap |
| Bright | Protein-bar macho |
| Energetic | Vague about ingredients |
| Supportive | — |
| Unreasonably good | — |

**Voice principles**

- Lead with delight, then reassure: taste first (“Highly delicious? Also yes.”), then the honest reason it is better for you (p.16).
- Plainspoken and transparent: real ingredients, clear labels, no hidden anything — the Newbie and the Seeker are afraid of being duped (pp. 23–26).
- Playful with a wink: GASP!, yikes, “goofy sweeteners”, stretched “goooood” (pp. 6, 9, 37, 46).
- Supportive, never preachy: good health is a journey; treats are part of it, not a detour (p.16). Be kind to yourself (pp. 55, 56).
- Favour: unreasonably good · cheat-free · real ingredients · natural sweetener · journey · sweet · treats · goodies · zero added sugar · low-carb · tasty vibes.
- Avoid: guilt language, diet-culture shame, medical promises, and any health or nutrition claim the pack does not carry.
- Speak as “we” to “you”; the founders sign as Helen & Kristoffer (p.46).

**Capitalization**

- The brand is GOOD JOURNEY in the logotype and Good Journey in copy; the ® accompanies the logotype (pp. 32–33), not running text. GOJO is a separate logotype (p.30).
- Headlines, labels and buttons are uppercase; taglines and body copy are sentence case.
- Flavour names are set as artwork: CHA·CHA, CHOC·A·LOT, COSMIC CHURRO — with the interpunct.
- Never uppercase a customer's name, an email address or a data value in the operator register.

**Microcopy — copy these registers, do not invent new ones**

| Context | Example |
|---|---|
| Brand line (pp. 1, 16, 55) | Here’s where the journey gets sweet. |
| Brand line (p.16) | Good health is a journey. Now treats don’t have to be a detour. |
| Brand line (p.16) | Low-carb? Yes. Highly delicious? Also yes. |
| Brand line (p.16) | Your sweet retreat. |
| Brand line (p.17) | Sometimes you gotta stop and eat the donuts. |
| Brand line (p.17) | It’s not the destination. It’s the Good Journey treats that matter. |
| Why (p.9) | Good health is a journey. We’re bringing the treats. |
| What (p.11) | We’re Good Journey. We make unreasonably good cheat-free donuts and cookies that make healthy eating fun. |
| Purpose + vision (p.5) | Be Earth’s most human-centric company, providing delicious, high-quality, and guilt-free foods that empower people to be happy and healthy. By 2035, we’ve empowered a billion people to be happy and healthy. |
| Website announcement rail (p.36) | Shop zero added sugar donuts and cookies with free shipping! |
| Website hero (p.36) | THE DONUTS YOU THOUGHT YOU COULDN’T HAVE AGAIN |
| Website hero body (p.36) | Tired of missing out because of blood sugar concerns, gluten sensitivity, or keto requirements? We get it. That’s why we created soft, perfectly sweet donuts that work with your body, not against it. |
| Website section (p.36) | REAL DONUT TASTE, ZERO REGRETS |
| Primary CTA (p.36) | SHOP NOW |
| Navigation (p.36) | Shop · About · Sign In |
| Trade show (p.37) | HIGH FIBER • KETO • NON GMO |
| Trade show (p.37) | Get the goooooooooood stuff! |
| Donut pack (p.4) | TASTY VIBES ONLY! |
| Donut pack flavour line (pp. 4, 38) | CHA·CHA — Horchata frosted cake donut · Gluten-Free · Keto · Delicious! |
| Mailer insert (p.46) | IT’S GOOOOOOOOD TO SEE YOU! |
| Cookie carton (p.55) | Be kind to yourself — have a cookie! We are committed to bringing you only the best products made with ingredients that make your body and mind happy. |
| Pack badges (p.55) | 0g ADDED SUGAR · 1g NET CARBS · GLUTEN FREE |
| Support line (p.55) | QUESTIONS? EMAIL HELLO@GOODJOURNEYFOODS.COM |
| Closing (p.56) | Thank you and be kind to yourself. |

**Registers**

| Register | Principles |
|---|---|
| Website, packaging, social and the brand book | Delight first, reassurance second.; One statement per band; one highlighted phrase per block.; Stickers and doodles may speak (“yum!”); body copy stays plain. |
| CRM, orders and back-office tools | Terse and literal; a label is a noun, an action a verb.; State counts and units: “12 open orders”.; Warm but brief in empty states; never playful in an error. |


## 3. Colour

### Cream page

The manual's light page and the website body: a cream ground, navy ink, lime highlights, an orange signal used as a fill. Every palette and flavour colour is declared here, with its print build.

Ground token: `--gj-surface`.

| Token | Role | Cream page (light) | Print build |
|---|---|---|---|
| `--gj-navy` | The brand ink: the wordmark, headlines, body copy, the navy blocks | #312E7C | cmyk: 92, 97, 29, 19 · notes: p.34 and p.52. p.43 prints this hex beside CMYK 43, 58, 0, 60 under a PINK swatch — see drift. · pantone: 669 C |
| `--gj-violet` | Secondary brand colour — a cooler, lighter navy | #5D59C4 | cmyk: 78, 78, 9, 1 · pantone: 7670 C |
| `--gj-orange` | The signal colour: stickers, the website CTA fill, the Horchata and Churro packs | #F15627 | cmyk: 0, 82, 96, 0 · pantone: 1585 C or 1655 U |
| `--gj-sky` | Sky blue — the Dark Chocolate pack, the website announcement rail | #5DAFF4 | cmyk: 60, 26, 0, 0 · pantone: 284 U |
| `--gj-lime` | Lime — the cover, the highlighter, the wave rule, accents on navy | #E9E72F | cmyk: 20, 0, 100, 0 · pantone: 394 C or 388 U |
| `--gj-pink` | Pink — the Horchata pack and sticker grounds | #FFD0E5 | cmyk: 0, 37, 0, 0 · pantone: 203 U |
| `--gj-lavender` | Lavender — persona panels, quote cards, the small-scale table cells | #D3D3EB | cmyk: 10, 10, 0, 8 · pantone: 7443 C |
| `--gj-lime-tint` | Pale lime — persona panels, quote cards, the large-scale table cells | #F1F2C4 | cmyk: 0, 0, 19, 5 · pantone: 0131 C |
| `--gj-cream` | Cream — the page | #FFF8EF | cmyk: 0, 3, 6, 0 · pantone: 9226 U |
| `--gj-white` | White | #FFFFFF | cmyk: 0, 0, 0, 0 · pantone: WHITE INK |
| `--gj-denim` | Donuts · Dark Chocolate flavour — the deeper blue | #63A1D6 | cmyk: 70, 30, 0, 15 · pantone: 2143 U |
| `--gj-chocolate` | Donuts · Dark Chocolate flavour — chocolate brown | #543A34 | cmyk: 50, 67, 67, 50 · pantone: 7582 U |
| `--gj-brick` | Donuts · Horchata flavour — brick red | #D34D2A | cmyk: 15, 85, 100, 0 · pantone: 2347 U |
| `--gj-peach` | Donuts · Horchata flavour — peach | #FED09E | cmyk: 0, 20, 40, 0 · pantone: 4029 U |
| `--gj-marigold` | Cookies · Churro flavour — marigold | #FDB515 | cmyk: 0, 32, 100, 0 · pantone: 143 C |
| `--gj-tangerine` | Cookies · Churro flavour — tangerine | #F47522 | cmyk: 0, 52, 86, 4 · pantone: 158 C |
| `--gj-butter` | Cookies · Churro flavour — butter | #FFDD98 | cmyk: 0, 13, 40, 0 · pantone: 1205 C |
| `--gj-periwinkle-grey` | Cookies · Churro flavour — periwinkle grey | #8A8BC4 | cmyk: 30, 29, 0, 23 · pantone: 7446 C |
| `--gj-periwinkle` | The book's own periwinkle — divider pages, the Donuts header bar, statement bands | #7878FA | — |
| `--gj-violet-ink` | The book's violet text colour | #5351BD | — |
| `--gj-ink-soft` | The book's soft body ink — persona copy | #646491 | — |
| `--gj-navy-deep` | The book's deep navy — gradient shadows on navy pages | #181752 | — |
| `--gj-surface` | The page — cream | #FFF8EF | — |
| `--gj-surface-raised` | Cards and panels on the page | #FFFFFF | — |
| `--gj-surface-tint` | Pale-lime band — persona panels, the large-scale table cells | #F1F2C4 | — |
| `--gj-surface-soft` | Lavender band — persona panels, quote cards | #D3D3EB | — |
| `--gj-ink` | Body copy, headlines, the wordmark | #312E7C | — |
| `--gj-ink-muted` | Secondary copy, captions, persona body | #646491 | — |
| `--gj-ink-secondary` | Supporting text — the violet copy | #5351BD | — |
| `--gj-on-ink` | Ink on a navy fill | #FFF8EF | — |
| `--gj-accent` | The signal FILL — stickers, the CTA ground in the website mockup, badges | #F15627 | — |
| `--gj-accent-ink` | Orange as text — prices, ratings, small signals | #C5380D | — |
| `--gj-action` | The primary button fill | #C5380D | — |
| `--gj-action-hover` | The primary button at hover | #A82F0B | — |
| `--gj-on-action` | Label on the primary button | #FFF8EF | — |
| `--gj-highlight` | The highlighter — lime behind a phrase | #E9E72F | — |
| `--gj-on-highlight` | Text on the highlighter | #312E7C | — |
| `--gj-link` | A link at rest — navy, underlined | #312E7C | — |
| `--gj-link-hover` | A link at hover and focus | #5351BD | — |
| `--gj-focus-ring` | The focus outline | #5D59C4 | — |
| `--gj-border` | The default hairline | rgba(49, 46, 124, 0.16) | — |
| `--gj-border-strong` | The 2px navy rule — tables, cards, boxes | #312E7C | — |
| `--gj-hairline` | A soft rule | #D3D3EB | — |
| `--gj-fill-soft` | A navy wash — empty states, chips | rgba(49, 46, 124, 0.06) | — |
| `--gj-positive` | Success as text and rule | #1E7A46 | — |
| `--gj-warning` | Warning as text and rule | #8F6301 | — |
| `--gj-negative` | Error as text and rule | #BB4425 | — |
| `--gj-info` | Information as text and rule | #0D6DBE | — |
| `--gj-radius-card` | Quote cards and persona panels | 20px | — |
| `--gj-radius-sm` | Inputs, chips | 10px | — |
| `--gj-radius-pill` | Buttons and the sign-in control | 999px | — |
| `--gj-shadow-sticker` | The sticker offset — a hard shadow | 3px 3px 0 rgba(35, 31, 32, 0.5) | — |
| `--gj-shadow-lift` | A lifted card | 0 12px 32px -20px rgba(49, 46, 124, 0.45) | — |
| `--font-display` | Website display — the CTA, hero and product headlines | obviously-narrow, "Barlow Condensed Bold", "Barlow Condensed", "Arial Narrow", sans-serif | — |
| `--font-headline` | The manual's statement headlines | "Barlow Condensed SemiBold", "Barlow Condensed", "Arial Narrow", sans-serif | — |
| `--font-label` | Tracked caps labels and eyebrows | "Barlow Condensed Medium", "Barlow Condensed", "Arial Narrow", sans-serif | — |
| `--font-title` | Wide, heavy section titles | obviously, "Barlow Black", "Arial Black", sans-serif | — |
| `--font-sans` | Every running word on screen: body, UI, buttons | Poppins, "Helvetica Neue", Arial, sans-serif | — |
| `--font-sans-bold` | Poppins at 700 — labels, buttons, emphasis | "Poppins Bold", Poppins, "Helvetica Neue", Arial, sans-serif | — |
| `--font-prose` | Brand collateral body face | bicyclette, Poppins, "Helvetica Neue", Arial, sans-serif | — |
| `--font-script` | Script accent — artwork only | alkaline, "Brush Script MT", cursive | — |

### Navy block

The manual's navy pages (pp. 3, 6, 11, 16, 19, 35, 44, 53) and the website header: navy ground, cream ink, lime as the accent. This is the brand's dark ground.

Ground token: `--gj-surface`.

| Token | Role | Cream page (light) | Print build |
|---|---|---|---|
| `--gj-surface` | The navy block | #312E7C | — |
| `--gj-surface-raised` | A card on navy — recessed | #26236B | — |
| `--gj-surface-tint` | The deep band | #181752 | — |
| `--gj-surface-soft` | A soft band on navy | #2A2774 | — |
| `--gj-ink` | Copy on navy | #FFF8EF | — |
| `--gj-ink-muted` | Secondary copy on navy | #D3D3EB | — |
| `--gj-ink-secondary` | Supporting text on navy | #F1F2C4 | — |
| `--gj-on-ink` | Ink on a cream fill | #312E7C | — |
| `--gj-accent` | The signal on navy | #E9E72F | — |
| `--gj-accent-ink` | Signal text on navy | #E9E72F | — |
| `--gj-action` | The primary button on navy | #E9E72F | — |
| `--gj-action-hover` | The button at hover on navy | #F1F2C4 | — |
| `--gj-on-action` | Label on the lime button | #312E7C | — |
| `--gj-highlight` | The highlighter on navy | #E9E72F | — |
| `--gj-on-highlight` | Text on the highlighter | #312E7C | — |
| `--gj-link` | A link on navy | #E9E72F | — |
| `--gj-link-hover` | A link at hover on navy | #F1F2C4 | — |
| `--gj-focus-ring` | Focus outline on navy | #E9E72F | — |
| `--gj-border` | Hairline on navy | rgba(255, 248, 239, 0.18) | — |
| `--gj-border-strong` | Strong rule on navy | #FFF8EF | — |
| `--gj-hairline` | Soft rule on navy | rgba(255, 248, 239, 0.12) | — |
| `--gj-fill-soft` | A cream wash on navy | rgba(255, 248, 239, 0.08) | — |
| `--gj-positive` | Success on navy | #7BD4A4 | — |
| `--gj-warning` | Warning on navy | #FDB515 | — |
| `--gj-negative` | Error on navy | #F58461 | — |
| `--gj-info` | Information on navy | #5DAFF4 | — |

### Contrast pairs (mandatory)

Algorithm: `wcag21`. Every pair below must meet its minimum in every mode. A combination that misses is a defect, not a judgement call.

| Ink | Grounds | Min ratio | Warn floor |
|---|---|---|---|
| `--gj-ink` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint`, `--gj-surface-soft` | 7 | — |
| `--gj-ink-muted` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint` | 4.5 | — |
| `--gj-ink-secondary` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint` | 4.5 | — |
| `--gj-accent-ink` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint` | 4.5 | — |
| `--gj-on-action` | `--gj-action`, `--gj-action-hover` | 4.5 | — |
| `--gj-on-highlight` | `--gj-highlight` | 7 | — |
| `--gj-link` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint` | 4.5 | — |
| `--gj-link-hover` | `--gj-surface`, `--gj-surface-raised`, `--gj-surface-tint` | 4.5 | — |
| `--gj-focus-ring` | `--gj-surface`, `--gj-surface-raised` | 3 | — |
| `--gj-positive` | `--gj-surface`, `--gj-surface-raised` | 4.5 | — |
| `--gj-warning` | `--gj-surface`, `--gj-surface-raised` | 4.5 | — |
| `--gj-negative` | `--gj-surface`, `--gj-surface-raised` | 4.5 | — |
| `--gj-info` | `--gj-surface`, `--gj-surface-raised` | 4.5 | — |
| `--gj-on-ink` | `--gj-ink` | 7 | — |

### Banned values

| Id | Severity | Kind | Match | Why |
|---|---|---|---|---|
| offpalette-neutral | warn | neutral-grey | lightnessRange=[0.15, 0.9] maxChannelSpread=10 | Good Journey has no grey: its neutrals are navy-hued (soft ink #646491, lavender #D3D3EB). A flat grey is off-brand. |
| book-rendered-lime | warn | regex | #(?:[dD][eE][eE]46[23])\b | The manual's on-screen lime #DEE463 is a CMYK conversion, not the published web value #E9E72F (decision G-2). |
| printed-cream-hex | warn | regex | #(?:[fF][fF][fF]5[eE][cC])\b | The printed cream HEX disagrees with its own RGB and with the page; the cream is #FFF8EF (decision G-1). |

### Colour rules

- Navy #312E7C is the brand ink; cream #FFF8EF the page. Text on cream is navy, violet-ink #5351BD or soft ink #646491 — nothing lighter.
- Orange #F15627, sky #5DAFF4, lime #E9E72F, pink #FFD0E5 and the flavour colours are FILLS. Orange text uses --gj-accent-ink #C5380D; the primary button uses --gj-action #C5380D.
- On navy, the accent is lime. Violet on navy (2.04:1) and orange on navy (3.37:1) never carry text.
- Periwinkle #7878FA grounds carry large type only (≥ 24px, or 19px bold): cream on it is 3.40:1.


## 4. Typography

### Faces

| Role token | Family | Weights | Italics | Used for | Licence | Redistributable | File |
|---|---|---|---|---|---|---|---|
| `--font-headline` | Barlow Condensed | 500 (labels), 600 (headlines), 700 (numerals, names, table labels) | no | Every headline and page heading in the manual, always uppercase; tracked caps labels at 500. | The Barlow Project Authors — SIL Open Font License 1.1 (Google Fonts release, Fontsource 5.3.0 latin subset); OS/2 fsType 0. Free to use, embed and redistribute with the licence. | yes | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/215a93c696f442034a46fbb382958f753fda60e30490683aeea6b235fcbb2b66 |
| `--font-title` | Barlow | 900 bundled (800, 600, 400 used once each in the manual) | no | Divider titles (VERBAL IDENTITY, PERSONALITY, DONUTS) and the closing page. | The Barlow Project Authors — SIL Open Font License 1.1 (Google Fonts release, Fontsource 5.3.0 latin subset); OS/2 fsType 0. Free to use, embed and redistribute with the licence. | yes | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/6f5d995ccc4d8ffd9e8cb4c303fc1f3646d6c62d40269ef59463332f12d5b897 |
| `--font-display` | Obviously Narrow → Barlow Condensed Bold | 700 bundled | no | Website hero headlines, product-card titles and button labels — uppercase. | The Barlow Project Authors — SIL Open Font License 1.1 (Google Fonts release, Fontsource 5.3.0 latin subset); OS/2 fsType 0. Free to use, embed and redistribute with the licence. | yes | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/3787a5a419171630e6890cfa47c4da067474d005cd0ff8dc11ec090fdc3ee2b8 |
| `--font-sans` | Poppins | 400 and 700 (each its own family name) | no | Every running word on screen — body, navigation, forms, operator UI. | The Poppins Project Authors — SIL Open Font License 1.1 (Google Fonts release, Fontsource 5.3.0 latin subset); OS/2 fsType 0. Free to use, embed and redistribute with the licence. | yes | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/7d93459d86585bfcdbb7e0376056226adb25821ee54b96236fe2123e9560929f |
| `--font-sans-bold` | Poppins Bold | 700 | no | Buttons, labels, table headers, emphasis. | The Poppins Project Authors — SIL Open Font License 1.1 (Google Fonts release, Fontsource 5.3.0 latin subset); OS/2 fsType 0. Free to use, embed and redistribute with the licence. | yes | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9338e65fc077355c7a87ae0d64cc101e23b9bf8ad78ae65f0f319c857311b526 |
| `--font-prose` | Bicyclette | 400, 400 italic, 700, 900 | yes | Print and collateral body copy; on screen only where an Adobe Fonts kit is loaded. | — | — | not bundled |
| `--font-script` | alkaline | one | no | Artwork only — packaging flavour lines and stickers. Never live UI text. | — | — | not bundled |

A face whose licence is **not** redistributable is never bundled and never self-hosted by a consumer: license it yourself or fall back to the next family in the stack.

**Font stacks — use verbatim**

| Role token | font-family |
|---|---|
| `--font-headline` | `"Barlow Condensed SemiBold", "Barlow Condensed", "Arial Narrow", sans-serif` |
| `--font-title` | `obviously, "Barlow Black", "Arial Black", sans-serif` |
| `--font-display` | `obviously-narrow, "Barlow Condensed Bold", "Barlow Condensed", "Arial Narrow", sans-serif` |
| `--font-sans` | `Poppins, "Helvetica Neue", Arial, sans-serif` |
| `--font-sans-bold` | `"Poppins Bold", Poppins, "Helvetica Neue", Arial, sans-serif` |
| `--font-prose` | `bicyclette, Poppins, "Helvetica Neue", Arial, sans-serif` |
| `--font-script` | `alkaline, "Brush Script MT", cursive` |

### Scale

`pt` is `px × 0.75` — use it for print and decks.

| Token | Size | Used by |
|---|---|---|
| `--gj-text-statement` | clamp(2.5rem, 5.8vw, 7rem) | Statement headline — Barlow Condensed 600, uppercase, line-height 0.89 (112px on the 1920px page) |
| `--gj-text-title` | clamp(3rem, 9vw, 10.75rem) | Divider title — Barlow Black, uppercase (172px on the page) |
| `--gj-text-h1` | clamp(2.25rem, 4vw, 3.75rem) | Page heading — Barlow Condensed 600, uppercase (60px) |
| `--gj-text-eyebrow` | 1.125rem | Eyebrow over a heading — Barlow Condensed 500, uppercase, 0.09em (29px on the page) |
| `--gj-text-label` | 1.5rem | Section label with the wave rule — Barlow Condensed 500, 0.09em (41px on the page) |
| `--gj-text-tagline` | clamp(1.75rem, 3.4vw, 4rem) | Tagline / brand line — sentence case, line-height 1 (62–67px on the page) |
| `--gj-text-lead` | 1.25rem | Lead paragraph — Poppins 400, line-height 1.5 |
| `--gj-text-base` | 1rem | Body — Poppins 400, line-height 1.5 |
| `--gj-text-small` | 0.875rem | Captions, legal — the marketing floor |

### Specimens

| Name | Spec | Voice | Sample |
|---|---|---|---|
| Statement | Barlow Condensed 600 · uppercase · line-height 0.89 · tracking 0 · one phrase in a second colour | display | Good health is a journey. We’re bringing the treats. |
| Divider title | Barlow Black 900 · uppercase · tracking 0 | display | Personality |
| Website hero | Obviously Narrow → Barlow Condensed 700 · uppercase (p.36) | display | The donuts you thought you couldn’t have again |
| Page heading with eyebrow | Eyebrow Barlow Condensed 500 tracked 0.09em over a Barlow Condensed 600 heading | caps | Logo usage — Primary marks |
| Section label | Barlow Condensed 500 · uppercase · 0.09em · the lime wave rule below | caps | Tone of voice + messaging |
| Tagline | Bicyclette → Poppins 400 · sentence case · the highlighter behind one line | prose | Here’s where the journey gets sweet. |
| Body | Poppins 400 · 16px / 1.5 · navy | prose | Tired of missing out because of blood sugar concerns, gluten sensitivity, or keto requirements? We get it. |
| Label | Poppins 700 (Bicyclette Black in print) · uppercase · 0.05em | caps | Embodies |

### Typography rules

- Three bundled families do all the screen work: Barlow Condensed (headlines, labels), Barlow Black (titles), Poppins (everything else).
- Headlines and labels are UPPERCASE; body copy, statements and taglines are sentence case (pp. 5, 16, 17).
- Emphasis inside a headline is a colour change, never a weight change (pp. 6, 9, 10, 11, 19).
- Tracked caps (0.09em) belong to Barlow Condensed Medium labels; headlines are never tracked.
- The Adobe Fonts faces (Bicyclette, alkaline, Obviously, Obviously Narrow) are never self-hosted; they lead their stacks so a licensed kit wins.
- Type floor 14px marketing, 12px operator.

- Minimum rendered size: 14px.
- At most 3 weights per family.
- `--font-display` never renders below 16px.
- `--font-title` never renders below 32px.

- Headline emphasis is a colour change, never a weight change.
- Bicyclette, alkaline, Obviously and Obviously Narrow are licensed through Adobe Fonts and are never self-hosted or bundled.

### Iconography

| Field | Value |
|---|---|
| Style | Monoline, rounded caps and joins, drawn with a slightly wobbly hand; one colour from the palette; no gradients, no duotone. A doodle decorates — an icon labels, and carries a word unless it is search, cart, account, close, back or menu. |
| Library | Marketing: the brand's own hand-drawn doodles (pp. 1, 14, 21–25) as illustration, plus simple line icons in circles for benefits (p.36). Operator: Lucide. |
| Grid | Operator 24 × 24 on a 2px keyline. Marketing benefit icons sit centred in a 48px circle. |
| Stroke width | 2px at 24px (the doodles in the manual are drawn at ~2px on the 1920px page). |
| Corner radius | Round caps and joins throughout. |

| Token | Size | Use |
|---|---|---|
| — | 16px · 1rem · 12pt | Operator — table row, chip |
| — | 20px · 1.25rem · 15pt | Operator — toolbar, sidebar |
| — | 24px · 1.5rem · 18pt | Marketing — inline with labels |
| — | 48px · 3rem · 36pt | Marketing — benefit icons in a circle (p.36) |

- Icons take currentColor.
- Doodles are decoration and aria-hidden.
- No brand mark is redrawn as an icon.
- The two sets never mix on one surface.


## 5. Shape, layout, elevation

### Radius

- Maximum corner radius: **20px**.
- Exempt selectors: `\brounded-full\b`, `\bgj-btn\b`, `\bgj-sticker\b`.

### Spacing scale

| Token | Value | Role |
|---|---|---|
| `--gj-space-1` | 4px · 0.25rem · 3pt | — |
| `--gj-space-2` | 8px · 0.5rem · 6pt | — |
| `--gj-space-3` | 16px · 1rem · 12pt | — |
| `--gj-space-4` | 24px · 1.5rem · 18pt | — |
| `--gj-space-5` | 40px · 2.5rem · 30pt | — |
| `--gj-space-6` | 64px · 4rem · 48pt | — |
| `--gj-space-7` | 96px · 6rem · 72pt | — |
| `--gj-gutter` | clamp(16px, 8vw, 158px) | — |

### Structure

| Token | Value | Role |
|---|---|---|
| `--gj-page-max` | 1280px · 80rem · 960pt | Content measure |
| `--gj-prose-max` | 68ch | Running text measure |
| `--gj-header-height` | 72px · 4.5rem · 54pt | Site header — the manual's navy header band is 79px on the 1920px page |
| `--gj-rule-width` | 2px · 0.125rem · 1.5pt | Box rules and table borders (pp. 15, 32–33) |

### Breakpoints

| Value | Meaning | Note |
|---|---|---|
| 640px | Phone → large phone | — |
| 768px | Tablet: two columns | — |
| 1024px | Desktop navigation | — |
| 1440px | Wide: statements reach full size | — |

### Max widths

| Value | Used by |
|---|---|
| 1280px | Every page |
| 68ch | Paragraphs |

### z-index

| Value | Used by |
|---|---|
| 10 | Sticky header |
| 40 | Drawers |
| 50 | Modals and toasts |

### Layout policies

- Layouts alternate full-bleed bands — cream, navy, periwinkle or violet — the way the manual alternates pages; a page never stacks two bands of the same ground.
- One statement per band. A band carries one headline, one supporting paragraph and at most one action.
- Stickers and doodles sit in the margin of a band, never under text.
- Photography runs full-bleed or in a tight grid with 12px gutters (pp. 7, 45, 46, 54, 55).

### Elevation

- Policy: **tokens-only**.
- The only shadow tokens permitted: `--gj-shadow-sticker`, `--gj-shadow-lift`, `--gj-shadow-overlay`.


## 6. Motion

### Easings

| Token | Value | Use |
|---|---|---|
| `--gj-ease` | `cubic-bezier(0.22, 1, 0.36, 1)` | Reveals and hovers (G-8) |
| `--gj-ease-in-out` | `ease-in-out` | Colour changes |

### Durations

| Token | Value | Use |
|---|---|---|
| `--gj-duration-quick` | 150ms | Hover colour |
| `--gj-duration-base` | 250ms | Sticker pop, card lift |
| `--gj-duration-reveal` | 400ms | A band revealing once |

### Choreography

| Name | How it moves |
|---|---|
| Sticker pop | A sticker scales from 94% with a 3° tilt to rest, 250ms on --gj-ease. Stickers only — the logo never moves (p.31). |
| Reveal | A band fades and rises 12px into place once, 400ms. |
| Button hover | The pill darkens to --gj-action-hover over 150ms; nothing moves. |

### Caps and bans

- No transition or animation exceeds 400ms.
- Banned keywords: `bounce`, `elastic`, `shimmer`, `blink`, `wobble`.
- Never: Bounce and elastic easing in UI.
- Never: Motion on the logo — it never spins, wiggles or pops (p.31).
- Never: Auto-advancing carousels.
- Never: Blinking or flashing text.
- Never: Loops inside a cart, checkout or form.
- Never: Motion as the only carrier of a state.

### Reduced motion

- `prefers-reduced-motion: reduce` **must** be honoured — a build that omits it fails the check.
- Under prefers-reduced-motion: reduce, stickers appear at rest without the pop, bands appear without the rise, drawers appear in place; colour transitions remain. Nothing is communicated by motion alone.


## 7. Assets

Every asset below is content-addressed and immutable. Fetch it by URL; never redraw, retrace, recolour or regenerate a mark.

| Asset | Kind | Role | Colorway | Background | Mode | Format | Purpose | Platform | Label | URL |
|---|---|---|---|---|---|---|---|---|---|---|
| `logo.primary` | logo | primary | one-color | --gj-surface | light | svg | — | web | Navy on cream — the primary mark (pp. 28, 32) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/63aa6978ee7b29c097d4871fe5528cd433ab96d9bd0ae9940b9a60b3875f09b5 |
| `logo.primary` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Cream on navy, sky or photography (p.29) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/eed09a5301ec666fd2efedf65793d24550e804f838453ab68d07b9713eccaa33 |
| `logo.primary` | logo | primary | lime | --gj-navy | dark | svg | — | web | Lime on navy — the cover (p.1) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/1fdbd85c9c6fadbbfd202516ebd69b31fdf86c492e8b297e0a3ffffb51213292 |
| `logo.primary` | logo | mono | mono | #FFFFFF | light | svg | — | web | Single-ink black — production only (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/b7a388a399b897c9f4baae075faee2116605c53489a5cd32bcd243da9bb05e47 |
| `logo.primary` | logo | inverse | mono | #000000 | dark | svg | — | web | Single-ink white — production only (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/d62e2e785581044967b246dc41c91406d25c1ad9e135cb89c0e61840284d97af |
| `logo.primary` | logo | primary | one-color | --gj-surface | light | svg | — | web | Small-scale cut, navy — below 200 × 200 px or 2 × 2 in (p.32) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/4cf6ecf57b8a9ad7bffe1e9463c5fd2929e71c56f130adfe9c531b69059d4ddf |
| `logo.primary` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Small-scale cut, cream (p.32) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/c4b541b1872a683fb1c4b5700184bff30f85f6fa0ea423c1c87b2022b6ee1001 |
| `logo.primary` | logo | primary | one-color | --gj-surface | light | png | — | email | Navy on cream, 2048 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/e20b74bd500148b6897775295a291c39be523139c09839d0aff2ecaa6cb46de1 |
| `logo.primary` | logo | inverse | inverse | --gj-navy | dark | png | — | email | Cream, 2048 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/f29275adb7ef9c8e26230b10d2327ee5af2128dff7c2c3c3171841ec85c1bf0a |
| `logo.horizontal` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Navy on cream (p.33) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/31f3f8141e978a4094edbfdce05d3bda8d617a7b5256201a162ed1838559823b |
| `logo.horizontal` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Cream on navy — the website header (p.36) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/83380bb9eca15e1c4f5f1c4a889166fd10275ac91070840e6f451369555c97f1 |
| `logo.horizontal` | logo | lockup | pink | --gj-navy | dark | svg | — | web | Pink on navy (p.29) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/2a54ead8155ffd662aba580ba42b325e19e0e620b696015cc2589fd2479fe111 |
| `logo.horizontal` | logo | mono | mono | #FFFFFF | light | svg | — | web | Single-ink black (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/49fa5264cdfe19f480d152f5c7d8fa3dd263d4a5dd192345c1787507e56253b5 |
| `logo.horizontal` | logo | inverse | mono | #000000 | dark | svg | — | web | Single-ink white (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/20af107b5e902e41697a6993e5d3f22f0e3067a44b5ef828e7f530f3d4f97b80 |
| `logo.horizontal` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Small-scale cut, navy — below 100 × 300 px or 1 × 3 in (p.33) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/c2786cf368b247747d46278cea0000a3d285b414058470fb22d597a389824318 |
| `logo.horizontal` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Small-scale cut, cream (p.33) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9c8fdc1f72aa8998a57d52524f77263aafcab7f452d687b90558c2a9ecb64693 |
| `logo.horizontal` | logo | lockup | one-color | --gj-surface | light | png | — | email | Navy, 2048 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/b0c13e205a33e3a7087d786205a752d0ef3c7f3adb58c6ee92724adb5d61b89e |
| `logo.horizontal` | logo | inverse | inverse | --gj-navy | dark | png | — | email | Cream, 2048 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/fb77b06699019cccfa7e569f7490fde013c6ce56e55d80eb38cacfb6b5895aa5 |
| `logo.mark` | logo | mark | one-color | --gj-surface | light | svg | — | web | Navy on cream (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/79eea02cf52e140fa5785c100f1ba206f2912e9d7658419f46cec2fd3fee8c9d |
| `logo.mark` | logo | inverse | inverse | --gj-sky | dark | svg | — | web | Cream on sky (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/ea45f69a65bdcf01e19b64d685363e1a4950c88bad698c229d7949ab692730ee |
| `logo.mark` | logo | mark | sky | --gj-lime | light | svg | — | web | Sky on lime (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/b262d13a9b05084bee1ac4476be7b2fb03c41f3ec8460b40c812dee0df4bf06d |
| `logo.mark` | logo | mark | orange | --gj-pink | light | svg | — | web | Orange on pink (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/e029475c6ef12a5459a051e9b2cebfe2edbbcc2a2b662a7c43219160964fb525 |
| `logo.mark` | logo | mono | mono | #FFFFFF | light | svg | — | web | Single-ink black (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/babf7a325a0a2fe5bbb06903e9f673441d09f36b18c045653486a28718efb490 |
| `logo.mark` | logo | inverse | mono | #000000 | dark | svg | — | web | Single-ink white (decision G-11) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/4ac0b319bc9a367435f250c6396ae5304057fa7d118c2e379e50364721775d96 |
| `logo.mark` | logo | mark | one-color | --gj-surface | light | png | — | web | Navy, 1024 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/807a8eae08af3b146532b3331aec05f9e44ee2cb93ae7b28e97987fb21af775f |
| `logo.mark` | logo | inverse | inverse | --gj-navy | dark | png | — | web | Cream, 1024 px raster | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/5dc6bd6566e526063419cd1cf559258cad2f4ddd25514a41ddddeb55b0ca452b |
| `logo.seal` | logo | mark | full-color | --gj-navy | any | svg | — | web | The scalloped seal from the manual's running header (pp. 28–37), as drawn | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/ed1b257b83461959b1fdec00cc56cc9f0febe468493aca32dfac0705b79356ca |
| `logo.gojo` | logo | wordmark | one-color | --gj-surface | light | svg | — | web | Navy on cream (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/743426e59dd1abb9be3d30629d912f2b3b0a6e6a6f09fc8f9492c4b9365ae3b6 |
| `logo.gojo` | logo | inverse | inverse | --gj-sky | dark | svg | — | web | Cream on sky (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/8a2b07573b84dd43496b3799f48ba9b4ba75a82d60812cb2df83c6f72d44665a |
| `logo.gojo` | logo | wordmark | orange | --gj-pink | light | svg | — | web | Orange on pink (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/2ea4398b7b9ee1d3a730f443415e83c992e05ef00252f7172f90a18e2d4d3c56 |
| `logo.gojo` | logo | wordmark | sky | --gj-lime | light | svg | — | web | Sky on lime (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/651981e6a29686de7d4965e79b64bd3282955a78323ef33a055f6557bbe1da60 |
| `logo.gojo` | logo | wordmark | pink | --gj-navy | dark | svg | — | web | Pink on navy (p.30) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/7ca9f8ce4869fb1c829a0afb1b417dd6ced0d274331adb97710627011dde969a |
| `logo.donuts` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Stacked, navy (p.41) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/fd6cc9b85250fc2e3a68f31447c2f16e2b9bd52400fc190764d7b9266395a2c9 |
| `logo.donuts` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Stacked, cream (p.39) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/e973d537b070c9be3c587c5c63fb2141ddc04e38083fa4deb73f4ec5da7ccfcd |
| `logo.donuts` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Horizontal, navy (p.42) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/343504aacd93327f8346680a3faf25410ca4fa8aed35070c98ad58840ca77b12 |
| `logo.donuts` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Horizontal, cream (p.39) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/1025d3a9a8c2a8a96b931c5fedb6fd29e40937f191d4272cf418d82d05b12dc2 |
| `logo.cookies` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Stacked, navy (p.50) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/ccb859f6485e2a244e189d32216bb7171a76d24ded5d1a822cb2af57211dd6d5 |
| `logo.cookies` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Stacked, cream (p.48) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/44bb873a733dac6b98eef1ffad4696c6314ce7f950e970a16d6b5249545eb458 |
| `logo.cookies` | logo | lockup | one-color | --gj-surface | light | svg | — | web | Horizontal, navy (p.51) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/f52532996e1c95ea1f68dd513706b3f1fb9823189b2d9cf3b4560b04e470d27a |
| `logo.cookies` | logo | inverse | inverse | --gj-navy | dark | svg | — | web | Horizontal, cream (p.48) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/491fef0d326d4e2d890ff6fc6c53dd95c7000bda66ba7f1837afc5532b102692 |
| `image.stickers` | image | primary | full-color | --gj-surface | any | svg | — | web | The sticker sheet (p.30), as drawn; the offset shadows are omitted | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/29db9fdcd7573567987c230cbf36483ef3f1faca1c8501d3cf0db4abb42af0ca |
| `pattern.wave` | pattern | primary | one-color | --gj-surface | any | svg | — | web | The wavy underline under every section label (pp. 2, 19–20, 29–55), lime | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/1808cc4dd3e5e5e4a97a89d270c272260b9868e34e54bdeee399ce09f13ce755 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | svg | — | web | Master (vector) — navy Gj on full-bleed lime | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/785011b9759e8f44c3eefc5994e369102eedef0be161a9ed4da6199256570194 |
| `appicon.pwa` | appicon | appicon | full-color | — | any | svg | — | web | Rounded tile (vector) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/cc4d65369a058745d4d4e939d4b231e778594fc5e0e32e2ee4fbf6077512ca6b |
| `appicon.pwa` | appicon | appicon | full-color | — | any | png | any | pwa | PWA 192 (any) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/fa4b18961e0dd09090ac42f480512bcec566a19767c5509b71aa5d300c1a698c |
| `appicon.pwa` | appicon | appicon | full-color | — | any | png | any | pwa | PWA 512 (any) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/fa286ba78044d2fa31e926ce0a8da520e8346bbd236ccb12edc662cd02c2fb57 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | maskable | pwa | PWA 192 (maskable) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/2c61b64d0259cdcaa83c73f7701fb84889ba53d315f0aab273493fe296a8b532 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | maskable | pwa | PWA 512 (maskable) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/f5d76aaddb648421bbbb90a519717c6db26d761243e843dda66c752dd14c78a4 |
| `appicon.pwa` | appicon | appicon | mono | — | any | png | monochrome | pwa | PWA 512 (monochrome) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9d603fb40b4702113b0a9be5dea93b7a88bf4643c6a4a42a82dff9fea31e5854 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | ios | iOS 180 (apple-touch-icon) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/b155ecd9bbcc8809a1c79640241ca3970ffcfa07eb8c20a043618fa86ffcee3e |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | ios | iPad Pro 167 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/424054e8adb22b941d9fabacf39abd2c22847d535309861e48d57f19c038f89a |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | ios | iPad 152 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/58b7420466fd02f74abc2e6bd2a7cd01e678ab40fae5fa8ffa2895fef8b9446e |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | ios | iPhone 120 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/0013a49c4478f5877de8410a8af09290ca2f9a487aa5800bfa88a15194ff3fa8 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | ios | App Store 1024 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/27998337246c8f20f92c11669b34979ba249d743c0da2e55785872e4af9f7148 |
| `appicon.pwa` | appicon | favicon | full-color | — | any | png | — | web | Favicon 16 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/01364861f0feffd84a91470984f96885a40699f5d32b0b010095cf28f9895284 |
| `appicon.pwa` | appicon | favicon | full-color | — | any | png | — | web | Favicon 32 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9c41c455247af2dbc177f9d59992602c173a3a3fbd27c5d254933a6726687371 |
| `appicon.pwa` | appicon | favicon | full-color | — | any | png | — | web | Favicon 48 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/a2697c26a855ab13592546abd492bbcdd4ad4367c806b7fb93059b44d2ea43af |
| `appicon.pwa` | appicon | favicon | full-color | — | any | ico | — | web | favicon.ico (16/32/48) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/42603c28c737d122e5e7b49aec9b08c455ba9034be212d0f4ecc58fbf2fe0e80 |
| `appicon.pwa` | appicon | appicon | full-color | --gj-lime | any | png | — | windows | Windows tile 150 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/690e6e44e1bf5d0da7241cbb824070268091c50a20ab48a3e00ffecec5872d54 |
| `appicon.pwa` | appicon | appicon | full-color | — | any | png | — | macos | macOS 1024 (rounded tile; not the Apple template squircle) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/db3535ff39c6191f42f6fc3960183a9cbc6fae37b1f8ea496e4f5025d0e7fa32 |
| `appicon.pwa` | appicon | mono | mono | #FFFFFF | light | png | — | web | One-colour black | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9d603fb40b4702113b0a9be5dea93b7a88bf4643c6a4a42a82dff9fea31e5854 |
| `appicon.pwa` | appicon | mono | mono | #FFFFFF | light | svg | — | web | One-colour black (vector) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/c3c3796890255b8388358ce16dc2eece79e2ec3bda689507c4304922d730b488 |
| `appicon.pwa` | appicon | inverse | inverse | #000000 | dark | png | — | web | One-colour white | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/14e96857b3000d1481f78971365da6f06529092ca27573b0371854fc4b8df1dd |
| `appicon.pwa` | appicon | inverse | inverse | #000000 | dark | svg | — | web | One-colour white (vector) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/2d7014a388fb43ed021eab866779331d29390dcfeecd253418af178f0e9b3bc0 |
| `og.social` | og | og | — | — | any | png | — | social | og:image 1200 × 630 — lime stacked logotype and the tagline on navy (decision G-10) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/fa7806901fb0e1e7ce8b5a693c91fce6a00db6be2e418e1f5fc7218e735b1e02 |
| `font.headline` | font | font | — | — | any | woff2 | — | web | Barlow Condensed SemiBold 600 — the manual's headline face | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/215a93c696f442034a46fbb382958f753fda60e30490683aeea6b235fcbb2b66 |
| `font.label` | font | font | — | — | any | woff2 | — | web | Barlow Condensed Medium 500 — tracked labels | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/460f141ec8f6c9a1516bfd2bd9fe71656246d7a9d04a0955faf53158d8970c4c |
| `font.display` | font | font | — | — | any | woff2 | — | web | Barlow Condensed Bold 700 — numerals, names; the website display stand-in | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/3787a5a419171630e6890cfa47c4da067474d005cd0ff8dc11ec090fdc3ee2b8 |
| `font.title` | font | font | — | — | any | woff2 | — | web | Barlow Black 900 — section titles | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/6f5d995ccc4d8ffd9e8cb4c303fc1f3646d6c62d40269ef59463332f12d5b897 |
| `font.sans` | font | font | — | — | any | woff2 | — | web | Poppins Regular 400 — the website text face (p.35) | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/7d93459d86585bfcdbb7e0376056226adb25821ee54b96236fe2123e9560929f |
| `font.sans-bold` | font | font | — | — | any | woff2 | — | web | Poppins Bold 700 | https://goodjourney.brandguide.strietzel.ai/api/public/v1/assets/9338e65fc077355c7a87ae0d64cc101e23b9bf8ad78ae65f0f319c857311b526 |

### Clear space, minimum size, misuse

| Asset | Clear space | Minimum size | Never |
|---|---|---|---|
| `logo.primary` | The height of the “O” in GOOD on every side (pp. 29, 39, 48) — 15.3% of the stacked logotype's width, 8.9% of the horizontal logotype's width. | Use the small-scale cut below 200 × 200 px on screen or 2 × 2 in in print (p.32). No absolute minimum is printed. | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.horizontal` | The height of the “O” in GOOD on every side (p.29) — 8.9% of the logotype's width. | Use the small-scale cut below 100 × 300 px on screen or 1 × 3 in in print (p.33). | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.mark` | — | — | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.seal` | — | — | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.gojo` | — | — | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.donuts` | The height of the “O” in GOOD on every side (p.39). | Small-scale cuts below 200 × 200 px (stacked) or 100 × 300 px (horizontal) (pp. 41–42); only the large-scale cuts are extracted here. | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `logo.cookies` | The height of the “O” in GOOD on every side (p.48). | Small-scale cuts below 200 × 200 px (stacked) or 100 × 300 px (horizontal) (pp. 50–51); only the large-scale cuts are extracted here. | Do not stretch the marks or make them illegible (p.31).; Do not use colours that are off-brand; use the approved palette (p.31).; Do not place over complex backgrounds or on backgrounds of insufficient contrast (p.31).; Do not use drop shadows or other unapproved graphic treatments (p.31).; Do not reconfigure the mark (p.31).; Do not rotate, tilt or skew the marks (p.31). |
| `image.stickers` | — | — | Stickers are accents: one cluster per layout, never behind body copy.; Never recolour a sticker outside the palette. |
| `appicon.pwa` | — | — | Never redraw the Gj: every cut is the p.30 monogram, scaled.; Never place the icon tile on lime without a rule — it disappears. |

### Choosing a cut

`GET https://goodjourney.brandguide.strietzel.ai/api/public/v1/logo/<asset id>` answers with a 302 to the right variant. It accepts `?mode=light|dark`, `?colorway=`, `?format=svg|png` and ranks role > colorway > background/mode > format, degrading to the closest cut rather than returning nothing. `pdf` print masters and `woff2` faces are never redirected to — fetch those by their asset URL above.

### Asset and imagery rules

- Keep clear space equal to the height of the “O” in GOOD on every side of every logotype and lockup.
- Use the small-scale stacked logotype below 200 × 200 px / 2 × 2 in, and the small-scale horizontal below 100 × 300 px / 1 × 3 in.
- Never stretch, recolour off-palette, place on busy or low-contrast grounds, add drop shadows, reconfigure, rotate, tilt or skew the marks.
- The logotype is an asset, never live type: no font in this guide draws the swooping R.


## 8. Components

### Announcement rail — `announcement-bar`

| Field | Value |
|---|---|
| Group | Chrome |
| Selectors | `.gj-announcement` |
| Spec | A full-width sky rail over the header carrying one offer (p.36). |

| State | Spec |
|---|---|
| Rest | --gj-sky ground, --gj-navy ink (4.91:1), Poppins 700 14px, centred, 8px block padding |

- One message.
- The mockup sets cream text on sky (2.24:1); the rail uses navy ink instead (decision G-3).

Tokens consumed: `--gj-navy`, `--gj-sky`.

### Site header — `site-header`

| Field | Value |
|---|---|
| Group | Chrome |
| Selectors | `.gj-header` |
| Spec | A navy band: Shop · About · search on the left, the cream horizontal logotype centred, cart and a Sign In pill on the right (p.36). |

| State | Spec |
|---|---|
| Rest | .gj-on-navy, height --gj-header-height, Poppins 600 15px nav in cream |
| Small | Nav collapses to a menu button; logotype switches to the small-scale cut below 300px wide |

- The logotype is an asset, never live type.
- No shadow under the header.

Tokens consumed: `--gj-header-height`.

### Primary button — `btn-primary`

| Field | Value |
|---|---|
| Group | Actions |
| Selectors | `.gj-btn`, `.gj-btn--primary` |
| Spec | The SHOP NOW pill (p.36). |

| State | Spec |
|---|---|
| Rest | --gj-action ground, --gj-on-action label, --font-display uppercase 18px, radius --gj-radius-pill, padding 14px 32px |
| Hover | --gj-action-hover, 150ms |
| Focus | 3px --gj-focus-ring outline, 2px offset |
| On navy | lime pill, navy label |

- One primary per band.
- Never #F15627 under a white label — 3.44:1 (decision G-3).

Tokens consumed: `--font-display`, `--gj-action`, `--gj-action-hover`, `--gj-focus-ring`, `--gj-on-action`, `--gj-radius-pill`.

### Outline pill — `btn-outline`

| Field | Value |
|---|---|
| Group | Actions |
| Selectors | `.gj-btn--outline` |
| Spec | The Sign In control (p.36): a 2px outline pill. |

| State | Spec |
|---|---|
| Rest | transparent, 2px --gj-border-strong, --gj-ink label |
| Hover | --gj-fill-soft ground |

- Secondary actions only.

Tokens consumed: `--gj-border-strong`, `--gj-fill-soft`, `--gj-ink`.

### Split hero — `hero`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-hero` |
| Spec | Product photograph left, cream panel right: rating eyebrow, display headline, one paragraph, the primary button (p.36). |

| State | Spec |
|---|---|
| Desktop | two columns 1:1 |
| Mobile | photo above, panel below |

- The eyebrow is --gj-accent-ink, not --gj-accent.
- Only claim a rating the business can substantiate.

Tokens consumed: `--gj-accent`, `--gj-accent-ink`.

### Statement band — `statement-band`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-statement` |
| Spec | A full-bleed band with one statement headline whose key phrase changes colour, and a pull-quote below (pp. 6, 9–11, 19). |

| State | Spec |
|---|---|
| On cream | navy headline, violet or periwinkle emphasis |
| On navy | cream headline, lime emphasis |

- Emphasis is colour, never weight.
- Periwinkle grounds carry large text only (3.40:1 cream).

### Section label — `section-label`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-label` |
| Spec | Tracked caps over the lime wave rule (pp. 19–20, 29–55). |

| State | Spec |
|---|---|
| Rest | --font-label, 0.09em, uppercase; the wave rule (pattern.wave) 8px below |

- The wave is the only decorative rule in the system.

Tokens consumed: `--font-label`.

### Highlighter — `highlighter`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-highlight` |
| Spec | A lime block behind a phrase of a tagline (pp. 5, 17). |

| State | Spec |
|---|---|
| Rest | --gj-highlight ground, --gj-on-highlight ink, no radius, 0.1em inline padding |

- One highlighted phrase per block.

Tokens consumed: `--gj-highlight`, `--gj-on-highlight`.

### Bar quote — `pull-quote`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-pullquote` |
| Spec | Body copy introduced by a 28px-wide vertical bar (pp. 6, 9, 10, 11, 19). |

| State | Spec |
|---|---|
| On navy | lime bar |
| On cream | lime or periwinkle bar |

- The bar is as tall as the paragraph.

### Numbered list — `numbered-list`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-numbered` |
| Spec | Numbers in lime discs (pp. 21–25) or tall Barlow Condensed Bold numerals (pp. 12, 20). |

| State | Spec |
|---|---|
| Disc | lime disc, navy Barlow Black numeral |
| Tall | --font-display numerals in violet or lime |

- Two digits always: 01, 02.

Tokens consumed: `--font-display`.

### Product card — `product-card`

| Field | Value |
|---|---|
| Group | Commerce |
| Selectors | `.gj-product-card` |
| Spec | White card, 2px rounded navy border, photograph, name, one line, a full-width orange pill (p.36 SHOP BEST SELLERS). |

| State | Spec |
|---|---|
| Rest | --gj-surface-raised, 2px --gj-border-strong, radius --gj-radius-sm |
| Hover | --gj-shadow-lift |

- The pack photograph is the hero; no stickers on the card.

Tokens consumed: `--gj-border-strong`, `--gj-radius-sm`, `--gj-shadow-lift`, `--gj-surface-raised`.

### Benefit grid — `benefit-grid`

| Field | Value |
|---|---|
| Group | Commerce |
| Selectors | `.gj-benefits` |
| Spec | A navy band of line icons with short labels — No Sugar Added, Gluten-Free & Keto-Friendly, Only 3g Net Carbs (p.36). |

| State | Spec |
|---|---|
| Rest | .gj-on-navy, cream line icons, Poppins 13px labels |

- Claims must match the label exactly.

### Quote card — `quote-card`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-quote-card` |
| Spec | A rounded lavender or pale-lime card with a large navy closing quote mark (pp. 22, 24, 26). |

| State | Spec |
|---|---|
| Rest | radius --gj-radius-card, --gj-surface-soft or --gj-surface-tint, navy text |

- Navy text only on lavender.

Tokens consumed: `--gj-radius-card`, `--gj-surface-soft`, `--gj-surface-tint`.

### Sticker accent — `sticker`

| Field | Value |
|---|---|
| Group | Decoration |
| Selectors | `.gj-sticker` |
| Spec | One of the p.30 stickers placed at a slight angle with a hard offset shadow. |

| State | Spec |
|---|---|
| Rest | --gj-shadow-sticker, rotate −8° to 8° |
| Reveal | gj-pop once |

- Decorative: aria-hidden.
- Never over text or the logo.

Tokens consumed: `--gj-shadow-sticker`.

### Navy band — `navy-band`

| Field | Value |
|---|---|
| Group | Content |
| Selectors | `.gj-on-navy` |
| Spec | The brand's dark ground (pp. 3, 6, 11, 19). |

| State | Spec |
|---|---|
| Rest | cream ink, lime accents |

- Lime is the accent on navy; violet is not (2.04:1).

### Footer — `site-footer`

| Field | Value |
|---|---|
| Group | Chrome |
| Selectors | `.gj-footer` |
| Spec | A navy band: stacked logotype, links, contact. Not shown in the manual (decision G-8). |

| State | Spec |
|---|---|
| Rest | .gj-on-navy |

- Support address as printed on packs: hello@goodjourneyfoods.com (p.55).


## 9. How to apply, by target

Three targets, three recipes. Pick the one that matches what you are building; do not improvise a fourth.

### A. An Ada-fleet web app (Next.js + FastAPI)

1. Install the consumer package `ada-pip-styleguide` (and its kit `@stritz/styleguide-kit`) into the project.
2. Ask the brand owner for a **subscription endpoint issued at this master** — the credential block carries `STYLEGUIDE_API_URL=https://goodjourney.brandguide.strietzel.ai`, a project-scoped `STYLEGUIDE_API_TOKEN`, `STYLEGUIDE_BRAND=goodjourney` and `STYLEGUIDE_CHANNEL=stable`. The public tier you are reading is for tools OUTSIDE the fleet; a fleet app subscribes and gets signature verification, overlays and push updates.
3. Render `<BrandStyles/>` in the root layout and `<BrandLogo/>` wherever a mark appears. Never hand-write a logo `<img>`.
4. Mount the kit's `/styleguide` viewer route so the project can show the brand it is actually serving.
5. Add `styleguide-check --strict` to CI. A FAIL is a broken build.

### B. Any other web project (no Ada, no wheel)

1. Vendor `https://goodjourney.brandguide.strietzel.ai/api/public/v1/brand.css` and `https://goodjourney.brandguide.strietzel.ai/api/public/v1/tokens.tailwind.css` into the repository, plus every asset from §7 the project actually uses.
2. Link the stylesheet in the document head, before your own CSS. If you use Tailwind v4, `@import` the theme file after `@import "tailwindcss";`.
3. Use the token names from §3–§6. Do not restate their values in your own CSS; reference the custom properties.
4. Re-vendor whenever the version at `https://goodjourney.brandguide.strietzel.ai/api/public/v1/.well-known/styleguide.json` changes.
5. Verify:

```
npx styleguide-check --effective https://goodjourney.brandguide.strietzel.ai/api/public/v1/effective.json \
  --css <your css glob> --strict
```

### C. A document — PDF, deck, proposal, report, email

- Page ground: `#FFF8EF`.
- Footer ink: `#646491`.
- Footer line: 'Good Journey — The Brand Wellness Manual'.
- Document UI face: `Poppins, "Helvetica Neue", Arial, sans-serif`.
- Slide/page ground: `--gj-surface` (#FFF8EF).
- Headings: Obviously Narrow → Barlow Condensed Bold — Website hero headlines, product-card titles and button labels — uppercase.
- Running text: Bicyclette.
- Labels, captions, tables: Poppins.
- Type sizes: use the `pt` column in §4 — it is the px scale × 0.75, already computed.
- Logos: take the `pdf` print master from §7 where one exists, otherwise the `svg`; respect the clear space and minimum size in §7.
- Colour: the print builds (Pantone/CMYK) in §3 where the brand declares them.

Use `https://goodjourney.brandguide.strietzel.ai/api/public/v1/guide.pdf` as the visual reference — it is this exact version's brand book, rendered by the master.


## 10. Verify

Run this before you say the work is done:

```
npx styleguide-check --effective https://goodjourney.brandguide.strietzel.ai/api/public/v1/effective.json \
  --css <your css glob> --strict --json
```

A clean result is: exit code `0`, `totals.FAIL == 0`, and every family (`contrast`, `banned-values`, `token-liveness`, `demo-safety`, `drift`, `lock-violations`, `asset-integrity`, `literals`) reporting PASS or INFO. A WARN is a thing to explain, not a thing to ignore. A FAIL is not done.

Then report exactly this sentence:

```
Built against Good Journey v1 manifest 4838b8c2e5f5ed900b71a83f3b06911388381bdd7304743ee4f7f96e4507d2fb; styleguide-check: 0 FAIL
```


## 11. Governance

**Locked** — Never change these. A delta on a locked path is dropped by the resolver and recorded as a violation — it does not silently apply.

`assets`, `assets.appicon.pwa`, `assets.font.display`, `assets.font.headline`, `assets.font.label`, `assets.font.sans`, `assets.font.sans-bold`, `assets.font.title`, `assets.logo.cookies`, `assets.logo.donuts`, `assets.logo.gojo`, `assets.logo.horizontal`, `assets.logo.mark`, `assets.logo.primary`, `assets.logo.seal`, `identity`, `rules`, `tokens.marketing.--gj-cream`, `tokens.marketing.--gj-ink`, `tokens.marketing.--gj-lavender`, `tokens.marketing.--gj-lime`, `tokens.marketing.--gj-lime-tint`, `tokens.marketing.--gj-navy`, `tokens.marketing.--gj-orange`, `tokens.marketing.--gj-pink`, `tokens.marketing.--gj-sky`, `tokens.marketing.--gj-violet`, `tokens.marketing.--gj-white`, `typography`, `voice`

**Tunable** — A project may change these through an APPROVED overlay, never by overriding CSS locally.

`assets.image.stickers`, `assets.og.social`, `assets.pattern.wave`, `layout`, `motion`, `tokens`, `tokens.marketing.--font-display`, `tokens.marketing.--font-headline`, `tokens.marketing.--font-label`, `tokens.marketing.--font-prose`, `tokens.marketing.--font-sans`, `tokens.marketing.--font-sans-bold`, `tokens.marketing.--font-script`, `tokens.marketing.--font-title`, `tokens.marketing.--gj-accent`, `tokens.marketing.--gj-accent-ink`, `tokens.marketing.--gj-action`, `tokens.marketing.--gj-action-hover`, `tokens.marketing.--gj-border`, `tokens.marketing.--gj-border-strong`, `tokens.marketing.--gj-brick`, `tokens.marketing.--gj-butter`, `tokens.marketing.--gj-chocolate`, `tokens.marketing.--gj-denim`, `tokens.marketing.--gj-fill-soft`, `tokens.marketing.--gj-focus-ring`, `tokens.marketing.--gj-hairline`, `tokens.marketing.--gj-highlight`, `tokens.marketing.--gj-info`, `tokens.marketing.--gj-ink-muted`, `tokens.marketing.--gj-ink-secondary`, `tokens.marketing.--gj-ink-soft`, `tokens.marketing.--gj-link`, `tokens.marketing.--gj-link-hover`, `tokens.marketing.--gj-marigold`, `tokens.marketing.--gj-navy-deep`, `tokens.marketing.--gj-negative`, `tokens.marketing.--gj-on-action`, `tokens.marketing.--gj-on-highlight`, `tokens.marketing.--gj-on-ink`, `tokens.marketing.--gj-peach`, `tokens.marketing.--gj-periwinkle`, `tokens.marketing.--gj-periwinkle-grey`, `tokens.marketing.--gj-positive`, `tokens.marketing.--gj-radius-card`, `tokens.marketing.--gj-radius-pill`, `tokens.marketing.--gj-radius-sm`, `tokens.marketing.--gj-shadow-lift`, `tokens.marketing.--gj-shadow-sticker`, `tokens.marketing.--gj-surface`, `tokens.marketing.--gj-surface-raised`, `tokens.marketing.--gj-surface-soft`, `tokens.marketing.--gj-surface-tint`, `tokens.marketing.--gj-tangerine`, `tokens.marketing.--gj-violet-ink`, `tokens.marketing.--gj-warning`, `tokens.navy.--gj-accent`, `tokens.navy.--gj-accent-ink`, `tokens.navy.--gj-action`, `tokens.navy.--gj-action-hover`, `tokens.navy.--gj-border`, `tokens.navy.--gj-border-strong`, `tokens.navy.--gj-fill-soft`, `tokens.navy.--gj-focus-ring`, `tokens.navy.--gj-hairline`, `tokens.navy.--gj-highlight`, `tokens.navy.--gj-info`, `tokens.navy.--gj-ink`, `tokens.navy.--gj-ink-muted`, `tokens.navy.--gj-ink-secondary`, `tokens.navy.--gj-link`, `tokens.navy.--gj-link-hover`, `tokens.navy.--gj-negative`, `tokens.navy.--gj-on-action`, `tokens.navy.--gj-on-highlight`, `tokens.navy.--gj-on-ink`, `tokens.navy.--gj-positive`, `tokens.navy.--gj-surface`, `tokens.navy.--gj-surface-raised`, `tokens.navy.--gj-surface-soft`, `tokens.navy.--gj-surface-tint`, `tokens.navy.--gj-warning`

**Requesting an exception.** Ask the brand owner to raise an overlay request on this master (https://goodjourney.brandguide.strietzel.ai). An overlay is per-project, is reviewed by a human, and only then reaches your build. Publishing, promoting, rolling back, yanking and issuing a subscription all require a human administrator with MFA — no agent, no service account and no automation can perform any of them.

**What needs a human:** any change to a locked path; any new asset; any new token; any change to the contrast pairs, the banned values or the governance map; and every publish.
