The body between {define 'card'} and {/define} becomes the template of a new tag, {card}, exactly as if it stood in _tags/card.pad. Defining prints nothing; every use of the tag renders the body, where the use stands and with the fields there.

Everything a file-based custom tag can do works in the body: {#name} reads a parameter of the use, {parms} declares them (a bare name required, name=default filling in), @content@ takes the content of a pair use in, and {slot}s take named fills. A define can use itself, for rows below the current one.

The body is kept as written and rendered at each use, so a field in it is read at the use, not at the definition. A define exists from the point it is walked - like a {content} or {data} store - so a use above the {define} is an unknown tag. {define:card} asserts that the name is a define.

Under the strict check a name that is a built-in or application tag, or already a {macro}, is an error, and so is a define without a name or without a body. Use a define for markup with a frame - content and slots; use a macro when the parameters should read as plain fields.