Skip to content

design(reports): mirror the nav treatment on the stakeholder deck (Option C)#3681

Open
gloriafolaron wants to merge 4 commits into
masterfrom
chrome/report-deck-nav
Open

design(reports): mirror the nav treatment on the stakeholder deck (Option C)#3681
gloriafolaron wants to merge 4 commits into
masterfrom
chrome/report-deck-nav

Conversation

@gloriafolaron

Copy link
Copy Markdown
Contributor

Carved off master from integrate/report-chrome (2 commits, deck template only — the stray app/Plugins submodule bump was dropped).

What's in it

  • The stakeholder report deck's 4-tab navigation becomes the same gradient nav bar as the app-wide .tabs (Option C): a single white card sitting under a gradient tab strip, framed tab group, active tab as a white chip.
  • Uses the deck's own scoped .rd-* inline styles (no global CSS change here).

Relationship to #3680

Soft dependency only: the deck references --nav-scrim for the light-accent contrast scrim, which #3680 (header.blade.php) defines. Standalone, the deck's var(--nav-scrim, 0) falls back to 0 (no scrim) and still renders correctly — so this can merge in any order. Merging #3680 first gives the scrim on light themes.

Single file: app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php.

🤖 Generated with Claude Code

gloriafolaron and others added 2 commits July 21, 2026 17:43
- Tab bar becomes a gradient nav strip (accent1→accent2) sitting on the
  app gradient above the content; active tab is a white pill, inactive
  tabs muted white. Reads as navigation, not a button group.
- Deck now owns its .maincontentinner card, wrapping only the pages, so
  the nav bar can live outside/above it. Vanilla-JS deck nav unchanged.
- Seam fix: removed the deck's own drop-shadow — it was a card-inside-a-
  card, drawing a shadow band under the tabs (the "two whites").
- --rd-bg #fafbfb → #fff so inset tiles match the solid-white cards.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYSPNgLdUwEnxgYqTxMc85
Brings the report's .rd-tabs in line with the global .tabs nav:
- Tabs wrapped in a framed segmented group (.rd-tab-group) so Overview /
  Logic Model / Resources / Impact Journey read as one connected control with
  the active tab a white segment inside it.
- Conditional dark scrim via --nav-scrim (same per-theme luminance check as the
  header) so white controls clear WCAG AA on light accents — verified: inactive
  tabs 6.6:1, active 10:1, picker 15:1.
- Removed the nav-bar drop shadow so it reads connected to the content card.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYSPNgLdUwEnxgYqTxMc85
(cherry picked from commit 3f453d106de3c0c187029222b03bc85ac3b2b3a8)
@gloriafolaron
gloriafolaron requested a review from a team as a code owner July 21, 2026 21:44
@gloriafolaron
gloriafolaron requested review from broskees and Copilot and removed request for a team July 21, 2026 21:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Aligns the Stakeholder Report “deck” navigation UI with the app-wide gradient tabs (Option C), so the deck reads as part of the same chrome system (gradient strip + framed segmented tabs + active tab as a white pill) while keeping styles scoped to the report deck partial.

Changes:

  • Restyled the deck’s tab bar to use an accent gradient strip with a framed segmented tab group and updated active/hover states.
  • Removed the deck-local header card (subject/meta/verdict) to rely on the shared page header.
  • Adjusted the deck container styling and wrapped the deck content in a .maincontentinner card for a cohesive “single surface” layout.
Comments suppressed due to low confidence (1)

app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php:176

  • The prev/next arrow buttons also lack a :focus-visible treatment; on keyboard navigation it’s hard to see where focus is on the gradient strip.
