/** Accepted interaction behavior surrounding the five seeded visual gaps. */ export const designCountExistingInteractionStates = [ 'The existing router protects dirty edits on every in-app exit, including', 'persistent app navigation, using the same Cancel confirmation dialog.', 'Register the browser-native beforeunload warning only while the form is dirty;', 'remove it when clean. Confirmed in-app navigation uses the existing destination', 'heading focus behavior; Keep editing returns focus to the attempted exit.', 'During Save or Export, both request buttons use aria-disabled=true plus an', 'explicit click/keyboard activation guard, rather than the HTML disabled attribute.', 'They remain focusable and keep the existing disabled appearance. Reset and', 'Cancel use HTML disabled during the request. Do not move focus while pending', 'or after success. On a network error, focus the operation-specific Retry only', 'if focus is still on the request trigger; never steal focus the user moved.', 'The existing InlineStatus text stays unchanged while Save is pending:', 'Unsaved changes for a dirty form, otherwise its saved timestamp or initial', 'blank text. Pending feedback belongs to the request button; do not repeat', 'Saving… in the status live region. Success and failure use the outcomes above.', 'When clean and idle, Reset is disabled because it has nothing to discard,', 'and Cancel navigates back immediately without a confirmation. When dirty', 'and idle, Reset and Cancel use their existing discard confirmations. Their', '44px geometry is unchanged; the disabled style is separate from pending feedback.', 'The existing ErrorSummary mounts in the status/error area below the action', 'group and above Profile. It links each invalid field; focus goes to the first', 'invalid field and the summary is not a second live region. Preserve that slot.', 'The existing error/Retry row is inline above 640px with an 8px gap. At 640px', 'and below, Retry wraps below the text as a full-width 44px ghost button,', 'outside the live region; long errors fit 320px without horizontal scroll.', // The September 20 retry correctly surfaced these three missing contracts // in addition to the five seeded visual gaps. They belong to the existing UI. 'The existing operation-specific network error copy is:', 'Save: “Couldn’t save your changes. Your edits are still here.”', 'Export: “Couldn’t prepare your export.” Load: “Couldn’t load your settings.”', 'Each uses the existing error icon and its sibling Retry with the operation-specific', 'accessible label already specified. Preserve edits and the existing retry behavior.', 'Save stays enabled and focusable while idle, whether clean or dirty.', 'A clean Save is a no-op: no request, validation, pending state, timestamp, status, or focus change.', 'Only a dirty Save sends the existing atomic request.', 'The existing Export filename is account-settings-YYYY-MM-DD.json, using the user’s local calendar date', 'at export activation and no account identifiers, including no account name or email. Repeated same-day exports keep the browser’s normal collision suffix', '(for example, “ (1)”); the application does not overwrite an earlier download.', ];