Commit Graph
100 Commits
Author SHA1 Message Date
Keith Solomon d4a3e0a6c8 🐞 fix: Make Services pages show the correct hero
Deploy to Dreamhost (dev) / build (push) Successful in 33s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
2026-07-05 13:28:25 -05:00
Keith Solomon 36cf891659 fix(header): adjust hero section display logic for non-front pages
Deploy to Dreamhost (dev) / build (push) Successful in 35s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
fix(nav-aux): update padding for auxiliary navigation container
2026-07-05 12:15:26 -05:00
Keith Solomon 19d4dfd89c Merge branch 'main' of ssh://git.keithsolomon.net:222/Solo-Web-Works/CWC
Deploy to Dreamhost (dev) / build (push) Successful in 35s
Sync TODOs with Issues / sync_todos (push) Successful in 5s
2026-07-05 12:07:59 -05:00
Keith Solomon d56ec2ac96 build: regenerate dist with blog post card styles 2026-07-05 11:08:19 -05:00
Keith Solomon a15209e176 test(blog): assert Read more link is present in the first card 2026-07-05 11:04:09 -05:00
Keith Solomon aafea68342 feat(blog): style the post card body, title, byline, and Read more link 2026-07-05 11:01:06 -05:00
Keith Solomon 77f3a0dd3c feat(blog): add Read more link to post card 2026-07-05 10:54:34 -05:00
Keith Solomon 02f9999621 🐞 fix: Update header/hero to swap based on service page children
Deploy to Dreamhost (dev) / build (push) Successful in 34s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
2026-07-05 10:36:27 -05:00
Keith Solomon 8caa787ff6 feat(blog): add Read more link to post card 2026-07-05 10:35:13 -05:00
Keith Solomon 53270c694e docs(blog-card): add post card styling implementation plan 2026-07-05 10:32:35 -05:00
Keith Solomon 9b76d7bacf docs(blog-card): add post card styling design spec 2026-07-05 10:29:26 -05:00
Keith Solomon 2d3d93aa89 🐞 fix: Adjust editor font
Deploy to Dreamhost (dev) / build (push) Successful in 34s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
2026-07-04 21:30:28 -05:00
Keith Solomon 702a2e3b74 test(blog): add blog-page Playwright spec 2026-07-04 20:35:46 -05:00
Keith Solomon a7fc6c974c build: regenerate dist with blog post-list styles 2026-07-04 20:32:22 -05:00
Keith Solomon cb0c8864f7 feat(blog): style the post-list page title 2026-07-04 20:29:54 -05:00
Keith Solomon 66073c0846 feat(blog): add page title and trim post card to image + title + byline 2026-07-04 20:26:59 -05:00
Keith Solomon a26b5c66c1 docs(blog): add blog layout spec and plan 2026-07-04 20:25:20 -05:00
Keith Solomon 54608c2be4 docs(spec): record the 2026-07-04 hero-scope revision (Services-only) 2026-07-04 19:54:06 -05:00
Keith Solomon ee9c9ce992 test(hero): update blog-index test to assert no hero (Services-only gate) 2026-07-04 19:53:23 -05:00
Keith Solomon 2fb1d67bb0 fix(hero): remove non-Services bypasses so the hero only renders for Services descendants 2026-07-04 19:52:33 -05:00
Keith Solomon 0a19256310 🐞 fix: Adjust mobile styles for contact block
Deploy to Dreamhost (dev) / build (push) Successful in 33s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
2026-07-04 19:40:01 -05:00
Keith Solomon 001b8c07c3 🐞 fix: Adjust dropdown z-index so the menu shows up above the map
Deploy to Dreamhost (dev) / build (push) Successful in 34s
Sync TODOs with Issues / sync_todos (push) Successful in 6s
2026-07-04 19:36:30 -05:00
Keith Solomon 01c6fb7831 feature: Set up contact info block and map
Deploy to Dreamhost (dev) / build (push) Successful in 34s
Sync TODOs with Issues / sync_todos (push) Successful in 7s
2026-07-04 19:22:26 -05:00
Keith Solomon 23ef7388eb tooling(test): add pre-flight script for hero gate rollout
Lists every published page on the site that has hero_style = 'default' and
is not a Services descendant. Those are the pages whose visible hero
behavior changes when isServicesDescendant() is enabled.

Runs from the WordPress root via:

    php bin/check-affected-pages.php

