Media
Media layouts in Bullframe are grid columns plus embed utilities. Cards and galleries are composed markup; there is no gallery or card class.
When to use
An album, portfolio grid, video or map embed, captioned figure, filter chip bar over a media set, or any page whose main content is images or embeds.
Inputs to gather
Item list (image or embed URL, title, caption, meaningful vs decorative), grid density (two or three columns), whether a filter bar is needed, and light / dark / system theme.
Rules
- Wrap iframes, video and map-like boxes in
.bf-embed-responsive(16:9). Add.bf-embed-responsive--4-3for a taller ratio. Non-replaced content inside the box needs.bf-embed-responsive--item. - There is no
.bf-cardor.bf-gallery. A media card is an<article>with a border, radius and padding written asvar(--bf-*)declarations, or an image plus a body block. - Lay out cards with
.bf-rowand.bf-col-*that sum to 12 or less. Use.bf-container.bf-container--break-mdso columns stack below 768px. - Meaningful images take real
alttext. Decorative images takealt="". - Prefer
<figure>with<figcaption>for a single captioned image. - A filter bar is a
<nav aria-label="…">of.bf-btnlinks; mark the active filter witharia-current="page". - Optional image treatments use
.bf-filter-grayscale,.bf-filter-blur,.bf-filter-invert,.bf-filter-dim-imagesor.bf-filter-none. Do not invent filter classes. - Keep custom CSS out of the page unless the task asks for crop or object-fit rules that tokens cannot cover.
Recipe
- Pick a class-based build (
bullframe-corehas the table). - Emit the scaffold with skip link and container.
- Optional hero row, then optional filter
<nav>. - Emit the grid: one
.bf-row, equal.bf-col-4or.bf-col-6children. - Each cell is an
<article>or<figure>with image or embed, then title and caption. - Re-read and delete any class that is not in
api.json.
Example
examples/album.html is a six-tile album with a filter bar,
captioned articles and a 16:9 embed section. Placeholders stand in for real assets.
Expected output
One HTML file with responsive embeds and a grid whose column classes sum to at most 12 per row. No gallery library and no invented media classes.
Failure modes
- Inventing
.bf-gallery,.bf-media,.bf-cardor.bf-aspect-ratio. - A bare
<iframe>or<video>without.bf-embed-responsive. - Missing or placeholder
alton meaningful photos. - Per-breakpoint column classes such as
.bf-col-md-4(they do not exist). - Filter chips built from unlabelled
<div>s instead of a<nav>and buttons or links.
Do not
- Do not add a lightbox or carousel library unless the task explicitly asks for one.
- Do not put decorative images in the accessibility tree with non-empty alt text.
- Do not use the classless build for a multi-column media grid; it has no grid utilities.
Canonical docs
- Embeds: https://bullframecss.marcopontili.com/utilities/embeds.md
- Filters: https://bullframecss.marcopontili.com/utilities/filters.md
- Grid: https://bullframecss.marcopontili.com/utilities/grid.md
- Cards: https://bullframecss.marcopontili.com/components/cards.md
- Live album and media examples: https://bullframecss.marcopontili.com/examples


