Extensions like ColorZilla inject attributes (cz-shortcut-listen) into
<body> before React hydrates, causing a benign hydration mismatch.
suppressHydrationWarning on <body> is the standard fix; it only ignores
attribute diffs on <body> itself, not its children.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- globals.css: lighten --background (content panel) and deepen --sidebar so
the panel reads as a lighter neutral charcoal floating on a near-black rail,
matching the Polar reference. Pure lightness change; panel stays below
--card so cards still pop.
- patient-cards.tsx: row uses items-stretch so all cards share one height
(no more ragged/taller cards); add no-scrollbar to hide the horizontal
scrollbar while keeping scroll.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- globals.css: thin dark-themed scrollbar (Firefox + WebKit) so scroll
areas no longer show the white default; `no-scrollbar` regions still win.
- patient-cards.tsx: render the cards in a horizontal scroll row (each
w-80 shrink-0 snap-start), loading skeletons included.
- chat-input.tsx: wire the controls — Attach opens a file picker with
removable chips; Access / response mode / specialty / facility / time
range are real DropdownMenu radio selectors (via a SelectPill helper)
that remember the choice. Mic stays visual-only for now. Layout/styling
unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- chat-panel.tsx: `/10293` now triggers a lookup, not just `/patient 10293`
(regex accepts an optional `patient` keyword; matches digits only so
`/help` etc. still fall through to the normal reply).
- app/layout.tsx: make <body> a fixed h-dvh, overflow-hidden shell so the
page no longer shows its own scrollbar; each route's SidebarInset already
scrolls internally (chat = overflow-hidden, settings = overflow-y-auto).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>