# Changelog

All notable changes to the Elayne WordPress theme will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [4.9.5] - 2026-09-04

### Fixed

- **Source archives now match the release zip.** `.distignore` governs the theme
  zip built by `create-release.yml`, but nothing governed source archives —
  GitHub's "Download source code" and, more importantly, the dist tarball
  Composer installs `imagewize/elayne` from. `CLAUDE.md`, `AGENTS.md`,
  `phpcs.xml` and `.github/` were therefore reaching `web/app/themes/elayne/`
  on every Composer install, despite being excluded from the zip. A new
  `.gitattributes` marks them `export-ignore`. `README.md` is deliberately kept
  — it has no place in the theme zip but belongs in a source archive.
- `.distignore` excludes `.gitattributes` in turn, so the new file is not itself
  packaged into the theme zip; WordPress.org's automated review rejects an
  upload containing a file it cannot read. It also now guards `.claude/*`,
  matching Aviendha — untracked here, so CI never zipped it, but nothing
  stopped it either.

## [4.9.4] - 2026-09-03

### Changed

- **Bumped `@imwz/wp-pattern-sentinel` to `^1.1.1`.** Pulls in a fix for
  [GHSA-5p4m-2wfm-xmqj](https://github.com/imagewize/wp-pattern-sentinel/security/dependabot/3),
  a high-severity `js-yaml` quadratic CPU consumption (DoS) bug that affected
  `--trellis` auto-discovery, plus the `--verbose` flag added in 1.1.0 for
  step-by-step validation progress. Dev-only dependency — no effect on the
  theme's runtime code.

## [4.9.3] - 2026-08-31

### Fixed

- **`patterns/woocommerce/woo-hero.php` had no H1 on the page.** The Store Hero
  pattern's headline ("Refined Elegance Defined") was a `wp:heading` block with
  no `level` set, defaulting to `<h2>`. On the store homepage this hero is the
  only heading above the fold and nothing else on the page renders an `<h1>` —
  flagged by an AI-readiness/SEO scan of `demo.imagewize.com/store/` (score
  dropped from a B to a C, partly on this). Set `"level":1` so the pattern
  renders `<h1>`.

## [4.9.2] - 2026-08-25

### Fixed

- **`patterns/header-double-bar.php` required the Aludra plugin.** The top bar's
  search icon was an `aludra/search-overlay-trigger` block — the theme's only
  Aludra dependency, and one that ships in the WordPress.org release, so anyone
  inserting the pattern without Aludra installed got a block-error placeholder
  where the search icon should be. Replaced with a trigger and overlay owned by
  the theme; the pattern is now core-blocks-only, like the other 120.

- **`parts/mega-menu-template.html` required the Aludra plugin too.** It was a
  single `core/pattern` block pointing at `aludra/mega-menu-featured-content`,
  so without Aludra the Mega Menu template part rendered as nothing at all —
  silently empty rather than a visible error, which is why it went unnoticed
  alongside the header trigger. Replaced with the equivalent composition in core
  blocks, inlined into the template part. The external `placehold.co` image in
  the Aludra original was dropped rather than copied, and the
  `is-style-list-plain-no-indent` class with it, since that block style is
  registered by Aludra and not by Elayne.

### Changed

- **`Tested up to` 7.0 → 7.1.** `Requires at least` stays at 6.6 — nothing here
  needs newer.
- **README.md** — the Lineage note, the Requirements list and the Aludra
  companion-plugin section all described Aludra as supplying Elayne's content
  blocks. Nothing Elayne ships references an `aludra/*` block or pattern any
  more, so all three now describe it as genuinely optional.

### Added

- **Search overlay (`inc/search-overlay.php`, `assets/js/search-overlay.js`).**
  Full-screen search overlay behind the header-double-bar trigger. Three
  improvements over the block it replaces: the trigger is a real `<button>`
  rather than a `<figure>`, so it is keyboard-reachable; the overlay markup is
  rendered in PHP rather than assembled from a JavaScript string, so its strings
  are translatable; and the overlay traps Tab while open and restores focus to
  the trigger on close.
- **Editor visibility rule (`assets/css/editor.css`).** The trigger ships with
  the `hidden` attribute and is revealed by the script, so it is never a dead
  control on the front end when JavaScript has not run. The script does not run
  in the editor, so an editor-only rule reveals it there — otherwise the
  pattern's top bar appears to be missing its search icon while being edited.
- **Conditional script loading.** `search-overlay.js` is registered on
  `wp_enqueue_scripts` but enqueued from `render_block()` only when a trigger is
  actually rendered, so sites that do not use the pattern load nothing. The
  footer markup is gated the same way. Only `core/html` blocks are inspected,
  keeping the filter off the hot path for every other block.

## [4.9.1] - 2026-08-22

### Changed

- **README** — replaced the banner image with a centered logo and badge row
  above the title, matching the Aviendha and Aludra READMEs. Removed the
  now-unreferenced `assets/images/readme-banner.jpg`.

### Added

- **README** — Lineage note cross-linking Aviendha, Nynaeve, Ixian, and the
  shared Aludra plugin dependency.
- **README** — WooCommerce and Aludra listed as optional/recommended directly
  in the Requirements list.
- **README** — License section pointing to `LICENSE.md` (GPL v3).

### Fixed

- **`composer.json` `license` field** — still read `GPL-2.0-or-later`, missed
  when style.css, readme.txt, and LICENSE.md were migrated to GPL v3. Packagist
  reads this field for the README's shields.io License badge, so the badge was
  showing GPL v2 while every other license reference said v3.
- **`composer.json` `description` field** — was the placeholder
  `"A WordPress block theme by Jasper Frumau"`. Replaced with the same
  description already used on the GitHub repo.
- **Stale pattern/template counts in README.md and readme.txt.** Verified
  against the actual file counts: 119 non-WooCommerce patterns + 24
  WooCommerce patterns (143 total) in `patterns/`, and 19 files in
  `templates/`.
  - README.md's "125+ patterns" (quoting the non-WooCommerce count
    separately from "24 WooCommerce patterns") overclaimed — real count is
    119. Corrected to "115+".
  - readme.txt's three "125+" mentions quote a combined total and were
    undersold relative to the real total of 143. Corrected to "140+".
  - readme.txt's "17 page and post templates" undercounted — real count is
    19, and the list includes WooCommerce templates. Corrected to match
    README.md's "19 page, post, and WooCommerce templates".
- **Stale per-category pattern counts in CONTRIBUTING.md and readme.txt's
  Pattern Collection breakdown.** Recounted every pattern's `Categories:`
  header (vertical tag takes priority over a generic one, so a
  vertical-tagged pattern is counted once under its vertical, not also
  under a Core/Specialized bucket). New verified breakdown, 143 total:
  - Core Patterns (40): Hero Sections (3) · Headers & Footers (12) ·
    Banners (4) · Call-to-Action (4) · Contact (2) · Features (5) ·
    Testimonials (2) · Blog & Posts (8). Statistics and Team dropped —
    every pattern still tagged with those categories is vertical-specific
    now (e.g. `legal-stats.php`, `legal-team.php`), so the non-vertical
    bucket is empty.
  - Specialized (25): Cards (7) · Events (1) · Portfolio (1) · Pages (16,
    up from a stale 11 — 8 ready-to-insert page patterns plus 8
    per-template wrapper patterns).
  - Industry Verticals (54): Spa & Wellness (14, up from a stale 10) ·
    Legal Services (7) · Food & Beverage (17, up from a stale 14) · Home
    Improvement (9) · Nail Salon (7). Legal/Home Improvement/Nail Salon
    were already accurate; Spa and Food & Beverage had grown since the
    docs were last updated.
  - WooCommerce Store (24) — unchanged, already accurate.

### Fixed

- **`package.json` failing the Theme Check GitHub Action.** Its `keywords`
  array had "WordPress" written all-lowercase, which trips the required
  `WordPress_Spelling_Check` rule. While in there: `version` was still
  `4.9.0` and `license` still `GPL-2.0-or-later` (same stale-GPL-v2 issue
  as `composer.json`, above); both corrected, and `description`'s pattern
  count refreshed to match.

### Added

- **Page patterns messaging** — style.css's theme header `Description`,
  `composer.json`'s `description`, README.md's "Page Layouts" bullet, and
  readme.txt's intro blurb, Key Features list, and Pattern Collection
  breakdown now all call out the ready-to-insert page patterns (full-page
  compositions like Homepage, About, Contact, Services, and the Store
  variants) as a distinct, named capability rather than leaving them
  implicit in the overall pattern count. README.md's bullet also now lists
  all 8 page patterns instead of only the original 4 (it omitted the 4
  Store-specific compositions).

## [4.9.0] - 2026-08-18

Three verticals placed light text on a brand-coloured band too light to carry it.
Fixed at the band rather than in the palette — see below for why that distinction
matters.

### Fixed

- **Light text on a `primary` band, below WCAG 2.1 AA.** Measured against each
  variation's own colours:

  | Band | before | after |
  |---|---|---|
  | Nail Salon stats bar (`base` on `primary`) | 3.30:1 | **4.93:1** |
  | Nail Salon CTA gradient | 3.30–4.93:1 | **4.93–6.76:1** |
  | Home Improvement stats bar (`white` on `primary`) | 2.85:1 | **6.36:1** |
  | Home Improvement top bar + header CTA pill | 2.85:1 | **6.36:1** |
  | Spa booking CTA (`base` on `primary`) | 2.19:1 | **9.54:1** |

  Each fix uses a colour already in that variation's palette. Nail Salon's band steps
  down to `primary-alt` and its CTA gradient to `primary-alt`→`primary-alt-accent`.
  Home Improvement keeps its signature orange and switches the label to `main`. The
  Spa CTA moves onto `main`, the deep teal already in its palette.

- **Contact form submit buttons** in the Nail Salon and Home Improvement variations
  carried white labels on a light brand colour — **3.40:1** and **2.85:1**. Nail
  Salon's button moves to `primary-alt` (**5.08:1**, hover `primary-alt-accent` at
  6.96:1); Home Improvement keeps the orange and darkens the label to `main`
  (**6.36:1**, hover 5.05:1).

- **Default buttons failed in all three variations.** The filled button paired a light
  `primary` background with light text — **3.30:1** (Nail Salon), **2.85:1** (Home
  Improvement), **2.19:1** (Spa & Wellness). Fixed per variation in
  `styles.elements.button` and, where patterns set the colours explicitly, in the
  pattern: Nail Salon's buttons move to `primary-alt` (**4.93:1**, hover 6.76:1), Home
  Improvement keeps the orange and darkens the label to `main` (**6.36:1**, hover
  5.05:1), and Spa moves to `main` (**9.54:1**, hover 5.03:1). Home Improvement had no
  `elements.button` of its own and now gets one, so the fix stays scoped to that
  variation.

- **Spa booking CTA buttons.** With the band on `main`, the shared `button-light` block
  style put `primary` cyan on white at **2.19:1**, and the filled button would have
  matched the band exactly. Both now carry explicit colours: white with a `main` label
  (**9.54:1**) and `primary-alt` mint with a `main` label (**6.03:1**), each clearly
  distinct from the band.

- **Home Improvement form focus ring** was **2.85:1** against the field, under the 3:1
  WCAG 1.4.11 requires of a control boundary. Now `#cf6d17` at **3.59:1**. Nail Salon's
  ring already cleared it at 3.40:1 and is unchanged.

### Why the bands and not the palette

An earlier attempt darkened `primary` in these three variations. That fixed text *on*
a primary background and broke primary *as* text on the dark surfaces, which is where
these sites use it most — Home Improvement went from 6.36:1 to 3.41:1 on its navy.

No single value can satisfy both. Each variation's `base` and `main` are 15.49:1,
15.39:1 and 9.54:1 apart, so the best any one colour can score against both is 3.94:1,
3.92:1 and 3.09:1 — all under 4.5:1. One token cannot serve a light and a dark surface
at once, so the fix belongs at the handful of places that pair it with light text.

### Note

The shared `button-light` block style still resolves to `text: primary`, which is
unreadable on `base` under a light-`primary` variation wherever it is used outside the
patterns fixed here. Likewise, the 18 patterns that set `backgroundColor: primary` and are shared across every
variation are untouched. They are correct under the six variations whose `primary` is
dark enough, and none of them are used by these three verticals' pages. Pairing one
with a light-`primary` variation would still fail; solving that generally needs the
palette to separate its light-surface and dark-surface roles, which is a larger design
change than this fix.

## [4.8.1] - 2026-07-30

### Added

- **Store style variation stylesheet** (`assets/styles/store-variation.css`), enqueued only when the Store style variation is active (`settings.custom.styleVariation` in `styles/store.json`), following the same `.style-variation-{slug}` convention as `plumbing-variation.css` and `nail-salon-variation.css`. Scopes the Store subsite's brand-specific header treatment without affecting `header-standard.php`, which is shared by every vertical.
  - Desktop nav links: small, uppercase, letter-spaced (matches the Elayne Store design).
  - Site title/logo: larger, letter-spaced wordmark with an accent-colored dot after the wordmark.
- **`primary` font-family alias** in `styles/store.json`, pointing to the same Cormorant Garamond already registered under the `heading` slug.

### Fixed

- **Store subsite logo silently fell back to the body font (Jost) instead of a serif display font.** `header-standard.php`'s site-title block references `var:preset|font-family|primary`, but no vertical style variation (`store.json`, `nail-salon.json`, `plumbing.json`, etc.) defines a `primary` font-family slug — only the base `theme.json` does. The CSS custom property was therefore undefined on every vertical subsite, not just Store, and the browser silently dropped the declaration. `store.json` now defines `primary` explicitly.
- **Woo Hero pattern (`woo-hero.php`) had a visible ~19px gap between the left content panel and the right-hand image**, because the outer `wp:columns` block had no `blockGap` override and fell back to the theme's global `1.2rem` flex gap. Zeroed it explicitly, following the same convention already used by `spa-home-hero.php`.
- **Woo Hero pattern's eyebrow, description, and buttons didn't match the design.** Added the decorative line before "New Collection 2025", narrowed the description paragraph to a 360px measure with a smaller, dimmer color (`rgba(245, 240, 232, 0.65)` instead of the fully-opaque `base` color), and reduced its font size to `small`. Also fixed the description and buttons row rendering centered instead of flush-left: both are non-aligned direct children of a `constrained`-layout group, which core force-centers via `.is-layout-constrained > :where(...) { margin-left/right: auto !important }` whenever a child's own rendered width is narrower than the column — overridden back to flush-left in `assets/styles/woocommerce.css`.

## [4.8.0] - 2026-07-29

### Added

- **Store page-level patterns** - Four new full-page patterns for the WooCommerce store subsite, following the page pattern strategy from `ELAYNE-PAGE-PATTERNS-PLAN.md`:
  - `page-store-homepage.php`: Complete store homepage combining woo-hero, woo-ticker, woo-shop-categories, woo-signature-pieces, woo-our-story, woo-testimonials, and woo-newsletter
  - `page-store-shop.php`: Minimal shop catalog page with banner header (product display handled by WooCommerce blocks)
  - `page-store-cart.php`: Full shopping cart page using the woo-cart pattern
  - `page-store-checkout.php`: Full checkout page using the woo-checkout pattern

### Fixed

- **`woo-category-hero.php` showed the generic "Collection" title on the shop page.** The pattern's `<h1>` reads `get_queried_object()` and expects a `WP_Term` (category/tag archives); the main shop page's queried object is a `WP_Post` instead, so it always fell through to the "Collection" fallback. It now checks `is_shop()` and prints the shop page's own title in that case, falling back to "Collection" only when neither a term nor the shop page applies.
- **Add-to-cart button hover was invisible when the "Store" style variation wasn't active.** `elayne-category-products.css` set the hover background to `var(--wp--preset--color--orange)`, which is only registered by the Store global style variation; without it the variable is invalid and the button became transparent over the product image on hover. Added a hardcoded hex fallback (`var(--wp--preset--color--orange, #E65C00)`) so the hover state degrades gracefully either way.

## [4.7.4] - 2026-07-29

### Fixed

- **`.distignore` now excludes `.env` and `.env.*`.** The repo's `.env` holds the WP admin credentials sentinel uses to drive the block editor (`WP_URL`, `WP_USER`, `WP_PASS`). It is gitignored, so it never reached git, Packagist or a CI-built release — but `.distignore` governs everything built from a working copy, so a local zip build would have bundled it, and syncing the working copy onto a site (see the demo-testing workflow in `CLAUDE.md`) copied it into the theme directory, which is web-served. Neither path involves git, so gitignoring it was not enough.
- **`.distignore` now excludes `vendor/`, `node_modules/`, `docs/` and `.tmp/`.** These were absent from syncs only because the sync tool carries its own baseline exclude list, not because `.distignore` covered them; a plain `zip -x@.distignore` had nothing compensating. Measured on a zip built from a working copy: **5,724 files / 26.3 MB before, 466 files / 8.8 MB after**. `.distignore` is now correct on its own rather than only in combination with a particular tool.

Released zips are unaffected by both entries — `create-release.yml` builds from a clean `actions/checkout`, where none of these paths exist.

## [4.7.3] - 2026-07-29

Developer-facing only — no changes to theme output, patterns, styles or templates.

### Changed

- **Demo rebuild workflow (`CLAUDE.md`)** — the docs told you to edit the page maps "in your local `vendor/` copy", which the next `composer update` overwrites. Corrected to copy `rebuild-demo.php` to the site root and customise that copy. Documents the two options added in pt-cli 2.5.0: environment-keyed page maps (`dev`/`prod` chosen from `home_url()`, for sites whose page IDs differ between local and production) and a configurable `$page_template` — the script previously hardcoded `default`, silently clearing the `page-no-title` template demo pages rely on.
- **Local development (`CLAUDE.md`)** — the demo site now installs Elayne as a pinned Composer dependency from Packagist rather than tracking a copy, so this repo is the source of truth and the copy under `demo/web/app/themes/elayne/` is disposable. Added a section on testing an unreleased change with the wp-ops `rsync-package-to-site.sh` script, so a release is no longer needed to try something on the demo, including its `--delete --delete-excluded` footgun.
- **Pattern validation (`CLAUDE.md`)** — Pass 1 (`wp pattern validate`) reads the patterns installed on the demo site, which is now the released copy. Unreleased changes must be synced in first or Pass 1 validates the last release instead of your edits. Passes 2 and 3 run against the working tree and are unaffected.

### Fixed

- **`imagewize/pt-cli` bumped to v2.5.0** (dev dependency). 2.4.1 through 2.4.3 `export-ignore`d `scripts/`, so `rebuild-demo.php` was missing from those installs entirely; 2.5.0 is the first release since 2.4.0 that actually ships it.

## [4.7.2] - 2026-07-29

### Changed - Page patterns composed from pattern references

- The four page-level patterns (`elayne/page-homepage`, `elayne/page-about`, `elayne/page-services`, `elayne/page-contact`) pulled their sections in with `include get_template_directory() . '/patterns/...'`. They now use `<!-- wp:pattern {"slug":"elayne/..."} /-->` references instead. The include form referenced sections by file path, so renaming a section pattern silently dropped it (an `E_WARNING`, invisible in production), and `get_template_directory()` resolves to the parent theme only, so a child theme could not override a section. Slug references survive file renames and resolve through the pattern registry.

### Fixed - Section widths and spacing on page patterns

- Removed the wrapper group from all four page patterns. It was an `alignfull` group with `"layout":{"type":"default"}`, which renders `is-layout-flow` — a layout with no `.alignwide` rule, so every `align:wide` section inside it lost its wide-size cap and rendered full-viewport. The same layout adds `margin-block-start: 1.2rem` to every child, inserting an unintended gap between sections on top of each pattern's own padding. The sections now sit directly in `post-content`, whose `constrained` layout resolves both align widths correctly.

### Changed - Versioning

- `package.json` was still at `4.0.2` while `style.css` and `readme.txt` were at `4.7.1`. All four version locations are now in sync.

## [4.7.1] - 2026-07-28

### Fixed - Mixed text domain

- `patterns/woocommerce/woo-cart.php` carried three strings ("You may be interested in&hellip;", "Your cart is currently empty!", "New in store") copied verbatim from WooCommerce's canonical cart block markup, still using the `woocommerce` text domain. This triggers WordPress's "more than one text-domain is being used in this theme" warning, which blocks WP.org language pack compatibility. All three now use the theme's `elayne` domain.

## [4.7.0] - 2026-07-28

### Fixed - WooCommerce block deprecations

**Removed add-to-cart blocks (WooCommerce 10.x):**
- `woocommerce/add-to-cart-button` and `woocommerce/quantity-selector` no longer exist in WooCommerce and rendered as invalid-block placeholders. Both `elayne/woocommerce/woo-product-atc-section` and `elayne/woocommerce/woo-product-mobile-atc-bar` now use the self-closing `woocommerce/add-to-cart-with-options` block, which renders the correct template part per product type (simple, variable, grouped).
- Retargeted the add-to-cart CSS in `assets/styles/woocommerce.css` to `.quantity` and `.single_add_to_cart_button`, which are present in both the blockified and classic markup WooCommerce may emit for that block.

**Empty cart and checkout pages:**
- `elayne/woocommerce/woo-cart` and `elayne/woocommerce/woo-checkout` emitted `woocommerce/cart` and `woocommerce/checkout` as self-closing blocks. These are static blocks that require their full inner block tree, so both pages rendered empty even with items in the cart. Both patterns now carry WooCommerce's canonical inner block structure, keeping the Elayne page wrapper and heading.

### Added - Block registry drift check

- New `scripts/check-pattern-blocks.sh` diffs every block type used in `patterns/`, `templates/` and `parts/` against the live `WP_Block_Type_Registry`, catching blocks removed by a WordPress or WooCommerce upgrade. Runs in seconds; documented as "Pass 0" alongside the existing four validation passes.

### Added - Complete page-layout patterns
**New "Page Layouts" Pattern Category:**
- Added `elayne/page-layouts` category to organize full-page composition patterns

**Agency About Page (`elayne/page-about`):**
- New full-page pattern combining page header (accent banner), overlapping feature columns, team grid, and stats showcase

**Generic Contact Page (`elayne/page-contact`):**
- New full-page pattern combining page header (accent banner) and contact form section

**Main Site Homepage (`elayne/page-homepage`):**
- New full-page pattern combining hero, services stack, agency showcase, client success stories, client logo wall, testimonials grid, and newsletter CTA

**Agency Services Page (`elayne/page-services`):**
- New full-page pattern combining page header (accent banner), agency services showcase, and three-column feature grid

Each page pattern assembles existing section patterns via PHP includes into a single ready-to-insert page composition, reducing manual pattern-by-pattern page building.

### Added - WooCommerce plugin state gating
Elayne ships store templates and store patterns but does not require WooCommerce. When the plugin is not active the theme now hides both, so a non-store site is not offered templates and patterns it cannot render:
- Store templates (`archive-product`, `archive-product-spa`, `archive-product-store`, `single-product`, `taxonomy-product_cat`, `taxonomy-product_cat-store`) are filtered out of the Site Editor via `get_block_templates`
- All patterns in the `elayne/woocommerce` category are unregistered, along with the now-empty "Store" pattern category, preventing unrecognised-block placeholders in the inserter

No effect on sites running WooCommerce — all store templates and patterns behave as before.

### Changed - Aludra block library migration
**Header and mega menu blocks moved from `elayne-blocks` to Aludra:**
- `patterns/header-double-bar.php` now uses `wp:aludra/search-overlay-trigger` instead of `wp:elayne/search-overlay-trigger`
- `parts/mega-menu-template.html` now references the `aludra/mega-menu-featured-content` pattern instead of `elayne-blocks/mega-menu-featured-content`

The `elayne-blocks` plugin is no longer required. Sites using the double-bar header or the mega menu template part must install the Aludra block library plugin; existing saved content referencing the old `elayne/search-overlay-trigger` block needs to be re-saved with the new block.

### Technical
**Dependency Updates:**
- Updated `@imwz/wp-pattern-sentinel` from 1.0.2 to 1.0.4
- Updated `playwright` and `playwright-core` from 1.60.0 to 1.62.0 (dev dependency; now requires Node >=20)