The script bootstraps wp-load.php, queries WP_Query for all 'page'
posts, filters by the ACF 'hero_style' meta, then defers the ancestor
check to CWC\isServicesDescendant() (the same helper the gate uses) so
the output matches runtime behavior. Operator should run this before
enabling the gate on a real site.
2026-07-04 16:17:33 -05:00
Keith Solomon f320b3711f docs(test): document CWC_TEST_BYPASS_HERO_GATE constant for the dev site
isServicesDescendant() gates the inner-page hero on being a Services
descendant. The existing inner-page.spec.js fixtures (sample-page, etc.)
are not Services descendants, so without the bypass the hero would not
render in tests and the suite would fail.

The constant CWC_TEST_BYPASS_HERO_GATE was added in lib/extras.php for
exactly this case, but the dev site's wp-config.php is operator-managed
and cannot be modified by the theme. This note records the single line
the operator needs to add to wp-config.php, plus the rationale and a
production warning.
2026-07-04 15:52:51 -05:00
Keith Solomon 952b1731d9 fix(contact): hardcode CWC Blue 03 stroke on contact info SVGs
SVGs loaded via <img src> cannot inherit currentColor from the parent
document, so the .contact-info__icon { color: ... } rule had no effect and
the icons rendered in the SVG's own default color (black).

Bake the stroke color in directly: stroke="#8FC9E6" (CWC Blue 03). The
final user-provided SVGs will replace these placeholders later, so this is
the minimal change to make the icons visible in the brand color today.
2026-07-04 15:51:28 -05:00
Keith Solomon 9d1a5f8b81 fix(contact): restore aligned = spacing in contact-info block 2026-07-04 15:41:17 -05:00
Keith Solomon 634635f726 fix(contact): fix PHPCS OperatorSpacing warnings in contact-info block 2026-07-04 15:37:45 -05:00
Keith Solomon 0aeacc3c17 test(hero): mark grandchild test as test.fail with TODO for missing fixture 2026-07-04 15:00:00 -05:00
Keith Solomon ee27133250 test(hero): add ancestor-scope Playwright spec 2026-07-04 14:47:37 -05:00
Keith Solomon f77a78b856 fix(contact): use wp_kses_post for block wrapper and AA color for required marker
- contact-info.php was calling esc_attr() on the output of
  blockWrapperAttributes(), which returns a full attribute string.
  esc_attr() turned the wrapping quotes into &quot; so the class
  attribute rendered literally as class="contact-info ...".
  Switched to wp_kses_post() to match the pattern used by every
  other block template in the project.
