Skip to content

Build Services page: hero, linked decisions, and service clusters (LS-1598) - #51

Open
brandonmarshal wants to merge 6 commits into
developfrom
feature/ls-1598-build-services-page
Open

Build Services page: hero, linked decisions, and service clusters (LS-1598)#51
brandonmarshal wants to merge 6 commits into
developfrom
feature/ls-1598-build-services-page

Conversation

@brandonmarshal

@brandonmarshal brandonmarshal commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Builds the Services page in three patterns: the hero, a six-step "linked decisions" process row, and a service-clusters section grouping all 14 services into 5 thematic cards. No new colour tokens, font sizes, or global styles were needed — everything reuses existing semantic tokens, presets, and card shells.

Hero (patterns/hero/services-hero.php)

  • Breadcrumb, eyebrow, heading, description, primary/secondary CTAs
  • A wrapped row of all 14 service tags, colour-coded by lifecycle phase (Discover/Create/Build/Launch/Grow/Evolve) to match the mega-menu convention, each linking to its real /services/ page
  • A decorative "Services / Lifecycle" preview card reusing the existing is-style-glass-card shell
  • Interactive pill states (hover/focus-within background/border tint, lift, shadow, :focus-visible ring) added via src/scss/structural/services-hero.scss, since block-supports has no equivalent for hover/focus-visible
  • Fixed the breadcrumb-to-badge gap reading too tight (eyebrow badge top margin bumped from spacing|20 to spacing|30)

Linked decisions (patterns/sections/services-linked-decisions.php)

  • Six-step process pill row (Discover/Create/Build/Launch/Grow/Evolve) matching the site's lifecycle-phase colours, linking to new /services/ phase pages
  • Neutral pills with a phase-only badge, hover/focus-within states, :focus-visible outline
  • Fixed the whole-pill click target on both hero and this section's pills — previously only the text was clickable; the anchor now stays position:static so its ::before overlay sizes against the full pill, not just the text
  • Added src/scss/structural/services-linked-decisions.scss for the states/pseudo-elements JSON can't express

Service clusters (patterns/sections/services-service-clusters.php)

  • Five cluster cards in an asymmetric 3+2 layout, each with an icon well, index number, description, and a footer row of clickable tag links to the individual service pages
  • New shared card shell styles/sections/cards/card-cluster.json — no existing shell fit, since background and single-link behaviour differ from Card - Category
  • Equal card height via dimensions.minHeight:100%, footer tags pinned to the bottom via margin-top:auto
  • Fixed a real bug: the second card row's blockGap was nested outside spacing instead of inside it, silently falling back to WordPress's default gap instead of matching row 1
  • Distinguished the section's background from Section 1's using the existing surface.card token, matching homepage-what-we-build's established alternating-section convention
  • Added src/scss/structural/services-service-clusters.scss for the tag hover states

Test plan

  • php -l on all touched PHP files — passes
  • npm run schema:validate — all JSON files, including the new card-cluster.json, pass
  • npm run patterns:escape — the only warnings are in the two new files' pre-existing icon-echo lines, each already phpcs:ignore-annotated with justification (static, developer-authored SVG, not user input)
  • npm run security:scan — passes clean on every file this branch touches
  • sass compiles all three new stylesheets clean
  • Manual visual QA of hero, linked-decisions, and service-clusters sections in the Site Editor/frontend
  • Confirm pill/tag hover, focus-visible, and click-target fixes behave correctly across breakpoints

Tracked under LS-1598.

@brandonmarshal brandonmarshal added area:theme Theme & styles (templates, template parts, FSE) comp:block-patterns Patterns library/registration comp:theme-json Tokens, presets, settings lang:css Stylesheets lang:json JSON config/content lang:php PHP code labels Sep 10, 2026
@linear-code

linear-code Bot commented Sep 10, 2026

Copy link
Copy Markdown

LS-1598

@brandonmarshal brandonmarshal self-assigned this Sep 10, 2026
brandonmarshal added a commit that referenced this pull request Sep 10, 2026
Context
- Documents the Services page hero, linked-decisions, and service-clusters patterns added in PR #51
@brandonmarshal
brandonmarshal added this pull request to stack #52 September 10, 2026 05:51
@brandonmarshal
brandonmarshal requested a lite review from Copilot September 10, 2026 06:42

Copilot AI 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.

🟡 Changes recommended

Unresolved moderate findings remain around asset loading, missing service links, and ineffective hover/focus states.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Builds the Services page with a hero, lifecycle decision links, and five service-cluster cards.

Changes:

  • Adds 14 service links and six lifecycle phases.
  • Adds clustered service cards with shared styling.
  • Adds interaction styles, compiled assets, registration, and documentation.
File summaries
File Summary
styles/sections/cards/card-cluster.json Adds the cluster card style. Nit (2 votes): avoid exposing a one-off global style or provide another reusable consumer.
src/scss/structural/services-service-clusters.scss Adds cluster tag interactions. Moderate (3 votes): inline colors override hover/focus tint declarations.
src/scss/structural/services-linked-decisions.scss Adds lifecycle pill interactions. Moderate (3 votes): inline border color prevents the hover/focus tint from applying.
src/scss/structural/services-hero.scss Adds hero pill interaction styles.
patterns/sections/services-service-clusters.php Adds five cluster cards. Moderate (3 votes): four services are missing from cluster metadata. Moderate (2 votes): shared icon-well styles load only after render.
patterns/sections/services-linked-decisions.php Adds the six-step lifecycle process row.
patterns/hero/services-hero.php Adds the Services hero and 14 service links.
package.json Adds Sass build entries.
inc/animations.php Registers and detects Services bundles. Moderate (3 votes): add head-time Services-page conditions for these bundles and their shared dependency.
functions.php Registers editor styles.
CHANGELOG.md Documents the Services page changes.
assets/css/services-service-clusters.css Provides compiled cluster styles.
assets/css/services-linked-decisions.css Provides compiled lifecycle styles.
assets/css/services-hero.css Provides compiled hero styles.
Review details

