Three polish fixes from a publisher's view in Theseus:
1. The redundant "1 · Upload the binary" h2 under a progress indicator
that already said "Upload" is gone. The step indicator IS the step
content now — each step is one <article> card whose head is always
visible (number + title + state chip) and whose body opens only when
that step is current.
2. Upload input became a proper drag-and-drop zone. 46 px tall, dashed
border that lights up acid on dragover (and the whole card wobbles
1% so there's no doubt the drop will land). Click opens the file
picker; drop handles files directly.
3. Step headers are clickable. A publisher can jump back to any
completed step to re-check or edit (canReach() guards: step 4 can't
be clicked if step 3 hasn't produced a signature yet). The head's
sub-text updates as each step completes:
1 · "Upload" → "theseus-setup.exe · 137 MiB · $1 listing fee"
2 · "Describe" → "My App by foo.x · browsers · v1.0.0"
3 · "Sign" → "signed · IJIEBM6U…"
Internals:
- One <article data-step="N" data-state="current|complete|pending"> per
step. CSS keys off data-state for the open/closed body and the chip's
colour. One setState() helper, one show(n) that walks the four and
decides each's state based on canReach() + hasStepData(n).
- scroll-to-top replaced by scrollIntoView on the active card, so a
publisher who jumps back to step 2 after reaching step 4 lands on the
step-2 header, not the hero.
- acceptSignature(base64, how) is now one path used by both the Theseus
wallet handler and the paste listener — stops the two from drifting
on what counts as "signature captured".