Layout tree (as in design/layout.json)
{
"pattern": "hero.type-stack-justified",
"kind": "hero",
"grid": {
"eyebrow": "1-3",
"meta": "10-12",
"lines": "full",
"subhead": "1-5",
"cta": "10-12"
},
"slots": [
"eyebrow",
"meta",
"siteName",
"headline",
"subhead",
"cta"
],
"notes": "Fit the site-name band to the container width (fit-text or clamp()), so it runs flush on both edges like a justified poster; the headline band is set light and uppercase, at most two lines.",
"tree": {
"el": "box",
"gap": 0,
"justify": "end",
"minVh": 0.9,
"children": [
{
"el": "grid",
"gap": 3,
"pad": [
2,
0
],
"children": [
{
"el": "text",
"span": "1-3",
"slot": "eyebrow",
"role": "eyebrow"
},
{
"el": "text",
"span": "10-12",
"color": "textMuted",
"slot": "meta",
"role": "small",
"align": "right"
}
]
},
{
"el": "divider",
"weight": 2
},
{
"el": "text",
"slot": "siteName",
"role": "display",
"step": 8,
"transform": "uppercase",
"tracking": "tight",
"leading": "tight"
},
{
"el": "divider",
"weight": 2
},
{
"el": "text",
"slot": "headline",
"role": "display",
"step": 5,
"transform": "uppercase",
"weight": 300,
"tracking": "tight",
"leading": "tight",
"maxCh": 30
},
{
"el": "divider",
"weight": 2
},
{
"el": "grid",
"gap": 3,
"pad": [
3,
0
],
"children": [
{
"el": "text",
"span": "1-5",
"slot": "subhead",
"role": "body",
"maxCh": 40
},
{
"el": "button",
"span": "10-12",
"alignSelf": "end",
"slot": "cta",
"variant": "primary",
"arrow": true
}
]
}
]
}
}