[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-wordpress-wp-patterns":3,"mdc--11ewrt-key":34,"related-repo-wordpress-wp-patterns":2655,"related-org-wordpress-wp-patterns":2782},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"wp-patterns","generate WordPress block patterns","Generate technically correct, design-distinctive WordPress block patterns. Use when creating block patterns, starter page patterns, template patterns, template part patterns, or improving pattern design quality. Covers pattern registration (PHP headers, auto\u002Fmanual), block markup syntax, theme.json design tokens, categories, template types, accessibility, and i18n\u002Fescaping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"wordpress","WordPress","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwordpress.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Templates","templates",{"name":18,"slug":19,"type":13},"Block Editor","block-editor",{"name":21,"slug":22,"type":13},"Design","design",1892,"https:\u002F\u002Fgithub.com\u002FWordPress\u002Fagent-skills","2026-07-24T05:38:43.101238",null,284,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Expert-level WordPress knowledge for AI coding assistants - blocks, themes, plugins, and best practices","https:\u002F\u002Fgithub.com\u002FWordPress\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fwp-patterns","---\nname: wp-patterns\ndescription: \"Generate technically correct, design-distinctive WordPress block patterns. Use when creating block patterns, starter page patterns, template patterns, template part patterns, or improving pattern design quality. Covers pattern registration (PHP headers, auto\u002Fmanual), block markup syntax, theme.json design tokens, categories, template types, accessibility, and i18n\u002Fescaping.\"\ncompatibility: \"Targets WordPress 7.0+ (PHP 7.4.0+). Patterns use block markup (HTML comments with JSON), PHP file headers, and theme.json presets.\"\n---\n\n# WordPress Block Patterns\n\n## When to use\n\nUse this skill when creating, updating, or reviewing WordPress block patterns such as:\n\n- filesystem patterns in `patterns\u002F*.php`\n- starter page patterns for page\u002Fpost content\n- template patterns using `Template Types`\n- template part patterns for headers, footers, sidebars, or other parts\n- pattern category, keyword, inserter, block type, and template type metadata\n- pattern markup validation, escaping, i18n, accessibility, or design quality improvements\n\nGenerate production-grade patterns that are technically correct, design-distinctive, theme-compatible, and accessible. If the user is building a custom block, changing `block.json`, or adding dynamic rendering, use `wp-block-development` instead. If the user needs frontend interactivity, use `wp-interactivity-api`.\n\n## Inputs required\n\n- Repo root and target theme\u002Fplugin directory.\n- Pattern type: section, starter page, template, template part, or manually registered plugin pattern.\n- Theme\u002Fplugin slug, pattern slug, and text domain.\n- Pattern title, categories, keywords, block types, template types, and inserter visibility.\n- Target WordPress version if it differs from this repo's compatibility contract.\n- Available `theme.json` presets for colors, typography, spacing, layout, and gradients.\n- Asset paths for images\u002Ficons, including whether assets are decorative or informational.\n- Verification environment: WordPress Playground, wp-env, local WordPress, or manual Code Editor check.\n- If updating an existing pattern: current slug, current file path, and whether existing inserted content must remain compatible.\n- For child themes: child theme slug, text domain, and asset root; do not reuse the parent namespace unless explicitly intended.\n\n## Guardrails\n\nBefore writing any pattern, internalize these constraints:\n\n1. **Block markup only** — all visual design is expressed through block comment attributes and theme.json presets. No inline `\u003Cstyle>` tags, no custom CSS classes, no arbitrary HTML outside of block wrappers.\n\n2. **No JavaScript** — patterns are static block markup. For interactivity, use blocks that natively support it (Navigation, Search, Query Loop). Never inject `\u003Cscript>` tags.\n\n3. **PHP runs at `init`, not render** — pattern files execute PHP once during registration. Never use query-dependent functions (`get_posts()`, `the_title()`, `wp_get_current_user()`). Safe: `esc_html_e()`, `get_theme_file_uri()`. Read `references\u002Fpattern-registration.md` for registration-time PHP constraints.\n\n4. **Always escape** — every PHP output must use `esc_html__()`, `esc_attr__()`, or `esc_url()`. No raw `echo` of user-facing strings. Read `references\u002Fpattern-registration.md` for safe PHP output functions.\n\n5. **Always i18n** — every user-visible string must be wrapped in a translation function with the theme\u002Fplugin text domain. Use `esc_html_e()` (echo + escape + translate) or `esc_html__()` (return + escape + translate). Read `references\u002Fpattern-registration.md` for text domain and i18n examples.\n\n6. **Prefer presets over hardcoded values** — use `\"backgroundColor\":\"primary\"` not `\"style\":{\"color\":{\"background\":\"#0073aa\"}}`. Presets adapt to theme changes and style variations.\n\n7. **Valid nesting** — every opening `\u003C!-- wp:block -->` must have a matching `\u003C!-- \u002Fwp:block -->`. Nesting must be properly ordered. Self-closing blocks use `\u003C!-- wp:block \u002F-->`.\n\n8. **Use native blocks for behavior** — use Query Loop, Search, Navigation, Social Icons, or an existing form block instead of custom PHP\u002FHTML behavior. For newsletter, donation, payment, or map behavior, create a CTA\u002Fplaceholder or use an existing block\u002Fplugin; do not invent forms, iframes, scripts, or third-party processing.\n\n9. **Prefer local assets** — use theme\u002Fplugin assets with `get_theme_file_uri()` and `esc_url()`. Avoid external placeholder image URLs unless the user explicitly approves them.\n\nReference: `references\u002Fblock-markup-reference.md` for syntax, `references\u002Fanti-patterns.md` for what to avoid.\n\n## Procedure\n\n### 0) Triage and locate the pattern target\n\n1. Run triage when working in a repository:\n   - `node skills\u002Fwp-project-triage\u002Fscripts\u002Fdetect_wp_project.mjs`\n2. For block themes, locate the target theme root:\n   - `node skills\u002Fwp-block-themes\u002Fscripts\u002Fdetect_block_themes.mjs`\n3. Confirm the pattern belongs in a theme `patterns\u002F` directory or needs manual plugin registration.\n4. If multiple themes\u002Fplugins exist, scope all changes to the requested target.\n\nIf the user did not provide required inputs, infer only low-risk defaults. Ask before inventing a theme slug, text domain, asset path, custom post type, taxonomy, event date field, or theme-specific preset. If `theme.json` is missing or presets cannot be verified, use conservative core presets or ask before using theme-specific slugs.\n\n### 1) Design thinking\n\nBefore writing markup, make **5 deliberate design decisions**. This is what separates distinctive patterns from generic AI output.\n\nReference: `references\u002Fdesign-with-tokens.md` for translating decisions to block attributes.\n\n#### Decision 1: Purpose\nWhat does this pattern achieve for the end user? A hero converts visitors. A testimonial grid builds trust. A pricing table drives comparison. Let purpose drive every subsequent choice.\n\n#### Decision 2: Tone\nChoose a clear direction and map it to block attributes:\n\n| Tone | Color Strategy | Typography | Layout |\n|------|---------------|------------|--------|\n| **Bold\u002Fenergetic** | High contrast, accent backgrounds, gradients | XX-large headings, tight letter-spacing, uppercase accents | Full-width, asymmetric columns, large padding |\n| **Minimal\u002Frefined** | Base + contrast only, subtle tertiary sections | Restrained sizes, generous line-height | Constrained width, generous whitespace, centered |\n| **Editorial\u002Fmagazine** | Dark sections alternating with light | Mixed font families, varied heading scales | Asymmetric splits (66\u002F33), media-text blocks |\n| **Playful\u002Fcreative** | Multiple accent colors, bright backgrounds | Large display sizes, varied weights | Grid layouts, unexpected column ratios, rounded corners |\n| **Corporate\u002Fprofessional** | Neutral palette, primary for CTAs only | Consistent scale, body font dominant | Equal columns, structured grid, minimal decoration |\n\n#### Decision 3: Spatial Composition\nChoose your primary layout strategy:\n- **Constrained centered** — classic content width with wide breakouts\n- **Full-width sections** — alternating background bands\n- **Asymmetric split** — 60\u002F40 or 70\u002F30 columns with content + media\n- **Grid** — block-native grid or columns layouts for cards, team members, portfolio items\n- **Stacked vertical** — flex column with varied spacing for editorial feel\n\nVary spacing intentionally:\n- Tight `blockGap` (spacing|20-30) for related elements within a card\n- Standard `blockGap` (spacing|40) for flowing content\n- Generous padding (spacing|60-80) on section wrappers for breathing room\n\n#### Decision 4: Typography Hierarchy\nPlan your type scale before writing markup:\n- **Hero heading**: `fontSize:\"xx-large\"` + `fontFamily:\"heading\"` + tight `lineHeight`\n- **Section heading**: `fontSize:\"x-large\"` + `fontFamily:\"heading\"`\n- **Subtitle\u002Flead**: `fontSize:\"large\"` + `textColor:\"secondary\"` or `fontFamily:\"body\"`\n- **Body**: `fontSize:\"medium\"` or default\n- **Caption\u002Fmeta**: `fontSize:\"small\"` + `textColor:\"secondary\"`\n\nAdd at least one typographic accent:\n- Uppercase + letter-spacing for labels\n- Tight letter-spacing on display headings\n- Italic for pull quotes\n- Monospace for technical\u002Fcode content\n\n#### Decision 5: Color Strategy\nPlan section-by-section color flow:\n- **Light section**: `base` background, `contrast` text (default)\n- **Dark section**: `contrast` background, `base` text (inverted)\n- **Accent section**: `primary` or `tertiary` background\n- **Gradient section**: cover block with gradient overlay\n\nA pattern with multiple sections should vary backgrounds — don't use the same background for every section.\n\n### Pattern-specific decisions\n\n- **Starter pages**: include `Block Types: core\u002Fpost-content` unless the pattern is specifically for a template or template part.\n- **Template patterns**: set `Template Types` and use `Inserter: no` when the pattern should only be offered in template replacement flows.\n- **Query Loop patterns**: use `core\u002Fquery` with `core\u002Fpost-template`, post title\u002Fexcerpt\u002Fdate\u002Ffeatured image blocks, pagination, and `core\u002Fquery-no-results` where relevant. For archive, search, category, and author templates, prefer inherited query context instead of custom PHP. For CPT\u002Fevent queries, confirm the post type slug, taxonomy\u002Fdate assumptions, and available blocks before generating markup.\n- **Comparison, pricing, timeline, and schedule patterns**: use clear headings, list\u002Ftable or labeled-card structure, and non-color-only emphasis for featured states.\n- **Social, navigation, and search patterns**: use native blocks and verify accessible labels, link text, and search context. In 404 patterns, pair the Search block with recovery copy that explains what the user can try next.\n- **Forms, donations, payments, maps, and newsletter signups**: use an existing block\u002Fplugin\u002Fservice or a static CTA\u002Fplaceholder. Do not create raw form handling or third-party behavior inside a pattern.\n\n### High-impact visual patterns\n\nUse these composition moves when the request calls for a visually distinctive pattern:\n\n- **Oversized display type**: use a short word or title at display scale with tight line-height, uppercase or italic treatment, and enough surrounding space. Keep letter spacing at `0` unless the design specifically needs a tracked wordmark.\n- **Offset color fields**: split a cover background with a hard-stop gradient or two-tone color field, then let the type or image cross the boundary.\n- **Editorial cover image**: use a full-bleed Cover block with image, dim\u002Fduotone treatment, and left-anchored copy; place the CTA in a clearly separated lower area.\n- **Image plus quiet content**: use Media & Text for case-study or portfolio patterns where the image carries visual weight and the content side stays intentionally sparse.\n- **Header plus hero**: combine a flex header with Site Logo, Site Title, and Navigation above a full-width Cover when the pattern is a page opener or starter page.\n- **Post index as graphic layout**: for Query Loop patterns, make dates and titles part of the visual hierarchy with large title links, strong separators, and pagination.\n- **Repeated display text**: repeat a single word or short phrase in varied tones when the design is poster-like, but keep it readable and avoid repeating long content.\n- **Centered image on two-tone field**: place a single image inside a constrained group over a split-color background for a gallery, collection, or album-style pattern.\n\nThese moves should still pass the technical checklist: valid block markup, translatable\u002Fescaped strings, local or approved assets, accessible labels, no scripts, no inline `\u003Cstyle>` tags, and no custom CSS classes.\n\n### 2) Plan block structure\n\nSketch the nesting tree before writing markup. Example for a hero pattern:\n\n```\nGroup (full-width, constrained layout, dark bg, vertical padding 80)\n  Group (constrained inner, flex vertical, center align)\n    Paragraph (uppercase label, small, letter-spacing, accent color)\n    Heading (h2, xx-large, heading font, tight line-height)\n    Paragraph (lead text, large, secondary color)\n    Buttons (flex, center)\n      Button (primary bg, base text)\n      Button (outline style)\n```\n\nThis step catches nesting errors and ensures intentional hierarchy before you write a single comment tag.\n\n### 3) Write the pattern file\n\nAssemble the PHP header and block markup.\n\n**File header** (for theme auto-registration):\n```php\n\u003C?php\n\u002F**\n * Title: [Descriptive Name]\n * Slug: theme-slug\u002Fpattern-name\n * Categories: [comma-separated slugs]\n * Keywords: [search terms]\n * Viewport Width: 1400\n * Block Types: [if starter\u002Ftemplate part pattern]\n * Template Types: [if template pattern]\n *\u002F\n?>\n```\n\nReference: `references\u002Fpattern-registration.md` for all header fields and PHP rules.\nReference: `references\u002Fpattern-categories-and-types.md` for category selection and template types.\n\nFor plugin or conditional patterns, register manually on `init` with `register_block_pattern()`. Use translated `title`, `description`, and `keywords`; keep `content` static block markup; and avoid runtime queries. Register custom categories before using them with `register_block_pattern_category()` or define theme-owned categories in `theme.json`. For WordPress versions before filesystem auto-registration support, use manual registration instead of `patterns\u002F*.php` auto-discovery.\n\n**Block markup body:**\n- Follow the nesting tree from step 3\n- Use preset slugs for colors, font sizes, spacing\n- Include `esc_html_e()` for all visible text\n- Include `esc_url( get_theme_file_uri() )` for theme images\n- Use placeholder text that reflects real content (not \"Lorem ipsum\" — use realistic example text appropriate to the pattern's purpose)\n\n### 4) Design quality check\n\nReview against anti-patterns (`references\u002Fanti-patterns.md`):\n\n- [ ] **Not generic**: pattern makes at least 3 distinctive design choices\n- [ ] **Layout variety**: not defaulting to 3 equal columns or uniform symmetric layouts\n- [ ] **Color rhythm**: sections alternate or vary backgrounds — not all the same\n- [ ] **Typography contrast**: headings clearly distinct from body (size, family, or weight)\n- [ ] **Spatial intention**: padding and gaps vary by context, not uniform everywhere\n- [ ] **Meaningful content**: placeholder text reflects real use, buttons describe actions\n- [ ] **Specific structure**: comparisons, timelines, schedules, pricing, menus, and documentation cards have labels that make sense without relying on visual position alone\n- [ ] **Restrained but distinctive**: corporate\u002Fprofessional patterns still include a clear hierarchy, accent, or layout choice; playful patterns do not become a one-note palette or repeated gradient treatment\n\n### 5) Technical validation\n\n- [ ] Every `\u003C!-- wp:block -->` has matching `\u003C!-- \u002Fwp:block -->`\n- [ ] JSON in block comments is valid (no trailing commas, strings double-quoted)\n- [ ] All user-visible strings use `esc_html_e()` or `esc_html__()`\n- [ ] All URLs use `esc_url()`\n- [ ] All attribute values with translatable text use `esc_attr_e()` or `esc_attr__()`\n- [ ] Informational images have descriptive translated alt text; decorative images use empty alt text intentionally\n- [ ] Heading levels are sequential (h2 → h3 → h4, never skip)\n- [ ] Preset slugs are valid defaults or documented as theme-specific\n- [ ] `Slug` in header uses correct namespace: `theme-slug\u002Fpattern-name`\n- [ ] No inline `\u003Cstyle>`, no `\u003Cscript>`, no custom CSS classes\n- [ ] No query-dependent PHP functions\n- [ ] Button\u002Flink labels are action-specific; avoid vague labels such as \"Click Here\" or \"Read More\"\n- [ ] Updating an existing pattern preserves the `Slug` unless intentionally creating a new pattern\n\n## Verification\n\nTest the pattern in a real WordPress environment:\n\n**Using WordPress Playground (recommended):**\n```bash\nnpx @wp-playground\u002Fcli@latest server --auto-mount\n```\nMount the theme directory and verify:\n- Pattern appears in inserter under specified categories\n- Pattern inserts without block validation errors\n- Layout renders correctly at desktop and mobile widths\n- Content is editable (text, images, buttons)\n- If `templateLock` is used, locked elements resist editing\n\nFor template patterns, verify the Site Editor offers the pattern in the expected template replacement flow. If `Inserter: no` is used, confirm it is hidden from the general inserter but still available where intended.\n\n**Manual check:**\n- Paste block markup into the Code Editor view in WordPress\n- Switch to Visual Editor — blocks should parse without \"Attempt Block Recovery\" prompts\n- If recovery is needed, the markup has syntax errors\n\nRun the repo's existing lint, build, or test commands if the pattern change touches assets, generated files, or registration code.\n\nWhen updating an existing pattern, remember that inserted pattern content is copied into posts\u002Ftemplates. Changing the pattern file does not retroactively update already inserted content, and changing block names or saved markup can create recovery prompts for newly inserted content.\n\nFor PR or package review, confirm the diff is scoped to the intended pattern files, references, scripts, and eval scenarios. Do not mix unrelated repo updates into a pattern change.\n\n## Failure modes \u002F debugging\n\nStart with `references\u002Fblock-markup-reference.md`, `references\u002Fpattern-registration.md`, and `references\u002Fanti-patterns.md`.\n\nCommon failures:\n\n- **Pattern missing from inserter**: check required `Title`, `Slug`, and `Categories` headers; confirm the file is under `patterns\u002F*.php`; confirm `Inserter: no` is not hiding it.\n- **Wrong pattern shown or overwritten**: check for slug collisions and ensure the slug is namespaced as `theme-slug\u002Fpattern-name` or `plugin-slug\u002Fpattern-name`.\n- **Block recovery prompt appears**: validate block comment nesting, JSON syntax, and closing comments.\n- **Strings are not translated or escaped**: replace raw text\u002FPHP output with `esc_html_e()`, `esc_html__()`, `esc_attr_e()`, `esc_attr__()`, or `esc_url()` as appropriate.\n- **Translations do not load**: verify the text domain matches the target theme\u002Fplugin.\n- **Dynamic content is stale or unavailable**: remove query-dependent PHP (`get_posts()`, `the_title()`, `wp_get_current_user()`) and use blocks such as Query Loop instead.\n- **Query Loop output is incomplete**: check for `core\u002Fpost-template`, post title\u002Fexcerpt\u002Fdate\u002Fimage blocks, pagination when needed, and `core\u002Fquery-no-results` fallback.\n- **Archive\u002Fsearch\u002Fcategory\u002Fauthor context is wrong**: use inherited query context instead of hardcoded runtime PHP.\n- **CPT or event listings are wrong**: confirm post type slugs, taxonomy\u002Fdate fields, and plugin-provided blocks before generating the pattern.\n- **Styles do not match the theme**: confirm preset slugs exist in `theme.json`; avoid unsupported theme-specific slugs unless documented.\n- **Accessibility issues**: fix skipped heading levels, empty alt text for informational images, low-contrast preset combinations, vague button\u002Flink text, social icon labels, search labels, and color-only emphasis.\n- **Manual registration fails**: confirm the code runs on `init`, categories are registered before patterns, and pattern content remains static block markup.\n\n## Escalation\n\nStop and ask for help or consult canonical docs when:\n\n- Theme-specific preset slugs, text domains, asset paths, or pattern categories cannot be verified.\n- Color contrast, image meaning, or content hierarchy needs human design\u002Faccessibility judgment.\n- Behavior depends on a WordPress\u002FGutenberg version that is not covered by this repo's compatibility contract.\n- The request requires a custom block, dynamic rendering, or saved-block migration; route to `wp-block-development`.\n- The request requires frontend interactivity beyond native blocks; route to `wp-interactivity-api`.\n\nUse WordPress Developer Resources, the Theme Handbook, and the Block Editor Handbook for upstream behavior before inventing version-sensitive guidance.\n\n## Example Prompts\n\n### Hero Section\n> \"Create a bold hero pattern with a large heading, subtitle, and two CTA buttons. Dark background, full-width, for a creative agency theme.\"\n\nExpected: Cover or Group block with contrast bg, constrained inner, heading with xx-large + heading font, paragraph with secondary color, Buttons with primary + outline styles.\n\n### Testimonial Grid\n> \"Create a 3-column testimonial grid with avatar, quote, name, and role. Alternating card backgrounds.\"\n\nExpected: Group wrapper, block-native grid or Columns layout (3 columns, responsive), inner Group cards with varied tertiary\u002Fbase backgrounds, Image block for avatar (rounded border-radius), Paragraph for quote (italic), Heading h3 for name, Paragraph small for role.\n\n### Blog Post Listing\n> \"Create a starter page pattern for a blog index with featured post hero and 3-column grid of recent posts below.\"\n\nExpected: `Block Types: core\u002Fpost-content` header, Query Loop for featured post (perPage 1, large layout), second Query Loop for grid (perPage 3, grid layout with post-template), clear visual separation between sections.\n\n### Footer with Columns\n> \"Create a 4-column footer pattern with logo, navigation links, contact info, and social icons. Dark background.\"\n\nExpected: `Block Types: core\u002Ftemplate-part\u002Ffooter` header, Group full-width with contrast bg, Columns (4), Site Logo block, Navigation or list blocks, Paragraph blocks for contact, Social Icons block. `Inserter: no`.\n",{"data":35,"body":37},{"name":4,"description":6,"compatibility":36},"Targets WordPress 7.0+ (PHP 7.4.0+). Patterns use block markup (HTML comments with JSON), PHP file headers, and theme.json presets.",{"type":38,"children":39},"root",[40,49,56,62,110,139,145,206,212,217,494,515,521,528,583,595,601,613,625,632,637,643,648,816,822,827,880,885,918,924,929,1053,1058,1081,1087,1092,1176,1181,1187,1297,1303,1308,1399,1411,1417,1422,1434,1439,1445,1450,1460,1570,1589,1661,1669,1711,1717,1729,1859,1865,2060,2066,2071,2079,2113,2118,2154,2166,2174,2192,2197,2202,2207,2213,2236,2241,2490,2496,2501,2541,2546,2552,2558,2567,2572,2578,2586,2591,2597,2605,2617,2623,2631,2649],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"wordpress-block-patterns",[46],{"type":47,"value":48},"text","WordPress Block Patterns",{"type":41,"tag":50,"props":51,"children":53},"h2",{"id":52},"when-to-use",[54],{"type":47,"value":55},"When to use",{"type":41,"tag":57,"props":58,"children":59},"p",{},[60],{"type":47,"value":61},"Use this skill when creating, updating, or reviewing WordPress block patterns such as:",{"type":41,"tag":63,"props":64,"children":65},"ul",{},[66,79,84,95,100,105],{"type":41,"tag":67,"props":68,"children":69},"li",{},[70,72],{"type":47,"value":71},"filesystem patterns in ",{"type":41,"tag":73,"props":74,"children":76},"code",{"className":75},[],[77],{"type":47,"value":78},"patterns\u002F*.php",{"type":41,"tag":67,"props":80,"children":81},{},[82],{"type":47,"value":83},"starter page patterns for page\u002Fpost content",{"type":41,"tag":67,"props":85,"children":86},{},[87,89],{"type":47,"value":88},"template patterns using ",{"type":41,"tag":73,"props":90,"children":92},{"className":91},[],[93],{"type":47,"value":94},"Template Types",{"type":41,"tag":67,"props":96,"children":97},{},[98],{"type":47,"value":99},"template part patterns for headers, footers, sidebars, or other parts",{"type":41,"tag":67,"props":101,"children":102},{},[103],{"type":47,"value":104},"pattern category, keyword, inserter, block type, and template type metadata",{"type":41,"tag":67,"props":106,"children":107},{},[108],{"type":47,"value":109},"pattern markup validation, escaping, i18n, accessibility, or design quality improvements",{"type":41,"tag":57,"props":111,"children":112},{},[113,115,121,123,129,131,137],{"type":47,"value":114},"Generate production-grade patterns that are technically correct, design-distinctive, theme-compatible, and accessible. If the user is building a custom block, changing ",{"type":41,"tag":73,"props":116,"children":118},{"className":117},[],[119],{"type":47,"value":120},"block.json",{"type":47,"value":122},", or adding dynamic rendering, use ",{"type":41,"tag":73,"props":124,"children":126},{"className":125},[],[127],{"type":47,"value":128},"wp-block-development",{"type":47,"value":130}," instead. If the user needs frontend interactivity, use ",{"type":41,"tag":73,"props":132,"children":134},{"className":133},[],[135],{"type":47,"value":136},"wp-interactivity-api",{"type":47,"value":138},".",{"type":41,"tag":50,"props":140,"children":142},{"id":141},"inputs-required",[143],{"type":47,"value":144},"Inputs required",{"type":41,"tag":63,"props":146,"children":147},{},[148,153,158,163,168,173,186,191,196,201],{"type":41,"tag":67,"props":149,"children":150},{},[151],{"type":47,"value":152},"Repo root and target theme\u002Fplugin directory.",{"type":41,"tag":67,"props":154,"children":155},{},[156],{"type":47,"value":157},"Pattern type: section, starter page, template, template part, or manually registered plugin pattern.",{"type":41,"tag":67,"props":159,"children":160},{},[161],{"type":47,"value":162},"Theme\u002Fplugin slug, pattern slug, and text domain.",{"type":41,"tag":67,"props":164,"children":165},{},[166],{"type":47,"value":167},"Pattern title, categories, keywords, block types, template types, and inserter visibility.",{"type":41,"tag":67,"props":169,"children":170},{},[171],{"type":47,"value":172},"Target WordPress version if it differs from this repo's compatibility contract.",{"type":41,"tag":67,"props":174,"children":175},{},[176,178,184],{"type":47,"value":177},"Available ",{"type":41,"tag":73,"props":179,"children":181},{"className":180},[],[182],{"type":47,"value":183},"theme.json",{"type":47,"value":185}," presets for colors, typography, spacing, layout, and gradients.",{"type":41,"tag":67,"props":187,"children":188},{},[189],{"type":47,"value":190},"Asset paths for images\u002Ficons, including whether assets are decorative or informational.",{"type":41,"tag":67,"props":192,"children":193},{},[194],{"type":47,"value":195},"Verification environment: WordPress Playground, wp-env, local WordPress, or manual Code Editor check.",{"type":41,"tag":67,"props":197,"children":198},{},[199],{"type":47,"value":200},"If updating an existing pattern: current slug, current file path, and whether existing inserted content must remain compatible.",{"type":41,"tag":67,"props":202,"children":203},{},[204],{"type":47,"value":205},"For child themes: child theme slug, text domain, and asset root; do not reuse the parent namespace unless explicitly intended.",{"type":41,"tag":50,"props":207,"children":209},{"id":208},"guardrails",[210],{"type":47,"value":211},"Guardrails",{"type":41,"tag":57,"props":213,"children":214},{},[215],{"type":47,"value":216},"Before writing any pattern, internalize these constraints:",{"type":41,"tag":218,"props":219,"children":220},"ol",{},[221,240,258,322,370,401,427,460,470],{"type":41,"tag":67,"props":222,"children":223},{},[224,230,232,238],{"type":41,"tag":225,"props":226,"children":227},"strong",{},[228],{"type":47,"value":229},"Block markup only",{"type":47,"value":231}," — all visual design is expressed through block comment attributes and theme.json presets. No inline ",{"type":41,"tag":73,"props":233,"children":235},{"className":234},[],[236],{"type":47,"value":237},"\u003Cstyle>",{"type":47,"value":239}," tags, no custom CSS classes, no arbitrary HTML outside of block wrappers.",{"type":41,"tag":67,"props":241,"children":242},{},[243,248,250,256],{"type":41,"tag":225,"props":244,"children":245},{},[246],{"type":47,"value":247},"No JavaScript",{"type":47,"value":249}," — patterns are static block markup. For interactivity, use blocks that natively support it (Navigation, Search, Query Loop). Never inject ",{"type":41,"tag":73,"props":251,"children":253},{"className":252},[],[254],{"type":47,"value":255},"\u003Cscript>",{"type":47,"value":257}," tags.",{"type":41,"tag":67,"props":259,"children":260},{},[261,274,276,282,284,290,291,297,299,305,306,312,314,320],{"type":41,"tag":225,"props":262,"children":263},{},[264,266,272],{"type":47,"value":265},"PHP runs at ",{"type":41,"tag":73,"props":267,"children":269},{"className":268},[],[270],{"type":47,"value":271},"init",{"type":47,"value":273},", not render",{"type":47,"value":275}," — pattern files execute PHP once during registration. Never use query-dependent functions (",{"type":41,"tag":73,"props":277,"children":279},{"className":278},[],[280],{"type":47,"value":281},"get_posts()",{"type":47,"value":283},", ",{"type":41,"tag":73,"props":285,"children":287},{"className":286},[],[288],{"type":47,"value":289},"the_title()",{"type":47,"value":283},{"type":41,"tag":73,"props":292,"children":294},{"className":293},[],[295],{"type":47,"value":296},"wp_get_current_user()",{"type":47,"value":298},"). Safe: ",{"type":41,"tag":73,"props":300,"children":302},{"className":301},[],[303],{"type":47,"value":304},"esc_html_e()",{"type":47,"value":283},{"type":41,"tag":73,"props":307,"children":309},{"className":308},[],[310],{"type":47,"value":311},"get_theme_file_uri()",{"type":47,"value":313},". Read ",{"type":41,"tag":73,"props":315,"children":317},{"className":316},[],[318],{"type":47,"value":319},"references\u002Fpattern-registration.md",{"type":47,"value":321}," for registration-time PHP constraints.",{"type":41,"tag":67,"props":323,"children":324},{},[325,330,332,338,339,345,347,353,355,361,363,368],{"type":41,"tag":225,"props":326,"children":327},{},[328],{"type":47,"value":329},"Always escape",{"type":47,"value":331}," — every PHP output must use ",{"type":41,"tag":73,"props":333,"children":335},{"className":334},[],[336],{"type":47,"value":337},"esc_html__()",{"type":47,"value":283},{"type":41,"tag":73,"props":340,"children":342},{"className":341},[],[343],{"type":47,"value":344},"esc_attr__()",{"type":47,"value":346},", or ",{"type":41,"tag":73,"props":348,"children":350},{"className":349},[],[351],{"type":47,"value":352},"esc_url()",{"type":47,"value":354},". No raw ",{"type":41,"tag":73,"props":356,"children":358},{"className":357},[],[359],{"type":47,"value":360},"echo",{"type":47,"value":362}," of user-facing strings. Read ",{"type":41,"tag":73,"props":364,"children":366},{"className":365},[],[367],{"type":47,"value":319},{"type":47,"value":369}," for safe PHP output functions.",{"type":41,"tag":67,"props":371,"children":372},{},[373,378,380,385,387,392,394,399],{"type":41,"tag":225,"props":374,"children":375},{},[376],{"type":47,"value":377},"Always i18n",{"type":47,"value":379}," — every user-visible string must be wrapped in a translation function with the theme\u002Fplugin text domain. Use ",{"type":41,"tag":73,"props":381,"children":383},{"className":382},[],[384],{"type":47,"value":304},{"type":47,"value":386}," (echo + escape + translate) or ",{"type":41,"tag":73,"props":388,"children":390},{"className":389},[],[391],{"type":47,"value":337},{"type":47,"value":393}," (return + escape + translate). Read ",{"type":41,"tag":73,"props":395,"children":397},{"className":396},[],[398],{"type":47,"value":319},{"type":47,"value":400}," for text domain and i18n examples.",{"type":41,"tag":67,"props":402,"children":403},{},[404,409,411,417,419,425],{"type":41,"tag":225,"props":405,"children":406},{},[407],{"type":47,"value":408},"Prefer presets over hardcoded values",{"type":47,"value":410}," — use ",{"type":41,"tag":73,"props":412,"children":414},{"className":413},[],[415],{"type":47,"value":416},"\"backgroundColor\":\"primary\"",{"type":47,"value":418}," not ",{"type":41,"tag":73,"props":420,"children":422},{"className":421},[],[423],{"type":47,"value":424},"\"style\":{\"color\":{\"background\":\"#0073aa\"}}",{"type":47,"value":426},". Presets adapt to theme changes and style variations.",{"type":41,"tag":67,"props":428,"children":429},{},[430,435,437,443,445,451,453,459],{"type":41,"tag":225,"props":431,"children":432},{},[433],{"type":47,"value":434},"Valid nesting",{"type":47,"value":436}," — every opening ",{"type":41,"tag":73,"props":438,"children":440},{"className":439},[],[441],{"type":47,"value":442},"\u003C!-- wp:block -->",{"type":47,"value":444}," must have a matching ",{"type":41,"tag":73,"props":446,"children":448},{"className":447},[],[449],{"type":47,"value":450},"\u003C!-- \u002Fwp:block -->",{"type":47,"value":452},". Nesting must be properly ordered. Self-closing blocks use ",{"type":41,"tag":73,"props":454,"children":456},{"className":455},[],[457],{"type":47,"value":458},"\u003C!-- wp:block \u002F-->",{"type":47,"value":138},{"type":41,"tag":67,"props":461,"children":462},{},[463,468],{"type":41,"tag":225,"props":464,"children":465},{},[466],{"type":47,"value":467},"Use native blocks for behavior",{"type":47,"value":469}," — use Query Loop, Search, Navigation, Social Icons, or an existing form block instead of custom PHP\u002FHTML behavior. For newsletter, donation, payment, or map behavior, create a CTA\u002Fplaceholder or use an existing block\u002Fplugin; do not invent forms, iframes, scripts, or third-party processing.",{"type":41,"tag":67,"props":471,"children":472},{},[473,478,480,485,487,492],{"type":41,"tag":225,"props":474,"children":475},{},[476],{"type":47,"value":477},"Prefer local assets",{"type":47,"value":479}," — use theme\u002Fplugin assets with ",{"type":41,"tag":73,"props":481,"children":483},{"className":482},[],[484],{"type":47,"value":311},{"type":47,"value":486}," and ",{"type":41,"tag":73,"props":488,"children":490},{"className":489},[],[491],{"type":47,"value":352},{"type":47,"value":493},". Avoid external placeholder image URLs unless the user explicitly approves them.",{"type":41,"tag":57,"props":495,"children":496},{},[497,499,505,507,513],{"type":47,"value":498},"Reference: ",{"type":41,"tag":73,"props":500,"children":502},{"className":501},[],[503],{"type":47,"value":504},"references\u002Fblock-markup-reference.md",{"type":47,"value":506}," for syntax, ",{"type":41,"tag":73,"props":508,"children":510},{"className":509},[],[511],{"type":47,"value":512},"references\u002Fanti-patterns.md",{"type":47,"value":514}," for what to avoid.",{"type":41,"tag":50,"props":516,"children":518},{"id":517},"procedure",[519],{"type":47,"value":520},"Procedure",{"type":41,"tag":522,"props":523,"children":525},"h3",{"id":524},"_0-triage-and-locate-the-pattern-target",[526],{"type":47,"value":527},"0) Triage and locate the pattern target",{"type":41,"tag":218,"props":529,"children":530},{},[531,548,565,578],{"type":41,"tag":67,"props":532,"children":533},{},[534,536],{"type":47,"value":535},"Run triage when working in a repository:\n",{"type":41,"tag":63,"props":537,"children":538},{},[539],{"type":41,"tag":67,"props":540,"children":541},{},[542],{"type":41,"tag":73,"props":543,"children":545},{"className":544},[],[546],{"type":47,"value":547},"node skills\u002Fwp-project-triage\u002Fscripts\u002Fdetect_wp_project.mjs",{"type":41,"tag":67,"props":549,"children":550},{},[551,553],{"type":47,"value":552},"For block themes, locate the target theme root:\n",{"type":41,"tag":63,"props":554,"children":555},{},[556],{"type":41,"tag":67,"props":557,"children":558},{},[559],{"type":41,"tag":73,"props":560,"children":562},{"className":561},[],[563],{"type":47,"value":564},"node skills\u002Fwp-block-themes\u002Fscripts\u002Fdetect_block_themes.mjs",{"type":41,"tag":67,"props":566,"children":567},{},[568,570,576],{"type":47,"value":569},"Confirm the pattern belongs in a theme ",{"type":41,"tag":73,"props":571,"children":573},{"className":572},[],[574],{"type":47,"value":575},"patterns\u002F",{"type":47,"value":577}," directory or needs manual plugin registration.",{"type":41,"tag":67,"props":579,"children":580},{},[581],{"type":47,"value":582},"If multiple themes\u002Fplugins exist, scope all changes to the requested target.",{"type":41,"tag":57,"props":584,"children":585},{},[586,588,593],{"type":47,"value":587},"If the user did not provide required inputs, infer only low-risk defaults. Ask before inventing a theme slug, text domain, asset path, custom post type, taxonomy, event date field, or theme-specific preset. If ",{"type":41,"tag":73,"props":589,"children":591},{"className":590},[],[592],{"type":47,"value":183},{"type":47,"value":594}," is missing or presets cannot be verified, use conservative core presets or ask before using theme-specific slugs.",{"type":41,"tag":522,"props":596,"children":598},{"id":597},"_1-design-thinking",[599],{"type":47,"value":600},"1) Design thinking",{"type":41,"tag":57,"props":602,"children":603},{},[604,606,611],{"type":47,"value":605},"Before writing markup, make ",{"type":41,"tag":225,"props":607,"children":608},{},[609],{"type":47,"value":610},"5 deliberate design decisions",{"type":47,"value":612},". This is what separates distinctive patterns from generic AI output.",{"type":41,"tag":57,"props":614,"children":615},{},[616,617,623],{"type":47,"value":498},{"type":41,"tag":73,"props":618,"children":620},{"className":619},[],[621],{"type":47,"value":622},"references\u002Fdesign-with-tokens.md",{"type":47,"value":624}," for translating decisions to block attributes.",{"type":41,"tag":626,"props":627,"children":629},"h4",{"id":628},"decision-1-purpose",[630],{"type":47,"value":631},"Decision 1: Purpose",{"type":41,"tag":57,"props":633,"children":634},{},[635],{"type":47,"value":636},"What does this pattern achieve for the end user? A hero converts visitors. A testimonial grid builds trust. A pricing table drives comparison. Let purpose drive every subsequent choice.",{"type":41,"tag":626,"props":638,"children":640},{"id":639},"decision-2-tone",[641],{"type":47,"value":642},"Decision 2: Tone",{"type":41,"tag":57,"props":644,"children":645},{},[646],{"type":47,"value":647},"Choose a clear direction and map it to block attributes:",{"type":41,"tag":649,"props":650,"children":651},"table",{},[652,681],{"type":41,"tag":653,"props":654,"children":655},"thead",{},[656],{"type":41,"tag":657,"props":658,"children":659},"tr",{},[660,666,671,676],{"type":41,"tag":661,"props":662,"children":663},"th",{},[664],{"type":47,"value":665},"Tone",{"type":41,"tag":661,"props":667,"children":668},{},[669],{"type":47,"value":670},"Color Strategy",{"type":41,"tag":661,"props":672,"children":673},{},[674],{"type":47,"value":675},"Typography",{"type":41,"tag":661,"props":677,"children":678},{},[679],{"type":47,"value":680},"Layout",{"type":41,"tag":682,"props":683,"children":684},"tbody",{},[685,712,738,764,790],{"type":41,"tag":657,"props":686,"children":687},{},[688,697,702,707],{"type":41,"tag":689,"props":690,"children":691},"td",{},[692],{"type":41,"tag":225,"props":693,"children":694},{},[695],{"type":47,"value":696},"Bold\u002Fenergetic",{"type":41,"tag":689,"props":698,"children":699},{},[700],{"type":47,"value":701},"High contrast, accent backgrounds, gradients",{"type":41,"tag":689,"props":703,"children":704},{},[705],{"type":47,"value":706},"XX-large headings, tight letter-spacing, uppercase accents",{"type":41,"tag":689,"props":708,"children":709},{},[710],{"type":47,"value":711},"Full-width, asymmetric columns, large padding",{"type":41,"tag":657,"props":713,"children":714},{},[715,723,728,733],{"type":41,"tag":689,"props":716,"children":717},{},[718],{"type":41,"tag":225,"props":719,"children":720},{},[721],{"type":47,"value":722},"Minimal\u002Frefined",{"type":41,"tag":689,"props":724,"children":725},{},[726],{"type":47,"value":727},"Base + contrast only, subtle tertiary sections",{"type":41,"tag":689,"props":729,"children":730},{},[731],{"type":47,"value":732},"Restrained sizes, generous line-height",{"type":41,"tag":689,"props":734,"children":735},{},[736],{"type":47,"value":737},"Constrained width, generous whitespace, centered",{"type":41,"tag":657,"props":739,"children":740},{},[741,749,754,759],{"type":41,"tag":689,"props":742,"children":743},{},[744],{"type":41,"tag":225,"props":745,"children":746},{},[747],{"type":47,"value":748},"Editorial\u002Fmagazine",{"type":41,"tag":689,"props":750,"children":751},{},[752],{"type":47,"value":753},"Dark sections alternating with light",{"type":41,"tag":689,"props":755,"children":756},{},[757],{"type":47,"value":758},"Mixed font families, varied heading scales",{"type":41,"tag":689,"props":760,"children":761},{},[762],{"type":47,"value":763},"Asymmetric splits (66\u002F33), media-text blocks",{"type":41,"tag":657,"props":765,"children":766},{},[767,775,780,785],{"type":41,"tag":689,"props":768,"children":769},{},[770],{"type":41,"tag":225,"props":771,"children":772},{},[773],{"type":47,"value":774},"Playful\u002Fcreative",{"type":41,"tag":689,"props":776,"children":777},{},[778],{"type":47,"value":779},"Multiple accent colors, bright backgrounds",{"type":41,"tag":689,"props":781,"children":782},{},[783],{"type":47,"value":784},"Large display sizes, varied weights",{"type":41,"tag":689,"props":786,"children":787},{},[788],{"type":47,"value":789},"Grid layouts, unexpected column ratios, rounded corners",{"type":41,"tag":657,"props":791,"children":792},{},[793,801,806,811],{"type":41,"tag":689,"props":794,"children":795},{},[796],{"type":41,"tag":225,"props":797,"children":798},{},[799],{"type":47,"value":800},"Corporate\u002Fprofessional",{"type":41,"tag":689,"props":802,"children":803},{},[804],{"type":47,"value":805},"Neutral palette, primary for CTAs only",{"type":41,"tag":689,"props":807,"children":808},{},[809],{"type":47,"value":810},"Consistent scale, body font dominant",{"type":41,"tag":689,"props":812,"children":813},{},[814],{"type":47,"value":815},"Equal columns, structured grid, minimal decoration",{"type":41,"tag":626,"props":817,"children":819},{"id":818},"decision-3-spatial-composition",[820],{"type":47,"value":821},"Decision 3: Spatial Composition",{"type":41,"tag":57,"props":823,"children":824},{},[825],{"type":47,"value":826},"Choose your primary layout strategy:",{"type":41,"tag":63,"props":828,"children":829},{},[830,840,850,860,870],{"type":41,"tag":67,"props":831,"children":832},{},[833,838],{"type":41,"tag":225,"props":834,"children":835},{},[836],{"type":47,"value":837},"Constrained centered",{"type":47,"value":839}," — classic content width with wide breakouts",{"type":41,"tag":67,"props":841,"children":842},{},[843,848],{"type":41,"tag":225,"props":844,"children":845},{},[846],{"type":47,"value":847},"Full-width sections",{"type":47,"value":849}," — alternating background bands",{"type":41,"tag":67,"props":851,"children":852},{},[853,858],{"type":41,"tag":225,"props":854,"children":855},{},[856],{"type":47,"value":857},"Asymmetric split",{"type":47,"value":859}," — 60\u002F40 or 70\u002F30 columns with content + media",{"type":41,"tag":67,"props":861,"children":862},{},[863,868],{"type":41,"tag":225,"props":864,"children":865},{},[866],{"type":47,"value":867},"Grid",{"type":47,"value":869}," — block-native grid or columns layouts for cards, team members, portfolio items",{"type":41,"tag":67,"props":871,"children":872},{},[873,878],{"type":41,"tag":225,"props":874,"children":875},{},[876],{"type":47,"value":877},"Stacked vertical",{"type":47,"value":879}," — flex column with varied spacing for editorial feel",{"type":41,"tag":57,"props":881,"children":882},{},[883],{"type":47,"value":884},"Vary spacing intentionally:",{"type":41,"tag":63,"props":886,"children":887},{},[888,901,913],{"type":41,"tag":67,"props":889,"children":890},{},[891,893,899],{"type":47,"value":892},"Tight ",{"type":41,"tag":73,"props":894,"children":896},{"className":895},[],[897],{"type":47,"value":898},"blockGap",{"type":47,"value":900}," (spacing|20-30) for related elements within a card",{"type":41,"tag":67,"props":902,"children":903},{},[904,906,911],{"type":47,"value":905},"Standard ",{"type":41,"tag":73,"props":907,"children":909},{"className":908},[],[910],{"type":47,"value":898},{"type":47,"value":912}," (spacing|40) for flowing content",{"type":41,"tag":67,"props":914,"children":915},{},[916],{"type":47,"value":917},"Generous padding (spacing|60-80) on section wrappers for breathing room",{"type":41,"tag":626,"props":919,"children":921},{"id":920},"decision-4-typography-hierarchy",[922],{"type":47,"value":923},"Decision 4: Typography Hierarchy",{"type":41,"tag":57,"props":925,"children":926},{},[927],{"type":47,"value":928},"Plan your type scale before writing markup:",{"type":41,"tag":63,"props":930,"children":931},{},[932,964,985,1015,1032],{"type":41,"tag":67,"props":933,"children":934},{},[935,940,942,948,950,956,958],{"type":41,"tag":225,"props":936,"children":937},{},[938],{"type":47,"value":939},"Hero heading",{"type":47,"value":941},": ",{"type":41,"tag":73,"props":943,"children":945},{"className":944},[],[946],{"type":47,"value":947},"fontSize:\"xx-large\"",{"type":47,"value":949}," + ",{"type":41,"tag":73,"props":951,"children":953},{"className":952},[],[954],{"type":47,"value":955},"fontFamily:\"heading\"",{"type":47,"value":957}," + tight ",{"type":41,"tag":73,"props":959,"children":961},{"className":960},[],[962],{"type":47,"value":963},"lineHeight",{"type":41,"tag":67,"props":965,"children":966},{},[967,972,973,979,980],{"type":41,"tag":225,"props":968,"children":969},{},[970],{"type":47,"value":971},"Section heading",{"type":47,"value":941},{"type":41,"tag":73,"props":974,"children":976},{"className":975},[],[977],{"type":47,"value":978},"fontSize:\"x-large\"",{"type":47,"value":949},{"type":41,"tag":73,"props":981,"children":983},{"className":982},[],[984],{"type":47,"value":955},{"type":41,"tag":67,"props":986,"children":987},{},[988,993,994,1000,1001,1007,1009],{"type":41,"tag":225,"props":989,"children":990},{},[991],{"type":47,"value":992},"Subtitle\u002Flead",{"type":47,"value":941},{"type":41,"tag":73,"props":995,"children":997},{"className":996},[],[998],{"type":47,"value":999},"fontSize:\"large\"",{"type":47,"value":949},{"type":41,"tag":73,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":47,"value":1006},"textColor:\"secondary\"",{"type":47,"value":1008}," or ",{"type":41,"tag":73,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":47,"value":1014},"fontFamily:\"body\"",{"type":41,"tag":67,"props":1016,"children":1017},{},[1018,1023,1024,1030],{"type":41,"tag":225,"props":1019,"children":1020},{},[1021],{"type":47,"value":1022},"Body",{"type":47,"value":941},{"type":41,"tag":73,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":47,"value":1029},"fontSize:\"medium\"",{"type":47,"value":1031}," or default",{"type":41,"tag":67,"props":1033,"children":1034},{},[1035,1040,1041,1047,1048],{"type":41,"tag":225,"props":1036,"children":1037},{},[1038],{"type":47,"value":1039},"Caption\u002Fmeta",{"type":47,"value":941},{"type":41,"tag":73,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":47,"value":1046},"fontSize:\"small\"",{"type":47,"value":949},{"type":41,"tag":73,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":47,"value":1006},{"type":41,"tag":57,"props":1054,"children":1055},{},[1056],{"type":47,"value":1057},"Add at least one typographic accent:",{"type":41,"tag":63,"props":1059,"children":1060},{},[1061,1066,1071,1076],{"type":41,"tag":67,"props":1062,"children":1063},{},[1064],{"type":47,"value":1065},"Uppercase + letter-spacing for labels",{"type":41,"tag":67,"props":1067,"children":1068},{},[1069],{"type":47,"value":1070},"Tight letter-spacing on display headings",{"type":41,"tag":67,"props":1072,"children":1073},{},[1074],{"type":47,"value":1075},"Italic for pull quotes",{"type":41,"tag":67,"props":1077,"children":1078},{},[1079],{"type":47,"value":1080},"Monospace for technical\u002Fcode content",{"type":41,"tag":626,"props":1082,"children":1084},{"id":1083},"decision-5-color-strategy",[1085],{"type":47,"value":1086},"Decision 5: Color Strategy",{"type":41,"tag":57,"props":1088,"children":1089},{},[1090],{"type":47,"value":1091},"Plan section-by-section color flow:",{"type":41,"tag":63,"props":1093,"children":1094},{},[1095,1120,1142,1166],{"type":41,"tag":67,"props":1096,"children":1097},{},[1098,1103,1104,1110,1112,1118],{"type":41,"tag":225,"props":1099,"children":1100},{},[1101],{"type":47,"value":1102},"Light section",{"type":47,"value":941},{"type":41,"tag":73,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":47,"value":1109},"base",{"type":47,"value":1111}," background, ",{"type":41,"tag":73,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":47,"value":1117},"contrast",{"type":47,"value":1119}," text (default)",{"type":41,"tag":67,"props":1121,"children":1122},{},[1123,1128,1129,1134,1135,1140],{"type":41,"tag":225,"props":1124,"children":1125},{},[1126],{"type":47,"value":1127},"Dark section",{"type":47,"value":941},{"type":41,"tag":73,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":47,"value":1117},{"type":47,"value":1111},{"type":41,"tag":73,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":47,"value":1109},{"type":47,"value":1141}," text (inverted)",{"type":41,"tag":67,"props":1143,"children":1144},{},[1145,1150,1151,1157,1158,1164],{"type":41,"tag":225,"props":1146,"children":1147},{},[1148],{"type":47,"value":1149},"Accent section",{"type":47,"value":941},{"type":41,"tag":73,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":47,"value":1156},"primary",{"type":47,"value":1008},{"type":41,"tag":73,"props":1159,"children":1161},{"className":1160},[],[1162],{"type":47,"value":1163},"tertiary",{"type":47,"value":1165}," background",{"type":41,"tag":67,"props":1167,"children":1168},{},[1169,1174],{"type":41,"tag":225,"props":1170,"children":1171},{},[1172],{"type":47,"value":1173},"Gradient section",{"type":47,"value":1175},": cover block with gradient overlay",{"type":41,"tag":57,"props":1177,"children":1178},{},[1179],{"type":47,"value":1180},"A pattern with multiple sections should vary backgrounds — don't use the same background for every section.",{"type":41,"tag":522,"props":1182,"children":1184},{"id":1183},"pattern-specific-decisions",[1185],{"type":47,"value":1186},"Pattern-specific decisions",{"type":41,"tag":63,"props":1188,"children":1189},{},[1190,1208,1233,1267,1277,1287],{"type":41,"tag":67,"props":1191,"children":1192},{},[1193,1198,1200,1206],{"type":41,"tag":225,"props":1194,"children":1195},{},[1196],{"type":47,"value":1197},"Starter pages",{"type":47,"value":1199},": include ",{"type":41,"tag":73,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":47,"value":1205},"Block Types: core\u002Fpost-content",{"type":47,"value":1207}," unless the pattern is specifically for a template or template part.",{"type":41,"tag":67,"props":1209,"children":1210},{},[1211,1216,1218,1223,1225,1231],{"type":41,"tag":225,"props":1212,"children":1213},{},[1214],{"type":47,"value":1215},"Template patterns",{"type":47,"value":1217},": set ",{"type":41,"tag":73,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":47,"value":94},{"type":47,"value":1224}," and use ",{"type":41,"tag":73,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":47,"value":1230},"Inserter: no",{"type":47,"value":1232}," when the pattern should only be offered in template replacement flows.",{"type":41,"tag":67,"props":1234,"children":1235},{},[1236,1241,1243,1249,1251,1257,1259,1265],{"type":41,"tag":225,"props":1237,"children":1238},{},[1239],{"type":47,"value":1240},"Query Loop patterns",{"type":47,"value":1242},": use ",{"type":41,"tag":73,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":47,"value":1248},"core\u002Fquery",{"type":47,"value":1250}," with ",{"type":41,"tag":73,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":47,"value":1256},"core\u002Fpost-template",{"type":47,"value":1258},", post title\u002Fexcerpt\u002Fdate\u002Ffeatured image blocks, pagination, and ",{"type":41,"tag":73,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":47,"value":1264},"core\u002Fquery-no-results",{"type":47,"value":1266}," where relevant. For archive, search, category, and author templates, prefer inherited query context instead of custom PHP. For CPT\u002Fevent queries, confirm the post type slug, taxonomy\u002Fdate assumptions, and available blocks before generating markup.",{"type":41,"tag":67,"props":1268,"children":1269},{},[1270,1275],{"type":41,"tag":225,"props":1271,"children":1272},{},[1273],{"type":47,"value":1274},"Comparison, pricing, timeline, and schedule patterns",{"type":47,"value":1276},": use clear headings, list\u002Ftable or labeled-card structure, and non-color-only emphasis for featured states.",{"type":41,"tag":67,"props":1278,"children":1279},{},[1280,1285],{"type":41,"tag":225,"props":1281,"children":1282},{},[1283],{"type":47,"value":1284},"Social, navigation, and search patterns",{"type":47,"value":1286},": use native blocks and verify accessible labels, link text, and search context. In 404 patterns, pair the Search block with recovery copy that explains what the user can try next.",{"type":41,"tag":67,"props":1288,"children":1289},{},[1290,1295],{"type":41,"tag":225,"props":1291,"children":1292},{},[1293],{"type":47,"value":1294},"Forms, donations, payments, maps, and newsletter signups",{"type":47,"value":1296},": use an existing block\u002Fplugin\u002Fservice or a static CTA\u002Fplaceholder. Do not create raw form handling or third-party behavior inside a pattern.",{"type":41,"tag":522,"props":1298,"children":1300},{"id":1299},"high-impact-visual-patterns",[1301],{"type":47,"value":1302},"High-impact visual patterns",{"type":41,"tag":57,"props":1304,"children":1305},{},[1306],{"type":47,"value":1307},"Use these composition moves when the request calls for a visually distinctive pattern:",{"type":41,"tag":63,"props":1309,"children":1310},{},[1311,1329,1339,1349,1359,1369,1379,1389],{"type":41,"tag":67,"props":1312,"children":1313},{},[1314,1319,1321,1327],{"type":41,"tag":225,"props":1315,"children":1316},{},[1317],{"type":47,"value":1318},"Oversized display type",{"type":47,"value":1320},": use a short word or title at display scale with tight line-height, uppercase or italic treatment, and enough surrounding space. Keep letter spacing at ",{"type":41,"tag":73,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":47,"value":1326},"0",{"type":47,"value":1328}," unless the design specifically needs a tracked wordmark.",{"type":41,"tag":67,"props":1330,"children":1331},{},[1332,1337],{"type":41,"tag":225,"props":1333,"children":1334},{},[1335],{"type":47,"value":1336},"Offset color fields",{"type":47,"value":1338},": split a cover background with a hard-stop gradient or two-tone color field, then let the type or image cross the boundary.",{"type":41,"tag":67,"props":1340,"children":1341},{},[1342,1347],{"type":41,"tag":225,"props":1343,"children":1344},{},[1345],{"type":47,"value":1346},"Editorial cover image",{"type":47,"value":1348},": use a full-bleed Cover block with image, dim\u002Fduotone treatment, and left-anchored copy; place the CTA in a clearly separated lower area.",{"type":41,"tag":67,"props":1350,"children":1351},{},[1352,1357],{"type":41,"tag":225,"props":1353,"children":1354},{},[1355],{"type":47,"value":1356},"Image plus quiet content",{"type":47,"value":1358},": use Media & Text for case-study or portfolio patterns where the image carries visual weight and the content side stays intentionally sparse.",{"type":41,"tag":67,"props":1360,"children":1361},{},[1362,1367],{"type":41,"tag":225,"props":1363,"children":1364},{},[1365],{"type":47,"value":1366},"Header plus hero",{"type":47,"value":1368},": combine a flex header with Site Logo, Site Title, and Navigation above a full-width Cover when the pattern is a page opener or starter page.",{"type":41,"tag":67,"props":1370,"children":1371},{},[1372,1377],{"type":41,"tag":225,"props":1373,"children":1374},{},[1375],{"type":47,"value":1376},"Post index as graphic layout",{"type":47,"value":1378},": for Query Loop patterns, make dates and titles part of the visual hierarchy with large title links, strong separators, and pagination.",{"type":41,"tag":67,"props":1380,"children":1381},{},[1382,1387],{"type":41,"tag":225,"props":1383,"children":1384},{},[1385],{"type":47,"value":1386},"Repeated display text",{"type":47,"value":1388},": repeat a single word or short phrase in varied tones when the design is poster-like, but keep it readable and avoid repeating long content.",{"type":41,"tag":67,"props":1390,"children":1391},{},[1392,1397],{"type":41,"tag":225,"props":1393,"children":1394},{},[1395],{"type":47,"value":1396},"Centered image on two-tone field",{"type":47,"value":1398},": place a single image inside a constrained group over a split-color background for a gallery, collection, or album-style pattern.",{"type":41,"tag":57,"props":1400,"children":1401},{},[1402,1404,1409],{"type":47,"value":1403},"These moves should still pass the technical checklist: valid block markup, translatable\u002Fescaped strings, local or approved assets, accessible labels, no scripts, no inline ",{"type":41,"tag":73,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":47,"value":237},{"type":47,"value":1410}," tags, and no custom CSS classes.",{"type":41,"tag":522,"props":1412,"children":1414},{"id":1413},"_2-plan-block-structure",[1415],{"type":47,"value":1416},"2) Plan block structure",{"type":41,"tag":57,"props":1418,"children":1419},{},[1420],{"type":47,"value":1421},"Sketch the nesting tree before writing markup. Example for a hero pattern:",{"type":41,"tag":1423,"props":1424,"children":1428},"pre",{"className":1425,"code":1427,"language":47},[1426],"language-text","Group (full-width, constrained layout, dark bg, vertical padding 80)\n  Group (constrained inner, flex vertical, center align)\n    Paragraph (uppercase label, small, letter-spacing, accent color)\n    Heading (h2, xx-large, heading font, tight line-height)\n    Paragraph (lead text, large, secondary color)\n    Buttons (flex, center)\n      Button (primary bg, base text)\n      Button (outline style)\n",[1429],{"type":41,"tag":73,"props":1430,"children":1432},{"__ignoreMap":1431},"",[1433],{"type":47,"value":1427},{"type":41,"tag":57,"props":1435,"children":1436},{},[1437],{"type":47,"value":1438},"This step catches nesting errors and ensures intentional hierarchy before you write a single comment tag.",{"type":41,"tag":522,"props":1440,"children":1442},{"id":1441},"_3-write-the-pattern-file",[1443],{"type":47,"value":1444},"3) Write the pattern file",{"type":41,"tag":57,"props":1446,"children":1447},{},[1448],{"type":47,"value":1449},"Assemble the PHP header and block markup.",{"type":41,"tag":57,"props":1451,"children":1452},{},[1453,1458],{"type":41,"tag":225,"props":1454,"children":1455},{},[1456],{"type":47,"value":1457},"File header",{"type":47,"value":1459}," (for theme auto-registration):",{"type":41,"tag":1423,"props":1461,"children":1465},{"className":1462,"code":1463,"language":1464,"meta":1431,"style":1431},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?php\n\u002F**\n * Title: [Descriptive Name]\n * Slug: theme-slug\u002Fpattern-name\n * Categories: [comma-separated slugs]\n * Keywords: [search terms]\n * Viewport Width: 1400\n * Block Types: [if starter\u002Ftemplate part pattern]\n * Template Types: [if template pattern]\n *\u002F\n?>\n","php",[1466],{"type":41,"tag":73,"props":1467,"children":1468},{"__ignoreMap":1431},[1469,1480,1489,1498,1507,1516,1525,1534,1543,1552,1561],{"type":41,"tag":1470,"props":1471,"children":1474},"span",{"class":1472,"line":1473},"line",1,[1475],{"type":41,"tag":1470,"props":1476,"children":1477},{},[1478],{"type":47,"value":1479},"\u003C?php\n",{"type":41,"tag":1470,"props":1481,"children":1483},{"class":1472,"line":1482},2,[1484],{"type":41,"tag":1470,"props":1485,"children":1486},{},[1487],{"type":47,"value":1488},"\u002F**\n",{"type":41,"tag":1470,"props":1490,"children":1492},{"class":1472,"line":1491},3,[1493],{"type":41,"tag":1470,"props":1494,"children":1495},{},[1496],{"type":47,"value":1497}," * Title: [Descriptive Name]\n",{"type":41,"tag":1470,"props":1499,"children":1501},{"class":1472,"line":1500},4,[1502],{"type":41,"tag":1470,"props":1503,"children":1504},{},[1505],{"type":47,"value":1506}," * Slug: theme-slug\u002Fpattern-name\n",{"type":41,"tag":1470,"props":1508,"children":1510},{"class":1472,"line":1509},5,[1511],{"type":41,"tag":1470,"props":1512,"children":1513},{},[1514],{"type":47,"value":1515}," * Categories: [comma-separated slugs]\n",{"type":41,"tag":1470,"props":1517,"children":1519},{"class":1472,"line":1518},6,[1520],{"type":41,"tag":1470,"props":1521,"children":1522},{},[1523],{"type":47,"value":1524}," * Keywords: [search terms]\n",{"type":41,"tag":1470,"props":1526,"children":1528},{"class":1472,"line":1527},7,[1529],{"type":41,"tag":1470,"props":1530,"children":1531},{},[1532],{"type":47,"value":1533}," * Viewport Width: 1400\n",{"type":41,"tag":1470,"props":1535,"children":1537},{"class":1472,"line":1536},8,[1538],{"type":41,"tag":1470,"props":1539,"children":1540},{},[1541],{"type":47,"value":1542}," * Block Types: [if starter\u002Ftemplate part pattern]\n",{"type":41,"tag":1470,"props":1544,"children":1546},{"class":1472,"line":1545},9,[1547],{"type":41,"tag":1470,"props":1548,"children":1549},{},[1550],{"type":47,"value":1551}," * Template Types: [if template pattern]\n",{"type":41,"tag":1470,"props":1553,"children":1555},{"class":1472,"line":1554},10,[1556],{"type":41,"tag":1470,"props":1557,"children":1558},{},[1559],{"type":47,"value":1560}," *\u002F\n",{"type":41,"tag":1470,"props":1562,"children":1564},{"class":1472,"line":1563},11,[1565],{"type":41,"tag":1470,"props":1566,"children":1567},{},[1568],{"type":47,"value":1569},"?>\n",{"type":41,"tag":57,"props":1571,"children":1572},{},[1573,1574,1579,1581,1587],{"type":47,"value":498},{"type":41,"tag":73,"props":1575,"children":1577},{"className":1576},[],[1578],{"type":47,"value":319},{"type":47,"value":1580}," for all header fields and PHP rules.\nReference: ",{"type":41,"tag":73,"props":1582,"children":1584},{"className":1583},[],[1585],{"type":47,"value":1586},"references\u002Fpattern-categories-and-types.md",{"type":47,"value":1588}," for category selection and template types.",{"type":41,"tag":57,"props":1590,"children":1591},{},[1592,1594,1599,1600,1606,1608,1614,1615,1621,1623,1629,1631,1637,1639,1645,1647,1652,1654,1659],{"type":47,"value":1593},"For plugin or conditional patterns, register manually on ",{"type":41,"tag":73,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":47,"value":271},{"type":47,"value":1250},{"type":41,"tag":73,"props":1601,"children":1603},{"className":1602},[],[1604],{"type":47,"value":1605},"register_block_pattern()",{"type":47,"value":1607},". Use translated ",{"type":41,"tag":73,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":47,"value":1613},"title",{"type":47,"value":283},{"type":41,"tag":73,"props":1616,"children":1618},{"className":1617},[],[1619],{"type":47,"value":1620},"description",{"type":47,"value":1622},", and ",{"type":41,"tag":73,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":47,"value":1628},"keywords",{"type":47,"value":1630},"; keep ",{"type":41,"tag":73,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":47,"value":1636},"content",{"type":47,"value":1638}," static block markup; and avoid runtime queries. Register custom categories before using them with ",{"type":41,"tag":73,"props":1640,"children":1642},{"className":1641},[],[1643],{"type":47,"value":1644},"register_block_pattern_category()",{"type":47,"value":1646}," or define theme-owned categories in ",{"type":41,"tag":73,"props":1648,"children":1650},{"className":1649},[],[1651],{"type":47,"value":183},{"type":47,"value":1653},". For WordPress versions before filesystem auto-registration support, use manual registration instead of ",{"type":41,"tag":73,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":47,"value":78},{"type":47,"value":1660}," auto-discovery.",{"type":41,"tag":57,"props":1662,"children":1663},{},[1664],{"type":41,"tag":225,"props":1665,"children":1666},{},[1667],{"type":47,"value":1668},"Block markup body:",{"type":41,"tag":63,"props":1670,"children":1671},{},[1672,1677,1682,1694,1706],{"type":41,"tag":67,"props":1673,"children":1674},{},[1675],{"type":47,"value":1676},"Follow the nesting tree from step 3",{"type":41,"tag":67,"props":1678,"children":1679},{},[1680],{"type":47,"value":1681},"Use preset slugs for colors, font sizes, spacing",{"type":41,"tag":67,"props":1683,"children":1684},{},[1685,1687,1692],{"type":47,"value":1686},"Include ",{"type":41,"tag":73,"props":1688,"children":1690},{"className":1689},[],[1691],{"type":47,"value":304},{"type":47,"value":1693}," for all visible text",{"type":41,"tag":67,"props":1695,"children":1696},{},[1697,1698,1704],{"type":47,"value":1686},{"type":41,"tag":73,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":47,"value":1703},"esc_url( get_theme_file_uri() )",{"type":47,"value":1705}," for theme images",{"type":41,"tag":67,"props":1707,"children":1708},{},[1709],{"type":47,"value":1710},"Use placeholder text that reflects real content (not \"Lorem ipsum\" — use realistic example text appropriate to the pattern's purpose)",{"type":41,"tag":522,"props":1712,"children":1714},{"id":1713},"_4-design-quality-check",[1715],{"type":47,"value":1716},"4) Design quality check",{"type":41,"tag":57,"props":1718,"children":1719},{},[1720,1722,1727],{"type":47,"value":1721},"Review against anti-patterns (",{"type":41,"tag":73,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":47,"value":512},{"type":47,"value":1728},"):",{"type":41,"tag":63,"props":1730,"children":1733},{"className":1731},[1732],"contains-task-list",[1734,1754,1769,1784,1799,1814,1829,1844],{"type":41,"tag":67,"props":1735,"children":1738},{"className":1736},[1737],"task-list-item",[1739,1745,1747,1752],{"type":41,"tag":1740,"props":1741,"children":1744},"input",{"disabled":1742,"type":1743},true,"checkbox",[],{"type":47,"value":1746}," ",{"type":41,"tag":225,"props":1748,"children":1749},{},[1750],{"type":47,"value":1751},"Not generic",{"type":47,"value":1753},": pattern makes at least 3 distinctive design choices",{"type":41,"tag":67,"props":1755,"children":1757},{"className":1756},[1737],[1758,1761,1762,1767],{"type":41,"tag":1740,"props":1759,"children":1760},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1763,"children":1764},{},[1765],{"type":47,"value":1766},"Layout variety",{"type":47,"value":1768},": not defaulting to 3 equal columns or uniform symmetric layouts",{"type":41,"tag":67,"props":1770,"children":1772},{"className":1771},[1737],[1773,1776,1777,1782],{"type":41,"tag":1740,"props":1774,"children":1775},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1778,"children":1779},{},[1780],{"type":47,"value":1781},"Color rhythm",{"type":47,"value":1783},": sections alternate or vary backgrounds — not all the same",{"type":41,"tag":67,"props":1785,"children":1787},{"className":1786},[1737],[1788,1791,1792,1797],{"type":41,"tag":1740,"props":1789,"children":1790},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1793,"children":1794},{},[1795],{"type":47,"value":1796},"Typography contrast",{"type":47,"value":1798},": headings clearly distinct from body (size, family, or weight)",{"type":41,"tag":67,"props":1800,"children":1802},{"className":1801},[1737],[1803,1806,1807,1812],{"type":41,"tag":1740,"props":1804,"children":1805},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1808,"children":1809},{},[1810],{"type":47,"value":1811},"Spatial intention",{"type":47,"value":1813},": padding and gaps vary by context, not uniform everywhere",{"type":41,"tag":67,"props":1815,"children":1817},{"className":1816},[1737],[1818,1821,1822,1827],{"type":41,"tag":1740,"props":1819,"children":1820},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1823,"children":1824},{},[1825],{"type":47,"value":1826},"Meaningful content",{"type":47,"value":1828},": placeholder text reflects real use, buttons describe actions",{"type":41,"tag":67,"props":1830,"children":1832},{"className":1831},[1737],[1833,1836,1837,1842],{"type":41,"tag":1740,"props":1834,"children":1835},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1838,"children":1839},{},[1840],{"type":47,"value":1841},"Specific structure",{"type":47,"value":1843},": comparisons, timelines, schedules, pricing, menus, and documentation cards have labels that make sense without relying on visual position alone",{"type":41,"tag":67,"props":1845,"children":1847},{"className":1846},[1737],[1848,1851,1852,1857],{"type":41,"tag":1740,"props":1849,"children":1850},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":225,"props":1853,"children":1854},{},[1855],{"type":47,"value":1856},"Restrained but distinctive",{"type":47,"value":1858},": corporate\u002Fprofessional patterns still include a clear hierarchy, accent, or layout choice; playful patterns do not become a one-note palette or repeated gradient treatment",{"type":41,"tag":522,"props":1860,"children":1862},{"id":1861},"_5-technical-validation",[1863],{"type":47,"value":1864},"5) Technical validation",{"type":41,"tag":63,"props":1866,"children":1868},{"className":1867},[1732],[1869,1890,1899,1919,1933,1954,1963,1972,1981,2003,2026,2035,2044],{"type":41,"tag":67,"props":1870,"children":1872},{"className":1871},[1737],[1873,1876,1878,1883,1885],{"type":41,"tag":1740,"props":1874,"children":1875},{"disabled":1742,"type":1743},[],{"type":47,"value":1877}," Every ",{"type":41,"tag":73,"props":1879,"children":1881},{"className":1880},[],[1882],{"type":47,"value":442},{"type":47,"value":1884}," has matching ",{"type":41,"tag":73,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":47,"value":450},{"type":41,"tag":67,"props":1891,"children":1893},{"className":1892},[1737],[1894,1897],{"type":41,"tag":1740,"props":1895,"children":1896},{"disabled":1742,"type":1743},[],{"type":47,"value":1898}," JSON in block comments is valid (no trailing commas, strings double-quoted)",{"type":41,"tag":67,"props":1900,"children":1902},{"className":1901},[1737],[1903,1906,1908,1913,1914],{"type":41,"tag":1740,"props":1904,"children":1905},{"disabled":1742,"type":1743},[],{"type":47,"value":1907}," All user-visible strings use ",{"type":41,"tag":73,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":47,"value":304},{"type":47,"value":1008},{"type":41,"tag":73,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":47,"value":337},{"type":41,"tag":67,"props":1920,"children":1922},{"className":1921},[1737],[1923,1926,1928],{"type":41,"tag":1740,"props":1924,"children":1925},{"disabled":1742,"type":1743},[],{"type":47,"value":1927}," All URLs use ",{"type":41,"tag":73,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":47,"value":352},{"type":41,"tag":67,"props":1934,"children":1936},{"className":1935},[1737],[1937,1940,1942,1948,1949],{"type":41,"tag":1740,"props":1938,"children":1939},{"disabled":1742,"type":1743},[],{"type":47,"value":1941}," All attribute values with translatable text use ",{"type":41,"tag":73,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":47,"value":1947},"esc_attr_e()",{"type":47,"value":1008},{"type":41,"tag":73,"props":1950,"children":1952},{"className":1951},[],[1953],{"type":47,"value":344},{"type":41,"tag":67,"props":1955,"children":1957},{"className":1956},[1737],[1958,1961],{"type":41,"tag":1740,"props":1959,"children":1960},{"disabled":1742,"type":1743},[],{"type":47,"value":1962}," Informational images have descriptive translated alt text; decorative images use empty alt text intentionally",{"type":41,"tag":67,"props":1964,"children":1966},{"className":1965},[1737],[1967,1970],{"type":41,"tag":1740,"props":1968,"children":1969},{"disabled":1742,"type":1743},[],{"type":47,"value":1971}," Heading levels are sequential (h2 → h3 → h4, never skip)",{"type":41,"tag":67,"props":1973,"children":1975},{"className":1974},[1737],[1976,1979],{"type":41,"tag":1740,"props":1977,"children":1978},{"disabled":1742,"type":1743},[],{"type":47,"value":1980}," Preset slugs are valid defaults or documented as theme-specific",{"type":41,"tag":67,"props":1982,"children":1984},{"className":1983},[1737],[1985,1988,1989,1995,1997],{"type":41,"tag":1740,"props":1986,"children":1987},{"disabled":1742,"type":1743},[],{"type":47,"value":1746},{"type":41,"tag":73,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":47,"value":1994},"Slug",{"type":47,"value":1996}," in header uses correct namespace: ",{"type":41,"tag":73,"props":1998,"children":2000},{"className":1999},[],[2001],{"type":47,"value":2002},"theme-slug\u002Fpattern-name",{"type":41,"tag":67,"props":2004,"children":2006},{"className":2005},[1737],[2007,2010,2012,2017,2019,2024],{"type":41,"tag":1740,"props":2008,"children":2009},{"disabled":1742,"type":1743},[],{"type":47,"value":2011}," No inline ",{"type":41,"tag":73,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":47,"value":237},{"type":47,"value":2018},", no ",{"type":41,"tag":73,"props":2020,"children":2022},{"className":2021},[],[2023],{"type":47,"value":255},{"type":47,"value":2025},", no custom CSS classes",{"type":41,"tag":67,"props":2027,"children":2029},{"className":2028},[1737],[2030,2033],{"type":41,"tag":1740,"props":2031,"children":2032},{"disabled":1742,"type":1743},[],{"type":47,"value":2034}," No query-dependent PHP functions",{"type":41,"tag":67,"props":2036,"children":2038},{"className":2037},[1737],[2039,2042],{"type":41,"tag":1740,"props":2040,"children":2041},{"disabled":1742,"type":1743},[],{"type":47,"value":2043}," Button\u002Flink labels are action-specific; avoid vague labels such as \"Click Here\" or \"Read More\"",{"type":41,"tag":67,"props":2045,"children":2047},{"className":2046},[1737],[2048,2051,2053,2058],{"type":41,"tag":1740,"props":2049,"children":2050},{"disabled":1742,"type":1743},[],{"type":47,"value":2052}," Updating an existing pattern preserves the ",{"type":41,"tag":73,"props":2054,"children":2056},{"className":2055},[],[2057],{"type":47,"value":1994},{"type":47,"value":2059}," unless intentionally creating a new pattern",{"type":41,"tag":50,"props":2061,"children":2063},{"id":2062},"verification",[2064],{"type":47,"value":2065},"Verification",{"type":41,"tag":57,"props":2067,"children":2068},{},[2069],{"type":47,"value":2070},"Test the pattern in a real WordPress environment:",{"type":41,"tag":57,"props":2072,"children":2073},{},[2074],{"type":41,"tag":225,"props":2075,"children":2076},{},[2077],{"type":47,"value":2078},"Using WordPress Playground (recommended):",{"type":41,"tag":1423,"props":2080,"children":2084},{"className":2081,"code":2082,"language":2083,"meta":1431,"style":1431},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx @wp-playground\u002Fcli@latest server --auto-mount\n","bash",[2085],{"type":41,"tag":73,"props":2086,"children":2087},{"__ignoreMap":1431},[2088],{"type":41,"tag":1470,"props":2089,"children":2090},{"class":1472,"line":1473},[2091,2097,2103,2108],{"type":41,"tag":1470,"props":2092,"children":2094},{"style":2093},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2095],{"type":47,"value":2096},"npx",{"type":41,"tag":1470,"props":2098,"children":2100},{"style":2099},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[2101],{"type":47,"value":2102}," @wp-playground\u002Fcli@latest",{"type":41,"tag":1470,"props":2104,"children":2105},{"style":2099},[2106],{"type":47,"value":2107}," server",{"type":41,"tag":1470,"props":2109,"children":2110},{"style":2099},[2111],{"type":47,"value":2112}," --auto-mount\n",{"type":41,"tag":57,"props":2114,"children":2115},{},[2116],{"type":47,"value":2117},"Mount the theme directory and verify:",{"type":41,"tag":63,"props":2119,"children":2120},{},[2121,2126,2131,2136,2141],{"type":41,"tag":67,"props":2122,"children":2123},{},[2124],{"type":47,"value":2125},"Pattern appears in inserter under specified categories",{"type":41,"tag":67,"props":2127,"children":2128},{},[2129],{"type":47,"value":2130},"Pattern inserts without block validation errors",{"type":41,"tag":67,"props":2132,"children":2133},{},[2134],{"type":47,"value":2135},"Layout renders correctly at desktop and mobile widths",{"type":41,"tag":67,"props":2137,"children":2138},{},[2139],{"type":47,"value":2140},"Content is editable (text, images, buttons)",{"type":41,"tag":67,"props":2142,"children":2143},{},[2144,2146,2152],{"type":47,"value":2145},"If ",{"type":41,"tag":73,"props":2147,"children":2149},{"className":2148},[],[2150],{"type":47,"value":2151},"templateLock",{"type":47,"value":2153}," is used, locked elements resist editing",{"type":41,"tag":57,"props":2155,"children":2156},{},[2157,2159,2164],{"type":47,"value":2158},"For template patterns, verify the Site Editor offers the pattern in the expected template replacement flow. If ",{"type":41,"tag":73,"props":2160,"children":2162},{"className":2161},[],[2163],{"type":47,"value":1230},{"type":47,"value":2165}," is used, confirm it is hidden from the general inserter but still available where intended.",{"type":41,"tag":57,"props":2167,"children":2168},{},[2169],{"type":41,"tag":225,"props":2170,"children":2171},{},[2172],{"type":47,"value":2173},"Manual check:",{"type":41,"tag":63,"props":2175,"children":2176},{},[2177,2182,2187],{"type":41,"tag":67,"props":2178,"children":2179},{},[2180],{"type":47,"value":2181},"Paste block markup into the Code Editor view in WordPress",{"type":41,"tag":67,"props":2183,"children":2184},{},[2185],{"type":47,"value":2186},"Switch to Visual Editor — blocks should parse without \"Attempt Block Recovery\" prompts",{"type":41,"tag":67,"props":2188,"children":2189},{},[2190],{"type":47,"value":2191},"If recovery is needed, the markup has syntax errors",{"type":41,"tag":57,"props":2193,"children":2194},{},[2195],{"type":47,"value":2196},"Run the repo's existing lint, build, or test commands if the pattern change touches assets, generated files, or registration code.",{"type":41,"tag":57,"props":2198,"children":2199},{},[2200],{"type":47,"value":2201},"When updating an existing pattern, remember that inserted pattern content is copied into posts\u002Ftemplates. Changing the pattern file does not retroactively update already inserted content, and changing block names or saved markup can create recovery prompts for newly inserted content.",{"type":41,"tag":57,"props":2203,"children":2204},{},[2205],{"type":47,"value":2206},"For PR or package review, confirm the diff is scoped to the intended pattern files, references, scripts, and eval scenarios. Do not mix unrelated repo updates into a pattern change.",{"type":41,"tag":50,"props":2208,"children":2210},{"id":2209},"failure-modes-debugging",[2211],{"type":47,"value":2212},"Failure modes \u002F debugging",{"type":41,"tag":57,"props":2214,"children":2215},{},[2216,2218,2223,2224,2229,2230,2235],{"type":47,"value":2217},"Start with ",{"type":41,"tag":73,"props":2219,"children":2221},{"className":2220},[],[2222],{"type":47,"value":504},{"type":47,"value":283},{"type":41,"tag":73,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":47,"value":319},{"type":47,"value":1622},{"type":41,"tag":73,"props":2231,"children":2233},{"className":2232},[],[2234],{"type":47,"value":512},{"type":47,"value":138},{"type":41,"tag":57,"props":2237,"children":2238},{},[2239],{"type":47,"value":2240},"Common failures:",{"type":41,"tag":63,"props":2242,"children":2243},{},[2244,2289,2312,2322,2363,2373,2402,2426,2436,2446,2463,2473],{"type":41,"tag":67,"props":2245,"children":2246},{},[2247,2252,2254,2260,2261,2266,2267,2273,2275,2280,2282,2287],{"type":41,"tag":225,"props":2248,"children":2249},{},[2250],{"type":47,"value":2251},"Pattern missing from inserter",{"type":47,"value":2253},": check required ",{"type":41,"tag":73,"props":2255,"children":2257},{"className":2256},[],[2258],{"type":47,"value":2259},"Title",{"type":47,"value":283},{"type":41,"tag":73,"props":2262,"children":2264},{"className":2263},[],[2265],{"type":47,"value":1994},{"type":47,"value":1622},{"type":41,"tag":73,"props":2268,"children":2270},{"className":2269},[],[2271],{"type":47,"value":2272},"Categories",{"type":47,"value":2274}," headers; confirm the file is under ",{"type":41,"tag":73,"props":2276,"children":2278},{"className":2277},[],[2279],{"type":47,"value":78},{"type":47,"value":2281},"; confirm ",{"type":41,"tag":73,"props":2283,"children":2285},{"className":2284},[],[2286],{"type":47,"value":1230},{"type":47,"value":2288}," is not hiding it.",{"type":41,"tag":67,"props":2290,"children":2291},{},[2292,2297,2299,2304,2305,2311],{"type":41,"tag":225,"props":2293,"children":2294},{},[2295],{"type":47,"value":2296},"Wrong pattern shown or overwritten",{"type":47,"value":2298},": check for slug collisions and ensure the slug is namespaced as ",{"type":41,"tag":73,"props":2300,"children":2302},{"className":2301},[],[2303],{"type":47,"value":2002},{"type":47,"value":1008},{"type":41,"tag":73,"props":2306,"children":2308},{"className":2307},[],[2309],{"type":47,"value":2310},"plugin-slug\u002Fpattern-name",{"type":47,"value":138},{"type":41,"tag":67,"props":2313,"children":2314},{},[2315,2320],{"type":41,"tag":225,"props":2316,"children":2317},{},[2318],{"type":47,"value":2319},"Block recovery prompt appears",{"type":47,"value":2321},": validate block comment nesting, JSON syntax, and closing comments.",{"type":41,"tag":67,"props":2323,"children":2324},{},[2325,2330,2332,2337,2338,2343,2344,2349,2350,2355,2356,2361],{"type":41,"tag":225,"props":2326,"children":2327},{},[2328],{"type":47,"value":2329},"Strings are not translated or escaped",{"type":47,"value":2331},": replace raw text\u002FPHP output with ",{"type":41,"tag":73,"props":2333,"children":2335},{"className":2334},[],[2336],{"type":47,"value":304},{"type":47,"value":283},{"type":41,"tag":73,"props":2339,"children":2341},{"className":2340},[],[2342],{"type":47,"value":337},{"type":47,"value":283},{"type":41,"tag":73,"props":2345,"children":2347},{"className":2346},[],[2348],{"type":47,"value":1947},{"type":47,"value":283},{"type":41,"tag":73,"props":2351,"children":2353},{"className":2352},[],[2354],{"type":47,"value":344},{"type":47,"value":346},{"type":41,"tag":73,"props":2357,"children":2359},{"className":2358},[],[2360],{"type":47,"value":352},{"type":47,"value":2362}," as appropriate.",{"type":41,"tag":67,"props":2364,"children":2365},{},[2366,2371],{"type":41,"tag":225,"props":2367,"children":2368},{},[2369],{"type":47,"value":2370},"Translations do not load",{"type":47,"value":2372},": verify the text domain matches the target theme\u002Fplugin.",{"type":41,"tag":67,"props":2374,"children":2375},{},[2376,2381,2383,2388,2389,2394,2395,2400],{"type":41,"tag":225,"props":2377,"children":2378},{},[2379],{"type":47,"value":2380},"Dynamic content is stale or unavailable",{"type":47,"value":2382},": remove query-dependent PHP (",{"type":41,"tag":73,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":47,"value":281},{"type":47,"value":283},{"type":41,"tag":73,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":47,"value":289},{"type":47,"value":283},{"type":41,"tag":73,"props":2396,"children":2398},{"className":2397},[],[2399],{"type":47,"value":296},{"type":47,"value":2401},") and use blocks such as Query Loop instead.",{"type":41,"tag":67,"props":2403,"children":2404},{},[2405,2410,2412,2417,2419,2424],{"type":41,"tag":225,"props":2406,"children":2407},{},[2408],{"type":47,"value":2409},"Query Loop output is incomplete",{"type":47,"value":2411},": check for ",{"type":41,"tag":73,"props":2413,"children":2415},{"className":2414},[],[2416],{"type":47,"value":1256},{"type":47,"value":2418},", post title\u002Fexcerpt\u002Fdate\u002Fimage blocks, pagination when needed, and ",{"type":41,"tag":73,"props":2420,"children":2422},{"className":2421},[],[2423],{"type":47,"value":1264},{"type":47,"value":2425}," fallback.",{"type":41,"tag":67,"props":2427,"children":2428},{},[2429,2434],{"type":41,"tag":225,"props":2430,"children":2431},{},[2432],{"type":47,"value":2433},"Archive\u002Fsearch\u002Fcategory\u002Fauthor context is wrong",{"type":47,"value":2435},": use inherited query context instead of hardcoded runtime PHP.",{"type":41,"tag":67,"props":2437,"children":2438},{},[2439,2444],{"type":41,"tag":225,"props":2440,"children":2441},{},[2442],{"type":47,"value":2443},"CPT or event listings are wrong",{"type":47,"value":2445},": confirm post type slugs, taxonomy\u002Fdate fields, and plugin-provided blocks before generating the pattern.",{"type":41,"tag":67,"props":2447,"children":2448},{},[2449,2454,2456,2461],{"type":41,"tag":225,"props":2450,"children":2451},{},[2452],{"type":47,"value":2453},"Styles do not match the theme",{"type":47,"value":2455},": confirm preset slugs exist in ",{"type":41,"tag":73,"props":2457,"children":2459},{"className":2458},[],[2460],{"type":47,"value":183},{"type":47,"value":2462},"; avoid unsupported theme-specific slugs unless documented.",{"type":41,"tag":67,"props":2464,"children":2465},{},[2466,2471],{"type":41,"tag":225,"props":2467,"children":2468},{},[2469],{"type":47,"value":2470},"Accessibility issues",{"type":47,"value":2472},": fix skipped heading levels, empty alt text for informational images, low-contrast preset combinations, vague button\u002Flink text, social icon labels, search labels, and color-only emphasis.",{"type":41,"tag":67,"props":2474,"children":2475},{},[2476,2481,2483,2488],{"type":41,"tag":225,"props":2477,"children":2478},{},[2479],{"type":47,"value":2480},"Manual registration fails",{"type":47,"value":2482},": confirm the code runs on ",{"type":41,"tag":73,"props":2484,"children":2486},{"className":2485},[],[2487],{"type":47,"value":271},{"type":47,"value":2489},", categories are registered before patterns, and pattern content remains static block markup.",{"type":41,"tag":50,"props":2491,"children":2493},{"id":2492},"escalation",[2494],{"type":47,"value":2495},"Escalation",{"type":41,"tag":57,"props":2497,"children":2498},{},[2499],{"type":47,"value":2500},"Stop and ask for help or consult canonical docs when:",{"type":41,"tag":63,"props":2502,"children":2503},{},[2504,2509,2514,2519,2530],{"type":41,"tag":67,"props":2505,"children":2506},{},[2507],{"type":47,"value":2508},"Theme-specific preset slugs, text domains, asset paths, or pattern categories cannot be verified.",{"type":41,"tag":67,"props":2510,"children":2511},{},[2512],{"type":47,"value":2513},"Color contrast, image meaning, or content hierarchy needs human design\u002Faccessibility judgment.",{"type":41,"tag":67,"props":2515,"children":2516},{},[2517],{"type":47,"value":2518},"Behavior depends on a WordPress\u002FGutenberg version that is not covered by this repo's compatibility contract.",{"type":41,"tag":67,"props":2520,"children":2521},{},[2522,2524,2529],{"type":47,"value":2523},"The request requires a custom block, dynamic rendering, or saved-block migration; route to ",{"type":41,"tag":73,"props":2525,"children":2527},{"className":2526},[],[2528],{"type":47,"value":128},{"type":47,"value":138},{"type":41,"tag":67,"props":2531,"children":2532},{},[2533,2535,2540],{"type":47,"value":2534},"The request requires frontend interactivity beyond native blocks; route to ",{"type":41,"tag":73,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":47,"value":136},{"type":47,"value":138},{"type":41,"tag":57,"props":2542,"children":2543},{},[2544],{"type":47,"value":2545},"Use WordPress Developer Resources, the Theme Handbook, and the Block Editor Handbook for upstream behavior before inventing version-sensitive guidance.",{"type":41,"tag":50,"props":2547,"children":2549},{"id":2548},"example-prompts",[2550],{"type":47,"value":2551},"Example Prompts",{"type":41,"tag":522,"props":2553,"children":2555},{"id":2554},"hero-section",[2556],{"type":47,"value":2557},"Hero Section",{"type":41,"tag":2559,"props":2560,"children":2561},"blockquote",{},[2562],{"type":41,"tag":57,"props":2563,"children":2564},{},[2565],{"type":47,"value":2566},"\"Create a bold hero pattern with a large heading, subtitle, and two CTA buttons. Dark background, full-width, for a creative agency theme.\"",{"type":41,"tag":57,"props":2568,"children":2569},{},[2570],{"type":47,"value":2571},"Expected: Cover or Group block with contrast bg, constrained inner, heading with xx-large + heading font, paragraph with secondary color, Buttons with primary + outline styles.",{"type":41,"tag":522,"props":2573,"children":2575},{"id":2574},"testimonial-grid",[2576],{"type":47,"value":2577},"Testimonial Grid",{"type":41,"tag":2559,"props":2579,"children":2580},{},[2581],{"type":41,"tag":57,"props":2582,"children":2583},{},[2584],{"type":47,"value":2585},"\"Create a 3-column testimonial grid with avatar, quote, name, and role. Alternating card backgrounds.\"",{"type":41,"tag":57,"props":2587,"children":2588},{},[2589],{"type":47,"value":2590},"Expected: Group wrapper, block-native grid or Columns layout (3 columns, responsive), inner Group cards with varied tertiary\u002Fbase backgrounds, Image block for avatar (rounded border-radius), Paragraph for quote (italic), Heading h3 for name, Paragraph small for role.",{"type":41,"tag":522,"props":2592,"children":2594},{"id":2593},"blog-post-listing",[2595],{"type":47,"value":2596},"Blog Post Listing",{"type":41,"tag":2559,"props":2598,"children":2599},{},[2600],{"type":41,"tag":57,"props":2601,"children":2602},{},[2603],{"type":47,"value":2604},"\"Create a starter page pattern for a blog index with featured post hero and 3-column grid of recent posts below.\"",{"type":41,"tag":57,"props":2606,"children":2607},{},[2608,2610,2615],{"type":47,"value":2609},"Expected: ",{"type":41,"tag":73,"props":2611,"children":2613},{"className":2612},[],[2614],{"type":47,"value":1205},{"type":47,"value":2616}," header, Query Loop for featured post (perPage 1, large layout), second Query Loop for grid (perPage 3, grid layout with post-template), clear visual separation between sections.",{"type":41,"tag":522,"props":2618,"children":2620},{"id":2619},"footer-with-columns",[2621],{"type":47,"value":2622},"Footer with Columns",{"type":41,"tag":2559,"props":2624,"children":2625},{},[2626],{"type":41,"tag":57,"props":2627,"children":2628},{},[2629],{"type":47,"value":2630},"\"Create a 4-column footer pattern with logo, navigation links, contact info, and social icons. Dark background.\"",{"type":41,"tag":57,"props":2632,"children":2633},{},[2634,2635,2641,2643,2648],{"type":47,"value":2609},{"type":41,"tag":73,"props":2636,"children":2638},{"className":2637},[],[2639],{"type":47,"value":2640},"Block Types: core\u002Ftemplate-part\u002Ffooter",{"type":47,"value":2642}," header, Group full-width with contrast bg, Columns (4), Site Logo block, Navigation or list blocks, Paragraph blocks for contact, Social Icons block. ",{"type":41,"tag":73,"props":2644,"children":2646},{"className":2645},[],[2647],{"type":47,"value":1230},{"type":47,"value":138},{"type":41,"tag":2650,"props":2651,"children":2652},"style",{},[2653],{"type":47,"value":2654},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2656,"total":2781},[2657,2668,2685,2699,2728,2749,2767],{"slug":2658,"name":2658,"fn":2659,"description":2660,"org":2661,"tags":2662,"stars":23,"repoUrl":24,"updatedAt":2667},"blueprint","create WordPress Playground blueprint files","Use when the deliverable is WordPress Playground Blueprint JSON or a Blueprint bundle, including creating, editing, reviewing, validating schema keys, choosing steps\u002Fresources, and debugging Blueprint files. For only running or sharing a Playground environment, use wp-playground.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2663,2664],{"name":9,"slug":8,"type":13},{"name":2665,"slug":2666,"type":13},"WordPress Playground","wordpress-playground","2026-07-27T06:08:32.306955",{"slug":2669,"name":2669,"fn":2670,"description":2671,"org":2672,"tags":2673,"stars":23,"repoUrl":24,"updatedAt":2684},"wordpress-router","route WordPress codebase tasks","Use when the user asks about WordPress codebases (plugins, themes, block themes, Gutenberg blocks, WP core checkouts) and you need to quickly classify the repo and route to the correct workflow\u002Fskill (blocks, theme.json, REST API, WP-CLI, performance, security, testing, release packaging).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2674,2677,2680,2681],{"name":2675,"slug":2676,"type":13},"Engineering","engineering",{"name":2678,"slug":2679,"type":13},"Triage","triage",{"name":9,"slug":8,"type":13},{"name":2682,"slug":2683,"type":13},"Workflow Automation","workflow-automation","2026-04-06T18:58:21.644368",{"slug":2686,"name":2686,"fn":2687,"description":2688,"org":2689,"tags":2690,"stars":23,"repoUrl":24,"updatedAt":2698},"wp-abilities-api","manage WordPress Abilities API definitions","Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, \u002Fwp-json\u002Fwp-abilities\u002Fv1\u002F*, @wordpress\u002Fabilities) including defining abilities, categories, meta, REST exposure, and permissions checks for clients.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2691,2694,2697],{"name":2692,"slug":2693,"type":13},"Access Control","access-control",{"name":2695,"slug":2696,"type":13},"API Development","api-development",{"name":9,"slug":8,"type":13},"2026-04-06T18:58:17.857773",{"slug":2700,"name":2700,"fn":2701,"description":2702,"org":2703,"tags":2704,"stars":23,"repoUrl":24,"updatedAt":2727},"wp-abilities-audit","audit WordPress plugins for Abilities API registration","Audit a WordPress plugin's REST surface and produce a standardized audit document proposing Abilities API registrations. Produces a markdown doc with a YAML schema and prose sections that humans and agents can both consume when planning a registration rollout. Works on any WP plugin.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2705,2708,2711,2714,2717,2720,2723,2724],{"name":2706,"slug":2707,"type":13},"Abilities API","abilities-api",{"name":2709,"slug":2710,"type":13},"Audit","audit",{"name":2712,"slug":2713,"type":13},"Code Analysis","code-analysis",{"name":2715,"slug":2716,"type":13},"Documentation","documentation",{"name":2718,"slug":2719,"type":13},"Plugin Development","plugin-development",{"name":2721,"slug":2722,"type":13},"REST API","rest-api",{"name":9,"slug":8,"type":13},{"name":2725,"slug":2726,"type":13},"YAML","yaml","2026-05-28T06:48:49.361753",{"slug":2729,"name":2729,"fn":2730,"description":2731,"org":2732,"tags":2733,"stars":23,"repoUrl":24,"updatedAt":2748},"wp-abilities-verify","verify WordPress plugin Abilities API registrations","Verify a WordPress plugin's Abilities API registrations: enumerate abilities, check that callback behavior matches each annotation's claim (the adversarial readonly-but-writes detection), validate permissions and schemas, and validate audit documents produced by wp-abilities-audit.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2734,2735,2736,2737,2738,2741,2744,2747],{"name":2706,"slug":2707,"type":13},{"name":2712,"slug":2713,"type":13},{"name":2718,"slug":2719,"type":13},{"name":2721,"slug":2722,"type":13},{"name":2739,"slug":2740,"type":13},"Security","security",{"name":2742,"slug":2743,"type":13},"Testing","testing",{"name":2745,"slug":2746,"type":13},"Validation","validation",{"name":9,"slug":8,"type":13},"2026-05-28T06:48:50.590811",{"slug":128,"name":128,"fn":2750,"description":2751,"org":2752,"tags":2753,"stars":23,"repoUrl":24,"updatedAt":2766},"develop WordPress Gutenberg blocks","Use when developing WordPress (Gutenberg) blocks: block.json metadata, register_block_type(_from_metadata), attributes\u002Fserialization, supports, dynamic rendering (render.php\u002Frender_callback), deprecations\u002Fmigrations, viewScript vs viewScriptModule, and @wordpress\u002Fscripts\u002F@wordpress\u002Fcreate-block build and test workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2754,2757,2759,2762,2765],{"name":2755,"slug":2756,"type":13},"Frontend","frontend",{"name":2758,"slug":1464,"type":13},"PHP",{"name":2760,"slug":2761,"type":13},"React","react",{"name":2763,"slug":2764,"type":13},"UI Components","ui-components",{"name":9,"slug":8,"type":13},"2026-04-06T18:58:24.172876",{"slug":2768,"name":2768,"fn":2769,"description":2770,"org":2771,"tags":2772,"stars":23,"repoUrl":24,"updatedAt":2780},"wp-block-themes","develop WordPress block themes","Use when developing WordPress block themes: theme.json (global settings\u002Fstyles), templates and template parts, patterns, style variations, and Site Editor troubleshooting (style hierarchy, overrides, caching).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2773,2774,2775,2778,2779],{"name":21,"slug":22,"type":13},{"name":2755,"slug":2756,"type":13},{"name":2776,"slug":2777,"type":13},"Themes","themes",{"name":2763,"slug":2764,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:58:27.909889",18,{"items":2783,"total":2781},[2784,2789,2796,2802,2813,2824,2832,2840,2852,2859,2879,2892],{"slug":2658,"name":2658,"fn":2659,"description":2660,"org":2785,"tags":2786,"stars":23,"repoUrl":24,"updatedAt":2667},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2787,2788],{"name":9,"slug":8,"type":13},{"name":2665,"slug":2666,"type":13},{"slug":2669,"name":2669,"fn":2670,"description":2671,"org":2790,"tags":2791,"stars":23,"repoUrl":24,"updatedAt":2684},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2792,2793,2794,2795],{"name":2675,"slug":2676,"type":13},{"name":2678,"slug":2679,"type":13},{"name":9,"slug":8,"type":13},{"name":2682,"slug":2683,"type":13},{"slug":2686,"name":2686,"fn":2687,"description":2688,"org":2797,"tags":2798,"stars":23,"repoUrl":24,"updatedAt":2698},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2799,2800,2801],{"name":2692,"slug":2693,"type":13},{"name":2695,"slug":2696,"type":13},{"name":9,"slug":8,"type":13},{"slug":2700,"name":2700,"fn":2701,"description":2702,"org":2803,"tags":2804,"stars":23,"repoUrl":24,"updatedAt":2727},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2805,2806,2807,2808,2809,2810,2811,2812],{"name":2706,"slug":2707,"type":13},{"name":2709,"slug":2710,"type":13},{"name":2712,"slug":2713,"type":13},{"name":2715,"slug":2716,"type":13},{"name":2718,"slug":2719,"type":13},{"name":2721,"slug":2722,"type":13},{"name":9,"slug":8,"type":13},{"name":2725,"slug":2726,"type":13},{"slug":2729,"name":2729,"fn":2730,"description":2731,"org":2814,"tags":2815,"stars":23,"repoUrl":24,"updatedAt":2748},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2816,2817,2818,2819,2820,2821,2822,2823],{"name":2706,"slug":2707,"type":13},{"name":2712,"slug":2713,"type":13},{"name":2718,"slug":2719,"type":13},{"name":2721,"slug":2722,"type":13},{"name":2739,"slug":2740,"type":13},{"name":2742,"slug":2743,"type":13},{"name":2745,"slug":2746,"type":13},{"name":9,"slug":8,"type":13},{"slug":128,"name":128,"fn":2750,"description":2751,"org":2825,"tags":2826,"stars":23,"repoUrl":24,"updatedAt":2766},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2827,2828,2829,2830,2831],{"name":2755,"slug":2756,"type":13},{"name":2758,"slug":1464,"type":13},{"name":2760,"slug":2761,"type":13},{"name":2763,"slug":2764,"type":13},{"name":9,"slug":8,"type":13},{"slug":2768,"name":2768,"fn":2769,"description":2770,"org":2833,"tags":2834,"stars":23,"repoUrl":24,"updatedAt":2780},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2835,2836,2837,2838,2839],{"name":21,"slug":22,"type":13},{"name":2755,"slug":2756,"type":13},{"name":2776,"slug":2777,"type":13},{"name":2763,"slug":2764,"type":13},{"name":9,"slug":8,"type":13},{"slug":136,"name":136,"fn":2841,"description":2842,"org":2843,"tags":2844,"stars":23,"repoUrl":24,"updatedAt":2851},"build interactive features with WordPress Interactivity API","Use when building or debugging WordPress Interactivity API features (data-wp-* directives, @wordpress\u002Finteractivity store\u002Fstate\u002Factions, block viewScriptModule integration, wp_interactivity_*()) including performance, hydration, and directive behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2845,2846,2847,2850],{"name":2695,"slug":2696,"type":13},{"name":2755,"slug":2756,"type":13},{"name":2848,"slug":2849,"type":13},"JavaScript","javascript",{"name":9,"slug":8,"type":13},"2026-04-06T18:58:20.397676",{"slug":4,"name":4,"fn":5,"description":6,"org":2853,"tags":2854,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2855,2856,2857,2858],{"name":18,"slug":19,"type":13},{"name":21,"slug":22,"type":13},{"name":15,"slug":16,"type":13},{"name":9,"slug":8,"type":13},{"slug":2860,"name":2860,"fn":2861,"description":2862,"org":2863,"tags":2864,"stars":23,"repoUrl":24,"updatedAt":2878},"wp-performance","investigate and improve WordPress performance","Use when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile\u002Fdoctor, Server-Timing, Query Monitor via REST headers), database\u002Fquery optimization, autoloaded options, object caching, cron, HTTP API calls, and safe verification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2865,2868,2871,2874,2877],{"name":2866,"slug":2867,"type":13},"Backend","backend",{"name":2869,"slug":2870,"type":13},"Database","database",{"name":2872,"slug":2873,"type":13},"Performance","performance",{"name":2875,"slug":2876,"type":13},"SQL","sql",{"name":9,"slug":8,"type":13},"2026-04-06T18:58:22.909053",{"slug":2880,"name":2880,"fn":2881,"description":2882,"org":2883,"tags":2884,"stars":23,"repoUrl":24,"updatedAt":2891},"wp-phpstan","run PHPStan static analysis on WordPress projects","Use when configuring, running, or fixing PHPStan static analysis in WordPress projects (plugins\u002Fthemes\u002Fsites): phpstan.neon setup, baselines, WordPress-specific typing, and handling third-party plugin classes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2885,2886,2887,2890],{"name":2712,"slug":2713,"type":13},{"name":2758,"slug":1464,"type":13},{"name":2888,"slug":2889,"type":13},"QA","qa",{"name":9,"slug":8,"type":13},"2026-04-06T18:58:15.318063",{"slug":2893,"name":2893,"fn":2894,"description":2895,"org":2896,"tags":2897,"stars":23,"repoUrl":24,"updatedAt":2906},"wp-playground","manage WordPress Playground instances","Use as the WordPress Playground routing wrapper for ambiguous Playground work, local CLI runs with @wp-playground\u002Fcli, playground.wordpress.net share links, browser previews, snapshots, mounts, version switching, and Xdebug. For Blueprint JSON authoring or review, use the blueprint skill directly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2898,2901,2904,2905],{"name":2899,"slug":2900,"type":13},"Local Development","local-development",{"name":2902,"slug":2903,"type":13},"Sandboxing","sandboxing",{"name":9,"slug":8,"type":13},{"name":2665,"slug":2666,"type":13},"2026-07-27T06:08:31.31025"]