[data-form] { --_form-gap: var(--form-gap-md); --_form-padding: 0; --_form-border: transparent; --_form-bg: transparent; --_form-shadow: none; --_form-action-height: var(--form-action-height-md); --_form-action-padding-inline: var(--form-action-padding-inline-md); --_form-action-font-size: var(--form-action-font-size-md); display: flex; flex-direction: column; gap: var(--_form-gap); inline-size: 100%; /* literal: identity — a form IS its container's width */ min-inline-size: 0; padding: var(--_form-padding); border: var(--form-border-width) solid var(--_form-border); border-radius: var(--form-radius); background: var(--_form-bg); box-shadow: var(--_form-shadow); color: var(--form-fg); font-family: var(--form-font-family); } [data-form][data-size='xs'] { --_form-gap: var(--form-gap-xs); --_form-action-height: var(--form-action-height-xs); --_form-action-padding-inline: var(--form-action-padding-inline-xs); --_form-action-font-size: var(--form-action-font-size-xs); } [data-form][data-size='sm'] { --_form-gap: var(--form-gap-sm); --_form-action-height: var(--form-action-height-sm); --_form-action-padding-inline: var(--form-action-padding-inline-sm); --_form-action-font-size: var(--form-action-font-size-sm); } [data-form][data-size='lg'] { --_form-gap: var(--form-gap-lg); --_form-action-height: var(--form-action-height-lg); --_form-action-padding-inline: var(--form-action-padding-inline-lg); --_form-action-font-size: var(--form-action-font-size-lg); } [data-form][data-size='xl'] { --_form-gap: var(--form-gap-xl); --_form-action-height: var(--form-action-height-xl); --_form-action-padding-inline: var(--form-action-padding-inline-xl); --_form-action-font-size: var(--form-action-font-size-xl); } [data-form][data-variant='panel'] { --_form-padding: var(--form-panel-padding); --_form-border: var(--form-panel-border); --_form-bg: var(--form-panel-bg); --_form-shadow: var(--form-panel-shadow); } [data-form][data-layout='grid'] { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--form-grid-min)), 1fr)); align-items: start; column-gap: var(--form-grid-column-gap); row-gap: var(--_form-gap); } [data-form][data-pending] { cursor: progress; } /* Whole-form invalid signal: a thin top accent and the ErrorSummary bordering match the risk tone. Individual fields keep their own `[data-invalid]` styling via the Field recipe — the form-level indicator is a low-emphasis affordance so the page-level "errors present" state reads at a glance. */ [data-form][data-invalid] { --_form-invalid-accent: var(--form-invalid-accent); } [data-form][data-invalid] [data-form-error-summary] { border-color: var(--_form-invalid-accent); } /* The action chrome is the AutoFields array's, and ONLY its. `form-auto-fields.svelte` renders `array-add` / `array-remove` as bare `