Skip to content

Unified mode homes, branded sidebar, and global header/footer across all pages - #171

Merged
BigSimmo merged 8 commits into
mainfrom
claude/mode-home-shared-shell
Jul 2, 2026
Merged

Unified mode homes, branded sidebar, and global header/footer across all pages#171
BigSimmo merged 8 commits into
mainfrom
claude/mode-home-shared-shell

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • Rebuild every mode home screen (Services, Forms, Favourites, Differentials, Medications, Tools, Documents) on the shared Answer-foundation template: centred hero, search below the title, symmetric action cards, centred pills, shared verification footer
  • Render the shared desktop/mobile sidebar + dialogs on the standalone routes and unify header branding to "Clinical Guide"
  • Global footer composer (floating pill + Evidence/Sources chips) on all mobile homes; modernised frosted/elevated chat bar styling
  • New BrandMark logo + site title in the sidebar, icon.svg favicon, fixed collapsed-rail black-highlight bug, localStorage-persisted collapse state, Differentials rail/grid entries
  • Roll the global header + sidebar out to /applications and /medications, deleting their hand-rolled local header copies (net -363 lines); slim unified mode pill and New chat treatment

Verification

  • typecheck + lint clean; 815 unit tests pass
  • Playwright (Chromium): full ui-tools suite (21/21), focused ui-smoke suites (dashboard overflow at 6 viewports, account settings, favourites, prescribing workflow, document search), ui-accessibility
  • Desktop + mobile screenshot QA in light/dark, including collapsed rail and mobile slide-in menu

Clinical governance preflight

  • UI chrome/layout only: no changes to ingestion, answer generation, search/ranking, source rendering, document access, privacy, or production env

🤖 Generated with Claude Code

BigSimmo and others added 6 commits July 2, 2026 15:53
All mode home screens (Services, Forms, Favourites, Differentials,
Medications, Tools, Documents) now share the Answer home structure:
centred hero with the search composer below the title, symmetric
3-card actions, centred quick-link pills, and a shared verification
footer via ModeHomeTemplate/ModeHomeHero/ModeHomeMain.

- Rebuild Services and Forms homes on ModeHomeTemplate; delete the
  diverged CompactRecordHomePage copy
- Give FavouritesHub and the dashboard Tools launcher the shared
  centred hero and desktop composer slot
- Render the shared desktop/mobile sidebar, Guide and Settings dialogs,
  and header utility menu in GlobalMockupSearchShell so /services,
  /forms, /favourites, and /differentials match the dashboard shell
- Unify standalone header branding to "Clinical Guide" + mode
  description (removes per-mode Navigator titles)
- Vertically centre Documents/Medications/Differentials home states in
  the dashboard and the standalone differentials home

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t bar

- Render the Evidence/Sources footer chips for every mobile home
  composer (universal footer style), not just Answer, so all modes
  share the same floating global footer on phones
- Reserve taller bottom padding on mobile so home content clears the
  taller footer (mode home main + shell content wrapper)
- Modernise the floating chat pill: frosted translucent surface with
  backdrop blur, layered elevation shadows, hover/focus states, softer
  border, roomier internal spacing; matching treatment for the desktop
  hero pill and larger touch-friendly footer chips with hover states
  and a press affordance on the send button (reduced-motion safe)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d rail

- New BrandMark logo (teal tile + ECG pulse, token-driven) at the top of
  the sidebar with the site title, in the mobile slide-in menu header,
  and as src/app/icon.svg favicon (dark-scheme aware)
- Remove header identity block, "Local only"/"Saved"/"AK" chips, and the
  "..." utility menu (theme/settings live in the sidebar); drop the now
  unused header props and normalise header height across shells so the
  global header is just burger + centred mode pill + new chat
- Collapsed rail: remove the graphite expand button (black-highlight
  bug); the brand mark now doubles as the expand affordance with a
  hover/focus reveal, plus a hairline group separator
- Persist sidebar collapse in localStorage via useSidebarCollapsed so
  the dashboard and standalone shells stay in sync across routes
- Harden the flaky differentials home geometry probe with a retry poll
  (Suspense swap after client navigation briefly detaches the heading)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gives /differentials the same active-state treatment as the other
