` (or `card stark`
for the emphasized tier). The card uses scoped children (`.head`, `.body`,
`.foot`), the standard `@elements/style` card layout. The emphasized tier's CTA
is `accent block`; the rest are plain `block` buttons.
The feature row uses a `
` with `e:for` over the `FEATURES` constant. No
images, no icons in the recipe; the focus is the layout.
## Styles
`app/pages/marketing/style.css`:
```css
@import "#app/shared/styles/page.css";
/**
* Dark surface for the marketing page. Overriding the design-system
* tokens on `.marketing` flips every nested element (buttons, cards,
* anchors) to the dark palette without restyling each one.
*/
.marketing {
--bg: #0a0a0c;
--bg-soft: #16161a;
--ink: #f5f5f7;
--ink-muted: #9ea1a8;
--ink-faint: #6c6f76;
--rule: #2a2b30;
--rule-soft: #1f2024;
--accent: #7c7cff;
--accent-deep: #a3a3ff;
--accent-soft: rgba(124, 124, 255, 0.14);
background: var(--bg);
color: var(--ink);
min-height: 100vh;
}
/**
* Hero section. Centered copy on the marketing width, with a primary
* and secondary CTA below the lead.
*/
.marketing .hero {
max-width: var(--container-marketing);
margin: 0 auto;
padding: var(--space-24) var(--container-padding) var(--space-16);
text-align: center;
}
.marketing .hero h1 {
font-size: var(--text-4xl);
line-height: var(--leading-tight);
letter-spacing: var(--tracking-tight);
margin: 0 0 var(--space-6);
}
.marketing .hero .lead {
font-size: var(--text-lg);
color: var(--ink-muted);
max-width: var(--container-prose);
margin: 0 auto var(--space-10);
}
.marketing .hero .cta-row {
display: inline-flex;
gap: var(--space-4);
}
/**
* Features. Three-column grid of value props.
*/
.marketing .features {
max-width: var(--container-wide);
margin: 0 auto;
padding: var(--space-16) var(--container-padding);
text-align: center;
}
.marketing .features h2 {
font-size: var(--text-2xl);
margin: 0 0 var(--space-12);
}
.marketing .feature-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--space-10);
list-style: none;
padding: 0;
margin: 0;
text-align: left;
}
.marketing .feature-grid h3 {
font-size: var(--text-lg);
margin: 0 0 var(--space-3);
}
.marketing .feature-grid p {
color: var(--ink-muted);
margin: 0;
line-height: var(--leading-body);
}
/**
* Pricing tiers. Three .card elements; the middle one gets .stark
* for emphasis.
*/
.marketing .pricing {
max-width: var(--container-wide);
margin: 0 auto;
padding: var(--space-16) var(--container-padding);
text-align: center;
}
.marketing .pricing h2 {
font-size: var(--text-2xl);
margin: 0 0 var(--space-12);
}
.marketing .tiers {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--space-6);
text-align: left;
}
.marketing .tiers .card .price {
font-size: var(--text-2xl);
font-weight: var(--font-semibold);
margin: var(--space-2) 0 var(--space-2);
}
.marketing .tiers .card .price .cadence {
font-size: var(--text-md);
color: var(--ink-muted);
font-weight: var(--font-regular);
}
.marketing .tiers .card .blurb {
color: var(--ink-muted);
margin: 0;
}
.marketing .tiers .checks {
list-style: none;
padding: 0;
margin: 0;
}
.marketing .tiers .checks li {
padding: var(--space-2) 0;
border-top: 1px solid var(--rule-soft);
}
.marketing .tiers .checks li:first-child {
border-top: none;
}
/**
* Footer. Horizontal nav above a copyright line.
*/
.marketing footer {
max-width: var(--container-wide);
margin: 0 auto;
padding: var(--space-12) var(--container-padding);
border-top: 1px solid var(--rule);
text-align: center;
}
.marketing footer nav {
display: inline-flex;
gap: var(--space-8);
margin-bottom: var(--space-4);
}
.marketing footer nav a {
color: var(--ink-muted);
text-decoration: none;
}
.marketing footer nav a:hover {
color: var(--ink);
}
.marketing footer .copy {
color: var(--ink-faint);
font-size: var(--text-sm);
margin: 0;
}
```
The dark surface is a handful of variable overrides on `.marketing`. Every
element inside the page (cards, buttons, anchors, text) reads those tokens, so
changing them flips the whole page from light to dark without restyling any
individual element.
The layout uses the `--container-*` width caps from the design system:
`--container-marketing` (820px) for the hero copy, `--container-wide` (1080px)
for the feature and pricing grids. `--container-padding` (`var(--space-8)`)
gives a consistent gutter at the viewport edge.
## Routes
Register the page in `index.ts`:
```ts
import marketing from "#app/pages/marketing";
// ...
app.route("/", marketing);
```
## Notes
- **The page class is the theme switch.** Everything dark on this page is gated
by `.marketing`. Drop the class and the page reverts to the default light
surface. Add a second wrapper class with its own variable overrides for a
"summer" theme, a tenant-branded theme, or a print stylesheet.
- **Anchor-as-button.** `` makes a link render
like a button. The `.button` class styles a plain HTML element as a control,
part of `@elements/style`; the same class on `