Make a design reusable
A variable is a named value that several inputs can share. Change Accent once and every bound gradient stop follows. Change Tile size and several pieces resize together. Less repetition, more room to experiment.
Expose a few useful controls and the same design becomes a template other people can explore without understanding its entire layer stack.
Supported variable types
Use the four add buttons at the bottom of Variables to choose a type. The type describes the value, not the unit of the property it will control.

Number
A Number stores a numeric value. Optional Min, Max, and Step keep it within useful bounds. Step must be positive; allowed steps are measured from Min when supplied, otherwise from zero.
For example, make Tile size 240, with Min 40, Max 400, and Step 10.
Bound to a width, that value means pixels. Bound to an angle, it means degrees.
There are no separate Length, Percentage, or Angle variable types in the editor.
Color
A Color stores a color and its alpha. Bind it to supported color inputs such as solid colors, gradient stops, or a folder's shadow color. One Accent variable can keep several gradients in the same palette.
Not every color picker supports bindings. Look for the link button rather than assuming a texture's palette has the same binding controls. Shape Fill and Stroke both support Color variables.
Function
A Function calculates a numeric result from a formula. For example, Half size
with --tile-size / 2 stays at half of Tile size. Bind it anywhere its numeric
result fits, just as you would a Number.
Function values are calculated rather than directly edited. They cannot be exposed as editable controls in Details View; expose their Number inputs instead.

Text
A Text stores text, including line breaks, Unicode characters, and variable templates. Bind it to Text content in a text layer's Properties to reuse a heading or caption across layers. Text variables support up to 500 characters and 8 lines; an empty value is allowed. They have no numeric constraints and cannot be used in formulas or bound to other properties.
Bound text stays linked when you change its font, weight, or style. To edit it directly in Properties or on the canvas, first choose Static value in the Text content binding menu.
HTML exports include the current text in their inline SVG, including viewer overrides. Text is escaped as plain text, not interpreted as HTML. Unlike numeric and color bindings, changing an exported CSS custom property does not replace SVG text; change the text in GradientArt and export again.
Variables inside text
Write {--variable-name} inside a text layer's Text content, on the canvas,
or in a Text variable's value to insert another variable. You can mix references
with ordinary text without binding the entire field:
Two plus Two is {--value}
Welcome, {--name}!
Your accent color is {--accent}
With Number --value set to 4, the first example renders as
Two plus Two is 4. Use the generated CSS name, not the variable's label.
Number and Function references insert their numeric result; Color references
insert a CSS color such as rgb(255 0 0 / 1). A Text reference inserts its text,
including any templates it contains. Changes to referenced variables update
every dependent text layer, including viewer customization previews.
For example, a Text variable --greeting can contain Welcome, {--name}!.
Use {--greeting} in a text layer to reuse that message; changing --name
updates the greeting wherever it appears.
Use {{--value}} to display the literal {--value} without creating a
dependency. Other braces, such as {hello}, remain ordinary text.
Templates do not evaluate arithmetic: create a Function and reference its name
when you need a calculation.
Both the source and expanded text must fit within 500 characters and 8 lines. Missing variables, circular references, and oversized output produce validation errors; the artwork keeps its last accepted value while you correct the edit. Properties and on-canvas editing retain the template source rather than replacing it with its current output. Whole-value Text bindings continue working as before.
Create and name variables
- Choose Add number variable, Add color variable, Add text variable, or Add function variable in Variables.
- Enter a Label. The editor generates a CSS name below it: Tile size
becomes
--tile-size. - Add a description that explains what changing the control will do.
- Set a value and any numeric constraints, or enter a Function formula.
- Choose whether to Show in project details, then select Create variable.

Names must be unique within the project. Labels that normalize to the same CSS name count as duplicates, even if their punctuation differs. The form shows the conflict so you can choose another label. A project supports up to 64 variables.
Bind values to properties
Create Tile size as above, select a layer, and open the link button next to Background width. Choose Tile size. Repeat for height to make a square. Changing the variable now changes both inputs.
Bindings are available for canvas width and height; background position and size; gradient angle, center, and repeat; stop colors and positions; shape fill, stroke, stroke width, and rotation; text-layer content; and the supported folder dimensions, transforms, and filters. A binding menu only lists compatible types and values. If a variable is absent, check its current result against the destination's range.
Shape Stroke width uses a number input. Stroke width and Rotation also accept Number variables, Function variables, and input formulas within their supported ranges. Shape appearance in exported SVG uses the current variable values, including viewer overrides; changing exported CSS custom properties does not repaint that SVG. Change the values in GradientArt and export again.