modes: a "Diffs" tile in the sidebar Tools grid (now a symmetric 4x2)
and a BrainCircuit rail icon with the accent-soft active highlight.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Shell /applications and /medications routes with the shared
  GlobalSearchShell (sidebar + global header) instead of their
  hand-rolled local header copies: delete the launcher's imitation
  header/mode-menu/mobile-menu (~280 lines) and demote the medication
  page's local header to an in-page back link
- Add a searchComposerVisible shell prop so routes with their own
  search surface (/applications) show the header without a duplicate
  composer, with bottom padding adjusted to match
- Header polish: mode pill always shows the MODE eyebrow + label and
  auto-sizes (no per-page description variants), one New chat
  treatment everywhere, and the redundant absolute-centring
  modeAlignment prop is removed (the symmetric grid centres the pill)
- Update the launcher test to the shared header's Tools mode label

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e47dc95b0e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/components/clinical-dashboard/master-search-header.tsx
@BigSimmo
BigSimmo enabled auto-merge (squash) July 2, 2026 11:20
@BigSimmo
BigSimmo merged commit 822b232 into main Jul 2, 2026
5 of 7 checks passed
BigSimmo added a commit that referenced this pull request Jul 2, 2026
The "purple" mode-home pill tone (Youth service pathway dot) used a raw
Tailwind palette color, the only non-token color introduced by #171. It
did not adapt to dark mode or forced-colors like the surrounding tokens.
Add --tone-purple (light #7c3aed == violet-600 so light mode is
unchanged; brighter #a78bfa on dark; CanvasText under forced-colors) and
reference it via bg-[color:var(--tone-purple)].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
BigSimmo added a commit that referenced this pull request Jul 2, 2026
…cal)

The header + mode pill was the source of the recurring overlap/shadow
bugs. Move edge-glass-header (+ responsive padding), universal-header,
universal-header-mode-button, and universal-header-icon-control into
@layer components so Tailwind utilities on those elements now win instead
of silently losing to the unlayered class.

Reconciled the three shadow conflicts so rendered output is unchanged:
drop the dead shadow-[var(--shadow-tight)] on the two edge-glass-header
headers (class already sets box-shadow:none), and drop
shadow-[var(--shadow-inset)] on the mode button and the New-chat icon
control so the layered class supplies its shadow directly (avoids
Tailwind's shadow utility injecting transparent ring-placeholder layers).

Verified byte-identical computed styles across 16 states
(home/answer/focus/document x mobile/desktop x light/dark) with
scripts/capture-chrome-parity.ts. The frosted COMPOSER chrome stays
unlayered (deferred): PR #171 pushed it to ~92 conflicts in shared
ui-primitives constants; tracked in docs/process-hardening.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@BigSimmo
BigSimmo deleted the claude/mode-home-shared-shell branch July 2, 2026 16:31
BigSimmo pushed a commit that referenced this pull request Jul 31, 2026
Two small things, both about not hiding information.

A zero-count facet used `disabled`, which drops it out of the tab order. A
keyboard or screen-reader user then loses the row entirely and never learns why
it went quiet — and a `title` on a disabled control is not reliably announced.
It now uses `aria-disabled` with the click guarded, so the row stays focusable
and carries an sr-only explanation via `aria-describedby`. That is the
disabled-affordance pattern docs/wiring-conventions.md already describes.

`#175` corrects `#171`, which is already on main. `#171` claims the documents
source-type control duplicates the `Document type` facet group. It does not,
and the claim was made from a shared word rather than from the code:
`resultTypeTabs`/`filterMatchesByResultType` filter on artefact properties —
tableCount, imageCount, a .pdf extension — while the `Document type` facet
comes from `document_type` labels meaning policy, guideline, form. A guideline
containing a table is both. They are complementary axes.

The real duplication is the scope chip `tables` against the source-type
`Tables` tab. The merge `#171` recommends is still worth doing, but source-type
becomes its own group rather than being absorbed, and the scope chips are the
part that folds away. `#171`'s separate claim that `Sources` is navigation
stands.

The correction is appended rather than edited in: the ledger is append-only,
and `#158` is precedent for keeping a withdrawn finding on record so it is not
re-filed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Akwz3Sdms8uJ5AkDt3CduY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant