{
+ /**
+ * Visible label rendered above the input
+ */
+ label?: string
+ /**
+ * Validation error shown below the input
+ */
+ error?: string
+}
+
+const INPUT_BASE = 'brutal-border bg-white px-4 py-3 text-carbon-black focus:outline-none focus:ring-2 focus:ring-burnt-oxide focus:ring-offset-2 focus:ring-offset-ochre-clay transition-all'
+
+/**
+ * Text input with optional label and error state.
+ */
+export function Input({ label, error, className, ...props }: InputProps) {
+ return (
+
+ {label && }
+
+ {error && {error}}
+
+ )
+}
+
+interface TextareaProps extends TextareaHTMLAttributes {
+ /**
+ * Visible label rendered above the textarea
+ */
+ label?: string
+ /**
+ * Validation error shown below the textarea
+ */
+ error?: string
+ /**
+ * Number of visible rows
+ * @default 4
+ */
+ rows?: number
+}
+
+/**
+ * Multiline textarea with optional label and error state.
+ */
+export function Textarea({ label, error, rows = 4, className, ...props }: TextareaProps) {
+ return (
+
+ {label && }
+
+ {error && {error}}
+
+ )
+}