A bound field displays a label or formula rather than a directly editable value. Click a formula-bound input, or focus it and press Enter or Space, to open the formula editor. Changes take effect only when you choose Apply formula. To disconnect it, open the link menu and choose Static value. This restores the property's stored static value, which may differ from the current result.
Bindings and clones
Bindings follow the property's sharing rules. A layer clone's size and position bindings belong to that reference, as do a folder clone's dimension and transform bindings. Binding or unbinding one of those inputs doesn't change its peers' bindings. Bindings on shared artwork and on descendants repeated through a cloned folder stay linked.
Cloning initially keeps the selected reference's bindings. If two independent placement inputs still use the same variable, changing that variable affects both. Choose Static value or a different variable to separate their values. Break clone and Duplicate selection also retain variable bindings; neither creates independent copies of the project's variables.
Formulas
Use a Function variable when several inputs should share a calculation. Use Formula in one input's binding menu when the calculation is only useful there. Both use the same arithmetic language.
For example, a width can use --tile-size, while a neighboring layer uses
--tile-size / 2. An input formula shows its calculated result with the
destination unit before you choose Apply formula.

References and arithmetic
Use existing numeric-variable names prefixed with --, numeric literals,
parentheses, and +, -, *, or /. Multiplication and division happen before
addition and subtraction; parentheses make the grouping explicit.
--tile-size / 2
(--tile-size - 20) / 2
--tile-size + --gap * 2
The last example also needs a Number variable named Gap. Put spaces around
subtraction: --tile-size - 20, not --tile-size-20, which looks like a variable
name. Use the available-variable list in the form to check spelling.
These aren't JavaScript or spreadsheet expressions. Functions such as Math.sin,
min(), and SUM() are not supported, and colors and text cannot take part in numeric
arithmetic.
Validation and dependencies
An error below the formula identifies what needs attention. Common causes are a
missing variable, a Color or Text used as a number, division by zero, or a result outside
the target input's allowed range. A canvas width, for example, must be at least
1, even if the arithmetic itself is valid.
Functions can reference other Functions, but dependencies cannot circle back to themselves. If A depends on B, B cannot depend on A. Fix the reference or calculation before applying it; the editor won't accept an invalid binding just because the formula is syntactically complete.
Templates and exposed controls
Keep Show in project details enabled for Number, Color, and Text variables you want viewers to adjust. Disable it for internal construction values. Function variables stay calculated and do not appear as editable controls.
Save or Update the project to persist those choices. Projects with exposed controls can appear in Templates, and their Details View gains a Customize panel. A few clear labels and safe ranges make a template much easier to use than exposing every possible value.
Customize a preview
Open Details View and change a value under Customize. The artwork responds without changing the saved original. Reset to defaults restores the saved values and clears preview validation messages.

Preview values are temporary. In particular, Fork in Details View starts from the saved project, not these temporary overrides. To keep a variation, open the editor, set its variable values there, and Fork or Update as appropriate. See forking a project.
Edit and remove variables
Change a Number, Color, or Text directly in the Variables panel, or use Edit for its label, description, constraints, exposure, or Function expression. Renaming a variable updates references in saved formulas and text templates and keeps its direct bindings connected. Escaped text references stay unchanged.
Edits are checked against dependent formulas, text templates, and bound inputs. If a change would make them invalid, the editor reports the problem and keeps the previous accepted value. Adjust the constraints or dependent formula before trying again.
Deleting a directly bound variable removes those bindings and restores the inputs' stored static values. If another Function, input formula, or text template references it, deletion is blocked: update those references first. This includes a text layer's stored template even while a whole-value binding is active. Removing a control is a design change, so use Update when you want that change saved.