Files not reviewed (3)

  • assets/css/services-hero.css: Generated file
  • assets/css/services-linked-decisions.css: Generated file
  • assets/css/services-service-clusters.css: Generated file
  • Files reviewed: 11/14 changed files
  • Comments generated: 6
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread inc/animations.php
Comment thread patterns/sections/services-service-clusters.php
Comment thread patterns/sections/services-service-clusters.php
Comment thread src/scss/structural/services-linked-decisions.scss Outdated
Comment thread src/scss/structural/services-service-clusters.scss Outdated
Comment thread styles/sections/cards/card-cluster.json
Comment thread patterns/sections/services-service-clusters.php
Hero
- Add patterns/hero/services-hero.php: breadcrumb, eyebrow, heading,
  description, and primary/secondary CTAs
- Add wrapped row of all 14 service tags, colour-coded by lifecycle
  Phase (Discover/Create/Build/Launch/Grow/Evolve) to match the
  mega menu convention, each linking to its real /services/ page
- Add decorative "Services / Lifecycle" preview card reusing the
  existing is-style-glass-card shell

Tokens & assets
- No new colour tokens, font sizes, or global styles required —
  reuses existing semantic tokens and presets throughout
- Source fresh Phosphor "regular" icons, embedded as real SVG markup

Validation
- php -l, patterns:escape, security:scan, and phpcs --standard=WordPress
  all pass clean on the new pattern
Layout fix
- Fix breadcrumb-to-badge gap reading too tight by bumping the
  eyebrow badge's top margin from spacing|20 to spacing|30

Service pill styling
- Switch pill label text to neutral text.default, keep icons
  phase-coloured for lifecycle-phase association
- Add a subtle phase-tinted background and phase-tinted border
  to each pill (colour-mix over existing phase tokens)
- Increase pill padding for a larger, more substantial pill
- Add hover/focus-within state: stronger background/border tint,
  translateY(-1px), subtle shadow
- Add a :focus-visible outline ring for keyboard accessibility

New structural stylesheet
- Add src/scss/structural/services-hero.scss for the pill
  interactive states (no block-supports equivalent exists for
  hover/focus-visible), wired into build scripts and the
  bundle-detection/enqueue system the same way as other hero
  bundles (inc/animations.php, functions.php editor styles)

Context
- Rest-state pill colours are set inline per instance (each pill
  mixes its own phase token); hover/focus overrides need
  !important to beat that inline specificity, documented in the
  stylesheet
…598)

- Add patterns/sections/services-linked-decisions.php: six-step process
  pill row (Discover/Create/Build/Launch/Grow/Evolve) matching the
  site's lifecycle-phase colours, linking to new /services/ phase pages
- Neutral pills with phase-only badge, hover/focus-within states,
  :focus-visible outline
- Fix whole-pill click target on both hero and Section 1 pills — only
  the text was clickable before; anchor now stays position:static so
  its ::before overlay sizes against the full pill, not just the text
- Add src/scss/structural/services-linked-decisions.scss for the
  states/pseudo-elements JSON can't express, wired into build/enqueue
- Correct services-hero.scss's CSS-limitation comments to AGENTS.md's
  exact format
- Add patterns/sections/services-service-clusters.php: "Five ways the
  work groups together" — 5 cluster cards in an asymmetric 3+2 layout,
  each with an icon well, index number, description, and a footer row
  of clickable tag links to the existing individual service pages
- Add styles/sections/cards/card-cluster.json: new shared card shell
  (no existing one fit — background and single-link behaviour differ
  from Card - Category)
- Add src/scss/structural/services-service-clusters.scss for the tag
  hover states, wired into build/enqueue like the other sections

Fixes
- Equal card height via dimensions.minHeight:100%, footer tags pinned
  to the bottom via margin-top:auto
- Fix a real bug: second card row's blockGap was nested outside
  spacing instead of inside it, silently using WordPress's default
  gap instead of matching row 1
- Distinguish the section's background from Section 1's using the
  existing surface.card token (matches homepage-what-we-build's
  established alternating-section convention)
Context
- Documents the Services page hero, linked-decisions, and service-clusters patterns added in PR #51
Bug fix
- services-service-clusters.php: fix both card rows' blockGap only
  setting its horizontal component, which fell back to WordPress's
  default vertical gap once columns stack on mobile/tablet
- services-linked-decisions.scss: add !important to the pill's hover
  border-color so it actually overrides the inline rest-state color
- services-service-clusters.scss: add !important to the cluster tag's
  hover background/border-color, same cause as above
- inc/animations.php: add a Services-page condition to the shared
  icon-well bundle so it loads in <head> instead of only being caught
  by the render_block/footer fallback
@brandonmarshal
brandonmarshal force-pushed the feature/ls-1598-build-services-page branch from 93e9795 to 601f310 Compare September 11, 2026 12:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:theme Theme & styles (templates, template parts, FSE) comp:block-patterns Patterns library/registration comp:theme-json Tokens, presets, settings lang:css Stylesheets lang:json JSON config/content lang:php PHP code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants