lion-make 0.2.0 → 0.3.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.
Files changed (78) hide show
  1. package/dist/components/footer/Disclosure.d.ts +3 -2
  2. package/dist/components/footer/DisclosureToggleOpen.d.ts +13 -0
  3. package/dist/components/footer/LegalLinks.d.ts +16 -0
  4. package/dist/components/footer/LinksAndSocial.d.ts +25 -0
  5. package/dist/components/header/HeaderCTA.d.ts +9 -0
  6. package/dist/components/header/HeaderLogo.d.ts +10 -0
  7. package/dist/components/header/HeaderProduct.d.ts +10 -0
  8. package/dist/components/header/HeaderSectionNavigation.d.ts +12 -0
  9. package/dist/components/header/HeaderSectionTitle.d.ts +8 -0
  10. package/dist/components/header/HeaderUnderwriter.d.ts +9 -0
  11. package/dist/components/header/TopLevelNavigation.d.ts +13 -0
  12. package/dist/components/hero/CTAHeroBlock.d.ts +24 -0
  13. package/dist/components/hero/HeroBlock.d.ts +18 -0
  14. package/dist/components/hero/MultiHero.d.ts +25 -0
  15. package/dist/components/hero/NotAvailableHeroBlock.d.ts +22 -0
  16. package/dist/index.d.ts +28 -0
  17. package/dist/lion-make.js +991 -633
  18. package/dist/lion-make.umd.cjs +10 -10
  19. package/guidelines/Guidelines.md +46 -50
  20. package/guidelines/composition/constraints.md +40 -8
  21. package/guidelines/composition/zones.md +49 -11
  22. package/guidelines/content-types/footer/anklet.md +62 -0
  23. package/guidelines/content-types/footer/compliance.md +49 -0
  24. package/guidelines/content-types/footer/disclaimers.md +48 -0
  25. package/guidelines/content-types/footer/disclosure-toggle-open.md +51 -0
  26. package/guidelines/content-types/footer/disclosures.md +50 -0
  27. package/guidelines/content-types/footer/legal-links.md +59 -0
  28. package/guidelines/content-types/footer/links-and-social.md +94 -0
  29. package/guidelines/content-types/footer/overview.md +73 -16
  30. package/guidelines/content-types/general/accordion-block.md +42 -0
  31. package/guidelines/content-types/general/all-blogs-post-block.md +52 -0
  32. package/guidelines/content-types/general/background-color-block.md +42 -0
  33. package/guidelines/content-types/general/basic-content-block.md +43 -0
  34. package/guidelines/content-types/general/body-text-copy-block.md +38 -0
  35. package/guidelines/content-types/general/content-image-block.md +37 -0
  36. package/guidelines/content-types/general/cross-sell-card-block.md +45 -0
  37. package/guidelines/content-types/general/decorative-list-block.md +40 -0
  38. package/guidelines/content-types/general/email-callout-block.md +38 -0
  39. package/guidelines/content-types/general/embedded-video-block.md +36 -0
  40. package/guidelines/content-types/general/full-size-image-with-highlight-box.md +52 -0
  41. package/guidelines/content-types/general/horizontal-rule.md +35 -0
  42. package/guidelines/content-types/general/hot-jobs-block.md +52 -0
  43. package/guidelines/content-types/general/inline-message.md +36 -0
  44. package/guidelines/content-types/general/last-chance-block.md +40 -0
  45. package/guidelines/content-types/general/multi-step-lead-form.md +60 -0
  46. package/guidelines/content-types/general/multi-testimonial.md +49 -0
  47. package/guidelines/content-types/general/opt-in.md +42 -0
  48. package/guidelines/content-types/general/overview.md +134 -24
  49. package/guidelines/content-types/general/product-block.md +43 -0
  50. package/guidelines/content-types/general/pull-quote.md +36 -0
  51. package/guidelines/content-types/general/recent-blog-posts-block.md +48 -0
  52. package/guidelines/content-types/general/resource-spotlight.md +44 -0
  53. package/guidelines/content-types/general/rtb-descriptive.md +53 -0
  54. package/guidelines/content-types/general/rtb-dynamic.md +55 -0
  55. package/guidelines/content-types/general/rtb-highlight.md +50 -0
  56. package/guidelines/content-types/general/side-menu-explorer.md +62 -0
  57. package/guidelines/content-types/general/simple-cta-block.md +44 -0
  58. package/guidelines/content-types/general/spacing-block.md +40 -0
  59. package/guidelines/content-types/general/speed-bump.md +45 -0
  60. package/guidelines/content-types/general/table-block.md +55 -0
  61. package/guidelines/content-types/general/wahfu.md +66 -0
  62. package/guidelines/content-types/header/header-cta.md +41 -0
  63. package/guidelines/content-types/header/header-logo.md +45 -0
  64. package/guidelines/content-types/header/header-product.md +45 -0
  65. package/guidelines/content-types/header/header-section-navigation.md +55 -0
  66. package/guidelines/content-types/header/header-section-title.md +43 -0
  67. package/guidelines/content-types/header/header-underwriter.md +46 -0
  68. package/guidelines/content-types/header/overview.md +61 -15
  69. package/guidelines/content-types/header/top-level-navigation.md +70 -0
  70. package/guidelines/content-types/hero/cta-hero-block.md +70 -0
  71. package/guidelines/content-types/hero/hero-block.md +56 -0
  72. package/guidelines/content-types/hero/multi-hero.md +78 -0
  73. package/guidelines/content-types/hero/not-available-hero-block.md +64 -0
  74. package/guidelines/content-types/hero/overview.md +53 -18
  75. package/guidelines/content-types/overview.md +86 -29
  76. package/guidelines/discovery.md +158 -0
  77. package/guidelines/setup.md +90 -16
  78. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ # Header — Underwriter
