sitereal
v0.1

Building

Elements

Every element you can insert, what it is for, and the layout rules that keep a page sane.

Everything on a page is an element, and every element carries builder-data-element naming what it is. That attribute is what the design system styles, what the insert menu groups, and what the panels read — it is never a class you have to keep in sync.

Layout

ElementTagWhat it is for
SectionsectionA full-width band. Carries the page gutter.
ContainerdivA width: max-inline-size: var(--content-width), centred.
Flex DivdivA row of children, wrapping by default.
DivdivA plain block, unopinionated.
FigurefigureAn image and its caption.
LoopRepeats its children over a query. Emits no wrapper.
ConditionDecides whether its children ship at all. Emits no wrapper.
Site contentmainTemplates only: where the page is rendered.

The gutter is the Section's

A section is the band that touches both edges of the viewport, so it is the only element that knows where the edge is. Once it carries the gutter, everything inside it is clear of the edge — whether or not it sits in a container.

A container is a width and nothing else. Put page padding on it and two nested containers pay the gutter twice, while a heading dropped straight into a section runs into the screen.

Loop and Condition are logic, not markup

Neither emits a tag. A Loop emits Astro's .map(); a Condition emits a guard or nothing at all. They have no box, no classes and nothing to style — put a Div inside (or around) one when you want a box. See Loops & conditions.

Content

ElementTagNotes
Headingh2Change the level in the Settings tab. Sizes come from --h1--h6.
TextpParagraph.
SpanspanInline, for a word that needs its own colour.
LinkaAn href, and anything you like inside.
ButtonbuttonArrives as .btn.btn--primary. See Buttons.
ImageimgArrives wrapped in a figure — the caption-ready markup you would write.
SVGsvgOwns its own markup; paste a path or a whole icon.
Listulul or ol, with li children.

Navigation

Fifteen more elements make up a menu — nav, nav-list, nav-item, nav-link, nav-dropdown, nav-trigger, nav-caret, nav-sub, nav-mega, nav-panel, nav-toggle, nav-burger, nav-close, nav-scrim, nav-skip. Inserting Nav composes the whole assembled menu out of them; the rest are there so you can add a single link or a second dropdown to one you already have.

They are the one group that wears no class: a nav part is styled by what it is ([builder-data-element="nav-link"]). See Navigation.

Inserting

+ in the top bar. The menu is one list — Content, Layout, Navigation, then your own components — with a search field, because by the tenth element you know its name.

Paste HTML takes real markup and turns it into elements, so a snippet from a codepen or a block of markup from a designer arrives as a tree you can edit rather than a black box.

Wrapping

Select an element and wrap it in a Div, Container, Section, Link or Span — or in a Loop or Condition, which add no markup and change what happens to what is inside.

Names and classes

Rename anything in the tree. The name is what the layer list shows and what Generate BEM classes (right-click in the tree) builds on:

Pricing table       →  .pricing-table
  Item              →  .pricing-table__item
  Item              →  .pricing-table__item-2
  Price             →  .pricing-table__price

One meaningful class per node, and the first class is the element's selector — that is the rule the Style and CSS panels write to. A variation is a modifier alongside the block class (.pricing-table--compact), never instead of it.