demo ยท v144

Per-input Shapes

The motivating use case wasn't global theming — it was matching context. A terminal field wants a block caret. An OTP slot wants an underscore. A serif editor wants a slim bar. caret-shape is per-element, like every other CSS property.

caret-shape: checking…

Block caret over a monospace prompt is the convention since VT100.
Underscore matches the placeholder dashes — the cursor fills in the next slot.
Explicit is better than implicit. Browsers may change defaults; the page shouldn't flinch.
Numeric fields look right with a stronger cursor — the user is overwriting digits.
Focus a field to inspect computed caret-shape.

the API

.terminal { caret-shape: block; caret-color: var(--accent-emerald); }
.otp      { caret-shape: underscore; }
.editor   { caret-shape: bar; }
.amount   { caret-shape: block; }

see also