lion-make 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/footer/ComplianceBlock.d.ts +13 -0
- package/dist/components/footer/Disclaimer.d.ts +12 -0
- package/dist/components/footer/Disclosure.d.ts +13 -0
- package/dist/components/general/CTA.d.ts +18 -0
- package/dist/components/general/CallOut.d.ts +13 -0
- package/dist/components/general/ConfidenceTags.d.ts +11 -0
- package/dist/components/general/LeadForm.d.ts +21 -0
- package/dist/components/general/RTBs.d.ts +17 -0
- package/dist/components/general/RichText.d.ts +11 -0
- package/dist/components/header/CorporateUniversalHeader.d.ts +14 -0
- package/dist/components/header/GlobalHeaderBar.d.ts +19 -0
- package/dist/components/hero/Hero.d.ts +18 -0
- package/dist/components/layout/Anklet.d.ts +14 -0
- package/dist/components/layout/Container.d.ts +8 -0
- package/dist/components/layout/PageForehead.d.ts +11 -0
- package/dist/components/layout/PageSideburn.d.ts +11 -0
- package/dist/components/layout/Section.d.ts +8 -0
- package/dist/index.d.ts +34 -0
- package/dist/lion-make.js +1004 -0
- package/dist/lion-make.umd.cjs +30 -0
- package/guidelines/Guidelines.md +68 -0
- package/guidelines/composition/constraints.md +49 -0
- package/guidelines/composition/hierarchy.md +72 -0
- package/guidelines/composition/overview.md +22 -0
- package/guidelines/composition/templates.md +46 -0
- package/guidelines/composition/zones.md +60 -0
- package/guidelines/content-types/footer/compliance-block.md +38 -0
- package/guidelines/content-types/footer/disclaimer.md +32 -0
- package/guidelines/content-types/footer/disclosure.md +39 -0
- package/guidelines/content-types/footer/overview.md +38 -0
- package/guidelines/content-types/general/callout.md +40 -0
- package/guidelines/content-types/general/confidence-tags.md +39 -0
- package/guidelines/content-types/general/cta.md +52 -0
- package/guidelines/content-types/general/lead-form.md +56 -0
- package/guidelines/content-types/general/overview.md +46 -0
- package/guidelines/content-types/general/rich-text.md +35 -0
- package/guidelines/content-types/general/rtbs.md +55 -0
- package/guidelines/content-types/header/corporate-universal-header.md +36 -0
- package/guidelines/content-types/header/global-header-bar.md +49 -0
- package/guidelines/content-types/header/overview.md +34 -0
- package/guidelines/content-types/hero/hero-variants.md +68 -0
- package/guidelines/content-types/hero/overview.md +41 -0
- package/guidelines/content-types/overview.md +60 -0
- package/guidelines/foundations/breakpoints.md +53 -0
- package/guidelines/foundations/color.md +86 -0
- package/guidelines/foundations/overview.md +26 -0
- package/guidelines/foundations/spacing.md +50 -0
- package/guidelines/foundations/typography.md +67 -0
- package/guidelines/foundations/z-index.md +24 -0
- package/guidelines/icon-discovery.md +14 -0
- package/guidelines/setup.md +103 -0
- package/package.json +53 -0
- package/src/tokens/breakpoints.css +21 -0
- package/src/tokens/colors.css +81 -0
- package/src/tokens/make-utilities.css +129 -0
- package/src/tokens/metrics.css +32 -0
- package/src/tokens/mixins.css +3 -0
- package/src/tokens/typography.css +55 -0
- package/src/tokens/z-index.css +14 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# CTA
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A call-to-action element. Can be a button, a text link, or a phone number link. The primary conversion driver on most pages.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Default | Description |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `type` | `'button' \| 'link' \| 'phone'` | Yes | — | Rendering and semantic type |
|
|
14
|
+
| `label` | `string` | Yes | — | Visible label text |
|
|
15
|
+
| `href` | `string` | For button/link | — | Destination URL |
|
|
16
|
+
| `phone` | `string` | For phone | — | Phone number (digits only, e.g. `8005551234`) |
|
|
17
|
+
| `variant` | `'primary' \| 'secondary'` | No | `'primary'` | Visual style |
|
|
18
|
+
| `opensInNewTab` | `boolean` | No | `false` | Opens in new tab (adds rel and target) |
|
|
19
|
+
| `className` | `string` | No | — | Additional CSS class |
|
|
20
|
+
|
|
21
|
+
## When to Use Which Type
|
|
22
|
+
|
|
23
|
+
| Situation | Type |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Primary conversion action ("Start for $0.99", "Get a Quote") | `button` + `primary` |
|
|
26
|
+
| Secondary or inline navigation | `link` + `secondary` |
|
|
27
|
+
| Clickable phone number | `phone` |
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { CTA } from 'lion-make'
|
|
33
|
+
|
|
34
|
+
// Primary button
|
|
35
|
+
<CTA type="button" label="Start for $0.99" href="/start" variant="primary" />
|
|
36
|
+
|
|
37
|
+
// Secondary link
|
|
38
|
+
<CTA type="link" label="Learn more" href="/about" variant="secondary" />
|
|
39
|
+
|
|
40
|
+
// Phone number
|
|
41
|
+
<CTA type="phone" label="Call us: 800-555-1234" phone="8005551234" />
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Design Tokens
|
|
45
|
+
|
|
46
|
+
- Background (primary): `var(--color-brand)` → `var(--color-blue)`
|
|
47
|
+
- Text (primary): `var(--color-white)`
|
|
48
|
+
- Border (secondary): `var(--border-width-base)` solid `var(--color-brand)`
|
|
49
|
+
- Text (secondary): `var(--color-link)`
|
|
50
|
+
- Border radius: `var(--border-radius-base)`
|
|
51
|
+
- Padding: `var(--padding-base-vertical)` `var(--padding-base-horizontal)`
|
|
52
|
+
- Font weight: `var(--font-weight-600)`
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Lead Form
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Outro only. NOT allowed in Sideburn.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Gathers personal information from the user with the intent of starting a sale. Each lead form submission is tracked via a media code for campaign attribution.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `fields` | `LeadFormField[]` | Yes | Form fields to render |
|
|
14
|
+
| `submitLabel` | `string` | No | Submit button label (default: "Submit") |
|
|
15
|
+
| `onSubmit` | `(data: Record<string, string>) => void` | No | Submission handler |
|
|
16
|
+
| `mediaCode` | `string` | No | Campaign tracking code (agency landing pages) |
|
|
17
|
+
| `className` | `string` | No | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### LeadFormField
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Required | Description |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| `name` | `string` | Yes | Field name (used in form data) |
|
|
24
|
+
| `label` | `string` | Yes | Visible field label |
|
|
25
|
+
| `type` | `'text' \| 'email' \| 'tel' \| 'select'` | Yes | Input type |
|
|
26
|
+
| `required` | `boolean` | No | Mark field as required |
|
|
27
|
+
| `options` | `string[]` | For select | Options for select fields |
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { LeadForm } from 'lion-make'
|
|
33
|
+
|
|
34
|
+
<LeadForm
|
|
35
|
+
fields={[
|
|
36
|
+
{ name: 'firstName', label: 'First Name', type: 'text', required: true },
|
|
37
|
+
{ name: 'lastName', label: 'Last Name', type: 'text', required: true },
|
|
38
|
+
{ name: 'email', label: 'Email', type: 'email', required: true },
|
|
39
|
+
{ name: 'phone', label: 'Phone', type: 'tel' },
|
|
40
|
+
{ name: 'state', label: 'State', type: 'select', required: true, options: ['NE', 'IA', 'KS', 'MO'] },
|
|
41
|
+
]}
|
|
42
|
+
submitLabel="Get a Free Quote"
|
|
43
|
+
mediaCode="CAMP-2024-Q1"
|
|
44
|
+
onSubmit={(data) => submitLead(data)}
|
|
45
|
+
/>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Zone Restriction
|
|
49
|
+
|
|
50
|
+
Lead Form is not allowed in the Sideburn column. The 4-col Sideburn width is too narrow for form layouts. Use Primary Column (full or 8-col) or Outro instead.
|
|
51
|
+
|
|
52
|
+
## Design Tokens
|
|
53
|
+
|
|
54
|
+
- Submit button: `var(--color-brand)` background, `var(--color-white)` text
|
|
55
|
+
- Label weight: `var(--font-weight-600)`
|
|
56
|
+
- Border radius: `var(--border-radius-base)`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# General Zone Content Types
|
|
2
|
+
|
|
3
|
+
**Zone rule:** These content types can only be placed in General zone sections — Primary Column, Sideburn, or Outro. Never use them in Header, Hero, or Footer zones.
|
|
4
|
+
|
|
5
|
+
General content types make up the bulk of page body content. They are the most versatile category, but they are still zone-locked.
|
|
6
|
+
|
|
7
|
+
## Zone Availability Matrix
|
|
8
|
+
|
|
9
|
+
| Content Type | Component | Primary Column | Sideburn | Outro |
|
|
10
|
+
|---|---|---|---|---|
|
|
11
|
+
| CTA | `CTA` | Yes | Yes | Yes |
|
|
12
|
+
| Call-Out | `CallOut` | Yes | Yes | Yes |
|
|
13
|
+
| RTBs | `RTBs` | Yes | Yes | Yes |
|
|
14
|
+
| Confidence Tags | `ConfidenceTags` | Yes | Yes | Yes |
|
|
15
|
+
| Lead Form | `LeadForm` | Yes | No | Yes |
|
|
16
|
+
| Rich Text | `RichText` | Yes | Yes | Yes |
|
|
17
|
+
|
|
18
|
+
**Note:** Lead Form is not allowed in the Sideburn column — use it in Primary Column or Outro only.
|
|
19
|
+
|
|
20
|
+
## Placement Example
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Section, Container, CTA, RTBs } from 'lion-make'
|
|
24
|
+
|
|
25
|
+
<Section zone="primary-column">
|
|
26
|
+
<Container type="single">
|
|
27
|
+
<RTBs items={[
|
|
28
|
+
{ heading: 'Affordable', body: 'Plans starting at $0.99 per month.' },
|
|
29
|
+
{ heading: 'No pressure', body: 'No sales calls. Cancel anytime.' },
|
|
30
|
+
{ heading: 'Real data', body: 'Actual coach contacts and roster openings.' },
|
|
31
|
+
]} />
|
|
32
|
+
</Container>
|
|
33
|
+
<Container type="single">
|
|
34
|
+
<CTA type="button" label="Start for $0.99" href="/start" variant="primary" />
|
|
35
|
+
</Container>
|
|
36
|
+
</Section>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Files in This Section
|
|
40
|
+
|
|
41
|
+
- [cta.md](./cta.md)
|
|
42
|
+
- [callout.md](./callout.md)
|
|
43
|
+
- [rtbs.md](./rtbs.md)
|
|
44
|
+
- [confidence-tags.md](./confidence-tags.md)
|
|
45
|
+
- [lead-form.md](./lead-form.md)
|
|
46
|
+
- [rich-text.md](./rich-text.md)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Rich Text
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Renders pre-formatted rich text from the RTE (Rich Text Editor). Accepts trusted HTML — use only for content already sanitized by the CMS. Do not pass user-generated content directly.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `html` | `string` | Yes | Trusted HTML string from RTE output |
|
|
14
|
+
| `className` | `string` | No | Additional CSS class |
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { RichText } from 'lion-make'
|
|
20
|
+
|
|
21
|
+
<RichText html="<p>Coverage starts on the <strong>first of the month</strong> after your policy is approved.</p>" />
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Design Tokens
|
|
25
|
+
|
|
26
|
+
- Font family: `var(--font-family-sans-serif)`
|
|
27
|
+
- Font size: `var(--font-size-base)`
|
|
28
|
+
- Line height: `var(--line-height-base)`
|
|
29
|
+
- Color: `var(--color-text)`
|
|
30
|
+
|
|
31
|
+
## Content Rules
|
|
32
|
+
|
|
33
|
+
- Only pass sanitized HTML from the CMS RTE. Never pass raw user input.
|
|
34
|
+
- Headings within rich text should start at H2 (H1 belongs to the Hero zone heading).
|
|
35
|
+
- Links within rich text inherit `var(--color-link)` and `var(--color-link-hover)` automatically.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# RTBs (Reasons To Buy)
|
|
2
|
+
|
|
3
|
+
**Zone:** General — Primary Column, Sideburn, Outro.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
Multiple text chunks, each paired with an optional spot illustration, that highlight the core value propositions. RTBs are the "why choose us" section.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `items` | `RTBItem[]` | Yes | Array of reasons (min 2, typically 3–4) |
|
|
14
|
+
| `className` | `string` | No | Additional CSS class |
|
|
15
|
+
|
|
16
|
+
### RTBItem
|
|
17
|
+
|
|
18
|
+
| Prop | Type | Required | Description |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| `heading` | `string` | Yes | Short value proposition headline |
|
|
21
|
+
| `body` | `string` | Yes | Supporting explanation (1–2 sentences) |
|
|
22
|
+
| `illustrationSrc` | `string` | No | Spot illustration image URL |
|
|
23
|
+
| `illustrationAlt` | `string` | No | Illustration alt text |
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { RTBs } from 'lion-make'
|
|
29
|
+
|
|
30
|
+
<RTBs items={[
|
|
31
|
+
{
|
|
32
|
+
heading: 'Real roster data',
|
|
33
|
+
body: 'See actual open spots at colleges across all divisions.',
|
|
34
|
+
illustrationSrc: '/icons/data.svg',
|
|
35
|
+
illustrationAlt: '',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
heading: 'Direct coach contacts',
|
|
39
|
+
body: 'Get verified email addresses — no middleman, no sales calls.',
|
|
40
|
+
illustrationSrc: '/icons/contact.svg',
|
|
41
|
+
illustrationAlt: '',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
heading: 'Start for $0.99',
|
|
45
|
+
body: 'Intro month pricing. Cancel anytime.',
|
|
46
|
+
illustrationSrc: '/icons/price.svg',
|
|
47
|
+
illustrationAlt: '',
|
|
48
|
+
},
|
|
49
|
+
]} />
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Design Tokens
|
|
53
|
+
|
|
54
|
+
- Heading: `var(--h3-font-size)`, `var(--font-weight-600)`
|
|
55
|
+
- Body: `var(--font-size-base)`, `var(--color-text)`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Corporate Universal Header
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only — Corporate Universal Header subsection.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A narrow blue bar at the very top of the page. Contains the company logo and a state selector. Present on all pages and platforms.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `logoSrc` | `string` | Yes | Path to the logo image |
|
|
14
|
+
| `logoAlt` | `string` | Yes | Alt text for the logo |
|
|
15
|
+
| `selectedState` | `string` | No | Currently selected US state |
|
|
16
|
+
| `onStateChange` | `(state: string) => void` | No | Callback when user changes state |
|
|
17
|
+
| `className` | `string` | No | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { CorporateUniversalHeader } from 'lion-make'
|
|
23
|
+
|
|
24
|
+
<CorporateUniversalHeader
|
|
25
|
+
logoSrc="/logo.svg"
|
|
26
|
+
logoAlt="Company logo"
|
|
27
|
+
selectedState="NE"
|
|
28
|
+
onStateChange={(state) => updateUserState(state)}
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Design Tokens
|
|
33
|
+
|
|
34
|
+
- Background: `var(--color-blue-dark)` (`#003a70`)
|
|
35
|
+
- Always the topmost element in the Header zone.
|
|
36
|
+
- Z-index: `var(--z-index-overlays-and-headers)` when sticky.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Global Header Bar
|
|
2
|
+
|
|
3
|
+
**Zone:** Header only — Global Header Bar subsection.
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
A white header bar below the Corporate Universal Header. Contains the full company logo, underwriting information, and primary CTAs (quotes, sign-in).
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Required | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `logoSrc` | `string` | Yes | Path to the logo image |
|
|
14
|
+
| `logoAlt` | `string` | Yes | Alt text for the logo |
|
|
15
|
+
| `underwriterInfo` | `string` | No | Underwriter legal text |
|
|
16
|
+
| `ctas` | `CTAItem[]` | No | Array of CTA buttons/links |
|
|
17
|
+
| `className` | `string` | No | Additional CSS class |
|
|
18
|
+
|
|
19
|
+
### CTAItem
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
interface CTAItem {
|
|
23
|
+
label: string
|
|
24
|
+
href: string
|
|
25
|
+
type?: 'button' | 'link'
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { GlobalHeaderBar } from 'lion-make'
|
|
33
|
+
|
|
34
|
+
<GlobalHeaderBar
|
|
35
|
+
logoSrc="/logo-full.svg"
|
|
36
|
+
logoAlt="Company"
|
|
37
|
+
underwriterInfo="Underwritten by Mutual of Omaha Insurance Company"
|
|
38
|
+
ctas={[
|
|
39
|
+
{ label: 'Get a Quote', href: '/quote', type: 'button' },
|
|
40
|
+
{ label: 'Sign In', href: '/login', type: 'link' },
|
|
41
|
+
]}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Design Tokens
|
|
46
|
+
|
|
47
|
+
- Background: `var(--color-white)`
|
|
48
|
+
- CTA font-weight: `var(--font-weight-600)`
|
|
49
|
+
- Z-index: `var(--z-index-overlays-and-headers)` when sticky.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Header Zone Content Types
|
|
2
|
+
|
|
3
|
+
**Zone rule:** These content types can only be placed in the Header zone. Never use them in Hero, General, or Footer zones.
|
|
4
|
+
|
|
5
|
+
The Header zone is subdivided into subsections. Each subsection accepts a specific content type.
|
|
6
|
+
|
|
7
|
+
## Header Subsections
|
|
8
|
+
|
|
9
|
+
| Subsection | Content type | Component |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Corporate Universal Header | Corporate Universal Header | `CorporateUniversalHeader` |
|
|
12
|
+
| Global Header Bar | Global Header Bar | `GlobalHeaderBar` |
|
|
13
|
+
| Navigation | Top Nav, Product Nav, Underwriter Nav | *(coming)* |
|
|
14
|
+
|
|
15
|
+
## Placement Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { Section, CorporateUniversalHeader, GlobalHeaderBar } from 'lion-make'
|
|
19
|
+
|
|
20
|
+
<Section zone="header">
|
|
21
|
+
<CorporateUniversalHeader logoSrc="/logo.svg" logoAlt="Company" selectedState="NE" />
|
|
22
|
+
<GlobalHeaderBar
|
|
23
|
+
logoSrc="/logo-full.svg"
|
|
24
|
+
logoAlt="Company"
|
|
25
|
+
underwriterInfo="Underwritten by Mutual of Omaha"
|
|
26
|
+
ctas={[{ label: 'Get a Quote', href: '/quote', type: 'button' }]}
|
|
27
|
+
/>
|
|
28
|
+
</Section>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Files in This Section
|
|
32
|
+
|
|
33
|
+
- [corporate-universal-header.md](./corporate-universal-header.md)
|
|
34
|
+
- [global-header-bar.md](./global-header-bar.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Hero Variants
|
|
2
|
+
|
|
3
|
+
**Zone:** Hero only.
|
|
4
|
+
|
|
5
|
+
## Props
|
|
6
|
+
|
|
7
|
+
| Prop | Type | Required | Description |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| `variant` | `'full-bleed' \| 'split' \| 'minimal'` | Yes | Layout style |
|
|
10
|
+
| `heading` | `string` | Yes | Main H1 headline |
|
|
11
|
+
| `subheading` | `string` | No | Supporting text |
|
|
12
|
+
| `imageSrc` | `string` | No | Hero image URL |
|
|
13
|
+
| `imageAlt` | `string` | No | Image alt text |
|
|
14
|
+
| `ctaLabel` | `string` | No | CTA button label |
|
|
15
|
+
| `ctaHref` | `string` | No | CTA destination |
|
|
16
|
+
| `className` | `string` | No | Additional CSS class |
|
|
17
|
+
|
|
18
|
+
## Variant Details
|
|
19
|
+
|
|
20
|
+
### full-bleed
|
|
21
|
+
|
|
22
|
+
Background image or gradient fills the entire hero container edge to edge. Text overlays the image with sufficient contrast.
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<Hero
|
|
26
|
+
variant="full-bleed"
|
|
27
|
+
heading="Start for $0.99"
|
|
28
|
+
imageSrc="/bg-hero.jpg"
|
|
29
|
+
imageAlt=""
|
|
30
|
+
ctaLabel="Get started"
|
|
31
|
+
ctaHref="/start"
|
|
32
|
+
/>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### split
|
|
36
|
+
|
|
37
|
+
Content area on the left (50%), image on the right (50%). Works best with portrait-oriented images.
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<Hero
|
|
41
|
+
variant="split"
|
|
42
|
+
heading="Life insurance made simple"
|
|
43
|
+
subheading="No sales calls. No pressure. Just coverage."
|
|
44
|
+
imageSrc="/family.jpg"
|
|
45
|
+
imageAlt="Happy family"
|
|
46
|
+
ctaLabel="See plans"
|
|
47
|
+
ctaHref="/plans"
|
|
48
|
+
/>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### minimal
|
|
52
|
+
|
|
53
|
+
Text only, no image. Centered heading and subheading. Use when visual assets are unavailable or the page is utility-focused.
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
<Hero
|
|
57
|
+
variant="minimal"
|
|
58
|
+
heading="Your account"
|
|
59
|
+
subheading="Manage your policy and coverage details."
|
|
60
|
+
/>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Design Tokens
|
|
64
|
+
|
|
65
|
+
- Heading: `var(--h1-font-size)` / `var(--h1-md-font-size)` at `--md-viewport`
|
|
66
|
+
- Heading line-height: `var(--h1-line-height)` / `var(--h1-md-line-height)`
|
|
67
|
+
- CTA background: `var(--color-brand)`
|
|
68
|
+
- CTA text: `var(--color-white)`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Hero Zone Content Types
|
|
2
|
+
|
|
3
|
+
**Zone rule:** These content types can only be placed in the Hero zone. Never use them in Header, General, or Footer zones.
|
|
4
|
+
|
|
5
|
+
The Hero zone is the primary visual area of the page, immediately below the header. It always spans the full width of the page regardless of template.
|
|
6
|
+
|
|
7
|
+
## Available Content Types
|
|
8
|
+
|
|
9
|
+
| Content Type | Component | Description |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Hero | `Hero` | Full-page-width hero with heading, optional image, and CTA |
|
|
12
|
+
|
|
13
|
+
## Variants
|
|
14
|
+
|
|
15
|
+
| Variant | Description |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `full-bleed` | Background image or gradient fills the entire hero area edge to edge |
|
|
18
|
+
| `split` | Content on the left, image on the right (50/50) |
|
|
19
|
+
| `minimal` | Text-only, no image, centered or left-aligned |
|
|
20
|
+
|
|
21
|
+
## Placement Example
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { Section, Hero } from 'lion-make'
|
|
25
|
+
|
|
26
|
+
<Section zone="hero">
|
|
27
|
+
<Hero
|
|
28
|
+
variant="full-bleed"
|
|
29
|
+
heading="Protect what matters most"
|
|
30
|
+
subheading="Affordable life insurance starting at $0.99."
|
|
31
|
+
imageSrc="/hero-family.jpg"
|
|
32
|
+
imageAlt="Family at home"
|
|
33
|
+
ctaLabel="Get a Quote"
|
|
34
|
+
ctaHref="/quote"
|
|
35
|
+
/>
|
|
36
|
+
</Section>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Files in This Section
|
|
40
|
+
|
|
41
|
+
- [hero-variants.md](./hero-variants.md)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Content Types Overview
|
|
2
|
+
|
|
3
|
+
Content types are predefined design patterns. Each content type belongs to exactly one zone. You cannot use a content type outside its designated zone.
|
|
4
|
+
|
|
5
|
+
## Decision Tree: Which Content Type?
|
|
6
|
+
|
|
7
|
+
1. **What zone is this content going in?** → determines the category.
|
|
8
|
+
2. **What is the purpose of this content?** → determines the specific type within the category.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
Is this for the top of every page (logo, nav)?
|
|
12
|
+
→ Header zone → [header content types](./header/overview.md)
|
|
13
|
+
|
|
14
|
+
Is this the primary visual/headline area?
|
|
15
|
+
→ Hero zone → [hero content types](./hero/overview.md)
|
|
16
|
+
|
|
17
|
+
Is this informational, promotional, or a form in the body of the page?
|
|
18
|
+
→ General zone → [general content types](./general/overview.md)
|
|
19
|
+
|
|
20
|
+
Is this legal, compliance, or disclosure content?
|
|
21
|
+
→ Footer zone → [footer content types](./footer/overview.md)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Content Type Catalog by Zone
|
|
25
|
+
|
|
26
|
+
### Header Zone (header section only)
|
|
27
|
+
|
|
28
|
+
| Content Type | Component | Description |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Corporate Universal Header | `CorporateUniversalHeader` | Blue bar with state selector and logo |
|
|
31
|
+
| Global Header Bar | `GlobalHeaderBar` | White bar with logo, underwriter info, CTAs |
|
|
32
|
+
|
|
33
|
+
### Hero Zone (hero section only)
|
|
34
|
+
|
|
35
|
+
| Content Type | Component | Variants |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Hero | `Hero` | `full-bleed`, `split`, `minimal` |
|
|
38
|
+
|
|
39
|
+
### General Zone (Primary Column, Sideburn, Outro)
|
|
40
|
+
|
|
41
|
+
| Content Type | Component | Allowed zones |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| CTA | `CTA` | Primary Column, Sideburn, Outro |
|
|
44
|
+
| Call-Out | `CallOut` | Primary Column, Sideburn, Outro |
|
|
45
|
+
| RTBs | `RTBs` | Primary Column, Sideburn, Outro |
|
|
46
|
+
| Confidence Tags | `ConfidenceTags` | Primary Column, Sideburn, Outro |
|
|
47
|
+
| Lead Form | `LeadForm` | Primary Column, Outro only (not Sideburn) |
|
|
48
|
+
| Rich Text | `RichText` | Primary Column, Sideburn, Outro |
|
|
49
|
+
|
|
50
|
+
### Footer Zone (footer section only)
|
|
51
|
+
|
|
52
|
+
| Content Type | Component | Subsection |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| Disclaimer | `Disclaimer` | Disclaimer subsection |
|
|
55
|
+
| Disclosure | `Disclosure` | Disclosure subsection |
|
|
56
|
+
| Compliance Block | `ComplianceBlock` | Compliance subsection |
|
|
57
|
+
|
|
58
|
+
## Zone Exclusivity Rule
|
|
59
|
+
|
|
60
|
+
A content type listed under one zone cannot be used in any other zone. There are no exceptions. See [composition/zones.md](../composition/zones.md) for the complete placement table.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Breakpoints
|
|
2
|
+
|
|
3
|
+
Source: `src/tokens/breakpoints.css`
|
|
4
|
+
|
|
5
|
+
## Breakpoint Values
|
|
6
|
+
|
|
7
|
+
| Name | Token | Value | Custom media query |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| xs | `--bp-xs` | 432px | — |
|
|
10
|
+
| sm | `--bp-sm` | 535px | `--sm-viewport` / `--max-sm-viewport` |
|
|
11
|
+
| md | `--bp-md` | 767px | `--md-viewport` / `--max-md-viewport` |
|
|
12
|
+
| lg | `--bp-lg` | 981px | `--lg-viewport` / `--max-lg-viewport` |
|
|
13
|
+
| xl | `--bp-xl` | 1301px | `--xl-viewport` / `--max-xl-viewport` |
|
|
14
|
+
| max-width | `--max-width` | 1600px | — |
|
|
15
|
+
|
|
16
|
+
## Custom Media Queries
|
|
17
|
+
|
|
18
|
+
Each tier has a min-width and max-width variant:
|
|
19
|
+
|
|
20
|
+
```css
|
|
21
|
+
/* Min-width (mobile-first, use these) */
|
|
22
|
+
@media (--sm-viewport) { /* 535px+ */ }
|
|
23
|
+
@media (--md-viewport) { /* 767px+ */ }
|
|
24
|
+
@media (--lg-viewport) { /* 981px+ */ }
|
|
25
|
+
@media (--xl-viewport) { /* 1301px+ */ }
|
|
26
|
+
|
|
27
|
+
/* Max-width (use sparingly) */
|
|
28
|
+
@media (--max-sm-viewport) { /* up to 534px */ }
|
|
29
|
+
@media (--max-md-viewport) { /* up to 766px */ }
|
|
30
|
+
@media (--max-lg-viewport) { /* up to 980px */ }
|
|
31
|
+
@media (--max-xl-viewport) { /* up to 1300px */ }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Utility Class Responsive Variants
|
|
35
|
+
|
|
36
|
+
The `make-utilities.css` mixin system generates responsive utility classes at each breakpoint:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
.u-[name] /* all sizes */
|
|
40
|
+
.u-sm-[name] /* 535px+ */
|
|
41
|
+
.u-md-[name] /* 767px+ */
|
|
42
|
+
.u-lg-[name] /* 981px+ */
|
|
43
|
+
.u-xl-[name] /* 1301px+ */
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Container Max Width
|
|
47
|
+
|
|
48
|
+
The page container should never exceed `--max-width` (1600px):
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
max-width: var(--max-width);
|
|
52
|
+
margin: 0 auto;
|
|
53
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Color
|
|
2
|
+
|
|
3
|
+
Source: `src/tokens/colors.css`
|
|
4
|
+
|
|
5
|
+
## Base Palette
|
|
6
|
+
|
|
7
|
+
### Gray Scale
|
|
8
|
+
|
|
9
|
+
| Token | Value | Use |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `--color-white` | `#fff` | Backgrounds, inverse text |
|
|
12
|
+
| `--color-gray-darkest` | `#222` | — |
|
|
13
|
+
| `--color-gray-darker` | `#444` | Body text (`--color-text`) |
|
|
14
|
+
| `--color-gray-dark` | `#5d5d5d` | Legal/compliance text |
|
|
15
|
+
| `--color-gray` | `#838383` | Placeholder, muted |
|
|
16
|
+
| `--color-gray-light` | `#bababa` | Borders (`--color-line`) |
|
|
17
|
+
| `--color-gray-lighter` | `#e5e5e5` | Dividers |
|
|
18
|
+
| `--color-gray-lightest` | `#f7f7f7` | Surface backgrounds |
|
|
19
|
+
|
|
20
|
+
### Brand Colors
|
|
21
|
+
|
|
22
|
+
| Token | Value |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `--color-blue-dark` | `#003a70` |
|
|
25
|
+
| `--color-blue` | `#105fa8` |
|
|
26
|
+
| `--color-blue-shade` | `rgb(16, 94, 166)` |
|
|
27
|
+
| `--color-teal-dark` | `#03746e` |
|
|
28
|
+
| `--color-teal` | `#03a0ad` |
|
|
29
|
+
| `--color-green` | `#19a38a` |
|
|
30
|
+
| `--color-green-light` | `#d2e6ca` |
|
|
31
|
+
| `--color-yellow` | `#ac9633` |
|
|
32
|
+
| `--color-yellow-light` | `#fbea8e` |
|
|
33
|
+
| `--color-red` | `#c12506` |
|
|
34
|
+
| `--color-red-light` | `#fdf4f2` |
|
|
35
|
+
| `--color-orange` | `#df6903` |
|
|
36
|
+
|
|
37
|
+
### Supporting Palette
|
|
38
|
+
|
|
39
|
+
| Token | Value |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `--color-sand` | `#fffbf2` |
|
|
42
|
+
| `--color-gold` | `#f5b93c` |
|
|
43
|
+
|
|
44
|
+
## Semantic Mappings
|
|
45
|
+
|
|
46
|
+
Always use semantic tokens in components — not raw palette values.
|
|
47
|
+
|
|
48
|
+
| Token | Resolves to | Use |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `--color-brand` | `--color-blue` | Primary brand color |
|
|
51
|
+
| `--color-brand-primary` | `--color-blue` | Primary actions |
|
|
52
|
+
| `--color-brand-success` | `--color-green` | Success states |
|
|
53
|
+
| `--color-brand-warning` | `--color-yellow` | Warning states |
|
|
54
|
+
| `--color-brand-danger` | `--color-red` | Error/danger states |
|
|
55
|
+
| `--color-text` | `--color-gray-darker` | Default body text |
|
|
56
|
+
| `--color-link` | `--color-blue` | Links |
|
|
57
|
+
| `--color-link-hover` | `--color-blue-dark` | Link hover |
|
|
58
|
+
| `--color-line` | `--color-gray-light` | Borders, dividers |
|
|
59
|
+
|
|
60
|
+
## Opaque Variants
|
|
61
|
+
|
|
62
|
+
| Token | Value |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `--color-gray-darker-opaque` | `rgba(68, 68, 68, 0.8)` |
|
|
65
|
+
| `--color-teal-opaque` | `rgba(3, 160, 173, 0.08)` |
|
|
66
|
+
| `--color-white-opaque-focus` | `rgba(255, 255, 255, 0.2)` |
|
|
67
|
+
| `--color-white-opaque-active` | `rgba(255, 255, 255, 0.35)` |
|
|
68
|
+
|
|
69
|
+
## Tinted Variants
|
|
70
|
+
|
|
71
|
+
| Token | Value |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `--color-gray-lighter-tint` | `rgb(233, 233, 233)` |
|
|
74
|
+
| `--color-teal-tint` | `rgb(235, 247, 248)` |
|
|
75
|
+
|
|
76
|
+
## Gradient
|
|
77
|
+
|
|
78
|
+
| Token | Value |
|
|
79
|
+
|---|---|
|
|
80
|
+
| `--gradient-blue-to-teal` | `linear-gradient(to right, --color-blue-shade 0%, --color-teal 100%)` |
|
|
81
|
+
|
|
82
|
+
Usage:
|
|
83
|
+
|
|
84
|
+
```css
|
|
85
|
+
background: var(--gradient-blue-to-teal);
|
|
86
|
+
```
|