## [4.6.4] - 2026-07-06

### Security
**js-yaml Dependency Update:**
- Bumped `js-yaml` from 4.1.1 to 4.3.0 to address a denial-of-service (DoS) vulnerability (GHSA-h67p-54hq-rp68)
- Update applied via `package-lock.json` build dependency; no runtime theme behavior changes

### Technical
**Build Tooling:**
- Updated transitive build dependency `js-yaml` to the patched 4.3.0 release
- No changes to theme templates, patterns, or user-facing functionality

## [4.6.3] - 2026-06-22

### Changed

**Mistral Vibe Configuration:**
- Migrated Vibe development instructions from `.vibe/prompts/vibe.md` to `AGENTS.md` for standardized AI agent guidance
- Updated `.vibe/config.toml` to use default CLI system prompt instead of custom vibe prompt
- Removed `.vibe/prompts/vibe.md` (content consolidated into AGENTS.md)

**AGENTS.md Enhancements:**
- Added theme overview and efficiency guidelines
- Expanded project structure with font family, text domain, and file references
- Added WordPress Development Mode and mu-plugin caching documentation
- Added demo rebuild workflow and pattern URL environment migration instructions
- Added WooCommerce store subsite documentation with template hierarchy and filter blocks
- Updated commit hygiene rules to include Mistral/Vibe attribution exclusion
- Improved formatting consistency throughout

## [4.6.2] - 2026-06-20

### Fixed

**WooCommerce Function Guards:**
- Added `function_exists()` checks around all WooCommerce-specific functions in `functions.php`
- Prevents fatal errors on sites running Elayne without WooCommerce installed (e.g., aseonomics.com)
- Guards added to: `is_shop()`, `is_product_category()`, `is_product_tag()`, `is_product()`, `wc_get_product()`, `WC()`
- Category filter drawer script now safely skips enqueue when WooCommerce functions are unavailable
- Product structured data generation now validates `WC()->structured_data` exists before calling methods

## [4.6.1] - 2026-06-16

### Changed

**Theme Description (WordPress.org):**
- Rewrote theme description for improved discoverability and conversion on WordPress.org
- Description now leads with the theme name and action-oriented language ("Launch a fast, pixel-perfect site")
- Reordered key selling points: patterns and style variations promoted ahead of industry-specific sets
- Added "Fully customizable with Global Styles — no page builder required" to clarify the no-plugin value proposition
- Added demo site link (`https://demo.imagewize.com`) directly in the description
- Corrected pattern count in style.css description from 110+ to 125+
- Corrected style variation count in style.css description from 7 to 8

## [4.6.0] - 2026-06-15

### Changed - Spa shop archive layout

**Spa Product Archive (`archive-product-spa.html`):**
- Rebuilt the spa shop/category archive to match the main store layout with a category toolbar pattern (`elayne/woocommerce/woo-category-toolbar`) and a left filters sidebar.
- Added a dedicated filters sidebar (`elayne-shop-filters-sidebar`) with Categories, Price Range, Rating, and product attribute filters (Scent chips, Fragrance, Formula) using the WooCommerce Product Filters block.
- Switched the product collection from a flex layout to a responsive 3-column grid with `filterable` enabled so sidebar filters drive results.
- Updated product cards to left-aligned titles and prices, full-size images with a `3/4` aspect ratio, and a sale badge overlaid on the image.
- Removed the old breadcrumbs/query-title header block, store notices, and the trailing two-column review pattern in favor of the unified toolbar + sidebar structure.

### Added - Orange color palette across style variations

