- Shipped
- August 28, 2026 at 8:57 PM UTC
- Author
- Kamo
- Commit
- a73469d
Five reports from the brand section, and the first two turn out to be the same bug wearing two faces. **Colours were never adopted.** The rule latched a `colorsTouched` flag the moment any colour event fired and never cleared it, so the whole feature was one stray interaction away from being dead for the rest of the session — with nothing on screen to say why and no way to undo it. Which is exactly what the next bug caused. Replaced with a rule that has no latch at all: the scan owns a colour while the field is empty or still holds what the scan last wrote there, and the answer is recomputed from the form's own state every time. Judged per channel, so hand-picking a secondary and leaving the scanned primary keeps the one you chose and still updates the other. A second site now correctly replaces the first site's answer, which the latch made impossible. **The colour window opened in the page's top-left corner.** The `<input type="color">` was hidden with `sr-only`, which clips its box to one pixel — and a browser anchors the native window to that box. It now covers the swatch at zero opacity, the same shape ModernColorPicker settled on for the same reason, which also makes the real control the thing you tab to instead of a button proxying for it. **The site was read before you finished typing it.** A hostname parses several characters before it is done — "acme.c" and "acme.co" both do — so typing one domain issued three scans, two against sites nobody meant. `requestScan` now waits 700ms for typing to stop. It also became referentially stable, which was worth having on its own: its identity used to change on every completed scan, re-firing the effect in BrandScanBanner that calls it and forcing CreateOrgForm to hold it through a ref just to keep its own handlers stable. **Stacked logo slots printed their captions over the logo.** The slot was `h-full` with a `flex-1` image area, and the only definite height in that chain came from the band — which is `lg`-only. Once the columns stacked, the image area collapsed and the file name, size and Remove/Replace buttons landed on top of the image. The compact slot now stands at its own height with a fixed image box, so the caption is always below. The band is taller for it, which is the point: the candidate list beside it shows five logos at a time instead of three. **The pager points left and right.** The list runs down the panel, so up/down was the literal reading, but nobody reads pagination that way. The wiring test is new and is the one that would have caught the first bug: the pure rule was correct and simply never reached, which is indistinguishable from a broken rule until something mounts the real form, the real provider and the real field group together and watches a scan land.