diff --git a/src/app/(protected)/vendors/_components/vendor-trade-specialties-field.tsx b/src/app/(protected)/vendors/_components/vendor-trade-specialties-field.tsx
index 90329e41..490f554d 100644
--- a/src/app/(protected)/vendors/_components/vendor-trade-specialties-field.tsx
+++ b/src/app/(protected)/vendors/_components/vendor-trade-specialties-field.tsx
@@ -4,10 +4,53 @@ import AddIcon from "@mui/icons-material/Add";
import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward";
import ArrowUpwardIcon from "@mui/icons-material/ArrowUpward";
import CloseIcon from "@mui/icons-material/Close";
-import { Autocomplete, Box, Button, Chip, FormLabel, Stack, TextField } from "@mui/material";
+import {
+ Autocomplete,
+ Box,
+ Button,
+ Chip,
+ FormLabel,
+ Stack,
+ TextField,
+ Typography,
+} from "@mui/material";
import { Text } from "@/components/ui/text";
import type { VendorCompanyRosterFormValues } from "@/domain/vendors/schemas/vendor-roster-schema";
+/**
+ * `Text variant="feedback"` stays mounted when silent so the aria-live region can announce later.
+ * An empty paragraph still claims a line box, which would add a permanent gap under the trades
+ * input and shift the approved drawer layout. Collapse the box while keeping the node in the DOM
+ * (never `display: none`, which would stop announcements).
+ */
+function collapsedWhenSilent(visible: boolean) {
+ return visible ? undefined : { height: 0, margin: 0, overflow: "hidden" as const };
+}
+
+function TradeFeedbackRegions({
+ listUnavailable,
+ message,
+}: {
+ listUnavailable: boolean;
+ message: string | null;
+}) {
+ return (
+ <>
+
+ Trade list is unavailable right now — you can still type a trade manually.
+
+
+ {message}
+
+ >
+ );
+}
+
function splitTrades(value: string | undefined): string[] {
return (value ?? "")
.split(",")
@@ -52,9 +95,9 @@ export function VendorTradeSpecialtiesField({
return (
Trade Specialties
-
+
First trade is primary. Reorder with the arrows.
-
+
-
- Trade list is unavailable right now — you can still type a trade manually.
-
-
- {feedbackMessage}
-
{trades.length > 1 && (
{trades.map((trade, tradeIndex) => (
@@ -186,6 +223,9 @@ export function VendorTradeSpecialtiesField({
);
}}
/>
+ {/* Outside the spaced Stack: an always-mounted live region would otherwise inherit Stack
+ spacing and add a permanent gap under the trades input, shifting the approved layout. */}
+
);
}