flows.md · documentação
Referência#
Toda cerca que uma página pode chamar, com seus argumentos, seu corpo e um exemplo. Nada aqui é escrito à mão: a lista abaixo é uma cerca — @components — e sai da declaração dos próprios componentes. Uma referência com a lista de argumentos copiada é uma página que envelhece na semana seguinte.
Componentes de página
Um bloco de código cercado cuja linguagem começa com @ é uma chamada de componente. Tudo abaixo é gerado pelos próprios componentes, então não envelhece.
@audio
renderiza: servidor
An audio player over a file uploaded to this site. Controls on, nothing autoplays.
Renderizado no servidor.
Exemplo
```@audio src:/f/k3Fq9ZrX2mB7vT1wLp8sYa/episodio.mp3 title:"Episódio 1"
```
Argumentos
-
srcpath Obrigatório - Path of the file on this site, usually an upload of the page. Starts with a single / — "//host/x" is another site, not a path.
-
titlestring - A short title shown under the player.
-
preloadenum Padrão: metadata - How much the browser fetches before play: none, metadata or auto. Valores aceitos: none, metadata, auto
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@auth
renderiza: servidor
An app's own sign-in, on its own page: the reader types an e-mail, gets a six-digit code by mail, types it in the same block and is in — no password, and never the product's own sign-in screens. A new address becomes an account when the code proves it. With group: the person also joins that group (or asks to, when its door is by request); with next: they go on to that page. Signed in, it says who they are and offers Sign out. A bare ```@auth is a complete sign-in that returns to the same page.
Renderizado no servidor.
Exemplo
```@auth
```
An app's way in, with its own words, its group and where to go on:
```@auth group:"Passada · atletas" next:./app/perfil title:"Entre na Passada" submit:"Receber o código"
Use o e-mail. Enviamos um código de entrada, sem senha.
```
What only the group sees stays behind members_of:, on that page:
```@data collection:treinos members_of:"Passada · atletas"
```
Argumentos
-
groupstring - A group, by name or id, as members_of: names one: signing in also joins it when its door is open, or asks to join when it is by request. An invite-only group, or a door with questions, is never joined from here: the block shows the way to the group's own page. It hides nothing: gate the app's own blocks with members_of:.
-
nextstring - Where a signed-in person goes on: a page of THIS page's space, written as a page link is (/@space/app, ./app, ../app, :/app). Anything else (another space, a full address) is refused. Without it they stay on this page.
-
titlestring - The line above the form. Defaults to "Sign in", in the page's language.
-
submitstring - The words on the button that asks for the code. Defaults to "Get the code", in the page's language.
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Texto livre. The line or lines of help under the title. Left out, one line says a code is sent and no password is asked.
@button
renderiza: servidor
A link drawn as a button: what the reader should do next. Works in pages and in e-mails.
Renderizado no servidor.
Exemplo
```@button to:/pricing
See the plans
```
Argumentos
-
tostring Obrigatório - Where it goes: a path of this site (/@ana/menu) or a web address starting with https://.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Texto livre. The label on the button.
@comments
renderiza: servidor
Readers' comments on the page: a signed-in reader posts and replies, oldest first, with the author's name and time; the author edits and removes their own, the page's editors hide any. A visitor reads them on a page they may read, with a link to sign in. A reply tells the thread and the page's editors. In a route's layout, each row's page has its own comments, read and written only by whoever may read that row (a list's page has none). Annotations are reviewed by the people who run the site first: until they are open to someone, the block draws nothing for them.
Renderizado no servidor.
Exemplo
```@comments label:"What did you think?"
```
Argumentos
-
labelstring - The heading above the comments. Defaults to Comments.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@components
renderiza: servidor
The reference for every fence a page may call, generated from the components' own declarations.
Renderizado no servidor.
Exemplo
```@components
```
Argumentos
-
onlyenum Padrão: all - Which half to list: `server`, `client`, or `all` (the default). Valores aceitos: all, server, client
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@consent
renderiza: servidor
The reader's yes or no, one line per purpose (flags | label | description | required), remembered on this site as flags the reader owns. One purpose is two buttons; several are switches with accept all, reject all and save. Put it inside a :::banner for a cookie notice.
Renderizado no servidor.
Exemplo
```@consent title:"Sua privacidade" link:/privacidade
essential | Essenciais | Mantêm o site funcionando. | required
videos | Vídeos do YouTube | Carrega o player do Google, que usa cookies.
```
Argumentos
-
titlestring - A heading above the purposes.
-
linkstring - Where the full policy is: a page of this site (/privacidade) or a web address starting with https://.
-
acceptstring - The words on the button that says yes to everything. Default: Accept all.
-
rejectstring - The words on the button that says no to everything but the required. Default: Reject all.
-
savestring - The words on the button that keeps the switches as they are. Default: Save choices.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. One purpose per line: the flags it sets (space-separated), a `|`, the label, a `|`, what it means; `| required` at the end for one that is always on.
@contact
renderiza: servidor
A person or a place to reach: call, WhatsApp with a written message, e-mail, map — and a button that saves the contact to the phone.
Renderizado no servidor.
Exemplo
```@contact name:"Vitória Imóveis" role:"Corretora" whatsapp:"+55 11 95550-0134" message:"Olá! Vi sua página." email:[email protected]
```
Argumentos
-
namestring Obrigatório - Who this is.
-
rolestring - What they do, under the name.
-
orgstring - The company or the place.
-
phonestring - A telephone number, with the country code: "+55 11 5550-0134".
-
whatsappstring - The WhatsApp number, with the country code. It opens a conversation.
-
messagestring - What the WhatsApp conversation starts with, already written for the person.
-
emailstring - An e-mail address.
-
sitestring - A web address, starting with https://.
-
addressstring - Where it is. It opens the map.
-
saveboolean Padrão: true - Whether the "Save contact" button is shown.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@copy
renderiza: servidor
A value to take away — a Pix key, a coupon, a wifi password, a command — printed, with a button that copies it. Not for an API key, a token or a password of an account: a @copy prints its value for every reader, its history and every AI tool that reads the page — use ```@secret, which keeps it encrypted and masked.
Renderizado no servidor.
Exemplo
```@copy label:"Chave Pix" value:[email protected] note:"Any amount helps"
```
Argumentos
-
valuestring - What is copied, up to 2,000 characters. Write it here when it is short, or in the body when it is long or has spaces and quotes.
-
labelstring - What the value is, printed above it.
-
notestring - One line under the value: until when it is valid, where to paste it.
-
kindenum Padrão: text - text for a key or a code a person reads; code for something pasted into a terminal, kept on its own lines. Valores aceitos: text, code
-
buttonenum Padrão: icon - icon (the default): the copy button is its icon alone, named by its title; word: the icon and the word Copy beside it, in the reader's language, which reads "Copied" for a moment after a copy. Valores aceitos: icon, word
-
stylestring - Wears a named style of the page's theme declared for:copy (```style name:<name> for:copy on a page under the theme's styles; manual styles): CSS scoped to this block's root and kept from reaching outside it. It reaches the published hooks — .nt-copy-label, .nt-copy-row, .nt-copy-value, .nt-copy-button, .nt-copy-icon, .nt-copy-word, .nt-copy-note — a terminal window, say: the label as a centred title bar (three dots drawn with radial-gradient backgrounds), the value on a dark body, the button at the top right with `button:word`. Staff preview.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Texto livre. The value, when it does not fit on the fence line: up to 2,000 characters. The body wins over `value`.
@countdown
renderiza: servidor
Counts down to a date and time, and says something else once it has come. A launch, a drop, doors opening, enrolment closing.
Renderizado no servidor.
Exemplo
```@countdown to:2026-11-20T19:00-03:00 label:"Doors open" done:"We are open"
```
Argumentos
-
tostring Obrigatório - The moment, as 2026-11-20 or 2026-11-20T19:00-03:00. With no offset it is read as UTC; a date alone is its first minute.
-
labelstring - What is being waited for, printed above the clock.
-
donestring - What the block says once the moment has passed. Without it the block says the moment has come.
-
showenum Padrão: full - full counts days, hours, minutes and seconds; days counts only days, for something weeks away. Valores aceitos: full, days
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@data
renderiza: servidor
Reads a collection of this space and renders it as a table, with filters, columns, metrics and pagination; filter_by and search give the reader tabs, menus and a search box that narrow it. view:board group:<select field> shows the same rows as a board, one column per option, and lets the space's writers move a card to another column. view:calendar date:<date or datetime field> places the rows on a month or a week, and lets the writers move an item to another day. view:checklist done:<boolean field> gives each row a checkbox the writers tick. view:timeline lays the rows out as the steps of a :::timeline, state:<field> giving each its marker and item:<component> drawing each with a component of the theme. view:field field:<field> (or fields:a,b,c) shows that field of the rows the @filter lines select — meant for one row, like a post's own page — as a control the writers change in place: a select, a checkbox, a date, a number, a text box. view:sheet draws the rows as a spreadsheet — the @column lines (or every field) as columns, the header row and the first column frozen, a computed column's formula in its header to the collection's writers (readers see that it is computed), the metric lines as its last row (totals) — that the writers edit in place (a click or Enter, Escape cancels, Tab and the arrows move) and paste a block copied from Excel or Google Sheets into, as rows, after a preview of what changes; readers move through it read-only; it offers the shown rows as CSV. A filter may name the page the table is shown on — in a layout, the page wearing it: `@filter pr eq page.slug` (the last step of its address), `page.name`, `page.parent` (the last step of the page above); in the layout a ```route draws its rows with, `params.<segment>` (what the address gave) and `row.<field>` (a field of the row the route found: `@filter categoria eq row.categoria` + `@filter slug ne row.slug`, the other rows of its category; a tags or multi_select field gives its values to in, nin and contains_any). A filter may name the person reading: `@filter atleta eq viewer.username` (their space's name; `viewer.name`, the name they gave) lists the rows that name whoever is signed in, a visitor none — never the e-mail, which is no word of a page. A date filter may count from today, in the reader's time zone: `@filter due lte today`, `@filter updated_at lt -14d` (today, today+3d, -2w; on a datetime, the whole of that day: `lte today` runs to midnight tonight). A ```@period on the page (`name:janela options:7,14,30 default:7`) lets the reader pick the period for every block at once: `{janela}` in a filter's value is the number chosen (`@filter dia gt -{janela}d`), and in a metric line's label or the title it is printed (`label:"Últimos {janela} dias"`); `delta:previous` on a metric line over a window counted from today (`@sum alcance delta:previous`) says beside the number how it moved against the period of the same length just before: ▲ 1.3% up, ▼ 2.3% down, as a pill (.nt-data-delta--up, --down), with the sentence for a screen reader. `@count by:<select field>` counts the rows per option; `@sum field by:<select field>` and `@avg field by:` sum or average per option, the rows counted beside each, in one query. `label:"…"` on a metric line names it. `@ratio gasto / teto` is arithmetic between the block's own metric lines named with `as:` (`@sum gasto_mes as:gasto`), and `totals:true` puts the metric lines in a last row of the table, under their columns. view:metric draws only the metric lines, each a stat (the number large, its label under it) — a dashboard tile, and the stat of a `:::grid items:stat` item. view:index field:<field> lists the values of a field with how many rows hold each, every value a link with `link:` (`{value}` in it), so counts by tag or category come from the rows and are never typed. `@column created_at format:age` prints how long ago ("3d", "2w"); `updated_at`, the last time the row changed, is a column, a sort (`sort:-updated_at`) and an age the same way. Over a collection that holds rows for approval (`hold:anyone` on its @schema), a row waiting is drawn only for the collection's writers, marked, with Approve and Decline on it, and `@filter _held eq true` keeps only the waiting ones: a moderation queue (to anybody else it is empty). A field the schema marks `private` is no column for a reader who does not write the collection, and a block that filters, sorts or counts by one answers those readers with an error (validate says so). `@column title link:pr,ticket` links the text to the first of those url or computed fields that holds an address, `link:route` to the row's own page under its ```route, and `label:` on a link column is the link's text. `group:<select field>` on a table or view:cards draws the rows in a section per option that has rows, its head the option and its count, `collapsed:"A,B"` starting some closed, one search and one set of filters over every section. A public collection is public inside a space its reader may see; in a private space, a page published on its own (public, cut from the space's settings) shows a table of it to whoever opens that page, when everyone who may edit the page already writes the collection — the export and every other page stay private.
Renderizado no servidor.
Exemplo
```@data collection:inscricoes sort:-created_at limit:10
@filter status eq aberto
@count
@column nome label:"Quem"
@column status format:badge
```
Argumentos
-
collectionstring Obrigatório - The name of the collection inside this space: lowercase letters, digits and hyphens, 2 to 40 characters (coord-agents, never coord_agents — field names take underscores, collection names do not). Under a template's use, the bare name is the use's own collection; @space/name (this page's space) is always the space's own, shared.
-
limitinteger Padrão: 25 - How many rows per page (1–100). Defaults to 25. A board, a checklist and a calendar's period are one page: they show at most this many rows in all, and say how many more there are. Valores aceitos: de 1 a 100
-
offsetinteger Padrão: 0 - How many rows to skip before the first page. Valores aceitos: de 0 a 100000
-
sortstring - A field to sort by; a leading minus reverses it (`-created_at`, `-updated_at` for the rows changed last).
-
distinctstring - One row per value of this field: the first in the sort order, so `distinct:pr sort:-created_at` shows each pull request's latest review. The limit, the counts and the pages are over the rows kept; rows with no value are one value.
-
includelist - Reference fields to resolve, comma separated. Shown references are resolved anyway.
-
fieldslist - Which fields to show, comma separated. Defaults to every stored field plus created_at; updated_at only when named. With view:field, the fields shown as controls (`fields:status,due,done`), in that order.
-
scopeenum - viewer: each person sees only the rows they created. Valores aceitos: viewer
-
emptystring - What to say when there is no row to show.
-
exportboolean - Adds CSV and JSON links for the whole filtered collection — the fence's filters, sort, scope and columns, but not its limit or offset. Unwritten (no default): on for view:sheet, off for every other view; export:false turns a sheet's off, export:true turns any view's on.
-
updatedboolean Padrão: false - Prints, under the table, when a row of the collection was last added, changed or deleted, in the reader's clock and language.
-
page_paramstring Padrão: page - The query parameter this table pages on. Only for two tables on one page that both page (more rows than limit:): give them different ones. A table that never pages needs none.
-
filter_bylist - Fields the reader may filter by, comma separated: select or multi_select fields this table shows, offering their options, or text and tags fields, offering the values the rows hold (filter_by:project, filter_by:destino) — of the rows the fence's own @filter lets through, the 30 most frequent, in alphabetical order; a row is in when its tags hold the one chosen. Five options or fewer render as tabs, more as a menu. Not a long_text, a file, a number or a date. It only narrows what the fence's own @filter lets through.
-
searchlist - Fields the reader may search, comma separated: text, long_text, email, url, select, multi_select or tags fields of the collection, or a computed field whose formula answers text (a key such as concat(sigla, "-", numero), searched for ADV-12), shown on the table or not (search:titulo,texto): one box searches them all, and a field the table does not show is searched without being shown. A reader who sees the table only through a view link or a page published on its own may not read the collection, so for them the box searches the shown fields alone (validate says which fields that leaves out). A search is not cached.
-
titlestring - A line above the rows, {count} replaced by how many rows the reader's filters leave: title:"{count} imóveis disponíveis".
-
filter_countsboolean Padrão: false - true: each filter_by tab and menu option says how many rows hold it (A fazer 20), and All how many there are — counted over the rows the fence's own @filter lines let through, never narrowed by the reader's choices, so the numbers stay put as the reader moves between tabs; one grouped statement per field.
-
sortsstring - Orders the reader may choose, label:field pairs, comma separated, `-` before a field for descending (sorts:"Padrão:ordem,Valor maior:-valor,Valor menor:valor"): a menu above the rows; the fence's own sort: stays the order until the reader picks one.
-
sorts_menuenum Padrão: always - How sorts: is offered: always (a menu, the default) or auto (five orders or fewer as a row of tabs, the same links and look as filter_by's tabs, the chosen one marked; more as a menu). Beside the rows (controls:side) it stays a menu. Valores aceitos: always, auto
-
asidestring - A short line under the reader's filters, in their column when controls:side (aside:"Não encontrou o imóvel desejado?"), with an optional button: aside_button: its words, aside_href: where it goes (an http(s) address or a /path).
-
aside_buttonstring - The button's words: under aside:'s line, or — without aside:, with the controls on top — a button at the end of the controls' row (aside_button:Sugerir aside_href:/@ana/sugerir), as a catalogue's filter bar ends in "+ Suggest".
-
aside_hrefstring - Where aside_button: goes: an http(s) address or a /path of this site.
-
aside_iconstring - An icon of the set drawn before aside_button:'s words (aside_icon:plus-circle); `manual icons` lists them.
-
filter_minlist - Number fields the reader may ask a minimum of, shown on the table or not, comma separated (filter_min:quartos,vagas): each is a row of buttons 1+ to 5+, and the chosen one leaves the rows with at least that many; choosing it again clears it.
-
filter_includelist - Exactly the select, text or tags fields whose values readers may pick — filter_by's tabs and menus, filter_checks' boxes — shown on the table or not, comma separated (filter_include:tipo,cidade,bairro). Without filter_include or filter_except, those take only the fields the table shows. filter_text and filter_min name their own fields, shown or not, numbers included.
-
filter_exceptlist - Readers may filter by every select field of the collection, shown or not, and every text or tags field the table shows, except these, comma separated (filter_except:nota,salario); no filter_text or filter_min may name them either. Not together with filter_include.
-
controlsenum Padrão: top - Where the reader's filters and search stand: top (a row above the rows), end (the same row, at the end of the line: on the right of a left-to-right page), side (a column beside them, every filter a menu, the button the column's width; above them on a phone), or only (the menus and the button and no rows: a search bar whose button opens to:, where a table with the same id: lists them). Valores aceitos: top, end, side, only
-
applystring - The label of the button that applies the reader's menus and search (default: Apply). Like every word the table writes itself (Search, All, the pages), the default is in the page's language. apply:none leaves the button out: a menu applies as soon as it is chosen and the search when Enter is pressed (a search bar, controls:only, keeps its button).
-
labelsenum Padrão: above - Where each menu's name stands: above it, or inside (its first option says it, "Tipo de imóvel" for all of them, as a home's search bar draws them; the name above stays for a screen reader). inside also takes the word Search off the search box, whose placeholder says it. Valores aceitos: above, inside
-
menusenum Padrão: auto - How a filter_by field is offered: auto (five options or fewer as tabs, more as a menu) or always (every one a menu, however few its options: an "All Teams" menu beside a search box). Valores aceitos: auto, always
-
idstring - The table's own name, lowercase letters, digits and dashes, starting with a letter (id:imoveis): its reader's choices travel under it in the address (?data-imoveis_filter_tipo=Casa), so a link, or a search bar on another page with the same id:, opens it filtered. One per page.
-
stylestring - Wears a named style of the page's theme declared for:data (```style name:<name> for:data on a page under the theme's styles; manual styles): CSS scoped to this block's root and kept from reaching outside it. It reaches the published hooks — .nt-data-stats, .nt-data-stat, .nt-data-stat-value, .nt-data-stat-label, .nt-data-cards-kicker, .nt-data-cards-title, .nt-data-cards-line, .nt-data-cards-facts, .nt-data-table, .nt-data-chart, .nt-chart-bar, .nt-chart-line, .nt-chart-area, .nt-chart-marker, .nt-chart-focal, .nt-data-metric-value, .nt-data-delta, .nt-data-delta--up, .nt-data-delta--down, .nt-data-delta--flat, .nt-data-cards, .nt-data-empty, .nt-board-columns, .nt-data-tabs, .nt-data-tab, .nt-calendar-title, .nt-calendar-weekdays, .nt-calendar-weekday, .nt-calendar-days, .nt-calendar-day, .nt-calendar-day-number, .nt-calendar-item, .nt-calendar-item-title, .nt-calendar-item-name, .nt-calendar-item-time, .nt-calendar-item-line, .is-today, .is-outside, .has-color — and the block's reader controls (a form) stay out of its reach. Staff preview.
-
tostring - With controls:only, where the search bar's button goes (an http(s) address or a /path): the page whose table has the same id:.
-
pagingenum Padrão: simple - How the pages are offered when the rows run past limit:: simple (previous, page 2 of 9, next), numbers (the pages near this one as numbered boxes, and arrows), or more (one button under the rows, "Load more" in the page's language, that adds the next page's rows under them in place, on a table, view:cards or view:timeline; it is a link to the next page, so without a script the reader goes to that page, and every page stays reachable), or none (no pages at all: the first limit: rows and nothing under them, whatever page the address asks for — a dashboard's tile, `view:cards item:post limit:1 paging:none`). Valores aceitos: simple, numbers, more, none
-
moreenum Padrão: default - With paging:more (or phone_limit:), how the "Load more" button is drawn: default (outlined in the page's ink, in the theme's button shape) or muted (a pill outlined in the secondary ink of the ground it stands on, a band's or the page's, its words bold in that ink, on no fill; under the pointer, and always on a phone, it fills with the theme's button, eased). Valores aceitos: default, muted
-
controls_fillenum Padrão: default - How the reader's search box, menus, text boxes, checkbox group and buttons are filled, as a @form's fill: does its fields: default (as they are drawn today), surface (the theme's surface colour), shade (black at 10% over whatever ground they stand on, no hairline: livros.design's pills on its green page) or deep (black at 15%, no hairline). Valores aceitos: default, surface, shade, deep
-
controls_radiusenum Padrão: auto - The corners of the reader's controls in px (controls_radius:10), or pill (fully rounded), as a @form's radius:; auto keeps the theme's. Valores aceitos: auto, 0, 4, 8, 10, 12, 16, 20, 24, pill
-
controls_heightenum Padrão: auto - The height in px of the reader's controls (controls_height:56) — the search box, a menu, a text box, the checkbox group and the buttons — as a @form's field_height:; auto keeps their own. Valores aceitos: auto, 40, 44, 48, 50, 56
-
controls_layoutenum Padrão: wrap - How the reader's controls sit in their row: wrap (each its own width, wrapping as they fill the line) or bar (a filter bar: on a wide screen one row with the search box growing to fill what the others leave; under the theme's wide_from, in its medium range, the search box alone on a row and the others on the next; on a phone each takes the row). Valores aceitos: wrap, bar
-
phone_controlsenum Padrão: all - Which of the reader's controls a phone shows: all, or search (the search box alone: a phone reader then has only the search, and the menus, text boxes and checkboxes are there from a wider screen on). search needs search:. Valores aceitos: all, search
-
search_iconboolean Padrão: false - true draws a magnifier at the start of the search box.
-
search_placeholderstring - What the empty search box says (search_placeholder:"Pesquisar livro"); without it, Search and the names of the fields it searches, in the page's language.
-
filter_textlist - Fields the reader may type a value for, one box each, comma separated (filter_text:autor,nota): a text, long_text, email or url field keeps the rows that contain what was typed, whatever its case, as search: matches; a number field keeps the rows with at least the number typed. Shown on the table or not, for every reader: naming a field here is the author choosing to let readers filter by it, as filter_include does, and the box prints none of its values. With labels:inside each box's name is its placeholder. The box applies with Enter or the button, without a script too.
-
filter_checkslist - Fields the reader may tick several options of, comma separated (filter_checks:formatos): a select or multi_select field's options, or a text or tags field's values (as filter_by: offers them), as checkboxes in one group; a row is in when it holds ANY of the boxes ticked, and nothing ticked is every row. The same fields as filter_by: (the fields the table shows, unless filter_include or filter_except says which).
-
filter_dateslist - Date or datetime fields the table shows, comma separated (filter_dates:quando), each a pair of boxes, from and to, that keep the rows between those two days, both included; either box alone leaves that end open, and a row with no date is left out once a box is filled. A datetime's days are the reader's clock. Only a field the table shows: not one view:metric, view:index or a whole row's component may leave out, and filter_include does not open one. Choosing days is not cached and spends the search budget.
-
viewenum Padrão: table - table: rows and columns (the default). board: one column per option of the `group` field, in the order the schema lists them, each row a card; the first @column is the card's title and the others are small lines under it. The space's writers can drag a card, or use its "Move to" menu, to set the field to another option; everybody else sees the board read-only. calendar: the rows on the days of a month (or a week, `period:week`) by their `date` field, in the viewer's time zone; writers drag an item to another day or use its "Move to date" form. checklist: each row a checkbox bound to the `done` field, labelled by the first @column, with a count; writers tick and untick, everybody else sees the boxes disabled. field: one field (`field:status`) or a few (`fields:status,due,done`) of each row the filters select, as controls the space's writers change in place — a select, checkboxes, tag chips, a checkbox, a date, a number, a text box, each saved at once; everybody else sees the values. Meant for a filter that selects one row (`@filter slug eq x-launch`); several rows are one line each, up to `limit`, titled by the first @column or the row's own name. cards: a grid of cards — the first `format:image` @column is each card's picture, run to the card's edges (a further `format:image` column sits on it, above the tags); the title is the @column with `link:` (else the first other one), on one line (`title_lines:2` or `3` for more, cut with an ellipsis); @columns written before it are small lines above it (a code), the ones after it lines under it, cut at three; @columns with `icon:` share one line with their icons (`@column quartos icon:bed`); `format:badge` columns are small tags stacked on the picture, a `format:ribbon` column a band across its corner (sold); `over:` names the column written across its bottom (a price) — with no picture column these three are lines where they are written, like any other @column (a select is a badge by default); `button:` adds a small button to the title's link; `layout:carousel` lays them in one row that scrolls sideways, with Previous/Next, holding the first `limit:` rows of the sort with no pages; the reader's filters, search, `sorts:` and pages are the table's; `item:<component>` draws each card with a component of the theme, filled as view:item fills a row, each card opening the row's page under a ```route of the space (or `link:"/@ana/livros/{slug}"`). item: each row the filters select drawn whole by a component of the theme the page wears (`item:imovel`), its fields in the slots of the same names — the page of one row; in a layout, `@filter codigo eq page.slug` makes one layout the page of every row. metric: the @count, @sum, @avg, @min, @max and @ratio lines and nothing else — no rows, no table — each a stat, the number large and its `label:` (or what it computes) under it; a line with `by:` is a stat per option under its label. index: the values of one field (`field:destino`: a select, multi_select, tags or text field) among the rows the filters select, each with how many rows hold them (a tags row counts under each of its tags), the most frequent first, `limit:` of them; `link:"/@ana/saidas?data-saidas_filter_destino={value}"` makes each value a link — to a table filtered by it — and `count:false` leaves the numbers out. chart: the rows drawn as a chart by the ```@chart's drawing — the first @column the categories, the next ones (number fields) the series — `type:bar|line|area`, `look:spark` for a dashboard tile (no axes, grid, legend or title), `focal:last` (or a category, or a series) in the accent; the numbers stay a table for a screen reader and a reader without a script. action: one button (`label:"Arquivar time"`) that sets `set:` (`set:arquivado=true`: a select's option, a boolean's true or false) on the one row the filters select — a team's Archive, a task's Mark done — through the door every view writes through, drawn only to a writer of the collection who may write that row (where the staff try it); with no row it says `empty:`, with more than one it draws no button and tells the writer to name one. Valores aceitos: table, board, calendar, checklist, timeline, field, cards, item, metric, index, sheet, chart, action
-
groupstring - With a table, a select field whose options become sections (`group:status`): a head per option that has rows, in the schema's order, saying the option and how many rows the block's filters and the reader's search and choices let through under it, then any value no option holds, then "No value" when some row has none; the reader's search box and filters narrow every section at once. A grouped table is one page: up to limit: rows in all, and how many more there are. collapsed: starts some sections closed. With view:board, the select field whose options become the columns (`group:status`). Required for a board and refused without one. Rows with no value go to a last "No value" column, shown only when some row has none. The space's writers can drag a card (or use its "Move to" menu) to another column; a card dropped on another board of the same collection — on this page, in a side-by-side view, or in another window — takes the group field of the board it lands on. Everybody else sees the board read-only. With view:checklist, a select field whose options become sections (`group:room`), each with its own count; only sections with rows are shown. With view:timeline, a select field whose value heads each run of steps with the same one (`group:kind`), in the order the rows come. With view:cards (with item: or without), a select field whose options become sections (`group:status`), as on a table: a head per option that has rows with its count, one search and one set of filters over every section, one page of up to limit: cards; a section's cards keep the grid or layout:rows. Not with layout:carousel.
-
orderstring - With view:board, a number field that keeps the order of the cards inside each column (`order:rank`): writers can drag a card above or below another, or use Move up and Move down, and one move writes one row. A card dropped into another column takes a number halfway between its new neighbours there (a fraction; when there is no room the column is numbered again); Move to puts it last among that column's numbered cards. The numbers are compared only inside a column, so the same number in two columns means nothing. Cards with no number yet come last, in the fence's sort. Without order the columns keep the fence's sort and cannot be reordered. With view:checklist, a number field that keeps the order of the rows (inside each section): writers drag a row by its grip, or use Move up and Move down.
-
datestring - With view:calendar, the date or datetime field each row is placed by (`date:due`). Required for a calendar. A datetime is placed on the day it falls on in the viewer's time zone (the one in their Settings, else the space owner's, else UTC), and shows its time. The space's writers can drag an item to another day, or use its "Move to date" form; a datetime keeps its time of day, unless dropped on an hour of a week (`period:week`), which sets that time (on the half hour). Everybody else sees the calendar read-only. With view:timeline, a date or datetime field printed under each step's title (`date:at`). The order is the fence's sort.
-
endstring - With view:calendar, the field each row ends at, of the same kind as `date` (`end:until`). A row with an end lasts: on a datetime it shows its time range, over several days it is drawn on each of them, and one that began before the period shown is shown from its first day. A writer's move changes both fields by the same amount, keeping the item's length; on a week's hours (`period:week` on a datetime) a writer also drags an item's bottom edge to change its end (never shorter than half an hour), and drags down an empty slot to add a row from there to there. The end is never written before the start.
-
rowsstring - With view:calendar, lays the period out as a rota: one row per value of this field (a select's options in their order, or a text field's values), the days as columns, and a last row for the rows that have none. Moving items is not offered on a rota.
-
markstring - With view:calendar rows:, a row this field is set on (true, or any option) is drawn as a label on its cell's ground — OFF, Sick — instead of as an item.
-
statestring - With view:calendar, a select field whose value draws each item as one of three looks: suggested (a dashed border), removed (struck through on a hatched ground) or moved (faded) — options of those names, or values mapped to them with states:. Any other value, and none, keep the calendar's look (`state:status`). With view:timeline, the field each step's marker shows: a select whose options are done, current, upcoming, error and skipped, or one mapped to them with states:; or a boolean, done when true.
-
colorstring - With view:calendar, the field whose value gives each item its colour (`color:goal`): a value that names a colour (`green`, `#36884d`) is that colour; otherwise a select's option takes the hue of its place in the schema, from the theme's palette for labels (the first option blue, then violet, amber, rose, teal, green, orange and slate, then again). A row with no value keeps the calendar's own look. With view:cards, the field whose value paints each card's panel (`color:cor`): a hex the row holds (#c42562), a colour word (green, verde), a select's option by its place in the schema, or one of the theme's own colours by name (accent, accent-2, accent-3, inverse); the card's words, secondary lines and links are picked to read on it. A row with none of these keeps the card's own look.
-
donestring - With view:checklist, the boolean field each row's checkbox shows and sets (`done:packed`). Required for a checklist. The space's writers tick and untick the boxes, which saves the field at once; everybody else sees them disabled. Not the @checklist block, which keeps ticks in the reader's browser.
-
tagsstring - With view:checklist, an open tags field: writers search existing tags or create one while working, with automatic colors. Several tags can describe each row without marking it done.
-
phone_limitinteger - On a phone, this many rows instead of limit:, on a table or view:cards (grid or rows, not a carousel). Fewer (phone_limit:6 beside limit:24): the rest hidden on a phone under a "Load more" button that shows phone_limit more at each press, then, with paging:more, brings in the next page's rows; wider than a phone every row of the page shows. More (phone_limit:4 beside limit:3): a page reads phone_limit rows, a phone shows them all, and a wider screen shows limit: of them — when the table pages, the rest under its own "Load more", limit more at each press, so no row is skipped. One read either way. Without a script the button shows the rest of the page at once. Valores aceitos: de 1 a 99
-
openenum - Where a row's link opens, on a table or view:cards: page (the default) goes to it; drawer draws that page — the row's page under a ```route, or link:'s address — in a panel beside the list, without leaving it, with Previous and Next through the rows of the list and a link to open it as a page; the page's own controls (`@data view:field`) work in it. A link to another site, a file or this page itself goes as it always does, and so does a click with ⌘, Ctrl or Shift held. Without a script, every link goes to its page. Valores aceitos: page, drawer
-
bulklist - On a table or view:cards, the fields a writer of the space may set on several rows at once (`bulk:status,arquivado`): every row gets a box to tick (and the table's head one for all of its page), and once one is ticked a bar says how many and offers, for each field, the values it may take — a select's options, yes or no for a boolean (an `arquivado` boolean is how a row is archived). Choosing one writes it on every row ticked, as a change in place does, and the list is drawn again. A select or a boolean field of this collection, stored (not computed). Readers and visitors see the list as it is, with no box.
-
collapsedlist - With group: on a table or view:cards, the sections that start closed, by their option, comma separated (collapsed:"Concluído,Cancelado"); "No value" (in the page's language) names the section of rows with none. The reader opens and closes any section, without a script too.
-
totalsboolean - On a table, totals:true adds a last row of the block's metric lines, each under a column: the column its as: names, else the column of its field (@sum gasto under @column gasto). A @ratio named like a column (@ratio gasto / teto as:uso) is that column's total: the ratio of the sums. The numbers are over every row the filters keep, not only the page shown, and a line the row draws is not drawn again above the table. A line by a field stays above; a table with no line under a column refuses totals. On view:sheet the block's metric lines are the sheet's last row unless totals:false: each under the column its as: names, else the column of its field, as on a table with totals:true.
-
heightenum - With view:board or view:calendar, how tall a column (or a week's day) may grow before its cards scroll inside it: short, medium (the default, about two thirds of the screen), tall, screen, or auto (no bound: the column grows the page). A theme or a page changes the default with --nt-board-height. Valores aceitos: auto, short, medium, tall, screen
-
columnslist - With view:board, which options of the `group` field become columns, in this order, comma separated (`columns:"todo,doing,review"`). Rows holding any other option, or none, are not on the board and take none of its `limit`. `columns:used`: only the options some row the board's filters let through holds, in the schema's order (a board in a layout shared by teams whose rows use different options). Without it, every option is a column, in the schema's order.
-
wipstring - With view:board, work-in-progress limits per column, as option=limit pairs separated by commas (`wip:"doing=3,review=2"`). The column's count shows as "n/limit", counted over every row the board's filters let through (not only the cards shown), and its header is marked when the count is over the limit. Moves are not refused.
-
itemstring - With view:board, a component of the theme the page wears that draws each card (`item:tarefa-cartao`), filled with the row as view:cards fills its cards: the row's fields in the slots of the same names, a list of the component one entry per value. The board keeps its columns, counts, wip and moves (the grip and the Move to menu stay the board's); each card opens the row's own page under a ```route of this space, or link:, or nothing with link:none. With view:timeline, a component of the theme the page wears that draws each step (`item:passo`): the row's fields fill the component's slots of the same names, as text, and a list of the component (`list fotos: url`) one entry per value of the field of its name — each option of a multi_select or tags, each line of a text, its fields separated by `|`. The step's marker is still the row's state:. With view:cards, a component of the theme the page wears that draws each card (`item:livro`), filled with the row as view:item fills it: the row's fields in the slots of the same names, as text, a list of the component one entry per value, and a line whose slots the row leaves empty left out. The grid keeps its per_row, gap, limit, sort, filter_by, search, pages and layout:carousel; the component draws the card's look, so there is no panel around it unless surface:card. Each card opens the row's own page: link:, else the address a ```route of this space gives the row (`:slug to: livro collection: livros`). With view:item (where it is required), the component that draws each row the filters select, whole.
-
linkstring - With view:board item:, where each card goes, as on view:cards: link:"/@ana/tarefas/{chave}", a field alone that holds the address, or none; without it, the row's own page under a ```route of this space. With view:cards, where each card goes, {field} standing for that field of the row (URL-encoded): link:"/@ana/livros/{slug}", a /path or an http(s) address; a field alone (link:"{site}") is the address the row holds, as it is, when it is one. A row whose field is empty has no link. Without it, an item: card opens the address a ```route of this space gives the row; a card without item: keeps its title's own link first. link:none: no card is a link (an item: card whose component holds its own links or a :::drawer), and a column's own link: stays. With view:index, where each value goes, {value} standing for it (URL-encoded): a /path or an http(s) address, or ?… for this page. To list a table filtered by the value, give that table an id: and use its filter parameter: link:"/@ana/saidas?data-saidas_filter_destino={value}" (the table filter_by's the field). {value_slug} is the value as a step of an address, made the way every page's address is (lowercase, accents dropped, spaces and punctuation as dashes: "Design Gráfico" is design-grafico), for a page per value: link:"/@ana/categoria/{value_slug}"; a value with nothing of a slug left has no link.
-
statesstring - With view:calendar state:, how the field's values map to an item's looks, as value=look pairs separated by commas: `states:"Proposta=suggested, Cancelada=removed, Remarcada=moved"`. With view:timeline state:, how the field's values map to a step's states, as value=state pairs separated by commas: `states:"Entregue=done, Em trânsito=current, Falhou=error"`. A value it does not name, and one that is a state's own name, keep their own.
-
periodenum - With view:calendar, month (the default: whole weeks) or week (seven days), each week from the day `week_start` names (Monday by default). Readers move to the previous or next period, or back to today, with links beside the title; only the rows of the period shown are read, up to `limit`. Valores aceitos: month, week
-
hoursenum - With view:calendar period:week on a datetime, the hours drawn: auto (the default) from 8 to 18, reaching earlier or later when an item does; work, 8 to 18; full, the whole day. Each item sits at its time, as long as it lasts, beside the ones it overlaps; a narrow page lists them instead. Valores aceitos: auto, work, full
-
daysenum - With view:calendar period:week, the days drawn: all (the default, seven) or weekdays (Monday to Friday, a work week, whatever `week_start` says); only the rows of the days drawn are read. Valores aceitos: all, weekdays
-
week_startenum - With view:calendar, the day each week starts on: monday (the default, ISO 8601), sunday or saturday — the same for every reader of the page. Valores aceitos: monday, sunday, saturday
-
startstring - With view:calendar, the day whose period the page opens on instead of today's: a date (`start:2026-10-13`) or a day counted from the reader's today as @filter counts it (`start:today+2d`, `start:-1w`), within ten years of today. Readers still move to the previous or next period, and "Today" takes them to today's.
-
directionenum - With view:timeline, vertical (the default) runs down the page; horizontal runs across as a stepper and turns vertical when the page is narrow. Valores aceitos: vertical, horizontal
-
fieldstring - With view:field, the field shown as a control the space's writers change in place (`field:status`): a select for a select, checkboxes for a multi_select, chips for tags, a checkbox for a boolean, a date (or date and time) input, a number input, a text box for text, long_text, email and url. A files field is its files, and for a writer a drop zone where files are dropped, pasted or picked and each taken out, where flows' staff try it (`fields:anexos`). A reference, a file, a computed field, created_at and updated_at show their value. Everybody else sees the value. A value that names a colour (`green`, `verde`, `#36884d`) shows a small square of it beside the word. For several fields use `fields:status,due,done` instead (one or the other). With view:index (where it is required), the field whose values are listed, each with how many rows hold it: a select, multi_select, tags or text field (`field:destino`). A tags or multi_select row counts under each value it holds.
-
overstring - With view:cards, the @column written across the bottom of each card's picture, in white on a darkened band (a price, a date): `over:preco`.
-
ratioenum - With view:cards, the shape each card's picture is cropped to (4/3 when left out). Valores aceitos: 4/3, 5/4, 9/7, 3/2, 1/1, 16/9, 3/4
-
per_rowenum - With view:cards, at most this many cards per row on a wide screen (as many as fit when left out); a phone gets one. Valores aceitos: 2, 3, 4
-
medium_per_rowenum - With view:cards, at most this many cards per row in the theme's medium layout: wider than a phone and narrower than the theme's wide_from (medium_per_row:2 beside per_row:3, a Framer site's tablet layout). Without wide_from in the theme there is no medium layout and per_row: holds. Valores aceitos: 2, 3, 4
-
gapenum - With view:cards, the room between the cards, a step of the theme's scale like a :::grid's space: (3 when left out; 2 is a listing's tight 16px). Valores aceitos: 1, 2, 3, 4, 5
-
column_gapenum - With view:cards, the room between cards side by side, in px (column_gap:24); beside gap:, it wins for the columns. Valores aceitos: 8, 12, 16, 24, 32, 40
-
row_gapenum - With view:cards, the room between rows of cards, in px (row_gap:12); beside gap:, it wins for the rows. 0 to 4 for a dense list (layout:rows) whose rows touch. Valores aceitos: 0, 2, 4, 8, 12, 16, 24, 32, 40
-
row_paddingenum - With view:cards, the room above and below the words inside each card, in px (row_padding:4): with layout:rows, item:, `avatar:small:` and `pill:small:`, a row 28-32px tall. Valores aceitos: 0, 2, 4, 6, 8, 12
-
photo_heightenum - With view:cards, each picture this tall in px whatever the card's width (photo_height:254), cropped to fill; instead of ratio:. Valores aceitos: 200, 220, 240, 254, 280, 300
-
card_heightdecimal - With view:cards, every card this tall in px whatever it holds (card_height:530, or 530.8: one figure after the point), the tail cell too: with item:, the component's last block sits at the card's foot and a :::cover in it fills the room between, its picture centred. phone_card_height: is the height on a phone (card_height there when left out). Valores aceitos: de 160 a 900
-
phone_card_heightdecimal - With view:cards, every card this tall in px on a phone (phone_card_height:461.6); alone, wider screens keep the cards at their own heights. Valores aceitos: de 160 a 900
-
medium_card_heightdecimal - With view:cards, every card this tall in px in the theme's medium layout, wider than a phone and narrower than the theme's wide_from (medium_card_height:688); card_height there when left out, or without wide_from in the theme. Valores aceitos: de 160 a 900
-
insetenum - With view:cards, room inside the grid's left and right edges, in px (inset:12), as a grid whose cards carry half a gutter each is drawn. Valores aceitos: 8, 12, 16, 24
-
layoutenum - With view:cards, `carousel` puts the cards in one row that scrolls sideways, each stop a card at the row's start: touch, trackpad, the arrow keys with the row focused, and Previous/Next buttons once a script runs; nothing moves by itself. `per_row:` is the most that show at once (cards keep a listing card's width, so a narrow screen shows fewer); `limit:` is how many it holds, the first ones in the sort, with no pages. `rows` lists them one under the other, each a small picture on the left (6rem wide, cut to `ratio:`) and its title and lines beside it, as a sidebar's "Popular posts" draws them; with `surface:none` they are bare rows. grid (the default) wraps them in rows. Valores aceitos: grid, carousel, rows
-
phoneenum - With view:cards (the grid), what the cards do on a phone, as a :::grid's phone: does: stack (the default) one under the other; scroll keeps them in one row that scrolls sideways, the next card peeking in, each snapping to the row's start (the recent obituaries on a home's phone layout). Wider than a phone it is the grid it was; layout:carousel already scrolls everywhere. Valores aceitos: stack, scroll
-
surfaceenum - With view:cards, card (the default) draws each card on a panel; none leaves the panel out: the picture with its own rounded corners, and the title and lines under it on the page's ground. With view:metric, card (the default) draws each stat on a tile; none leaves the tile out: the number large in the heading colour and its label under it, on the ground the block stands on. Valores aceitos: card, none
-
title_fontenum - With view:cards, the font of each card's title: body (the default, the text's font) or heading (the theme's heading font, as a blog whose post titles are set like its headings). Valores aceitos: body, heading
-
title_linesenum - With view:cards, how many lines a card's title may run to before it is cut with an ellipsis: 1 (when left out, a listing's one line), 2 or 3 (a blog's post titles). Valores aceitos: 1, 2, 3
-
buttonstring - With view:cards, a small button under each card's lines, to the title's link: `button:"Details"`, or with an icon of the set first, `button:"icon:plus Details"`.
-
tailenum - With view:cards, next makes the block right after the fence, in the same band, the grid's last cell, the size of a card and in the next free cell after the last one: a "Suggest a book" card beside the 13th book, in its row. It follows the last card shown, on every page, after a search or a filter and after "Load more" (paging:more), and alone when no row is left; on a phone it is the last of the stack. The block is drawn where it stands and moved in, so a ```@form keeps its own frame; write it as a :::card to give it a card's panel and height. Not with layout:carousel or layout:rows. The page, its frames and the reader's preview place it; the editor shows it under the cards. Valores aceitos: none, next
-
countboolean - With view:index, whether each value shows its count (the default) or only its name (count:false).
-
index_sortenum - With view:index, the order of the values: count (the most rows first, the default; a tie by name) or name (A to Z). Either way the values listed are the limit: most frequent. Valores aceitos: count, name
-
typeenum - With view:chart, the drawing: bar (the default), line, or area (a line with the ground under it filled, fading down). Valores aceitos: bar, line, area
-
lookenum - With view:chart, page (the default): the chart at the page's width, with its axes, grid and legend; spark: a dashboard tile's chart — no axes, no grid, no legend and no title, bars with rounded tops, an area fading under its line — its numbers kept as a table for a screen reader. Valores aceitos: page, spark
-
focalstring - With view:chart, the one item drawn in the accent (--nt-chart-focal): a category as the first @column prints it, a series by its label, or `last` for the last row (today's bar of a tile).
-
setlist - With view:action, what the button sets on the one row the filters select: field=value pairs separated by commas (`set:arquivado=true`, `set:"status=Feito,arquivado=true"`), each a select field and one of its options, or a boolean and true or false. The filters must select exactly one row (none: the empty message; more: no button, and the writer is told). Drawn only to a writer of the collection who may write that row; the press writes through the same door and checks as a change in place.
-
labelstring - With view:action, the words on the button (`label:"Arquivar time"`).
-
confirmstring - With view:action, a question asked before the button writes (`confirm:"Arquivar este time?"`).
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. Optional children: `@filter field op value` (op: eq, ne, gt, gte, lt, lte, contains, contains_any, in, nin, empty, present; `in` and `nin` take a,b; `empty` and `present` take no value — `@filter day empty` keeps the rows with nothing in the field (missing, null, a blank text, an empty list), `present` the others; every line must hold; a field takes each op once, but `ne` may repeat, each line leaving out one more value: `@filter state ne done` + `@filter state ne dropped`), `@column field label:"…" format:… icon:…` (one field of this collection; `label:" "` is a heading with no words, as an icon column has, the field still named to a screen reader; `icon:` an icon of the set drawn before the value; a reference like `@column prova` prints the row it points at, and there are no dotted paths; `format:image` on a url or text field shows the picture as a thumbnail kept on this site, and a click opens it; `format:icon` on a text or select field draws the icon of the set its value names (`target`, `rocket`; a name the set lacks prints as written), and `tint:<field>` colours it in a square of the colour that field holds — a colour like `green` or `#36884d`, or a select's option by its order in the palette (`@column icon format:icon tint:color`); a file of this site — a /f/<token>/<name> path, what an upload gives — shows itself, and on a url or text field `format:video` plays it in a small inline player and `format:file` links it for download under its name; `format:progress of:<number or computed field>` on a number or computed field draws it out of that other number of the same row, a bar and "5 / 10" in a table and the words elsewhere — saved of a goal, an instalment of how many, spent of a limit, a team's done tasks of all of them (two rollups: `@column feitas format:progress of:total`); `format:percent` on a number or computed field prints a ratio as a share of a hundred (0.82 reads 82%) and `format:money` an amount with two places, both in the reader's language and with no currency sign; `format:relative` on a date, a datetime, created_at or updated_at says today, tomorrow, yesterday, a weekday for the six days ahead, else the short date ("Nov 19", "19 de nov."), and `format:date-short` the short date, the year only when not this one, both in the reader's days; `overdue:danger` (or `warning`) on such a column draws its value in that tone once its day is past; `format:markdown` on a text or long_text field draws its markdown as the page's own (headings, lists, a checklist, a quote, links; the page's allowlist, and no block runs from it) where the staff try it, and prints it as written elsewhere, validate saying so; a pill (`format:badge`: a select, multi_select, tags or boolean by default; one pill per value of a multi_select or tags, a boolean as Yes or No in the reader's language) takes a colour, first that answers: `colors:"A fazer=gray,Feito=green"` per value (a colour of the palette or a hex), `tint:<field>` (what another field of the row names), and a tags field's own tag colours; `icons:"Alta=chevron-up"` draws an icon of the set in the pill; `link:route` links the cell to the row's own page under the ```route of this space that draws the collection, with no field holding the address (a row that cannot fill the route has no link), and `link:` also takes a computed field whose text is an address; `format:track` on a text or long_text field draws the GPS track it holds, small, as ```@track draws one (manual @track), in a table and on view:cards, its words elsewhere; `format:duration` on a number or computed field prints a time — seconds by default (`unit:s`) as a stopwatch, 743 reads 12:23 and 3725 reads 1:02:05, minutes or hours (`unit:min`, `unit:h`) in words to the minute, 84 reads 1h 24min and 45 reads 45 min — and `format:pace` minutes per km written as a decimal as a pace, 6.2 reads 6:12 /km (`unit:mi` names another distance); an empty value, and a pace of zero, stay empty; `suffix:"km"` on a number column writes the number in the reader's language and the word after it, on a space that does not break — 7.9 reads 7,9 km in Portuguese — and goes with no format that writes its own words; `prefix:"+"` is its mirror, a short mark before the number with no space (+76), with the same checks; `format:position` on any field prints the row's place in the table's sort instead of the field — across pages, rows equal in the sort's first field sharing a place (1, 1, 3), under the heading "#" unless `label:` says another — on a table and view:cards, a leaderboard's column (`@data collection:corridas sort:tempo` + `@column atleta format:position`)), and the metrics `@count`, `@sum field`, `@avg field`, `@min field`, `@max field`, each with an optional `label:"…"`; `by:<select field>` on `@count`, `@sum` and `@avg` gives one line per option, in the schema's order (`@sum valor by:categoria`); `decimals:0` (0 to 6) on a metric line rounds its number half up to that many places and prints them all (`@avg nota decimals:0` reads 85, not 84.50); without it a whole number prints bare and any other with two; `format:percent`, `format:money`, `format:duration` or `format:pace` (with its `unit:`) on a metric line prints its number as a column of that format does (`@sum minutos format:duration unit:min` reads 2h 9min), and `suffix:` writes its word after the number (`@sum distancia suffix:km`), `prefix:` its mark before it (`@sum seguidores_novos prefix:"+"` reads +76). `as:<name>` names a metric line, and `@ratio <arithmetic>` works a number out of the lines named so — their names, numbers, + - * / and parentheses, and nothing else: no field, no row, no function (`@sum gasto_mes label:"gasto" as:gasto` + `@sum limite_mensal label:"teto" as:teto` + `@ratio gasto / teto format:percent label:"do teto usado"`: 820 of 1000 reads 82%); the lines' numbers are over the same filtered rows, a division by zero, a line with no value (a rollup the reader may not read) or a number at or past 1e30 is no value, a @ratio may name another @ratio (never in a circle, at most 8 deep), and it takes label:, decimals:, format: and as: like the others; over lines by the same field it is one number per option (`by:` on it may repeat that field), and over lines by different fields, or by: on a @ratio of lines by none, it is refused. `@sample field:value field:value` (up to 10 lines) is a row drawn while the collection has none, marked as an example and shown ONLY to who may write the collection (a reader, a visitor, a view link and a mail get `empty:`): a template's board or checklist shows its shape to its author before the first real row; on a table, view:cards, board, checklist or timeline, read-only, and gone the moment one real row exists.
Filhos aceitos
@filter, @column, @count, @sum, @avg, @min, @max, @ratio, @sample
@diff
renderiza: servidor
A patch as a review reads it — what `git diff` prints — one section per file, coloured by language, stacked or side by side. Select a line to annotate it.
Renderizado no servidor.
Exemplo
~~~@diff title:"Greeting takes a mark"
--- a/greeting.rb
+++ b/greeting.rb
@@ -1,3 +1,3 @@
def hello(name)
- "Hello, #{name}"
+ "Hello, #{name}!"
end
~~~
Argumentos
-
titlestring - A line above the files: what the change is.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Texto livre. The patch: the output of `git diff` (or any unified diff). Fence it with ~~~ so the backticks inside a patch stay text.
@event
renderiza: servidor
A moment to put in a calendar: the date and time (or a whole day), how long, where — printed, with a Google Calendar link and an .ics file for Apple and Outlook.
Renderizado no servidor.
Exemplo
```@event to:2026-10-17T14:00-03:00 duration:60 title:"First meeting" where:https://meet.example/abc zone:America/Sao_Paulo
```
Argumentos
-
tostring Obrigatório - When it starts, as 2026-10-17T14:00-03:00. With no offset it is read as UTC; a date alone is its first minute. With all_day:true, the day (2026-10-17).
-
titlestring Obrigatório - What the calendar entry is called.
-
durationinteger Padrão: 60 - How long it lasts, in minutes (5 to 1440). Defaults to 60. Valores aceitos: de 5 a 1440
-
wherestring - Where it happens: a place, or the address of the call (https://…).
-
detailsstring - A line for the calendar entry's notes: what to read, what to bring.
-
zonestring - The time zone the moment is printed in, as the tz database names it (America/Sao_Paulo). Without it the moment is printed in UTC.
-
all_dayboolean Padrão: false - true: a whole day — the day of `to`, the same on every calendar, with no time; duration and zone are not read.
-
daysinteger - How many whole days in a row, from the day of `to` (1 to 90): a trip, a conference. Makes the block all_day. Defaults to 1. Valores aceitos: de 1 a 90
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@flashcards
renderiza: servidor
A deck of cards to drill: a term and its meaning, a question and its answer, a word and its translation — or a self-test, with questions the reader answers and a score. One card per line, front | back; a line of three parts or more is a multiple-choice question. Turned by a click or the keyboard; printed in full, answers included, without a script.
Renderizado no servidor.
Exemplo
```@flashcards label:"DNS do envio"
SPF | Diz quais servidores podem enviar em nome do domínio.
DKIM | Assina cada mensagem; o destinatário confere no DNS.
```
```@flashcards label:"Self-test"
Which port does a mail client submit on? | 587 :: The submission port, with STARTTLS. | 25 :: Port 25 is for servers talking to servers. | 80 | 443
Which record signs each message? | DKIM | SPF :: SPF names the servers; it signs nothing. | MX
```
Argumentos
-
labelstring - A line above the deck saying what it drills.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. One card per line. `front | back` is a card that turns. `question | right answer | wrong | wrong …` is a multiple-choice question: the FIRST answer after the question is the right one, and the options are shown shuffled (the same order on every render, so it works printed and without a script). An option may say why after ` :: ` (a space, two colons, a space): `25 :: Port 25 is server to server.` — shown once the reader picks. The reader's picks and score stay in their browser; to keep each learner's answers on the server, use a @form with scope:viewer.
@form
renderiza: servidor
A form that writes a row into a collection of this space. Only renders for somebody the collection accepts.
Renderizado no servidor.
Exemplo
```@form collection:inscricoes submit:"Quero entrar"
nome
email required
```
```@form collection:lista layout:inline submit:"Assinar"
email required
```
```@form collection:inscricoes mode:edit own:true
nome
email required
```
```@form collection:inscricoes preview:true
nome
email required
```
```@form collection:anuncios labels:inside button:full submit:"Enviar cadastro"
## 1. Owner
nome
telefone width:1/2
email width:1/2
## 2. The property
rua width:3/4
numero width:1/4
```
```@form collection:contatos submit:"Talk to us"
nome required
interesses as:checkboxes
```
A photo journal's check-in on a phone: one tap opens the camera, and the time is already filled in:
```@form collection:checkins submit:"Check in"
foto as:camera
quando default:now
nota
```
In two steps, with a progress bar:
```@form collection:reunioes steps:bar submit:"Schedule a meeting"
step: About you
nome required width:1/2
sobrenome required width:1/2
email required
---
step: How we can help
servicos as:checkboxes
como_soube
```
In the layout a ```route draws each obituary with (`:slug to: obituario collection: obituarios`), its condolence wall:
```@form collection:condolencias submit:"Leave a condolence"
obituario from:params.slug
nome required
mensagem long_text
```
```@data collection:condolencias
@filter obituario eq params.slug
@column nome
@column mensagem
```
One kudos per athlete on each activity's page (its @schema says `unique:"atividade,atleta"`), and the button that takes back one's own:
```@form collection:kudos submit:"Dar kudos" undo:"Desfazer kudos" undone:"Kudos desfeito."
atividade from:page.slug
atleta from:viewer.username
```
Argumentos
-
collectionstring Obrigatório - The name of the collection inside this space: lowercase letters, digits and hyphens, 2 to 40 characters (coord-agents, never coord_agents — field names take underscores, collection names do not). Under a template's use, the bare name is the use's own collection; @space/name (this page's space) is always the space's own, shared.
-
successstring - What to say after a row goes in. Defaults to a thank-you. Drawn again within 12 hours, the form says when it was sent, with Send another, instead of showing itself empty: in the browser that sent it, and on any device for a person signed in. On a collection that holds the sender's rows for approval (`hold:anyone` on its @schema), the default says the entry waits for review.
-
submitstring - The label of the button. Defaults to "Send".
-
show_leftboolean Padrão: false - true: on a collection whose @schema says capacity:, the form says how many places are left ("12 places left"), counted when the page is drawn; with per:, nothing (each value has its own, and a full one is drawn off in its select).
-
fullstring - What the form says in its place when no place is left (capacity: on the collection's @schema, and no waitlist:). Defaults to saying every place is taken.
-
waitlistedstring - What to say after a row goes on the waitlist (waitlist: on the collection's @schema), in place of success:. Defaults to saying the places are taken and the row is on the waitlist, in the order it came.
-
soonstring - What the form says in its place before the collection's opens: (on its @schema). Defaults to saying when it opens, on the space owner's clock.
-
closedstring - What the form says in its place after the collection's closes: (on its @schema). Defaults to saying it closed.
-
duplicatestring - What the form says over its fields when the row it sent holds the values of the collection's `unique:` fields that another row holds already (`duplicate:"Você já deu kudos nesta atividade."`). Defaults to saying a row with those values is already there, naming the fields.
-
undostring - The words of a button that takes back the row this form keeps for the person signed in (`undo:"Desfazer kudos"`; an icon of the set before them, `undo:"icon:x Desfazer"`, as submit: takes one): on a collection whose @schema says `unique:`, once they have the row the form would write — its key made only of fields the page writes (`from:`), the person among them (`atleta from:viewer.username`) — the button stands in the form's place, and pressing it moves that row to the trash (a writer can restore it) and draws the form again. Only a row the person sent themselves: one the owner seeded, wrote on the Collections screen or through the MCP is never offered or taken, even when its fields name them. Not with mode:edit; refused on a collection with no unique:, and on a form whose key has a field the sender types.
-
undonestring - What the form says after `undo:` took the row back (`undone:"Kudos desfeito."`). Defaults to saying it was taken back.
-
scopeenum - viewer: require sign-in and attribute the row to the sender. Use scope:viewer on reads to show only that person's rows; collection visibility still controls other reads. Valores aceitos: viewer
-
modeenum Padrão: create - create: a form that adds a row. edit: a form that changes one of the viewer's own rows; it needs own:true. To change any row's fields, a writer uses `@data view:field fields:…` (edits them inline) or the Collections screen. Valores aceitos: create, edit
-
layoutenum Padrão: stacked - stacked: one field under the other, each with its label. inline: the fields and the button in one row — for a signup of one or two fields; the labels become the hints inside the fields and stay readable to a screen reader. Valores aceitos: stacked, inline
-
labelsenum Padrão: above - above: each field's name over it. inside: the name is the hint written in the empty field, and a select opens on it — how a site's contact or listing form is drawn; a screen reader still reads the label. A checkbox keeps its label beside it; a date, which shows the browser's dd/mm/yyyy and no hint, floats its name small inside the box over the value; a file and a list of options keep their name above. Valores aceitos: above, inside
-
buttonenum Padrão: auto - full: the send button takes the form's whole width, as a long site form ends. Valores aceitos: auto, full
-
shapeenum Padrão: default - pill: fully rounded fields and button, the fields on the ground of the band they stand on (a dark footer keeps them dark). outline: the fields keep the theme's corners and are drawn the same way, on the ground of the band or card they stand on behind a hairline (a lead form on a dark-green card). With `submit:"icon:arrow-right"` the button is a round icon alone, its name still read to a screen reader. Valores aceitos: default, pill, outline
-
fillenum Padrão: default - default: each field filled with the page's background, or, on a dark band or card (inverse, accent, gradient), with a step of the band's own ground. surface: filled with the theme's surface colour wherever the form stands — grey fields on a white page — and the same step off the ground on a dark band or card. shade: black at 10% over whatever ground the form stands on (#e6e6e6 on a white card), with no hairline. deep: black at 15%, with no hairline. shape:pill and shape:outline keep their own fields on a dark ground. Valores aceitos: default, surface, shade, deep
-
radiusenum Padrão: auto - The corners of the fields AND the send button, in px (radius:10), or pill (fully rounded); auto keeps the theme's: its field corners and its button shape. Valores aceitos: auto, 0, 4, 8, 10, 12, 16, 20, 24, pill
-
field_heightenum Padrão: auto - The height in px of every field of one line (text, email, a select…) and of the send button (field_height:50); a long_text box keeps its rows. auto keeps the form's own (44px, or a pill's 50). Valores aceitos: auto, 40, 44, 48, 50, 56
-
field_spaceenum Padrão: auto - The space in px between one field and the next, and between the last field and the button (field_space:24); auto keeps the form's own (14px). layout:inline keeps its fields in one row. Valores aceitos: auto, 8, 12, 16, 20, 24, 32
-
label_spaceenum Padrão: auto - The space in px between a field's label and its box (label_space:8); auto keeps the form's own (4px). A label drawn inside the box (labels:inside, a date's) keeps its place. Valores aceitos: auto, 0, 4, 6, 8, 12
-
label_alignenum Padrão: inherit - Where each field's label, hint and error sit: inherit (as the text around the form: centred in a centred card or band) or start (at the start whatever the card or band does, as a site's newsletter card centres its title and note but not its labels). Valores aceitos: inherit, start
-
textenum Padrão: inherit - The size of the fields' and the button's words in px (text:14), whatever the text around the form; inherit keeps it. Valores aceitos: inherit, 12, 13, 14, 15, 16
-
stepsenum Padrão: count - With `---` lines in the body (a form in steps), how the reader is told how far along they are: count ("Step 1 of 2" over the step), bar (a progress bar with "1/2" beside it) or none (nothing shown; a screen reader still hears which step it is). Over the step on screen, the earlier steps' answers, each with Change to go back to it. Valores aceitos: count, bar, none
-
advanceenum Padrão: next - In a form in steps: auto goes on to the next step as soon as the reader chooses, in every step whose only field is a select (drawn as cards or as a list), with no Next to press; a choice made with the arrow keys waits for Enter, and the last step still sends with its button. next (the default): Next goes on. `advance:auto` on one select's line does it for that step alone. Valores aceitos: next, auto
-
anotherenum Padrão: none - What the form does after a row goes in: none (the default) draws the thank-you with a "Send another" link; always draws the form again, empty, with the thank-you over it, for entering rows one after the other; choice draws a "Create another" box beside the button that the reader ticks to get the form back (always), or leaves to get the thank-you (none) — Linear's "Create more". Inside a :::drawer edge:center the dialog stays open either way. Not with mode:edit. Valores aceitos: none, always, choice
-
ownboolean Padrão: false - true: list the rows this viewer created, each with a link that opens it in the form. Signed-in people only.
-
previewboolean Padrão: false - true: the form as it would look — fields, labels, layout, the button's words — with the button disabled and a note that it sends nothing, shown to whoever may read the collection or send through it, even when the collection accepts nobody; anyone else gets the closed notice. No form element and no address to send to, so nothing is ever written. For the docs, a theme's or a layout's preview, a mockup.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. One field per line, a subset of the collection's schema: `email required`, `nome`, `mensagem long_text`. Options must match the collection schema; change @schema first to override them. `width:1/2` on a line (1/4 1/3 1/2 2/3 3/4 full) puts fields side by side, on a phone one under the other. `icon:user` on the line of a field of one line of text (text, email, url, number) draws that icon of the set at the start of the box, as a site's lead form marks its name and e-mail fields (`nome icon:user`, `email icon:mail`; manual icons). `label:"Seu nome"` on a line is what this form calls the field, and `placeholder:"João"` what its empty box shows (a field whose box shows words, or a select, whose blank choice it is): the form's words, never the schema's, which keeps its own label for every other table and form. `hint:"Considerando 2 encontros por mês."` on a line is a line of help drawn under the field, read with it by a screen reader. Any word a line does not know is refused, by validate too, with the words a line takes. `as:checkboxes` on a multi_select's line (`interesses as:checkboxes`) draws a box to tick for each option instead of a list box; the same list is sent, and a required one asks for at least one box. `as:camera` on a `file` field's line (`foto as:camera`) opens a phone's rear camera on a tap instead of the file picker (a desktop keeps its picker); the field takes the same pictures. `default:now` on a `datetime` or a `date` field's line (`quando default:now`) fills the empty field with the reader's local time, or day, when the form opens, still editable: an edit opens on the row's value, and without a script the field stays empty. A line that starts with `#` is a section title inside the form (`## 2. The property`). A `file` field takes a picture (JPEG, PNG, WebP, GIF or HEIC, up to 10 MB), or what its schema's `accept:` names (`curriculo file accept:document`: a PDF or a Word document, DOCX, handed to readers as a download; `arquivo file accept:gpx`: a GPS track, whose schema's `fills:` writes its distance, duration, start and track into the row, a value typed in the form winning; a create form that lists the file need not list the fields it fills, even required ones, and a file that says nothing for a required one is refused when sent), kept as the row's own file: only readers of the collection see it, and it counts against the space owner's storage. Empty body: every writable field, in schema order. `from:` on a line makes it a field THE PAGE FILLS, drawn as no input: `obituario from:params.slug` in the layout a ```route draws each obituary with writes that row's slug into every condolence sent from its page (also `row.<field>`, a field of the row the route found — `unidade from:row.unidade` — and `page.slug`, `page.name`, `page.parent`, as a @data filter reads them; and `viewer.username`, the person sending — `atleta from:viewer.username` writes their space's name, `viewer.name` the name they gave — so a form with one is for people signed in, and a visitor reads the sign-in line in its place; never the e-mail, which is no word of a page). The server sets the value from the page the form was drawn on, asked for again at the submit (the row still there and readable by the sender); whatever the browser sends for it is ignored, so nobody posts onto another row by editing the request. On a page that gives no value (the layout opened on its own) the field is left out. A line holding only `---` splits the form into STEPS, shown one at a time with Back and Next: Next checks only that step's fields, the last step has the form's button, and one submit writes one row with every step's fields; a line `step: Who you are` inside a step names it (its heading, and what a screen reader hears). Without a script every step is shown, one under the other, as one form. Not with layout:inline. `as:cards` on a select's line (`plano as:cards`) draws its options as big cards to pick one of, one under the other, and `as:choice` (`fiz as:choice`) as buttons side by side, for a yes or a no; `when:fiz` on another line (`mensagem when:fiz`, or `when:fiz=não` for one answer) shows that field only once the other has a value, and sends nothing of it while hidden — never on a required field; `other:"Something else…"` on that line adds a last card with a box for an answer of the reader's own, kept in the collection's text field `<field>_other` (`plano_other`, which the @schema must have; the select is left empty then, so it cannot be required). `advance:auto` on a select's line alone in its step goes on as soon as it is chosen (or `advance:auto` on the form, for every such step). `min:100` on a text or long_text line asks for at least that many characters: a counter under the box ("0 / 100"), Next and the send button off until it is reached, and the server refuses a shorter one.
@hours
renderiza: servidor
When a place is open: the week, printed, and "open now" by the clock of the place. For a venue, a shop, a clinic, a contact page.
Renderizado no servidor.
Exemplo
```@hours zone:America/Sao_Paulo notice:"Closed on the 12th"
mon-fri 11:30-15:00, 18:00-23:00
sat 12:00-00:00
sun closed
```
Argumentos
-
zonestring Obrigatório - The time zone of the place, as the tz database names it: America/Sao_Paulo, Europe/Lisbon. "Open now" is read on that clock, not the reader's.
-
titlestring - A heading over the week.
-
noticestring - One line under the week: a holiday, new hours, "kitchen closes 30 minutes earlier".
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. One line per day or run of days, then the hours: `mon-fri 09:00-18:00`, `sat 10:00-14:00, 16:00-20:00`, `sun closed`. Days in English or Portuguese. An end before the start runs past midnight.
@members
renderiza: servidor
The people in a group: name, a line about them, who runs it. Shown only to those the group lets see its list (its managers; its members when the group says so). Nothing for anybody else. `columns:role,state,email` draws it as a table: role (member or manager), state (in, invited, asked to join — the people not in yet listed only to the group's managers) and email (to the managers only), each only what the viewer already reads on the group's own screen. `actions:invite,remove` gives the group's managers its invite form and a Remove button on each row, the group's own doors.
Renderizado no servidor.
Exemplo
```@members group:"Turma 3" label:"Quem está na turma" columns:role,state
```
Argumentos
-
groupstring Obrigatório - The group, by name or id. A name must be one you stand in, or a group with a door (by_request, open).
-
labelstring - A line above the list.
-
columnslist - Draw the list as a table with these columns, in order: role, state, email (`columns:role,state`). state lists the people invited or asking to join to the group's managers; email is drawn to the managers only.
-
actionslist - What the group's managers may do from the list: invite, remove (`actions:invite,remove`) — the invite form of the group's screen, and Remove (or Withdraw, for an invitation) on each person but themselves. Nobody else sees them.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@pages
renderiza: servidor
Também escrito ```pages
A gallery of pages, each one a picture of itself: the pages inside a folder (`from:`), or the pages listed in the body. Only pages the reader may open are shown.
Renderizado no servidor.
Exemplo
```@pages from:./plans columns:2
```
Argumentos
-
columnsinteger Padrão: 3 - How many cards per row (1–4). Defaults to 3. Valores aceitos: de 1 a 4
-
fromstring - A folder: its path (/@you/work), or relative like a link — ./work inside this page, ../work beside it, ~/work in the space this page is in; in a layout, relative to the page that puts the layout on. A bare name (work) is not a folder. Its pages with something written are the gallery, in the order they were made, and a new page joins it by itself — the way to keep a section's hub, and a template's hub keeps pointing at its own folder wherever it is copied. Without it, the pages listed in the body.
-
limitinteger Padrão: 12 - How many cards at most (1–48). Defaults to 12. A list in the body longer than this shows its first ones, and validate warns. Valores aceitos: de 1 a 48
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. Without `from:`, one page path per line. `/a/section | /a/section/one` links to the first and pictures the second.
@patterns
renderiza: servidor
The section pattern library: every pattern, grouped, with a link to it rendered and its markdown to copy.
Renderizado no servidor.
Exemplo
```@patterns
```
Argumentos
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@pdf
renderiza: servidor
A page of a PDF uploaded to this site, drawn in the page (or a few, pages:18-19). Only that page's bytes are fetched; a click opens the PDF in the site's viewer at that page. Without a script, or printed, it is a link to the viewer at that page.
Renderizado no servidor.
Exemplo
```@pdf src:/f/k3Fq9ZrX2mB7vT1wLp8sYa/curso.pdf page:18 title:"Figure 3: the request cycle"
```
Argumentos
-
srcpath Obrigatório - The PDF's address on this site, /f/<token>/<name>.pdf, as `files` lists it. Starts with a single / — "//host/x" is another site, not a path. No #page= here: the page is page:.
-
pageinteger Padrão: 1 - The page drawn. 1 by default. Valores aceitos: de 1 a 100000
-
pagesstring - A range of pages drawn one under the other, first-last: pages:18-19. At most 4. Instead of page:.
-
titlestring - A short line shown under the page.
-
heightinteger - The most pixels tall a page is drawn. By default a page fits the width of the column. Valores aceitos: de 120 a 2000
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@period
renderiza: servidor
The period a reader picks for the whole page — `name:janela options:7,14,30 default:7` draws "7 days · 14 days · 30 days" as links (`?janela=14`), the chosen one marked — and every ```@data on the page counts from it: `@filter dia gt -{janela}d` keeps the chosen number of days, `{janela}` in a metric line's label or a @data's title prints it, and `delta:previous` on a metric line compares with the period of the same length before it. Works without a script (links).
Renderizado no servidor.
Exemplo
```@period name:janela options:7,14,30 default:7
```
Argumentos
-
namestring Obrigatório - The parameter the links carry and the placeholder a @data writes ({janela}): lowercase letters, digits and _, starting with a letter.
-
optionslist Obrigatório - The numbers offered, in order: whole numbers from 1 to 999, up to 8 (options:7,14,30).
-
defaultinteger - The option chosen when the address names none (or names one that is not offered); the first option unless said.
-
unitenum Padrão: d - d (the default): the numbers are days; w: weeks. A filter writes the same unit after the placeholder (-{janela}d, -{janela}w). Valores aceitos: d, w
-
labelstring - Each option's words, {n} standing for its number (label:"{n} dias"); without it, "7 days" in the reader's language.
-
stylestring - Wears a named style of the page's theme declared for:period (```style name:<name> for:period on a page under the theme's styles; manual styles): CSS scoped to this block's root and kept from reaching outside it. It reaches the published hooks — .nt-period-option, .nt-period-option--on — a segmented control, say: a pill of a ground with the chosen option a raised white pill (`[aria-current]`, or `.nt-period-option--on`). Staff preview.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@posts
renderiza: servidor
The pages inside a folder as a list of posts, newest first: title, date and a line each. The date is the page's ```meta date:, else the day it was made. A post's ```meta tags: (separated by commas) and author: are drawn under it as links, and ?tag=<tag> or ?author=<author> on the page holding the block lists the posts that carry it — the blog's tag and author pages, in the sitemap. Only pages the reader may open are listed; a public folder also offers its RSS and Atom feeds.
Renderizado no servidor.
Exemplo
```@posts limit:5
```
Argumentos
-
frompath - The folder whose pages are listed. Without it, the page the block is on.
-
limitinteger Padrão: 10 - How many posts, the newest first (1–50). Defaults to 10. Valores aceitos: de 1 a 50
-
feedboolean Padrão: true - false: leave out the links to the folder's RSS and Atom feeds.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@qr
renderiza: servidor
A QR code of this page, or of another address: for a table, a slide, a poster, a card. Dark on white whatever the theme, so a camera reads it.
Renderizado no servidor.
Exemplo
Argumentos
-
tostring - What the code opens: a path of this site (/@ana/menu) or a web address starting with https://. Without it, the page the block is on.
-
labelstring - A line under the code, saying what it opens.
-
sizeenum Padrão: medium - How large it is drawn on the screen. It prints sharp at any size. Valores aceitos: small, medium, large
-
colorstring - The colour of the code itself, as #rrggbb. Dark enough to read against the background, or the block says so.
-
backgroundstring - The colour behind the code, as #rrggbb. White by default, which is what a camera likes best.
-
eyestring - The colour of the three corner squares, as #rrggbb. The colour of the code by default.
-
shapeenum Padrão: square - The shape of the small modules: square, dots or rounded. The corner squares stay square whatever this says. Valores aceitos: square, dots, rounded
-
logostring - A mark in the middle: `brand` (the mark of this site), `none`, or the path of an image on this site (/demo/mark.png).
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@row
renderiza: servidor
Inside a theme component that `@data … item:` draws for each row: that row's fields as view:field draws them — a select, checkboxes, a date, a text box — changed in place by the collection's writers, read by everybody else (`fields:status,prioridade`). The row is the one the block already read: nothing else is read. Only in a component; in a ```@use there is no row and it is left out.
Renderizado no servidor.
Exemplo
```@row fields:status,prioridade
```
Argumentos
-
fieldslist - The row's fields to show as controls, in order (`fields:status,prioridade,prazo`).
-
fieldstring - One field (`field:status`); fields: for several.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@schema
renderiza: servidor
Declares the fields of a collection of this space. Whoever edits the page sees the declaration (a reader gets nothing in its place); only somebody with settings on the space can apply it.
Renderizado no servidor.
Exemplo
```@schema collection:inscricoes accepts:anyone
nome text required
email email required label:"E-mail"
prova reference:provas
```
Argumentos
-
collectionstring Obrigatório - The name of the collection inside this space: lowercase letters, digits and hyphens, 2 to 40 characters (coord-agents, never coord_agents — field names take underscores, collection names do not). Under a template's use, the bare name is the use's own collection; @space/name (this page's space) is always the space's own, shared.
-
visibilityenum Padrão: private - Who may READ the rows: private (the space's people) or public (anyone). Private by default. Valores aceitos: private, public
-
acceptsenum Padrão: nobody - Who may send a row through an @form: nobody, members (people a role on the space root reaches) or anyone (in a private space: anyone who reads a published page holding the form; a page anyone may edit opens nothing). Nobody by default. Valores aceitos: nobody, members, anyone
-
holdenum Padrão: nobody - Rows held for approval: anyone holds every row sent through an @form by a person who does not write the collection (a member's or a visitor's) until a writer approves it — on the Collections screen, on a @data block they read, or with update_records approve:true — or declines it (the trash). A held row is read by the collection's writers and by nobody else, through any door (every @data view, records, grep, the export, the calendar, counts and rollups); the form tells its sender the entry waits for review. Rows the writers write (the screen, a board, upsert_records) are never held. Nobody by default. Valores aceitos: nobody, anyone
-
capacityinteger - The most rows the collection's @forms keep at once (capacity:60): the next one is refused, the form says no place is left, and `show_left:true` on the @form prints how many are. Counted over the kept rows, not trashed, and not on the waitlist; a row the owner adds through the Collections screen or upsert_records takes a place too, and is never refused. Two people sending the last place at the same moment: one row goes in. From 1 to 100000. Valores aceitos: de 1 a 100000
-
perstring - With capacity:, the places are counted per value of this field (capacity:1 per:slot: one booking per slot); a full value is refused on that field, the others still take rows, and a select's full options are drawn off in the @form. A stored field of type text, select, email, url, number, date, datetime, reference, boolean.
-
waitliststring - With capacity:, a boolean field of the collection: once the places are taken (for the row's value of per:), a row a form sends still goes in, with this field true, and the form says it is on the waitlist. When a row in a place goes to the trash, or the capacity is raised, the oldest waiting row moves in (the field turns false): an `updated` event, so `@notify on:updated` or `@hook on:updated field:<this field>` tells the owner. The forms never ask for it and never set it; filter a list of who is in with `@filter <field> eq false`.
-
opensstring - When the collection's @forms start taking rows: 2026-12-01 or "2026-12-01 09:00", on the space owner's clock (Settings → Preferences, else UTC), or with an offset (2026-12-01T09:00-03:00). Before it the form says when it opens, and a row sent is refused.
-
closesstring - When the collection's @forms stop taking rows, written as opens: is; a date alone closes at the end of that day. After it the form says it closed, and a row sent, or an edit of one through `own:true`, is refused.
-
uniquestring - Fields no two rows may share the values of: `unique:"atividade,atleta"` keeps one kudos per person per activity. 1 to 3 stored fields of type text, select, email, url, number, date, datetime, reference, boolean. A second row with the same values is refused, saying which fields, at every door: a form (in the form's own words with `duplicate:"…"` on the @form), the Collections screen, a board, a sheet's paste, upsert_records, update_records, and a row brought back from the trash; an upsert_records whose unique_by is these fields updates the row it finds. An empty value is a value: two rows that leave a field of the key empty share it (mark the field required to keep it filled). A row waiting for approval holds its key; a row in the trash holds none. Two sends of the same key at the same moment: one row goes in. Declared over rows that already share a key, the schema is refused whole, with how many keys and one of them. It refuses the second row and nothing more: nothing on a page takes the first away (the Collections screen and delete_records do). The refusal tells the sender that a row with those values exists, even one they may not read: keep unique: off a field a stranger can try values of on a public form (an e-mail would say who is registered); a key that names the sender (`atleta from:viewer.username`) tells them only about their own rows.
-
calendarstring - A date or datetime field that puts every row on the calendar of the space's own people who may read the collection: their calendar feed (Settings → Preferences) shows each row on its date, with their @remind lines as alarms. The field is indexed as if it said `indexed`. Only the space's owner applies it.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. One field per line: `name type [required] [indexed] [private] [label:"…"]`. `private` keeps the field's values from every reader who does not write the collection, even on a public one: not drawn in @data (no column), not in records, grep, the export or the calendar, never a filter, sort, group or count for them, and every computed field made from it answers nothing to them; an @form still asks it (`email email required private`). The types: text, long_text, number, boolean, date, datetime, email, url, select, multi_select, tags, file, files, reference, computed. A type may carry its argument: `select:a,b` (an option with spaces in quotes: `select:"in progress",passed`), `reference:outra` (the row's id; `reference:atividades by:codigo` holds the value of that field of the target instead, a text, number, sequence or e-mail field best `indexed` there: every rollup, lookup, include, @column and form select follows it by that field, a key two rows share names the oldest, a form refuses a key no row the sender may read holds, a text field holding the codes becomes one with its rows as they are, and a reference by id holding ids cannot change its `by:`), `computed:sum(outra.valor)` (count, sum, avg, min or max; sum and avg take a number, min and max a number, a date or a datetime and answer in its type: `computed:min(tasks.due)` is a project's earliest due date), or a formula in double quotes over the fields of the same row, other computed fields included: `sobra computed:"limite_mensal - gasto"`, `margem computed:"lucro / preco"`, `situacao computed:"if(uso >= 0.8, \"atenção\", \"ok\")"`, `faltam computed:"days(entrega - today())"`, `media computed:"round((p1 + p2 * 2 + trabalho) / 4, 1)"` (numbers with a dot; if, round, min, max, abs, coalesce, days, today, current_month, current_year, month, year, weekday, concat, share, running, rank; manual computed). Indexed date/datetime fields do not accelerate temporal comparisons. `default:<value>` is what a new row takes when it arrives without the field or with it empty, at every door (a form, the screen, upsert_records): a value the type can hold, one of a select's options (`status select:open,closed default:open`; not on computed, file, files, reference, multi_select or tags). `doors:` names the only doors that may set or change the field (form, board, calendar, checklist, field, sheet, bulk, screen, mcp, import, group, feedback, system, addon, action, api): `state select:todo,done doors:board,field,screen` refuses an upsert_records (mcp) that sets or changes state, naming the field, and lets one that leaves it alone through. `sequence` numbers the rows as they are added, a number the server writes: `numero sequence by:sigla` gives the rows whose sigla is ADV 1, 2, 3 and the first of COM 1 (without `by:`, one count for the collection); a row sent with a number keeps it and the count goes on after it, a number is never given twice, two rows added at once never share one, and a deleted row leaves a gap. A row whose `by:` value changes takes the new value's next number, as an issue tracker gives a moved issue a new key: ADV-12 moved to COM is the next COM, and the 12 it leaves is not given again; a change that sends a number of its own keeps it (the number the row already held, sent back with the move, is not one). The number is stored whole: the key reads ADV-12, never ADV-12.0. A formula joins it into a key (`chave computed:"concat(sigla, \"-\", numero)"`) a route's `find_by:` or a @filter finds the row by. No default, never required. `accept:` on a file field names what an @form takes for it (image, document, gpx; a picture when left out): `curriculo file accept:document` takes a PDF or a Word document (DOCX), `anexo file accept:image,document` either; the file's bytes decide, never its name, up to 10 MB, and a document is handed to readers as a download. A `files` field holds several files a row (at most 20), each what its `accept:` names: `anexos files accept:image,document`. A writer adds them in place in a `@data view:field` — a drop zone, where flows' staff try it: drop, paste or pick, each file checked by its bytes and up to the space owner's plan's file size (never past 25 MB) — and takes them out there; a form does not write one, and `@column anexos format:file` lists them, a thumbnail for a picture. It holds only files sent to it: upsert_records, update_records and an import may reorder them or leave some out (a file left out is deleted with its bytes), never write one in — a link belongs in a url field. `accept:gpx` takes a GPS track a watch or a phone exported (a GPX file that reads; one with a DOCTYPE, past 200000 points or with no track is refused), handed to readers as a download, and `fills:` writes what it says into fields of the same row when the row is sent or its file changes through a @form: `arquivo file accept:gpx fills:"distancia_km=distance_km, duracao_min=duration_min, elevacao_m=elevation_gain_m, quando=started_at, percurso=track"` (field=source; the sources: distance_km (number), duration_min (number), duration_s (number), elevation_gain_m (number), started_at (datetime/date/text), track (long_text/text), points (number)). A value the person typed in the form wins, a source the file lacks (no times, no elevation) leaves its field alone, and the track is at most 300 points `lat,lng,ele`, the shape ```@track draws. Only a form fills: upsert_records and the sheet write values, never files. A `@hook` line POSTs the changes of the rows to a URL after they are saved, signed with the collection's secret: `@hook on:updated field:status to:Ready url:https://…`. `on:` created, updated, deleted, restored (all four when left out, created and updated when the line has a `field:`), approved (only when named); `field:` only when that field changed; `from:`/`to:` what it changed from/to, a value the field's type can hold; `source:` only through these doors (form, board, calendar, checklist, field, sheet, bulk, screen, mcp, import, group, feedback, system, addon, action, api); `url:` https, a public host, port 443, 80 or 1024 and up. On a collection that holds rows for approval (`hold:anyone`), an event about a row still waiting carries `held: true` — its `created` from a stranger's form, an `updated` when its sender edits it and it waits again, its `deleted` when a writer declines it — and a writer letting it in posts `approved`, with the row's values as `changes` ({field: [null, value]}) and no `held`. A receiver that must act only on rows let in hears `on:created,approved` and skips the events with `held: true`: the same row comes as `created` (held) and then as `approved`. `when:"<condition>"` in place of `on:` POSTs a `crossed` event when a formula over the row turns true, once per crossing: `@hook when:"uso >= 0.8" url:https://…`. The condition and its checks are a `@notify when:`'s (manual @notify): a formula answering true or false, armed silently by its first check, checked when the row, or a collection one of its rollups reads, is written, and at the owner's midnight for the clock; `on:`, `field:`, `from:`, `to:` and `source:` beside it are refused, and a collection holds at most 10 `when:` lines, @notify and @hook together. Each event carries `crossing` (the condition, and the values of the names it reads that made it true) and `row` (the row's stored fields, as the schema has them); the delivery is any hook's: signed, retried, and paused after failures. While the hook is turned off its crossings are not posted, then or later: turned on again, it posts the next ones. Only the space's owner applies hooks and sees their secret and deliveries (Collections screen); whoever edits the page reads the @hook lines in its source, a reader never gets them. A `@remind` line reminds people of a date field of the rows: `@remind field:due before:1d,1h to:field:assignee`. `field:` a date or datetime field; `before:` 15m, 1h, 1d, 1w (comma-separated, days and weeks only on a date field); `at:HH:MM` a time on the recipient's clock (a date field without it fires at 09:00); `to:` owner (the default), field:<an e-mail or text field naming an account> or group:<a group with a role on the space>; `via:` email (the default, Pro), hook (the `reminder` event a `@hook on:reminder` line forwards) or calendar (only an alarm on the row in the calendar feed of each person `to:` names, on every plan; the collection needs `calendar:` on that field). Only the space's own people (its owner, a role on it they opened, a member of a group with a role on it) who may read the collection are reminded, at most 50 reminder e-mails a day each; a reader never gets the @remind lines. A `@notify` line tells the space's owner when rows arrive, a visitor's @form row included: `@notify on:created to:owner via:email`, or `@notify on:created to:owner via:push title:<field> body:<field> open:<page>`. `on:` created, updated (created when left out); `to:` owner, author only — `owner` (left out) the space's owner, `author` the signed-in person who created the row, each at their own account's e-mail or on their own devices, never an address from the line or a row; `via:` email, push (email when left out). `via:email`: the mail lists each row's fields (label: value, in the schema's order; a file by its name, a long text cut) and links to the collection's rows; on a collection that holds rows for approval (`hold:anyone`), a row waiting says so first and the link opens the rows that wait — `@notify on:created` is how the owner is told a row waits, and letting it in mails nothing more (a `@hook on:approved` hears it). Rows that arrive within 5 minutes of the first go in one mail (at most 20 drawn, the rest counted), and the owner gets at most their plan's notice e-mails a day (UTC); past it the day's mails are held, not sent, and the @schema block says how many. `via:push`: a notification on the apps and the browsers the owner turned on in Settings ▸ Notifications (nowhere turned on: nothing is sent, and no e-mail instead). `title:` and `body:` each name a stored field of the row whose value is the notification's title and body; left out, the collection's name and the row's first fields. `open:` is the page of the space the notification opens, its path under the space (`open:coach/today`, never an address); left out, the collection's rows. Only a `via:push` line or a `to:author` line takes them. `to:author` (a ticket resolved → the employee who opened it): each row's author is told of their own rows only, in their own mail or notification — a visitor's row has nobody to tell, and a row the owner created is the owner's own lines' — and told ONLY what the line names: the summary (received, changed, or the condition that turned true and the values of the names it reads), the `title:` and `body:` fields, a link to the `open:` page; never the rest of the row, which they read only through the tables and forms you opened (`@notify when:"solved = true" to:author title:subject open:help`). Told while they may read their own rows (the collection readable by them, or one that still takes their rows: closing the form stops it), at most 20 times a day per person per collection, held to your plan's numbers with your own mails, and never once they turned the space off in Settings ▸ Notifications. Rows that arrive within 1 minute of the first are one notification, counted, and the owner gets at most their plan's notifications a day (UTC), the rest held the same way. One event may have a line of each way; two lines of the same way may not hear the same event. While browser notifications are being opened, `via:push` is applied only for the accounts that have them. `when:"<condition>"` in place of `on:` tells when a formula over the row turns true, the row's computed fields, rollups and windows included: `@notify when:"uso >= 0.8"`, `@notify when:"gasto > limite_mensal" via:push`. The condition is written as a computed formula is (manual computed) and must answer true or false; one that does not compile, or answers anything else, is refused with the problem and where it is. `on:` with `when:` is refused: the crossing is the event. It tells once per crossing: a row that turns true (from false, or never checked) is told once, and again only after it went back to false and turned true again. The mail and the notification say the condition, the row and the values of the names it reads (uso: 0.85). It is checked when a row of the collection is written (that row), when a row of a collection one of its rollups reads is written (the whole collection, 1 minute after the first such write, and at most once every 5 minutes), and at the owner's midnight for conditions on the clock (today(), current_month()). A collection holds at most 10 `when:` lines. A condition that reads the whole collection (a window such as share(), or a rollup over the collection itself) is checked whole at every write, and so is not checked over 20000 rows: the @schema block says so; name a rollup of another collection instead. A line just applied tells nothing at first: its first check writes down the rows already true, silently (the @schema block says while it runs), and only later crossings are told. A check reads at most 5000 rows, the rest at the next minute; what crosses close together is one mail or one notification, held to the same daily number. A check that fails (a condition the schema no longer compiles, a read too slow) is shown in the @schema block with the reason, and tried again later. To stop, remove the @notify line and apply the schema (rows waiting then are dropped, and apply_schema says how many; a line changed, say on:created to on:created,updated, keeps them). Whoever may apply the schema (settings on the space) may add one; a reader never gets the @notify lines. An `@access` line makes each row read and written by the group one of its fields names (ADR 069): `@access by:time group:"time-{value}"`. `by:` a text or select field; `group:` the group's name with `{value}` where the row's value goes (`"{value}"` when the field holds the name). The groups that count are those granted on the space's root with the data (`share … group: data:true`, which only the space's owner gives); applying binds each value to its groups by identity and says which (a group renamed since counts for no value until the schema is applied again), and a team added later is bound by applying the schema again (the block says so). Then a row is read and written by the active members of its group, by the person who created it when the field is empty, and by the space's owner and co-owners; by nobody else, through any door: @data, records, grep, the export, the API, files, forms, reminders. It narrows who may read the collection, it never widens it. A writer sets only a value of their own groups (or none); upserts, imports and updates by filter are the owner's alone. Rollups and windows over such a collection are empty for the people whose rows are narrowed; a share link or a snapshot never shows its maker's rows. One line per schema; flows' staff for now. Reserved field names: the row's own (`id`, `extra`, `record`, `included`, `data`, `resolved`, `created_at`, `updated_at`, `created_by`, `initialize`) and the methods every row answers to (`abort`, `as_json`, `assign_attributes`, `at_exit`, `attribute`, `attribute_aliases`, `attribute_method_patterns`, `attribute_missing`, `attribute_names`, `attribute_writer_missing`, `attributes`, `autoload`, `binding`, `caller`, `caller_locations`, `catch`, `class`, `class_eval`, `clone`, `concern`, `context_for_validation`, `deep_dup`, `define_singleton_method`, `display`, `display_label`, `dup`, `enable_warnings`, `enum_for`, `errors`, `eval`, `exec`, `exit`, `extend`, `fail`, `fork`, `format`, `freeze`, `gem`, `gem_original_require`, `gets`, `global_variables`, `halted_callback_hook`, `hash`, `historical_scalar_value`, `init_internals`, `initialize_clone`, `initialize_copy`, `initialize_dup`, `inspect`, `instance_eval`, `instance_exec`, `instance_values`, `instance_variable_get`, `instance_variable_names`, `instance_variable_set`, `instance_variables`, `instance_variables_to_inspect`, `itself`, `lambda`, `load`, `local_variables`, `loop`, `matched_attribute_method`, `method`, `method_missing`, `methods`, `missing_attribute`, `model_name`, `no_warning_require`, `object_id`, `open`, `p`, `pp`, `presence`, `presence_in`, `pretty_inspect`, `pretty_print`, `pretty_print_cycle`, `pretty_print_inspect`, `pretty_print_instance_variables`, `print`, `printf`, `private_methods`, `proc`, `protected_methods`, `public_method`, `public_methods`, `public_send`, `putc`, `puts`, `raise`, `raise_validation_error`, `rand`, `raw_field_value`, `read_attribute_for_validation`, `readline`, `readlines`, `remove_instance_variable`, `require`, `require_dependency`, `require_relative`, `require_without_bootsnap`, `run_callbacks`, `sanitize_for_mass_assignment`, `sanitize_forbidden_attributes`, `select`, `send`, `set_trace_func`, `silence_warnings`, `singleton_class`, `singleton_method`, `singleton_method_added`, `singleton_method_removed`, `singleton_method_undefined`, `singleton_methods`, `sleep`, `slice`, `spawn`, `sprintf`, `srand`, `suppress`, `syscall`, `system`, `tap`, `test`, `then`, `throw`, `to_enum`, `to_json`, `to_key`, `to_model`, `to_param`, `to_partial_path`, `to_query`, `to_s`, `to_yaml`, `trace_var`, `trap`, `try`, `untrace_var`, `validate`, `validates_absence_of`, `validates_acceptance_of`, `validates_comparison_of`, `validates_confirmation_of`, `validates_exclusion_of`, `validates_format_of`, `validates_inclusion_of`, `validates_length_of`, `validates_numericality_of`, `validates_presence_of`, `validates_size_of`, `validates_with`, `validation_context`, `values_at`, `warn`, `with`, `with_options`, `with_warnings`, `yield_self`, `zeitwerk_original_require`). A hyphen reads as an underscore, so `created-at` is reserved too.
Filhos aceitos
@hook, @remind, @notify, @access
@search
renderiza: servidor
A search box for the site's readers: the pages under a folder that hold every word typed, newest first, each with its title and the line where the word is. Only pages the reader may open are listed. A plain form, so it works without a script and on the space's own host.
Renderizado no servidor.
Exemplo
```@search from:~/site placeholder:"Search the site"
```
Argumentos
-
fromstring - The folder searched, in this page's own space: its path (/@you/site), or relative like a link — ./ this page, ~/site in the space. Another space's folder is refused. Without it, the pages under the page the block is on, and the page itself.
-
limitinteger Padrão: 10 - How many pages at most (1–30). Defaults to 10. Valores aceitos: de 1 a 30
-
placeholderstring - The words inside the empty box. Defaults to Search.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@secret
renderiza: servidor
An API key, a token or a password kept beside the page, encrypted: the page shows it masked, and only the people who edit the page reveal, copy or set it. The value is never in the page's text, and no tool reads it: a person sets it with the block's Set value button, in the editor, or moves a key already typed on the page into it with `secret_from_text`; `read`, `search` and the assistant see its name and options, never the value.
Renderizado no servidor.
Exemplo
```@secret name:anthropic-main label:"Anthropic (main)" show_start:12 show_end:4
```
Argumentos
-
namestring Obrigatório - The secret's name on this page (lowercase letters, digits, - and _, up to 48): anthropic-main. Never the value — that is set with the block's Set value button, in the editor, or moved from the page's text with `secret_from_text`.
-
labelstring - What the secret is, printed above it.
-
notestring - One line under it: where it is used, when it expires.
-
show_startinteger Padrão: 0 - How many characters of the start are shown in the mask (sk-ant-oat01): never more than a third of the value. Valores aceitos: de 0 a 24
-
show_endinteger Padrão: 4 - How many characters of the end are shown in the mask: never more than a third of the value, with the start. Valores aceitos: de 0 a 8
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@themes
renderiza: servidor
The starting themes: every whole look an author can begin from, drawn in its own colours, with its theme fence to copy.
Renderizado no servidor.
Exemplo
```@themes
```
Argumentos
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@timer
renderiza: servidor
A timer the reader starts with a click, pauses and stops: a stopwatch, or a pomodoro that counts down and ends by itself. On stop it writes one row (the task, when it started, the minutes) into a collection, like a @form. A focus session, a workout, an exam, a meeting.
Renderizado no servidor.
Exemplo
```@timer collection:sessoes mode:pomodoro minutes:25 break:5
```
The collection it writes into, declared once:
```@schema collection:sessoes accepts:members
task text
started datetime
minutes number
```
A stopwatch on a fixed task, into fields named otherwise:
```@timer collection:treinos task:"Corrida" fields:atividade,inicio,minutos
```
Only a clock, nothing kept:
```@timer mode:pomodoro minutes:50
```
Argumentos
-
collectionstring - The collection the row goes into, as a @form names it. It takes the row from whoever may send a @form into it (its accepts:). Without it the timer only counts and nothing is kept.
-
modeenum Padrão: stopwatch - stopwatch counts up until Complete; pomodoro counts minutes: down and ends by itself, writing the row then. Valores aceitos: stopwatch, pomodoro
-
minutesinteger - A pomodoro's length in minutes (default 25). Only with mode:pomodoro. Valores aceitos: de 1 a 240
-
breakinteger - A pomodoro's break in minutes, counted down after it ends (nothing is written for a break). Only with mode:pomodoro. Valores aceitos: de 1 a 60
-
taskstring - What the session is for, written into the row's task field. Without it the reader types it in a box above the clock.
-
fieldslist - The collection's fields the row fills, comma separated, in this order: the task (text), the moment it started (datetime), the minutes (number). Defaults to task,started,minutes.
-
scopeenum - viewer: only a signed-in reader may keep a session, and the row is attributed to them (`@data scope:viewer` then lists each person's own). Valores aceitos: viewer
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@tokens
renderiza: servidor
A theme's tokens, drawn: its colours as swatches with their codes, and its typefaces as a sample — the preview of a design system kept in a page.
Renderizado no servidor.
Exemplo
```@tokens from:/@ana/design
```
Argumentos
-
frompath - The page whose theme is drawn: a path of this site (/@ana/design). Without it, the page the block is on.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@track
renderiza: servidor
Draws one row's GPS track as a line: the route of a run, a ride, a hike, a delivery. The row keeps the track in a text field as `lat,lng` pairs (an optional third value is the elevation in metres) separated by spaces, new lines or `;`, or as a JSON array of [lat, lng] / [lat, lng, ele]. Drawn by the server as a picture of the line alone, with a round mark at its start and a square one at its end: no map under it, and nothing loads from any map service. Under it, the distance worked out from the points, and the elevation gain when the points carry elevation. A field that holds no track, or no row, shows the empty: words. It reads the collection as a @data does: a reader the rows are closed to sees "Private data."
Renderizado no servidor.
Exemplo
```@track collection:atividades field:percurso
@filter codigo eq params.codigo
```
The collection, declared once:
```@schema collection:atividades
codigo text
quando datetime
percurso long_text
```
The latest activity, tall, with no numbers under it:
```@track collection:atividades field:percurso sort:-quando height:tall stats:false
```
Argumentos
-
collectionstring Obrigatório - The name of the collection inside this space: lowercase letters, digits and hyphens, 2 to 40 characters (coord-agents, never coord_agents — field names take underscores, collection names do not). Under a template's use, the bare name is the use's own collection; @space/name (this page's space) is always the space's own, shared.
-
fieldstring Obrigatório - The text or long_text field of the collection that holds the track.
-
sortstring - The order the row is taken in when the filters leave more than one: a field, a leading minus reverses it (`-quando` for the latest activity). The first row is the one drawn.
-
heightenum Padrão: medium - The shape of the drawing: short (a strip), medium or tall. It takes the width it is given and keeps the track's proportions inside. Valores aceitos: short, medium, tall
-
statsboolean Padrão: true - The distance, and the elevation gain when the points carry elevation, under the drawing. stats:false draws the track alone; its description to a screen reader still says the distance.
-
emptystring - What to say when there is no row, or the field holds no track.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Uma instrução por linha. Optional `@filter field op value` lines, exactly as a @data takes them (`manual @data`): they select the row. A value may be read from the page, so one layout draws every activity's track: `@filter codigo eq params.codigo` (what a ```route's address gave), `row.<field>` (the row the route found), `page.slug`. Every line must hold; the first row left, in sort:, is drawn.
Filhos aceitos
@filter
@use
renderiza: servidor
A component of the theme this page wears (the theme's screen lists them, with when to use each and its slots), filled with this page's words.
Renderizado no servidor.
Exemplo
```@use cartao-de-curso
titulo: Torno para iniciantes
data: Sáb · 14 jun
```
Argumentos
-
namestring Obrigatório - The component's name, as its theme lists it: `cartao-de-curso`. Written alone after @use.
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Texto livre. One slot per line, `slot: words`; a list, one line per entry, its fields in the component's order: `etapas: Pedido criado | done | 10 mar`. A link or a picture slot takes an address (/…, https://…); a slot the component types takes what it says: a number, a date written YYYY-MM-DD, one of its choices, or (inline) **bold**, *italics* and ~~struck~~ in its words.
@video
renderiza: servidor
A video player over a file uploaded to this site, or over a video file at an https address of another host (.mp4, .webm, .m3u8), which the page does not request until the reader presses play. Controls on, nothing autoplays.
Renderizado no servidor.
Exemplo
```@video src:/f/k3Fq9ZrX2mB7vT1wLp8sYa/demo.mp4 title:"Como aplicar o esquema"
```
Argumentos
-
srcstring Obrigatório - Path of the file on this site, usually an upload of the page (starts with a single / — "//host/x" is another site, not a path); or an https address of a video file on another host, ending in .mp4, .webm or .m3u8 (a stream), drawn with this site's poster or a plain surface and a play button, nothing of that host requested until the reader presses it. In the layout a ```route draws its rows with, a field of the row: src:row.video; in a theme component, a slot: src:{{video}}. A row with no address leaves the block out. A video on YouTube, Vimeo, Google Drive, Loom, Wistia or Facebook is an ```@embed … play:here.
-
titlestring - A short title shown under the player.
-
preloadenum Padrão: metadata - How much the browser fetches before play: none, metadata or auto. Valores aceitos: none, metadata, auto
-
posterpath - Path of an image shown before play. Starts with a single / — "//host/x" is another site, not a path.
-
modeenum Padrão: player - player shows controls and never autoplays; background plays muted, looped and without controls, for the ground of a :::hero or a looping thumbnail in a column (paused when the reader asks for reduced motion). A file of this site only: a video of another host plays only on the reader's press. Valores aceitos: player, background
-
ratioenum Padrão: auto - The shape the video is cut to, the shapes a :::cover takes (16/9, 4/3, 1/1, 9/16…), the picture filling it and cropped at its edges; auto (the default) is the file's own shape. With mode:background as the ground of a band, the band's shape: the ground fills it. Valores aceitos: 16/9, 16/10, 3/2, 4/3, 5/4, 1/1, 4/5, 3/4, 2/3, 9/16, 2/1, 21/9, auto
-
widthinteger - How wide the video is in px (16 to 600; width:200 with ratio:16/9 is a 200x112 thumbnail), never wider than its column. Left out, it fills the column. With mode:background as the ground of a band, it fills the band instead. Valores aceitos: de 16 a 600
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@whatsapp
renderiza: servidor
The round WhatsApp button in a site's corner: one tap opens the conversation with the message already written.
Renderizado no servidor.
Exemplo
```@whatsapp number:"+55 21 95550-0134" message:"Olá! Vi o site e quero mais informações."
```
Argumentos
-
numberstring Obrigatório - The WhatsApp number, with the country code: "+55 21 98519-2305".
-
messagestring - What the conversation starts with, already written for the person.
-
labelstring - What a screen reader says, and the hint on hover. Defaults to "Talk on WhatsApp" in the page's language.
-
positionenum Padrão: corner - corner: on a site, fixed in the bottom corner while the page scrolls. inline: where it is written. Valores aceitos: corner, inline
-
members_ofstring - A group, by name or id: only its members (and whoever edits the page) see this block; everybody else sees a line saying so, with the group's door. Nothing of the block reaches them — not on the page, not in its Markdown, not through the MCP, the search or their calendar feed (an @event is on its members' and editors' feeds only).
-
consentstring - A flag the reader must have allowed before this block shows (`consent:videos`; several, separated by spaces). It has to be one a `@consent` on this site offers.
Corpo
Este componente não tem corpo.
@chart
renderiza: navegador
Também escrito ```chart
A chart or a table, drawn from CSV: bars, stacked bars, a line, an area, a pie, a donut, a scatter or bubble plot, a heatmap, a waterfall. A reader can point at a value and hide a series.
Renderizado no navegador.
Exemplo
```@chart type:line
title: Pages published
markers: Feb=Launch
---
month,pages
Jan,3
Feb,7
```
Argumentos
-
typeenum Padrão: bar - Which drawing. `stacked` piles the series of a bar chart; `pie` and `donut` read the first series, one slice per row. `scatter` reads x and y from the first two number columns and sizes a bubble by an optional third; `heatmap` fills a cell per row and column by its value and prints it; `waterfall` reads one column: the first row is the start total, the last the end total (blank to compute it), the rows between are signed contributions. Valores aceitos: bar, stacked, line, area, pie, donut, scatter, heatmap, waterfall, table
-
titletitulostring - Printed above the chart.
-
markersmarcosstring - Moments on the category axis, as category=label pairs separated by semicolons: `markers: Jun=Launch; Aug=New price`. Each is a dashed line with its label, outside the series and the legend, and said in words under the chart. A pair naming no category of the data is left out.
-
lookenum - `editorial`: the chart on diagram-design's fixed 1000 px sheet, its reference geometry for the type (axes, bar widths, label positions), in the page's colours; the sheet scales down on a phone. `spark`: a dashboard tile's chart, the marks alone at the tile's width — no axes, grid, legend, value labels or title, bars with 6px rounded tops, a line edge to edge (an area fading under it), only the focal point marked; the numbers stay a table for a screen reader (bar, stacked, line and area; the others keep `page`). `page` (the default): the chart laid out at the page's width. Valores aceitos: page, editorial, spark
-
focalfocostring - The one item drawn in the page's accent, the rest in the series palette, the way diagram-design marks one element: a row (`focal: S5`), a series (`focal: plates`), `last` for the last row when none is called that (today's bar), or in a heatmap a `row,column` cell (`focal: payments,S4`). Exactly one; a second name after a comma is refused, and so is a name the data has not. The legend and the table mark it with ★, so the hue is never the only sign.
-
bandsfaixasstring - Zones of the value axis drawn as tinted bands behind the marks, each named at its right edge and in words under the chart, as from-to=label pairs separated by commas or semicolons: `bands: "60-100=On track,40-60=Adjust,0-40=Off track"`. The axis stretches to show every band. `colors:` may name a band (`On track=#36884d`); one it does not name is a faint tint of the text. On bar, stacked, line and area charts; a band that is not two numbers and a label is refused.
-
colorscoresstring - A colour of its own for a series, or in a pie or a donut for a slice (a row), or a band of `bands:`, as name=#hex pairs separated by commas or semicolons: `colors: "Energizing=#36884d,Neutral=#8a8a8a,Draining=#de3c37"`. The others keep the page's series colours — the theme's `diagram_palette` (and `dark_diagram_palette`) when it sets one, else the chart's own. A pair naming nothing in the data is left out; a colour that is not #rgb or #rrggbb is refused. The legend's swatch takes the same colour, so name a hue a reader can tell from the others.
Corpo
CSV, ou o bloco inteiro em JSON. CSV: the first row names the columns, the first column labels the category axis. The whole body may be JSON instead.
@chat
renderiza: navegador
Também escrito ```chat
A conversation: one message per line, `who: text` with an optional ` @ time`. `me` (or `eu`) sits on the right.
Renderizado no navegador.
Exemplo
```@chat title:Suporte
ana: Oi, chegou?
me: Chegou sim @ 10:42
```
Argumentos
-
titletitulostring - The line above the thread.
Corpo
Uma mensagem por linha. One `who: text @ time` per line.
@checklist
renderiza: navegador
Também escrito ```checklist
A working checklist: it counts, it groups under ## headings, and it remembers — in the reader's own browser, never on the page. For ticks every reader shares and an agent can tick, use @data view:checklist over a collection (manual views).
Renderizado no navegador.
Exemplo
```@checklist title:"Antes do deploy"
## Testes
- [ ] Rodar a suite
- [x] Console limpo
```
Argumentos
-
titletitulostring - The line above the list.
Corpo
Itens, separados por uma linha ---. One item per line: `- [ ] something`, `- [x] done` (ticked until the reader changes it), or a plain `- something`, which is an unticked item; optional `## Section` headings. A body with no item is an error block, and `validate` says so.
@profile
renderiza: navegador
Também escrito ```profile
The head of a link page: avatar, name, bio and a row of social icons.
Renderizado no navegador.
Exemplo
```@profile
name: Nara
bio: A taste of everything
avatar: /demo/nara.svg
instagram: https://instagram.com
```
Argumentos
-
namestring Obrigatório - The name printed under the avatar.
-
biostring - One paragraph under the name.
-
avatarstring - An image URL, absolute or root-relative.
-
shapeenum Padrão: circle - The avatar's shape. Valores aceitos: circle, rounded
Corpo
Um link por linha. More `platform: url` lines.
@links
renderiza: navegador
Também escrito ```links
Full-width buttons, one per line. A `* ` prefix makes the featured one.
Renderizado no navegador.
Exemplo
```@links style:outline
* [Join](https://x.com/join)
[Streams](/streams) every Friday, 8pm
[Live taping](https://x.com/live) July 16 until:2030-07-16
[The mic I use](https://x.com/mic){sponsored}
```
Argumentos
-
styleenum - Overrides the theme's button style for this block. Valores aceitos: filled, outline, soft
-
shapeenum - Overrides the theme's button shape for this block. Valores aceitos: square, slight, rounded, pill
Corpo
Um link por linha. One `[Label](url)` per line; `` on the line adds a thumbnail; a bare text line is a section heading. Text after the link is a note under the label (`preferred · 20 min`). `from:2026-07-01` and `until:2026-07-16` after the link keep the button on the page only in that window, both days included: a dated link leaves by itself. `{sponsored}` right after the link, as in prose, marks a paid or affiliate button: a visible word and `rel="sponsored nofollow"`.
@reviews
renderiza: navegador
Também escrito ```reviews
A row of review cards, each with its stars.
Renderizado no navegador.
Exemplo
```@reviews title:"O que dizem"
★★★★★ Ana
Best bagels in town.
```
Argumentos
-
titletitulostring - The line above the row.
Corpo
Itens, separados por uma linha ---. One review per block, separated by a --- line: `★★★★☆ Name` or `4/5 Name`, then the text.
@faq
renderiza: navegador
Também escrito ```faq
Questions that open, one <details> each.
Renderizado no navegador.
Exemplo
```@faq
Do you ship?
Yes, worldwide.
---
Returns?
Within 30 days.
```
Argumentos
-
titletitulostring - The line above the questions.
Corpo
Itens, separados por uma linha ---. One question per block, separated by a --- line: the question line, then the answer.
@embed
renderiza: navegador
Também escrito ```embed
A card that names a provider and links out. Never a frame the reader did not ask for: the page loads no third party inside itself, and with play:here a video of YouTube, Vimeo, Google Drive, Loom, Wistia or Facebook is a poster and a button until the reader presses play, then the provider's player in a frame — never its script (ADR 013). In a theme component the address can be a slot (`video:{{link}} play:here`), and in the layout a ```route draws its rows with, a field of the row (`video:row.link play:here`): a row with no address leaves the block out. A video file at an https address is a ```@video src:https://….
Renderizado no navegador.
Exemplo
Argumentos
-
youtubestring - A YouTube URL.
-
spotifystring - A Spotify URL.
-
podcaststring - A podcast URL.
-
videostring - A video URL. With play:here it plays with whichever player reads it (YouTube, Vimeo, Google Drive, Loom, Wistia, Facebook), so a template can take a row's link without knowing whose it is; any other address stays a card.
-
calendaragendastring - Where somebody books a time with you: a Cal.com, Calendly or Google Calendar appointment URL.
-
musicmusicastring - A track, an album or a playlist, wherever it lives.
-
applemusicstring - An Apple Music URL.
-
soundcloudstring - A SoundCloud URL.
-
bandcampstring - A Bandcamp URL.
-
deezerstring - A Deezer URL.
-
tiktokstring - A TikTok video or profile URL.
-
instagramstring - An Instagram post or profile URL.
-
twitchstring - A Twitch channel URL.
-
vimeostring - A Vimeo URL.
-
drivestring - A video file shared from Google Drive (drive.google.com/file/d/…, or /open?id=…), shared with whoever reads the page.
-
loomstring - A Loom recording (loom.com/share/…).
-
wistiastring - A Wistia video (<account>.wistia.com/medias/…, or fast.wistia.net/embed/iframe/…).
-
facebookstring - A Facebook video or live (facebook.com/<page>/videos/…, facebook.com/watch/?v=…); a short fb.watch link stays a card.
-
mapstring - An address or a Google Maps URL.
-
mapsstring - The same as map.
-
titletitulostring - The card's first line.
-
notestring - The card's second line.
-
playenum - here: a video of YouTube, Vimeo, Google Drive, Loom, Wistia or Facebook (or video: any of their addresses) plays in the page, in a 16:9 frame — after the reader presses play, and not before: until then the page holds nothing of the provider, only the poster and a button. The player comes from the provider's privacy-friendly address where it has one (youtube-nocookie.com, Vimeo with dnt, Wistia with doNotTrack). An address a player does not read (a channel, a folder, a short link) and any other provider stay a card. Valores aceitos: here
-
loadenum - click: the provider's own page opens in this one when the reader presses its button, and not before — until then the page holds the card this site draws and nothing of the provider. A map (map: an address, or a Google Maps address that names the place) shows Google's map; a calendar (calendar: a booking page of HubSpot Meetings, Calendly, Cal.com or a Google Calendar appointment schedule) shows the booking, which the reader fills in there. A video plays as with play:here. Any other provider or address stays a card that links out. Valores aceitos: click
-
posterstring - With play:here, the picture shown until the reader presses play: a file of this site (/f/…), never the provider's own thumbnail, which would load the provider before the reader asked.
Corpo
Este componente não tem corpo. This block takes no body.
@diagram
renderiza: navegador
Também escrito ```diagram
A figure drawn from a list, in the editorial manner of diagram-design (cathrynlavery/diagram-design, MIT), each type on its reference geometry, in the page's colours and fonts, with one focal item in the accent: a layer stack, a pyramid or funnel, a loop, a timeline, nested rings, a process or data flow (lanes × steps), a story map, a security matrix, a service blueprint, an exploded view (isometric parts pulled apart), a high-level data stack, a medallion of tiers, a data-platform integration, an architecture delta (before and after, with a ledger of changes), an axonometric plan (a floor or a site seen from above), a tree (a hierarchy by indentation), an org chart (ownership, with callout strips), a dependency graph (ranks, fan-in, one cycle), a polar chart (one series on a dial), a gantt (tasks on weeks, in phases), a sankey (a quantity through three stages), a sequence (lifelines, activations, fragments), a swimlane (steps across team lanes), a flowchart (shapes carry type, labelled branches), a state machine (states, dots, curved returns), a quadrant (a 2×2 of dots) or a scenario matrix, a radar (series over axes), an ER model (entities, cardinality), a UML class diagram (compartments, typed arrows), a venn (sets meeting at one sweet spot), a treemap or marimekko (area as share), a fishbone (causes on bones, one root cause), a wardley map (value chain over evolution), a kanban (columns, WIP chips, card states), a user journey (stages, sentiment curve, pain), a database schema (tables, columns, foreign keys), and `figure`, a placed architecture (nodes on a grid, zones, routed connectors). Optional motion: the items enter one by one, with controls. A mermaid fence still draws any of these in mermaid's grammar (`look:editorial` gives it the same manner). The grammar of every type, with a live example each: /@docs/blocks/diagram; one example per diagram-design type: /@docs/showcase/diagram-design.
Renderizado no navegador.
Exemplo
```@diagram type:layers motion:step
title: AI app stack
top: Abstraction
bottom: Silicon
- UI surface · chat, editor, canvas {tag:L5}
- Agent harness · tools, memory, loop {focal tag:L4}
- Prompt layer · system, few-shot, caching {tag:L3}
- SDK / client · auth, retries, streaming {tag:L2}
- Model weights · opus, sonnet, haiku {tag:L1}
```
O que ele desenha
title: AI app stack
top: Abstraction
bottom: Silicon
- UI surface · chat, editor, canvas {tag:L5}
- Agent harness · tools, memory, loop {focal tag:L4}
- Prompt layer · system, few-shot, caching {tag:L3}
- SDK / client · auth, retries, streaming {tag:L2}
- Model weights · opus, sonnet, haiku {tag:L1}
Argumentos
-
typeenum Padrão: layers - Which figure. `layers`: full-width bands stacked top to bottom (a stack, the OSI model, a hierarchy of abstraction). `pyramid`: trapezoids narrowing to an apex, the first item at the top. `funnel`: the same, widest first. `loop`: a hub with 5–8 stations on a ring. `timeline`: events on a baseline at honest positions. `nested`: concentric rings, outer first. `process` and `data-flow`: lanes × steps with nodes, chips and arrows. `story-map`: a backbone of activities and slices of cards with a release cut. `dp-security-matrix`: roles × components with an access level per cell. `service-blueprint`: stages × layers with the line of visibility. Each one's lines are described at /@docs/blocks/diagram. Valores aceitos: layers, pyramid, funnel, loop, timeline, nested, process, data-flow, story-map, dp-security-matrix, service-blueprint, figure, exploded, high-level, medallion, dp-integration, architecture-delta, axonometric-plan, tree, org-chart, dependency, polar, gantt, sankey, sequence, swimlane, flowchart, state, quadrant, radar, quadrant-consultant, er, uml-class, venn, treemap, fishbone, wardley, kanban, journey, db-schema
-
motionenum Padrão: none - How the items enter. `none`: the complete figure. `step`: one by one, with previous, play, pause, next and replay, and the keyboard. `reveal`: plays by itself once, when the figure first comes into view, then stays complete (replay from the controls). Items without `step:N` enter in reading order. Without JavaScript, in print, or for a reader who asked for less motion, the complete figure shows. Valores aceitos: none, step, reveal
-
titletitulostring - The figure's name (its accessible title); a `# Heading` line in the body does the same.
-
captionlegendastring - An italic aside under the figure; a `> quote` line in the body does the same.
-
descstring - One sentence a screen reader gets instead of the drawing. Written from the items when absent.
-
topstring - What grows upward, printed on the left margin above the direction arrow (layers): `top: Abstraction`.
-
bottomstring - What sits at the bottom, printed under the direction arrow (layers): `bottom: Silicon`.
-
leftstring - A rotated axis label on the left margin (pyramid, funnel): `left: Rarer · fewer · compounds ↑`.
Corpo
Itens, separados por uma linha ---. One `- Name · sublabel {tags}` per line; a `---` line starts a new group where the type has groups. Tags in braces: `focal` (the one item in the accent), `step:N` (the motion step), `tag:L3` (the index tag), `side:~48/yr` (a note beside the item), `value:240` (a quantity: a funnel's widths follow it).
mermaid
renderiza: navegador
A diagram in mermaid's grammar, drawn by Pele (pele.run) unless the fence says `renderer:mermaid`: Pele lays a diagram out in well under a millisecond, adapts it to a phone and paints it in the page's theme. Mermaid draws what Pele does not (ZenUML; the `handDrawn` look; `themeCSS`). Either way the colours are the page's (theme keys diagram_*), unless the diagram names its own in mermaid's configuration (`%%{init: {"theme": "forest", "themeVariables": {…}}}%%`, or `config:` in its front matter), which both renderers follow. The one block with no @ spelling: a mermaid fence renders on GitHub, Obsidian, Notion and GitLab, which read the first word of the fence line and ignore the rest.
Renderizado no navegador.
Exemplo
Argumentos
-
rendererrenderizadorenum - Who draws it. `pele` (the default) is many times faster and follows the page's theme with no redraw; `mermaid` keeps mermaid's own drawing, for what only it does. A reader can compare a page both ways with `?diagrams=pele` or `?diagrams=mermaid` in the address. Valores aceitos: pele, mermaid
-
lookenum Padrão: page - `editorial`: the diagram in the manner of diagram-design — one accent on the node classed `focal`, the others in ink and muted by their class (`store`, `external`, `input`, `optional`, `security`, via `:::class` or `class A focal`), the name in sans 600 over a mono sublabel (`<br/>` splits them), edge labels in small mono capitals, and arrows in steps when the configuration says `%%{init: {"flowchart": {"curve": "stepAfter"}}}%%`. `page` (the default): mermaid's usual look in the page's colours. Valores aceitos: page, editorial
Corpo
Um diagrama, na gramática do mermaid. Mermaid source, in mermaid's own grammar, configuration included. With `look:editorial`, `# key: value` lines in the body set the sheet (`# unit:`, `# scale: 120 by 20`, `# legend: A; B {x:220}`, `# trend:`, `# source:`), and a `{x: y:}` tag on a row label pins its position; `look:page` ignores them.
Diretivas de seção
Linhas de ::: arrumam a página — faixas, colunas, grades, mídia — em volta de markdown comum. Cada argumento é uma escolha de uma lista, nunca CSS, e toda seção funciona do celular à tela ultra-wide, no tema claro e no escuro.
:::section
A band of the page: its width, its surface (or a picture under it, with a shade that keeps text readable) and the space around it. Everything inside flows top to bottom.
-
stickyPadrão: none - top holds the whole band at the top of the window while the page scrolls — a contact strip and a :::nav inside it stay together. Give the nav inside no sticky of its own. Valores aceitos: none, top
-
widthPadrão: normal - normal keeps the reading width (the theme's measure: with measure:none, the page's width), medium three quarters of the page width (a 3-column feature list or a centred quote card held narrower than the page, passare.com), wide uses the page width, full runs edge to edge. Valores aceitos: normal, medium, wide, full
-
surfacePadrão: default - The band's background, from the theme: soft (its surface colour), faint (a step lighter than soft, 40% of it on the background), alt (the theme's second ground, surface_alt: a grey band beside peach ones; not set, a neutral grey that follows neither the surface nor the accent), tint (a wash of its accent), accent (the accent itself), accent-2 and accent-3 (the brand's second and third colours, the theme's accent_2 and accent_3, drawn as the accent band is: a magenta and an orange card beside a green page; not set, the accent), inverse (the theme turned over: the text as the ground, or the theme's inverse_background when it names one, a white card on a page of grey-green words), fade (the surface colour at the top paling into the page's background at the bottom; set the theme's surface for its colour), gradient (the theme's gradient_from blending into gradient_to at gradient_angle, the first colour held flat over gradient_hold % of the band: fdl.co's navy stats band is gradient_from #1f3a60, gradient_to #627590, gradient_angle 163, gradient_hold 50; set them with set_theme, never in the page; not set, the accent deepening toward black), gradient-alt (a second one, gradient_alt_from/_to/_angle/_hold; not set, the surface into the alt ground). Text colours are chosen for contrast — on a fade or a gradient, against both ends and the way between — in light and dark schemes. Valores aceitos: default, soft, faint, alt, tint, accent, accent-2, accent-3, inverse, fade, gradient, gradient-alt
-
mediaPadrão: none - background lays the band's first picture (alone in its paragraph) under the whole band, behind the text, as a hero's: a photo band, a marble closing band. The band stays as tall as what it holds; the picture covers it, cropped to fit. Valores aceitos: none, background
-
shadePadrão: dark - Over a background picture: dark (light text) or light (dark text), strong enough for 4.5:1 on any photo. Under light the theme's heading and button colours stay where they read on the wash, and links read at 4.5:1 in both schemes. none lays no wash: the picture is drawn as it is and the text takes the band's surface colours, as without a picture (surface:accent writes on the accent's ink) — for a photo made to carry text, its own background the brand's colour; whether the text reads on it is yours to check. Valores aceitos: dark, light, none
-
focusPadrão: center - With media:background, which part of the picture stays in view where the band crops it (the same words as :::cover's focus): bottom keeps people standing at the foot of a photo whole at every width, top keeps a sky or a headline in the picture. Ignored with tile:. Valores aceitos: center, top, bottom, left, right
-
focus_xPadrão: auto - With media:background, the focal point across, in % of the picture from its left edge (focus_x:30 keeps a face a third of the way in), for a point focus:'s five words do not name. auto keeps focus:'s. With focus_y: the point both ways; either alone keeps focus:'s word, or the middle, for the other. Valores aceitos:
-
focus_yPadrão: auto - With media:background, the focal point down, in % of the picture from its top (focus_y:20 keeps a face in the upper fifth whole as the band grows wide and short). auto keeps focus:'s. Valores aceitos:
-
heightPadrão: auto - auto: as tall as what the band holds. media: with media:background, as tall as its picture at the band's width (the picture's own shape: a 1920x1280 photo makes a 960px band at 1440), never shorter than what it holds. The picture has to be one uploaded to the page (a /f/ address), whose size the site knows; another picture leaves the band as tall as what it holds, and so does the editor's preview. Valores aceitos: auto, media
-
phonePadrão: background - With media:background, what the picture does on a phone: background keeps it under the text; stack takes it out from under the text and draws it under what the band holds, edge to edge and down to the band's bottom edge, on the band's own surface — the text first, then the people in the photo — at the picture's own shape or phone_ratio's, cropped around focus:. Wider than a phone the picture is the background either way. Valores aceitos: background, stack
-
phone_ratioPadrão: auto - With phone:stack, the shape the picture is cropped to on a phone, around focus: (focus:bottom keeps the people at the foot of a photo): auto is the picture's own shape; a taller shape (4/5, 3/4) draws it larger, its sides cropped. Valores aceitos: auto, 16/9, 3/2, 4/3, 1/1, 4/5, 3/4
-
phone_fadePadrão: none - With phone:stack, how the picture under the text begins on a phone: none starts it at a line; soft fades its top third in from the band's own ground, so a photo whose top is a lighter or darker shade of the band's colour meets it without a step. The picture's colours are never read: the band's ground shows through the fade, whatever its surface. Valores aceitos: none, soft
-
headingPadrão: normal - How large this block's h1 and h2 are: small (0.85 times the level's own size: a title under the theme's h2), normal (the level's own size), large (1.2 times it) or larger (1.4 times it) — a step on whatever sizes the level, the theme's h1_size/h2_size or the band's own scale, so a quote set as a ## in a testimonial band comes out 40px beside 29px section titles (digfamily.co). A card inside keeps its own heading:. h3 and smaller are left as they are. Valores aceitos: small, normal, large, larger
-
h1Padrão: auto - This band's own size for its h1, in px on a wide screen (h1:120, a hero's title; h1:200, a club's), as the theme's h1_size is for the page: it shrinks the same way on a phone (to about 65%, never under 1.2 times the text around it), heading: multiplies it, and a card inside reads it. auto keeps the theme's h1_size, or the ladder. From 16 to 200, the theme's own ceiling. Valores aceitos:
-
h2Padrão: auto - This band's own size for its h2, in px on a wide screen (h2:36 for a book's title, h2:41 for a curator's beside 29px section titles elsewhere), shrinking on a phone as the theme's h2_size does; heading: multiplies it, a card inside reads it. auto keeps the theme's h2_size, or the ladder. Valores aceitos:
-
rulePadrão: line - How a `---` written in the block is drawn: line, across the column; short, a 60px bar 3px tall in the accent (as the block's links wear it), under a title — at the start, or in the middle when the block's text is centred (passare.com's support and demo pages). Still a thematic break: it is the --- you write where the bar goes. A line along a band's own top or bottom is the :::section's line:, not this. Valores aceitos: line, short
-
tilePadrão: none - With media:background, repeats the picture as a texture (a marble, paper, a pattern) instead of covering the band with it, each tile 160px (small), 320px (medium) or 640px (large) wide and never stretched; shade: keeps the text readable as on a photo. The editor's preview shows the picture covering the band; the page tiles it. Valores aceitos: none, small, medium, large
-
edge_topPadrão: none - The band's top edge as a shape instead of a straight line — wave, torn (paper), curve or slant — cut out of the band so the page shows through, like the bands of fdl.co (wave) and digfamily.co (torn). The band grows by the shape's height, so nothing inside is cut. Valores aceitos: none, wave, torn, curve, slant
-
edge_bottomPadrão: none - The band's bottom edge as a shape: wave, torn, curve or slant. Same as edge_top, at the bottom. Valores aceitos: none, wave, torn, curve, slant
-
edge_sizePadrão: medium - How fine the edge_top and edge_bottom shapes are. medium is the shape as it has always been drawn (up to 46px tall). small is a fine edge, up to 26px tall, and a small wave or torn edge repeats the shape across the band, so a tear has many small teeth — the fine paper tear of digfamily.co — and a wave becomes a ripple; large is up to 72px tall. A curve or a slant is only made lower or taller. Valores aceitos: small, medium, large
-
linePadrão: none - A hairline in the band's border colour along its top, its bottom or both edges, across the whole band: a footer band's 1px top border (livros.design). Not the `---` inside the band, which is rule:. Where edge_top or edge_bottom cuts a shape, that edge is the shape and draws no line. Valores aceitos: none, top, bottom, both
-
spacePadrão: 3 - Space above and below, a step of the theme's scale. Valores aceitos: 0, 1, 2, 3, 4, 5
-
space_topPadrão: auto - The space above in px (space_top:52), instead of space:'s step, to match a measured design to the pixel. auto keeps space:'s. Valores aceitos:
-
space_bottomPadrão: auto - The space below in px (space_bottom:31), instead of space:'s step. auto keeps space:'s. Valores aceitos:
-
phone_space_topPadrão: auto - The space above in px on a phone (phone_space_top:48), over space_top: and space: there: a measured design that sets its bands closer on a phone. auto keeps the space every screen gets. Valores aceitos:
-
phone_space_bottomPadrão: auto - The space below in px on a phone (phone_space_bottom:24), over space_bottom: and space: there. auto keeps the space every screen gets. Valores aceitos:
-
phone_orderPadrão: auto - Where the band stands on a phone (phone_order:1), without writing it twice: on a phone the page's bands with a number come in number order, after everything with none and before the footer; wider, the page's own order. To move a band up, number it and the ones it goes before (phone_order:1 on it, 2 and 3 on the next two). Only a band of the page itself, not one inside another block. A screen reader and the keyboard keep the written order, so keep it a reading order that makes sense both ways. Valores aceitos:
-
fontPadrão: inherit - The face of the band's own text: inherit, heading, ui (the theme's face for controls, font_ui) or a local stack — a broker's contact strip and breadcrumb are Poppins over Open Sans. Valores aceitos: inherit, heading, ui, system, serif, mono, arial
-
alignPadrão: left - Where text sits. narrow-center keeps it left on wide screens and centres it on a phone, where a stacked page reads better centred: a switch by screen width, not a narrow column (for that, measure:). Valores aceitos: left, center, narrow-center
-
measurePadrão: auto - How wide the band's paragraphs and lists run: auto (the theme's reading width), narrow (about 28 characters), medium (about 40: a lede of two lines under a wide headline, as passare.com's hero sets it) or wide (about 60). Under align:center the column stays centred. Headings keep the band's width, so a headline can run wider than the lede under it. Valores aceitos: auto, narrow, medium, wide
-
leadPadrão: normal - The band's opening paragraph — the first one right after its heading — set larger than the body as a lead: large (the large text step, 18px), larger (the step above it, 20px, as digfamily.co's and passare.com's intros). Only that paragraph; the rest keeps the body size. Valores aceitos: normal, large, larger
-
buttonsPadrão: default - Which pair of colours the band's buttons wear: default, the page's; alt, the theme's second button (button_alt_background and button_alt_foreground in set_theme), as a site draws a dark-green button on its beige heroes and coral ones elsewhere. Every button in the band follows (a line of buttons, a form's send, a bar's actions); the outlined second button keeps the band's ink. Without button_alt_background in the theme, alt changes nothing. accent-2 and accent-3 fill them with the brand's second or third colour (accent_2, accent_3 in set_theme), moved like the accent until it stands out and its label reads (set_theme says when), unless contrast: brand; without that colour in the theme the band keeps the page's buttons. Valores aceitos: default, alt, accent-2, accent-3
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::section width:wide surface:soft space:4 align:center
# Automate your routine
Everything between the lines is ordinary markdown.
:::
:::hero
The opening of a page: at least a given height, content centred — with its first or last thing pinned to the top or bottom edge if asked — optionally over a background image with a shade that keeps text readable.
-
heightPadrão: half - auto fits the content, half is half the window, screen fills it. media, with media:background, is as tall as the picture at the hero's width (its own shape: passare.com's 1920x1280 photo is 960px at 1440), never shorter than the content; the picture has to be uploaded to the page (a /f/ address), and the editor's preview shows the hero as tall as its content. Valores aceitos: auto, half, screen, media
-
mediaPadrão: none - background puts the first image inside the hero behind the text. Valores aceitos: none, background
-
shadePadrão: dark - Over a background image: dark (light text) or light (dark text), strong enough for 4.5:1 on any photo. none lays no wash: the picture is drawn as it is and the text takes the hero's surface colours, as without a picture (surface:accent writes on the accent's ink) — for a photo made to carry text, its own background the brand's colour; whether the text reads on it is yours to check. Valores aceitos: dark, light, none
-
focusPadrão: center - With media:background, which part of the picture stays in view where the band crops it (the same words as :::cover's focus): bottom keeps people standing at the foot of a photo whole at every width, top keeps a sky or a headline in the picture. Ignored with tile:. Valores aceitos: center, top, bottom, left, right
-
focus_xPadrão: auto - With media:background, the focal point across, in % of the picture from its left edge (focus_x:30 keeps a face a third of the way in), for a point focus:'s five words do not name. auto keeps focus:'s. With focus_y: the point both ways; either alone keeps focus:'s word, or the middle, for the other. Valores aceitos:
-
focus_yPadrão: auto - With media:background, the focal point down, in % of the picture from its top (focus_y:20 keeps a face in the upper fifth whole as the band grows wide and short). auto keeps focus:'s. Valores aceitos:
-
phonePadrão: background - With media:background, what the picture does on a phone: background keeps it under the text; stack takes it out from under the text and draws it under what the band holds, edge to edge and down to the band's bottom edge, on the band's own surface — the text first, then the people in the photo — at the picture's own shape or phone_ratio's, cropped around focus:. Wider than a phone the picture is the background either way. Valores aceitos: background, stack
-
phone_ratioPadrão: auto - With phone:stack, the shape the picture is cropped to on a phone, around focus: (focus:bottom keeps the people at the foot of a photo): auto is the picture's own shape; a taller shape (4/5, 3/4) draws it larger, its sides cropped. Valores aceitos: auto, 16/9, 3/2, 4/3, 1/1, 4/5, 3/4
-
phone_fadePadrão: none - With phone:stack, how the picture under the text begins on a phone: none starts it at a line; soft fades its top third in from the band's own ground, so a photo whose top is a lighter or darker shade of the band's colour meets it without a step. The picture's colours are never read: the band's ground shows through the fade, whatever its surface. Valores aceitos: none, soft
-
tilePadrão: none - With media:background, repeats the picture as a texture (a marble, paper, a pattern) instead of covering the hero with it, each tile 160px (small), 320px (medium) or 640px (large) wide and never stretched; shade: keeps the text readable as on a photo. The editor's preview shows the picture covering the hero; the page tiles it. Valores aceitos: none, small, medium, large
-
alignPadrão: center - Where the content sits. narrow-center is left on wide screens and centred on a phone: a switch by screen width, not a narrow column (for that, measure:). Valores aceitos: center, left, narrow-center
-
widthPadrão: wide - How wide the content may get: normal the reading width, medium three quarters of the page width, wide the page width, full edge to edge. Valores aceitos: normal, medium, wide, full
-
measurePadrão: auto - How wide the band's paragraphs and lists run: auto (the theme's reading width), narrow (about 28 characters), medium (about 40: a lede of two lines under a wide headline, as passare.com's hero sets it) or wide (about 60). Under align:center the column stays centred. Headings keep the band's width, so a headline can run wider than the lede under it. Valores aceitos: auto, narrow, medium, wide
-
rulePadrão: line - How a `---` written in the block is drawn: line, across the column; short, a 60px bar 3px tall in the accent (as the block's links wear it), under a title — at the start, or in the middle when the block's text is centred (passare.com's support and demo pages). Still a thematic break: it is the --- you write where the bar goes. A line along a band's own top or bottom is the :::section's line:, not this. Valores aceitos: line, short
-
surfacePadrão: default - The ground when there is no background image (see section surface). alt is the theme's second ground (surface_alt). accent-2 and accent-3 are the brand's second and third colours (accent_2, accent_3; not set, the accent). fade is the theme's surface colour at the top paling into the page's background at the bottom, the text chosen to read on both ends. gradient and gradient-alt are the two gradients the theme names (gradient_from, gradient_to, gradient_angle, gradient_hold, and the same with gradient_alt_), the text chosen to read on all of it. Valores aceitos: default, soft, alt, tint, accent, accent-2, accent-3, inverse, fade, gradient, gradient-alt
-
edge_topPadrão: none - The band's top edge as a shape instead of a straight line — wave, torn (paper), curve or slant — cut out of the band so the page shows through, like the bands of fdl.co (wave) and digfamily.co (torn). The band grows by the shape's height, so nothing inside is cut. Valores aceitos: none, wave, torn, curve, slant
-
edge_bottomPadrão: none - The band's bottom edge as a shape: wave, torn, curve or slant. Same as edge_top, at the bottom. Valores aceitos: none, wave, torn, curve, slant
-
edge_sizePadrão: medium - How fine the edge_top and edge_bottom shapes are. medium is the shape as it has always been drawn (up to 46px tall). small is a fine edge, up to 26px tall, and a small wave or torn edge repeats the shape across the band, so a tear has many small teeth — the fine paper tear of digfamily.co — and a wave becomes a ripple; large is up to 72px tall. A curve or a slant is only made lower or taller. Valores aceitos: small, medium, large
-
spacePadrão: 5 - The space above and below the content, a step of the theme's scale: 5, the default, is the largest (4 when pin: is set); 2 or 3 makes a compact hero, as digfamily.co's are. Valores aceitos: 0, 1, 2, 3, 4, 5
-
space_topPadrão: auto - The space above the content in px (space_top:65), instead of space:'s step, to match a measured design. auto keeps space:'s. Valores aceitos:
-
space_bottomPadrão: auto - The space below the content in px (space_bottom:65), instead of space:'s step. auto keeps space:'s. Valores aceitos:
-
phone_space_topPadrão: auto - The space above the content in px on a phone (phone_space_top:40), over space_top: and space: there. auto keeps the space every screen gets. Valores aceitos:
-
phone_space_bottomPadrão: auto - The space below the content in px on a phone, over space_bottom: and space: there. auto keeps the space every screen gets. Valores aceitos:
-
pinPadrão: none - Keeps the hero's first thing at its top edge (a logo, an eyebrow), its last at the bottom (a row of logos, a hint to scroll), or both, while the rest stays centred. It shows when the hero is taller than its content: height half or screen. Valores aceitos: none, first, last, both
-
h1Padrão: auto - This band's own size for its h1, in px on a wide screen (h1:120, a hero's title; h1:200, a club's), as the theme's h1_size is for the page: it shrinks the same way on a phone (to about 65%, never under 1.2 times the text around it), heading: multiplies it, and a card inside reads it. auto keeps the theme's h1_size, or the ladder. From 16 to 200, the theme's own ceiling. Valores aceitos:
-
h2Padrão: auto - This band's own size for its h2, in px on a wide screen (h2:36 for a book's title, h2:41 for a curator's beside 29px section titles elsewhere), shrinking on a phone as the theme's h2_size does; heading: multiplies it, a card inside reads it. auto keeps the theme's h2_size, or the ladder. Valores aceitos:
-
leadPadrão: normal - The band's opening paragraph — the first one right after its heading — set larger than the body as a lead: large (the large text step, 18px), larger (the step above it, 20px, as digfamily.co's and passare.com's intros). Only that paragraph; the rest keeps the body size. Valores aceitos: normal, large, larger
-
buttonsPadrão: default - Which pair of colours the band's buttons wear: default, the page's; alt, the theme's second button (button_alt_background and button_alt_foreground in set_theme), as a site draws a dark-green button on its beige heroes and coral ones elsewhere. Every button in the band follows (a line of buttons, a form's send, a bar's actions); the outlined second button keeps the band's ink. Without button_alt_background in the theme, alt changes nothing. accent-2 and accent-3 fill them with the brand's second or third colour (accent_2, accent_3 in set_theme), moved like the accent until it stands out and its label reads (set_theme says when), unless contrast: brand; without that colour in the theme the band keeps the page's buttons. Valores aceitos: default, alt, accent-2, accent-3
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::hero height:screen media:background shade:dark

# Work that runs itself
Automate the routine between your tools.
:::
:::split
Two parts side by side — text and media — that stack when there is not room for both. By ratio, the two share the width; with a rail, the first is a side column of a fixed width and the other takes the rest.
Os itens são separados por uma linha ---.
-
ratioPadrão: 1/2 - How much of the width the first part takes. Valores aceitos: 1/3, 1/2, 2/3
-
sidePadrão: left - Which part comes first on wide screens; on narrow ones the first item is always on top. Valores aceitos: left, right
-
alignPadrão: center - Vertical alignment of the two parts. Valores aceitos: start, center, end
-
spacePadrão: 3 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4, 5
-
narrowPadrão: stack - stack puts the parts one above the other when narrow; keep keeps them side by side. Valores aceitos: stack, keep
-
mediumPadrão: auto - stack puts the parts one above the other in the theme's medium layout too, as on a phone: wider than a phone and narrower than the theme's wide_from (a hero's cards under its title on a tablet, beside it from 1440). auto keeps them side by side when there is room. Without wide_from in the theme there is no medium layout and stack changes nothing. Valores aceitos: auto, stack
-
reversePadrão: none - narrow puts the second part on top when the parts stack, so a picture written after its text comes first on a phone. Valores aceitos: none, narrow
-
stickyPadrão: none - Which part stays in place while the other scrolls past it, as a portfolio's side column does. It only sticks while the parts are side by side, never when they stack. Valores aceitos: none, first, second
-
mediaPadrão: none - bleed: the second part (the picture) runs past the split to the page's edge on its side — the right, or the left with side:right — while the text keeps its column, as fdl.co's heroes set a photo from the middle of the page to the screen's edge. From a page 48rem wide, where the parts are always side by side; narrower they stack as usual. Wrap a hero's text and picture in a split to bleed the hero's picture. Valores aceitos: none, bleed
-
railPadrão: none - Makes the first part a side column of that width, in rem, and gives the other part everything else — a side menu, a portfolio's rail, a form beside a text. The side keeps its width on any screen instead of growing with it, and the parts stack when the other would get less than half. With a rail, ratio is not used. Valores aceitos: none, 12, 16, 20, 24
-
headingPadrão: normal - How large this block's h1 and h2 are: small (0.85 times the level's own size: a title under the theme's h2), normal (the level's own size), large (1.2 times it) or larger (1.4 times it) — a step on whatever sizes the level, the theme's h1_size/h2_size or the band's own scale, so a quote set as a ## in a testimonial band comes out 40px beside 29px section titles (digfamily.co). A card inside keeps its own heading:. h3 and smaller are left as they are. Valores aceitos: small, normal, large, larger
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::split ratio:1/2 side:right
## Text first
A paragraph that sits beside the picture.
---

:::
:::columns
Items side by side in equal columns, all stacking at once when the row gets too narrow.
Os itens são separados por uma linha ---.
-
thresholdPadrão: 40 - Below this width, in rem, the columns stack. Valores aceitos: 30, 40, 50, 60
-
limitPadrão: 4 - With more items than this, they stack whatever the width. Valores aceitos: 2, 3, 4, 5
-
alignPadrão: stretch - Vertical alignment of the columns. Valores aceitos: start, center, end, stretch
-
itemsPadrão: plain - card draws each item as a card; stat sets each item's heading as a large number (it counts up when motion is on); step numbers the items as a process. Valores aceitos: plain, card, stat, step
-
numberPadrão: default - With items:stat, the colour of the number: default is the heading colour, accent the theme's accent as text (moved until it reads on the ground it sits on, a band's included), muted its secondary text colour. Valores aceitos: default, accent, muted
-
captionPadrão: muted - With items:stat, the line after the number: muted (under it, in the secondary text colour), plain (under it, the body text as any paragraph) or above (over it, in the secondary text colour: an app dashboard's "Focused time" over "2h 31m"; a @data view:metric in the item puts its label over its number too). The item is written the same way, the figure first. Valores aceitos: muted, plain, above
-
sizePadrão: normal - With items:stat, how large the number is drawn, always in proportion to its column: normal (about 30-60px), large (38-72px), display (45-88px), for a site whose figures are the page's largest type. The top of each range needs a wide column: in a section of the default width, three columns draw large at about 53px; width:wide or fewer columns reach it. Valores aceitos: normal, large, display
-
unitPadrão: default - With items:stat, the unit after the figure, written in emphasis with a space before it (`## 24K *+*`, `## 60 *%*`): accent sets it apart in the theme's accent (as links wear it on that ground, moved until it reads), muted in the secondary text colour; either draws it upright, a little smaller than the figure. default leaves the emphasis as written, in the number's colour. Valores aceitos: default, accent, muted
-
markerPadrão: filled - With items:step, how each step's number is drawn: filled (a small disc in the button colour) or outline (a large ring, 3rem, a thin line in the accent with the number inside it in the accent, as a three-step process draws its circled numerals). Valores aceitos: filled, outline
-
spacePadrão: 3 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4, 5
-
icon_sizePadrão: small - How large an item's feature icon is drawn: an `icon:` alone on the item's first line (`` `icon:truck` `` over a `### Title`). small is 28px, medium 36px, large 48px. Nothing else in the item changes. Valores aceitos: small, medium, large
-
icon_groundPadrão: none - A pale ground behind each item's feature icon, twice the icon's size: circle (a disc, as an icon row without cards draws it) or square (the theme's rounded corners). The ground is the theme's accent at a low strength over whatever is under it (on a band, the band's link colour), so it follows the theme in light and dark. none draws the icon bare. Valores aceitos: none, circle, square
-
icon_colorPadrão: accent - The colour of each item's feature icon: accent (the accent as links wear it on that ground) or foreground (the item's own text colour: dark on a light page, light on a dark one or on an accent band). Valores aceitos: accent, foreground
-
icon_placePadrão: top - Where each item's feature icon stands: top (over the item's words) or side (at the start of the item, the words beside it, the icon centred on them) — a row of facts under a hero or a stats band, each an outline icon beside two short lines. On a phone the icon stays beside its words. Valores aceitos: top, side
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::columns items:card
### Plan
Tell us what you need.
---
### Build
We build it with you.
---
### Launch
It goes live.
:::
:::grid
As many items per row as fit, each at least `min` wide; one per row on a phone. An item can span more columns or rows with :::cell.
Os itens são separados por uma linha ---.
-
minPadrão: 16 - The smallest an item may get, in rem, before the row wraps. Valores aceitos: 8, 10, 12, 14, 16, 18, 20, 24, 28
-
colsPadrão: auto - At most this many items per row, however wide the page gets. Six items with cols:3 come out as two rows of three instead of five and one alone; cols:5 holds a course site's five tracks on one row (min:12 or smaller lets them fit a laptop). A phone still gets one per row. Valores aceitos: auto, 2, 3, 4, 5
-
itemsPadrão: plain - card draws each item as a card; stat sets each item's heading as a large number (it counts up when motion is on); step numbers the items as a process. Valores aceitos: plain, card, stat, step
-
mediaPadrão: none - With items:card, background: each card's first picture (alone in its paragraph) is its ground, covering the card however tall the row makes it, with the card's own ground washed over it so its text reads — :::card media:background for every card of the grid (a row of quote panels on marble). Valores aceitos: none, background
-
numberPadrão: default - With items:stat, the colour of the number: default is the heading colour, accent the theme's accent as text (moved until it reads on the ground it sits on, a band's included), muted its secondary text colour. Valores aceitos: default, accent, muted
-
captionPadrão: muted - With items:stat, the line after the number: muted (under it, in the secondary text colour), plain (under it, the body text as any paragraph) or above (over it, in the secondary text colour: an app dashboard's "Focused time" over "2h 31m"; a @data view:metric in the item puts its label over its number too). The item is written the same way, the figure first. Valores aceitos: muted, plain, above
-
sizePadrão: normal - With items:stat, how large the number is drawn, always in proportion to its column: normal (about 30-60px), large (38-72px), display (45-88px), for a site whose figures are the page's largest type. The top of each range needs a wide column: in a section of the default width, three columns draw large at about 53px; width:wide or fewer columns reach it. Valores aceitos: normal, large, display
-
unitPadrão: default - With items:stat, the unit after the figure, written in emphasis with a space before it (`## 24K *+*`, `## 60 *%*`): accent sets it apart in the theme's accent (as links wear it on that ground, moved until it reads), muted in the secondary text colour; either draws it upright, a little smaller than the figure. default leaves the emphasis as written, in the number's colour. Valores aceitos: default, accent, muted
-
markerPadrão: filled - With items:step, how each step's number is drawn: filled (a small disc in the button colour) or outline (a large ring, 3rem, a thin line in the accent with the number inside it in the accent, as a three-step process draws its circled numerals). Valores aceitos: filled, outline
-
alignPadrão: stretch - Vertical alignment of items in a row. Valores aceitos: stretch, start, center
-
spacePadrão: 3 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4, 5
-
lastPadrão: start - Where an incomplete last row sits: start (the grid's own) or center (fdl.co's five benefits as three and two, the two in the middle), each cell as wide as a column of the rows above. Best with cols:; a :::cell span: is not kept in a centred grid. Valores aceitos: start, center
-
dividerPadrão: none - line draws a thin rule between the cells, in the band's border colour, and none around the grid: a row of five facts separated by hairlines. The cells take half the gap as padding. Valores aceitos: none, line
-
phonePadrão: stack - What the grid does on a phone: stack (the default) puts its items one under the other; scroll keeps them in one row that scrolls sideways, each item a little narrower than the screen so the next one peeks in, snapping to the row's start (a row of categories, the recent obituaries, five course tracks). Wider than a phone it is the grid it was. Nothing moves by itself: a finger, a trackpad, or the keyboard through the items' own links moves it, and a screen reader reads every item in order. With reduced motion the row never scrolls smoothly. Valores aceitos: stack, scroll
-
icon_sizePadrão: small - How large an item's feature icon is drawn: an `icon:` alone on the item's first line (`` `icon:truck` `` over a `### Title`). small is 28px, medium 36px, large 48px. Nothing else in the item changes. Valores aceitos: small, medium, large
-
icon_groundPadrão: none - A pale ground behind each item's feature icon, twice the icon's size: circle (a disc, as an icon row without cards draws it) or square (the theme's rounded corners). The ground is the theme's accent at a low strength over whatever is under it (on a band, the band's link colour), so it follows the theme in light and dark. none draws the icon bare. Valores aceitos: none, circle, square
-
icon_colorPadrão: accent - The colour of each item's feature icon: accent (the accent as links wear it on that ground) or foreground (the item's own text colour: dark on a light page, light on a dark one or on an accent band). Valores aceitos: accent, foreground
-
icon_placePadrão: top - Where each item's feature icon stands: top (over the item's words) or side (at the start of the item, the words beside it, the icon centred on them) — a row of facts under a hero or a stats band, each an outline icon beside two short lines. On a phone the icon stays beside its words. Valores aceitos: top, side
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
lightboxPadrão: off - on: each picture of the block opens full size over the page when clicked (Escape or a click outside closes it), with Previous and Next, the arrow keys and a swipe through the block's other pictures; only the picture shown is loaded. A picture that is already a link keeps its link. Without a script, a click opens the picture itself. Valores aceitos: off, on
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::grid min:16 items:card
### Fast
Pages render in milliseconds.
---
### Typed
Nothing you write becomes CSS.
:::
:::cell
Inside a grid item: how many columns and rows that item takes (bento layouts), and which layer it sits on. Inside a :::footer item, span: alone: the columns that item takes, or full for a row of its own.
-
spanPadrão: 1 - Columns the item takes; full takes the whole row. On a phone every item is one column (a footer's full row stays a row). Valores aceitos: 1, 2, 3, 4, full
-
rowsPadrão: 1 - Rows the item takes. Valores aceitos: 1, 2, 3
-
layerPadrão: 0 - Stacking order when items overlap (with offset). Valores aceitos: 0, 1, 2, 3
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::grid min:14
:::cell span:2 rows:2

:::
---
### Small tile
:::
:::card
A panel: a surface, padding, the theme's radius, an optional border and shadow.
-
tonePadrão: soft - The panel's surface, with contrast-checked text (see section surface). alt is the theme's second ground (surface_alt), as on a band; accent-2 and accent-3 the brand's second and third colours (accent_2, accent_3; not set, the accent). ok, warn, info and danger are a status: the panel takes a light wash of the colour a pill of that status wears, for a notice, a result or a warning. Valores aceitos: default, soft, alt, tint, accent, accent-2, accent-3, inverse, ok, warn, info, danger
-
mediaPadrão: inset - bleed: a frameless picture (`:::cover frame:none`) that opens the card runs to the card's edges, under the card's top corners, as a listing card shows its photo; the text keeps the card's padding. background: the card's first picture (alone in its paragraph) is its ground, covering the whole card however tall it grows (a marble quote panel beside a form), with the card's own ground washed over it so its text reads as on the plain card. Valores aceitos: inset, bleed, background
-
washPadrão: even - With media:background, how the card's own ground lies over its picture: even (the same veil all over) or start (solid at the start, where the words begin, thinning toward the end so the photo shows there — a dark-green subscription panel over a photo of a team). The end keeps enough of the ground for text there to read. Valores aceitos: even, start
-
borderPadrão: none - A hairline border: line all round; sides one rule at each side and none above or below, a quote set between two thin rules (digfamily.co). In the border colour of the band it sits on. Valores aceitos: none, line, sides
-
rulePadrão: line - How a `---` written in the block is drawn: line, across the column; short, a 60px bar 3px tall in the accent (as the block's links wear it), under a title — at the start, or in the middle when the block's text is centred (passare.com's support and demo pages). Still a thematic break: it is the --- you write where the bar goes. A line along a band's own top or bottom is the :::section's line:, not this. Valores aceitos: line, short
-
textPadrão: inherit - The size of the panel's own text, in px, whatever the page's body size: a site whose body is 12px writes its chips at 15 (text:15). Valores aceitos: inherit, 12, 13, 14, 15, 16, 18
-
fontPadrão: inherit - The face of the panel's own text: inherit (the page's body face), heading (the theme's heading face), ui (the theme's face for controls, font_ui) or a local stack that loads nothing (system, serif, mono, arial) — a broker's search chips are Arial on an Open Sans page. Valores aceitos: inherit, heading, ui, system, serif, mono, arial
-
alignPadrão: inherit - Where the panel's text sits: inherit (as the band around it: centred in a centred section), start (to the left whatever the band does, as a card's text stays in fdl.co's centred testimonials), center, or header (its heading, price and words centred and its lists at the start, as passare.com's launch-plan cards). Valores aceitos: inherit, start, center, header
-
headingPadrão: normal - How large the panel's own headings are: normal (the theme's), large (20px and bold, as a call-to-action tile's line is set) or larger (22px, a listing's count above its cards), whatever the theme's heading scale; display 1.65 times the size a band's h2 is drawn at (a quote card's 48px quote beside 29px section titles, fdl.co). Valores aceitos: normal, large, larger, display
-
heightPadrão: auto - How tall the panel stands at least, its content centred top to bottom: auto (as tall as what it holds), short (about 190px), medium (300px, a broker's call-to-action tile) or tall (400px). Valores aceitos: auto, short, medium, tall
-
radiusPadrão: auto - The panel's corners, in px, a step of the radius scale: auto keeps the theme's radius; 0 is square, 24 a site's rounded cards, 32 a newsletter card that is almost a pill. A picture run to its edges (media:bleed) rounds with it. Valores aceitos: auto, 0, 4, 8, 12, 16, 20, 24, 32
-
shadowPadrão: none - A shadow under the panel. Valores aceitos: none, soft, lifted
-
spacePadrão: 2 - Padding inside, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4
-
paddingPadrão: auto - The padding inside in px (padding:30), instead of space:'s step, to match a measured design. auto keeps space:'s. Valores aceitos:
-
offsetPadrão: 0 - Overlap a neighbour by a step of the scale, drawn over it: up-1 to up-3 pull the element up into the content above it; down-1 to down-3 let it hang past its own bottom over what follows — a split's picture overhanging the band below it, a card riding over the next band's top. It takes no room there: what follows moves up under it by the same step. down-* acts from a page 48rem wide; narrower, where everything is one column and what follows is full-width text, the element takes its own room. Valores aceitos: 0, up-1, up-2, up-3, down-1, down-2, down-3
-
tiltPadrão: none - A slight rotation, a few degrees. Valores aceitos: none, left, right
-
flowPadrão: auto - The space between one thing and the next inside it, a step of the theme's scale: one space for everything, whatever the things are. auto keeps each element's own margins, which is what prose wants — a heading further from the paragraph above it than from the one below. Valores aceitos: auto, 0, 1, 2, 3, 4, 5
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::card tone:accent shadow:lifted
### Founding plan
Everything, for the first hundred creators.
:::
:::table
A markdown table drawn as a comparison or a price list: one column filled, the plan columns a step deeper each. Write the table inside as usual; align:center centres the columns after the labels, and a picture in a cell (a logo in a header) is drawn in it at a line's height or two.
-
highlightPadrão: none - One column filled in the theme's inverse pair — its foreground as the ground, its background as the text — from the header to the last row: the offer a comparison argues for (fdl.co's FDL column, navy with white text, beside the local bank's). Valores aceitos: none, 2, 3, 4, 5, last
-
stepsPadrão: none - columns: each column after the first (the row labels) a step deeper into the theme's surface colour, as a price list shades its plans from the cheapest to the fullest. Valores aceitos: none, columns
-
alignPadrão: start - center: every column after the first (the row labels) centred, header included, as a comparison sets its yes and no under each plan. Valores aceitos: start, center
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
Exemplo
:::table highlight:last
| | Local bank | Ours |
|:--|:--:|:--:|
| Rate | Variable | Fixed |
| Approval | Weeks | Days |
:::
:::inline
Items in a line that wraps: buttons, tags, logos, small facts.
Os itens são separados por uma linha ---.
-
justifyPadrão: start - How the line is distributed. Valores aceitos: start, center, end, between
-
alignPadrão: center - Vertical alignment within a line. Valores aceitos: center, start, end
-
spacePadrão: 2 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4
-
space_topPadrão: auto - The room above the line in px (space_top:34), instead of the line's own margin, to match a measured design. Valores aceitos:
-
space_bottomPadrão: auto - The room under the line in px (space_bottom:46), instead of the line's own margin. Valores aceitos:
-
stickyPadrão: none - top keeps the line at the top of the screen while the page scrolls under it, below the app's header: a few buttons that change how the page is viewed (Pele / Mermaid, light / dark), with no bar behind them. Valores aceitos: none, top
-
phonePadrão: wrap - What the line does on a phone: wrap keeps its items side by side, wrapping when they do not fit; stack puts them one above the other, each as wide as the line, a button's words centred — a hero's two buttons as passare.com sets them on a phone; scroll keeps them on one line that scrolls sideways, each item its own width (a row of category pills, a site's tabs; it does not stop at each item, which would pull the one the keyboard reached out of view), reachable with the keyboard through their links and read in order by a screen reader. Wider than a phone the line is a line either way. Valores aceitos: wrap, stack, scroll
-
widePadrão: wrap - What the line does wider than a phone: wrap (the default) keeps its items side by side, wrapping when they do not fit; scroll keeps them on one line that scrolls sideways when they do not fit, each item its own width (a long row of category pills on a desktop), reachable with the keyboard through their links. On a phone, phone: decides. Valores aceitos: wrap, scroll
-
logosPadrão: none - A logo strip: every picture in the line at one height — small 24px, medium 32px, large 48px — linked or not, drawn whole, a wide wordmark held to five times its height, and, without space:, a wider gap. A linked picture with alt text ([](url)) is always the picture, never a button. Valores aceitos: none, small, medium, large
-
picturesPadrão: auto - The height of every picture in the line, in px (pictures:70), drawn whole at its own shape: a testimonial's 70px headshots, a row of 40px icons, a signature beside a portrait (pictures:240), a shelf of book spines (pictures:420) — every px to 240, then in steps of 20 to 600. natural draws each picture at its own size (never wider than the line), side by side and bottom-aligned, pictures in one paragraph too, wrapping when they do not fit: a bookshelf of covers of different heights. auto keeps a line's 36px, or logos:'s height; set with logos:, this one wins and the strip keeps its spacing. Valores aceitos:
-
logos_tonePadrão: original - Recolours every picture in the line: dark draws them black, for white-on-transparent logos on a light ground; light draws them white, for dark logos on an accent, inverse or photo ground; muted draws them grey and quieter, their shapes kept, as a site's 'in good company' row is drawn. original keeps their colours. In a reader's dark scheme dark and light swap, so the logos stay visible on the dark ground. Valores aceitos: original, dark, light, muted
-
itemsPadrão: plain - chip draws each item as a pill, 48px tall and fully rounded: its picture and its words on one line, centred, the words 15px at weight 500 in the chip's ink — a footer's "@willianmatiola" beside his portrait, a partner's logo and name. The picture is a 36px circle cut from the middle of the picture (pictures:<px> sets another size); with logos:small|medium|large it is a logo instead, drawn whole at that height and never cut. Write the picture inside the link ([ @willianmatiola](https://…)) or beside it ( [Partner](https://…)): an item whose paragraph holds one link is that link everywhere on the chip, ringed as a whole when the keyboard reaches it. The ground: the theme's surface on the page (the page's own ground on a soft, tint or alt band, as cards are), and on a dark ground — an accent or inverse band, a gradient, a photo under a dark shade — the band's ground darkened (black at 15%), its words in the band's ink. On a phone chips wrap as the line does (phone: still says otherwise). One kind of picture per line: portraits and logos are two lines. Valores aceitos: plain, chip
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::inline justify:center
[Start free](/signup)
---
[See pricing](/pricing)
:::
:::cover
Media cropped to a ratio, optionally in a device frame.
-
ratioPadrão: 16/9 - The shape the image or video is cropped to. auto keeps the picture's own shape, never cropped, at its own width — never stretched past its own pixels or past the column — and centred, as a blog shows its pictures; with size:, the size is the widest it gets (:::cover ratio:auto size:medium is a 1600px screenshot at 512px, a 300px picture at 300px). Valores aceitos: 16/9, 16/10, 3/2, 4/3, 5/4, 1/1, 4/5, 3/4, 2/3, 9/16, 2/1, 21/9, auto
-
focusPadrão: center - Which part of the media stays in view when it is cropped. Valores aceitos: center, top, bottom, left, right
-
focus_xPadrão: auto - The focal point across, in % of the media from its left edge, for a crop focus:'s five words do not name: focus_x:70 focus_y:30 keeps a face up and to the right whole in a 4/5 crop of a wide photo. auto keeps focus:'s; either alone keeps focus:'s word, or the middle, for the other. Valores aceitos:
-
focus_yPadrão: auto - The focal point down, in % of the media from its top (focus_y:25). auto keeps focus:'s. Valores aceitos:
-
fitPadrão: cover - cover fills the ratio's shape, cropping what does not fit (around focus:); contain draws the whole picture inside the shape, never cropped, on ground: where it leaves room — a product shot or a logo kept whole in a row of 4/3 tiles. Valores aceitos: cover, contain
-
framePadrão: rounded - none, rounded corners, a circle (avatars), a browser window or a phone around the media. Valores aceitos: none, rounded, circle, browser, phone
-
groundPadrão: none - A ground of the theme's under the picture, which shows wherever the picture is transparent: soft (the surface), tint (a wash of the accent), alt (the second ground), accent, accent-2 or accent-3 (the brand's second and third colours; not set, the accent). A portrait cut out of its background on a pastel circle is frame:circle ground:tint (passare.com's team). Valores aceitos: none, soft, tint, alt, accent, accent-2, accent-3
-
shadowPadrão: none - A shadow under the media. Valores aceitos: none, soft, lifted
-
shadePadrão: none - A dark wash over the media so what an overlay writes on it reads: bottom darkens the lower half (a price under a photo), top the upper half, dark the whole picture evenly. A plain overlay on a shaded cover writes in white. Valores aceitos: none, bottom, top, dark
-
sizePadrão: full - How wide the media is, never wider than its column: full fills it, half is half of it, medium up to 512px (a video poster beside text), compact up to 480px (a blog's featured picture), narrow up to 384px (a blog's picture inside a post, a phone screenshot), small 96px (a headshot in a byline; with frame:circle, round), icon 40px (a feature's icon, drawn whole, never cropped), or a width in px (size:300, a book's cover between small and narrow) — every px to 240, then in steps of 20 to 600, the scale pictures: takes. small and icon are square unless ratio: says otherwise; in a centred band or hero the media sits in the middle; with ratio:auto a number is the widest it gets, as a word is. Valores aceitos:
-
alignPadrão: auto - Where a cover narrower than its column (size:, or ratio:auto) sits: auto (centred directly in a centred section or hero, and with ratio:auto; at the start elsewhere), start (always at the start, even in a centred band), or center (always centred: a round headshot under a card in a grid or columns item of a centred section). Valores aceitos: auto, start, center
-
offsetPadrão: 0 - Overlap a neighbour by a step of the scale, drawn over it: up-1 to up-3 pull the element up into the content above it; down-1 to down-3 let it hang past its own bottom over what follows — a split's picture overhanging the band below it, a card riding over the next band's top. It takes no room there: what follows moves up under it by the same step. down-* acts from a page 48rem wide; narrower, where everything is one column and what follows is full-width text, the element takes its own room. Valores aceitos: 0, up-1, up-2, up-3, down-1, down-2, down-3
-
tiltPadrão: none - A slight rotation, a few degrees. Valores aceitos: none, left, right
-
lightboxPadrão: off - on: each picture of the block opens full size over the page when clicked (Escape or a click outside closes it), with Previous and Next, the arrow keys and a swipe through the block's other pictures; only the picture shown is loaded. A picture that is already a link keeps its link. Without a script, a click opens the picture itself. Valores aceitos: off, on
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::cover ratio:16/9 frame:browser shadow:lifted

:::
:::overlay
Content placed over its parent and kept inside it: a badge on a picture, or — with kind:plain — anything at all, a card over a photo, a caption, a play button.
-
atPadrão: center - Where on the parent it sits. Valores aceitos: center, top-left, top-right, bottom-left, bottom-right, bottom
-
kindPadrão: badge - badge draws it as a small pill, which is what a label on a picture wants. plain draws nothing of its own: whatever is inside — a card, a heading, a button — sits over the parent as it is, never larger than the parent, scrolling inside itself if it would be. tags: each paragraph a small capitalised tag on a dark ground, stacked down the corner, as a listing marks its photo (exclusive, for sale, available); a paragraph that is only a picture stays a picture, a favourite button above the tags. Valores aceitos: badge, plain, tags
-
tonePadrão: default - The colour of a badge or of the tags (kind:badge, kind:tags): default (a badge on the theme's surface, a tag on a dark wash), accent, or the brand's second or third colour (accent-2, accent-3: an orange "New" on a cover; not set, the accent), with the text picked to read on it. kind:plain draws no ground of its own and ignores it. Valores aceitos: default, accent, accent-2, accent-3
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::cover ratio:4/3

:::overlay at:top-right
**New**
:::
:::
:::box
A plain container with no look of its own: what it holds flows top to bottom, and nothing about it shows until a style dresses it (`style:<name>`, manual styles) — the ring of covers behind a card, a collage, a layer placed by hand. Without a style it is a group and nothing more.
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
Exemplo
:::box style:anel


:::
:::carousel
A horizontal strip of items that scrolls and snaps; no autoplay.
Os itens são separados por uma linha ---.
-
itemPadrão: normal - How wide each item is: about a quarter, a third or two thirds of the strip (wider on phones), or full: one item in view at a time, the strip's whole width (a testimonials slider). Valores aceitos: narrow, normal, wide, full
-
controlsPadrão: none - The way through for a mouse and a keyboard, under the strip: arrows (Previous and Next, a page of items each), dots (one per item, the current one filled; a dot goes to its item) or both. The arrow keys move one item while the focus is in the strip. With item:full it is a slider. They show only when the items do not all fit; none leaves the strip to be scrolled. Valores aceitos: none, arrows, dots, both
-
itemsPadrão: plain - card draws each item as a card. Valores aceitos: plain, card
-
spacePadrão: 3 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4
-
lightboxPadrão: off - on: each picture of the block opens full size over the page when clicked (Escape or a click outside closes it), with Previous and Next, the arrow keys and a swipe through the block's other pictures; only the picture shown is loaded. A picture that is already a link keeps its link. Without a script, a click opens the picture itself. Valores aceitos: off, on
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::carousel item:narrow items:card
"Best tool I adopted this year." — Ana
---
"It replaced three apps." — Bia
:::
:::masonry
Items of different heights packed into columns, like a photo wall. Reading order runs down each column.
Os itens são separados por uma linha ---.
-
minPadrão: 16 - The narrowest a column may get, in rem. Valores aceitos: 12, 14, 16, 18, 20, 24
-
itemsPadrão: plain - card draws each item as a card. Valores aceitos: plain, card
-
spacePadrão: 3 - The gap, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4
-
lightboxPadrão: off - on: each picture of the block opens full size over the page when clicked (Escape or a click outside closes it), with Previous and Next, the arrow keys and a swipe through the block's other pictures; only the picture shown is loaded. A picture that is already a link keeps its link. Without a script, a click opens the picture itself. Valores aceitos: off, on
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
motionPadrão: none - How it appears as the reader scrolls to it; items of a layout arrive one after another. Nothing moves for a reader who asks for reduced motion, and without JavaScript everything is simply there. Valores aceitos: none, fade, rise, scale
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::masonry min:14 items:card
"Short quote." — Ana
---
A longer testimonial that takes more lines than the others.
:::
:::marquee
A strip that scrolls by itself, for logos or short quotes. It pauses on hover and stands still for a reader who asks for reduced motion.
Os itens são separados por uma linha ---.
-
speedPadrão: normal - How fast the strip moves. Valores aceitos: slow, normal, fast
-
directionPadrão: left - Which way it moves. Valores aceitos: left, right
-
spacePadrão: 4 - The gap between items, a step of the theme's scale. Valores aceitos: 1, 2, 3, 4, 5
-
logosPadrão: none - A strip of logos at one height — small 24px, medium 32px, large 48px — each drawn whole, a wide wordmark held to five times its height. none keeps a line's 36px. Valores aceitos: none, small, medium, large
-
picturesPadrão: auto - The height of every picture in the strip, in px (pictures:60: fdl.co's strip of funeral homes), drawn whole at its own shape — every px to 240, then in steps of 20 to 600, the scale :::inline's pictures: takes; set with logos:, this one wins. Valores aceitos:
-
logos_tonePadrão: original - Recolours every picture in the line: dark draws them black, for white-on-transparent logos on a light ground; light draws them white, for dark logos on an accent, inverse or photo ground; muted draws them grey and quieter, their shapes kept, as a site's 'in good company' row is drawn. original keeps their colours. In a reader's dark scheme dark and light swap, so the logos stay visible on the dark ground. Valores aceitos: original, dark, light, muted
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::marquee speed:slow

---

---

:::
:::banner
A band pinned to an edge of the screen — a cookie notice, an announcement, a promotion — with anything inside. Without a script it is a band at the end of the page, where it was written; with one it floats, and can be closed.
Os itens são separados por uma linha ---.
-
positionPadrão: bottom - Where it sits once a script pins it: along the bottom edge, along the top, in the middle over the dimmed page (where the reader answers before going on), or as a card in the bottom corner. Bands on the bottom edge stack, never overlap: one with no close and no @consent (a call bar) holds the edge, and a cookie notice sits on top of it until answered. Valores aceitos: bottom, top, center, corner
-
shapePadrão: flat - flat runs edge to edge; floating is a card with a margin, the theme's corners and a shadow. The middle and the corner are always a card. Valores aceitos: flat, floating
-
dismissPadrão: none - Whether the reader may close it without answering: never; until the page is opened again; or for good, remembered on this site by the band's id. A `@consent` inside closes it when answered, whatever this says. Valores aceitos: none, once, remember
-
surfacePadrão: default - The band's ground, with contrast-checked text: soft (the theme's surface), accent, accent-2 or accent-3 (the brand's colours; not set, the accent: a promotion bar in the brand's orange, its words and buttons picked to read on it), inverse (the theme's inverse pair; its ground is inverse_background when the theme names one). Valores aceitos: default, soft, accent, accent-2, accent-3, inverse
-
widthPadrão: wide - How wide the band's content may get. Valores aceitos: wide, full
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::banner position:bottom dismiss:remember surface:inverse id:cookies
Este site usa vídeos do YouTube, que carregam cookies do Google.
---
[Saiba mais](/privacidade)
:::
:::rows
A list of settings or facts, one row per item: the first line is the row's title, the next its hint, and the last line — whatever it holds: a value, a button, a `switch:on`, a `pill:` — sits at the row's end. A row whose title is a link opens it from anywhere on the row, with a chevron at the end.
Os itens são separados por uma linha ---.
-
insetPadrão: none - none draws hairlines between rows on the page itself; card puts the rows in a rounded panel of their own, the grouped list of a phone's settings. Valores aceitos: none, card
-
spacePadrão: 2 - How much room each row has above and below, a step of the theme's scale. Valores aceitos: 1, 2, 3
-
endPadrão: last - last puts the item's last line at the row's end (when the item has more than one line); none keeps every line under the title. Valores aceitos: last, none
-
buttonPadrão: outline - How a link at a row's end is drawn: outline (a pill outlined in the text colour) or filled (the theme's own button, its fill and label, as a course card's round arrow in the accent). A link that holds only an icon (`` [`icon:arrow-right`](./course) ``) is a circle either way, its name read from the link's title or the icon to a screen reader. Valores aceitos: outline, filled
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::rows
**Reader notes**
Readers can mark a passage and leave a note beside it.
`switch:on`
---
**Display name**
`dropdown:Ana Ceramics`
---
[**Address and domain**](./address)
`pill:warn:Waiting for DNS`
:::
:::shell
An app's frame: a side column (the first item, usually a :::sidenav) beside the main part (the second item, usually a layout's :::slot). On a wide screen it is a panel with the side column at a fixed width; on a phone it fills the screen, the side column goes away and a first line of the main part that is a link with `icon:chevron-left` becomes the bar that goes back. In the main part a `#` heading is the screen's title, with a hairline under it, and a `##` heading is a small muted label over a group of rows, as on a settings screen; a bigger heading inside the main part is a `###`. With headings:page the main part's headings are the page's own, for a reader page with a side column (a blog beside its categories).
Os itens são separados por uma linha ---.
-
railPadrão: 16 - The side column's width, in rem. Valores aceitos: 14, 16, 18, 20
-
framePadrão: panel - panel draws the frame as a raised panel with the theme's radius and a shadow, over the page's ground; plain draws no panel; full makes the shell the page: edge to edge, from the top, at least as tall as the screen, with no radius or shadow (with ```view standalone: true it is the whole screen a reader gets). Valores aceitos: panel, plain, full
-
dividerPadrão: line - A hairline between the side column and the main part. Valores aceitos: line, none
-
headingsPadrão: app - How the main part's headings are drawn: app, as an app's screen (a # is the screen's title over a hairline, a ## a small muted uppercase label over a group of rows); page, as the page's own h1 and h2, the theme's sizes — a reader page with a column of categories beside its posts (passare.com's blog, frame:plain). Valores aceitos: app, page
-
narrowPadrão: back - What the side column becomes on a phone: back drops it and keeps only the way back; drawer adds a Menu button to that bar, which opens the side column as a drawer from the start edge, the current page marked. Valores aceitos: back, drawer
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
-
style - Wears a named style of the page's theme (```style name:<name> for:<carrier> on a page under the theme's styles; manual styles): CSS the theme compiled for this kind of block, scoped to it and kept from reaching outside it or into the Flows blocks inside. The last mile no argument draws; a styled block gives up the checks Flows makes for its directives (phone, contrast, dark mode), and validate says which. Staff preview. Valores aceitos: a style's name: lowercase letters, numbers and dashes, starting with a letter
Exemplo
:::shell
:::sidenav
[`icon:user` Profile](./profile)
[`icon:settings` Preferences](./preferences)
:::
---
[`icon:chevron-left` Settings](./settings)
:::slot
:::
:::
:::timeline
A sequence of steps or events joined by a line: an order's tracking, a stepper, an activity feed, an onboarding. Each item, separated by ---, is a step: its first line the title, the next ones its details (a date, who did it). `state:done`, `state:current`, `state:upcoming`, `state:error` or `state:skipped` written in an item gives its marker and says where it is in words; an item that is only a heading names a group (Today, In progress); a :::timeline inside an item is its sub-steps.
Os itens são separados por uma linha ---.
-
directionPadrão: vertical - vertical runs down the page; horizontal runs across, as a stepper, and turns vertical when the page is narrow. Valores aceitos: vertical, horizontal
-
markerPadrão: dot - What sits on the line at each step: a dot coloured by its state; the step's number; or the `icon:` the item's first line starts with. Valores aceitos: dot, number, icon
-
linePadrão: solid - The line that joins the steps. Valores aceitos: solid, dashed, none
-
densityPadrão: normal - How much room each step has: compact suits a long feed. Valores aceitos: normal, compact
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::timeline
**Pedido criado** `state:done`
10 mar 2026
---
**Em trânsito** `state:current`
Royal Mail · previsão 12 mar
---
**Entregue** `state:upcoming`
:::
:::drawer
A panel that slides in from an edge of the screen over the page, or a dialog in its middle (edge:center), holding anything at all. The first item is what its button says (words, an `icon:` too); the second is what it holds. Without a script both are on the page where they were written; with one the button opens the panel, and the reader closes it with its × button, Escape, a tap outside, or by following a link inside. While it is open the page behind takes no clicks and Tab stays inside it. A @form inside a dialog sends without closing it: the thank-you, or with `another:` the form again, is drawn in the dialog.
Os itens são separados por uma linha ---.
-
edgePadrão: end - The edge it slides in from: end is the right in a left-to-right page and the left in a right-to-left one; start the other side; top and bottom slide down or up. center is a dialog in the middle of the screen over the page, as a "New task" form opens over a list: the first field of what it holds takes the focus. Valores aceitos: end, start, top, bottom, center
-
sizePadrão: normal - How much of the screen it takes: from the side, its width (18, 22 or 32rem, or all of it); from the top or the bottom, up to a height (a third, half, three quarters, or all of it), shorter when what it holds is; in the center, its width (24, 32 or 44rem, or all of the screen), as tall as what it holds up to most of the screen, then scrolling. Valores aceitos: narrow, normal, wide, full
-
collapsePadrão: always - always is a drawer at every width; narrow keeps what it holds on the page where it was written while the page is wide, and makes it a drawer behind its button on a phone. Valores aceitos: always, narrow
-
surfacePadrão: default - The panel's ground, with contrast-checked text. Valores aceitos: default, soft, inverse
-
triggerPadrão: button - How what opens it is drawn: button, a bordered button; plain, its words as written, in the line's own face and colour, with nothing around them (a task's title in a list that opens its panel). Valores aceitos: button, plain
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::drawer edge:start
`icon:menu` Etapas
---
:::sidenav
[Intake](./intake)
[Risco](./risco)
:::
:::
:::drawer edge:center
`icon:plus` New task
---
## New task
```@form collection:tasks submit:"Create" another:choice
title required
status
```
:::
:::tabs
Panels that take turns in one place, one tab each: Details, Timeline, Notes. Each item, separated by ---, is a tab; its first line — a heading, or a line that is only bold — names it, and the rest is its panel. Without a script every panel is on the page under its own name; with one the reader picks a tab (arrow keys too), and a link to anything inside a panel opens it.
Os itens são separados por uma linha ---.
-
stylePadrão: line - line underlines the tab that is open, along a hairline; pill draws the tabs as a row of buttons, the open one filled. Valores aceitos: line, pill
-
hidePadrão: none - Hide on narrow screens (phones) or on wide ones, to show a different arrangement for each. Valores aceitos: none, narrow, wide
-
onlyPadrão: any - Show only in one layout of the page, to draw a different arrangement for each: narrow on a phone (where hide:wide shows it), wide on screens from the theme's wide_from, medium between the two (a Framer site's tablet layout, wide_from 1440 in set_theme). Without wide_from in the theme there is no medium layout: medium never shows and wide is every screen wider than a phone. A block that shows at no width — only:medium on a theme without wide_from, only:narrow inside a block with only:wide, hide:narrow inside hide:wide — is refused: its text would reach search engines and no reader. Valores aceitos: any, narrow, medium, wide
-
id - A name for this block, so a link can land on it (`[Spaces](#spaces)`) and an agent can address it. Written as the element's id, never as a class. Without one, a link to a heading inside a band lands on the heading — halfway down its column in a split, with the picture cut off above it. Valores aceitos: letters, numbers, dashes and underscores, starting with a letter or a number
-
editable - Which of this section's fields a person in content mode may change (the visual editor, EV8): eyebrow, headline, title, text, photo, link. Drawn nowhere; the server refuses a content-mode save that changes anything else (Page::ContentEdit). Valores aceitos:
Exemplo
:::tabs
### Detalhes
Cliente: Ana Ceramics
---
### Timeline
Em trânsito desde 10 mar.
---
### Notas
Sem notas.
:::
:::slot
In a layout (a page other pages wear): where the wearing page goes. Everything around it — a nav, a side column, a footer — is what those pages have in common. A named slot holds a default that a page may replace with :::fill.
-
namePadrão: main - main is where the page's own content goes, and a layout needs one. The others are places a page may fill; what is written inside the slot is what shows when it does not. Valores aceitos: main, hero, aside, top, bottom, cta
Exemplo
:::nav
**[Studio](~)**
---
- [Work](~/work)
- [About](~/about)
:::
:::slot
:::
:::slot name:cta
## Let's talk
[Write to us](~/contact)
:::
:::fill
In a page that wears a layout: what goes into one of the layout's named slots instead of its default. It leaves the page's own flow and shows where the layout put that slot.
-
namePadrão: aside - The slot to fill. One the layout does not have stays where it was written, so nothing a person wrote disappears. Valores aceitos: hero, aside, top, bottom, cta
Exemplo
:::fill name:cta
## Hiring designers
[See the roles](~/jobs)
:::
# The page's own content