{script.name}
diff --git a/src/components/forms/dynamic-form.tsx b/src/components/forms/dynamic-form.tsx
index f12967b..f0b800a 100644
--- a/src/components/forms/dynamic-form.tsx
+++ b/src/components/forms/dynamic-form.tsx
@@ -14,6 +14,11 @@ import { defaultValuesForScript } from "@/lib/config/defaults";
import type { ClientScript } from "@/lib/config/serialize";
import { FieldRenderer } from "./field-renderer";
+/** Controls whose content doesn't shrink well into a narrow grid column - long-form text,
+ * or a group of checkboxes that reads better as a single wide list - so they span the full
+ * grid width instead of sharing a row with other fields. */
+const WIDE_CONTROLS = new Set(["textarea", "checkboxGroup"]);
+
/** `initialValues` comes from a previous run's (already-redacted) variables when re-running -
* secret fields are deliberately excluded there (their stored value is just "***", not the real
* one), so those always fall through to the normal default/empty state and have to be re-entered. */
@@ -93,9 +98,22 @@ export function DynamicForm({
This script takes no parameters.
)}
- {script.variables.map((variable) => (
-
- ))}
+ {script.variables.length > 0 && (
+