- contact-info.css: .gfield_required used --color-cwc-orange-01
  (#e15747, 3.71:1 on white) which fails WCAG 2 AA. Swapped to the
  project's --color-secondary-accessible token (#c43c2b) so the
  required marker is brand-aligned and meets the 4.5:1 minimum.
- Regenerated static/dist/theme.css to match.
2026-07-04 14:14:50 -05:00
Keith Solomon 0f4cd48c60 test(contact): add contact-page Playwright spec 2026-07-04 14:12:34 -05:00
Keith Solomon 59a1356d96 feat(hero): gate inner-page hero on Services descendants 2026-07-04 13:57:22 -05:00
Keith Solomon a163b349e1 feat(hero): add isServicesDescendant() helper and bypass constant 2026-07-04 13:54:27 -05:00
Keith Solomon 6d62bd73ae build: regenerate dist with contact-info styles 2026-07-04 13:50:28 -05:00
Keith Solomon d207b2e0e8 fix(contact): use correct views-path for contact-info import 2026-07-04 13:50:28 -05:00
Keith Solomon af067fc5d0 feat(contact): style Gravity Forms fields and submit button 2026-07-04 13:45:05 -05:00
Keith Solomon bcb2486576 feat(contact): add two-column layout and icon styles 2026-07-04 13:40:57 -05:00
Keith Solomon 966fb2624c style(contact-info): use tab indentation to match project standard 2026-07-04 13:37:12 -05:00
Keith Solomon e3024a6cdc feat(contact): rewrite contact-info block to two-column layout 2026-07-04 13:31:06 -05:00
Keith Solomon 1593be1c70 feat(contact): add address, email, phone icon SVGs 2026-07-04 13:25:53 -05:00
Keith Solomon dddb4b8c54 feature: Build interior layout
Deploy to Dreamhost (dev) / build (push) Successful in 38s
Sync TODOs with Issues / sync_todos (push) Successful in 7s
2026-07-01 18:33:01 -05:00
Keith SolomonandClaude 6452f28932 Refine hero: vector full-width, image top padding, content flush left
- styles/blocks/page-hero.css:
  - .page-hero__vector: width is now 100% (was clamp(28rem, 60vw, 56rem))
    so the orange linework spans the full width of the hero. The SVG
    scales proportionally (1920x489 viewBox).
  - .page-hero__media: added top: clamp(2rem, 4vw, 4rem) so the image
    has visible top padding inside the hero (in addition to overflowing
    the bottom). Reduced right offset to clamp(0.5rem, 2vw, 2rem) so
    the image sits closer to the right edge. Width is 'auto' with
    max-width: clamp(20rem, 30vw, 28rem) so the image's natural aspect
    ratio (490x613 portrait) is preserved.
- views/partials/page-hero.php: .page-hero__content is now 'container
  mx-auto px-0!' so the breadcrumbs, H1, and intro sit flush left at
  x=0, matching the logo's left edge (which is also at x=0 thanks to
  the header's px-0! override on its container).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 16:39:29 -05:00
Keith Solomon 4aa6ff694d Update inner page layout spec for hero restructure (no hard-coded copy, image at natural size) 2026-07-01 16:12:48 -05:00
Keith SolomonandClaude 2bda7f21eb Restructure hero: image at natural size overflowing, intro as text, no hard-coded copy
- views/partials/page-hero.php: removed the page-intro partial call. The
  intro is now rendered inline as a single .page-hero__intro div
  containing the editor-supplied intro text only (no hard-coded
  heading). The H1 is rendered with a dedicated .page-hero__heading
  class for typography control. Breadcrumbs + H1 + intro are in a
  single .page-hero__content container.
- views/partials/page-intro.php: deleted (no longer used).
- styles/blocks/page-hero.css: rewritten layout. The hero has a min-height
  of clamp(31rem, 38vw, 36rem). .page-hero__media is a foreground
  absolutely-positioned img on the right (no mask, no cover, no
  object-fit), with bottom: -10% so the image's bottom hangs over
  the bottom edge of the hero. The vector is positioned at
  bottom: clamp(1.5rem, 4vw, 3rem) with some spacing from the bottom
  edge, full-width on the left. Both elements stay above the content
  layer (z-index 10) and below the breadcrumb/title text. The H1 uses
  Quincy serif at clamp(2.5rem, 6vw, 4.5rem). The intro text is
  capped at 36rem to sit alongside the H1 without spanning the full
  hero width.
- tests/inner-page.spec.js: removed the now-obsolete
  .page-hero__intro-heading / .page-hero__intro-text assertions (the
  intro is a single text block now).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 16:11:28 -05:00
Keith SolomonandClaude ec87cae6c5 Update inner page layout spec for hero+intro refactor
- Goal: hero is now a blue-to-teal gradient (not a flat dark color) and the
  intro block lives inside the hero composition (not as a separate page
  section).
- Architecture: reduced from 3-part (hero / intro / body) to 2-part
  (hero / body) since the intro is now embedded in the hero.
- Hero Partial: dropped the bg-dark utility (gradient is set in CSS), the
  hero image is anchored to the right with a left-to-right fade, and the
  vector is full-width anchored to the bottom at z-index 2.
- Hero Partial CSS: the file is at styles/blocks/page-hero.css (not
  views/partials/page-hero.css). Updated the rules to match the new
  gradient + image right-side + vector bottom-center + intro grid layout.
- Intro Partial: rewritten as a fragment for embedding inside the hero
  (two-column heading + body grid) rather than a centered standalone
  section. Partial is loaded by page-hero.php, not page.php.
- page.php Wiring: no longer loads the page-intro partial directly; the
  partial is loaded by page-hero.php.
- Error Handling, Verification, and Acceptance Criteria: updated to
  match the new structure (no empty .page-intro wrapper check; intro is
  a descendant of the hero; gradient + image-right + vector-bottom-center
  expectations).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 15:26:12 -05:00
Keith SolomonandClaude e221f62ef7 Refine hero: gradient backdrop, intro inside hero, image on right, vector visible
- styles/blocks/page-hero.css: add blue-to-teal gradient to .page-hero (matches
  homepage-hero). Fix image mask direction (right-to-left fade) so the image
  is visible on the right and fades to transparent on the left. Reposition
  the vector to span the full bottom of the hero at z-index 2 (above the
  media layer, below content). Add .page-hero__intro and .page-hero__intro-inner
  grid rules for the new two-column heading + body block.
- views/partials/page-hero.php: drop bg-dark / bg-cover / bg-no-repeat
  utilities (the gradient comes from CSS now). Simplify the heading render.
  Load the page-intro partial inside .page-hero__content, below the heading.
- views/partials/page-intro.php: rewrite as a fragment for embedding inside
  the hero - a two-column heading (hard-coded 'Our Work') + body grid.
  Returns early when the intro field is empty.
- page.php: remove the page-intro partial call (it's now loaded from
  page-hero.php).
- tests/inner-page.spec.js: switch the selector from .page-intro to
  .page-hero__intro. Update the order assertions to verify the intro is
  a descendant of the hero (not a sibling below it).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 15:25:39 -05:00
Keith Solomon 342ae015c7 Document the two production-template fixes in the inner-page plan 2026-07-01 12:17:14 -05:00
Keith Solomon 667cb2ec89 Document the two production-template fixes in the inner-page spec 2026-07-01 12:16:52 -05:00
Keith Solomon 8b7819e932 Add no-intro and no-asset fallback tests for inner page layout 2026-07-01 12:16:38 -05:00
Keith Solomon 998619fa3f Add Playwright coverage for inner page layout at all viewports 2026-07-01 11:13:34 -05:00
Keith Solomon cda3878169 Render hero_image and hero_vector in page-hero partial; drop in-hero intro 2026-07-01 10:29:26 -05:00
Keith Solomon edf3d6c5ce Add page-hero media layer CSS and import into blocks bundle 2026-07-01 10:22:29 -05:00
Keith Solomon d389fd7bc8 Fix Task 3 path (page.php is at theme root) and indentation (use tabs) 2026-07-01 10:19:21 -05:00
Keith Solomon a8affd474d Render page-intro partial between hero and body in page.php 2026-07-01 10:16:15 -05:00
Keith Solomon ffdf79ae01 Add page-intro partial for centered narrow intro section 2026-07-01 10:10:00 -05:00
Keith Solomon 145df12149 Add hero_image and hero_vector fields to Page Heading group 2026-07-01 10:03:23 -05:00
Keith SolomonandClaude 2e0b4225a1 Add inner page layout implementation plan
Seven tasks: ACF fields, page-intro partial, page.php wiring, scoped CSS,
page-hero partial update, Playwright tests, and a final quality gate.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 09:55:38 -05:00
Keith Solomon 028fcf28c1 Clarify hero background fallback in inner page layout spec 2026-07-01 08:37:28 -05:00
Keith SolomonandClaude 455a005e58 Add inner page layout design spec
Defines the inner page layout: dark hero with background image and decorative
vector (driven by two new fields on the existing Page Heading ACF group), a
centered narrow intro section underneath (driven by the existing Intro field),
and the standard the_content body.

The mockup's bottom dark block is the existing site footer, not a new CTA. No
new ACF blocks are introduced; the layout reuses the existing Page Heading meta
box and the page-hero partial that header.php already loads.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-01 08:36:37 -05:00
Keith Solomon b53f7bb4ca 🐞 fix: Adjust gradient on mobile
Deploy to Dreamhost (dev) / build (push) Successful in 33s
Sync TODOs with Issues / sync_todos (push) Successful in 7s
2026-06-30 20:42:13 -05:00
Keith Solomon 01101ff712 fix: update mobile navigation styles and comment out unused code
Deploy to Dreamhost (dev) / build (push) Successful in 35s
Sync TODOs with Issues / sync_todos (push) Successful in 7s
2026-06-28 20:52:40 -05:00
Keith Solomon 3db0ceaf8d fix: lock body scroll while menu is open, scroll menu internally
Per the user's request:

- Page scroll is locked when the mobile menu is open: add an
  :has() selector that applies overflow: hidden + touch-action: none to
  the <body> when the .nav-main__toggle has aria-expanded=true. Verified
  with mouse wheel and PageDown: window.scrollY stays at 0.

- Menu scrolls internally when its content overflows: switch
  .menu-vdi's 'overflow-hidden' to 'overflow-y: auto' with
  'overscroll-behavior: contain' so scroll gestures feed the menu
  rather than chain-scroll to the body behind it.

- Cap the menu at viewport height instead of growing: change
  'min-height: calc(100vh - var(--hgtHeader))' to
  'max-height: calc(100vh - var(--hgtHeader))' so the menu fills the
  visible space below the header and any overflowing items become
  scrollable inside the menu.
2026-06-28 19:59:10 -05:00
Keith Solomon 380e2d9015 fix: address remaining mobile menu issues
Per the user's feedback, fix the issues still visible in the menu:

1. Hero rendered over the menu: bumped menu z-index from 10 to 100 so it
   always sits above the hero's stacked elements.

2. List markers on items: added explicit list-style: none / padding: 0 on
   the menu <ul> and items to override the base typography rule that sets
   list-style-type: disc and padding: 0 1rem on every <ul>.

3. Blue links: the base typography rule 'a, .link { color: var(--color-bodylinks); }'
   has specificity 0,1,1 and was beating the menu text-white rule. Override
   with color: var(--color-white) !important on menu links and child links
   inside the mobile media query.

4. Full borders with rounded corners on child items: change child item
   border from '2px solid var(--color-secondary); border-radius: 0.5rem'
   to 'border-bottom: 2px solid var(--color-secondary); border-radius: 0'
   so each child gets only a bottom border (matching the user's spec).

5. Menu items now use plain CSS (color/display/padding/font-weight) instead
   of @apply text-white/no-underline to give them explicit override
   specificity against the base styles.

6. Toggle button: changed the SVG width from 2rem to 1.5rem in
   styles/components/site-header.css so the hamburger and X icons render
   at a square 1.5rem x 1.5rem aspect ratio inside the (intentionally)
   rectangular orange button.

Nav-main template unchanged from the previous commit (Contact button +
social icons already in place). Header test still passes - the button box
itself (72x45) is unchanged, only the icon aspect changed.
2026-06-28 18:05:12 -05:00
Keith Solomon 09d42ba2a9 fix: style mobile menu per spec
Per the user's spec, the mobile menu is:
- Dark navy background, white links, 95% viewport width
- Parent items (those with child links) get an orange chevron
- Child items get an orange border; nothing else gets any border
- Bottom of menu has a Contact link styled as a button and social icons

Changes:

1. Menu CSS (styles/navigation/nav-mobile-sliding.css):
   - Switch the menu background from white to bg-cwc-blue-02 (dark navy)
   - Switch menu item text from black to white
   - Hide the existing .menu-vdi__submenu and show the children inline under their
     parent with a 2px orange border, rounded corners, and white text
   - Style the existing chevron SVG inside the parent <button> with the orange
     secondary color so it's visible against the navy background
   - Add a .menu-vdi__footer block (Contact button + social icons) anchored to
     the bottom of the menu panel, shown only when the toggle is aria-expanded
   - Hide .menu-vdi__footer entirely at desktop so it doesn't leak into the
     page DOM and trigger accessibility warnings

2. Menu template (views/components/nav-main.php):
   - Append a .menu-vdi__footer div after the menu items containing a Contact
     link to home_url('/contact/') and the existing social-media partial
   - The footer renders inside <nav> but is positioned via fixed CSS to align
     with the menu panel

Header/toggle button unchanged - the orange/coral rounded button design from
the original mobile-fidelity plan was already correct and is left alone.
2026-06-28 17:32:05 -05:00
Keith Solomon 2399023286 🐞 fix: Adjust social icon styling 2026-06-28 14:11:46 -05:00
Keith Solomon a761c16802 fix: anchor mobile hero vector to the viewport
Move the mobile hero <img> out of the .vector container (which is intentionally wider than the viewport to bleed the desktop SVG) so the mobile img anchors to .heroVector's full-width edges. Set width: 100vw, left: 0, bottom: 6.25rem so the 402-wide mobile SVG distributes the linework across the full hero at the 402 reference composition.
2026-06-28 13:35:35 -05:00
Keith Solomon 93b9ef68cd docs: record mobile vector replacement spec
Capture the per-block approach, what changed in each PHP/CSS file, and the test/geometry updates needed for the new mobile-*-vector.svg files. Mirror the structure used by the prior 2026-06-27 mobile-homepage-fidelity spec.
2026-06-28 13:10:49 -05:00
Keith Solomon 739cb6e6e2 test: wait for contact linework before measuring
The mobile contact linework is loading=lazy and only resolved when scrolled into view. Wait for it to finish loading before the geometry assertions read its bounding rect, matching the pattern already used for the Our Work desktop vector.
2026-06-28 13:09:40 -05:00
Keith Solomon daeb184dd1 fix: use new mobile vector for our work
Replace the clip-path composition of the desktop SVG with a real <img> that references the artist-supplied mobile-work-vector.svg. Drop the CSS-layer trick and the ::before/::after background pieces; the new mobile SVG already covers the composition. Update the linework composition test to assert against the new <img>.
2026-06-28 13:06:01 -05:00
Keith Solomon 8c239e15f6 fix: use new mobile vector for contact block
Render mobile-contact-vector.svg alongside the existing contact linework. CSS hides the desktop SVG and shows the mobile <img> at <=767px so the new 342x187 composition fills the card width. Update the geometry test to assert the new linework ratio (342/187) and the snapshot.
2026-06-28 13:04:55 -05:00
Keith Solomon 14de24351e fix: use new mobile vector for hero
Add hero-vector-mobile.php that renders mobile-hero-vector.svg alongside the existing desktop hero partial. The homepage-hero.css hides the desktop SVG and shows the mobile <img> below 768px while preserving every other mobile rule.
2026-06-28 13:03:58 -05:00
Keith Solomon dbfd5bfb43 fix: use new mobile vector for pull quote
Swap pullquote-mobile-linework.png for the artist-supplied mobile-pullquote-vector.svg at the existing pull-quote__vector--mobile slot. Update the visual snapshots to match the new artwork.
2026-06-28 13:03:18 -05:00
Keith Solomon 31b498115b test: wait for Our Work desktop vector before reading source 2026-06-28 10:03:58 -05:00
Keith Solomon 0a48a1938c fix: align mobile footer navigation 2026-06-27 22:54:17 -05:00
Keith Solomon 20d25e966d fix: match mobile footer design 2026-06-27 22:49:31 -05:00
Keith Solomon 948cc7e368 refactor: harden responsive Our Work artwork 2026-06-27 22:36:46 -05:00
Keith Solomon 79ff6a1408 fix: match mobile Our Work linework 2026-06-27 22:24:38 -05:00
Keith Solomon 6206761573 fix: match mobile Our Work design 2026-06-27 22:01:47 -05:00
Keith Solomon ca8f5c939d fix: preserve reusable contact linework ratio 2026-06-27 21:38:58 -05:00
Keith Solomon f0c5c47297 refactor: isolate mobile home contact styles 2026-06-27 21:34:44 -05:00
Keith Solomon 7c143721b8 fix: refine mobile contact photo crop 2026-06-27 21:22:30 -05:00
Keith Solomon e2901ce710 fix: correct mobile contact image treatment 2026-06-27 21:16:22 -05:00
Keith Solomon 443be4fb89 fix: match mobile contact card design 2026-06-27 20:58:36 -05:00
Keith Solomon d19924e22b fix: scope mobile media text behavior 2026-06-27 20:35:10 -05:00
Keith Solomon 6263a98988 fix: match mobile image text layout 2026-06-27 20:17:30 -05:00
Keith Solomon 4969e4c9ce test: isolate pull quote linework snapshot 2026-06-27 20:05:52 -05:00
Keith Solomon aaa9d28a79 fix: harden mobile pull quote layout 2026-06-27 20:01:02 -05:00
Keith Solomon 7c3c09855d fix: add mobile pull quote artwork 2026-06-27 19:47:06 -05:00
Keith Solomon 32bbf6750b fix: show full mobile pull quote artwork 2026-06-27 19:27:17 -05:00
Keith Solomon 2986cb3ee8 fix: refine mobile pull quote artwork 2026-06-27 19:20:33 -05:00
Keith Solomon 8a601d90cb fix: align mobile pull quote crop 2026-06-27 19:00:12 -05:00
Keith Solomon 445269d291 test: lock mobile pull quote visual fidelity 2026-06-27 18:48:11 -05:00
Keith Solomon 15e832645c fix: scale mobile pull quote proportionally 2026-06-27 18:37:18 -05:00
Keith Solomon 97ebffb70d fix: match mobile pull quote design 2026-06-27 18:18:15 -05:00
Keith Solomon 81785c4aec refactor: clarify mobile hero geometry 2026-06-27 18:06:34 -05:00
Keith Solomon a360b8192a fix: complete mobile carousel and social updates 2026-06-27 18:00:32 -05:00
Keith Solomon f8d60a63a4 fix: scale mobile hero vector responsively 2026-06-27 17:53:00 -05:00
Keith Solomon bdf78d58ac fix: align mobile hero vector crop 2026-06-27 17:46:58 -05:00
Keith Solomon 6d3bb76b17 fix: match mobile header and hero design 2026-06-27 17:38:49 -05:00