Files
sim/apps
Waleed 6599b4c428 fix(chat): keep the composer remove badge anchored and align chip tokens (#6365)
* fix(chat): keep the remove badge anchored to the file card

The card wrapper had no width cap, so it sized to the filename's max-content
width while the card itself capped at 220px. The remove badge is positioned
against that wrapper, so a long filename stranded it far to the right of the
card it belongs to.

Moves the cap onto the wrapper and lets the card fill it.

* fix(chat): make attachment tiles read on every surface they render on

The sent-message tile went icon-only, which made its fill the whole
affordance — and against the workflow chat panel's --surface-1 that fill is
~8/255 away in light mode. Adds the border the user message bubble already
pairs with --surface-5 for the same reason.

- Restore an accessible name to the sent tiles: an icon-only div with a title
  attribute announces as nothing.
- Step the composer icon badge on hover; the chip's hover fill closed to
  within 7/255 of it in light mode.
- Extension label moves to --text-icon/text-caption; --text-muted was 2.4:1
  on this fill in dark mode, well under AA.
- Tooltip.Content no longer re-declares the width and truncation it owns —
  it was truncating the very name it exists to reveal.

* improvement(chat): restore sent-attachment filenames and align chip tokens

- Revert the sent-message attachments to main's styling: the icon-only tile
  dropped the filename, leaving no way to tell what was sent.
- Radii onto the scale: --radius is 8px, so rounded-[10px] was off-system in
  both files. Outer surfaces use rounded-lg, the nested icon badge rounded-md.
- Pill filename uses the named text-xs rather than an arbitrary text-[11px].
- The remove badge is opaque instead of a translucent scrim, so it reads the
  same over a light card and over a photo rather than compositing with each.

* improvement(chat): tighten composer chip markup and tokens

- Remove the chip tooltips: the document card already shows its filename, so
  the tooltip mostly restated it.
- Collapse the single-use height constant and use size-[48px] on the media
  branch, which was h-[48px] + w-[48px] split across two class strings.
- Remove badge moves to --surface-2; --surface-1 sat 8/255 from the chip fill
  in light mode, reachable on a coarse pointer where the chip's hover-hover
  fill never applies. Its hover gating now matches the chip's.
- py-[7px] so the 32px icon badge fits the 48px box instead of overflowing it.
- Trim comments to TSDoc or one-line rationale per the repo rule.

* fix(chat): keep the remove badge reachable on coarse pointers

Gating the reveal on hover-hover alone would hide it from touch entirely,
since that variant is fine-pointer only. Instead it is visible by default and
only fine pointers get reveal-on-hover, so the badge never depends on an
emulated hover.

* fix(chat): reveal the remove control on keyboard focus

On a fine pointer the badge is transparent until hover, so tabbing to it left
a sighted keyboard user unable to see which attachment Enter would remove.
The focus-visible chain carries higher specificity than the hide rule, so it
wins regardless of source order.

* improvement(chat): drop the icon badge's own hover step

The chip's hover is the only hover affordance needed. The badge fill is now
constant, sitting one step below --surface-6 in light mode so the chip's
hover fill cannot close on it — which is what the per-badge step was
compensating for.

* fix(chat): stop gating the remove badge on a variant that cannot express it

hover-hover expands to '@media (hover:hover) and (pointer:fine) { &:hover }',
so it binds to the element carrying the class. On the badge that meant every
rule required hovering the badge itself, making the whole chain dead CSS —
the badge was simply always visible.

Rather than rebuild the gating, drop it: an always-visible control is
reachable on touch and stays visible while holding keyboard focus, which the
reveal-on-hover form could not manage without special cases for both.
2026-08-06 20:16:22 -07:00
..