Properties panel
The properties panel is on the right side of the screen. It shows editable properties for the selected element. It has two modes, toggled at the top: Visual and CSS.
Visual mode
Visual mode organizes properties into collapsible sections. Only sections relevant to the selected element type are shown. For example, text elements don't show Layout, and image elements don't show Background Color.
Element
The collapsible Element section at the top lets you change the HTML
tag used for the selected element and edit tag-specific attributes, such
as href on a link, controls on a video, and placeholder on an
input. For details, see Elements.
Size
- The W (width) and H (height) inputs accept any CSS length:
100(treated as100px) or100px: Fixed100%: Stretchauto: Autofit-content: Hug100vh,100vw,2em,calc(100% - 20px), orvar(--page-w): Fixed, with the verbatim value preserved
- The mode selector (Fixed, Stretch, Hug, or Auto) syncs
with whatever you typed:
100%flips to Stretch,autoflips to Auto, and so on. You can also select the mode from the list.
Aspect-ratio lock
A chain-link toggle sits between the W and H inputs:
- Unlocked (default): Width and height change independently.
- Locked: Changing one dimension rescales the other to keep the ratio. The ratio is captured at the moment you lock and holds until you toggle off and on again. Type a new W and press Tab, and the H updates before focus moves on.
- The same lock appears as a small badge on the canvas selection handles. Click it to toggle without opening the panel. With the lock on, only the corner handles resize, and they scale from the corner. The edge handles are disabled so a drag can't distort the element.
- Ratio lock is a session-only editor preference. It isn't written to your CSS or saved with the project. Switching an axis to Stretch (a percentage size) releases the lock, because a percentage can't be held against a fixed value.
Imported and pasted SVGs start with the lock on, because their ratio
comes from the viewBox. See SVG.
Layout
- Select Block, Flex row, Flex column, or Grid.
- For flex containers: the Reverse toggle (
row-reverseorcolumn-reverse), the 3×3 alignment grid, Align (including Baseline), Justify (including Evenly), Gap, and a Wrap row. Turn on Wrap, and you also get Align content and separate Row gap and Column gap inputs. For details, see Flex layout. - When the selected element's parent is flex or grid, the Size section gains an Advanced disclosure that holds the child controls. For flex, these are Grow, Shrink, Don't shrink, Basis, Align self, and Order.
- The gap inputs show a token icon on the right. See Spacing tokens.
Spacing
- P (padding) and M (margin) inputs.
- Shorthand input is supported: type
10for uniform,10 20for vertical and horizontal, or10 20 30 40for top, right, bottom, and left. - The right edge of each input has a token icon. See Spacing tokens.
Spacing tokens
Every length-typed control in the panel—Padding, Margin, Gap, C-gap,
R-gap, Border width, and Border radius—shows a small token icon on the
inside right of the input. Click it for a list of every length token
declared in theme.css, such as --space-md: 16px; and
--gutter: 1rem;.
- Selecting a token on a four-side field (padding, margin, border width, or border radius) applies the token to all four sides.
- Selecting a token on a single-value field (gap, column gap, or row gap) replaces the value.
- The icon highlights in the accent color when any side currently holds
a
var(--…)reference, so token-bound fields are visible at a glance. - You can still type mixed forms directly:
16 var(--space-md)on padding gives you a pixel top and bottom and a token left and right. - The list shows an empty state with a + Add token action when the project has no length tokens declared yet.
See Themes for the full token model.
Background
- A color swatch button that opens the color picker.
- Set a background image with Set background image, and then adjust size, position, and repeat from inline controls.
Border
- A Color swatch, a Style selector (solid, dashed, and so on), W (width), and R (border radius).
- Shorthand input is supported for radius, such as
10 20 10 20. - W and R both carry the spacing token picker. See Spacing tokens.
Shadow
- + Add shadow appends a row. Multiple shadows are supported and
emit as a comma-separated
box-shadowvalue. - Per row: X and Y offsets, B (blur), S (spread), a color picker, O (opacity from 0 to 100%), and an Outset or Inset toggle.
- Color and opacity are split for clarity: the picker writes a hex base
color, and the O input controls the alpha. The combined output is
always
rgba(...). - The remove button (×) drops a single row. Emptying the section drops
the entire
box-shadowdeclaration.
Filters
- A row of CSS
filterfunctions applied in order: blur, brightness, contrast, grayscale, hue-rotate, invert, opacity, saturate, and sepia. - + Add filter appends a row. Each row has a kind list and a numeric value input with the right unit suffix (px, %, or deg).
- The Backdrop filter toggle opens a second row of filters that
apply to the content behind the element through
backdrop-filter. It's visible only when the element has a partially transparent background. - For details, see Filters.
Transform
- A row of CSS
transformfunctions applied in order: translate, rotate, scale, and skew. + Add transform appends a no-op row. Each row has a kind list and the inputs that kind needs. - An Origin row sets
transform-originwith nine presets or any CSS value. - For details, see Transforms.
Visibility
- Opacity: A number input from 0 to 100%.
- Display: A Visible, Hidden, or None segmented control.
- Blend: A
mix-blend-modelist. The default is Normal, which emits no declaration. Options are grouped by category: Darken (Multiply, Darken, Color burn), Lighten (Screen, Lighten, Color dodge), Contrast (Overlay, Soft light, Hard light), Inversion (Difference, Exclusion), and Component (Hue, Saturation, Color, Luminosity).
Transitions and Animation
See Transitions and Animations for the shorthand-emitting Transitions section and the preset-driven Animation section.
Export
The Export section sits at the bottom of the Visual panel and writes a PNG or SVG of the selected element.
- Format list: PNG or SVG.
- Scale (PNG only): 1×, 2×, or 3×. Multiplies the captured pixel resolution.
- Size readout: The live width × height of the export target.
- The Export button label updates with scope: "Export rect_a1b2" for an element, or "Export page" for the page root.
- Clicking the button opens a native save dialog. The renderer captures
the DOM with
html-to-image, and the main process writes the bytes. - Editor chrome (selection outlines, drop indicators, and the canvas interaction layer) is filtered out of every capture.
CSS mode
CSS mode switches the panel to a raw CSS editor powered by CodeMirror. Edit any CSS property directly.
- Changes commit when you click away (blur) or press Cmd+S.
- Unknown properties are preserved through round-trips as custom properties.
- When a non-desktop breakpoint is active, the editor scopes to that
breakpoint's
@mediablock. See Breakpoints.
Edit at a breakpoint
When the canvas is at a non-desktop breakpoint (Mobile, Tablet, or a custom one you defined), field edits land in that breakpoint's override instead of the base CSS.
- Sections with overrides show a small blue dot next to the section title. Hold the pointer over the dot for a tooltip that lists every CSS property overridden at the active breakpoint in that section.
- Right-click the dot to reset every overridden field in that section. Each field reverts to the cascade value from desktop or a wider breakpoint.
See Breakpoints for a complete walkthrough.
Duplicate-CSS indicator
When the parser sees the same CSS property declared more than once in an
element's class block, such as height: 100%; height: 100vh;, the
section that owns that property shows a small yellow dot next to its
title. Hold the pointer over it for a tooltip that lists the duplicated
property.
Duplicates usually come from agent-written or hand-edited CSS where two values landed for the same property. The browser cascade picks the last-declared value, and Scamp's typed state reflects the same.
The dot self-heals when you edit any field on the affected element:
editing rewrites the rule block from typed state, which collapses the
duplicates. Existing fallback patterns, such as
display: -webkit-box; display: flex;, are flattened to the modern
value on this rewrite. Back up the file first if you want to keep the
fallback.
Tips
- Use Visual mode for quick adjustments and CSS mode for precise control.
- See Typography for text-specific properties.
- See Elements to change an element's semantic HTML tag.