Layout tree (as in design/layout.json)
{
"pattern": "features.bento-mosaic",
"kind": "features",
"grid": {
"big": "1-7",
"small": "8-12",
"accent": "1-4",
"wide": "5-12"
},
"slots": [
"sectionLabel",
"title",
"body",
"image",
"features[4..4]",
"statement",
"cta",
"gallery1"
],
"notes": "Tile sizes must differ; if the content only fills three tiles, drop the 2×2 to two small tiles stacked rather than making three equal cards.",
"tree": {
"el": "grid",
"gap": 3,
"rowGap": 3,
"align": "stretch",
"children": [
{
"el": "box",
"span": "1-7",
"rowSpan": "1-2",
"bg": "surface",
"gap": 3,
"pad": [
8,
8
],
"border": "all",
"children": [
{
"el": "text",
"color": "link",
"slot": "sectionLabel",
"role": "label",
"font": "mono"
},
{
"el": "text",
"slot": "title",
"role": "h2",
"weight": 600,
"tracking": "tight",
"maxCh": 22
},
{
"el": "text",
"slot": "body",
"role": "body",
"maxCh": 48
},
{
"el": "media",
"slot": "image",
"aspect": "16/9",
"treatment": "product",
"frame": "rounded"
}
]
},
{
"el": "repeat",
"span": "8-12",
"rowSpan": "1-2",
"slot": "features",
"min": 4,
"max": 4,
"layout": "grid",
"cols": 2,
"gap": 3,
"of": {
"el": "box",
"bg": "surface",
"gap": 1,
"pad": [
6,
6
],
"border": "all",
"children": [
{
"el": "text",
"color": "link",
"slot": "number",
"role": "label",
"font": "mono"
},
{
"el": "text",
"slot": "title",
"role": "h4",
"weight": 600
},
{
"el": "text",
"slot": "body",
"role": "small",
"maxCh": 30
}
]
}
},
{
"el": "box",
"span": "1-4",
"rowSpan": "3-3",
"bg": "accent",
"gap": 3,
"pad": [
6,
6
],
"justify": "between",
"children": [
{
"el": "text",
"color": "onAccent",
"slot": "statement",
"role": "h3",
"weight": 600,
"maxCh": 22
},
{
"el": "button",
"slot": "cta",
"variant": "secondary",
"arrow": true
}
]
},
{
"el": "box",
"span": "5-12",
"rowSpan": "3-3",
"bg": "surface",
"gap": 2,
"pad": [
3,
3
],
"border": "all",
"children": [
{
"el": "media",
"slot": "gallery1",
"aspect": "21/9",
"treatment": "product",
"frame": "rounded"
}
]
}
]
}
}