.rd-arrow{background:var(--rd-panel);border:1px solid var(--rd-line);border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--rd-text-2);}
.rd-arrow:hover{color:var(--rd-text-1);border-color:var(--rd-text-4);}
.rd-arrow[disabled]{opacity:.4;cursor:not-allowed;}

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 90 to 94
--rd-line:#e3e8ea;
--rd-line-soft:#eef1f3;
--rd-bg:#fafbfb;
--rd-bg:#fff;
--rd-panel:#fff;
--rd-ok:#3E937A;
/* Nav bar: accent gradient + conditional dark scrim (--nav-scrim, set per-theme
in the header for light accents that fail contrast), NO shadow — so it reads
connected to the content, mirroring the global .tabs nav. */
.rd-tabs{display:flex;align-items:center;gap:12px;margin-bottom:10px;background:linear-gradient(rgba(0,0,0,var(--nav-scrim,0)),rgba(0,0,0,var(--nav-scrim,0))),linear-gradient(90deg,var(--accent1),var(--accent2));border-radius:14px;box-shadow:none;padding:7px 10px;}
Comment on lines +167 to +169
.rd-tab{background:none;border:none;font:inherit;font-size:14px;font-weight:500;color:rgba(255,255,255,.85);padding:8px 15px;cursor:pointer;display:inline-flex;align-items:center;gap:7px;border-radius:9px;transition:color .15s,background .15s;}
.rd-tab:hover{color:#fff;background:rgba(255,255,255,.16);}
.rd-tab.on{color:var(--rd-accent);font-weight:600;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.12);}
Comment on lines 300 to +303
{{-- ── Persistent header ────────────────────────────────────────── --}}
<div class="rd-hdr">
<div class="st">
<div class="h">{{ $subject }}</div>
<div class="prov">
{{ $scope === 'strategy' ? __('stakeholder.header.strategy_report') : __('stakeholder.header.program_report') }}
@if ($periodMeaning !== '') · {{ $periodMeaning }} @endif
· {{ __('stakeholder.header.updated') }} {{ $updatedAt }}
</div>
</div>
<div class="verdict">
<div class="v"><span class="dot" style="background:{{ $verdictDotColor }}"></span>{{ $verdictLabel }}</div>
<div class="src">{{ $verdictSource }}</div>
</div>
</div>
{{-- Header card removed: the subject switcher, meta sub-line, status verdict
and actions all now live in the shared pageheader (see report.blade.php),
so this second card was redundant. The deck starts straight at the tabs. --}}
- Add :focus-visible ring to the deck nav tabs (white on the gradient,
  accent on the active white chip) — keyboard nav was invisible.
- Give .rd-tabs accent gradient theme-var fallbacks (hsla defaults) so it
  still renders if --accent1/2 are absent in a given render context.
- Remove the now-dead .rd-hdr CSS block + its stale file-comment line;
  the Option C change dropped the deck's inline header markup.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYSPNgLdUwEnxgYqTxMc85
Copilot AI review requested due to automatic review settings July 22, 2026 00:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (2)