2
+
3
+ **Zone:** Header only.
4
+
5
+ ## Description
6
+
7
+ Displays the underwriting company attribution — e.g., "Underwritten by United of Omaha Life Insurance Company." Required on product pages where insurance regulatory compliance mandates that the underwriter is disclosed at the page level.
8
+
9
+ Renders as a small text strip (optionally linked and optionally with a logo). Not the same as the `ComplianceBlock` in the footer — the footer compliance block handles Item Numbers and Material IDs; this is the brand-level underwriter identity.
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ |---|---|---|---|---|
15
+ | `text` | `string` | Yes | — | Underwriter attribution text |
16
+ | `logoSrc` | `string` | No | — | Underwriter logo URL |
17
+ | `logoAlt` | `string` | No | `''` | Logo alt text |
18
+ | `href` | `string` | No | — | Optional link (e.g., to underwriter's About page) |
19
+ | `className` | `string` | No | — | Additional CSS class |
20
+
21
+ ## Usage
22
+
23
+ ```tsx
24
+ import { Section, HeaderUnderwriter } from 'lion-make'
25
+
26
+ <Section zone="header">
27
+ <HeaderUnderwriter
28
+ text="Underwritten by United of Omaha Life Insurance Company"
29
+ logoSrc="/img/logo-united-of-omaha.svg"
30
+ logoAlt="United of Omaha Life Insurance Company"
31
+ />
32
+ </Section>
33
+ ```
34
+
35
+ ## Placement Rules
36
+
37
+ - Header zone only.
38
+ - Typically placed inside `CorporateUniversalHeader` (the top thin bar).
39
+ - Required on all product DLPs where a specific underwriting entity applies.
40
+ - Consult legal/compliance for exact required phrasing per product line.
41
+
42
+ ## Design Tokens
43
+
44
+ - Text: `var(--h6-font-size)`, `var(--font-weight-400)`, `var(--color-white)`
45
+ - Logo height: 24px max within the bar
46
+ - Background inherits from `CorporateUniversalHeader`: `var(--color-blue-dark)`
@@ -2,33 +2,79 @@
2
2
 
3
3
  **Zone rule:** These content types can only be placed in the Header zone. Never use them in Hero, General, or Footer zones.
4
4
 
5
- The Header zone is subdivided into subsections. Each subsection accepts a specific content type.
5
+ The Header zone is composed of two structural bars (`CorporateUniversalHeader` and `GlobalHeaderBar`) that act as containers. The 7 header content types are the individual elements placed inside those bars.
6
6
 
7
- ## Header Subsections
7
+ ---
8
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)* |
9
+ ## Content Types
10
+
11
+ | Content type | Component | Required | Typical bar |
12
+ |---|---|---|---|
13
+ | Call to Action | `HeaderCTA` | No | GlobalHeaderBar |
14
+ | Logo | `HeaderLogo` | Yes — one per page | CorporateUniversalHeader or GlobalHeaderBar |
15
+ | Product | `HeaderProduct` | No — product DLPs only | GlobalHeaderBar |
16
+ | Section Navigation | `HeaderSectionNavigation` | No | Below GlobalHeaderBar |
17
+ | Section Title | `HeaderSectionTitle` | No | GlobalHeaderBar |
18
+ | Top Level Navigation | `TopLevelNavigation` | Yes — one per page | GlobalHeaderBar |
19
+ | Underwriter | `HeaderUnderwriter` | Varies — required by compliance on product pages | CorporateUniversalHeader |
20
+
21
+ ---
22
+
23
+ ## Header Structure
24
+
25
+ ```
26
+ Header zone
27
+ ├── CorporateUniversalHeader ← thin top bar
28
+ │ ├── HeaderLogo (brand logo)
29
+ │ └── HeaderUnderwriter (underwriter attribution, if required)
30
+ └── GlobalHeaderBar ← main nav bar
31
+ ├── HeaderLogo (or HeaderProduct on product DLPs)
32
+ ├── TopLevelNavigation (global nav with optional dropdowns)
33
+ ├── HeaderSectionTitle (if applicable)
34
+ ├── HeaderCTA (1–2 CTAs, e.g. "Get a quote", "Log in")
35
+ └── HeaderSectionNavigation (below the bar, on section hubs)
36
+ ```
37
+
38
+ ---
14
39
 
15
40
  ## Placement Example
16
41
 
17
42
  ```tsx
18
- import { Section, CorporateUniversalHeader, GlobalHeaderBar } from 'lion-make'
43
+ import {
44
+ Section,
45
+ CorporateUniversalHeader,
46
+ GlobalHeaderBar,
47
+ HeaderLogo,
48
+ HeaderUnderwriter,
49
+ TopLevelNavigation,
50
+ HeaderCTA,
51
+ } from 'lion-make'
19
52
 
20
53
  <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
- />
54
+ <CorporateUniversalHeader>
55
+ <HeaderLogo src="/img/logo.svg" alt="Mutual of Omaha" href="/" />
56
+ <HeaderUnderwriter text="Underwritten by United of Omaha Life Insurance Company" />
57
+ </CorporateUniversalHeader>
58
+ <GlobalHeaderBar>
59
+ <TopLevelNavigation items={navItems} />
60
+ <HeaderCTA label="Get a quote" href="/quote" variant="button" />
61
+ <HeaderCTA label="Log in" href="/login" variant="link" />
62
+ </GlobalHeaderBar>
28
63
  </Section>
29
64
  ```
30
65
 
66
+ ---
67
+
31
68
  ## Files in This Section
32
69
 
70
+ - [header-cta.md](./header-cta.md)
71
+ - [header-logo.md](./header-logo.md)
72
+ - [header-product.md](./header-product.md)
73
+ - [header-section-navigation.md](./header-section-navigation.md)
74
+ - [header-section-title.md](./header-section-title.md)
75
+ - [top-level-navigation.md](./top-level-navigation.md)
76
+ - [header-underwriter.md](./header-underwriter.md)
77
+
78
+ Legacy structural components (bars, not content types):
33
79
  - [corporate-universal-header.md](./corporate-universal-header.md)
34
80
  - [global-header-bar.md](./global-header-bar.md)
@@ -0,0 +1,70 @@
1
+ # Header — Top Level Navigation
2
+
3
+ **Zone:** Header only.
4
+
5
+ ## Description
6
+
7
+ The global navigation menu — the primary wayfinding element across all pages. Renders as a horizontal link bar with optional dropdown sub-menus. Every page must include exactly one `TopLevelNavigation`.
8
+
9
+ Supports one level of dropdown children. Deeper nesting is not supported in Mondrian.
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ |---|---|---|---|---|
15
+ | `items` | `TopLevelNavItem[]` | Yes | — | Top-level navigation links |
16
+ | `ariaLabel` | `string` | No | `'Main navigation'` | Accessible label for the `<nav>` element |
17
+ | `className` | `string` | No | — | Additional CSS class |
18
+
19
+ ### TopLevelNavItem
20
+
21
+ | Prop | Type | Required | Description |
22
+ |---|---|---|---|
23
+ | `label` | `string` | Yes | Link text |
24
+ | `href` | `string` | Yes | Destination URL |
25
+ | `isActive` | `boolean` | No | Marks the currently active section |
26
+ | `children` | `TopLevelNavItem[]` | No | Dropdown sub-items (max 8 recommended) |
27
+
28
+ ## Usage
29
+
30
+ ```tsx
31
+ import { Section, TopLevelNavigation } from 'lion-make'
32
+
33
+ <Section zone="header">
34
+ <TopLevelNavigation
35
+ items={[
36
+ {
37
+ label: 'Life Insurance',
38
+ href: '/life',
39
+ isActive: true,
40
+ children: [
41
+ { label: 'Term Life', href: '/life/term' },
42
+ { label: 'Whole Life', href: '/life/whole' },
43
+ ],
44
+ },
45
+ { label: 'Medicare', href: '/medicare' },
46
+ { label: 'Supplemental Health', href: '/supplemental' },
47
+ { label: 'About us', href: '/about' },
48
+ ]}
49
+ />
50
+ </Section>
51
+ ```
52
+
53
+ ## Placement Rules
54
+
55
+ - Header zone only. One per page.
56
+ - Sits inside `GlobalHeaderBar`, typically after `HeaderLogo` and before `HeaderCTA`.
57
+ - Dropdown children are shown on hover (desktop) or tap (mobile).
58
+
59
+ ## Accessibility
60
+
61
+ - `<nav aria-label="Main navigation">` wrapper.
62
+ - Active item gets `aria-current="page"`.
63
+ - Items with children get `aria-haspopup="true"`.
64
+
65
+ ## Design Tokens
66
+
67
+ - Link: `var(--h5-font-size)`, `var(--font-weight-400)`, `var(--color-white)`
68
+ - Active / hover link: `var(--font-weight-600)`, bottom border `var(--border-width-thick)` solid `var(--color-white)`
69
+ - Dropdown background: `var(--color-white)`
70
+ - Dropdown link: `var(--color-text)`, `var(--font-weight-400)`
@@ -0,0 +1,70 @@
1
+ # CTA Hero Block
2
+
3
+ **Zone:** Hero only.
4
+
5
+ ## Description
6
+
7
+ The primary conversion hero. Full-width with a prominent heading, optional subheading and body copy, up to two CTAs, and an optional image or background. This is the default hero for product DLPs and campaign landing pages where driving a conversion action (quote, apply, call) is the primary goal.
8
+
9
+ Use this when the hero needs to drive a user action. If the hero is purely informational (no CTA), use `HeroBlock` instead.
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ |---|---|---|---|---|
15
+ | `heading` | `string` | Yes | — | Page `<h1>` — primary message |
16
+ | `subheading` | `string` | No | — | Secondary message line, lighter weight |
17
+ | `body` | `string` | No | — | Supporting copy (1–2 sentences max) |
18
+ | `ctas` | `CTAHeroBlockCTA[]` | No | `[]` | 1–2 CTAs; first is primary, second is secondary |
19
+ | `imageSrc` | `string` | No | — | Hero image URL |
20
+ | `imageAlt` | `string` | No | `''` | Image alt text |
21
+ | `layout` | `'full-bleed' \| 'split-right' \| 'split-left'` | No | `'split-right'` | Layout treatment |
22
+ | `backgroundSrc` | `string` | No | — | Background image URL (full-bleed only) |
23
+ | `legalText` | `string` | No | — | Small legal/disclaimer line below CTAs |
24
+ | `className` | `string` | No | — | Additional CSS class |
25
+
26
+ ### CTAHeroBlockCTA
27
+
28
+ | Prop | Type | Required | Description |
29
+ |---|---|---|---|
30
+ | `label` | `string` | Yes | Button text |
31
+ | `href` | `string` | Yes | Destination URL |
32
+ | `variant` | `'primary' \| 'secondary'` | No | Button style (default: `'primary'`) |
33
+
34
+ ## Layouts
35
+
36
+ | Layout | Description |
37
+ |---|---|
38
+ | `split-right` | Content left, image right (8+4 col on desktop) |
39
+ | `split-left` | Image left, content right (4+8 col on desktop) |
40
+ | `full-bleed` | Background image behind content, centered or left-aligned |
41
+
42
+ ## Usage
43
+
44
+ ```tsx
45
+ import { Section, CTAHeroBlock } from 'lion-make'
46
+
47
+ <Section zone="hero">
48
+ <CTAHeroBlock
49
+ heading="Protect your family for less than a coffee a day"
50
+ subheading="Term life insurance that fits your budget and never raises your rate."
51
+ ctas={[
52
+ { label: 'Get a free quote', href: '/quote', variant: 'primary' },
53
+ { label: 'Learn how it works', href: '/term-life', variant: 'secondary' },
54
+ ]}
55
+ imageSrc="/img/hero-family.jpg"
56
+ imageAlt="Family at home"
57
+ layout="split-right"
58
+ legalText="Rates based on a 35-year-old non-smoker in good health."
59
+ />
60
+ </Section>
61
+ ```
62
+
63
+ ## Design Tokens
64
+
65
+ - Background: `var(--color-brand)` or image
66
+ - Heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
67
+ - Subheading: `var(--h3-font-size)`, `var(--font-weight-300)`, `var(--color-white)`
68
+ - Primary CTA: `var(--color-white)` background, `var(--color-brand)` text
69
+ - Secondary CTA: transparent background, `var(--color-white)` border + text
70
+ - Legal text: `var(--h6-font-size)`, `var(--color-white-opaque)`
@@ -0,0 +1,56 @@
1
+ # Hero Block
2
+
3
+ **Zone:** Hero only.
4
+
5
+ ## Description
6
+
7
+ The standard informational hero. Used when the hero zone carries context and orientation rather than a direct conversion action. Supports an eyebrow label, heading, subheading, body copy, and an optional image — but no CTA slots. If a CTA is needed, use `CTAHeroBlock` instead.
8
+
9
+ Typical use cases: section index pages, About pages, content hub headers, educational/resource pages.
10
+
11
+ ## Props
12
+
13
+ | Prop | Type | Required | Default | Description |
14
+ |---|---|---|---|---|
15
+ | `heading` | `string` | Yes | — | Page `<h1>` |
16
+ | `subheading` | `string` | No | — | Supporting headline, lighter weight |
17
+ | `body` | `string` | No | — | Introductory paragraph |
18
+ | `eyebrow` | `string` | No | — | Small uppercase label above the heading (e.g., product category) |
19
+ | `imageSrc` | `string` | No | — | Hero image URL |
20
+ | `imageAlt` | `string` | No | `''` | Image alt text |
21
+ | `layout` | `'full-bleed' \| 'split-right' \| 'split-left' \| 'minimal'` | No | `'full-bleed'` | Layout treatment |
22
+ | `backgroundSrc` | `string` | No | — | Background image URL (full-bleed only) |
23
+ | `className` | `string` | No | — | Additional CSS class |
24
+
25
+ ## Layouts
26
+
27
+ | Layout | Description |
28
+ |---|---|
29
+ | `full-bleed` | Background image or color fills the full hero width |
30
+ | `split-right` | Content left, image right |
31
+ | `split-left` | Image left, content right |
32
+ | `minimal` | Text only, no image; centered or left-aligned; typically shorter |
33
+
34
+ ## Usage
35
+
36
+ ```tsx
37
+ import { Section, HeroBlock } from 'lion-make'
38
+
39
+ <Section zone="hero">
40
+ <HeroBlock
41
+ eyebrow="Life Insurance"
42
+ heading="Coverage built around your life"
43
+ subheading="Explore options for every stage — from starting a family to planning for retirement."
44
+ imageSrc="/img/hero-life.jpg"
45
+ imageAlt="Person reviewing documents"
46
+ layout="split-right"
47
+ />
48
+ </Section>
49
+ ```
50
+
51
+ ## Design Tokens
52
+
53
+ - Heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)` (or `var(--color-text)` on light backgrounds)
54
+ - Eyebrow: `var(--h6-font-size)`, `var(--font-weight-600)`, uppercase, `var(--color-teal)`
55
+ - Subheading: `var(--h3-font-size)`, `var(--font-weight-300)`
56
+ - Body: `var(--body-font-size)`, `var(--font-weight-400)`
@@ -0,0 +1,78 @@
1
+ # Multi Hero
2
+
3
+ **Zone:** Hero only.
4
+
5
+ ## Description
6
+
7
+ A multi-panel hero that rotates or tabs between 2–5 content slides. Each panel is independently authored with its own heading, image, and optional CTA. Use when multiple products or campaigns need to share the hero zone on a hub page (e.g., a home page or insurance category index).
8
+
9
+ Auto-rotation is optional and disabled by default for accessibility. When enabled, panels must include sufficient contrast and the rotation must be user-pausable.
10
+
11
+ **Limit to hub/home pages.** On product DLPs, use `CTAHeroBlock` — a single focused message always outperforms a rotating hero for conversion.
12
+
13
+ ## Props
14
+
15
+ | Prop | Type | Required | Default | Description |
16
+ |---|---|---|---|---|
17
+ | `panels` | `MultiHeroPanel[]` | Yes | — | Slide content (min 2, max 5 recommended) |
18
+ | `autoRotate` | `boolean` | No | `false` | Whether panels advance automatically |
19
+ | `rotateIntervalMs` | `number` | No | `5000` | Auto-rotation interval in milliseconds |
20
+ | `defaultActiveIndex` | `number` | No | `0` | Index of the panel shown on load |
21
+ | `showIndicators` | `boolean` | No | `true` | Dot indicators below the hero |
22
+ | `className` | `string` | No | — | Additional CSS class |
23
+
24
+ ### MultiHeroPanel
25
+
26
+ | Prop | Type | Required | Description |
27
+ |---|---|---|---|
28
+ | `heading` | `string` | Yes | Panel `<h1>` |
29
+ | `subheading` | `string` | No | Supporting headline |
30
+ | `body` | `string` | No | Short paragraph |
31
+ | `imageSrc` | `string` | No | Panel image URL |
32
+ | `imageAlt` | `string` | No | Image alt text |
33
+ | `ctaLabel` | `string` | No | CTA button text |
34
+ | `ctaHref` | `string` | No | CTA destination |
35
+ | `id` | `string` | No | Unique ID for `aria-controls` |
36
+
37
+ ## Usage
38
+
39
+ ```tsx
40
+ import { Section, MultiHero } from 'lion-make'
41
+
42
+ <Section zone="hero">
43
+ <MultiHero
44
+ autoRotate={false}
45
+ panels={[
46
+ {
47
+ heading: 'Life insurance made simple',
48
+ subheading: 'Affordable coverage, guaranteed rates.',
49
+ imageSrc: '/img/hero-life.jpg',
50
+ imageAlt: '',
51
+ ctaLabel: 'Get a quote',
52
+ ctaHref: '/life/quote',
53
+ },
54
+ {
55
+ heading: 'Medicare coverage you can count on',
56
+ subheading: 'Supplement plans to fill the gaps.',
57
+ imageSrc: '/img/hero-medicare.jpg',
58
+ imageAlt: '',
59
+ ctaLabel: 'Explore plans',
60
+ ctaHref: '/medicare',
61
+ },
62
+ ]}
63
+ />
64
+ </Section>
65
+ ```
66
+
67
+ ## Accessibility
68
+
69
+ - Each panel has `aria-hidden` when not active.
70
+ - Indicators use `role="tab"` + `aria-selected`.
71
+ - If `autoRotate` is `true`, a pause button must be provided (implement in the consuming app).
72
+
73
+ ## Design Tokens
74
+
75
+ - Active indicator: `var(--color-brand)`
76
+ - Inactive indicator: `var(--color-line)`
77
+ - Panel heading: `var(--h1-font-size)`, `var(--font-weight-700)`, `var(--color-white)`
78
+ - Panel CTA: `var(--color-white)` background, `var(--color-brand)` text
@@ -0,0 +1,64 @@
1
+ # Not Available Hero Block
2
+
3
+ **Zone:** Hero only.
4
+
5
+ ## Description
6
+
7
+ A dedicated hero for pages or products that are not available in the user's state or region. Replaces the standard hero entirely when the product cannot be offered — do not render another hero type alongside this one.
8
+
9
+ The block communicates clearly that the product is unavailable, names the state if known, offers alternative products or paths, and provides a contact option.
10
+
11
+ This component should be rendered conditionally based on state-availability data from the product catalog or facet system. Never hardcode unavailability — derive it from the facet targeting layer.
12
+
13
+ ## Props
14
+
15
+ | Prop | Type | Required | Default | Description |
16
+ |---|---|---|---|---|
17
+ | `stateName` | `string` | No | — | Name of the unavailable state (e.g., `'New York'`). Used in the default heading if `heading` is not provided. |
18
+ | `heading` | `string` | No | `'Not available in [stateName]'` | Override the default heading |
19
+ | `body` | `string` | No | Default message | Override the default body copy |
20
+ | `alternatives` | `NotAvailableAlternative[]` | No | `[]` | Links to related available products |
21
+ | `contactCtaLabel` | `string` | No | — | Contact CTA label (e.g., "Talk to an agent") |
22
+ | `contactCtaHref` | `string` | No | — | Contact CTA destination |
23
+ | `imageSrc` | `string` | No | — | Optional supporting image |
24
+ | `imageAlt` | `string` | No | `''` | Image alt text |
25
+ | `className` | `string` | No | — | Additional CSS class |
26
+
27
+ ### NotAvailableAlternative
28
+
29
+ | Prop | Type | Description |
30
+ |---|---|---|
31
+ | `label` | `string` | Link text (e.g., "Explore Medicare Supplement plans") |
32
+ | `href` | `string` | Destination URL |
33
+
34
+ ## Usage
35
+
36
+ ```tsx
37
+ import { Section, NotAvailableHeroBlock } from 'lion-make'
38
+
39
+ // Rendered when facet targeting determines the product is unavailable in the user's state
40
+ <Section zone="hero">
41
+ <NotAvailableHeroBlock
42
+ stateName="New York"
43
+ alternatives={[
44
+ { label: 'Medicare Supplement plans', href: '/medicare' },
45
+ { label: 'Supplemental health coverage', href: '/supplemental' },
46
+ ]}
47
+ contactCtaLabel="Talk to an agent"
48
+ contactCtaHref="/contact"
49
+ />
50
+ </Section>
51
+ ```
52
+
53
+ ## Default copy (when props are omitted)
54
+
55
+ - **Heading:** "Not available in [stateName]" or "Not available in your state"
56
+ - **Body:** "This product is not currently offered in your area. Explore available options below or contact us for help finding coverage."
57
+
58
+ ## Design Tokens
59
+
60
+ - Background: `var(--color-gray-lightest)`
61
+ - Heading: `var(--h2-font-size)`, `var(--font-weight-700)`, `var(--color-text)`
62
+ - Body: `var(--body-font-size)`, `var(--color-gray-dark)`
63
+ - Alternative links: `var(--color-brand)`, underline
64
+ - Contact CTA: `var(--color-brand)` background, `var(--color-white)` text
@@ -1,41 +1,76 @@
1
1
  # Hero Zone Content Types
2
2
 
3
- **Zone rule:** These content types can only be placed in the Hero zone. Never use them in Header, General, or Footer zones.
3
+ **Zone rule:** These content types can only be placed in the Hero zone. Never use them in Header, General, Anklet, or Footer zones.
4
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.
5
+ The Hero zone sits immediately below the Header and spans full page width regardless of template (Forehead or Sideburn). Every page should have one hero — the type chosen depends on the page's goal.
6
6
 
7
- ## Available Content Types
7
+ ---
8
8
 
9
- | Content Type | Component | Description |
9
+ ## Content Types
10
+
11
+ | Content type | Component | When to use |
10
12
  |---|---|---|
11
- | Hero | `Hero` | Full-page-width hero with heading, optional image, and CTA |
13
+ | CTA Hero Block | `CTAHeroBlock` | Primary conversion goal product DLPs, campaign pages |
14
+ | Hero Block | `HeroBlock` | Informational — section hubs, About, resource pages |
15
+ | Multi Hero | `MultiHero` | Multiple products/messages — home page, category hubs |
16
+ | Not Available Hero Block | `NotAvailableHeroBlock` | Product unavailable in user's state (facet-triggered) |
17
+
18
+ ---
19
+
20
+ ## Decision Tree
21
+
22
+ ```
23
+ Does the hero need a CTA?
24
+ ├── Yes → Does the page feature a single product/campaign?
25
+ │ ├── Yes → CTAHeroBlock
26
+ │ └── No (hub page, multiple products) → MultiHero
27
+ └── No → Is the product unavailable in the user's state?
28
+ ├── Yes → NotAvailableHeroBlock
29
+ └── No → HeroBlock
30
+ ```
31
+
32
+ ---
12
33
 
13
- ## Variants
34
+ ## Layout Options
14
35
 
15
- | Variant | Description |
36
+ | Layout | Supported by |
16
37
  |---|---|
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 |
38
+ | `full-bleed` | CTAHeroBlock, HeroBlock |
39
+ | `split-right` | CTAHeroBlock, HeroBlock |
40
+ | `split-left` | CTAHeroBlock, HeroBlock |
41
+ | `minimal` | HeroBlock only |
42
+ | Multi-panel | MultiHero (unique — panels, not a layout prop) |
43
+
44
+ ---
20
45
 
21
46
  ## Placement Example
22
47
 
23
48
  ```tsx
