diff --git a/apps/edr-freight-web/portal/src/pages/bookings/new-booking-form/step5-cargo-details.tsx b/apps/edr-freight-web/portal/src/pages/bookings/new-booking-form/step5-cargo-details.tsx
index a02138373..ac336c47c 100644
--- a/apps/edr-freight-web/portal/src/pages/bookings/new-booking-form/step5-cargo-details.tsx
+++ b/apps/edr-freight-web/portal/src/pages/bookings/new-booking-form/step5-cargo-details.tsx
@@ -26,6 +26,70 @@ type BookingForm = UseFormReturn<
BookingFormValues
>;
+/**
+ * One numbered toggle per container unit in the line โ tap units to mark how
+ * many are hazardous/refrigerated (2 hazardous โ toggle 2 units on). Selection
+ * fills from unit 1: tapping unit N selects 1..N, tapping a selected unit N
+ * keeps 1..N-1 โ the count is always derived, never free-typed, so it can't
+ * exceed the line quantity.
+ */
+function UnitCountToggles({
+ total,
+ value,
+ onChange,
+ label,
+ activeBg,
+ activeBorder,
+ activeColor,
+}: {
+ total: number;
+ value: string;
+ onChange: (v: string) => void;
+ label: string;
+ activeBg: string;
+ activeBorder: string;
+ activeColor: string;
+}) {
+ const count = Math.min(total, Math.max(0, Math.floor(Number(value) || 0)));
+
+ return (
+