Section Divider
The seam between two bands, or a pause inside one: the straight cut, the seam rules, and the page's one shaped edge, the hill or the hatched fringe.
import { SectionDivider } from '@fairgarden-private/design/components/SectionDivider'
Render a band seam (seam, page-seam, hill, fringe) as the first child of the lower band's <Ground kind="band">, whose block padding is --ds-space-section. The divider takes that band's colors and sits on its top edge. chrome and pause sit in the flow where you place them. The default, straight, renders nothing: the change of ground is the cut.
Seams and pauses
Seams and pauses
Two different page grounds meet across the page-seam hairline, in the lower band's hairline color, in light and dark mode alike. Leave it out when the lower band opens with an eyebrow rule. Two bands on the same ground take the seam rule. A pause breaks one long band once, with a dotted run, or with the rule–dot–rule or dot-and-star ornament in the accent color. It never sits at a boundary.
Paper
A long run of reading ends here.
The pause breaks it once, then the text resumes.
Paper again: the seam rule
Tide: the page-seam hairline
White: the terminal band
import { Ground } from '@fairgarden-private/design/components/Ground'
import { SectionDivider } from '@fairgarden-private/design/components/SectionDivider'
import styles from './seams.module.css'
/**
* paper → paper → tide → white. Each band pads its block edges with
* --ds-space-section, and each seam divider is the lower band's first child.
*/
export function SectionDividerSeams() {
return (
<div className={styles.page}>
<Ground kind="band" preset="paper" className={styles.band}>
<div className={styles.container}>
<p className={styles.head}>Paper</p>
<p className={styles.text}>A long run of reading ends here.</p>
<SectionDivider kind="pause" className={styles.pause} />
<p className={styles.text}>The pause breaks it once, then the text resumes.</p>
</div>
</Ground>
<Ground kind="band" preset="paper" className={styles.band}>
<SectionDivider kind="seam" />
<div className={styles.container}>
<p className={styles.head}>Paper again: the seam rule</p>
</div>
</Ground>
<Ground kind="band" preset="tide" className={styles.band}>
<SectionDivider kind="page-seam" />
<div className={styles.container}>
<p className={styles.head}>Tide: the page-seam hairline</p>
<SectionDivider kind="pause" ornament="dot" className={styles.pause} />
</div>
</Ground>
<Ground kind="band" preset="white" className={styles.band}>
<SectionDivider kind="page-seam" />
<div className={styles.container}>
<p className={styles.head}>White: the terminal band</p>
<SectionDivider kind="pause" ornament="star" className={styles.pause} />
</div>
</Ground>
</div>
)
}
The hill
The hill
The hill sits only on the night media hero's lower seam, where tone separates the two grounds. The page ground below rises into the night band as one asymmetric curve, cresting at two thirds of the width. It stands 4.6% of the width high, clamped between 12 and 64 px, and no rule runs under it. The height joins the lower band's top padding. On a dark page, in print and in forced colors it drops for the straight seam. Use it for editorial and reference pages, once per page.
Night: the media hero
At least --size-px-10 of empty ground above the hill.
Paper rises into it
The curve is 4.6% of the width, clamped 12–64 px.
import { Ground } from '@fairgarden-private/design/components/Ground'
import { SectionDivider } from '@fairgarden-private/design/components/SectionDivider'
import styles from './hill.module.css'
/**
* The night media hero, then the paper band with the hill as its first
* child. Switch the page to dark mode: the curve drops for the night band's
* straight --primary12 seam.
*/
export function SectionDividerHill() {
return (
<div className={styles.page}>
<Ground kind="band" preset="night" className={styles.night}>
<div className={styles.container}>
<p className={styles.head}>Night: the media hero</p>
<p className={styles.text}>At least --size-px-10 of empty ground above the hill.</p>
</div>
</Ground>
<Ground kind="band" preset="paper" className={styles.band}>
<SectionDivider kind="hill" />
<div className={styles.container}>
<p className={styles.head}>Paper rises into it</p>
<p className={styles.text}>The curve is 4.6% of the width, clamped 12–64 px.</p>
</div>
</Ground>
</div>
)
}
The hatched fringe
The hatched fringe
The fringe hangs short ticks from the night band's edge in light mode. It can sit on the footer's top edge, in the night band's ink, or under the media hero, in the page ground's ink. The ticks repeat at a fixed pitch and never stretch. Like the hill it drops on a dark page and in print, and the two share the page's one shaped edge.
Paper
The last page-ground band before the footer.
import { Ground } from '@fairgarden-private/design/components/Ground'
import { SectionDivider } from '@fairgarden-private/design/components/SectionDivider'
import styles from './fringe.module.css'
/**
* The fringe on the night footer's top edge, in the night band's ink. A page
* carries one shaped edge; this demo shows the footer placement alone.
*/
export function SectionDividerFringe() {
return (
<div className={styles.page}>
<Ground kind="band" preset="paper" className={styles.band}>
<div className={styles.container}>
<p className={styles.head}>Paper</p>
<p className={styles.text}>The last page-ground band before the footer.</p>
</div>
</Ground>
<Ground kind="band" preset="night" render={<footer />} className={styles.band}>
<SectionDivider kind="fringe" />
<div className={styles.container}>
<p className={styles.head}>Night: the footer</p>
<p className={styles.text}>Ticks hang from its top edge in light mode only.</p>
</div>
</Ground>
</div>
)
}
API Reference
The seam between two bands, or a pause inside one. Render a band seam
(seam, page-seam, hill, fringe) as the first child of the lower
band’s <Ground kind="band">, whose block padding is --ds-space-section
(§11.1): the divider takes that band’s colors and sits on its top edge.
A shaped edge sits only where tone separates the seam: the night band
against a page ground in light mode [D179]. On a dark page it drops for
the night band’s straight --primary12 seam, and in print and forced
colors for a straight rule. Use one shaped edge per page at most.
hill: first child of the page-ground band under thenightmedia hero. The lower ground rises into the hero as one asymmetric curve, 4.6% of the width clamped 12–64 px, cresting at 0.667 of the width; no rule runs under it [D189]. The amplitude joins the band’s top padding.fringe: first child of thenightfooter (ticks in the night band’s ink), or of the page-ground band under thenightmedia hero (ticks in that band’s ink), hanging from the seam.
| Prop | Type | Description |
|---|---|---|
heavy | | |
kind | |
|
ornament | | |
primary | | Primary Radix scale: the rule, dots and ticks. Never defaulted; omitted, it inherits the lower band’s scope [D133]. |
secondary | | Secondary Radix scale: drives only the ornament-rule strokes
( |
sectionDivider
type sectionDivider = sectionDividerSectionDividerKind
The seven §11.2 builds.
type SectionDividerKind = 'straight' | 'seam' | 'page-seam' | 'chrome' | 'pause' | 'hill' | 'fringe'<
'straight' | 'seam' | 'page-seam' | 'chrome' | 'pause' | 'hill' | 'fringe' | null | undefined
>SectionDividerOrnament
The pause ornament: line-dotted, ornament-rule-dot or ornament-rule-star (§4.8.2).
type SectionDividerOrnament = 'straight' | 'seam' | 'page-seam' | 'chrome' | 'pause' | 'hill' | 'fringe'<'dotted' | 'dot' | 'star' | null | undefined>SectionDividerProps
Props for SectionDivider: div props, the kind with its options, and the color axes.
type SectionDividerProps = (
| {
kind?: 'straight' | 'seam' | 'page-seam' | 'hill' | 'fringe';
heavy?: undefined;
ornament?: undefined;
}
| { kind: 'chrome'; heavy?: boolean; ornament?: undefined }
| { kind: 'pause'; heavy?: undefined; ornament?: SectionDividerOrnament }
) & {
/**
* Primary Radix scale: the rule, dots and ticks. Never defaulted;
* omitted, it inherits the lower band's scope [D133].
*/
primary?:
| 'ruby'
| 'olive'
| 'sage'
| 'slate'
| 'sand'
| 'gray'
| 'mauve'
| 'brown'
| 'bronze'
| 'gold'
| 'red'
| 'crimson'
| 'tomato'
| 'pink'
| 'plum'
| 'indigo'
| 'iris'
| 'violet'
| 'purple'
| null;
/**
* Secondary Radix scale: drives only the ornament-rule strokes
* (`--role-accent`). Never defaulted.
*/
secondary?:
| 'ruby'
| 'olive'
| 'sage'
| 'slate'
| 'sand'
| 'gray'
| 'mauve'
| 'brown'
| 'bronze'
| 'gold'
| 'red'
| 'crimson'
| 'tomato'
| 'pink'
| 'plum'
| 'indigo'
| 'iris'
| 'violet'
| 'purple'
| 'amber'
| 'blue'
| 'cyan'
| 'grass'
| 'green'
| 'jade'
| 'lime'
| 'mint'
| 'orange'
| 'sky'
| 'teal'
| 'yellow'
| null;
}Specification: DESIGN-SYSTEM.md §11.2 (section divider and shaped edge), §4.9 (edge geometry) and D179, D189 (seams, the hill).