Invalid

Input fails validation.

html

<label class="inv" style="--accent:#C0392B;">
  <span class="inv__label">Email address</span>
  <input class="inv__input inv__input--forced" type="email" value="not-an-email" required>
  <span class="inv__msg">Real <code>:invalid</code> pseudo-class — the browser applies it because <code>type="email"</code> plus <code>required</code> rejects this value natively.</span>
</label>
<style>
.inv { display: block; width: 280px; box-sizing: border-box; font: 14px/1.5 system-ui, sans-serif; color: #241430; background: #FAF7F2; padding: 16px 18px; border-radius: 12px; }
.inv__label { display: block; margin-bottom: 7px; font-size: 12px; font-weight: 600; color: #241430aa; }
.inv__input { width: 100%; box-sizing: border-box; font: 14px system-ui, sans-serif; padding: 9px 11px; border-radius: 8px; border: 1.5px solid #24143030; }
.inv__input:invalid, .inv__input--forced { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, #FAF7F2); }
.inv__msg { display: block; margin-top: 7px; font-size: 11px; color: #241430888; }
.inv__msg code { background: #24143012; padding: 1px 5px; border-radius: 4px; }
</style>

tailwind

<label class="block w-[280px] box-border font-sans text-sm text-[#241430] bg-[#FAF7F2] px-[18px] py-4 rounded-xl">
  <span class="block mb-1.5 text-xs font-semibold text-[#241430]/65">Email address</span>
  <input type="email" value="not-an-email" required class="inv-tw-input inv-tw-input--forced w-full box-border text-sm px-2.5 py-2 rounded-lg border-[1.5px] border-[#24143030]">
  <span class="block mt-1.5 text-[11px] text-[#241430]/55">Real <code class="bg-[#24143012] px-1.5 py-0.5 rounded">:invalid</code> pseudo-class — the browser applies it because <code class="bg-[#24143012] px-1.5 py-0.5 rounded">type="email"</code> plus <code class="bg-[#24143012] px-1.5 py-0.5 rounded">required</code> rejects this value natively.</span>
</label>
<style>
.inv-tw-input:invalid, .inv-tw-input--forced { border-color: #C0392B; background: color-mix(in srgb, #C0392B 8%, #FAF7F2); }
</style>

react

export function InvalidState({
  fieldLabel = "Email address",
  value = "not-an-email",
  accent = "#C0392B",
  force = true,
}) {
  return (
    <label style={{ display: "block", width: 280, boxSizing: "border-box", font: "14px/1.5 system-ui, sans-serif", color: "#241430", background: "#FAF7F2", padding: "16px 18px", borderRadius: 12 }}>
      <span style={{ display: "block", marginBottom: 7, fontSize: 12, fontWeight: 600, color: "#241430aa" }}>{fieldLabel}</span>
      <input type="email" defaultValue={value} required
        style={{ width: "100%", boxSizing: "border-box", font: "14px system-ui, sans-serif", padding: "9px 11px", borderRadius: 8, border: `1.5px solid ${force ? accent : "#24143030"}`, background: force ? `color-mix(in srgb, ${accent} 8%, #FAF7F2)` : "transparent" }} />
      <span style={{ display: "block", marginTop: 7, fontSize: 11, color: "#241430888" }}>Real <code>:invalid</code> pseudo-class — the browser applies it natively because this value fails <code>type="email"</code> validation.</span>
    </label>
  );
}