# TrustStrip Redesign — Bold & Impactful Stats Strip

**Goal:** Replace the minimal icon+text trust strip with a visually impactful stats section featuring large animated numbers, richer descriptors, and a polished gradient background.

**Tech Stack:** React 19, Tailwind CSS, lucide-react icons, existing `useInView` hook

---

## Stats Data

| Number | Suffix | Descriptor             | Icon       | Animated          |
| ------ | ------ | ---------------------- | ---------- | ----------------- |
| 20     | +      | Years in Japan         | Clock      | Yes               |
| 100    | %      | English Support        | Globe      | Yes               |
| 10,000 | +      | Customers Served       | Users      | Yes               |
| —      | —      | Foreign Cards Accepted | CreditCard | No (static label) |

## Layout

- Full-width strip between HeroSection and ServicesCarousel (same position as current)
- 4 stats centered in a row with vertical dividers between them on desktop
- Mobile: 2x2 grid, no dividers
- Each stat: icon in soft primary-tinted circle, large bold number, small muted descriptor below

## Visual Treatment

- **Background**: subtle gradient `from-surface-sunken via-background to-info-bg/30` — no hard borders, blends with hero
- **Vertical dividers**: thin `border-border/30` lines between stats (desktop only)
- **Numbers**: `text-3xl sm:text-4xl font-extrabold text-primary`
- **Descriptors**: `text-sm text-muted-foreground font-medium`
- **Icon circles**: `w-10 h-10 rounded-full bg-primary/10` with `text-primary` icon inside
- **4th stat** ("Foreign Cards Accepted"): displays as bold label text with same visual weight, no count-up

## Animation

- Existing `useInView` hook detects when strip enters viewport
- New `useCountUp(target, duration, enabled)` hook animates number from 0 → target over ~1.5s using `requestAnimationFrame`
- Staggered start: 0ms, 100ms, 200ms delays for the 3 animated stats
- Entire strip fades in (`opacity-0 translate-y-8` → `opacity-100 translate-y-0`) matching other sections

## Component Structure

- **TrustStrip.tsx** — `"use client"`, contains stat data array + layout, uses `useInView` and `useCountUp`
- **useCountUp.ts** — new hook: `useCountUp(target: number, duration?: number, enabled?: boolean)` returns current animated value
- Exported from existing barrel files (`hooks/index.ts`, `components/index.ts`)

## Files Changed

1. **Modify**: `apps/portal/src/features/landing-page/components/TrustStrip.tsx` — complete rewrite
2. **Create**: `apps/portal/src/features/landing-page/hooks/useCountUp.ts` — new hook
3. **Modify**: `apps/portal/src/features/landing-page/hooks/index.ts` — add `useCountUp` export

## Accessibility

- `aria-label="Company statistics"` on the section
- Numbers use semantic text (not images)
- Respects `prefers-reduced-motion`: skip count-up animation, show final values immediately