24
- import { Section, Hero } from 'lion-make'
49
+ import { Section, CTAHeroBlock } from 'lion-make'
25
50
 
26
51
  <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"
52
+ <CTAHeroBlock
53
+ heading="Protect your family for less than a coffee a day"
54
+ subheading="Term life insurance that fits your budget."
55
+ ctas={[
56
+ { label: 'Get a free quote', href: '/quote', variant: 'primary' },
57
+ { label: 'Learn how it works', href: '/term-life', variant: 'secondary' },
58
+ ]}
59
+ imageSrc="/img/hero-family.jpg"
32
60
  imageAlt="Family at home"
33
- ctaLabel="Get a Quote"
34
- ctaHref="/quote"
61
+ layout="split-right"
35
62
  />
36
63
  </Section>
37
64
  ```
38
65
 
66
+ ---
67
+
39
68
  ## Files in This Section
40
69
 
70
+ - [cta-hero-block.md](./cta-hero-block.md)
71
+ - [hero-block.md](./hero-block.md)
72
+ - [multi-hero.md](./multi-hero.md)
73
+ - [not-available-hero-block.md](./not-available-hero-block.md)
74
+
75
+ Legacy (pre-Mondrian generic stub — kept for backward compatibility):
41
76
  - [hero-variants.md](./hero-variants.md)