{/* fixed sections: flexShrink: 0 */}
{/* filling section: flex: 1, minHeight: 0 */}
```
Cards that scroll internally: `display: flex, flexDirection: column, minHeight: 0` + inner `overflowY: auto, flex: 1, minHeight: 0`
### File browser paths (per role)
- `team`: `/Clients/{Co}/Projects/{Proj}/{Task}` (real path)
- `client`: `/{Co}/Projects/{Proj}/{Task}` (virtual — no `/Clients/` prefix)
- `external`: `/Projects/{Proj}/{Task}` (virtual)
## Empty states
Use `.card-empty-center` class for all "No …" messages inside cards.
## Key files
- `layout.md` — visual spec, always check before building new UI
- `src/index.css` — global tokens and shared classes
- `src/components/SortTh.jsx` — sortable table header
- `src/components/StatusBadge.jsx` — status tags
- `src/lib/popupStyles.js` — modal overlay/surface styles
- `api/filebrowser.js` — file browser API (Vercel serverless)
- `supabase/functions/fbq-proxy/` — Supabase edge function for FileBrowser Quantum
## Team Performance calculation
Source: `deliveries` table (not `tasks`).
Each row in `deliveries` = one unit of work by one person:
- `sent_by` — name of person who submitted the work
- `version_number` — 0 = new task delivery, 1+ = revision delivery
- `sent_at` — when submitted (bucketed by EST month)
Rules:
- R00 → `newCount += 1` for `sent_by`
- R01, R02, R03… → `revCount += 1` each for `sent_by`
- Same task can have deliveries by different people — each counts independently
- Task status is **ignored** — a delivery record means work was done regardless of current task status (task goes back to `not_started` when revision is requested)
- Top 5 by total (new + revisions) shown per month
- Months shown only if delivery data exists for that month (EST timezone)