app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php:363

  • This inline comment references a plugin template file ("report.blade.php"), which makes the partial’s documentation brittle and hard to validate in this repo. Prefer describing the layout expectation generically (tabs on gradient; deck content inside a single card) without naming external templates.
    {{-- The white content card wraps ONLY the deck; the tab bar above sits on
         the app gradient (nav lives on the gradient, content lives in the card).
         The plugin's report.blade.php no longer adds an outer .maincontentinner. --}}
    <div class="maincontentinner">

app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php:295

  • With the persistent header removed from this partial, some header-only computed values and doc/vars are now stale: $verdictDotColor and $periodMeaning are no longer referenced anywhere in this file (and the docblock still lists header-related vars like $subject, $updatedAt, $verdictLabel, $verdictSource). Please remove the now-unused computations and update the docblock so it reflects what this partial actually consumes.
    {{-- ── Persistent header ────────────────────────────────────────── --}}
    {{-- Header card removed: the subject switcher, meta sub-line, status verdict
         and actions all now live in the shared pageheader (see report.blade.php),
         so this second card was redundant. The deck starts straight at the tabs. --}}

Comment on lines +144 to +148
/* Tab bar — sits ON the page background (matches the To-Dos Kanban·Table·List
pattern). Not on a panel. */
.rd-tabs{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.rd-tab{background:none;border:none;font:inherit;font-size:14px;font-weight:500;color:var(--rd-text-3);padding:6px 10px;cursor:pointer;display:inline-flex;align-items:center;gap:7px;border-radius:6px;transition:color .15s,background .15s;}
.rd-tab:hover{color:var(--rd-text-1);background:rgba(0,0,0,.03);}
.rd-tab.on{color:var(--rd-accent);font-weight:600;background:rgba(0,71,102,.06);}
/* Nav bar: horizontal tabs sit on their own gradient strip ABOVE the white
content card (the nav lives on the app gradient, the content in the card).
Reads as navigation tabs, not a button group. Active tab = white pill. */
@marcelfolaron

Copy link
Copy Markdown
Collaborator

Status: triaged / needs visual review · Priority: P3 (single-file, scoped styles) · Next action: eyeball the deck nav; merge after #3680 for the light-theme scrim · Owner: @marcelfolaron / @broskees

Automated maintainer first-response (advisory only — not an approval; merge authority stays with @marcelfolaron / @broskees). First review, at open (gloriafolaron, created 2026-07-21, single file: deck.blade.php).

1. Intent: Mirrors the app-wide nav treatment (Option C) onto the stakeholder report deck's 4-tab nav — a single white card under a gradient tab strip, framed tab group, active tab as a white chip — using the deck's own scoped .rd-* inline styles (no global CSS change). Carved off master from integrate/report-chrome; the stray app/Plugins submodule bump was correctly dropped.

2. Change requests (none blocking — scoped single-file design change):

  1. ✓ Scoped-.rd-*-only is the right containment. Keeping this to the deck's inline styles means it can't regress the app-wide nav that design(chrome): nav-bar redesign — glass pageheader, gradient tabs, Tasks board summary #3680 changes — the two design PRs stay independent. Good call dropping the submodule bump so this carries template-only.
  2. ◐ CR Documentation #1 — the soft dependency on design(chrome): nav-bar redesign — glass pageheader, gradient tabs, Tasks board summary #3680 is real but safe. The deck reads --nav-scrim (defined by design(chrome): nav-bar redesign — glass pageheader, gradient tabs, Tasks board summary #3680's header.blade.php) for the light-accent contrast scrim; standalone, var(--nav-scrim, 0) falls back to 0 (no scrim). So it renders correctly either order, but merge design(chrome): nav-bar redesign — glass pageheader, gradient tabs, Tasks board summary #3680 first to get the scrim on light themes — otherwise a light-accent stakeholder deck ships without the AA contrast scrim its sibling nav has.
  3. ◐ CR Gitignore #2 — verify against the dark-theme deck work in fix(reports): stakeholder deck dark theme + hero render bug #3674. fix(reports): stakeholder deck dark theme + hero render bug #3674 is the deck's dark-theme + hero-render fix. Confirm this nav restyle composes cleanly with fix(reports): stakeholder deck dark theme + hero render bug #3674's .rd-dark token layer — the active-tab white chip must not become a light patch in dark mode (the exact class of bug fix(reports): stakeholder deck dark theme + hero render bug #3674 is fixing). Eyeball the deck nav in dark mode specifically.

3. Acceptance checklist (must pass before merge):

  1. Deck nav renders correctly standalone (scrim falls back to 0) and with design(chrome): nav-bar redesign — glass pageheader, gradient tabs, Tasks board summary #3680 merged (scrim present on light themes) (CR Documentation #1).
  2. No dark-mode light-patch on the active-tab chip; composes with fix(reports): stakeholder deck dark theme + hero render bug #3674's .rd-dark layer (CR Gitignore #2).
  3. Blade compiles clean; CI green on this head.

4. CI status: ⚠️ Couldn't read check-runs this cycle — confirm green in the UI. Single scoped file, so risk is low; the visual check (dark mode + light-theme scrim) is what matters here, not the test suite.

Advisory only — not an approval, not marking ready, not merging. Merge authority stays with @marcelfolaron / @broskees.

Two overlapping comments described the same nav strip; merge into one accurate
comment (Copilot flagged the stale/duplicated pair).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GYSPNgLdUwEnxgYqTxMc85
Copilot AI review requested due to automatic review settings July 23, 2026 21:18

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (2)

app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php:150

  • The comment above the tab styles is now inaccurate (it says the tab bar sits on the page background / not on a panel), but the updated CSS implements a gradient nav strip above a white content card. Updating this comment will avoid confusion for future styling changes.
/* Tab bar — sits ON the page background (matches the To-Dos Kanban·Table·List
   pattern). Not on a panel. */
/* Nav bar: horizontal tabs on their own accent-gradient strip above the white
   content card — reads as navigation, not a button group. Conditional dark
   scrim (--nav-scrim, set per-theme in the header for light accents that fail
   contrast); NO shadow, so it reads connected to the content, mirroring the
   global .tabs nav. Active tab = white pill. */

app/Domain/Reports/Templates/partials/stakeholder/deck.blade.php:361

  • This comment claims a plugin template no longer adds an outer .maincontentinner, but the referenced template path isn’t present in this repo. Rewording to describe why the wrapper exists (nav strip vs content card) without referring to a specific file keeps this partial self-explanatory.
    {{-- The white content card wraps ONLY the deck; the tab bar above sits on
         the app gradient (nav lives on the gradient, content lives in the card).
         The plugin's report.blade.php no longer adds an outer .maincontentinner. --}}

Comment on lines +292 to +294
{{-- Header card removed: the subject switcher, meta sub-line, status verdict
and actions all now live in the shared pageheader (see report.blade.php),
so this second card was redundant. The deck starts straight at the tabs. --}}
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.

3 participants