**Orange Colors:**
- Added `Orange` (#E65C00) and `Orange Light` (#F5A623) palette colors to all style variations: Bistro, Food & Beverage, Legal Blue, Nail Salon, Plumbing, Publicist, and Spa & Wellness.
- Provides a consistent accent color (used by sale badges) across every vertical.

### Fixed - Product card and filter rendering

**Add-to-Cart Button Alignment:**
- Pinned product card grid rows (`grid-template-rows: auto auto 1fr`) so the overlaid add-to-cart button stays locked to the image bottom even on products without a price, where the card grid previously stretched the image row and dropped the button below the image.

**Sale Badge Positioning:**
- Set the sale badge wrapper to `display: contents` so the inner badge positions against the image container instead of a near-zero-size flex box.
- Re-targeted badge styles to `.wc-block-components-product-sale-badge`, squared off the badge (`border-radius: 0`, `border: none`), and reset `right: auto` for correct top-left placement.
- Hid the default oval "onsale" badge on single product galleries (`.wp-block-woocommerce-product-image-gallery .onsale`).

**Filter Sidebar Readability:**
- Changed filter checkbox label and count text color from `main-accent` to `main` (dark body color), fixing unreadable light-tinted text on style variations such as Spa where `main-accent` is a light tint.

### Technical

**CSS Specificity & Scoping:**
- Scoped category-product sale badge and grid-row rules under `.wc-block-product` for correct targeting within the product collection block.",

## [4.5.0] - 2026-06-14

### Added
**WooCommerce Product Structured Data:**
- Added Product JSON-LD structured data to block-based single product pages
- Hooked into `wp_footer` to generate schema.org Product markup via `WC_Structured_Data::generate_product_data()`
- Fixes missing rich results (price, availability, ratings) in search engines for block-theme product pages, since the classic `woocommerce_single_product_summary` hook never fires in block themes

## [4.4.0] - 2026-05-27

### Added

**Post Loop Grid Pattern (`elayne/post-loop-grid`):**
- New pattern for displaying posts on index and archive pages with a responsive three-column grid
- Uses `core/query` block with `inherit: true` to pull query context from the current archive/index page
- Grid layout with `minimumColumnWidth: 20rem` for true 3→2→1 responsive column behaviour
- Portrait-oriented featured images using `elayne-portrait-small` size at 2/3 aspect ratio with rounded corners
- Each card shows post date, category taxonomy links, and a linked post title
- Includes query pagination block with previous/next navigation
- Marked `Inserter: false` — intended for template use only, not manual insertion

### Changed

**Template Patterns Switched to Post Loop Grid:**
- `template-index-grid`: References `elayne/post-loop-grid` instead of `elayne/blog-post-columns-portrait`
- `template-page-archive`: References `elayne/post-loop-grid` instead of `elayne/blog-post-columns-portrait`

### Fixed

**Redundant Inline Style Removal:**
- `main-services-stack`: Removed duplicate `margin-bottom` inline style from the columns wrapper; spacing is already governed by block attributes
- `plumbing-hero`: Removed redundant `margin-top:0` inline style from the stats flex group; the block attribute still controls the value", "readme_txt": "* ADDED: New elayne/post-loop-grid pattern — responsive 3-column post grid with portrait images, date/category meta, and pagination; inherits archive/index query context automatically.
* CHANGED: template-index-grid — now uses elayne/post-loop-grid instead of elayne/blog-post-columns-portrait.
* CHANGED: template-page-archive — now uses elayne/post-loop-grid instead of elayne/blog-post-columns-portrait.
* FIXED: main-services-stack — removed redundant margin-bottom inline style from columns wrapper.
* FIXED: plumbing-hero — removed redundant margin-top:0 inline style from stats group."}

## [4.3.2] - 2026-05-22

### Changed

**README Banner Image:**
- Replaced `readme-banner.png` with `readme-banner.jpg` for the theme's README banner
- Updated `README.md` to reference the new JPG banner using standard Markdown image syntax
- Removed centered `<div>` wrapper layout in favour of a plain Markdown `# h1` heading with inline image
- Simplified README header structure: eliminated two `<div align="center">` blocks and the nested SVG logo reference",

## [4.3.1] - 2026-05-22

### Fixed

**Plumbing Hero Pattern — Stats Row Inline Style Mismatch:**
- Added missing `margin-top:0` and `padding-top:var(--wp--preset--spacing--large)` to the stats row container's inline style in `plumbing-hero.php`
- The block attributes specified both margin and padding-top via `"spacing":{"margin":{"top":"0"},"padding":{"top":"var:preset|spacing|large",...}}`, but the serialized HTML omitted them, causing a block validation mismatch
- Inline style now correctly reflects all spacing attributes declared on the group block",

## [4.3.0] - 2026-05-22

### Added

**Bistro Style Variation:**
- New 8th style variation "Bistro" — ink-blue editorial palette (Bricolage Grotesque, Instrument Sans, Instrument Serif) for modern restaurants and wine bars
- Bistro font assets added: Bricolage Grotesque variable (woff2), Instrument Sans variable + italic (woff2), Instrument Serif regular + italic (woff2), Inter variable (ttf)

**Food & Beverage Block Styles (6 new):**
- `fandb-header` — Sticky frosted-glass header with dark topbar, 3-column brand-center grid layout, underline nav hover animation, and mobile hamburger
- `fandb-hero` — Full-bleed hero with clamp-scaled display heading, floating rating/open-status chips, 4:5 image column with amber editorial bar, and service badge pill
- `fandb-marquee` — Infinite CSS-animation scrolling strip with ghost/outline text variant and `prefers-reduced-motion` fallback
- `fandb-menu` — Editorial menu section with ghost MENU watermark, dotted leader rows (name / leader / price grid), dietary tags, and hover indent animation
- `fandb-reserve` — Reservations and hours section on deep cobalt, dotted leader hours table with today/closed state highlights, and amber eyebrow dash
- `fandb-story` — Magazine-layout chef story with sticky text column (desktop), pull quote (serif italic + amber border), image tag overlay, and signature block

**F&B Header Pattern:**
- New `elayne/fandb-header` pattern — bistro header with dark topbar (hours, social links, phone), frosted-glass sticky main bar, desktop nav with underline animation, and mobile-responsive hamburger menu

**AI Pattern Builder (beta):**
- Preview feature available via the [Waygate](https://github.com/imagewize/waygate) companion plugin — install via GitHub or Composer (`imagewize/waygate` on Packagist); requires WP 7.0+

### Changed

**Food & Beverage Vertical:**
- Pattern count increased from 13 to 14
- Vertical description updated to reflect marquee strip, reservations, and chef story patterns
- Now ships two style variations: classic Food & Beverage (emerald/cream, Anton/Asap Condensed) and new Bistro (ink-blue, Bricolage Grotesque/Instrument Sans)

**Style Variation Count:**
- Total pre-configured palettes increased from 7 to 8 (Bistro added)

**Typography Documentation:**
- Font list updated to include Bistro fonts (Bricolage Grotesque, Instrument Sans, Instrument Serif) alongside existing variation fonts

**Documentation:**
- README streamlined to essentials (what/why/install/companion plugins); detailed pattern inventory, industry vertical descriptions, style variation list, and typography moved to CONTRIBUTING
- CONTRIBUTING expanded with full pattern library counts, complete industry vertical descriptions, all 8 style variation details, and Waygate AI Builder installation instructions

### Fixed

**Pill/Badge Shrink-Wrap in WP Columns:**
- Pills and badges inside `wp:column` blocks now correctly shrink-wrap to content width
- Added `align-self: flex-start` and `width: fit-content` to `fandb-hero-stamp` CSS rule
- WordPress `is-layout-flow` columns are `flex-direction: column` containers; children are blockified regardless of `display: inline-block` or `display: inline-flex` — only CSS `align-self` prevents the default stretch behaviour

### Technical

**Block Style Registration:**
- Added `elayne_register_fandb_block_styles()` on `init` — registers 6 `core/group` style variations and conditionally enqueues each CSS file via `wp_enqueue_block_style()` (loads only on pages using the style)

**Development Workflow Documentation:**
- `fse-dev-mode.php` mu-plugin documented: hooks `pre_get_block_template`, returns filesystem templates when `WP_ENV=development`, eliminating manual cache flushes for template/template-part changes
- `rebuild-demo-subsite.php` workflow documented with dry-run flag and available subsite list
- Playwright testing section added to `vibe.md` with all actions, viewport options, and recommended workflow order
- Clarified that `WP_DEVELOPMENT_MODE=theme` + mu-plugin together mean `wp cache flush` is no longer needed for normal theme development",

## [4.2.0] - 2026-05-18

### Added

**Services Stack Pattern (`elayne/main-services-stack`):**
- New editorial pattern featuring a numbered services list with four service entries: FSE theme builds, Headless + Sage, Vertical kits, and Performance + SEO
- Two-column header section with uppercase kicker text, condensed display heading with italic serif accent, and a companion description paragraph
- Each service row includes an italic serif number, uppercase heading, short description, and pill-tag group
- Animated arrow indicator (`↗`) per row that shifts on hover

**Editorial Block Styles (CSS):**
- `is-style-editorial-services-stack` — Container style for the services stack; styles kicker text (uppercase, wide letter-spacing) and condensed heading with italic serif `<em>` and `<mark>` accents in `accent-warm`
- `is-style-editorial-service-row` — Row style with bottom border, flex layout, and hover animation: `padding-left` slides in 56 px and a 40 px warm-accent line extends from the left edge; arrow indicator translates and changes colour; transitions use `cubic-bezier(.2, .7, .2, 1)` at 380 ms; stack collapses to column at ≤600 px; all transitions suppressed under `prefers-reduced-motion`
- `is-style-editorial-pill` — Paragraph block style rendering inline tag chips: `xx-small` bold uppercase text, `main-accent` colour, `border-light` border, `999px` border-radius, and zero margin

### Changed

**Hero Pattern (`elayne/main-hero`):**
- Updated displayed version number in hero stats column from `v4.0.2` to `v4.2.0`
- Revised hero description copy: replaced "Patterns that compose." with "Content that pops."

**Theme Screenshot:**
- Updated `screenshot.png` to reflect the current hero design including the new services stack section",

## [4.1.0] - 2026-05-17

### Added

**Sentinel Runtime Validator (Pass 3):**
- Added `@imwz/wp-pattern-sentinel` as a dev dependency — a Playwright-based browser validator that logs into WP admin, inserts each pattern into a draft page, saves, and reads back JS block validation errors
- Catches issues PHP-only validation cannot: `border-top-style:solid` auto-injection, `has-text-color` vs `has-{preset}-font-size` class ordering, button link class ordering, `backgroundColor:"base"` being dropped
- Added npm scripts: `validate`, `validate:woo`, `validate:file`, `validate:new`, `validate:new:woo`, `validate:clear-cache`
- Added composer.json bridge scripts for sentinel commands

**Brand Element + Editorial Header:**
- New `brand-logo` block style for `core/site-title` — orange dot via `::before` on the `<a>`, Mona Sans condensed 900 at the `medium` preset, all typography set directly on the link element to bypass WordPress inheritance blocking
- New `status-pill` block style for `core/paragraph` — pill border, uppercase tracking, pulsing orange dot via `::before` with 2.2s ease-out keyframe animation
- New `header-editorial` pattern — minimal sticky header with brand logo left, centered nav, status pill right; frosted-glass effect via `backdrop-filter: saturate(140%) blur(14px)` scoped to `.elayne-editorial-header`
- All three CSS files (`brand-logo.css`, `status-pill.css`, `editorial-header.css`) in `assets/styles/block-styles/` and loaded conditionally via `wp_enqueue_block_style()` — zero cost on pages not using these styles

**Main-Hero Pattern:**
- New `main-hero.php` — editorial homepage hero for agency and corporate sites; `editorial-eyebrow` label above the headline, `editorial-hero-heading` block style with staggered per-line rise animation

**Editorial Block Styles (main-hero redesign):**
- New paragraph styles: `editorial-eyebrow` (uppercase label with decorative line prefix), `editorial-pill`
- New heading styles: `editorial-hero-heading` (condensed/900-weight with staggered per-line rise animation), `editorial-footer-wordmark`
- New group styles: `editorial-services-stack`, `editorial-service-row`, `editorial-work-grid`, `editorial-work-card`, `editorial-pull-quote`, `editorial-stats`, `editorial-cta`
- New CSS: `assets/styles/block-styles/editorial-eyebrow.css`, `assets/styles/block-styles/editorial-hero-heading.css`
- Hero animation system: `elayne-page-loaded` class injected synchronously into `<html>` via inline head script; animations disabled in FSE editor (`is_admin()` guard) and `prefers-reduced-motion`

**Block Attribute Rules Documentation:**
- Documented six new serializer pitfalls in CLAUDE.md: CSS vars in block JSON (`var:preset|color|x` not `var(--wp--...)`), ampersand escaping, double-dash in className, button border-radius pairing, navigation `ref` distribution rule, navigation attr order (`style` before `layout`)

### Changed

**Home Improvement Vertical Rename:**
- Renamed display label from "Plumbing & Trades" to "Home Improvement" in `functions.php`, README.md, CONTRIBUTING.md, and all documentation
- Internal slug, file names, CSS classes, and style JSON intentionally kept as `plumbing-*` to avoid database migration
- README style variation list updated: "Plumbing" → "Home Improvement"
- Contact Form 7 note updated: "Plumbing Contact Section" → "Home Improvement Contact Section"

**Pattern Library Counts:**
- Total count updated from 140+ to 125+ following retirement pass
- Hero Sections: 8 → 6; Blog & Posts: 11 → 6; Pages: 12 → 11
- Spa & Wellness: expanded description from "3 patterns" to full 10-pattern set including wellness posts
- Food & Beverage: 14 → 13 patterns; Legal Services: 9 → 8 patterns
- README note added for new `main-hero` pattern for agency and corporate homepages

**Four-Pass Validation Process:**
- Validation workflow expanded from three-pass to four-pass
- Former Pass 3 (HTML template compliance checker) promoted to Pass 4
- New Pass 3 is the sentinel runtime validator
- Added critical distinction note: Pass 1 (`wp pattern validate`) uses PHP only; Pass 3 (sentinel) runs the full Gutenberg JS `save()` function

**PHP Code Quality Standards:**
- Added phpcs/phpcbf guidance to CLAUDE.md and vibe.md: must run from theme directory so `phpcs.xml` is picked up; use `array()` not `[]`; tabs not spaces; multi-line call formatting; array alignment rules

### Fixed

**CSS Var Notation in Block JSON (`agency-services-showcase.php`):**
- Changed four service card border color attributes from `"color":"var(--wp--preset--color--border-light)"` to `"color":"var:preset|color|border-light"`
- Prevents WordPress serializer from Unicode-escaping `--` as `-`, which caused block content mismatch errors

**BEM Double-Dash Class Names (nail salon & plumbing heroes):**
- Renamed `floating-badge--bl` → `floating-badge-bl` and `floating-badge--tr` → `floating-badge-tr` in CSS selectors (`nail-salon-variation.css`, `plumbing-variation.css`)
- BEM `--` modifier syntax is escaped by the WordPress serializer in `className` values, causing block validation failures

**WooCommerce Related Products (`woo-product-related.php`):**
- Fixed empty space below the related products section caused by incorrect group wrapper structure
- Added hover reveal add-to-cart button on product cards

**WooCommerce Hero Mobile Stacking (`woo-hero.php`):**
- Removed `is-not-stacked-on-mobile` class to restore correct single-column stacking on mobile viewports

**Header Pattern Serialization:**
- Compacted closing tag whitespace in `header-social-logo-hamburger.php` to match WordPress block serializer output
- Added missing newline between image block closer and paragraph opener in `plumbing-header.php` to resolve block content mismatch

**Editorial Header Navigation (`editorial-header.css`):**
- Fixed nav overlay clipping that was cutting off dropdown menus
- Fixed mobile hamburger icon vertical alignment

### Technical

- Added `package-lock.json` (lockfileVersion 3) with `@imwz/wp-pattern-sentinel@1.0.0` and its dependency tree (playwright 1.60.0, p-queue, js-yaml)
- Updated `@imwz/wp-pattern-sentinel` from 1.0.0 to 1.0.2
- Updated `package.json` version from `1.0.0-beta.2` to `4.0.2` and description to reflect 100+ patterns
- Added `.env`, `sentinel-*.log.json`, `.sentinel-cache.json` to `.gitignore`
- Retired patterns: `author-box.php`, `blog-post-columns-fandb.php`
- Updated `.vibe/skills/design/README.md` and `SKILL.md` to document plumbing slug as Home Improvement internal identifier",

## [4.0.2] - 2026-05-15

### Fixed

**Theme Description Ampersands:**
- Replaced `&` with `and` in theme description for industry verticals (spa and wellness, food and beverage) to ensure compatibility with WordPress.org theme guidelines and XML parsing

**WooCommerce Text Domain:**
- Corrected text domain for "Awaiting product image" placeholder string in `product-image.php` from `woocommerce` to `elayne`
- Ensures the string is translatable within the theme's own translation files",

## [4.0.1] - 2026-05-15

### Changed

**WooCommerce Featured Products Renamed to Signature Pieces:**
- Renamed pattern file `woo-featured-products.php` → `woo-signature-pieces.php`
- Pattern slug changed from `elayne/woo-featured-products` to `elayne/woo-signature-pieces`
- Update any pages or templates that reference the old slug

### Fixed

**WooCommerce Quick Add Button Coverage:**
- Changed `margin-block-start: 0` to `margin: 0` on the product collection quick-add button
- Previously a 12px strip of the product image remained visible below the button on hover (caused by `wp-block-button` default `margin-bottom: 12px`)
- Button now fully covers the image bottom edge during the slide-up reveal animation

**WooCommerce Product Category Terms Spacing:**
- Removed `padding-top: 1rem` from `.wp-block-post-terms` inside product collections (set to `0`)
- Terms now sit flush directly under the product image with no breathing strip

**WooCommerce Store Pattern Fixes:**
- Fixed block attribute errors in `woo-signature-pieces` pattern
- Fixed JSON/HTML font-size desync in WooCommerce store patterns — aligns inline `fontSize` values with theme.json presets
- Fixed `woo-hero` block markup to pass structural validation

### Technical

**Pattern Block Comment Whitespace Cleanup (Pass 1 Validator):**
- Removed blank lines between the PHP closing tag (`?>`) and the first WordPress block comment across 15+ pattern files
- Eliminates whitespace that can cause WordPress block validation mismatches
- Affected patterns: agency-services-showcase, author-box, banner-announcement-bar, banner-page-header-accent, banner-page-header-slanted, banner-page-header, blog-post-columns-fandb, blog-post-columns-landscape, blog-post-columns-portrait, blog-post-list, card-call-to-action, career-opportunities, and others

**Pattern HTML Closing Tag Whitespace Cleanup:**
- Removed stray whitespace between HTML element closing tags and adjacent WordPress block comments across all 142 pattern files
- Prevents block serialization mismatches caused by unexpected whitespace nodes

**Pattern `backgroundColor` Attribute Order Fix:**
- Moved `backgroundColor` attribute after `style` and before `layout` in the block JSON for multiple patterns
- Corrects attribute ordering to match WordPress canonical serialization and prevent block validation warnings
- Affected patterns: agency-services-showcase, banner-page-header-accent, banner-page-header

**Dependency Updates:**
- Updated `imagewize/pt-cli` from v2.2.3 to v2.3.1
- Updated `symfony/console` from v7.4.9 to v7.4.11
- Updated `symfony/string` from v8.0.8 to v8.0.11

**Developer Tooling:**
- Removed `python` and `python3` from the vibe config denylist, allowing Python scripts in the development environment
- Updated CLAUDE.md pattern validator docs: clarified dry-run label, documented `--log` flag for writing audit logs, added note that `summary.md` is git-tracked while `*.php.diff` files are gitignored",

## [4.0.0] - 2026-05-12

### Fixed

- Replace `register_block_type()` calls with `render_block` filter pattern to comply with WP.org theme guidelines (plugin-territory rule); product attributes table and shipping/returns content now use `core/group` placeholders with specific classNames
- Improve skip link focus state visibility: high-contrast white outline with black box-shadow ring, meeting WCAG focus indicator requirements

### Added

**WooCommerce Store Integration:**
- Full WooCommerce subsite support at `/store/` with shop, category archive, and single product page templates
- Three-tier implementation strategy: use plugin patterns as-is (Tier 1), style with CSS (Tier 2), custom theme patterns only if needed (Tier 3)
- WooCommerce plugin patterns explicitly exempted from Elayne compliance rules
- Verified filter block taxonomy IDs documented (Leather Colour = 1, Style = 2, Features = 3)

**WooCommerce Filter Sidebar Enhancements:**
- `product-filter-rating` added to base `archive-product.html` and `taxonomy-product_cat.html` sidebars — star rating filter via checkbox list
- `product-filter-taxonomy` (Categories) added to `taxonomy-product_cat.html` sidebar — lets shoppers switch between product categories from within a category archive
- `archive-product-store.html` — demo-store-specific shop archive template with three pre-wired attribute filters: Leather Colour (chip display, `attributeId:1`), Style (checkbox list, `attributeId:2`), Features (checkbox list, `attributeId:3`); pushed to store DB via rebuild script
- `taxonomy-product_cat-store.html` — matching demo-store-specific category archive template with the same three attribute filters

**Mobile Filter Drawer (`category-filter-drawer.js`):**
- Touch-friendly slide-in sidebar drawer for shop filters on mobile
- Backdrop overlay, close button, and Apply button injected dynamically
- "Clear filters" link auto-injected when active `filter_*` URL params are detected
- Escape key and backdrop click both dismiss the drawer
- Accessibility: `aria-expanded` toggled on filter trigger button
- `elayne-clear-filters-btn` CSS styles for the sidebar "× Clear filters" link (uppercase, orange brand colour, hover to primary)

**Product Page Interactivity (`woocommerce-product-page.js`):**
- Custom gallery thumbnail switcher synced across desktop and mobile gallery sections
- Colour swatch selector with active-state tracking and selected label update
- Style option picker with unavailable-state exclusion
- Engraving option toggle (selected/deselected)
- Accordion tabs: open/close with `+`/`−` icon and single-open constraint
- Wishlist button toggle
- Custom product gallery lightbox: click any gallery image to open a full-screen overlay with prev/next navigation, keyboard (Escape / arrow keys) support, and backdrop-click to close; appended to `<body>` to avoid stacking-context issues

**New Block Styles:**
- `elayne-avatar-circle` — 44 × 44 px circular container for testimonial avatars
- `elayne-category-hero` — full two-column hero with charcoal grid-pattern background, breadcrumb, description, and visual area; includes companion meta bar style

**New Fonts:**
- Jost variable font (regular + italic WOFF2) added to `assets/fonts/store/` for store pages

**Store Product Placeholder Images (CC0):**
- Ten AI-generated product placeholder images (`product-placeholder-I.webp` through `product-placeholder-X.webp`) added to `patterns/images/store/`
- Generated by Claude Code; released under CC0 1.0 Universal (Public Domain) — no attribution required
- Used across WooCommerce product archive and single product patterns as neutral demo imagery

**Pattern Validation — Three-Pass Workflow:**
- Pass 1: Gutenberg structural validator (`wp pattern validate --fix`) via Trellis VM
- Pass 2: pt-cli compliance checker (`composer check` / `pt-cli check`) on host
- Pass 3: HTML template checker (`pt-cli check:templates`) for `.html` template and part files; catches WooCommerce filter block wrapper drift, `taxQuery:{}` vs `[]`, missing `"theme"` on `wp:template-part`

**New Translation Helper:**
- `wp_kses_post( __( '...', 'elayne' ) )` documented for text containing inline HTML (`<strong>`, `<br>`, `<a>`)

### Changed

**Template: `front-page.html` Removed:**
- Removed `front-page.html` template — it caused content override issues on other multisite subsites
- Homepage is now assigned via the WordPress page editor; `home.html` covers blog index and static homepage

**Rebuild Script (`rebuild-demo-subsite.php`):**
- `store` subsite extended with `$templates` map entry — pushes `archive-product-store.html` and `taxonomy-product_cat-store.html` to the store subsite DB on each rebuild run; idempotent (attributes, categories, and products skipped if already present)

**Vertical Workflow — pt-cli Scaffold Commands:**
- Three scaffold options documented: Option A (layout-based via `composer layout:create`), Option B (WooCommerce template via `composer pattern:create`), Option C (shell-only editor-first)
- Entry point is always pt-cli scaffold — never write block JSON from scratch
- Read validation-guard snippets from `vendor/imagewize/pt-cli/snippets/` before editing cover, columns, button, or heading blocks

**Spacing & Font Scale Documentation:**
- Exact clamp values for all spacing presets (`2-x-small` through `x-large`) added to reference tables
- Exact max values for all font-size presets (`x-small` through `xx-large`) added
- Warning: `xx-small` does NOT exist — use `2-x-small` or `x-small`
- Pill/badge padding rule: always `x-small` (vertical) + `small` (horizontal); never `medium`

### Fixed

**Block Validation Rules (Critical):**
- Whitespace-strict rule: NEVER add tabs, newlines, or spaces between an opening/closing `<div>` and adjacent `<!-- wp:... -->` comments — causes block serialization mismatch
- Button `fontSize`: `wp:button` does NOT support root-level `fontSize` — must use `"style":{"typography":{"fontSize":"var:preset|font-size|base"}}`
- SVG images: NEVER add `width`/`height` attributes to `<img>` inside `wp:image` for theme-bundled SVGs (no media ID means WP cannot validate dimensions)
- `blockGap` inline gap behavior: `constrained`/`default` groups must NOT have inline `gap`; flex groups must have it; columns blocks never have inline gap
- `metadata.name` should only appear on the outermost (root) block of a pattern file
- `fontSize`/`fontFamily` as root-level block attributes generate CSS classes, not inline styles

**Unicode in PHP Strings:**
- Documented that PHP single-quoted strings do NOT process `\u` escapes — always use actual UTF-8 characters or double-quoted strings with `"\u{XXXX}"`

**WooCommerce Pattern Pitfalls:**
- `product-title` inside `product-template` must use `post-title` with `__woocommerceNamespace`
- Never add `__woocommerceNamespace` to native WC blocks (product-image, product-price, etc.)
- `product-collection` handles its own pagination — never use standalone `query-pagination`
- `taxQuery` must be `[]` (array), not `{}` (object)

**WooCommerce Product Display:**
- Product button set to full width (`width: 100%`, centred alignment) in `archive-product.html`, `archive-product-spa.html`, and `taxonomy-product_cat.html`
- Product image CSS selector specificity raised to `(0,3,0)` (`.product-collection .wc-block-product .product-image`) to beat WooCommerce's default `aspect-ratio: 1/1` rule at `(0,2,0)` — preserves the custom `3/4` portrait ratio

### Technical

**Vibe CLI Config:**
- Switched active model from `devstral-2` to `mistral-medium-3.5` with `thinking: "high"`
- Updated temperature (0.2 → 1.0) and pricing to match new model
- Bash tool allowlist sorted alphabetically; added `file`, `find` entries

**Documentation:**
- `CLAUDE.md`, `AGENTS.md`, and `.vibe/prompts/vibe.md` all updated with WooCommerce subsite URLs, filter block IDs, three-tier strategy, three-pass validation workflow, and critical block rules
- CI note: GitHub Actions runs Pass 2 automatically on every PR; Passes 1 and 3 are local-only

## [3.9.1] - 2026-04-24

### Added

**Nail Salon "Why Choose Us" Real Photo:**
- Added `why-nail-salon.webp` — a CC0-licensed photo (StockSnap.io / Freestocks.org) showing hands receiving a nail treatment
- Replaces the previous placeholder text block in the nail salon Why Us pattern image column
- Image credited and documented in `readme.txt` under image attributions

### Changed

**Nail Salon Why Us Pattern — Image Column:**
- Replaced the static placeholder group (with centered "Salon Photo" text, large padding, and constrained layout) with a real `wp:image` block inside a borderless default-layout group
- Removed explicit padding and `blockGap` from the image container group; border and border-radius are retained
- Layout type changed from `constrained` to `default` so the image fills the container naturally

### Technical

**`overlay-grid-wrap` Image Rendering CSS:**
- Added `overflow: hidden` on the first child of `.overlay-grid-wrap` when it contains a `wp-block-image`, ensuring the image is clipped to the group's `border-radius`
- Reset `margin: 0` on `.wp-block-image` inside the first child to prevent unintended spacing
- Set `width: 100%`, `height: 100%`, `object-fit: cover`, and `display: block` on the `img` element so the photo fills the overlay grid cell without distortion",

## [3.9.0] - 2026-04-13

### Added

**Nail Salon Industry Vertical — 7 New Patterns:**
- `nail-salon-hero.php` — Split hero with cover block photo, floating stats badge, and rose-toned pill CTA
- `nail-salon-services.php` — Service card grid (gel nails, acrylics, pedicure, nail art, paraffin) with icon badges and pricing
- `nail-salon-stats-bar.php` — Full-width stats strip with happy clients, 5-star reviews, years experience, and nail art designs counters
- `nail-salon-why-us.php` — Why-choose-us section with 4 benefit columns (icons, headings, descriptions)
- `nail-salon-testimonials.php` — Client testimonials grid with star ratings, names, and treatment context
- `nail-salon-cta.php` — Booking CTA with rose background, headline, and dual-button layout
- `nail-salon-contact.php` — Contact section with address, phone, email, hours, and embedded map placeholder

**Nail Salon Style Variation:**
- `styles/nail-salon.json` — Rose and blush pink palette with Cormorant Garamond headings and Open Sans body; full design system including gradients, duotone filters, and border presets
- `assets/styles/nail-salon-variation.css` — Component CSS scoped to `.style-variation-nail-salon`; card overflow, floating badge overrides, hero cover block clip
- Block styles registered: `nail-salon-avatar` (circular portrait), `nail-salon-badge` (rose pill label), `nail-salon-years-badge` (large accent ring badge)
- Dedicated CSS: `assets/styles/block-styles/nail-salon-avatar.css`, `nail-salon-badge.css`, `nail-salon-years-badge.css`

**Nail Salon Assets — 11 SVG Icons:**
- `icon-nail-polish.svg`, `icon-acrylic.svg`, `icon-gel-nails.svg`, `icon-nail-art.svg`, `icon-pedicure.svg`, `icon-paraffin.svg` — service icons
- `icon-5-stars.svg`, `icon-star-rose.svg`, `icon-check-rose.svg`, `icon-badge-rose.svg` — quality/badge icons
- `icon-phone-rose.svg`, `icon-clock-rose.svg`, `icon-email-rose.svg`, `icon-location-rose.svg`, `icon-arrow-right-white.svg` — contact/UI icons

**Hero Photos (CC0):**
- `patterns/images/nail-salon/hero-nail-salon.webp` — Woman with red manicured nails (StockSnap.io / María Victoria Heredia Reyes, CC0)
- `patterns/images/plumbing/hero-plumbing.webp` — Gold plumbing taps on tiled wall (StockSnap.io / Studio 7042, CC0)

### Fixed

**Nail Salon Hero — Cover Block Replacement:**
- Replaced placeholder SVG image block in `nail-salon-hero.php` with a `wp:cover` block using `hero-nail-salon.webp`; image fills the card with `object-fit: cover` and clips to the card's border-radius via `overflow: hidden`

**Plumbing Hero — Cover Block Replacement:**
- Replaced placeholder icon group in `plumbing-hero.php` with a `wp:cover` block using `hero-plumbing.webp`; same cover+clip approach as the nail salon hero
- Removed stale `.plumbing-hero-placeholder-icon` opacity rule from `plumbing-variation.css`; added `.plumbing-hero-card { overflow: hidden; padding: 0 }` for correct cover block clipping

**Overlay Grid — Cover Block Positioning:**
- Extended `.overlay-grid-wrap` grid rule in `style.css` to also target `wp:cover` children (`.overlay-grid-wrap > .wp-block-cover`), ensuring floating badges layer correctly over cover-block hero images

### Technical

**Safari Scrollbar Fix — Extracted to Dedicated Editor Stylesheet:**
- Moved Safari scrollbar visibility CSS (`::-webkit-scrollbar` rules) out of `style.css` into a new dedicated file `assets/css/editor.css`
- Registered `assets/css/editor.css` via `add_editor_style()` in `functions.php`
- Keeps `style.css` focused on frontend styles; editor-only fixes now live in their own stylesheet
- No visual change — scrollbar appearance in the Gutenberg editor remains identical

## [3.8.0] - 2026-04-07

### Added

**Single Post Templates:**
- Added `single-centered.html` template for centered single post layout, using the `elayne/template-post-centered` pattern
- Added `single-wide.html` template for wide single post layout, using the `elayne/template-post-wide` pattern

### Fixed

**Responsive Table Overflow in Post Content:**
- Tables inside post content (`wp-block-post-content`) now scroll horizontally on small screens instead of breaking the layout
- Applied `overflow-x: auto` and `display: block` to the table wrapper
- Set `min-width: 600px` on tables to preserve column structure on narrow viewports",

## [3.7.4] - 2026-03-29

### Fixed

**Blog Post Columns Pattern - Query Inheritance:**
- Set `inherit` to `true` in the query block of the blog-post-columns pattern
- Ensures the query correctly inherits context (e.g., category, tag, author) from the current page/archive
- Fixes cases where the pattern ignored URL query parameters on archive and taxonomy pages",

## [3.7.3] - 2026-03-26

### Fixed

**Post Author Meta Color in Right Sidebar Template:**
- Changed author meta group color from `secondary` to `main-accent` for improved contrast and visual consistency
- Updated separator dot paragraph color from `secondary` to `main-accent` to match author and date text
- Updated link color within author meta group from `secondary` to `main-accent`

**Post Author Meta Vertical Alignment:**
- Added `verticalAlignment: center` to author meta flex container to properly align author name, separator, and date on the same baseline

**Author Name Margin Reset:**
- Removed default bottom margin from `.wp-block-post-author__name` to prevent vertical misalignment with adjacent meta elements (separator dot, post date)",

## [3.7.2] - 2026-03-26

### Changed

**Publicist Style: Body Typography**
- Increased global line height from `1.6` to `1.75` for improved editorial readability
- Added default `blockGap` of `1.75rem` to create consistent vertical rhythm between blocks

**Publicist Style: Heading Spacing**
- Added explicit top/bottom margins to `h2` (`2rem` top, `0.75rem` bottom) for clearer section separation
- Added explicit top/bottom margins to `h3` (`1.5rem` top, `0.5rem` bottom) for improved content hierarchy

**Publicist Style: Paragraph Spacing**
- Added block-level paragraph margin (`0` top, `1em` bottom) to ensure consistent spacing between paragraphs across all editorial content",

## [3.7.1] - 2026-03-25

### Added

**Eyebrow Block Style for Paragraphs:**
- Registered new `is-style-eyebrow` block style for `core/paragraph` blocks
- Added `eyebrow.css` with dedicated styles: font-weight 500, letter-spacing 0.1em, uppercase text transform, normal font style
- Style is now selectable in the block editor sidebar for any paragraph block

### Changed

**Pattern Eyebrow Refactor — Replaced Inline Styles with Block Style:**
- Converted all eyebrow/label paragraphs across 9 patterns from manual inline typography attributes to the new `is-style-eyebrow` class
- Affected patterns: `event-upcoming-grid`, `fandb-events-grid`, `image-card-grid`, `overlapping-feature-columns`, `overlapping-feature-columns-reversed`, `portfolio-grid-masonry`, `spa-home-hero`, `stats-list`, `stats-showcase`
- Removes duplicated inline `fontWeight`, `letterSpacing`, `textTransform`, `fontStyle` declarations in favour of the centralised block style

**Pattern Font Size Standardization — Replace Hard-coded Pixel Values:**
- `portfolio-grid-masonry`: Replaced hard-coded pixel font sizes (`11px`, `12px`, `14px`, `22px`) with theme preset sizes (`x-small`, `xx-small`, `medium`) on eyebrow labels, filter pills, card titles, and tag badges
- Filter pill and tag badge font sizes now use `x-small` / `xx-small` presets instead of literal `14px` / `12px` values
- Portfolio card heading font size changed from inline `22px` to `medium` preset

**Pattern Font Family Cleanup — Remove Hardcoded Cormorant Garamond:**
- Removed explicit `cormorant-garamond` font family from headings in `overlapping-feature-columns`, `overlapping-feature-columns-reversed`, `spa-home-hero`, and `four-column-wellness-posts` patterns
- Headings now inherit the theme default heading font, improving maintainability and allowing per-site font customisation without overriding pattern markup",

## [3.7.0] - 2026-03-24

### Changed

**Style Variations Consolidated (10 → 6):**
- Removed five style variations: Gray & Gold, Denim & Copper, Forest & Sage, Orange, and Teal Bay
- Replaced with a single new **Publicist** variation — indigo & violet palette with elegant Bodoni Moda serif, designed for modern publications and blogs
- Updated `style.css` description, `readme.txt`, and `README.md` to reflect 6 style variations
- Bodoni Moda font now attributed to Publicist variation (previously Gray & Gold)

**Plumbing Pattern Category:**
- All plumbing-specific patterns now cross-listed under the new `elayne/plumbing` category in addition to their original categories
  - `plumbing-contact.php` → added `elayne/plumbing`
  - `plumbing-emergency-cta.php` → added `elayne/plumbing`
  - `plumbing-footer.php` → added `elayne/plumbing`
  - `plumbing-header.php` → added `elayne/plumbing`
  - `plumbing-hero.php` → added `elayne/plumbing`
  - `plumbing-services.php` → added `elayne/plumbing`
  - `plumbing-stats-bar.php` → added `elayne/plumbing`
  - `plumbing-testimonials.php` → added `elayne/plumbing`
  - `plumbing-why-us.php` → added `elayne/plumbing`

### Added

**Plumbing & Trades Pattern Category:**
- Registered new `elayne/plumbing` pattern category ("Plumbing & Trades") in `functions.php`
- Provides a single-category view of all plumbing industry patterns in the block inserter

**Contact With Form Pattern (`elayne/contact-with-form`):**
- New generic two-column contact section pattern for all style variations
- Left column: business details with phone, email, address, and hours using SVG icons
- Right column: card with Contact Form 7 integration when plugin is active; falls back to static placeholder fields when CF7 is inactive
- Uses theme color tokens and spacing presets for full style-variation compatibility

**Contact Form 7 Integration — Plumbing Contact Pattern:**
- `plumbing-contact.php` now conditionally renders a live CF7 form when the plugin is active
- Falls back gracefully to the existing static placeholder fields when CF7 is not installed

**Contact Form 7 Global Styles (`style.css`):**
- Full CSS styling for CF7 forms in the generic light-card context
- Flex column layout with consistent `--wp--preset--spacing--medium` gap between fields
- Labels: uppercase, 600-weight, `x-small` font size using `main-accent` color token
- Inputs and textarea: `secondary` background, `border-light` border, focus highlight with `primary` color
- Submit button: full-width, pill-shaped, `primary` background with `primary-alt` hover
- Validation error tips, invalid field highlight, and success/error response bar styling
- Hidden-fields container suppressed via `display: none`

**Contact Form 7 Plumbing-Specific Styles (`plumbing-variation.css`):**
- Dark-card overrides for CF7 forms inside the plumbing style variation
- Inputs use `rgba(255,255,255,0.05)` background with `#1e3558` border and white text
- Focus highlight uses amber (`#E67E22`) to match the plumbing palette
- Submit button in amber (`#E67E22`) with pill border-radius
- Validation and response bar colors adjusted for dark backgrounds (light-red errors, green success)

### Technical

- Removed `styles/gray-gold.json`, `styles/denim-copper.json`, and `styles/forest-sage.json` style variation files
- Industry-specific content description updated to include "publishing" alongside spa, legal, food & beverage, and plumbing
- CF7 styles in `plumbing-variation.css` use higher specificity (`.style-variation-plumbing` prefix) to override global CF7 styles in `style.css`
- All CF7 CSS scoped to `.wpcf7-form` to avoid unintended styling of the block editor UI",

## [3.6.5] - 2026-03-22

### Changed

- Updated theme description to accurately reflect industry verticals (spa & wellness, legal, food & beverage, home services) and correct pattern/style variation counts
- Replaced outdated "real estate" vertical reference with food & beverage and plumbing in description, README.md, and readme.txt
- Updated pattern count from 82/95 to 103 across all documentation
- Updated style variation count from 8 to 10 across all documentation
- Added Food & Beverage and Plumbing to Industry Verticals section in readme.txt
- Replaced `one-column` and `rtl-language-support` tags with `e-commerce` and `grid-layout` in style.css and readme.txt

## [3.6.4] - 2026-03-20

### Added

**Hero Landscape SVG Illustration:**
- Added new `elayne_hero_landscape.svg` — a detailed mountain landscape at sunrise/sunset scene featuring layered mountains, reflective lake, pine tree silhouettes, moon, stars, and cloud wisps
- Illustration uses theme color palette (dark navy sky, warm orange sun/horizon glow)
- Licensed CC0 (public domain), attributed to Claude AI (Mar 2026)

**Theme.json Presets:**
- Added "Warm Glow" duotone preset (`#1F2937` / `#F5C070`) for warm sunrise-toned image treatments
- Added "Warm Diagonal" gradient preset (`linear-gradient(135deg, rgba(230,92,0,0.88), rgba(11,19,36,0.70))`)

### Changed

**Hero Modern Light Pattern:**
- Replaced `desktop.webp` placeholder image with the new `elayne_hero_landscape.svg` illustration
- Updated image alt text to describe the mountain landscape scene
- Reduced outer vertical padding from `xxx-large` to `xx-large` for a more compact hero section

**Agency Services Showcase Pattern:**
- Added `tertiary` background color to the outer section container for visual contrast
- Added `border-light` 1px border to all four service cards (Web Design, Digital Marketing, Brand Strategy, E-commerce) for improved card definition

### Fixed

**SVG Editor Display:**
- SVG images without intrinsic pixel dimensions now render at full width inside the block editor, matching frontend behaviour
- Implemented via editor-scoped inline CSS rule targeting `.editor-styles-wrapper .wp-block-image img[src$=".svg"]`

### Technical

**block-extensions.php:**
- Added `elayne_editor_svg_styles()` function hooked to `enqueue_block_editor_assets`, injecting SVG width fix via `wp_add_inline_style` on the `wp-edit-blocks` handle

**screenshot.png:**
- Updated theme screenshot to reflect current design",

## [3.6.3] - 2026-03-19

### Changed

**Legal Attorney Image Attribution:**
- Updated `legal/attorney-3.webp` image source attribution from StockSnap.io photo "Confident Business" by Matt Moloney to "Classy Man" by Jonas Svidras (CC0 1.0)",

## [3.6.2] - 2026-03-19

### Changed

**Plumbing Header Component Styles — Dedicated CSS Files:**
- Extracted plumbing header CTA button styles into `assets/styles/block-styles/plumbing-header-cta.css`
- Extracted plumbing top bar phone pill styles into `assets/styles/block-styles/plumbing-topbar-phone.css`
- Removed these styles from `plumbing-variation.css` (previously scoped under `.style-variation-plumbing` body class)

### Technical

**Block Style Enqueue for FSE Editor Compatibility:**
- Registered `plumbing-topbar-phone` and `plumbing-header-cta` component CSS via `wp_enqueue_block_style( 'core/group' )` in `functions.php`
- Styles now load in both the frontend and the FSE editor iframe without requiring a body class or `.editor-styles-wrapper` scope
- Fixes plumbing header CTA and top bar phone styles not rendering correctly in the Site Editor",

## [3.6.1] - 2026-03-19

### Changed

**Plumbing Variation — Style Enqueue Refactor:**
- Merged `plumbing-variation-editor.css` into `plumbing-variation.css`; deleted the separate editor stylesheet
- Switched enqueue hook from `wp_enqueue_scripts` + `enqueue_block_editor_assets` to `enqueue_block_assets` so a single file covers both frontend and FSE editor iframe
- Added active-variation guard (`wp_get_global_settings`) so the stylesheet is only enqueued when the plumbing variation is actually active
- Removed explicit `elayne-style` and `wp-edit-blocks` style dependencies (no longer needed with the unified hook)

**Plumbing Header Pattern — Phone Icons:**
- Added white SVG phone icon (`icon-phone-white.svg`) inside the top-bar phone pill group
- Added white SVG phone icon (`icon-phone-white.svg`) inside the CTA amber pill button in the main header bar
- Added `plumbing-topbar-phone-icon` CSS class and styles (14×14 px, `display:block`, zero margin) for the new top-bar icon

**Plumbing Header Pattern — Mobile Responsiveness:**
- Added `hide-on-mobile` class to the "Licensed & Insured · ROC #" text so it is hidden on small screens
- Added mobile breakpoint rule to center the top-bar flex group on screens ≤ 781 px
- Added mobile rule to strip pill styling (background, padding, border-radius) from `.plumbing-topbar-phone` on mobile, leaving only the icon + phone number visible",

## [3.6.0] - 2026-03-16

### Added

**Plumbing Industry Vertical:**

- `patterns/plumbing-header.php`: Plumbing site header pattern with logo, phone number, and emergency CTA button.
- `patterns/plumbing-hero.php`: Full-width hero section with headline, subtext, dual CTAs, and emergency availability badge. Floating badges use CSS Grid overlay (`plumbing-hero-card` class on the card group) so positioning works correctly in both the block editor and frontend.
- `patterns/plumbing-services.php`: Services grid pattern with six service cards (drain cleaning, leak repair, pipe replacement, water heater, sewer, commercial) using SVG icons and responsive grid layout.
- `patterns/plumbing-stats-bar.php`: Stats bar pattern with key business metrics (years experience, jobs completed, response time, satisfaction rate).
- `patterns/plumbing-why-us.php`: Why-choose-us section with feature list, years badge, and supporting image.
- `patterns/plumbing-testimonials.php`: Customer testimonials grid with star ratings and reviewer details.
- `patterns/plumbing-emergency-cta.php`: Emergency call-to-action banner with urgent messaging and phone CTA.
- `patterns/plumbing-contact.php`: Contact section with address, phone, hours, and contact form placeholder.
- `patterns/plumbing-footer.php`: Plumbing site footer with logo, nav links, contact details, and emergency call CTA.
- `assets/styles/block-styles/plumbing-service-card.css`: Block style for plumbing service card groups.
- `assets/styles/block-styles/plumbing-featured-card.css`: Block style for featured plumbing card groups.
- `assets/styles/block-styles/plumbing-badge.css`: Block style for plumbing badge elements.
- `assets/styles/block-styles/plumbing-years-badge.css`: Block style for years-in-business circular badge — 110px diameter, amber background, heading/paragraph child selectors, plus overlay positioning context when nested inside `.plumbing-why-image-wrap`.
- `assets/styles/block-styles/plumbing-section-label.css`: Block style for amber pill section labels (`core/paragraph`, `is-style-plumbing-section-label`).
- `assets/styles/block-styles/plumbing-stat-block.css`: Block style for stat number/label pairs (`core/group`, `is-style-plumbing-stat-block`).
- `assets/styles/block-styles/plumbing-check-icon.css`: Block style for circular amber check icon containers with SVG sizing (`core/group`, `is-style-plumbing-check-icon`).
- `assets/styles/block-styles/plumbing-why-item.css`: Block style for flex-row icon + text items in the why-us section (`core/group`, `is-style-plumbing-why-item`).
- `assets/styles/block-styles/plumbing-avatar.css`: Block style for circular gradient testimonial avatars (`core/group`, `is-style-plumbing-avatar`).
- `assets/styles/block-styles/plumbing-contact-icon.css`: Block style for rounded contact icon containers (`core/group`, `is-style-plumbing-contact-icon`).
- `assets/styles/block-styles/plumbing-call-btn.css`: Block style for the phone-icon CTA button (`core/button`, `is-style-plumbing-call-btn`); SVG phone icon injected via `::before` pseudo-element.
- `patterns/images/plumbing/`: 22 plumbing SVG icons — six service icons (`icon-commercial.svg`, `icon-drain.svg`, `icon-leak.svg`, `icon-pipe.svg`, `icon-sewer.svg`, `icon-water-heater.svg`); four hero/badge icons for floating trust indicators (`icon-shield.svg`, `icon-lightning-amber.svg`, `icon-clock-amber.svg`, `icon-phone-white.svg`); five rating/testimonial icons (`icon-5-stars.svg`, `icon-star-amber.svg`, `icon-check-amber.svg`, `icon-google-amber.svg`, `icon-users-amber.svg`); seven UI icons for footer, contact, and CTA patterns (`icon-alert-white.svg`, `icon-arrow-right-white.svg`, `icon-contact-clock.svg`, `icon-contact-email.svg`, `icon-contact-location.svg`, `icon-contact-phone.svg`, `icon-phone-amber.svg`).
- `styles/plumbing.json`: Plumbing style variation with navy/amber/emergency-red color palette, custom duotone filters, gradients, and heading typography overrides (uppercase, narrow font-stretch).
- `style.css`: Plumbing utility CSS section (`.plumbing-*` classes) added for layout and animation rules that cannot be scoped to a single block: hero diagonal separator (`::after` clip-path), hero image wrapper CSS Grid overlay for floating badges, stats divider, why-us column/image-wrap layouts, always-on text, emergency pulse keyframes, header top bar, and header CTA hover. Self-contained component styles (section label, stat block, check icon, why item, avatar, contact icon, call button) are registered as block styles instead and load on demand.
- `functions.php`: `elayne_register_plumbing_block_styles()` — registers and conditionally enqueues 11 plumbing block style variations across `core/group` (9), `core/paragraph` (1), and `core/button` (1). Patterns use `is-style-plumbing-*` class naming throughout.
- `functions.php`: `elayne_enqueue_plumbing_editor_styles()` — enqueues `plumbing-variation-editor.css` via `enqueue_block_editor_assets`, keeping all plumbing variation style concerns in one place.
- `assets/styles/plumbing-variation-editor.css`: Editor-only stylesheet applying `display: contents` to Gutenberg's intermediate `.block-editor-inner-blocks` and `.block-editor-block-list__layout` wrappers so the CSS Grid on `.overlay-grid-wrap` treats the card and badges as direct grid items in the editor.
- `assets/styles/plumbing-variation.css`: New dedicated stylesheet for all plumbing style variation CSS, scoped entirely under `.style-variation-plumbing` body class. Replaces the former inline plumbing section in `style.css` — prevents bleed into other style variations. Includes header top bar, navigation hover states, header CTA, hamburger, mobile overlay, hero diagonal separator, hero image placeholder, testimonial highlight, contact form, footer phone icon, and CTA icon rules.
- `styles/plumbing.json`: Added `settings.custom.styleVariation: "plumbing"` marker key — read by the new `body_class` filter to automatically add `.style-variation-plumbing` to the page body when this variation is active.
- `functions.php`: `elayne_style_variation_body_class()` — reads `custom.styleVariation` from the merged theme.json via `wp_get_global_settings()` and adds `style-variation-{slug}` to the body class list; enables CSS scoping for any style variation. `elayne_enqueue_plumbing_variation_styles()` — enqueues `plumbing-variation.css` globally (self-isolated via body class scope).
- Navigation hover: plumbing header navigation links now show a rectangular background (`border-radius: 6px`, `rgba(255,255,255,0.06)`) and white text on hover with no underline — matching the HTML design reference. Previously a leaky `.has-secondary-background-color` selector was used; now correctly scoped to `.style-variation-plumbing`.

**Vibe IDE Tooling:**

- `.vibe/skills/design/SKILL.md`: Design skill definition for Vibe CLI — generates production-grade HTML/CSS layouts and WordPress block patterns using the Elayne design system.
- `.vibe/skills/design/README.md`: Usage documentation for the design skill.
- `.vibe/config.toml`: Enabled `design` skill and added skill path for demo site.

## [3.5.3] - 2026-03-17

### Fixed

**WP.org Theme Review Compliance:**

- `patterns/legal-contact.php`: Replaced custom domain email `info@lawfirm.com` with `example@example.com`.
- `patterns/header-standard-with-tel-number.php`: Wrapped phone number text `(123) 456-7890` in `esc_html_e()` for translation readiness; removed emoji from anchor text.
- `patterns/footer-simple.php`, `patterns/footer-standard.php`, `patterns/footer-with-nav-columns.php`: Wrapped copyright/attribution line in `__()` with `wp_kses_post()` and `sprintf()` so the "Powered by WordPress and Elayne" string is fully translation-ready.
- `readme.txt`: Updated license entries for AI-generated images (`spa/avatar-1.webp`, `spa/avatar-3.webp`, `spa/avatar-4.webp`, `spa/spa-treatment-hot-stones.webp`, `fandb/pan-seared-halibut.webp`, `fandb/placeholder-800x600.webp`) from "Provided by client (AI-generated)" to CC0 1.0 Universal (Public Domain).

## [3.5.2] - 2026-03-15

### Changed

**WP.org Theme Review Compliance:**

- `assets/js/block-extensions/post-excerpt.js`: Prefixed all JavaScript functions with `elaynePostExcerpt` namespace to prevent global scope conflicts (`elaynePostExcerptAddAttributes`, `elaynePostExcerptWithInspectorControls`, `elaynePostExcerptWithCustomClassName`).
- `patterns/fandb-hours-location.php`: Replaced placeholder email `info@yourrestaurant.com` with `example@example.com`.
- Translation compliance: Wrapped all bare user-facing strings in `esc_html_e()`, `esc_attr__()`, or `wp_kses_post(__())` across 17 pattern files (`footer-with-nav-columns.php`, `two-column-feature.php`, `fandb-amenities.php`, `fandb-chef-profile.php`, `fandb-hours-location.php`, `fandb-testimonials-food.php`, `spa-booking-cta.php`, `spa-home-hero.php`, `four-column-wellness-posts.php`, `wellness-cover-highlight.php`, `menu-pricing-table.php`, `menu-food-grid.php`, `menu-drinks-grid.php`, `menu-daily-specials.php`, `legal-hero-with-stats.php`, `header-social-logo-hamburger.php`, `header-social-logo-hamburger-light.php`).
- `patterns/hero-modern-light.php`: Replaced marketing copy in paragraph with placeholder text (WP.org requirement).
- `screenshot.png`: Updated theme screenshot to reflect current design.
- Hardcoded font-size compliance: Replaced all inline `font-size` CSS values with semantic `fontSize` block attributes across 11 patterns (`fandb-amenities.php`, `fandb-chef-profile.php`, `fandb-hours-location.php`, `fandb-testimonials-food.php`, `legal-hero-with-stats.php`, `menu-daily-specials.php`, `menu-drinks-grid.php`, `menu-food-grid.php`, `menu-pricing-table.php`, `spa-booking-cta.php`, `wellness-cover-highlight.php`). Values such as `font-size:2.5rem`, `font-size:1.5rem`, and `font-size:0.9375rem` replaced with semantic presets (`large`, `medium`, `x-small`, etc.).
- Full-width margin reset: Added missing `"margin":{"top":"0","bottom":"0"}` to `spa-booking-cta.php` (outer group) and `wellness-cover-highlight.php` (outer cover block) — both are `alignfull` patterns that were missing the required margin reset.

### Replaced (Image Licensing)

Replaced all Pexels-licensed images with CC0 Public Domain alternatives from StockSnap.io to meet WP.org theme review requirements (CC0 or GPL only):

- `wellness.webp` — StockSnap people-woman_IX4W28VSKO (Healthy Living)
- `harbor-sunset.webp` — StockSnap sunset-boat_YYLZCMYXXF (Sergei Gussev)
- `banner-boats-16x9.webp` — Same StockSnap source, 16:9 crop
- `avatar-1.webp` through `avatar-7.webp` — StockSnap CC0 business portraits
- `spa/review-profile.webp` — StockSnap smiling-woman_8GZGNCU0T6 (Authentic Stock)
- `spa/back-massage.webp` — StockSnap woman-massage_ZRYMMTHIUP (Authentic Stock)
- `spa/spa-treatment-zoomed.webp` — StockSnap woman-massage_VH22RVC5UT (Authentic Stock)
- `legal/hero-law-office.webp` — StockSnap man-thinking_RI8VPT40DJ (Matt Moloney)
- `legal/attorney-1.webp`, `attorney-2.webp`, `attorney-3.webp` — StockSnap CC0 business portraits
- `legal/banner-boats-4x3.webp` — StockSnap sunset-boat_YYLZCMYXXF, 4:3 crop
- `fandb/cafe-terrace-hero.webp` — StockSnap french-restaurant_EQVWRV7CPF (Julien Sister)
- `fandb/cafe-interior-about.webp` — StockSnap cafe-restaurant_HOHJK6B7TD (donterase)
- `fandb/chef-profile.webp` — StockSnap people-man_3PS1GVU42N (Nick Karvounis); added `fandb/chef-profile-portrait.webp` as alternate portrait crop (same source)

## [3.5.1] - 2026-03-13

### Changed

- `shop-overview-three-columns.php`: Removed `backgroundColor: base` from all three product card groups; updated all images to use `aspectRatio: 3/4` with `scale: cover` for consistent portrait display.

## [3.5.0] - 2026-03-13

### Changed

**Button Border Radius Standardization:**
- Replaced all hardcoded pixel values (`8px`, `5px`, `6px`) and legacy `var:preset|border|radius` references with proper border-radius presets (`var:preset|border-radius|sm`, `var:preset|border-radius|lg`)
- Removed inline `style="border-radius:Xpx"` from button HTML in patterns: `contact-details`, `cta-newsletter`, `hero-two-tone`, `hero-with-cta`, `legal-hero`, `shop-overview-three-columns`
- Updated `fandb-events-grid` date badge and action buttons to use `var:preset|border-radius|sm`
- Updated `legal-hero-split` buttons and hero image to use `var:preset|border-radius|sm` and `var:preset|border-radius|lg` respectively
- `fandb-events-grid.php`: Increased grid `minimumColumnWidth` from `19rem` to `22rem` for better event card layout at mid-range viewports

**theme.json Default Button Styles:**
- Changed default button background color from `main` to `primary`
- Standardized padding from em-based (`.6em`/`1em`) to rem-based (`0.75rem`/`1.5rem`)
- Updated font-weight from `500` to `600` for stronger visual presence
- Added `fontFamily` preset reference (`var:preset|font-family|primary`) to default button typography
- Updated hover state background from `primary` to `primary-alt`

**Style Variant Button Updates:**
- `gray-gold.json`: Migrated button styles from raw CSS variable strings (`var(--wp--preset--color--primary)`) to preset references (`var:preset|color|primary`); added `border-width: 0`; standardized padding to `0.75rem`/`1.5rem`
- `food-beverage.json`: Added `border-radius`, `border-width`, padding, and font-size to button styles; added explicit hover text color
- `spa-wellness.json`: Added complete button element styles with border-radius preset, padding, typography, and hover state

### Added

**Button Block Style Variants:**
- `styles/blocks/button/button-brand.json`: New "Brand" style — primary background with primary-alt hover
- `styles/blocks/button/button-dark.json`: New "Dark" style — main/dark background with main-accent hover
- `styles/blocks/button/button-light.json`: New "Light" style — base/white background with tertiary hover
- `styles/blocks/button/button-outline.json`: New "Outline" style — transparent background with 2px primary border, fills on hover

**Pattern Compliance — image-card-grid.php:**
- Replaced hardcoded `clamp(2rem, 5vw, 3rem)` heading font-size with `var:preset|font-size|xxx-large`
- Replaced hardcoded `1.125rem` paragraph font-size with `var:preset|font-size|large`
- Replaced hardcoded `12px` card border-radius with `var:preset|border-radius|lg` (3 cards)
- Replaced hardcoded `8px` image border-radius with `var:preset|border-radius|sm` (3 images)
- Replaced hardcoded `1.5rem` card heading (h3) font-size with `var:preset|font-size|x-large` (3 headings)
- Replaced hardcoded `1.5rem`/`0.75rem` button padding with `var:preset|spacing|medium`/`var:preset|spacing|small` (3 buttons)
- Replaced hardcoded `0.9375rem` button font-size with `var:preset|font-size|small` (3 buttons)
- Removed hardcoded `contentSize: "800px"` from header group (reverts to theme default)

**Pattern Compliance — shop-overview-three-columns.php:**
- Replaced hardcoded `5px` border-radius with `var:preset|border-radius|sm` on all 3 card groups and 3 product images
- Added block `metadata` (categories, patternName, name) to outer group block comment
- Updated image dimension attributes to include `px` units (`"width":"300px","height":"400px"`) for valid block serialization
- Wrapped all untranslated heading/button strings in `esc_html_e()`: "Shop", "Essential Serum", "Bath Salts", "Massage Oil", "Shop Now"
- Wrapped untranslated image alt text in `esc_attr_e()`: "Product 1", "Product 2", "Product 3"

### Fixed
- `download-cta.php`: Replaced hardcoded `12px` and `8px` border-radius values with border-radius presets (`var:preset|border-radius|lg` and `var:preset|border-radius|sm`).

### Technical

**CLAUDE.md Efficiency Guidelines:**
- Added efficiency section to `demo/web/app/themes/elayne/CLAUDE.md` with guidance to use `Grep` before reading files and prefer targeted reads with `offset`/`limit` parameters

## [3.4.0] - 2026-03-13

### Added
- `theme.json`: Border radius preset system (`settings.border.radiusSizes`) using WordPress 6.9 `radiusSizes` API — slugs `sm` (0.625rem), `md` (0.75rem), `lg` (1rem), `pill` (999px). Enables `var:preset|border-radius|{slug}` references across all patterns.
- `theme.json`: Added `xx-small` font size (fluid 0.625–0.6875rem, ~11px) to `settings.typography.fontSizes` — sits below `x-small`, used for small uppercase labels and month labels in event patterns.
- `docs/elayne/BORDER-PRESETS.md`: New reference document covering WP 6.9 border radius preset system, valid preset slugs, border-width conventions, and missing slug warnings.

### Fixed
- `event-upcoming-grid.php`: Replaced all invalid `var:preset|border|radius` and `var:preset|border|width` references (no such preset exists) with correct `var:preset|border-radius|{slug}` and hardcoded `1px` border-width.
- `event-upcoming-grid.php`: Replaced all invalid `var:preset|spacing|xx-small` references (slug does not exist in theme.json) with valid `var:preset|spacing|2-x-small` (badge padding) and `var:preset|spacing|x-small` (tag padding, button padding, date box padding).
- `event-upcoming-grid.php`: Replaced `var:preset|font-size|xx-small` references with the now-defined `xx-small` font size slug after adding it to theme.json.
- `event-upcoming-grid.php`: Date box `blockGap` set to hardcoded `3px` (below minimum spacing preset granularity — valid exception).

## [3.3.0] - 2026-03-12

### Fixed

**Pattern Compliance — Hardcoded CSS Values:**
- Replaced hardcoded CSS values with semantic variables in 4 pattern files:
  - `event-upcoming-grid.php`: Fixed 19px, 14px, 13px font-sizes → semantic variables
  - `legal-hero-split.php`: Fixed 4px, 14px, 2.25rem, 1.25rem, 1.125rem, 8px, 12px → semantic variables
  - `page-coming-soon.php`: Fixed 4rem, 1.25rem, 3rem, 0.875rem, 8px, 100px → semantic variables
- All hardcoded CSS values now use `var:preset|font-size|*` and `var:preset|spacing|*` semantic variables

**Pattern Compliance — Untranslated Text Strings:**
- Wrapped all user-facing text strings with `esc_html_e()` for translation readiness:
  - `header-double-bar.php`: Wrapped "Email" text string
  - `legal-hero-split.php`: Wrapped all text strings including "Trusted Since 1985", "Years", "Cases Won", "Success Rate", "Client Reviews", "Based on 500+ verified client reviews", "Schedule Consultation", "Call Now"
  - `page-coming-soon.php`: Wrapped all text strings including "Coming Soon", "We're working on something amazing...", "Days", "Hours", "Minutes", "Seconds", "Get Notified When We Launch", "Notify Me", "We respect your privacy..."
- All text strings now properly wrapped for WordPress translation system

**WP.org Translation Compliance — Pattern Text Strings:**

### Fixed

**Pattern Compliance — Hardcoded CSS Values:**
- Replaced hardcoded CSS values with semantic variables in 4 pattern files:
  - `event-upcoming-grid.php`: Fixed 19px, 14px, 13px font-sizes → semantic variables
  - `legal-hero-split.php`: Fixed 4px, 14px, 2.25rem, 1.25rem, 1.125rem, 8px, 12px → semantic variables
  - `page-coming-soon.php`: Fixed 4rem, 1.25rem, 3rem, 0.875rem, 8px, 100px → semantic variables
- All hardcoded CSS values now use `var:preset|font-size|*` and `var:preset|spacing|*` semantic variables

**Pattern Compliance — Untranslated Text Strings:**
- Wrapped all user-facing text strings with `esc_html_e()` for translation readiness:
  - `header-double-bar.php`: Wrapped "Email" text string
  - `legal-hero-split.php`: Wrapped all text strings including "Trusted Since 1985", "Years", "Cases Won", "Success Rate", "Client Reviews", "Based on 500+ verified client reviews", "Schedule Consultation", "Call Now"
  - `page-coming-soon.php`: Wrapped all text strings including "Coming Soon", "We're working on something amazing...", "Days", "Hours", "Minutes", "Seconds", "Get Notified When We Launch", "Notify Me", "We respect your privacy..."
- All text strings now properly wrapped for WordPress translation system

**WP.org Translation Compliance — Pattern Text Strings:**
- Wrapped all user-facing text in `esc_html_e( 'Text', 'elayne' )` across 12 pattern files to meet WordPress.org theme review requirements
- Wrapped all non-empty image `alt` attributes in `esc_attr__( 'Text', 'elayne' )` for i18n compliance
- Affected patterns: `card-call-to-action.php`, `case-study-detailed.php`, `client-logo-wall.php`, `client-success-stories.php`, `hero-modern-dark.php`, `hero-modern-light.php`, `overlapping-feature-columns.php`, `overlapping-feature-columns-reversed.php`, `pricing-comparison.php`, `review-text-image-overlap.php`, `testimonials-grid.php`, `two-column-review.php`
- Covers headings, paragraphs, button labels, stat numbers, badge tags, testimonial quotes, job titles, and CTA text

**WP.org External URL Compliance — Pattern Image Sources:**
- Replaced hardcoded external URLs (`http://demo.imagewize.test/app/themes/elayne/patterns/images/...`) with `get_template_directory_uri()` calls in `client-success-stories.php`
- Fixes WP.org theme review rejection caused by environment-specific URLs in avatar images

**Pattern Compliance — Margin Reset:**
- Added missing full-width margin reset (`"margin":{"top":"0","bottom":"0"}`) to outer `alignfull` groups in `client-success-stories.php`, `client-logo-wall.php`, and `two-column-review.php`
- Corrects patterns that relied on `className="alignfull"` without the required block-level margin reset in the JSON attributes

**Pattern Compliance — Hardcoded Font Sizes:**
- Removed duplicate inline `font-size` styles from `hero-modern-dark.php` and `hero-modern-light.php` where paragraphs already had semantic `fontSize` block attributes (`medium`, `base`)
- Removed `font-size` inline styles and `has-custom-font-size` class from button elements in both hero patterns
- Replaced hardcoded `font-size:3rem`, `font-size:3.5rem`, `font-size:1.5rem`, `font-size:1.25rem`, and `font-size:1.125rem` in `case-study-detailed.php` with semantic `fontSize` block attributes (`xx-large`, `large`, `medium`)

**Pattern Compliance — Responsive Grid Layout:**
- Converted two `wp:columns` 3-column blocks in `case-study-detailed.php` to `wp:group` grid layout with `minimumColumnWidth` (18rem for phase steps, 14rem for phase metrics) for proper 3→2→1 responsive behaviour
- Increased metrics grid `minimumColumnWidth` from `10rem` to `14rem` to prevent `xx-large` stat numbers from overflowing and overlapping at narrow widths
- Added `align="wide"` to main content group in `case-study-detailed.php` so the content section expands beyond the outer constrained layout's default `contentSize` (740px)
- Fixed "Start Your Project" CTA button `textColor` from undefined `contrast` to `main` (dark gray) so button text is visible on white (`base`) background

**Pattern Compliance — Undefined `contrast` Color Slug:**
- Fixed patterns using `contrast` as a color slug, which does not exist in Elayne's theme palette. Root cause: WordPress core themes (Twenty Twenty-Three/Four/Five) use `contrast` as the slug for their dark color; Elayne renamed it to `main` but kept `"name": "Contrast"` as the editor display label, leading to `contrast` being used by mistake in several patterns
- `event-upcoming-grid.php`: fixed `backgroundColor:"contrast"` on all 3 event cards → `base`; fixed `backgroundColor:"contrast"` on all 3 "Details" buttons → `base` (buttons on white cards now have a valid white background)
- `legal-hero-split.php`: fixed `textColor:"contrast"` on 3 stat labels (Years, Cases Won, Success Rate) → `main-accent`; fixed border `color:"var:preset|color|contrast"` on stats divider → `border-light`; fixed `textColor:"contrast"` on "Client Reviews" label → `main`
- `header-double-bar.php`: fixed link `color:"var:preset|color|contrast"` on email and phone links in top bar → `main`
- `page-coming-soon.php`: fixed `backgroundColor:"contrast-2"` on countdown timer box → `tertiary` (`contrast-2` is also not a defined Elayne color slug)

**Pattern — client-logo-wall.php:**
- Increased logo image width from `120px` to `180px` for all 12 logos for better visual presence on frontend
- Increased grid `minimumColumnWidth` from `10rem` to `12rem` to match larger logo size

**Pattern — client-success-stories.php:**
- Changed outer section background color from `base` (white) to `tertiary` (light gray) for better visual differentiation
- Changed main testimonial block alignment from `wide` to `full` for edge-to-edge impact
- Replaced `className:"alignwide"` on secondary testimonials grid with proper `align:"wide"` and `layout:{"type":"grid","minimumColumnWidth":"19rem"}` for correct 3→2→1 responsive behaviour

**Pattern — event-upcoming-grid.php:**
- Increased pill/tag group `blockGap` from `xx-small` to `small` for better spacing between location and detail tags (3 instances)

**Pattern — legal-hero-split.php:**
- Changed stats grid `minimumColumnWidth` from hardcoded `100px` to semantic `12rem` for proper responsive column behaviour
- Reduced stats grid `blockGap` from `x-large` to `medium` to prevent excessive spacing between stat columns
- Converted stat number headings (`35+`, `2,500+`, `98%`) from inline `fontSize` style to semantic `fontSize:"xx-large"` block attribute

### CSS

**style.css — Safari Scrollbar Visibility Fix:**
- Added `::-webkit-scrollbar` rules to make scrollbar thumb visible in the block editor on Safari/macOS, where overlay scrollbars render with a near-invisible light gray thumb on white/light backgrounds
- Scrollbar track: transparent; thumb: `rgba(0,0,0,0.35)` with `border-radius:4px`; hover: `rgba(0,0,0,0.55)`

### Technical

**Pattern Compliance Workflow — Extended Checks:**
- Added check for hardcoded external URLs in `src` attributes: flags any `src="https?://..."` in pattern files (WP.org rejection cause)
- Added check for untranslated user-facing text in HTML tags: detects bare text in `<h1-6>`, `<p>`, `<a>`, `<button>`, `<span>`, `<li>`, etc. on lines without `<?php`
- Added check for untranslated non-empty `alt` attributes: flags `alt="..."` values without PHP translation call
- Narrowed hardcoded CSS check from `(font-size|padding|margin|border-radius)` to `font-size` only — `border-radius` and `padding` have no WP semantic preset alternatives and produced false positives

**CLAUDE.md — Translation Readiness Guidelines (CRITICAL):**
- Expanded Translation Readiness section into a comprehensive reference table covering `esc_html_e()`, `esc_attr__()`, and `wp_kses_post( __() )` with usage examples
- Documented what to wrap (all headings, paragraphs, button labels, stat numbers, alt text, CTA text) and what NOT to wrap (empty `alt=""`, block JSON attributes, PHP expressions)
- Added quick `grep` check command to find unwrapped strings before committing
- Removed outdated mention of `__()` / `_e()` in favour of escaping variants

**CLAUDE.md — External Image URL Rule:**
- Added explicit rule to the pattern standards table: never use hardcoded external URLs (e.g. `http://demo.imagewize.test/...`) — flagged as WP.org rejection cause
- Added rule that all image `src` attributes must use `get_template_directory_uri()` wrapped in `esc_url()`
- Updated pattern creation checklist (steps 5–7) to include translation wrapping and URL requirements before testing

## [3.2.1] - 2026-03-06

### Removed

- Deleted `assets/js/block-extensions/navigation.js` — the `dropdownSpacing` attribute and editor UI panel it registered had no corresponding PHP `render_block` handler, so the setting was saved but never applied on the frontend. Dead code removed.
- Removed the `elayne-navigation-extension` script enqueue from `inc/block-extensions.php`.

## [3.2.0] - 2026-03-06

### Fixed

**WordPress.org Review — Navigation Submenus (Issue 1):**
- Removed `openSubmenusOnClick`, `hasClickableParents`, and `hasImprovedChevrons` attributes from all header patterns (`header-standard`, `header-mobile`, `header-double-bar`, `header-social-logo-hamburger`, `header-social-logo-hamburger-light`, `header-standard-with-tel-number`, `spa-home-hero`). WordPress native hover/focus behaviour now handles submenu visibility without theme interference.
- Removed "prevent hover" CSS override block from `core-navigation.css` that was suppressing WP core `:hover`/`focus-within` submenu display.
- Added `::before` pseudo-element bridge on desktop submenu containers so `:hover` is maintained across the `margin-top` gap between parent item and dropdown.
- **Mobile overlay rebuild:** Replaced `opacity`/`visibility`/`height` submenu toggle with `display: none !important` / `display: flex !important` driven by `:has(.wp-block-navigation-submenu__toggle[aria-expanded="true"])`. Submenu icon (`.wp-block-navigation__submenu-icon`) repositioned absolutely at `right: 0; top: 0; width: 44px; height: 44px` within the `li`. Removed chevron-moving JS section (section 1 of `navigation-frontend.js`). Removed dash pseudo-element (`content: "\2014"`) prepended to submenu items in mobile overlay. Added `padding-right: 44px` on parent link content to prevent text running under icon.

**WordPress.org Review — Template Part Area (Issue 2):**
- Registered `"menu"` template part area in `functions.php` via `default_wp_template_part_areas` filter. Resolves PHP notice: `_filter_block_template_part_area(): "menu" is not a supported wp_template_part area value`.

**WordPress.org Review — Translation-Ready Strings (Issue 3):**
- Replaced all `'moiraine'` text domains with `'elayne'` in `assets/js/block-extensions/navigation.js` and `assets/js/block-extensions/post-excerpt.js`.
- Localized frontend aria-label strings in `functions.php` via `wp_localize_script()`.

**WordPress.org Review — External Image Sources (Issue 4):**
- Removed hardcoded `imagewize.com` link from `parts/sidebar.html`. No external image or link sources remain in the theme package.

**WordPress.org Review — JavaScript Prefixing (Issue 5):**
- Renamed all `moiraine-*` CSS classes to `elayne-*` in `assets/styles/core-navigation.css` (`.moiraine-hamburger-large`, `.moiraine-nav-parent-wrapper`, `.moiraine-nav-parent-link`, `.moiraine-nav-toggle`).
- Renamed all `moiraine/` filter name prefixes to `elayne/` in both block extension JS files.
- Renamed `moiraine-linked-excerpt` CSS class and `moiraine-excerpt-link-settings` panel `className` to `elayne-*` equivalents.

### Changed

**`hasImprovedChevrons` feature removed entirely:**
- Removed `hasImprovedChevrons` attribute and its `ToggleControl` from `assets/js/block-extensions/navigation.js` — no longer needed with icon-absolute mobile overlay positioning.
- Removed `$has_improved_chevrons` PHP class injection from `inc/block-extensions.php`.
- Removed CSS section 6.2 (Improved Chevrons, ~50 lines) from `core-navigation.css`.
- Removed dead `has-clickable-parents` CSS section (~90 lines) from `core-navigation.css`.

### Technical

- Deleted `assets/js/navigation-frontend.js` (clickable parents DOM manipulation — no longer needed).
- Added file-level docblock and inline comments to `assets/js/block-extensions/navigation.js` documenting the dropdown spacing feature, CSS custom property data flow, and enqueue location.

## [3.1.8] - 2026-03-04

### Technical

**Vibe Prompt Configuration:**
- Added `.vibe/prompts/vibe.md` for Mistral Vibe prompting
- Added `.vibe/config.toml` with Mistral Vibe Config
- Vibe Tooling files excluded from theme builds

## [3.1.7] - 2026-03-03

### Added
- **Mistral Vibe AI Integration**: Added `.vibe/prompt.md` with project-specific instructions for working with Mistral Vibe AI agent
- **Distribution Exclusion**: Added `.vibe/*` to `.distignore` to exclude AI guidance files from theme zip distributions

## [3.1.6] - 2026-02-17

### Changed

**Post Tag Colors - Replaced Secondary with Main Accent:**
- Updated post tag term button color from `secondary` to `main-accent` across all post template patterns
- Affects all four post layout templates: centered, left sidebar, right sidebar, and wide
- Post tags and comment action links now consistently use the main accent color

**Comment Action Links Color Consistency:**
- Updated comment edit and reply link colors from `secondary` to `main-accent` in all post templates
- CSS class updated from `has-secondary-color` to `has-main-accent-color` for proper styling

**Link Underline Styles (WordPress.org Requirement):**
- Added underline styles for links in post content (`.wp-block-post-content`), comment content, and widgets
- Navigation-like contexts (menus, buttons, post titles) remain exempt from underline styling
- Added `textDecoration: underline` to body link elements in `theme.json` including hover state

### Fixed

**Comment Form Submit Button Spacing:**
- Added `margin-top: 1rem` to the comment form submit button for improved visual separation

### Technical

**Removed Redundant index.php:**
- Deleted `index.php` from Elayne theme root (required file for WP.org review compliance — silence is golden placeholder removed as it is not needed for block themes)",

## [3.1.5] - 2026-02-13

### Changed
**Navigation Overlay Alignment:**
- Added support for left-aligned and right-aligned overlay menus in mobile navigation
- Overlay content, menu items, chevrons, submenus, and close button now properly align based on hamburger menu position
- Improved visual consistency for different header patterns

### Fixed
**Pattern Compliance:**
- Fixed header-mobile pattern margin reset - Added complete margin reset (`"margin":{"top":"0","bottom":"0"}`) to full-width header group with background color to prevent gaps between patterns

### Technical
**CSS Improvements:**
- Added `.has-left-aligned-overlay` and `.has-right-aligned-overlay` classes for flexible overlay positioning
- Used `!important` selectors to override WordPress core navigation styles where necessary
- Maintained proper z-index and spacing for close button in both alignment modes
- Added comprehensive comments explaining the alignment logic

## [3.1.4] - 2026-02-13

### Changed

**Documentation URL Update:**
- Updated theme documentation links from `/resources/elayne` to `/themes/elayne`
- Affects README links in "Quick Links" table, "Getting Started" section, and "Community & Support" section
- Reflects new documentation location on imagewize.com",

## [3.1.3] - 2026-02-12

### Changed

**Pattern Images - File Size Optimization:**
- Reduced file sizes for three pattern images while maintaining visual quality
- `banner-boats-16x9.webp`: Optimized general banner image
- `cafe-terrace-hero.webp`: Optimized Food & Beverage demo hero image
- `banner-boats-4x3.webp`: Optimized Legal demo banner image
- Improves page load times and reduces bandwidth usage across demo pages

## [3.1.2] - 2026-02-12

### Removed
**Development Script Cleanup:**
- Removed `check-patterns` script from theme root - This was a development convenience script for the main site repository and doesn't belong in the theme distribution
- Cleaner theme package without repository-specific development tools

## [3.1.1] - 2026-02-12

### Changed
**Pattern Icons Replacement:**
- Replaced emoji icons with SVG icons in the announcement banner and legal contact pattern for better visual consistency and accessibility
- Added vertical alignment to the announcement banner group for improved layout

### Fixed
**Pattern Compliance:**
- Removed hardcoded `border-radius:8px` values from legal-contact pattern to comply with semantic variable standards
- Fixed compliance checker violations in legal-contact.php (outer container, button, and 4 contact info cards)

### Added
**New SVG Icons:**
- Added `icon-clock.svg` for office hours display
- Added `icon-location.svg` for office location display
- Added `icon-star-celebration.svg` for announcement banners (currentColor)
- Added `icon-star-celebration-white.svg` for announcement banners on dark backgrounds (white fill #FFFFFF)
- Added `icon-phone.svg` for phone contact information
- Added `icon-email.svg` for email contact information",

## [3.1.0] - 2026-02-12

### Added
**Heading Block Styles:**
- New dedicated CSS file `core-heading.css` for heading-specific styles
- New 'Logo Link' heading style that removes underline decoration on hover/focus
- Gradient Text style now available for heading blocks
- Gradient Text Animated style now available for heading blocks
- Underline Slide style now available for heading blocks

**Accessibility Improvements:**
- Enhanced focus states for logo link headings with visible outline
- Fallback support for browsers without background-clip text support
- Reduced motion support for all heading animations
- Print-friendly styles that remove effects for printed documents
- RTL (right-to-left) language support for underline animations

### Changed
**Code Organization:**
- Moved heading-specific styles from `core-paragraph.css` to new `core-heading.css`
- Cleaner separation of concerns between paragraph and heading styles
- Improved maintainability with dedicated heading stylesheet

### Technical
- Created `assets/styles/core-heading.css` with 157 lines of heading-specific styles
- Registered 'logo-link' block style for core/heading in `functions.php`
- Removed 106 lines of heading styles from `core-paragraph.css`
- All heading styles include accessibility features (reduced motion, print, RTL support)",

## [3.0.0] - 2026-02-11

### Changed - BREAKING: Page template simplification

**Template Reduction (5 → 2):**
- Simplified from 5 page templates down to 2 active templates
- `page.html` → `template-page` (with title, top padding only)
- `page-no-title.html` → `template-page-no-title` (no title, zero padding)

**Template Pattern Renaming:**
- `template-page-centered.php` → `template-page.php` (slug: `elayne/template-page`)
- `template-page-full.php` → `template-page-no-title.php` (slug: `elayne/template-page-no-title`)
- Updated all template HTML files to reference new pattern slugs

**Removed Templates (Breaking Change):**
- ❌ `template-page-wide-no-title.php` + `page-wide-no-title.html` - REMOVED
- ❌ `template-page-hero.php` + `page-hero.html` - REMOVED
- ❌ `template-page-wide.php` + `page-wide.html` - REMOVED
- Pages using removed templates will fall back to default `page.html`

**Padding Strategy:**
- `template-page.php` - Kept `padding-top: var:preset|spacing|xx-large` on `<main>` group (required for title spacing from header)
- `template-page-no-title.php` - Zero padding (patterns control all spacing)
- Templates provide structure only (title vs no-title), patterns/blocks control spacing

**Benefits:**
- Cleaner template architecture (2 templates instead of 5)
- Clear naming convention (page vs page-no-title)
- Patterns get full control over spacing and layout
- Full-width backgrounds extend properly to edges
- Aligns with modern FSE theme approach (Twenty Twenty-Five, Ollie)

### Verified - No migration required

**Affected Pages (7 total):**
- Main demo (3 pages): Blog, FAQ, Services - using `page-wide-no-title.html`
- Kafe demo (4 pages): Drinks, Food, Home - using `page-hero.html`; Events - using `page-wide-no-title.html`

**Verification Results (2026-02-11):**
- ✅ All 7 affected pages audited locally with screenshots
- ✅ Zero spacing issues found - patterns already handle their own spacing correctly
- ✅ No manual migration needed - pages will work with default template fallback

### Technical

**Files Modified:**
- Renamed: `template-page-centered.php` → `template-page.php`
- Renamed: `template-page-full.php` → `template-page-no-title.php`
- Updated: `page.html`, `page-no-title.html` with new pattern slugs
- Removed: 6 files (3 pattern files + 3 template HTML files)

**Version Bump:**
- Major version increment (2.4.1 → 3.0.0) due to breaking changes
- Follows semantic versioning for template architecture changes

## [2.4.1] - 2026-02-11

### Added

**Pattern Compliance Automation:**
- GitHub Actions workflow for automated pattern compliance checks
- Checks only modified patterns (new or edited files) instead of all patterns
- Validates patterns against CLAUDE.md coding standards
- Prevents PRs from merging if modified patterns have violations
- Allows gradual fixing of existing non-compliant patterns

**Compliance Checks:**
- No hardcoded CSS values (use semantic variables from theme.json)
- No spacer blocks (use semantic blockGap instead)
- No emoji icons (use SVG icons for consistency)
- Proper margin reset on full-width patterns
- Responsive grid layouts for 3+ column patterns
- No hardcoded media IDs in patterns
- No HTML comments between block markup

### Changed

**Development Workflow:**
- Updated CONTRIBUTING.md with pattern compliance documentation
- Documented CI/CD integration and common compliance issues
- Added local testing commands for pattern validation

### Removed

**Git Hooks:**
- Removed `.githooks/pre-commit` hook (replaced by GitHub Actions)
- Eliminated path dependency issues with external scripts

### Technical

**CI/CD Integration:**
- Pattern compliance workflow: `.github/workflows/pattern-compliance.yml`
- Uses `tj-actions/changed-files@v44` to detect modified patterns
- PHP 8.0+ compliance checker embedded in workflow YAML
- Incremental enforcement allows fixing 67 existing violations gradually

## [2.4.0] - 2026-02-03

### Added

**Food & Beverage Style Variation:**
- New "Food & Beverage" style variation for restaurant, cafe, and bar websites
- Warm earth-toned color palette: Pine Green (#034521), Teal Deep (#169179), Warm Gold (#dcb171), Creamy Beige (#eadfbf)
- Custom typography: Anton (headings), Asap Condensed (body), Orbitron (decorative), Inter (utility)
- Duotone filters: Green & Gold, Pine & Cream, Teal & Beige
- Gradient presets: Warm Earth, Cream Fade
- Global background and text colors: Secondary (Light Cream) background with Main text color

**Drinks Menu Pattern:**
- Four-section responsive drinks menu grid (Coffee/Tea, Wines, Beers, Snacks)
- Color-coded category cards with distinct backgrounds
- Full-width cover block with background image overlay
- Responsive grid layout adapts to mobile, tablet, and desktop
- Pre-styled menu items with prices and country/origin labels
- Enhanced blockGap spacing for improved visual hierarchy
- Refined padding and margins for better readability
- Improved card layouts for menu sections
- Better responsive behavior on mobile devices

**Pattern Category:**
- New "Food & Beverage" pattern category (`elayne/food-beverage`) for industry-specific content

**F&B Header Patterns:**
- Three new header patterns designed for Food & Beverage sites:
  - `header-social-logo-hamburger` (dark) - Dark background with Pine Green accents
  - `header-social-logo-hamburger-light` - Light background with border bottom
  - Original F&B header with top bar layout
- Left social media icons, centered logo, hamburger menu on right
- Responsive layout optimized for restaurant and cafe websites
- Instagram and Facebook integration with custom SVG icons

**F&B Blog Pattern:**
- `blog-post-columns-fandb` - Three-column blog grid with Light Cream (secondary) background
- Optimized for Food & Beverage content with brand colors
- Responsive grid layout (3→2→1 columns)

**Social Media Icons:**
- Added Instagram and Facebook SVG icons (default and F&B variants)
- F&B variants use Pine Green color (#034521) matching the style
- Default variants use `currentColor` for theme flexibility
- 24x24px viewBox for consistent sizing across patterns

**Food Menu Pattern:**
- `menu-food-grid.php` - Four-section responsive food menu (Appetizers, Mains, Desserts, Sides)
- Color-coded sections with distinct backgrounds (Light Cream, Sage Green, Dark Moss, Creamy Beige)
- Menu item descriptions with pricing and gold separators
- Responsive grid layout (4→3→2→1 columns, 19rem minimum width)

**Daily Specials Pattern:**
- `menu-daily-specials.php` - Featured daily specials with large dish images
- 2-column layout with alternating image placement
- Chef's notes and detailed descriptions
- Price and availability indicators
- Full-width tertiary background for visual separation

**Menu Pricing Table Pattern:**
- `menu-pricing-table.php` - Simple, elegant pricing list for wine lists and quick menus
- Category headers with decorative gold underlines
- Item descriptions with dot separators
- Clean typography hierarchy optimized for readability
- Constrained 700px width for optimal scanning

**F&B Hero Patterns:**
- `hero-fandb-cover-fullwidth` - Full-width hero with large cover image, overlay, and centered content
- `hero-fandb-split-layout` - Split-screen hero with image on left, content on right
- Both patterns optimized for restaurant and cafe websites with F&B color palette

**F&B Content Patterns:**
- `fandb-about-intro` - About section with image and text introduction
- `fandb-amenities` - Grid layout showcasing restaurant amenities and features
- `fandb-chef-profile` - Chef profile section with photo and biography
- `fandb-hours-location` - Operating hours and location information display
- `fandb-testimonials-food` - Testimonials section specifically styled for food/beverage businesses

**F&B Events Pattern:**
- `fandb-events-grid` - Responsive 3-column grid for restaurant events (wine tastings, live music, chef's tables)
- Calendar-style date badges with month, day, and weekday display
- Event type tags (Wine Tasting, Live Music, Chef's Table)
- Time display and pricing information
- Reservation CTAs with event-specific wording
- Card-based design with 19rem minimum column width for complex event metadata

**F&B Image Assets:**
- Added `cafe-terrace-hero.webp` - Outdoor cafe seating for hero sections
- Added `cafe-interior-about.webp` - Cozy cafe interior for about sections
- Added `chef-profile.webp` - Professional chef portrait for profile patterns
- Added 6 amenity SVG icons for restaurant features:
  - `icon-parking.svg` - Parking amenity icon
  - `icon-outdoor.svg` - Outdoor seating icon
  - `icon-wifi.svg` - WiFi amenity icon
  - `icon-events.svg` - Private events icon
  - `icon-accessible.svg` - Wheelchair accessibility icon
  - `icon-bar.svg` - Bar/beverage service icon

**Pattern Development Guidelines:**
- Pattern Icon Guidelines: Documentation emphasizing use of SVG icons over emojis for cross-platform consistency
- Image Block Syntax: Critical guidelines for proper WordPress image block attribute order and `is-resized` class usage
- WP-CLI Pattern Integration: Expanded documentation for programmatically adding patterns to pages using pattern references

**Restaurant Amenities Pattern:**
- Enhanced image block structure with correct attribute ordering for WordPress standards
- Added `is-resized` class to figure elements for proper image sizing behavior
- Improved pattern metadata with category, pattern name, and display name

### Changed

**Page Template (Centered):**
- Removed horizontal padding from main wrapper to allow full-width patterns to extend edge-to-edge
- Maintains vertical padding (top only) for proper content spacing

**Footer Patterns:**
- Updated `footer-simple`, `footer-standard`, and `footer-with-nav-columns` to use Elayne branding
- Changed theme link from Moiraine to Elayne with proper attribution
- WordPress.org theme directory link updated to reflect Elayne theme

### Technical

**Font Assets:**
- Added 12 new font files for Food & Beverage style:
  - Anton regular (WOFF2)
  - Asap Condensed (8 weights: 200-900)
  - Inter variable font (TTF)
  - Orbitron variable font (TTF)
- All fonts optimized with `font-display: swap` for performance

**Template Part Spacing:**
- Added CSS fix to remove global blockGap spacing for template parts (header/footer)
- Prevents unwanted gaps between full-width patterns and template parts
- Allows full-width patterns with background colors to be flush with header/footer

## [2.3.2] - 2026-01-21

### Changed

**Menu Template Part Area Registration:**
- Removed menu template part area registration from theme
- Menu area now registered by Elayne Blocks plugin instead
- Ensures mega menu functionality works independently of the theme

### Technical

**Plugin Integration:**
- Menu template part area (`area=menu`) moved to Elayne Blocks plugin for better separation of concerns
- Added documentation comment explaining the architectural change
- Sidebar template part area remains in theme",

## [2.3.1] - 2026-01-20

### Changed

**Navigation UI Rebranding:**
- Updated all UI labels and text strings from "Moiraine" to "Elayne" branding
- Renamed CSS class from `moiraine-navigation-settings` to `elayne-navigation-settings`
- Updated text domain from `moiraine` to `elayne` for all navigation extension strings",

## [2.3.0] - 2026-01-20

### Added

**Navigation Dropdown Spacing Control:**
- Added new "Dropdown spacing" setting in Navigation block Inspector Controls
- Allows users to adjust the gap between parent menu items and their dropdown menus (desktop only)
- Range slider control with values from 0px to 32px in 4px increments
- Default value: 16px
- Spacing is applied via CSS custom property `--nav-dropdown-spacing`

### Technical

**Block Extensions Enhancement:**
- Added `dropdownSpacing` attribute to Navigation block (type: number, default: 16)
- Implemented `RangeControl` component in navigation.js block extension
- Added `elayne_add_nav_inline_style()` helper function to inject CSS custom properties into Navigation block output
- Dynamic inline styles automatically applied to `<nav>` element via `render_block` filter
- CSS variable fallback ensures backwards compatibility with existing navigation blocks",

## [2.2.2] - 2026-01-20

### Changed

**Navigation Dropdown Spacing:**
- Added consistent top margin to dropdown menus for better visual separation from parent items
- Dropdowns now appear with 16px spacing below the parent menu item
- Improves clickability and visual hierarchy in navigation menus",

## [2.2.1] - 2026-01-19

### Changed

**Navigation chevron rotation:**
- Rotate submenu chevrons on desktop when dropdowns open via hover/focus
- Rotate chevrons for expanded submenus in the mobile overlay
- Keep chevrons visible in overlay mode so state changes are clear

## [2.2.0] - 2026-01-19

### Added

**Custom Template Part Areas:**
- Registered two new template part areas: Menu and Sidebar
- Menu area uses `<div>` tag for mega menus and navigation templates
- Sidebar area uses `<aside>` tag for sidebar content
- Both areas display in the Site Editor with appropriate icons (navigation and layout)

**Mega Menu Template Part:**
- Added `mega-menu-template.html` in parts directory
- Template loads the `elayne-blocks/mega-menu-featured-content` pattern by default
- Registered in theme.json as "Mega Menu" template part with menu area

**Sidebar Template Part:**
- Registered "Sidebar" template part in theme.json
- Uses sidebar area for proper semantic markup

### Technical

**Template Part Registration:**
- Implemented `elayne_template_part_areas()` function hooked to `default_wp_template_part_areas` filter
- Extends WordPress core template part system with custom areas
- Follows WordPress best practices for template part area registration",

## [2.1.1] - 2026-01-13

### Fixed - Pattern wrapper balance
**Contact Details Pattern Markup:**
- Removed stray closing group wrapper so block comments stay balanced
- Prevents Gutenberg from inserting a Classic block due to mismatched wrappers
**Legal Team Pattern Markup:**
- Removed an extra closing group comment at the end of the pattern
- Keeps the block structure valid and predictable in the editor",

## [2.1.0] - 2026-01-13

### Changed
**Pattern Library Expansion Overview:**
- Updated pattern library counts and category breakdown to reflect 81 patterns and 17 templates
- Reorganized categories into Core, Specialized, and Industry Verticals for clearer browsing
**Hero Modern Light Copy Refresh:**
- Rewrote hero headline and supporting paragraph for a more business-focused message
**Stats Showcase Branding + Styling:**
- Replaced Moiraine references with Elayne in testimonial and intro copy
- Switched accent text and link colors to the tertiary palette for consistent styling
### Added
**New Card Pattern Set:**
- Added an Image Card Grid pattern with three image-led cards, CTAs, and responsive grid behavior
**Industry Verticals:**
- Added Spa & Wellness and Legal Services vertical pattern groups to the library listings
### Fixed
**Legal Services Pattern Markup:**
- Removed stray closing group markup to keep block wrappers balanced and avoid editor issues
### Technical
**Marketing Assets:**
- Updated theme screenshot to reflect current design set and pattern coverage",

## [2.0.1] - 2026-01-13

### Changed - Legal stats layout responsiveness
**Legal Stats Grid Responsiveness:**
- Switched the pattern grid layout to use a `minimumColumnWidth` of 18rem
- Enables more fluid 3→2→1 column behavior for better readability across breakpoints",

## [2.0.0] - 2026-01-12

### Changed
**Pattern Spacing Standards:**
- Shifted multiple patterns from manual margins and spacer blocks to semantic `blockGap` usage for cleaner spacing control
- Removed hardcoded margin overrides on headings, paragraphs, buttons, separators, and featured images to align with block theme spacing behavior
**Banner Header Typography:**
- Updated page header banner headings to rely on block gap spacing (no manual bottom margins) and adjusted size on the accent variant to `x-large`
**Legal Hero with Statistics:**
- Updated badge and button color treatments for stronger contrast in the legal hero stats pattern
**Grid Sizing & Metadata:**
- Standardized grid minimum widths to `rem`-based sizes, including 18rem simple card grids in the Agency Services Showcase
- Added Grid Config guidance and card complexity tags in pattern headers for clearer usage intent

### Added
**Pattern Categories:**
- New pattern categories for card complexity: `elayne/card-simple`, `elayne/card-extended`, and `elayne/card-profiles`
**Authoring Guidance:**
- New documentation on grid category tags, Grid Config header fields, balanced block comments, and environment URL replacement for pattern assets
- Expanded spacing and blockGap standards reference for consistent pattern construction

### Fixed
**Background Section Gaps:**
- Corrected margin reset values to use unitless `0` for full-width background sections to prevent unintended gaps
**Pattern Layout Consistency:**
- Removed unnecessary spacer blocks and manual margin styles that could create uneven vertical spacing in blog and testimonial patterns

### Technical
**Theme Documentation Updates:**
- Updated theme agent and authoring docs with commit hygiene rules, grid standards, spacing checklist, and pattern insertion caveats
**Pattern Header Compliance:**
- Ensured pattern headers include keywords and Grid Config notes where applicable to improve editor discovery and maintenance
",

## [1.7.1] - 2026-01-10

### Changed - Banner pattern refresh
**Page Header Banner simplified:**
- Converted the default page header banner to a solid background layout instead of a diagonal image cover.
- Updated copy and color usage to match the simpler, text-forward presentation.

### Added - New banner options
**Accent page header banner:**
- Introduced a new accent-colored page header banner pattern for bold, simple headers.

**Slanted page header banner:**
- Added a slanted overlay banner with a background image for more dramatic headers.

### Changed - Hero pattern naming and overlay
**Legal hero pattern update:**
- Renamed the legal hero pattern to “Hero Cover (Slanted Legal)” with updated labels/keywords.
- Switched the overlay styling to a solid accent overlay for the slanted legal hero.

### Added - New hero pattern
**Hero Cover (Slanted):**
- Added a general slanted hero cover pattern with image and diagonal gradient styling.

### Fixed - Pattern availability
**Legal header cleanup:**
- Removed the old Legal Page Header Banner pattern to reduce duplicate/legacy variants.

### Technical - Pattern registry adjustments
**Pattern metadata updates:**
- Adjusted slugs, titles, descriptions, and keywords to reflect new banner and hero variants.",

## [1.7.0] - 2026-01-09

### Added

**Banner Pattern Category:**
- New "Banners" pattern category (`elayne/banner`) registered in theme functions
- Organized location for banner and header patterns in block inserter

**New Banner Patterns:**
- `banner-announcement-bar.php` - Slim top bar for announcements, promotions, or important notices
- `banner-page-header.php` - Page header banner with title, description, and optional background image for internal pages
- `banner-page-header-legal.php` - Professional page header banner tailored for law firm practice areas and service pages
- Keywords: banner, header, announcement, alert, legal, attorney, practice area

**Skip Link Accessibility Improvements:**
- Enhanced skip link styling following WordPress accessibility standards
- Hidden by default using `clip-path` and `clip` for legacy browser support
- Highly visible focus state with distinct background, outline, and box shadow
- Skip link target includes `scroll-margin-top` for better viewport positioning
- Improves keyboard navigation experience for screen reader users

### Changed

**Diagonal Hero Overlay:**
- Switched legal hero diagonal overlay to use the Cover block gradient for easier editing

**Image Attribution Updates:**
- Updated harbor-sunset.webp attribution in CHANGELOG.md and readme.txt
- Changed photographer credit to "Pexels Contributor"
- Added "GPL-compatible" clarification to license description
- Avoids potential GPL license checker false positives

**Footer Theme Link:**
- Updated footer pattern to reference "Elayne" theme instead of "Moiraine"
- Link now points to WordPress.org theme directory: `https://wordpress.org/themes/elayne/`
- Ensures accurate theme attribution in footer copyright text

### Technical

**Gradient Tokens:**
- Added a "Main Diagonal" gradient to theme.json and all style variations

**Diagonal Banner Styles:**
- Added diagonal banner CSS that clips both solid and gradient overlays

**Pattern Assets:**
- Added new banner images and updated the legal attorney portrait asset

## [1.6.0] - 2026-01-08

### Added

**Legal Hero Diagonal Pattern:**
- New block pattern `legal-hero-diagonal` for professional service websites
- Diagonal overlay effect with gradient from primary color (92% opacity) to primary-alt (88% opacity)
- Desktop layout: Text content left (65% width), background image visible right
- Mobile layout: Full overlay for better text readability
- Includes harbor sunset background image (Pexels license, GPL-compatible)
- Responsive breakpoints: 1024px, 768px, 480px with adjusted overlay angles and heights
- Pattern categories: hero, legal
- Keywords: hero, diagonal, overlay, legal, law firm, attorney, professional

**New Pattern Image:**
- `harbor-sunset.webp` - Professional waterfront harbor scene at sunset (Pexels License, GPL-compatible)
- Licensed attribution documented in readme.txt

### Technical

**CSS Additions:**
- New `.diagonal-hero-section` class with diagonal overlay styling
- Uses `clip-path: polygon()` for diagonal effect (65% width on desktop, 70% on tablet, 100% on mobile)
- Pseudo-element `::before` for overlay layer with proper z-index stacking
- Responsive min-height adjustments: 600px (desktop), 500px (tablet), 450px (mobile)
- Pointer-events handling for overlay layer to preserve interactivity",

## [1.5.0] - 2026-01-08

### Added

**New Header Pattern - Header Double Bar:**
- Two-bar header design with top contact bar and bottom navigation
- Top bar features email, phone, and search overlay trigger (right-aligned)
- Bottom bar includes left-aligned logo with navigation menu
- Top bar hides on mobile for optimal responsive experience
- Utilizes Elayne Blocks Search Overlay Trigger for enhanced search functionality
- Includes SVG icons for email, phone, and search (Eva Icons, MIT licensed)

**New Icon Assets:**
- Added icon-email.svg, icon-phone.svg, and icon-search.svg from Eva Icons collection
- Icons use `currentColor` for automatic theme color inheritance
- Licensed under MIT License (GPL-compatible)

### Changed

**Header Pattern Refinements:**
- Reduced site title font size in "Header Top Bar Centered Menu" from 2.5rem to 1.8rem for better proportion

**Documentation Updates:**
- Updated pattern count from 73 to 74 patterns in README.md and readme.txt
- Updated Headers & Footers category from 7 to 8 patterns
- Added Elayne Blocks Search Overlay Trigger to companion plugin description
- Enhanced companion plugin documentation with detailed block descriptions

### Fixed

**Inline Icon Alignment:**
- Fixed vertical alignment issues for small inline icons (e.g., 20×20px images)
- Applied `display: inline-flex` and `align-items: center` to resized image blocks
- Ensures icons align properly with adjacent text in header patterns

### Technical

**CSS Improvements:**
- Added new section in core-image.css for inline icon alignment fixes
- Targets `.wp-block-image.is-resized` elements to prevent baseline misalignment
- Zero margin on resized image figures to eliminate unwanted spacing",

## [1.4.2] - 2026-01-07

### Changed

**Legal Hero Split Layout:**
- Converted from CSS columns to CSS grid layout for better responsive control
- Improved mobile layout: image appears first, followed by content, then reviews
- Enhanced desktop layout: content spans full height in left column, image and reviews stack in right column
- Reduced top/bottom padding from `xxx-large` to `large` for more compact section spacing

**Legal Pattern Spacing Adjustments:**
- Reduced vertical padding in multiple legal patterns (services, testimonials, contact) from `xxx-large` to `large` or `xx-large` for better visual rhythm
- More balanced spacing throughout legal template sections

### Technical

**Code Quality Improvements:**
- Removed organizational HTML comments from legal pattern files (legal-team.php, legal-stats.php, legal-testimonials.php)
- Fixed block validation issues caused by HTML comments between opening tags and WordPress block comments
- Added comprehensive documentation in CLAUDE.md about HTML comment restrictions in block patterns
- Cleaner pattern markup improves WordPress block validation and prevents console errors",

## [1.4.1] - 2026-01-06

### Added

**Developer Installation Documentation:**
- Added detailed developer installation instructions in CONTRIBUTING.md
- Included GitHub repository clone commands for theme and Elayne Blocks plugin
- Added activation instructions via WordPress admin

**CSS Effects Documentation:**
- Documented 32 interactive block styles across 4 categories (Button, Card/Group, Image, Text/Link)
- Added technical implementation details: pure CSS, hardware-accelerated, accessibility features
- Explained browser compatibility and print optimization

### Changed

**README.md Structure:**
- Streamlined installation section with link to detailed developer guide in CONTRIBUTING.md
- Condensed pattern library description from detailed list to concise summary format
- Simplified style variations from detailed descriptions to compact list format
- Restructured typography section with complete font details and design system overview
- Condensed "Working with Full Site Editing" section to "Getting Started" with streamlined guidance
- Simplified Elayne Blocks plugin section with concise feature list

**Font Licensing Documentation:**
- Expanded font licensing section in readme.txt with detailed information for all 6 fonts
- Added complete font details: license type, source URLs, weights, variants, and usage context
- Organized fonts with clear headings: Open Sans, Cormorant Garamond, Quicksand, Bodoni Moda, Mona Sans, Bitter
- Specified which style variations use which fonts

### Technical

**Documentation Organization:**
- Moved developer-specific content from README.md to CONTRIBUTING.md
- Separated user-facing documentation from contributor/developer documentation
- Improved information hierarchy and discoverability",

## [1.4.0] - 2026-01-06

### Added - CSS Effect System
**New Interactive Block Styles:**
- **Button Effects:** 6 new animation styles including Arrow Slide (arrow slides right on hover), Gradient Shift (animated gradient background), Shimmer (light sweep effect), Glow (glowing shadow), Border Draw (outline fills on hover), and Slide Up (background slides from bottom)
- **Card/Group Effects:** 7 new interactive styles including Elevate on Hover (card lifts with shadow), Glow Border (animated gradient border), Image Zoom (zoom nested images), Tilt Card (3D perspective tilt), Scale Hover (subtle scale up), Border Pulse (pulsing border animation), and Slide Border (border slides from edges)
- **Image Effects:** 9 new hover styles including Zoom Hover, Grayscale to Color, Rotate Icon, Blur, Brightness, Sepia, Lift Shadow, Border Reveal, and Tilt 3D
- **Text/Link Effects:** 10 new typography styles including Animated Underline (expands from left), Animated Underline Center (expands from center), Gradient Text (gradient clipped to text), Gradient Text Animated (shifting gradient), Highlight Fade (background appears on hover), Link Hover Shift (slides right with underline), Underline Slide (animated heading underline), Fade In (text fades in with upward movement), and Animated Markers (list markers slide on hover)

**Effect System Features:**
- Pure CSS animations with hardware acceleration for smooth 60fps performance
- Comprehensive accessibility support with enhanced focus states and reduced motion preferences
- Print stylesheet optimization (removes all effects for clean printing)
- RTL language support for text/link effects
- Cross-browser compatibility with fallbacks for unsupported features

### Changed - Typography Improvements
**Link Styling:**
- Removed default underline from all links (modern, cleaner appearance)
- Added medium font weight (500) to paragraph links for better visual hierarchy
- Links now only show underline on hover state

### Technical
**New Stylesheet Files:**
- Added `assets/styles/core-button.css` - Button effect system (260 lines)
- Added `assets/styles/core-image.css` - Image effect system (231 lines)
- Added `assets/styles/core-paragraph.css` - Text/link effect system (348 lines)
- Updated `assets/styles/core-group.css` - Complete rewrite with card/group effects (271 lines, previously 73 lines)

**Block Style Registration:**
- Added `elayne_register_effect_block_styles()` function in `functions.php`
- Registers 32 new block style variations across 6 core blocks
- Supports core/button, core/group, core/image, core/paragraph, core/heading, and core/list blocks

**Performance Optimizations:**
- Uses CSS `will-change` property for transform-heavy animations
- Leverages GPU acceleration via `transform` and `opacity` transitions
- Media query for hover capability detection (`@media (hover: hover) and (pointer: fine)`)
- Automatic animation disabling for `prefers-reduced-motion` users",

## [1.3.3] - 2026-01-03

### Changed

**Pattern Library Count Update:**
- Updated pattern count from 72 to 73 professionally designed patterns
- Headers & Footers category expanded from 6 to 7 patterns
- Added standard header with phone number to header variations

**README.md Documentation Completion:**
- Completed documentation restructure started in 1.3.2
- Finalized separation of user-facing documentation (README.md) from developer documentation (CONTRIBUTING.md)
- Pattern library section now reflects accurate counts across all categories",

## [1.3.2] - 2026-01-03

### Changed

**Navigation Styling:**
- Removed underline decoration from current menu items and hovered parent menu buttons for cleaner appearance

**Firefox Link Rendering:**
- Added browser-specific fix to standardize link underline thickness at 0.1rem in Firefox

### Added

**New Header Pattern:**
- Added "Header Standard with Phone Number" pattern (header-standard-with-tel-number) with logo, inline navigation, and phone number
- Phone number displays on mobile only, with full navigation visible on desktop
- Includes responsive visibility classes (hide-on-desktop/hide-on-mobile)

### Technical

**CSS Enhancements:**
- Added media query for .hide-on-desktop class (min-width: 782px)
- Added Firefox-specific @-moz-document rule for consistent link underline thickness",

## [1.3.1] - 2026-01-02

### Added

**CONTRIBUTING.md Developer Guide:**
- Comprehensive developer documentation covering technical requirements, project structure, and contribution guidelines
- Detailed pattern development guidelines including responsive grid layouts and horizontal padding best practices
- Industry vertical pattern creation guidelines with naming conventions and image organization
- Translation, code standards, and testing checklists for contributors

**Legal Services Industry Vertical:**
- New legal-focused patterns and content optimized for law firms and legal professionals
- Legal Blue style variation with professional navy blue and gold palette
- Legal-specific images stored in `patterns/images/legal/` directory

### Changed

**README.md Documentation Restructure:**
- Condensed pattern library section from detailed 100+ line listing to concise category-based overview
- Simplified documentation by moving developer details to CONTRIBUTING.md
- Pattern count updated from 47 to 72 patterns with reorganized category counts
- Industry verticals section now includes Legal Services alongside Spa & Wellness and Real Estate

### Technical

**Documentation Organization:**
- Separated user-facing documentation (README.md) from developer documentation (CONTRIBUTING.md) for better organization

## [1.3.0] - 2026-01-02

### Added

**New Vertical Pattern Categories:**
- Added Legal Services category (`elayne/legal`) with professional law firm patterns
- Added Fintech & Technology category (`elayne/fintech`) for financial and tech businesses
- Added Beauty & Salon category (`elayne/salon`) for beauty and wellness services
- Added Retail & E-commerce category (`elayne/retail`) for online and physical stores

**Legal Services Patterns:**
- Legal Services Hero (`elayne/legal-hero`) - Professional hero section with call-to-action buttons
- Legal Hero with Statistics (`elayne/legal-hero-with-stats`) - Premium hero with integrated statistics and gradient background
- Legal Hero Split Layout (`elayne/legal-hero-split`) - Split-screen hero with trust badge, features, and client reviews
- Legal Contact Information (`elayne/legal-contact`) - Contact details with office location, phone, email, and hours

**Legal Services Assets:**
- Added 6 custom SVG icons for practice areas: business law, criminal defense, estate planning, family law, litigation, and real estate law
- Added 3 attorney portrait images (WebP format) for team sections
- Added professional law office hero image (WebP format)

### Technical

**Pattern System Enhancements:**
- Extended pattern category registration to support vertical-specific content organization
- All new patterns include proper metadata, categories, keywords, and viewport width settings
- Legal patterns feature responsive layouts with grid-based column systems

## [1.2.5] - 2025-12-31

### Added

**Pattern URL Documentation:**
- Added comprehensive documentation about pattern URL behavior and database content
- Documented how `get_template_directory_uri()` returns environment-specific URLs that get hardcoded into database
- Included troubleshooting steps for mixed content warnings when moving content between environments
- Added search-replace commands for URL sanitization when deploying content to production
- Cross-referenced main CLAUDE.md documentation for URL sanitization workflows

### Technical

**Logo Asset Cleanup:**
- Removed unused PNG logo files in multiple sizes (16x16, 32x32, 48x48)
- Removed dark, outline, primary, and white logo variants
- Theme now uses SVG logos exclusively for better scalability and performance

## [1.2.4] - 2025-12-31

### Changed - Navigation and post metadata styling

**Navigation Chevron Spacing:**
- Reduced gap between parent menu text and chevron from 0.5rem to 0.25rem
  - Updated `.moiraine-nav-parent-wrapper` gap property in core-navigation.css
  - Updated `.moiraine-nav-toggle` margin-left in overlay mode
  - Tighter, more compact visual appearance for navigation menus
  - Consistent spacing across desktop and mobile overlay modes

**Post Author and Date Alignment:**
- Added CSS fixes for vertical alignment of post author and post date blocks
  - `.wp-block-post-author` now uses flexbox with `align-items: center`
  - `.wp-block-post-author__content` aligns author name with avatar center
  - `.wp-block-post-date` aligns with author name when in flex container
  - Prevents misaligned metadata in post layouts

### Technical

- Navigation spacing improvements enhance visual consistency
- Post metadata alignment fixes improve readability in sidebar and post layouts
- CSS changes isolated to core-navigation.css and style.css

## [1.2.3] - 2025-12-30

### Changed - License update

**License Version Update:**
- Updated theme license from GPL v2 to GPL v3
  - style.css: Changed license from "GNU General Public License v2 or later" to "GNU General Public License v3 or later"
  - License URI updated from https://www.gnu.org/licenses/gpl-2.0.html to https://www.gnu.org/licenses/gpl-3.0.html
  - Added full GPL v3 license text to LICENSE.md file
  - Removed redundant license section from README.md (license details now in LICENSE.md)
  - readme.txt updated to reflect GPL v3 licensing

### Technical

- Theme now consistently uses GPL v3 across all files
- LICENSE.md contains complete GPL v3 license text (674 lines)
- Copyright notice in style.css and readme.txt updated accordingly

## [1.2.2] - 2025-12-29

### Fixed - Mobile spacing and pattern refinements

**Pattern Fixes:**
- **services-feature-cards** - Fixed missing horizontal padding on mobile
  - Added `var:preset|spacing|medium` to left/right padding on outer full-width group
  - Prevents edge-to-edge content on mobile devices
  - Corrects regression from version 1.2.1 where horizontal padding was incorrectly removed
  - Pattern now follows Elayne responsive padding standard

**Pattern Improvements:**
- **three-column-feature-grid** - Code formatting and spacing refinements
  - Removed background colors from individual feature cards (cleaner tertiary background)
  - Adjusted bottom margin spacing from `xx-large` to `large` for better vertical rhythm
  - Changed grid `blockGap` from `x-large` to `0` for consistent card spacing
  - Added `blockGap: 0` to individual cards for tighter content spacing
  - Improved code formatting with cleaner indentation
  - More maintainable markup structure

### Technical

- Mobile spacing now consistent across all full-width patterns
- Constrained layout containers require horizontal padding for proper mobile display
- Pattern code quality improvements for better maintainability

## [1.2.1] - 2025-12-28

### Changed - Responsive layout improvements

**Pattern Responsiveness Enhancements:**
- **shop-overview-three-columns** - Converted from 3-column layout to grid layout with `minimumColumnWidth: 280px`
  - Responsive breakpoints: 3 columns (desktop) → 2 columns (tablet) → 1 column (mobile)
  - Smoother responsive behavior across all device sizes
  - Better user experience with proper tablet layout
- **team-grid** - Converted from columns to grid layout with `minimumColumnWidth: 280px`
  - Proper 3-2-1 column responsive flow
  - Improved tablet display (2 columns instead of cramped 3)
- **stats-showcase** - Converted stats grid from columns to grid layout with `minimumColumnWidth: 280px`
  - Better responsive behavior for statistics cards
- **stats-list** - Converted feature list from columns to grid layout with `minimumColumnWidth: 280px`
  - Improved mobile and tablet display
- **services-feature-cards** - Removed horizontal padding from outer container (padding: 0)
  - Full-width background now extends properly on all screen sizes
  - Removed redundant backgroundColor from outer group (already on constrained inner group)
- **career-opportunities** - Removed horizontal padding from outer container (padding: 0)
  - Consistent with other full-width patterns
- **template-page-centered** - Changed default alignment to "full" for better pattern display
  - Patterns with full-width backgrounds now work correctly
- **wellness-cover-highlight** - Removed default backgroundColor (uses cover block background)
  - Cleaner pattern structure

**Header Pattern Updates:**
- **header-standard** - Major responsive improvements
  - Added horizontal padding (left/right: `var:preset|spacing|medium`) to header container
  - Changed navigation flexWrap from "wrap" to "nowrap" for better mobile behavior
  - Added "hide-on-mobile" class to social links (hidden on mobile, shown on desktop)
  - Removed unnecessary wrapper group around site title
  - Simplified header structure for better mobile display
  - Navigation and site title now properly aligned on all screen sizes

**Navigation Improvements:**
- Added `.hide-on-mobile` CSS rule to `core-navigation.css`
  - Hides elements with this class on screens ≤781px
  - Used for social links in header-standard pattern
  - Provides cleaner mobile header layout

**Template Parts:**
- Updated default header (`parts/header.html`) from header-mobile to header-standard
  - header-standard now properly optimized for both desktop and mobile
  - Single header pattern for all screen sizes
  - Simplified theme architecture

### Technical - Responsive layout standardization

- Converted 5 patterns from `wp:columns` to grid layout with `minimumColumnWidth`
- Grid layouts provide automatic 3→2→1 column responsive behavior
- Eliminated cramped 3-column layouts on tablet devices
- Full-width pattern padding now consistently applied only to constrained inner groups
- Header pattern now uses single responsive design instead of separate mobile/desktop variants

## [1.2.0] - 2025-12-27

### Added - WooCommerce integration

**WooCommerce Product Archive Support:**
- **Custom Product Archive Template** - New `templates/archive-product.html` template for WooCommerce shop pages
  - Responsive 3-2-1 column grid layout (3 desktop, 2 tablet, 1 mobile)
  - Product collection block with breadcrumbs, sorting, and pagination
  - Review testimonial pattern at bottom of shop page
  - Integrates seamlessly with WooCommerce product displays
  - Uses Elayne design system (spacing, colors, typography)

**Responsive Product Grid CSS:**
- Custom CSS Grid override for WooCommerce Product Collection block
  - Overrides WooCommerce's default flexbox layout with CSS Grid
  - Responsive breakpoints: 3 columns (>1024px), 2 columns (641px-1024px), 1 column (≤640px)
  - Properly sized columns using `grid-template-columns: repeat(n, 1fr)`
  - Removes WooCommerce's width constraints on list items (`width: auto !important`)
  - Better responsive behavior than WooCommerce's default (which uses flexbox + percentage widths)
  - Defined in `style.css` lines 223-246

### Technical - WooCommerce implementation

- Template references `elayne/two-column-review` pattern for social proof
- CSS targets `.wc-block-product-template.is-flex-container` for grid conversion
- Uses `!important` declarations to override WooCommerce's inline styles
- Grid gap adjusts responsively (2rem desktop, 1.5rem tablet, 1rem mobile)
- Compatible with WooCommerce Product Collection block (modern block-based approach)
- No JavaScript required - pure CSS solution

## [1.1.2] - 2025-12-27

### Added - Elayne branding and logo assets

**New Logo Assets:**
- **Elayne Logo Collection** - Complete logo system in multiple formats and sizes
  - Primary gold logo (SVG + PNG): elayne-logo-primary.svg, elayne-logo-primary.png
  - Dark logo (SVG + PNG): elayne-logo-dark.svg, elayne-logo-dark.png
  - White logo (SVG + PNG): elayne-logo-white.svg, elayne-logo-white.png
  - Outline logo (SVG + PNG): elayne-logo-outline.svg, elayne-logo-outline.png
  - Favicon sizes (16x16, 32x32, 48x48 PNG) for all logo variants
  - All logos stored in `assets/images/logos/` directory
  - SVG format for scalability, PNG with drop shadows for raster use
  - Gold color (#D4AF37) for premium branding

**README Updates:**
- Updated README.md with Elayne logo header
  - Replaced text banner with centered SVG logo
  - Cleaner, more professional presentation
  - Logo at 120x140px for optimal display

### Changed - Pattern and CSS refinements

**Pattern Updates:**
- **portfolio-grid-masonry** - Layout and link styling improvements
  - Changed from CSS Grid to true masonry layout using CSS columns
  - Added `portfolio-masonry-grid` class with column-count: 3
  - Responsive breakpoints: 2 columns (tablet), 1 column (mobile)
  - Portfolio item titles now have hover underline effect
  - Added text-decoration: none to default state for cleaner appearance
  - Better visual hierarchy with improved link states
- **card-call-to-action** - Code cleanup and formatting
  - Simplified markup with cleaner indentation
  - Removed unnecessary shadow styling (uses default card styling)
  - More maintainable code structure
- **team-grid** - Code formatting improvements
  - Cleaner indentation for better readability
- **stats-showcase** - Minor spacing adjustments
  - Improved consistency with other patterns

**CSS Enhancements:**
- **core-navigation.css** - Underline styling refinements
  - Added `text-decoration-thickness: 1px` to navigation links
  - Consistent underline thickness across all navigation states
  - Applied to both standard navigation and clickable parent links
  - Better visual consistency for hover states
- **style.css** - Portfolio masonry layout system
  - Added `.portfolio-masonry-grid` class with CSS column layout
  - Three-column masonry on desktop (column-count: 3)
  - Two-column on tablet (max-width: 1024px)
  - Single-column on mobile (max-width: 640px)
  - Prevents column breaks within portfolio items (break-inside: avoid)
  - Configurable column gap (16px default)

### Technical

- Total logo files: 20 (4 variants × 4 sizes + 4 SVG originals)
- Logo design features lily flower symbolism for elegance and sophistication
- All PNG logos include subtle drop shadows for depth
- SVG logos provide scalability for all screen sizes
- Masonry layout uses CSS columns (no JavaScript required)
- Improved pattern code maintainability with consistent formatting

## [1.1.1] - 2025-12-26

### Added - Enhanced navigation system with clickable parents

**Navigation Enhancements:**
- **Clickable Parent Menu Items** - Parent menu items can now be both clickable links AND dropdown toggles
  - Click text to navigate to parent page
  - Click chevron to toggle submenu
  - Uses `hasClickableParents` attribute on Navigation block
  - Preserves WordPress Interactivity API compatibility
  - Includes fallback JavaScript for enhanced compatibility
- **Improved Chevron Positioning** - Better chevron icon placement in navigation menus
  - Chevron icons properly nested inside buttons for HTML5 validation
  - Cleaner DOM structure for accessibility
  - Uses `hasImprovedChevrons` attribute on Navigation block
- **Custom Navigation Styles** - Comprehensive navigation styling system
  - New `assets/styles/core-navigation.css` with organized CSS architecture
  - Desktop dropdown styling with shadows and borders
  - Mobile overlay menu styling
  - CSS custom properties for consistent spacing and sizing
  - Responsive design for all viewport sizes
- **Navigation Frontend Script** - Client-side enhancement for navigation functionality
  - Automatically enqueued for all pages
  - Handles clickable parent conversion
  - Fixes HTML5 validation issues
  - Lightweight (no dependencies)

### Changed - Pattern and style refinements

**Pattern Updates:**
- **header-standard** - Updated site title styling
  - Changed font weight from 300 (light) to 600 (semi-bold) for better visibility
  - Adjusted font size from "medium" to "base" for consistency
  - Removed custom "has-bottom-border" class
  - Added `hasClickableParents` and `hasImprovedChevrons` to navigation block
- **footer-simple** - Updated footer link colors
  - Changed default text color from "secondary" to "main" for better contrast
  - Updated link hover color from "main" to "primary" for better visual feedback
- **stats-showcase** - Improved avatar styling
  - Removed hardcoded width/height (60px) from avatar image
  - Added `is-avatar` class for consistent avatar sizing via theme.json
  - Uses `var(--wp--custom--avatar-size)` for centralized sizing
  - Maintains `is-style-rounded-full` and `is-style-rounded` classes

### Technical

- Frontend JavaScript uses vanilla DOM manipulation (no dependencies)
- CSS organized with table of contents and clear sections
- WordPress Interactivity API attributes preserved on converted elements
- HTML5 validation improved by proper chevron icon nesting
- Navigation enhancements work with all WordPress themes (not theme-specific)
- Avatar sizing now centralized via theme.json custom properties

## [1.1.0] - 2025-12-25

### Added - Spa & Wellness style variation and patterns

**New Style Variation:**
- **Spa & Wellness** - Elegant spa and wellness color scheme with sophisticated typography
  - Cormorant Garamond serif font for elegant headings with refined letterforms
  - Quicksand sans-serif for clean, friendly body text
  - Soothing spa color palette: Teal (#5BBCD6), Ocean Sage (#2D4A4E), soft accent tones
  - Three custom duotone presets (Spa Teal, Ocean Sage, High Contrast)
  - Three gradient presets (Spa Teal, Ocean Depth, Peaceful Sky)
  - Perfect for spas, wellness centers, yoga studios, and health retreats
  - Accessible via Appearance > Editor > Styles

**New Fonts:**
- **Cormorant Garamond** - Elegant serif typeface (variable weight 300-700) with italic variant
- **Quicksand** - Modern rounded sans-serif (variable weight 300-700)
- Self-hosted WOFF2 format for optimal performance

**New Patterns (13):**

*Header Patterns (1):*
- **header-top-bar-centered-menu** - Header with centered logo and navigation menu with top bar
  - Clean centered layout
  - Optional top announcement bar
  - Perfect for spa and wellness sites

*Footer Patterns (1):*
- **footer-with-nav-columns** - Two-column footer with site info/social and multi-column navigation
  - Site title, description, and social links on left
  - Three navigation columns on right (About, Services, Visit)
  - Copyright and legal links at bottom
  - Flexible layout for any business type

*Hero Patterns (1):*
- **spa-home-hero** - Hero section with overlapping colored box on image background
  - Dramatic overlapping layout
  - Image on left, content box overlaps on right
  - Perfect for spa homepages and landing pages

*Call-to-Action Patterns (1):*
- **spa-booking-cta** - Booking call-to-action with form integration
  - Encourages appointment bookings
  - Form-ready layout
  - Conversion-optimized design

*Features Patterns (4):*
- **two-column-feature** - Two-column feature section with image and content
  - Balanced 50/50 layout
  - Image on left, content on right
  - Versatile for services, features, about sections
- **overlapping-feature-columns** - Feature columns with overlapping image effect
  - Modern overlapping design
  - Image overlaps content box
  - Creates visual depth and interest
- **overlapping-feature-columns-reversed** - Reversed overlapping feature columns
  - Mirror layout of overlapping-feature-columns
  - Content on left, image overlaps from right
  - Provides layout variety
- **wellness-cover-highlight** - Full-width wellness cover section with highlight box
  - Dramatic full-width cover image
  - Overlay content box
  - Perfect for hero sections and feature highlights

*Testimonials & Reviews (3):*
- **testimonials-grid** - Three-column testimonial grid with star ratings
  - Client testimonials in card layout
  - Star ratings for credibility
  - Professional presentation
- **two-column-review** - Two-column review section with image and testimonial
  - Client photo with testimonial
  - Quote-style formatting
  - Personal touch for reviews
- **review-text-image-overlap** - Review with overlapping text and image
  - Text overlaps image for visual interest
  - Modern magazine-style layout
  - Engaging testimonial presentation

*Blog/Posts Patterns (1):*
- **four-column-wellness-posts** - Four-column grid for wellness blog posts
  - Compact grid layout
  - Perfect for blog archives and related posts
  - Optimized for wellness content

*Shop/E-commerce Patterns (1):*
- **shop-overview-three-columns** - Three-column product grid for spa/wellness shops
  - Product showcase layout
  - Image-focused cards
  - Perfect for WooCommerce integration

**New Pattern Images:**
- Added spa-focused images in `patterns/images/spa/` directory:
  - **Treatment images**: back-massage.webp, spa-treatment-hot-stones.webp, spa-treatment-landscape.webp, spa-treatment-zoomed.webp, yoga-pose.webp
  - **Client avatars**: avatar-1.webp, avatar-2.webp, avatar-3.webp, avatar-4.webp, review-profile.webp
  - **Product images** (shop subdirectory): bath-salt.webp, massage-oil.webp, serum.webp, supplements.webp
  - All images optimized WebP format for fast loading

**CSS Enhancements:**
- Added overlapping columns styling (`.is-style-overlap-columns`, `.is-style-overlap-columns-reversed`)
  - Creates modern overlapping layouts on desktop (min-width: 782px)
  - Second column overlaps first by -10% with z-index layering
  - Centered vertical alignment for visual balance
- Enhanced spa post grid styling for consistent image display
- Added cart icon styling with hover effects and transitions
- Mobile navigation adjustments for centered logo and menu button

### Changed - Pattern organization and categories

- Pattern count increased from 34 to 47 total patterns
- Enhanced pattern library with spa and wellness industry focus
- Improved layout variety with overlapping column techniques
- Better responsive design across all new patterns
- Updated palette tokens to use `primary-alt` and add `primary-alt-accent` across style variations
- Added Spa & Wellness pattern category for easier pattern browsing

### Technical

- Total style variations: 5 (Ink & Sand, Teal Bay, Denim Copper, Forest Sage, Spa & Wellness)
- All new patterns follow Elayne design system with theme color tokens
- Variable fonts provide flexible typography and better performance
- Self-hosted fonts ensure GDPR compliance and fast loading
- CSS improvements for modern overlapping layouts
- All content fully translatable with proper text domain

## [1.0.3] - 2025-12-24

### Changed - Avatar styling improvements

- Added custom avatar size configuration in theme.json (`settings.custom.avatarSize: "80px"`)
- Updated stats-list pattern avatar styling to use theme.json custom variable instead of hardcoded pixel values
- CSS now references `var(--wp--custom--avatar-size)` for consistent, maintainable avatar sizing across the theme
- Avatar images properly sized at 80x80px with circular shape using WordPress core `is-style-rounded` class
- Removed redundant custom CSS for rounded styling (WordPress core handles this via `border-radius: 9999px`)

### Technical - CSS architecture

- Centralized avatar size definition in theme.json for single source of truth
- More maintainable CSS with semantic variable naming
- Better integration with WordPress theme.json design token system
- Leverages WordPress core block styles instead of custom CSS for rounded images

## [1.0.2] - 2025-12-24

### Changed - Hero pattern style refinements

- Updated **hero-modern-dark** pattern with improved styling:
  - Simplified background gradient from complex radial/linear combo to cleaner diagonal linear gradient (135deg)
  - Changed from `radial-gradient(ellipse at top, rgba(99, 102, 241, 0.15) 0%, transparent 50%), radial-gradient(ellipse at bottom, rgba(139, 92, 246, 0.15) 0%, transparent 50%), linear-gradient(180deg, rgb(15, 23, 42) 0%, rgb(30, 41, 59) 100%)` to `linear-gradient(135deg,rgb(11,19,36) 0%,rgb(101,106,113) 100%)`
  - Added top spacer (50px) before heading for better vertical rhythm
  - Added bottom spacer (4rem) after hero image for consistent spacing
  - Reformatted code indentation for better maintainability (tabs instead of spaces)

### Technical - Pattern code quality

- Improved hero-modern-dark pattern markup with cleaner indentation
- Enhanced visual consistency with simplified gradient approach
- Better vertical spacing throughout pattern

## [1.0.1] - 2025-12-24

### Added - Hero page template

- Added **template-page-hero** (slug: `elayne/template-page-hero`) for pages that start with a full-width hero and need no top padding.

## [1.0.0] - 2025-12-23

### Added - New Portfolio and Pages Patterns

**New Portfolio Category Patterns:**
- **portfolio-grid-masonry** (slug: `elayne/portfolio-grid-masonry`) - Masonry-style portfolio grid
  - Showcases creative work in visually engaging grid layout
  - Category filter pills (All, Branding, Web Design, Development, Marketing)
  - Variable height cards (320px and 480px) for dynamic masonry effect
  - Project cards with overlay titles and category tags
  - Rounded corners (16px) and professional card design
  - Perfect for agencies, designers, and creative professionals
  - Uses existing pattern images (desktop.webp, computer-hands.webp, guy-laptop.webp, wellness.webp)

- **case-study-detailed** (slug: `elayne/case-study-detailed`) - Comprehensive project case study
  - Structured storytelling format: Challenge, Approach, Results
  - Hero cover image with project title and metadata
  - Three-phase approach section with numbered steps
  - Results metrics display (3-column stats grid)
  - Client testimonial quote with border accent
  - Project gallery (WordPress gallery block)
  - Services provided tags (pill-style badges)
  - Full-width CTA section at bottom
  - Perfect for showcasing detailed client work and case studies

**New Pages Category Patterns:**
- **page-coming-soon** (slug: `elayne/page-coming-soon`) - Pre-launch/maintenance page
  - Full-height centered layout (100vh min-height)
  - Site logo at top (200px width)
  - Large "Coming Soon" heading (4rem)
  - Countdown timer display (Days, Hours, Minutes, Seconds)
  - Email notification signup CTA
  - Social media links (Twitter, LinkedIn, Instagram)
  - Clean, minimal design on base background
  - Perfect for product launches and website maintenance

**New Call-to-Action Patterns:**
- **card-call-to-action** (slug: `elayne/card-call-to-action`) - Modular CTA component
  - Compact card design (400px max width)
  - Shadow and rounded corners for depth
  - Centered heading and description
  - Full-width button (100% width)
  - Perfect for landing pages, blog sidebars, and conversion sections
  - Reusable component for various page contexts

**New Features Patterns:**
- **client-logo-wall** (slug: `elayne/client-logo-wall`) - Client logo showcase
  - "Trusted by Leading Brands" heading section
  - Responsive grid layout (minimum 10rem columns)
  - 12 logo placeholders in duotone effect
  - Rounded card container (8px border-radius)
  - "View Our Portfolio" CTA button
  - Builds credibility and social proof
  - Uses existing logo images (logo-1 through logo-6)

**New Template:**
- **landing-page.html** template - Full-screen landing page without header/footer
  - Referenced by `template-landing-page.php` pattern
  - Zero margins on main container
  - Perfect for coming soon pages and dedicated landing pages
  - Allows full creative control without site chrome

**New Pattern Image:**
- Added `wellness.webp` - Meditation/wellness scene for portfolio masonry pattern

### Changed - Pattern count and categories

- Pattern count increased from 21 to 26 original content patterns (34 total including templates)
- Added new "Portfolio" category (elayne/portfolio) with 2 patterns
- Added new "Pages" category (elayne/pages) with 1 pattern
- Enhanced "Call-to-Action" category with card component
- Enhanced "Features" category with client logo wall

### Changed - Documentation and assets

- Updated README.md with new pattern descriptions and categorization
- Optimized readme-banner.png size (1.45MB → 236KB, 84% reduction)
- Updated pattern listings in documentation

### Technical

- Total patterns: 50 files (34 content patterns + 16 template patterns)
- New template type: Landing Page (full-screen, no header/footer)
- All new patterns follow Elayne design system
- Fully translatable with proper text domain
- Responsive grid layouts with modern CSS
- Pattern categories properly registered in functions.php

## [1.0.0-beta.13] - 2025-12-16

### Added - New event pattern and category

- Added new "Events" category (elayne/events) for event-related patterns.
- Added **event-upcoming-grid** pattern (slug: `elayne/event-upcoming-grid`) - Responsive 3-column event grid
  - Displays upcoming events with date badges, time, location, and registration buttons
  - Calendar-style date display with month, day, and weekday
  - Event type badges (Online/In-person) with custom styling
  - Time display with timezone support
  - Location and capacity information with emoji icons
  - Dual CTA buttons (Register/Details, Get tickets/Details, Save seat/Details)
  - Card-based design with rounded corners and borders
  - Perfect for workshops, webinars, conferences, and community events
  - Fully translatable content with proper text domain

### Changed - Documentation organization

- Reorganized theme documentation files for better project structure
  - Improved organization for development and planning documents
  - Better separation between theme files and project documentation

### Technical

- Pattern count increased from 20 to 21 original patterns
- Event pattern features responsive grid layout with `minimumColumnWidth: 20rem`
- All event content properly localized with `esc_html_e()` for translations
- Event category added to theme pattern registration in functions.php

## [1.0.0-beta.12] - 2025-12-16

### Added - New pattern category

- Added "Cards" category (elayne/card) for reusable card-style patterns.
- Provides better organization for card components like author boxes, contact cards, and other card-based layouts.

### Changed - Pattern category cleanup

- Fixed duplicate pattern categories by standardizing all patterns to use namespaced categories (elayne/*).
- Updated hero patterns to use elayne/hero category instead of WordPress core categories (banner, featured).
- Updated blog/post patterns to use elayne/posts category instead of core "posts" category.
- Updated author-box pattern to use elayne/card category for better categorization.
- Updated contact-side-by-side pattern to use elayne/contact category.

### Fixed - Pattern organization

- Resolved duplicate category display issue in pattern library.
- All patterns now properly organized under registered theme categories.
- Eliminated confusion from mixing WordPress core categories with theme categories.

### Technical - Category system

- Pattern categories now consistently use theme namespace (elayne/*) for custom patterns.
- WordPress core categories (header, footer) still used appropriately for template parts.
- Improved pattern discoverability and organization in Site Editor.

## [1.0.0-beta.11] - 2025-12-16

### Changed - Header and pattern refinements

- Removed horizontal padding from header patterns (header-standard, header-mobile) to allow full-width alignment.
- Updated client-success-stories pattern with improved styling:
  - Adjusted star rating font sizes (large → medium for main testimonial, large → base for supporting testimonials).
  - Removed border styling from testimonial cards for cleaner appearance.
  - Changed secondary color references to main-accent for better consistency.
  - Added is-style-rounded class to avatar images.
  - Fixed hardcoded image URLs to use proper template directory function.
- Updated agency-services-showcase pattern with additional wrapper group for improved layout structure.
- Adjusted header navigation font size (medium → base) in header-mobile pattern.

### Technical - Pattern markup improvements

- Improved semantic HTML structure with proper wrapper elements.
- Enhanced compatibility with theme color palette by using consistent color tokens.
- Better responsive behavior for header elements with full-width alignment.

## [1.0.0-beta.10] - 2025-12-15

### Added - Color styles

- Added three new color scheme styles: Teal Bay, Denim Copper, and Forest Sage.
- Each style provides a complete alternative color palette accessible via Appearance > Editor > Styles.

### Changed - Default color palette

- Updated default theme.json color palette to use warmer "Ink & Sand" color scheme.
- Changed from bright teal/cyan to softer ink blue and warm sand tones for more sophisticated default appearance.
- Original teal color scheme now available as "Teal Bay" style variation.

### Fixed - Template layout issues

- Fixed template-page-wide-no-title.php to allow full-width (alignfull) patterns to work correctly.
- Removed incorrect alignwide wrapper that was boxing content and preventing edge-to-edge patterns.
- Template now matches template-page-full.php structure with vertical padding but no horizontal constraints.

### Technical - Template architecture

- Wide No Title template now properly supports full-width pattern layouts for landing pages.
- Maintains vertical spacing (top/bottom padding) while allowing horizontal edge-to-edge content.
- Implemented WordPress theme.json styles system for color variations.
- Created styles/teal-bay.json, styles/denim-copper.json, and styles/forest-sage.json.

## [1.0.0-beta.9] - 2025-12-15

### Added - Typography enhancements

- Added new "3xl" font size (xxx-large) to theme.json with responsive clamp sizing (5rem to 9rem).

### Changed - Pattern markup cleanup

- Simplified client-success-stories pattern markup with cleaner wrapper structure and removed redundant inline styles.
- Completed full-width pattern padding consistency - ensured all full-width patterns have horizontal padding on left/right sides.

### Technical - Full-width pattern refinements

- All alignfull patterns now consistently include horizontal padding (left/right) for proper edge gutters on all screen sizes.
- Improved pattern code quality with cleaner markup and better maintainability.

## [1.0.0-beta.8] - 2025-12-15

### Changed - Full-width layout refinements

- Added horizontal padding to full-width patterns (client reviews, newsletter CTA, hero variants, pricing) to preserve side gutters on smaller screens.
- Updated wide page templates to use constrained post content layouts so alignfull patterns can break out correctly without unintended max-width constraints.

### Technical - Alignfull support inside post content

- Added layout helper CSS that lets alignfull blocks inside post content span edge-to-edge while respecting global padding.

## [1.0.0-beta.7] - 2025-12-14

### Added - New patterns for agencies and professional services

**New Patterns:**
- **faq** (slug: `elayne/faq`) - Collapsible FAQ section with accordion-style questions
  - Uses WordPress Details block for native accordion functionality
  - 9 pre-written agency-focused questions and answers
  - Rounded card design on tertiary background
  - Contact CTA section at bottom
  - Perfect for service pages, support sections, and informational content
- **agency-services-showcase** (slug: `elayne/agency-services-showcase`) - Four-column service grid with custom icons
  - Showcases Web Design & Development, Digital Marketing, Brand Strategy, and E-commerce
  - Custom SVG icons for each service
  - Grid layout with responsive cards
  - Professional presentation for agency offerings
- **career-opportunities** (slug: `elayne/career-opportunities`) - Job listings section for recruitment
  - Detailed job position cards with role, type, and location
  - Multiple job listings with consistent formatting
  - Call-to-action for applications
  - Ideal for careers/jobs pages
- **client-success-stories** (slug: `elayne/client-success-stories`) - Enhanced testimonial layout with ratings
  - Featured main testimonial with star ratings
  - Supporting testimonials grid
  - Client names, titles, and company information
  - Professional presentation for case studies and reviews
- **author-box** (slug: `elayne/author-box`) - Author biography card
  - Avatar with rounded border
  - Author name and bio
  - Social media links (Twitter, LinkedIn, Facebook, Instagram, GitHub)
  - Perfect for blog posts and team pages

**New Assets:**
- Added 4 custom service icons in `patterns/images/`:
  - `icon-service-web.svg` - Web design and development icon
  - `icon-service-marketing.svg` - Digital marketing icon
  - `icon-service-strategy.svg` - Brand strategy icon
  - `icon-service-commerce.svg` - E-commerce solutions icon

### Changed - Pattern renamings for clarity

**Pattern Renamings:**
- **feature-boxes-with-icon-dark** → **agency-services-showcase** (slug: `elayne/agency-services-showcase`)
  - Better reflects professional agency use case
  - More descriptive name for service showcases
- **testimonials-with-big-text** → **client-success-stories** (slug: `elayne/client-success-stories`)
  - Clearer purpose for success stories and case studies
  - Emphasizes results and client satisfaction

### Changed - Pattern refinements

**Pattern Improvements:**
- **agency-services-showcase** - Style updates for improved visual hierarchy
- **career-opportunities** - Enhanced spacing and layout improvements
- Various minor pattern refinements for consistency

### Technical

- Pattern count increased from 15 to 20 original patterns
- All new patterns follow Elayne design system
- Service icons optimized for web delivery (SVG format)
- Improved pattern metadata and categorization

## [1.0.0-beta.6] - 2025-12-13

### Added - New pricing pattern and checkmark list style

**New Pattern:**
- **pricing-comparison** (slug: `elayne/pricing-comparison`) - Three-column pricing comparison grid
  - Monthly/annual toggle capability
  - Feature comparison with checkmark lists
  - Highlighted recommended plan (center column elevated with shadow)
  - Three pricing tiers (Guardian/Free, Mage/$480, Phantom/$600)
  - Rounded corners and modern card design
  - Perfect for SaaS products, membership sites, and subscription services

**New Block Style:**
- **Checkmark List** (`.is-style-checkmark-list`) - Custom list style with checkmark icons
  - Uses SVG checkmark icon from `patterns/images/check-circle.svg`
  - Flex layout with proper spacing
  - Works with any list block
  - Used in pricing comparison pattern
  - Defined in `style.css`

### Added - Hero pattern light variant

**New Pattern:**
- **hero-modern-light** (slug: `elayne/hero-modern-light`) - Light variant of modern hero
  - Light background (base color) instead of dark gradient
  - Large centered headline with responsive typography (clamp-based sizing)
  - Tagline with medium font size
  - Dual CTA buttons (primary solid, secondary with border)
  - Hero image below content with rounded corners
  - Fully responsive with fluid spacing
  - Complements existing `hero-modern-dark` pattern

### Changed - Pattern renaming for clarity

**Pattern Renamings:**
- **contact-info** → **contact-details** (slug: `elayne/contact-details`)
  - More descriptive name for contact information display
  - Better reflects pattern purpose (office hours, phone, email, address)
- **footer-light** → **footer-standard** (slug: `elayne/footer-standard`)
  - Renamed for consistency with header naming convention
  - Matches standard footer pattern naming
- **header-light-with-hamburger-menu** → **header-mobile** (slug: `elayne/header-mobile`)
  - Simplified name reflects mobile-first design
  - Clearer purpose (hamburger menu = mobile navigation)
- **header-light-with-standard-menu** → **header-standard** (slug: `elayne/header-standard`)
  - Simplified name for desktop navigation
  - Better consistency with footer naming
- **hero-modern** → **hero-modern-dark** (slug: `elayne/hero-modern-dark`)
  - Clarifies dark background variant
  - Distinguishes from new light variant

### Added - Dutch language support

**Internationalization:**
- Added Dutch (nl_NL) translation files
  - `languages/nl_NL.po` - Translation strings
  - `languages/nl_NL.mo` - Compiled translations
  - `languages/elayne.pot` - Translation template with 50+ translatable strings
- Full theme translation coverage
  - All pattern text translatable
  - Button labels, headings, descriptions
  - Contact information, testimonials, team content
  - Pricing table content

### Changed - Template part references

**Template Updates:**
- Updated `parts/header.html` to reference `header-standard` instead of `header-light-with-standard-menu`
- Updated `parts/footer.html` to reference `footer-standard` instead of `footer-light`
- Maintains consistency with renamed patterns

### Technical

- Added checkmark SVG icon asset (`patterns/images/check-circle.svg`)
- Added README banner image (`assets/images/readme-banner.png`)
- Pattern metadata updated to reflect new naming conventions
- All pattern slugs follow consistent `elayne/pattern-name` format
- CSS additions for checkmark list style in `style.css`

## [1.0.0-beta.5] - 2025-12-12

### Added - Style variations system

**Two New Style Variations:**
- **Gray & Gold** - Sophisticated grayscale palette with gold accents
  - Bodoni Moda serif font for elegant headings
  - Open Sans for clean body text
  - Professional gray tones (#1a1a1a, #f8f8f8) with gold accent (#FFD700)
  - Ideal for luxury brands, professional services, and upscale businesses
  - Includes 5 duotone presets (Primary, Secondary, Accent, Neutral, High Contrast)
- **Orange** - Vibrant orange-focused color scheme
  - Mona Sans variable font for modern headings
  - Open Sans for body text, Bitter for serif elements
  - Bold orange palette (#e65c00) with warm accents
  - Perfect for creative agencies, startups, and energetic brands
  - Includes 3 duotone presets (Primary, Secondary, High Contrast)

**New Bodoni Moda Font:**
- Variable font family (weights 400-900)
- Includes italic variant
- Classic serif typeface for elegant, sophisticated designs
- Self-hosted WOFF2 format for optimal performance

**Style Variations Implementation:**
- Style variations stored in `styles/` directory
- Users can switch entire design system via Site Editor → Styles
- Each variation includes complete color palette, typography, and block styles
- Fully compatible with Global Styles interface

### Added - New hero pattern

**New Pattern:**
- **hero-modern** (slug: `elayne/hero-centered`) - Modern centered hero with gradient background
  - Dramatic gradient background (dark slate with purple/indigo accents)
  - Large centered headline with responsive typography (clamp-based sizing)
  - Dual CTA buttons (primary solid, secondary translucent)
  - Hero image below content with rounded corners
  - Fully responsive with fluid spacing
  - Perfect for SaaS products, tech startups, and modern web apps

### Changed - Pattern refinements

**Pattern Improvements:**
- **client-reviews-orange** → **client-reviews** - Renamed and refactored to use theme colors
  - Now follows theme color palette instead of hardcoded orange (#ff6b35)
  - Uses `primary-dark` background color for better theme compatibility
  - Maintains same layout and structure
  - Better integration with style variations
- **three-column-feature-grid** - Renamed from `feature-grid` for clarity
  - Added top/bottom spacers for improved vertical rhythm
  - Added margin reset (top/bottom: 0) for cleaner full-width sections
  - Pattern metadata updated to match new name
  - Slug changed to `elayne/three-column-feature-grid`
- **blog-post-columns** and **blog-post-columns-portrait** - Spacing improvements
  - Removed hardcoded horizontal padding from group wrapper
  - Cleaner full-width alignment
  - Better responsive behavior

**Pattern Metadata Updates:**
- Updated hero-two-tone and hero-with-cta with proper metadata structure
- Improved contact-info and cta-newsletter pattern spacing
- Enhanced consistency across all pattern files

### Technical

- Style variations follow WordPress theme.json v3 specification
- Variable fonts provide better performance and flexible typography
- All patterns now use theme color tokens for better customization
- Pattern naming convention standardized (hyphenated slugs, descriptive titles)

## [1.0.0-beta.4] - 2025-12-11

### Added - Custom block styles system

**Block Style Infrastructure:**
- New block-specific styles directory (`assets/styles/`)
- Automatic block style loading system via `wp_enqueue_block_style()`
- Only loads styles when blocks are used (performance optimization)
- Supports custom styling for core blocks

**Custom Block Styles:**
- **core-site-title.css** - Bottom border decoration for site title/logo
  - Centered underline effect (50% width)
  - Hover opacity transition
  - Editor-compatible styles
- **core-group.css** - Enhanced group block styling
  - Removes default global padding from full-width sections
  - Background blur style variant (`is-style-background-blur`)
  - Responsive row improvements with mobile stacking (`elayne-row-stack`)
  - Flexible alignment utilities

**New Image Size:**
- **elayne-portrait-xs** (350×525) - 2:3 aspect ratio for extra small portrait layouts
  - Complements existing portrait size family
  - Optimized for smaller grid displays

### Added - New header and footer patterns

**New Header Pattern:**
- **header-light-with-standard-menu** - Header with logo, inline navigation, and social icons
  - Alternative to hamburger menu variant
  - Desktop-optimized with inline navigation
  - Mobile responsive with overlay menu
  - Includes social media links (Mastodon, Instagram, Bluesky)
  - Clean, minimal design with border separator

**New Footer Pattern:**
- **footer-simple** - Minimal footer with single-line menu navigation
  - Centered horizontal layout with separator dots
  - Copyright year, site name, and essential links
  - Lightweight alternative to complex footer layouts
  - Responsive text sizing

### Changed - Site title styling enhancements

- Added custom typography styling to site titles in header patterns
  - Font weight: 300 (light) for refined appearance
  - Uses primary font family from theme.json
  - Applied to both hamburger and standard menu headers
  - Consistent with modern, clean design aesthetic

### Changed - Pattern refinements

- Updated post template patterns for improved consistency
- Refined blog post column patterns with better spacing
- Enhanced sidebar template styling
- Improved single post template structure

### Technical

- Block styles loaded conditionally via `wp_enqueue_block_style()` API
- Automatic style discovery from `assets/styles/` directory
- Pattern-based architecture for custom block styling
- Maintains WordPress 6.6+ block theme standards

## [1.0.0-beta.3] - 2025-12-10

### Added - Additional layout template patterns

**New Page Layout Patterns:**
- **template-page-left-sidebar** - Page layout with left sidebar (33.33% sidebar, 66.66% content)
  - Complements existing right sidebar layout
  - Tertiary background color on sidebar area
  - Full-width featured image support
  - Consistent spacing with theme design system

**New Post Layout Patterns:**
- **template-post-left-sidebar** - Post layout with left sidebar (33.33% sidebar, 66.66% content)
  - Post metadata (category, title, author, date)
  - Featured image and post content
  - Post tags display
  - Full comments section with tertiary background
  - Latest posts grid (3-column) at bottom
  - Sidebar hidden on mobile devices
- **template-post-right-sidebar** - Post layout with right sidebar (66.66% content, 33.33% sidebar)
  - Mirror layout of left sidebar variant
  - Same post metadata and content structure
  - Full comments and latest posts sections
  - Responsive sidebar behavior
- **template-post-wide** - Wide post layout with expanded content area
  - Wide-aligned title, featured image, and content
  - Post metadata (category, author, date)
  - Post tags display
  - Full comments section with tertiary background
  - Latest posts grid (3-column) at bottom
  - Optimized for long-form content and visual storytelling

**New Blog Index Pattern:**
- **template-index-list** - Single-column list layout for blog posts
  - Alternative to grid layout (Elayne's default)
  - Full-width post entries with featured images
  - Category, title, author, and date metadata
  - Post excerpt display
  - Horizontal separator between posts
  - Query pagination at bottom
  - References new `blog-post-list` pattern

**Supporting Pattern:**
- **blog-post-list** - Reusable single-column blog post query loop
  - Can be used independently in page/post content
  - Fully customizable query parameters
  - Responsive design with proper spacing
  - Insertable pattern (appears in block inserter)

**Layout Enhancements:**
- Enhanced layout flexibility to match Ollie theme capabilities
- Expanded post layout options from 1 variant (centered) to 4 variants (centered, left sidebar, right sidebar, wide)
- Expanded page sidebar options from 1 variant (right) to 2 variants (left, right)
- Added blog index layout options: grid (existing) and list (new)

**Technical Implementation:**
- All new patterns follow Elayne design system (spacing, colors, typography)
- Template patterns marked with `Inserter: false` (not shown in block inserter)
- Proper `Template Types` metadata for automatic template picker integration
- Consistent comment section implementation across all post layouts
- Latest posts section included in all post sidebar/wide layouts
- Mobile-responsive with sidebar hidden via `elayne-hide-on-mobile` class
- Uses theme preset spacing variables and color palette

### Added - Social assets and pattern media
- Bundled SVGs for Mastodon, Instagram, LinkedIn, and Bluesky under `patterns/images/`
- Synced shared pattern assets into a new `patterns/images/` directory for consistent rendering
  - All pattern images now stored in centralized location for better maintainability
  - Ensures consistent image paths across all patterns
  - Simplifies theme distribution and updates

### Changed - Social links
- Swapped social links in header/footer patterns to Mastodon-first and removed Twitter/Facebook
  - Reflects shift toward open-source, decentralized social platforms
  - Header pattern updated: header-light-with-hamburger-menu
  - Footer patterns updated to match new social media strategy
  - Maintains professional social presence while supporting federated platforms

## [1.0.0-beta.2] - 2025-12-10

### Added - Development tooling for theme publication

**Development Infrastructure:**
- composer.json with WordPress Coding Standards (WPCS) support
- phpcs.xml configuration for code quality checks
- package.json with theme metadata
- Composer scripts: `lint`, `wpcs:scan`, `wpcs:fix`
  - `composer lint` - Run PHP linting for syntax errors
  - `composer wpcs:scan` - Scan for WordPress Coding Standards violations
  - `composer wpcs:fix` - Automatically fix WPCS violations where possible

**GitHub Actions workflow for automated theme review checks:**
- Runs WordPress theme-review-action on pull requests and pushes
- Tests accessibility-ready compliance
- Validates theme against WordPress.org requirements
- Automates quality assurance workflow
- Ensures consistent code quality before deployment

### Technical
- Added php-parallel-lint/php-parallel-lint for PHP syntax checking
- Added wp-coding-standards/wpcs v3.0.0 for WordPress coding standards
- Added phpcompatibility/phpcompatibility-wp for PHP compatibility checks
- Configured automated CI/CD for theme quality assurance
- Ensures WordPress.org compliance through automated checks

## [1.0.0-beta.1] - 2025-12-10

### Added - Initial beta release

**Core Theme Features:**
- Full Site Editing (FSE) support with WordPress 6.6+
- 15 original block patterns across 8 categories
- Custom pattern categories for organized content blocks
- theme.json for global styles and settings
- HTML templates: index, single, page, front-page, home
- Template parts: header, footer
- Block-specific styles
- Functions.php with theme setup and customizations
- RTL language support
- Translation-ready with text domain 'elayne'

**Block Patterns (15):**

*Header Patterns (1):*
- **header-light-with-hamburger-menu** - Header with hamburger navigation and social icons
  - Mobile-first responsive design
  - Integrated social media links
  - Clean, professional appearance

*Hero Patterns (2):*
- **hero-two-tone** - Split two-tone hero with dual CTA buttons and contrasting backgrounds
  - Eye-catching split-screen design
  - Dual call-to-action buttons for multiple conversion paths
  - Customizable background colors for brand alignment
- **hero-with-cta** - Centered business hero with primary CTA button and supporting description
  - Classic centered layout for professional services
  - Single focused call-to-action
  - Supporting descriptive text for context

*Call-to-Action & Contact (3):*
- **cta-newsletter** - Newsletter/lead capture CTA with headline, description, and full-width submit button
  - Optimized for email list building
  - Full-width design for maximum visibility
  - Clear value proposition
- **contact-info** - Modern contact info row with office hours, phone/email card, and address/location card
  - Three-column layout for organized information
  - Office hours, contact methods, and physical location
  - Professional card-based design
- **contact-side-by-side** - Two-column contact layout with form and contact information
  - Balanced layout for contact pages
  - Integrated contact form
  - Side-by-side information display

*Features & Services (2):*
- **feature-grid** - Three-column feature/service grid with icon circles and supporting text
  - Showcases key features or services
  - Icon-based visual hierarchy
  - Responsive grid layout
- **services-feature-cards** - Service cards with icons and descriptions
  - Professional service presentation
  - Card-based design for visual separation
  - Icon + title + description format

*Team & Testimonials (3):*
- **team-grid** - Three-column team grid with avatars, names, and job titles
  - Professional team member showcase
  - Avatar-based visual identity
  - Name and role information
- **testimonial-card** - Single testimonial card with quote and client attribution
  - Featured testimonial display
  - Client attribution and credibility
  - Quote-based design
- **client-reviews-orange** - Triple testimonial row on bold orange background with circular avatars
  - Multi-testimonial display
  - Bold brand color (customizable)
  - Circular avatar design for visual interest

*Statistics (2):*
- **stats-showcase** - Two-column section combining promotional content with statistics display (4 stat cards in 2x2 grid)
  - Data-driven credibility
  - Promotional content + statistics combination
  - 2x2 grid layout for metrics
- **stats-list** - Two-column section with promotional content and feature list (3 feature items with icons)
  - Feature highlights with supporting content
  - Icon-based visual hierarchy
  - Two-column balanced layout

*Blog/Posts (2):*
- **blog-post-columns-portrait** - Three-column blog post grid with portrait-oriented featured images
  - Portrait image format (2:3 aspect ratio)
  - Three-column responsive grid
  - Optimized for blog archives and portfolio displays
- **post-featured-two-column** - Single featured post with portrait image (2:3) and large excerpt
  - Featured post highlight
  - Portrait image + large excerpt format
  - 40/60 column split for visual balance

**Block Extensions:**

*Navigation Block Enhancements:*
- **Clickable parent items** - Parent menu items become clickable links (click text = navigate, click chevron = toggle submenu)
  - Improves user experience by making parent items functional
  - Separates navigation (text click) from submenu toggle (chevron click)
  - Maintains WordPress Interactivity API compatibility
- **Improved chevron positioning** - Better inline positioning of chevrons on mobile devices
  - Fixes mobile menu alignment issues
  - Chevrons align properly next to menu text
  - Touch-friendly spacing on mobile devices

*Post Excerpt Block Enhancements:*
- **Link excerpt to post** - Wrap entire excerpt in clickable link to post
  - Increases clickable area for better UX
  - Makes entire excerpt interactive, not just "Read more"
  - Improves accessibility and usability
- **Underline link control** - Toggle link underline styling on/off
  - Designer control over link styling
  - Clean typography options
  - Maintains accessibility while offering design flexibility

**Custom Image Sizes:**
- `elayne-portrait-small` (380×570) - 2:3 aspect ratio for portrait blog/portfolio grids
- `elayne-portrait-medium` (380×507) - 3:4 aspect ratio for medium portrait layouts
- `elayne-portrait-large` (380×475) - 4:5 aspect ratio for larger portrait displays
- `elayne-single-hero` (700×400) - 16:9-ish landscape for single post/page hero images
  - All sizes optimized for WordPress regeneration
  - Maintains consistent aspect ratios across layouts
  - Balances quality and performance

**Typography & Design:**
- Fluid typography system with responsive font scaling using clamp()
  - Automatically scales typography based on viewport
  - Maintains readability across all devices
  - No breakpoint-based media queries needed
- Open Sans variable font (weights 300-800)
  - Wide range of font weights for design flexibility
  - Single font file for better performance
  - Professional, clean typography
- Professional business-focused color palette
  - Curated color scheme for business websites
  - High contrast for accessibility
  - Customizable through Global Styles
- Custom shadow presets for visual depth
  - Multiple shadow options for elevation
  - Consistent visual hierarchy
  - Easy to apply through block settings

**Block Extensions Implementation:**
- Block extensions directory (assets/js/block-extensions/) with:
  - **navigation.js** - Enhanced navigation block controls
    - Inspector panel controls for clickable parents and chevron positioning
    - Frontend JavaScript for DOM manipulation
    - Preserves WordPress Interactivity API
  - **post-excerpt.js** - Enhanced post excerpt block controls
    - Inspector panel controls for excerpt linking and underline control
    - CSS class application
    - Accessible link wrapping
- Block extensions PHP handler (inc/block-extensions.php) for server-side rendering
  - Server-side block filtering
  - Attribute persistence
  - CSS class injection

### Technical
- Minimum WordPress version: 6.6
- Minimum PHP version: 8.0
- Tested up to WordPress 6.9
- GPL v2+ licensed
- Clean block theme architecture
- No jQuery dependencies
- Optimized for performance
  - Minimal CSS and JavaScript
  - Efficient asset loading
  - No external dependencies beyond WordPress core

---

## Version History

### [1.0.0-beta.1] - Initial Beta Release
First beta release of Elayne business block theme with 15 professional patterns, block extensions, and comprehensive design system.

---

**Note**: For detailed information about pattern usage and customization, see the theme documentation at https://imagewize.com
