/* * M3's text fields — the chrome every form control here shares: outlined (the default) and filled. * * The states are selectors rather than classes: whether the label rests in the field or floats is a * question about the control's value and focus, and `:has()` asks it without JavaScript, so it is * right before Alpine starts, in a test, and after a Livewire morph rewrites the value underneath. * * The outlined field's notch is MUI's technique: a `
` draws the outline and a hidden * ``, carrying the label at its floated size, cuts the gap the label sits in, so the gap is * right on any background. The filled field has no outline: a surface-container-highest box with * extra-small top corners and an active indicator line, the label floating inside it * (FilledTextFieldTokens / OutlinedTextFieldTokens, androidx Compose Material 3, Apache-2.0). * * Anatomy (resources/views/components/field.blade.php): * * .field the whole thing; `class` from the call site lands here; data-variant, data-size * .field-box the 56px row: icon, prefix, control, suffix, trailing * .field-control the ,