diff --git a/apps/web/src/app/showcase-deck.tsx b/apps/web/src/app/showcase-deck.tsx
index 0977ed5..b706fef 100644
--- a/apps/web/src/app/showcase-deck.tsx
+++ b/apps/web/src/app/showcase-deck.tsx
@@ -66,22 +66,36 @@ export function ShowcaseDeck({
the drag gesture and never has to stay legible on a bright image. */}
{selected ? (
- setCategoryId(null)}>
+ setCategoryId(null)}>
{selected.name}
-
+ Show all trades
) : (
-
+ // The strip scrolls sideways through every trade. The right-hand fade
+ // is the only affordance saying so — the scrollbar is hidden, and a
+ // row that simply ends at the bezel reads as the whole list.
+
diff --git a/apps/web/src/components/ui/chip.tsx b/apps/web/src/components/ui/chip.tsx
index aed9438..c2b50cb 100644
--- a/apps/web/src/components/ui/chip.tsx
+++ b/apps/web/src/components/ui/chip.tsx
@@ -9,18 +9,28 @@ import { cn } from '@/lib/utils';
*/
export function Chip({
selected = false,
+ size = 'md',
className,
children,
...props
-}: React.ButtonHTMLAttributes & { selected?: boolean }) {
+}: React.ButtonHTMLAttributes & {
+ selected?: boolean;
+ /**
+ * 'sm' is for dense horizontal strips — the trade filter has to fit four
+ * trades across a 390px phone before the fifth is cut off as a scroll hint.
+ * 'md' stays the default everywhere a chip is a primary choice.
+ */
+ size?: 'sm' | 'md';
+}) {
return (
);